diff options
author | Michał Górny <mgorny@gentoo.org> | 2022-06-03 11:12:51 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2022-06-03 11:12:51 +0200 |
commit | 4c1b9f5c19c00278f0b01bdbc820c761dedf6524 (patch) | |
tree | d7054ee7fd47645d1b64cd337f0cff667bac6e90 | |
parent | Update Guide to b559bd9 (diff) | |
download | python-4c1b9f5c19c00278f0b01bdbc820c761dedf6524.tar.gz python-4c1b9f5c19c00278f0b01bdbc820c761dedf6524.tar.bz2 python-4c1b9f5c19c00278f0b01bdbc820c761dedf6524.zip |
Update Guide to a71e618
Signed-off-by: Michał Górny <mgorny@gentoo.org>
31 files changed, 918 insertions, 1072 deletions
diff --git a/guide/_sources/pytest.rst.txt b/guide/_sources/pytest.rst.txt index e373715..1ebd276 100644 --- a/guide/_sources/pytest.rst.txt +++ b/guide/_sources/pytest.rst.txt @@ -47,7 +47,7 @@ requires using the local scope. python_test() { local EPYTEST_IGNORE=( # ignore whole file with missing dep - --ignore tests/test_client.py + tests/test_client.py ) local EPYTEST_DESELECT=( # deselect a single test diff --git a/guide/_static/basic.css b/guide/_static/basic.css index bf18350..9039e02 100644 --- a/guide/_static/basic.css +++ b/guide/_static/basic.css @@ -222,7 +222,7 @@ table.modindextable td { /* -- general body styles --------------------------------------------------- */ div.body { - min-width: 450px; + min-width: 360px; max-width: 800px; } @@ -335,13 +335,13 @@ p.sidebar-title { font-weight: bold; } -div.admonition, div.topic, blockquote { +div.admonition, div.topic, aside.topic, blockquote { clear: left; } /* -- topics ---------------------------------------------------------------- */ -div.topic { +div.topic, aside.topic { border: 1px solid #ccc; padding: 7px; margin: 10px 0 10px 0; @@ -380,6 +380,7 @@ div.body p.centered { div.sidebar > :last-child, aside.sidebar > :last-child, div.topic > :last-child, +aside.topic > :last-child, div.admonition > :last-child { margin-bottom: 0; } @@ -387,6 +388,7 @@ div.admonition > :last-child { div.sidebar::after, aside.sidebar::after, div.topic::after, +aside.topic::after, div.admonition::after, blockquote::after { display: block; @@ -428,10 +430,6 @@ table.docutils td, table.docutils th { border-bottom: 1px solid #aaa; } -table.footnote td, table.footnote th { - border: 0 !important; -} - th { text-align: left; padding-right: 5px; @@ -615,6 +613,7 @@ ul.simple p { margin-bottom: 0; } +/* Docutils 0.17 and older (footnotes & citations) */ dl.footnote > dt, dl.citation > dt { float: left; @@ -632,6 +631,33 @@ dl.citation > dd:after { clear: both; } +/* Docutils 0.18+ (footnotes & citations) */ +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +/* Footnotes & citations ends */ + dl.field-list { display: grid; grid-template-columns: fit-content(30%) auto; diff --git a/guide/_static/doctools.js b/guide/_static/doctools.js index e1bfd70..c3db08d 100644 --- a/guide/_static/doctools.js +++ b/guide/_static/doctools.js @@ -2,357 +2,263 @@ * doctools.js * ~~~~~~~~~~~ * - * Sphinx JavaScript utilities for all documentation. + * Base JavaScript utilities for all Sphinx HTML documentation. * * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ +"use strict"; -/** - * select a different prefix for underscore - */ -$u = _.noConflict(); - -/** - * make the code below compatible with browsers without - * an installed firebug like debugger -if (!window.console || !console.firebug) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", - "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", - "profile", "profileEnd"]; - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -} - */ - -/** - * 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 - */ -jQuery.urldecode = function(x) { - if (!x) { - return x +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); } - return decodeURIComponent(x.replace(/\+/g, ' ')); }; /** - * small helper function to urlencode strings + * highlight a given string on a node by wrapping it in + * span elements with the given class name. */ -jQuery.urlencode = encodeURIComponent; +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; -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; + 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); + } -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( + 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) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.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": node.parentNode, - "target": rect}); - } + 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 (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; }; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} +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. */ -var Documentation = { - - init : function() { - this.fixFirefoxAnchorBug(); - this.highlightSearchWords(); - this.initIndexTable(); - this.initOnKeyListeners(); +const Documentation = { + init: () => { + Documentation.highlightSearchWords(); + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); }, /** * i18n support */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", // gettext and ngettext don't access this so that the functions // can safely bound to a different name (_ = Documentation.gettext) - gettext : function(string) { - var translated = Documentation.TRANSLATIONS[string]; - if (typeof translated === 'undefined') - return string; - return (typeof translated === 'string') ? translated : translated[0]; - }, - - ngettext : function(singular, plural, n) { - var translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated === 'undefined') - return (n == 1) ? singular : plural; - return translated[Documentation.PLURALEXPR(n)]; - }, - - addTranslations : function(catalog) { - for (var key in catalog.messages) - this.TRANSLATIONS[key] = catalog.messages[key]; - this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); - this.LOCALE = catalog.locale; + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } }, - /** - * add context elements like header anchor links - */ - addContextElements : function() { - $('div[id] > :header:first').each(function() { - $('<a class="headerlink">\u00B6</a>'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this headline')). - appendTo(this); - }); - $('dt[id]').each(function() { - $('<a class="headerlink">\u00B6</a>'). - attr('href', '#' + this.id). - attr('title', _('Permalink to this definition')). - appendTo(this); - }); + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; }, - /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 - */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; }, /** * highlight the search words provided in the url in the text */ - highlightSearchWords : function() { - var params = $.getQueryParameters(); - var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; - if (terms.length) { - var body = $('div.body'); - if (!body.length) { - body = $('body'); - } - window.setTimeout(function() { - $.each(terms, function() { - body.highlightText(this.toLowerCase(), 'highlighted'); - }); - }, 10); - $('<p class="highlight-link"><a href="javascript:Documentation.' + - 'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>') - .appendTo($('#searchbox')); - } - }, + 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 - /** - * init the domain index toggle buttons - */ - initIndexTable : function() { - var togglers = $('img.toggler').click(function() { - var src = $(this).attr('src'); - var idnum = $(this).attr('id').substr(7); - $('tr.cg-' + idnum).toggle(); - if (src.substr(-9) === 'minus.png') - $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); - else - $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); - }).css('display', ''); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { - togglers.click(); - } + // 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 : function() { - $('#searchbox .highlight-link').fadeOut(300); - $('span.highlighted').removeClass('highlighted'); - var url = new URL(window.location); - url.searchParams.delete('highlight'); - window.history.replaceState({}, '', url); + 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 : function() { - $('input[name=q]').first().focus(); + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); }, /** - * make the url absolute + * Initialise the domain index toggle buttons */ - makeURL : function(relativeURL) { - return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; - }, + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; - /** - * get the current relative url - */ - getCurrentURL : function() { - var path = document.location.pathname; - var parts = path.split(/\//); - $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { - if (this === '..') - parts.pop(); - }); - var url = parts.join('/'); - return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); }, - initOnKeyListeners: function() { + initOnKeyListeners: () => { // only install a listener if it is really needed - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - return; + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; - $(document).keydown(function(event) { - var activeElementType = document.activeElement.tagName; - // don't navigate when in search box, textarea, dropdown or button - if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' - && activeElementType !== 'BUTTON') { - if (event.altKey || event.ctrlKey || event.metaKey) - return; + const blacklistedElements = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", + ]); + document.addEventListener("keydown", (event) => { + 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) { - case 'ArrowLeft': - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) - break; - var prevHref = $('link[rel="prev"]').prop('href'); - if (prevHref) { - window.location.href = prevHref; - return false; - } - break; - case 'ArrowRight': - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) - break; - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; - } - break; - case 'Escape': - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - break; - Documentation.hideSearchWords(); - return false; - } - } - - // some keyboard layouts may need Shift to get / + if (!event.shiftKey) { switch (event.key) { - case '/': - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) - break; - Documentation.focusSearchBar(); - return false; + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + case "Escape": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.hideSearchWords(); + event.preventDefault(); } } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } }); - } + }, }; // quick alias for translations -_ = Documentation.gettext; +const _ = Documentation.gettext; -$(document).ready(function() { - Documentation.init(); -}); +_ready(Documentation.init); diff --git a/guide/_static/documentation_options.js b/guide/_static/documentation_options.js index 724e382..a750e4d 100644 --- a/guide/_static/documentation_options.js +++ b/guide/_static/documentation_options.js @@ -1,7 +1,7 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), VERSION: '', - LANGUAGE: 'None', + LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', FILE_SUFFIX: '.html', @@ -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 diff --git a/guide/_static/jquery.js b/guide/_static/jquery.js index b061403..c4c6022 100644 --- a/guide/_static/jquery.js +++ b/guide/_static/jquery.js @@ -1,2 +1,2 @@ -/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S}); +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S}); diff --git a/guide/_static/language_data.js b/guide/_static/language_data.js index ebe2f03..2e22b06 100644 --- a/guide/_static/language_data.js +++ b/guide/_static/language_data.js @@ -10,7 +10,7 @@ * */ -var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; /* Non-minified version is copied as a separate JS file, is available */ @@ -197,101 +197,3 @@ var Stemmer = function() { } } - - - -var splitChars = (function() { - var result = {}; - var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, - 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, - 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, - 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, - 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, - 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, - 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, - 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, - 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, - 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; - var i, j, start, end; - for (i = 0; i < singles.length; i++) { - result[singles[i]] = true; - } - var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], - [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], - [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], - [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], - [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], - [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], - [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], - [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], - [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], - [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], - [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], - [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], - [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], - [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], - [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], - [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], - [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], - [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], - [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], - [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], - [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], - [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], - [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], - [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], - [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], - [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], - [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], - [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], - [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], - [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], - [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], - [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], - [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], - [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], - [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], - [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], - [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], - [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], - [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], - [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], - [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], - [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], - [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], - [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], - [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], - [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], - [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], - [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], - [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; - for (i = 0; i < ranges.length; i++) { - start = ranges[i][0]; - end = ranges[i][1]; - for (j = start; j <= end; j++) { - result[j] = true; - } - } - return result; -})(); - -function splitQuery(query) { - var result = []; - var start = -1; - for (var i = 0; i < query.length; i++) { - if (splitChars[query.charCodeAt(i)]) { - if (start !== -1) { - result.push(query.slice(start, i)); - start = -1; - } - } else if (start === -1) { - start = i; - } - } - if (start !== -1) { - result.push(query.slice(start)); - } - return result; -} - - diff --git a/guide/_static/searchtools.js b/guide/_static/searchtools.js index 0a44e85..ac4d586 100644 --- a/guide/_static/searchtools.js +++ b/guide/_static/searchtools.js @@ -8,18 +8,20 @@ * :license: BSD, see LICENSE for details. * */ +"use strict"; -if (!Scorer) { - /** - * Simple result scoring code. - */ +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { var Scorer = { // Implement the following function to further tweak the score for each result - // The function takes a result array [filename, title, anchor, descr, score] + // The function takes a result array [docname, title, anchor, descr, score, filename] // and returns the new score. /* - score: function(result) { - return result[4]; + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score }, */ @@ -28,9 +30,11 @@ if (!Scorer) { // or matches in the last dotted part of the object name objPartialMatch: 6, // Additive scores depending on the priority of the object - objPrio: {0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5}, // used to be unimportantResults + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, // Used when the priority is not in the mapping. objPrioDefault: 0, @@ -39,452 +43,455 @@ if (!Scorer) { partialTitle: 7, // query found in terms term: 5, - partialTerm: 2 + partialTerm: 2, }; } -if (!splitQuery) { - function splitQuery(query) { - return query.split(/\s+/); +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +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] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + 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 + "?" + params.toString() + anchor; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerText = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, highlightTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +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(), highlightTerms, searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, highlightTerms, searchTerms), + 5 + ); } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings } /** * Search Module */ -var Search = { - - _index : null, - _queued_query : null, - _pulse_status : -1, - - htmlToText : function(htmlString) { - var virtualDocument = document.implementation.createHTMLDocument('virtual'); - var htmlElement = $(htmlString, virtualDocument); - htmlElement.find('.headerlink').remove(); - docContent = htmlElement.find('[role=main]')[0]; - if(docContent === undefined) { - console.warn("Content block not found. Sphinx search tries to obtain it " + - "via '[role=main]'. Could you check your theme or template."); - return ""; - } - return docContent.textContent || docContent.innerText; +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = document + .createRange() + .createContextualFragment(htmlString); + _removeChildren(htmlElement.querySelectorAll(".headerlink")); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; }, - init : function() { - var params = $.getQueryParameters(); - if (params.q) { - var query = params.q[0]; - $('input[name="q"]')[0].value = query; - this.performSearch(query); - } + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); }, - loadIndex : function(url) { - $.ajax({type: "GET", url: url, data: null, - dataType: "script", cache: true, - complete: function(jqxhr, textstatus) { - if (textstatus != "success") { - document.getElementById("searchindexloader").src = url; - } - }}); - }, + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), - setIndex : function(index) { - var q; - this._index = index; - if ((q = this._queued_query) !== null) { - this._queued_query = null; - Search.query(q); + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); } }, - hasIndex : function() { - return this._index !== null; - }, + hasIndex: () => Search._index !== null, - deferQuery : function(query) { - this._queued_query = query; - }, + deferQuery: (query) => (Search._queued_query = query), - stopPulse : function() { - this._pulse_status = 0; - }, + stopPulse: () => (Search._pulse_status = -1), - startPulse : function() { - if (this._pulse_status >= 0) - return; - function pulse() { - var i; + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { Search._pulse_status = (Search._pulse_status + 1) % 4; - var dotString = ''; - for (i = 0; i < Search._pulse_status; i++) - dotString += '.'; - Search.dots.text(dotString); - if (Search._pulse_status > -1) - window.setTimeout(pulse, 500); - } + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; pulse(); }, /** * perform a search for something (or wait until index is loaded) */ - performSearch : function(query) { + performSearch: (query) => { // create the required interface elements - this.out = $('#search-results'); - this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out); - this.dots = $('<span></span>').appendTo(this.title); - this.status = $('<p class="search-summary"> </p>').appendTo(this.out); - this.output = $('<ul class="search"/>').appendTo(this.out); - - $('#search-progress').text(_('Preparing search...')); - this.startPulse(); + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); // index already loaded, the browser was quick! - if (this.hasIndex()) - this.query(query); - else - this.deferQuery(query); + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); }, /** * execute search (requires search index to be loaded) */ - query : function(query) { - var i; - - // stem the searchterms and add them to the correct list - var stemmer = new Stemmer(); - var searchterms = []; - var excluded = []; - var hlterms = []; - var tmp = splitQuery(query); - var objectterms = []; - for (i = 0; i < tmp.length; i++) { - if (tmp[i] !== "") { - objectterms.push(tmp[i].toLowerCase()); - } + query: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; - if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") { - // skip this "word" - continue; - } // stem the word - var word = stemmer.stemWord(tmp[i].toLowerCase()); - var toAppend; + let word = stemmer.stemWord(queryTermLower); // select the correct list - if (word[0] == '-') { - toAppend = excluded; - word = word.substr(1); - } + if (word[0] === "-") excludedTerms.add(word.substr(1)); else { - toAppend = searchterms; - hlterms.push(tmp[i].toLowerCase()); + searchTerms.add(word); + highlightTerms.add(queryTermLower); } - // only add if not already in the list - if (!$u.contains(toAppend, word)) - toAppend.push(word); - } - var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" ")); - - // console.debug('SEARCH: searching for:'); - // console.info('required: ', searchterms); - // console.info('excluded: ', excluded); + }); - // prepare search - var terms = this._index.terms; - var titleterms = this._index.titleterms; + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); - // array of [filename, title, anchor, descr, score] - var results = []; - $('#search-progress').empty(); + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); // lookup as object - for (i = 0; i < objectterms.length; i++) { - var others = [].concat(objectterms.slice(0, i), - objectterms.slice(i+1, objectterms.length)); - results = results.concat(this.performObjectSearch(objectterms[i], others)); - } + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); // lookup as search terms in fulltext - results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms)); + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); // let the scorer override scores with a custom scoring function - if (Scorer.score) { - for (i = 0; i < results.length; i++) - results[i][4] = Scorer.score(results[i]); - } + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); // now sort the results by score (in opposite order of appearance, since the // display function below uses pop() to retrieve items) and then // alphabetically - results.sort(function(a, b) { - var left = a[4]; - var right = b[4]; - if (left > right) { - return 1; - } else if (left < right) { - return -1; - } else { + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { // same score: sort alphabetically - left = a[1].toLowerCase(); - right = b[1].toLowerCase(); - return (left > right) ? -1 : ((left < right) ? 1 : 0); + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional } + return leftScore > rightScore ? 1 : -1; }); + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + // for debugging //Search.lastresults = results.slice(); // a copy - //console.info('search results:', Search.lastresults); + // console.info("search results:", Search.lastresults); // print the results - var resultCount = results.length; - function displayNextItem() { - // results left, load the summary and display it - if (results.length) { - var item = results.pop(); - var listItem = $('<li></li>'); - var requestUrl = ""; - var linkUrl = ""; - if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') { - // dirhtml builder - var dirname = item[0] + '/'; - if (dirname.match(/\/index\/$/)) { - dirname = dirname.substring(0, dirname.length-6); - } else if (dirname == 'index/') { - dirname = ''; - } - requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname; - linkUrl = requestUrl; - - } else { - // normal html builders - requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX; - linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX; - } - listItem.append($('<a/>').attr('href', - linkUrl + - highlightstring + item[2]).html(item[1])); - if (item[3]) { - listItem.append($('<span> (' + item[3] + ')</span>')); - Search.output.append(listItem); - setTimeout(function() { - displayNextItem(); - }, 5); - } else if (DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY) { - $.ajax({url: requestUrl, - dataType: "text", - complete: function(jqxhr, textstatus) { - var data = jqxhr.responseText; - if (data !== '' && data !== undefined) { - var summary = Search.makeSearchSummary(data, searchterms, hlterms); - if (summary) { - listItem.append(summary); - } - } - Search.output.append(listItem); - setTimeout(function() { - displayNextItem(); - }, 5); - }}); - } else { - // just display title - Search.output.append(listItem); - setTimeout(function() { - displayNextItem(); - }, 5); - } - } - // search finished, update title and status message - else { - Search.stopPulse(); - Search.title.text(_('Search Results')); - if (!resultCount) - Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.')); - else - Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount)); - Search.status.fadeIn(500); - } - } - displayNextItem(); + _displayNextItem(results, results.length, highlightTerms, searchTerms); }, /** * search for object names */ - performObjectSearch : function(object, otherterms) { - var filenames = this._index.filenames; - var docnames = this._index.docnames; - var objects = this._index.objects; - var objnames = this._index.objnames; - var titles = this._index.titles; - - var i; - var results = []; - - for (var prefix in objects) { - for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) { - var match = objects[prefix][iMatch]; - var name = match[4]; - var fullname = (prefix ? prefix + '.' : '') + name; - var fullnameLower = fullname.toLowerCase() - if (fullnameLower.indexOf(object) > -1) { - var score = 0; - var parts = fullnameLower.split('.'); - // check for different match types: exact matches of full name or - // "last name" (i.e. last dotted part) - if (fullnameLower == object || parts[parts.length - 1] == object) { - score += Scorer.objNameMatch; - // matches in last name - } else if (parts[parts.length - 1].indexOf(object) > -1) { - score += Scorer.objPartialMatch; - } - var objname = objnames[match[1]][2]; - var title = titles[match[0]]; - // If more than one term searched for, we require other words to be - // found in the name/title/description - if (otherterms.length > 0) { - var haystack = (prefix + ' ' + name + ' ' + - objname + ' ' + title).toLowerCase(); - var allfound = true; - for (i = 0; i < otherterms.length; i++) { - if (haystack.indexOf(otherterms[i]) == -1) { - allfound = false; - break; - } - } - if (!allfound) { - continue; - } - } - var descr = objname + _(', in ') + title; - - var anchor = match[3]; - if (anchor === '') - anchor = fullname; - else if (anchor == '-') - anchor = objnames[match[1]][1] + '-' + fullname; - // add custom score for some objects according to scorer - if (Scorer.objPrio.hasOwnProperty(match[2])) { - score += Scorer.objPrio[match[2]]; - } else { - score += Scorer.objPrioDefault; - } - results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]); - } + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; } - } + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); return results; }, /** - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions - */ - escapeRegExp : function(string) { - return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string - }, - - /** * search for full-text terms in the index */ - performTermsSearch : function(searchterms, excluded, terms, titleterms) { - var docnames = this._index.docnames; - var filenames = this._index.filenames; - var titles = this._index.titles; + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const docNames = Search._index.docnames; + const filenames = Search._index.filenames; + const titles = Search._index.titles; - var i, j, file; - var fileMap = {}; - var scoreMap = {}; - var results = []; + const scoreMap = new Map(); + const fileMap = new Map(); // perform the search on the required terms - for (i = 0; i < searchterms.length; i++) { - var word = searchterms[i]; - var files = []; - var _o = [ - {files: terms[word], score: Scorer.term}, - {files: titleterms[word], score: Scorer.title} + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, ]; // add support for partial matches if (word.length > 2) { - var word_regex = this.escapeRegExp(word); - for (var w in terms) { - if (w.match(word_regex) && !terms[word]) { - _o.push({files: terms[w], score: Scorer.partialTerm}) - } - } - for (var w in titleterms) { - if (w.match(word_regex) && !titleterms[word]) { - _o.push({files: titleterms[w], score: Scorer.partialTitle}) - } - } + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); } // no match but word was a required one - if ($u.every(_o, function(o){return o.files === undefined;})) { - break; - } + if (arr.every((record) => record.files === undefined)) return; + // found search word in contents - $u.each(_o, function(o) { - var _files = o.files; - if (_files === undefined) - return - - if (_files.length === undefined) - _files = [_files]; - files = files.concat(_files); - - // set score for the word in each file to Scorer.term - for (j = 0; j < _files.length; j++) { - file = _files[j]; - if (!(file in scoreMap)) - scoreMap[file] = {}; - scoreMap[file][word] = o.score; - } + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); }); // create the mapping - for (j = 0; j < files.length; j++) { - file = files[j]; - if (file in fileMap && fileMap[file].indexOf(word) === -1) - fileMap[file].push(word); - else - fileMap[file] = [word]; - } - } + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); // now check if the files don't contain excluded terms - for (file in fileMap) { - var valid = true; - + const results = []; + for (const [file, wordList] of fileMap) { // check if all requirements are matched - var filteredTermCount = // as search terms with length < 3 are discarded: ignore - searchterms.filter(function(term){return term.length > 2}).length + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; if ( - fileMap[file].length != searchterms.length && - fileMap[file].length != filteredTermCount - ) continue; + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; // ensure that none of the excluded terms is in the search result - for (i = 0; i < excluded.length; i++) { - if (terms[excluded[i]] == file || - titleterms[excluded[i]] == file || - $u.contains(terms[excluded[i]] || [], file) || - $u.contains(titleterms[excluded[i]] || [], file)) { - valid = false; - break; - } - } + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; - // if we have still a valid result we can add it to the result list - if (valid) { - // select one (max) score for the file. - // for better ranking, we should calculate ranking by using words statistics like basic tf-idf... - var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]})); - results.push([docnames[file], titles[file], '', null, score, filenames[file]]); - } + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); } return results; }, @@ -492,34 +499,33 @@ var Search = { /** * helper function to return a node containing the * search summary for a given text. keywords is a list - * of stemmed words, hlwords is the list of normal, unstemmed + * 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 : function(htmlText, keywords, hlwords) { - var text = Search.htmlToText(htmlText); - if (text == "") { - return null; - } - var textLower = text.toLowerCase(); - var start = 0; - $.each(keywords, function() { - var i = textLower.indexOf(this.toLowerCase()); - if (i > -1) - start = i; - }); - start = Math.max(start - 120, 0); - var excerpt = ((start > 0) ? '...' : '') + - $.trim(text.substr(start, 240)) + - ((start + 240 - text.length) ? '...' : ''); - var rv = $('<p class="context"></p>').text(excerpt); - $.each(hlwords, function() { - rv = rv.highlightText(this, 'highlighted'); - }); - return rv; - } + makeSearchSummary: (htmlText, keywords, highlightWords) => { + const text = Search.htmlToText(htmlText).toLowerCase(); + if (text === "") return null; + + const actualStartPosition = [...keywords] + .map((k) => text.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("div"); + summary.classList.add("context"); + summary.innerText = top + text.substr(startWithContext, 240).trim() + tail; + + highlightWords.forEach((highlightWord) => + _highlightText(summary, highlightWord, "highlighted") + ); + + return summary; + }, }; -$(document).ready(function() { - Search.init(); -}); +_ready(Search.init); diff --git a/guide/any.html b/guide/any.html index 4060af0..1330ad6 100644 --- a/guide/any.html +++ b/guide/any.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>python-any-r1 — build-time dependency — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,12 +35,12 @@ <div class="body" role="main"> <section id="python-any-r1-build-time-dependency"> -<h1>python-any-r1 — build-time dependency<a class="headerlink" href="#python-any-r1-build-time-dependency" title="Permalink to this headline">¶</a></h1> +<h1>python-any-r1 — build-time dependency<a class="headerlink" href="#python-any-r1-build-time-dependency" title="Permalink to this heading">¶</a></h1> <p>The <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code> eclass is used to enable Python support in packages needing it purely at build time.</p> <p>Eclass reference: <a class="reference external" href="https://devmanual.gentoo.org/eclass-reference/python-any-r1.eclass/index.html">python-any-r1.eclass(5)</a></p> <section id="basic-use-for-unconditional-python"> -<h2>Basic use for unconditional Python<a class="headerlink" href="#basic-use-for-unconditional-python" title="Permalink to this headline">¶</a></h2> +<h2>Basic use for unconditional Python<a class="headerlink" href="#basic-use-for-unconditional-python" title="Permalink to this heading">¶</a></h2> <p>The defining feature of this eclass is that it defines a <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> phase. It normally calls <code class="docutils literal notranslate"><span class="pre">python_setup</span></code> function in order to find a suitable Python interpreter, and set the global environment @@ -77,7 +78,7 @@ the three highlighted lines are specific to Python eclasses, plus the implicitly exported <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> phase.</p> <span class="target" id="index-0"></span><span class="target" id="index-1"></span><span class="target" id="index-2"></span></section> <section id="dependencies"> -<span id="index-3"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this headline">¶</a></h2> +<span id="index-3"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this heading">¶</a></h2> <p>When depending on other Python packages, USE dependencies need to be declared in order to ensure that the dependencies would be built against the Python implementation used for the package. When Python @@ -158,7 +159,7 @@ called at most once. In particular, it is invalid to split the above example into multiple <code class="docutils literal notranslate"><span class="pre">python_gen_any_dep</span></code> calls.</p> </section> <section id="conditional-python-use"> -<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Permalink to this headline">¶</a></h2> +<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Permalink to this heading">¶</a></h2> <p>In some packages, Python is only necessary with specific USE flag combinations. This is particularly common when Python is used for the test suite. In that case, the dependencies and <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> call @@ -203,7 +204,7 @@ need to be wrapped in appropriate USE conditions:</p> </div> </section> <section id="additional-conditional-dependencies"> -<h2>Additional conditional dependencies<a class="headerlink" href="#additional-conditional-dependencies" title="Permalink to this headline">¶</a></h2> +<h2>Additional conditional dependencies<a class="headerlink" href="#additional-conditional-dependencies" title="Permalink to this heading">¶</a></h2> <p>Another possible case is that Python is required unconditionally but some dependencies are required only conditionally to USE flags. The simplest way to achieve that is to use <code class="docutils literal notranslate"><span class="pre">${PYTHON_DEPS}</span></code> globally @@ -243,7 +244,7 @@ a similar condition in <code class="docutils literal notranslate"><span class="p </div> </section> <section id="multiple-sets-of-conditional-dependencies"> -<h2>Multiple sets of conditional dependencies<a class="headerlink" href="#multiple-sets-of-conditional-dependencies" title="Permalink to this headline">¶</a></h2> +<h2>Multiple sets of conditional dependencies<a class="headerlink" href="#multiple-sets-of-conditional-dependencies" title="Permalink to this heading">¶</a></h2> <p>The hardest case for this eclass is to declare multiple Python dependencies conditional to different USE flags. While there are multiple possible ways of doing that, the least error-prone is to move @@ -359,7 +360,7 @@ USE conditional blocks inside <code class="docutils literal notranslate"><span c </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -376,7 +377,7 @@ USE conditional blocks inside <code class="docutils literal notranslate"><span c ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/basic.html b/guide/basic.html index 53970e8..bd31abd 100644 --- a/guide/basic.html +++ b/guide/basic.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Common basics — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,13 +35,13 @@ <div class="body" role="main"> <section id="common-basics"> -<h1>Common basics<a class="headerlink" href="#common-basics" title="Permalink to this headline">¶</a></h1> +<h1>Common basics<a class="headerlink" href="#common-basics" title="Permalink to this heading">¶</a></h1> <p>The various eclasses in python-r1 try to follow a single design. You will probably use more than one of them, so it is worthwhile to shortly explain the common bits used by all of them, as well as the non-obvious differences between them.</p> <section id="python-compat"> -<span id="index-0"></span><h2>PYTHON_COMPAT<a class="headerlink" href="#python-compat" title="Permalink to this headline">¶</a></h2> +<span id="index-0"></span><h2>PYTHON_COMPAT<a class="headerlink" href="#python-compat" title="Permalink to this heading">¶</a></h2> <p>The <code class="docutils literal notranslate"><span class="pre">PYTHON_COMPAT</span></code> variable is used by all Python eclasses, and must be declared in all ebuilds before they are inherited. It specifies the list of Python implementations supported by the package.</p> @@ -56,7 +57,7 @@ inherit python-single-r1 </div> <span class="target" id="index-1"></span></section> <section id="python-deps-and-python-required-use"> -<span id="index-2"></span><h2>PYTHON_DEPS and PYTHON_REQUIRED_USE<a class="headerlink" href="#python-deps-and-python-required-use" title="Permalink to this headline">¶</a></h2> +<span id="index-2"></span><h2>PYTHON_DEPS and PYTHON_REQUIRED_USE<a class="headerlink" href="#python-deps-and-python-required-use" title="Permalink to this heading">¶</a></h2> <p>The <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code>, <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> and <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> eclasses all assume that the developer is responsible for explicitly putting the dependency strings and USE requirements in correct variables. @@ -78,7 +79,7 @@ Python unconditionally is to define the following:</p> by default.</p> <span class="target" id="index-3"></span></section> <section id="python-environment"> -<span id="index-4"></span><h2>Python environment<a class="headerlink" href="#python-environment" title="Permalink to this headline">¶</a></h2> +<span id="index-4"></span><h2>Python environment<a class="headerlink" href="#python-environment" title="Permalink to this heading">¶</a></h2> <p>The eclasses commonly use the concept of <em>Python environment</em>. This means a state of environment enforcing a particular Python implementation. Whenever the ebuild code is run inside this @@ -112,7 +113,7 @@ via calling <code class="docutils literal notranslate"><span class="pre">python_ <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> in <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code> and <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code>.</p> </section> <section id="dependencies-in-python-packages"> -<h2>Dependencies in Python packages<a class="headerlink" href="#dependencies-in-python-packages" title="Permalink to this headline">¶</a></h2> +<h2>Dependencies in Python packages<a class="headerlink" href="#dependencies-in-python-packages" title="Permalink to this heading">¶</a></h2> <div class="admonition note"> <p class="admonition-title">Note</p> <p>The following sections focus specifically on dependencies that @@ -121,7 +122,7 @@ tools, libraries written in other programming languages, etc. For these dependencies, the usual Gentoo rules apply.</p> </div> <span class="target" id="index-5"></span><span class="target" id="index-6"></span><section id="the-most-common-dependency-types"> -<span id="index-7"></span><h3>The most common dependency types<a class="headerlink" href="#the-most-common-dependency-types" title="Permalink to this headline">¶</a></h3> +<span id="index-7"></span><h3>The most common dependency types<a class="headerlink" href="#the-most-common-dependency-types" title="Permalink to this heading">¶</a></h3> <p>The dependencies found in Python packages can usually be classified into two categories: runtime dependencies and build-time dependencies.</p> <p><em>Runtime dependencies</em> are packages that are required to be present @@ -188,7 +189,7 @@ in all three of <code class="docutils literal notranslate"><span class="pre">RDE or for tests).</p> </section> <section id="finding-dependency-lists-from-build-systems"> -<h3>Finding dependency lists from build systems<a class="headerlink" href="#finding-dependency-lists-from-build-systems" title="Permalink to this headline">¶</a></h3> +<h3>Finding dependency lists from build systems<a class="headerlink" href="#finding-dependency-lists-from-build-systems" title="Permalink to this heading">¶</a></h3> <p>Most of the modern Python build systems include all the package metadata in the <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> file. Setuptools are using <code class="docutils literal notranslate"><span class="pre">setup.cfg</span></code> and/or <code class="docutils literal notranslate"><span class="pre">setup.py</span></code>. Some packages also include custom code to read @@ -321,7 +322,7 @@ or <code class="docutils literal notranslate"><span class="pre">noxfile.py</span </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -338,7 +339,7 @@ or <code class="docutils literal notranslate"><span class="pre">noxfile.py</span ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/buildsys.html b/guide/buildsys.html index 711d411..ca0b5dd 100644 --- a/guide/buildsys.html +++ b/guide/buildsys.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Integration with build systems written in Python — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,21 +35,21 @@ <div class="body" role="main"> <section id="integration-with-build-systems-written-in-python"> -<h1>Integration with build systems written in Python<a class="headerlink" href="#integration-with-build-systems-written-in-python" title="Permalink to this headline">¶</a></h1> +<h1>Integration with build systems written in Python<a class="headerlink" href="#integration-with-build-systems-written-in-python" title="Permalink to this heading">¶</a></h1> <p>Besides the build systems commonly used by Python packages there are a few build systems written in Python and requiring the packages to script them in Python. This makes it necessary to use a proper Python eclass in order to declare their compatibility with Python versions.</p> <section id="meson"> -<h2>Meson<a class="headerlink" href="#meson" title="Permalink to this headline">¶</a></h2> +<h2>Meson<a class="headerlink" href="#meson" title="Permalink to this heading">¶</a></h2> <p><a class="reference external" href="https://mesonbuild.com/">Meson</a> build system is a fairly recent addition. While it is written in Python, its scripts use a custom Python-agnostic script language. Hence, it can be treated as an arbitrary external tool and does not need any Python eclass.</p> </section> <section id="scons"> -<h2>SCons<a class="headerlink" href="#scons" title="Permalink to this headline">¶</a></h2> +<h2>SCons<a class="headerlink" href="#scons" title="Permalink to this heading">¶</a></h2> <p><a class="reference external" href="https://scons.org/">SCons</a> has gained Python 3 support quite recently. At the same time, many old script files were written for Python 2 and fail when run via Python 3 SCons. For this reason, it is necessary to use Python @@ -62,7 +63,7 @@ The latter eclass takes care of setting as much as possible.</p> for them and use an appropriate eclass as detailed in the eclass choice chapter.</p> <section id="build-time-use-with-no-extra-dependencies"> -<h3>Build-time use with no extra dependencies<a class="headerlink" href="#build-time-use-with-no-extra-dependencies" title="Permalink to this headline">¶</a></h3> +<h3>Build-time use with no extra dependencies<a class="headerlink" href="#build-time-use-with-no-extra-dependencies" title="Permalink to this heading">¶</a></h3> <p>If the package either has no other Python components than SCons, or all of them are purely build-time and have no dependencies, it is sufficient to inherit <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code>. The eclass takes care of setting @@ -123,7 +124,7 @@ to inherit <code class="docutils literal notranslate"><span class="pre">python-a </div> </section> <section id="build-time-use-with-extra-dependencies"> -<h3>Build-time use with extra dependencies<a class="headerlink" href="#build-time-use-with-extra-dependencies" title="Permalink to this headline">¶</a></h3> +<h3>Build-time use with extra dependencies<a class="headerlink" href="#build-time-use-with-extra-dependencies" title="Permalink to this heading">¶</a></h3> <p>If the package has extra dependencies, you need to take care of <em>all</em> dependencies yourself. This is because <code class="docutils literal notranslate"><span class="pre">python_gen_any_dep</span></code> cannot be combined.</p> @@ -218,7 +219,7 @@ be combined.</p> </div> </section> <section id="single-impl-package"> -<h3>Single-impl package<a class="headerlink" href="#single-impl-package" title="Permalink to this headline">¶</a></h3> +<h3>Single-impl package<a class="headerlink" href="#single-impl-package" title="Permalink to this heading">¶</a></h3> <p>If the package needs to install some Python components, and single-impl install is appropriate, you need to combine <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> with <code class="docutils literal notranslate"><span class="pre">scons-utils</span></code>. In this case, the eclass takes care of everything @@ -288,7 +289,7 @@ package.</p> </div> </section> <section id="single-impl-package-with-conditional-python-install"> -<h3>Single-impl package with conditional Python install<a class="headerlink" href="#single-impl-package-with-conditional-python-install" title="Permalink to this headline">¶</a></h3> +<h3>Single-impl package with conditional Python install<a class="headerlink" href="#single-impl-package-with-conditional-python-install" title="Permalink to this heading">¶</a></h3> <p>If the runtime part of the package uses Python only conditionally, the use is similar to a package with unconditional build-time and conditional runtime dependency on Python. That is, build-time @@ -393,7 +394,7 @@ unconditionally.</p> </div> </section> <section id="pure-python-multi-impl-package"> -<h3>Pure Python multi-impl package<a class="headerlink" href="#pure-python-multi-impl-package" title="Permalink to this headline">¶</a></h3> +<h3>Pure Python multi-impl package<a class="headerlink" href="#pure-python-multi-impl-package" title="Permalink to this heading">¶</a></h3> <p>When you are dealing with a pure Python package using SCons, it makes sense to use plain <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> API. This means that SCons is going to be called from a <code class="docutils literal notranslate"><span class="pre">python_foreach_impl</span></code> loop only.</p> @@ -469,7 +470,7 @@ to be called from a <code class="docutils literal notranslate"><span class="pre" </div> </section> <section id="hybrid-python-r1-scons-package"> -<h3>Hybrid python-r1 + SCons package<a class="headerlink" href="#hybrid-python-r1-scons-package" title="Permalink to this headline">¶</a></h3> +<h3>Hybrid python-r1 + SCons package<a class="headerlink" href="#hybrid-python-r1-scons-package" title="Permalink to this heading">¶</a></h3> <p>Finally, let’s consider a package that uses SCons as a build system and installs Python components independently of it. This could be e.g. a C/C++ program with separate Python bindings.</p> @@ -540,7 +541,7 @@ case, the any-r1 API is recommended.</p> </section> </section> <section id="waf"> -<h2>waf<a class="headerlink" href="#waf" title="Permalink to this headline">¶</a></h2> +<h2>waf<a class="headerlink" href="#waf" title="Permalink to this heading">¶</a></h2> <p>The <a class="reference external" href="https://waf.io/">waf</a> build system is written in Python and bundled with the packages using it. Therefore, it is necessary to combine <code class="docutils literal notranslate"><span class="pre">waf-utils</span></code> eclass with one of the Python eclasses.</p> @@ -553,7 +554,7 @@ interpreter, it is necessary to add <code class="docutils literal notranslate">< all waf packages (combined with individual package requirements if applicable).</p> <section id="build-time-use"> -<h3>Build-time use<a class="headerlink" href="#build-time-use" title="Permalink to this headline">¶</a></h3> +<h3>Build-time use<a class="headerlink" href="#build-time-use" title="Permalink to this heading">¶</a></h3> <p>If waf is the only build-time Python script in the package, it is only necessary to add <code class="docutils literal notranslate"><span class="pre">PYTHON_REQ_USE</span></code> and <code class="docutils literal notranslate"><span class="pre">${PYTHON_DEPS}</span></code> to build-time dependencies. If the package had other Python dependencies, you would @@ -584,7 +585,7 @@ specify them instead.</p> </div> </section> <section id="id1"> -<h3>Single-impl package<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3> +<h3>Single-impl package<a class="headerlink" href="#id1" title="Permalink to this heading">¶</a></h3> <p>The rules for integrating simple-impl package are roughly the same as for pure <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> use. Again, waf requires only plain build-time <code class="docutils literal notranslate"><span class="pre">${PYTHON_DEPS}</span></code> and <code class="docutils literal notranslate"><span class="pre">PYTHON_REQ_USE</span></code>.</p> @@ -713,7 +714,7 @@ build-time <code class="docutils literal notranslate"><span class="pre">${PYTHON </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -730,7 +731,7 @@ build-time <code class="docutils literal notranslate"><span class="pre">${PYTHON ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/concept.html b/guide/concept.html index 15e72e8..9e2c713 100644 --- a/guide/concept.html +++ b/guide/concept.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Advanced concepts — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,11 +35,11 @@ <div class="body" role="main"> <section id="advanced-concepts"> -<h1>Advanced concepts<a class="headerlink" href="#advanced-concepts" title="Permalink to this headline">¶</a></h1> +<h1>Advanced concepts<a class="headerlink" href="#advanced-concepts" title="Permalink to this heading">¶</a></h1> <section id="namespace-packages"> -<h2>Namespace packages<a class="headerlink" href="#namespace-packages" title="Permalink to this headline">¶</a></h2> +<h2>Namespace packages<a class="headerlink" href="#namespace-packages" title="Permalink to this heading">¶</a></h2> <section id="hierarchical-package-structure"> -<h3>Hierarchical package structure<a class="headerlink" href="#hierarchical-package-structure" title="Permalink to this headline">¶</a></h3> +<h3>Hierarchical package structure<a class="headerlink" href="#hierarchical-package-structure" title="Permalink to this heading">¶</a></h3> <p>Traditionally, Python packages were organized into a hierarchical structure with modules and subpackages being located inside the parent package directory. When submodules are imported, they are represented @@ -83,7 +84,7 @@ package directory:</p> to the build directory. However, there is a better solution.</p> </section> <section id="namespace-package-structure"> -<h3>Namespace package structure<a class="headerlink" href="#namespace-package-structure" title="Permalink to this headline">¶</a></h3> +<h3>Namespace package structure<a class="headerlink" href="#namespace-package-structure" title="Permalink to this heading">¶</a></h3> <p>Unlike traditional packages, namespace packages act as a kind of proxy. They are not strictly bound to the containing directory, and instead permit loading subpackages from all directories found in module search @@ -129,7 +130,7 @@ of Python.</p> namespace packages</a> in Python Packaging User Guide.</p> </section> <section id="determining-whether-namespaces-are-used"> -<h3>Determining whether namespaces are used<a class="headerlink" href="#determining-whether-namespaces-are-used" title="Permalink to this headline">¶</a></h3> +<h3>Determining whether namespaces are used<a class="headerlink" href="#determining-whether-namespaces-are-used" title="Permalink to this heading">¶</a></h3> <p>The exact method of detecting namespace packages depends on the type of namespace used.</p> <p>PEP 420 namespaces can generally be recognized by the lack @@ -150,7 +151,7 @@ they can also be recognized by <code class="docutils literal notranslate"><span in <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> or <code class="docutils literal notranslate"><span class="pre">setup.cfg</span></code>.</p> </section> <section id="adding-new-namespace-packages-to-gentoo"> -<h3>Adding new namespace packages to Gentoo<a class="headerlink" href="#adding-new-namespace-packages-to-gentoo" title="Permalink to this headline">¶</a></h3> +<h3>Adding new namespace packages to Gentoo<a class="headerlink" href="#adding-new-namespace-packages-to-gentoo" title="Permalink to this heading">¶</a></h3> <p>If the package uses PEP 420 namespaces, no special action is required. Per PEP 420 layout, the package must not install <code class="docutils literal notranslate"><span class="pre">__init__.py</span></code> files for namespaces.</p> @@ -198,7 +199,7 @@ sources, this dependency needs to be stripped, e.g.:</p> </div> </section> <section id="legacy-namespace-packages-in-gentoo"> -<h3>Legacy namespace packages in Gentoo<a class="headerlink" href="#legacy-namespace-packages-in-gentoo" title="Permalink to this headline">¶</a></h3> +<h3>Legacy namespace packages in Gentoo<a class="headerlink" href="#legacy-namespace-packages-in-gentoo" title="Permalink to this heading">¶</a></h3> <p>Historically, Gentoo has used <code class="docutils literal notranslate"><span class="pre">dev-python/namespace-*</span></code> packages to support namespaces. This method is deprecated and it is in process of being retired.</p> @@ -268,7 +269,7 @@ of being retired.</p> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -285,7 +286,7 @@ of being retired.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/depend.html b/guide/depend.html index 60963e7..b723e87 100644 --- a/guide/depend.html +++ b/guide/depend.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Advanced dependencies — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,9 +35,9 @@ <div class="body" role="main"> <section id="advanced-dependencies"> -<h1>Advanced dependencies<a class="headerlink" href="#advanced-dependencies" title="Permalink to this headline">¶</a></h1> +<h1>Advanced dependencies<a class="headerlink" href="#advanced-dependencies" title="Permalink to this heading">¶</a></h1> <span class="target" id="index-0"></span><section id="requesting-use-flags-on-the-python-interpreter"> -<span id="index-1"></span><h2>Requesting USE flags on the Python interpreter<a class="headerlink" href="#requesting-use-flags-on-the-python-interpreter" title="Permalink to this headline">¶</a></h2> +<span id="index-1"></span><h2>Requesting USE flags on the Python interpreter<a class="headerlink" href="#requesting-use-flags-on-the-python-interpreter" title="Permalink to this heading">¶</a></h2> <p>While the majority of Python standard library modules are available unconditionally, a few are controlled by USE flags. For example, the <a class="reference external" href="https://docs.python.org/3.8/library/sqlite3.html">sqlite3</a> module requires <code class="docutils literal notranslate"><span class="pre">sqlite</span></code> flag to be enabled @@ -127,7 +128,7 @@ SQLite support when running tests:</p> </div> </section> <section id="dependencies-conditional-to-python-version"> -<span id="index-2"></span><h2>Dependencies conditional to Python version<a class="headerlink" href="#dependencies-conditional-to-python-version" title="Permalink to this headline">¶</a></h2> +<span id="index-2"></span><h2>Dependencies conditional to Python version<a class="headerlink" href="#dependencies-conditional-to-python-version" title="Permalink to this heading">¶</a></h2> <p>When packaging software for multiple Python versions, it is quite likely that you’ll find yourself needing some packages only with some of the versions, and not with others. This is the case with backports @@ -201,7 +202,7 @@ Python 3.7 was removed:</p> </div> </section> <section id="dependencies-on-cffi-and-greenlet"> -<span id="index-3"></span><h2>Dependencies on CFFI and greenlet<a class="headerlink" href="#dependencies-on-cffi-and-greenlet" title="Permalink to this headline">¶</a></h2> +<span id="index-3"></span><h2>Dependencies on CFFI and greenlet<a class="headerlink" href="#dependencies-on-cffi-and-greenlet" title="Permalink to this heading">¶</a></h2> <p>The PyPy distribution includes special versions of the <a class="reference external" href="https://pypi.org/project/cffi/">cffi</a> and <a class="reference external" href="https://pypi.org/project/greenlet/">greenlet</a> packages. For this reason, packages using CFFI and/or greenlet and supporting PyPy3 need to make the explicit @@ -280,7 +281,7 @@ dependencies conditional to CPython:</p> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -297,7 +298,7 @@ dependencies conditional to CPython:</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/distutils-legacy.html b/guide/distutils-legacy.html index ad99c49..ed2188c 100644 --- a/guide/distutils-legacy.html +++ b/guide/distutils-legacy.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>distutils-r1 legacy concepts — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,12 +35,12 @@ <div class="body" role="main"> <section id="distutils-r1-legacy-concepts"> -<h1>distutils-r1 legacy concepts<a class="headerlink" href="#distutils-r1-legacy-concepts" title="Permalink to this headline">¶</a></h1> +<h1>distutils-r1 legacy concepts<a class="headerlink" href="#distutils-r1-legacy-concepts" title="Permalink to this heading">¶</a></h1> <p>This section describes concepts specific to the legacy mode of the <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass. When using the modern PEP 517 mode, none of the features described here are available.</p> <section id="different-build-system-variations"> -<span id="index-0"></span><h2>Different build system variations<a class="headerlink" href="#different-build-system-variations" title="Permalink to this headline">¶</a></h2> +<span id="index-0"></span><h2>Different build system variations<a class="headerlink" href="#different-build-system-variations" title="Permalink to this heading">¶</a></h2> <p>The commonly used build systems specific to Python packages can be classified for eclass support into following groups:</p> <ol class="arabic simple"> @@ -56,7 +57,7 @@ are used, the package needs to have a runtime dependency on <code class="docutils literal notranslate"><span class="pre">dev-python/setuptools</span></code>. Otherwise, a build-time dependency is sufficient.</p> <section id="distutils-use-setuptools"> -<h3>DISTUTILS_USE_SETUPTOOLS<a class="headerlink" href="#distutils-use-setuptools" title="Permalink to this headline">¶</a></h3> +<h3>DISTUTILS_USE_SETUPTOOLS<a class="headerlink" href="#distutils-use-setuptools" title="Permalink to this heading">¶</a></h3> <p>The most common case right now is a package using setuptools as a build system, and therefore needing a build-time dependency only. This is the eclass’ default. If your package does not fit this profile, @@ -107,7 +108,7 @@ An example report is:</p> </div> </section> <section id="distutils-and-setuptools-build-systems"> -<h3>distutils and setuptools build systems<a class="headerlink" href="#distutils-and-setuptools-build-systems" title="Permalink to this headline">¶</a></h3> +<h3>distutils and setuptools build systems<a class="headerlink" href="#distutils-and-setuptools-build-systems" title="Permalink to this heading">¶</a></h3> <p>Distutils and setuptools are the two most common build systems for Python packages right now. Their common feature is that they use a <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> script that interfaces with the build system. Generally, @@ -148,7 +149,7 @@ be necessary if you want to force distutils (e.g. to enable clean bootstrap) or the upstream condition requiers that.</p> </section> <section id="setuptools-entry-points"> -<h3>Setuptools’ entry points<a class="headerlink" href="#setuptools-entry-points" title="Permalink to this headline">¶</a></h3> +<h3>Setuptools’ entry points<a class="headerlink" href="#setuptools-entry-points" title="Permalink to this heading">¶</a></h3> <div class="admonition important"> <p class="admonition-title">Important</p> <p>With removal of Python 3.7, the correct <code class="docutils literal notranslate"><span class="pre">DISTUTILS_USE_SETUPTOOLS</span></code> @@ -197,7 +198,7 @@ the QA check will also trigger the wrong value because of leftover explicit dependencies on setuptools.</p> </section> <section id="other-runtime-uses-of-setuptools"> -<h3>Other runtime uses of setuptools<a class="headerlink" href="#other-runtime-uses-of-setuptools" title="Permalink to this headline">¶</a></h3> +<h3>Other runtime uses of setuptools<a class="headerlink" href="#other-runtime-uses-of-setuptools" title="Permalink to this heading">¶</a></h3> <p>Besides the generated wrapper scripts, the package code itself may use the <code class="docutils literal notranslate"><span class="pre">setuptools</span></code> or <code class="docutils literal notranslate"><span class="pre">pkg_resources</span></code> packages. The common cases for this include getting package metadata and resource files. This @@ -211,7 +212,7 @@ dependency. If <code class="docutils literal notranslate"><span class="pre">ins in the installed modules, please submit a patch upstream.</p> </section> <section id="pyproject-toml-based-projects"> -<h3>pyproject.toml-based projects<a class="headerlink" href="#pyproject-toml-based-projects" title="Permalink to this headline">¶</a></h3> +<h3>pyproject.toml-based projects<a class="headerlink" href="#pyproject-toml-based-projects" title="Permalink to this heading">¶</a></h3> <p>The newer build systems used for Python packages avoid supplying <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> and instead declare package’s metadata and build system information in <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code>. Examples of these build systems @@ -231,7 +232,7 @@ points is not updated.</p> </section> </section> <section id="in-source-vs-out-of-source-builds"> -<span id="index-1"></span><h2>In-source vs out-of-source builds<a class="headerlink" href="#in-source-vs-out-of-source-builds" title="Permalink to this headline">¶</a></h2> +<span id="index-1"></span><h2>In-source vs out-of-source builds<a class="headerlink" href="#in-source-vs-out-of-source-builds" title="Permalink to this heading">¶</a></h2> <p>In the general definition, an <em>out-of-source build</em> is a build where output files are placed in a directory separate from source files. By default, distutils and its derivatives always do out-of-source builds @@ -282,7 +283,7 @@ files are contained within the copy used for the current interpreter.</p> </div> </section> <section id="installing-the-package-before-testing"> -<span id="index-2"></span><h2>Installing the package before testing<a class="headerlink" href="#installing-the-package-before-testing" title="Permalink to this headline">¶</a></h2> +<span id="index-2"></span><h2>Installing the package before testing<a class="headerlink" href="#installing-the-package-before-testing" title="Permalink to this heading">¶</a></h2> <p>The tests are executed in <code class="docutils literal notranslate"><span class="pre">src_test</span></code> phase, after <code class="docutils literal notranslate"><span class="pre">src_compile</span></code> installed package files into the build directory. The eclass automatically adds appropriate <code class="docutils literal notranslate"><span class="pre">PYTHONPATH</span></code> so that the installed @@ -390,7 +391,7 @@ has broken it for most of the consumers.</p> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -407,7 +408,7 @@ has broken it for most of the consumers.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/distutils.html b/guide/distutils.html index 99c72b0..adb3145 100644 --- a/guide/distutils.html +++ b/guide/distutils.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>distutils-r1 — standard Python build systems — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,7 +35,7 @@ <div class="body" role="main"> <section id="distutils-r1-standard-python-build-systems"> -<h1>distutils-r1 — standard Python build systems<a class="headerlink" href="#distutils-r1-standard-python-build-systems" title="Permalink to this headline">¶</a></h1> +<h1>distutils-r1 — standard Python build systems<a class="headerlink" href="#distutils-r1-standard-python-build-systems" title="Permalink to this heading">¶</a></h1> <p>The <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass is used to facilitate build systems using <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> (distutils and its derivatives, notably setuptools) or <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> (flit, poetry). It is built on top @@ -42,7 +43,7 @@ of <code class="docutils literal notranslate"><span class="pre">python-r1</span> efficiently building multi-impl and single-impl packages.</p> <p>Eclass reference: <a class="reference external" href="https://devmanual.gentoo.org/eclass-reference/distutils-r1.eclass/index.html">distutils-r1.eclass(5)</a></p> <section id="the-pep-517-and-legacy-modes"> -<h2>The PEP 517 and legacy modes<a class="headerlink" href="#the-pep-517-and-legacy-modes" title="Permalink to this headline">¶</a></h2> +<h2>The PEP 517 and legacy modes<a class="headerlink" href="#the-pep-517-and-legacy-modes" title="Permalink to this heading">¶</a></h2> <div class="admonition warning"> <p class="admonition-title">Warning</p> <p>The PEP 517 mode is still experimental and it is not guaranteed @@ -73,7 +74,7 @@ pyproject2setuppy hack. This mode relies on deprecated features.</p> variable. Otherwise, the legacy mode is used.</p> </section> <section id="basic-use-pep-517-mode"> -<h2>Basic use (PEP 517 mode)<a class="headerlink" href="#basic-use-pep-517-mode" title="Permalink to this headline">¶</a></h2> +<h2>Basic use (PEP 517 mode)<a class="headerlink" href="#basic-use-pep-517-mode" title="Permalink to this heading">¶</a></h2> <p>By default, <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> sets appropriate metadata variables and exports a full set of phase functions necessary to install packages using Python build systems.</p> @@ -102,7 +103,7 @@ for the build system.</p> </div> </section> <section id="source-archives"> -<h2>Source archives<a class="headerlink" href="#source-archives" title="Permalink to this headline">¶</a></h2> +<h2>Source archives<a class="headerlink" href="#source-archives" title="Permalink to this heading">¶</a></h2> <p>The vast majority of Python packages can be found in the <a class="reference external" href="https://pypi.org/">Python Package Index (PyPI)</a>. Often this includes both source (sdist) and binary (wheel) packages. In addition to that, many packages have public VCS @@ -141,7 +142,7 @@ that may require Internet access or have problematic dependencies (e.g. NodeJS).</p> </section> <section id="dependencies"> -<h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this headline">¶</a></h2> +<h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this heading">¶</a></h2> <p>Dependencies on Python packages are declared using the same method as the underlying eclass — that is, <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> or <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code>.</p> @@ -181,7 +182,7 @@ the widest test coverage, and avoid unpredictable test failures on users who have more dependencies installed).</p> </section> <section id="python-single-r1-variant"> -<span id="index-0"></span><h2>python-single-r1 variant<a class="headerlink" href="#python-single-r1-variant" title="Permalink to this headline">¶</a></h2> +<span id="index-0"></span><h2>python-single-r1 variant<a class="headerlink" href="#python-single-r1-variant" title="Permalink to this heading">¶</a></h2> <p>Normally, <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> uses <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> to build multi-impl packages, and this is the recommended mode. However, in some cases you will need to use <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> instead, especially if you @@ -227,7 +228,7 @@ to be rewritten.</p> </div> </section> <section id="pep-517-build-systems"> -<span id="index-1"></span><h2>PEP 517 build systems<a class="headerlink" href="#pep-517-build-systems" title="Permalink to this headline">¶</a></h2> +<span id="index-1"></span><h2>PEP 517 build systems<a class="headerlink" href="#pep-517-build-systems" title="Permalink to this heading">¶</a></h2> <p>The majority of examples in this guide assume using setuptools build system. However, PEP 517 mode provides support for other build systems.</p> <p>In order to determine the correct build system used, read @@ -244,11 +245,6 @@ The eclass maintains a mapping of backend paths to the respective <code class="docutils literal notranslate"><span class="pre">DISTUTILS_USE_PEP517</span></code> and automatically suggests the correct value.</p> <p>The following table summarizes supported backends.</p> <table class="docutils align-default"> -<colgroup> -<col style="width: 23%" /> -<col style="width: 36%" /> -<col style="width: 41%" /> -</colgroup> <thead> <tr class="row-odd"><th class="head"><p>USE_PEP517 value</p></th> <th class="head"><p>Provider package</p></th> @@ -309,9 +305,9 @@ as well). The eclass automatically uses the legacy setuptools backend for them.</p> </section> <section id="deprecated-pep-517-backends"> -<h2>Deprecated PEP 517 backends<a class="headerlink" href="#deprecated-pep-517-backends" title="Permalink to this headline">¶</a></h2> +<h2>Deprecated PEP 517 backends<a class="headerlink" href="#deprecated-pep-517-backends" title="Permalink to this heading">¶</a></h2> <section id="flit-buildapi"> -<h3>flit.buildapi<a class="headerlink" href="#flit-buildapi" title="Permalink to this headline">¶</a></h3> +<h3>flit.buildapi<a class="headerlink" href="#flit-buildapi" title="Permalink to this heading">¶</a></h3> <p>Some packages are still found using the historical flit build backend. Their <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> files contain a section similar to the following:</p> @@ -333,7 +329,7 @@ reduces the build-time dependency footprint and therefore makes isolated PEP 517 builds faster.</p> </section> <section id="poetry-masonry-api"> -<h3>poetry.masonry.api<a class="headerlink" href="#poetry-masonry-api" title="Permalink to this headline">¶</a></h3> +<h3>poetry.masonry.api<a class="headerlink" href="#poetry-masonry-api" title="Permalink to this heading">¶</a></h3> <p>A similar problem applies to the packages using poetry. The respective <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> files contain:</p> <div class="highlight-toml notranslate"><div class="highlight"><pre><span></span><span class="k">[build-system]</span><span class="w"></span> @@ -353,7 +349,7 @@ dependency footprint and makes isolated builds much faster.</p> </section> </section> <section id="setuptools-scm-and-snapshots"> -<span id="index-2"></span><h2>setuptools_scm and snapshots<a class="headerlink" href="#setuptools-scm-and-snapshots" title="Permalink to this headline">¶</a></h2> +<span id="index-2"></span><h2>setuptools_scm and snapshots<a class="headerlink" href="#setuptools-scm-and-snapshots" title="Permalink to this heading">¶</a></h2> <p><a class="reference external" href="https://pypi.org/project/setuptools-scm/">setuptools_scm</a> is a package providing additional features for running inside a VCS checkout, in particular the ability to determine version from VCS tags. However, this works correctly only when the package @@ -393,7 +389,7 @@ via <code class="docutils literal notranslate"><span class="pre">SETUPTOOLS_SCM_ </div> </section> <section id="packages-using-cython"> -<span id="index-3"></span><h2>Packages using Cython<a class="headerlink" href="#packages-using-cython" title="Permalink to this headline">¶</a></h2> +<span id="index-3"></span><h2>Packages using Cython<a class="headerlink" href="#packages-using-cython" title="Permalink to this heading">¶</a></h2> <p><a class="reference external" href="https://cython.org/">Cython</a> is a static compiler that permits writing Python extensions in a hybrid of C and Python. Cython files are compiled into C code that is compatible with multiple Python interpreters. This makes it @@ -430,7 +426,7 @@ src_configure<span class="o">()</span> <span class="o">{</span> is compatible with all Python versions.</p> </section> <section id="parallel-build-race-conditions"> -<h2>Parallel build race conditions<a class="headerlink" href="#parallel-build-race-conditions" title="Permalink to this headline">¶</a></h2> +<h2>Parallel build race conditions<a class="headerlink" href="#parallel-build-race-conditions" title="Permalink to this heading">¶</a></h2> <p>The distutils build system has a major unresolved bug regarding race conditions. If the same source file is used to build multiple Python extensions, the build can start multiple simultaneous compiler processes @@ -462,7 +458,7 @@ additional .c files that <code class="docutils literal notranslate"><span class= source files for every extension.</p> </section> <section id="sub-phase-functions"> -<h2>Sub-phase functions<a class="headerlink" href="#sub-phase-functions" title="Permalink to this headline">¶</a></h2> +<h2>Sub-phase functions<a class="headerlink" href="#sub-phase-functions" title="Permalink to this heading">¶</a></h2> <p>Ebuilds define phase functions in order to conveniently override parts of the build process. <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> extends this concept by introducing <em>sub-phases</em>. All <code class="docutils literal notranslate"><span class="pre">src_*</span></code> phases in ebuild are split @@ -493,7 +489,7 @@ defining <code class="docutils literal notranslate"><span class="pre">${BUILD_DI implementation. However, if in-source builds are enabled, all phases are run in these build directories.</p> <span class="target" id="index-4"></span><section id="python-prepare"> -<span id="index-5"></span><h3>python_prepare<a class="headerlink" href="#python-prepare" title="Permalink to this headline">¶</a></h3> +<span id="index-5"></span><h3>python_prepare<a class="headerlink" href="#python-prepare" title="Permalink to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">python_prepare_all</span></code> is responsible for applying changes to the package sources that are common to all Python implementations. The default implementation performs the tasks of <code class="docutils literal notranslate"><span class="pre">default_src_prepare</span></code> @@ -537,7 +533,7 @@ enables in-source builds.</p> </div> <span class="target" id="index-6"></span></section> <section id="python-configure"> -<span id="index-7"></span><h3>python_configure<a class="headerlink" href="#python-configure" title="Permalink to this headline">¶</a></h3> +<span id="index-7"></span><h3>python_configure<a class="headerlink" href="#python-configure" title="Permalink to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">python_configure</span></code> and <code class="docutils literal notranslate"><span class="pre">python_configure_all</span></code> have no default functionality. The former is convenient for running additional configuration steps if needed by the package, the latter for defining @@ -557,7 +553,7 @@ global environment variables.</p> </div> <span class="target" id="index-8"></span></section> <section id="python-compile"> -<span id="index-9"></span><h3>python_compile<a class="headerlink" href="#python-compile" title="Permalink to this headline">¶</a></h3> +<span id="index-9"></span><h3>python_compile<a class="headerlink" href="#python-compile" title="Permalink to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">python_compile</span></code> normally builds the package. It is sometimes used to pass additional arguments to the build step. For example, it can be used to disable parallel extension builds in packages that are broken @@ -578,7 +574,7 @@ the documentation (see <code class="docutils literal notranslate"><span class="p </div> <span class="target" id="index-10"></span></section> <section id="python-test"> -<span id="index-11"></span><h3>python_test<a class="headerlink" href="#python-test" title="Permalink to this headline">¶</a></h3> +<span id="index-11"></span><h3>python_test<a class="headerlink" href="#python-test" title="Permalink to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">python_test</span></code> is responsible for running tests. It has no default implementation but you are strongly encouraged to provide one (either directly or via <code class="docutils literal notranslate"><span class="pre">distutils_enable_tests</span></code>). <code class="docutils literal notranslate"><span class="pre">python_test_all</span></code> @@ -591,7 +587,7 @@ to Python.</p> </div> <span class="target" id="index-12"></span></section> <section id="python-install"> -<span id="index-13"></span><h3>python_install<a class="headerlink" href="#python-install" title="Permalink to this headline">¶</a></h3> +<span id="index-13"></span><h3>python_install<a class="headerlink" href="#python-install" title="Permalink to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">python_install</span></code> installs the package’s Python part. It is usually redefined in order to pass additional <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> arguments or to install additional Python modules.</p> @@ -620,7 +616,7 @@ such as bash completions or examples.</p> </section> </section> <section id="passing-arguments-to-setup-py"> -<span id="index-14"></span><h2>Passing arguments to setup.py<a class="headerlink" href="#passing-arguments-to-setup-py" title="Permalink to this headline">¶</a></h2> +<span id="index-14"></span><h2>Passing arguments to setup.py<a class="headerlink" href="#passing-arguments-to-setup-py" title="Permalink to this heading">¶</a></h2> <p>There are two main methods of accepting additional command-line options in <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> scripts: using global options and via command options.</p> <p>Global options are usually implemented through manipulating <code class="docutils literal notranslate"><span class="pre">sys.path</span></code> @@ -659,7 +655,7 @@ take boolean arguments. In this case, the ebuild can use:</p> </div> </section> <section id="calling-custom-setup-py-commands"> -<span id="index-15"></span><h2>Calling custom setup.py commands<a class="headerlink" href="#calling-custom-setup-py-commands" title="Permalink to this headline">¶</a></h2> +<span id="index-15"></span><h2>Calling custom setup.py commands<a class="headerlink" href="#calling-custom-setup-py-commands" title="Permalink to this heading">¶</a></h2> <p>When working on packages using setuptools or modified distutils, you sometimes need to manually invoke <code class="docutils literal notranslate"><span class="pre">setup.py</span></code>. The eclass provides a <code class="docutils literal notranslate"><span class="pre">esetup.py</span></code> helper that wraps it with additional checks, error @@ -673,7 +669,7 @@ beforehand (much like <code class="docutils literal notranslate"><span class="pr </div> </section> <section id="preventing-test-directory-from-being-installed"> -<h2>Preventing test directory from being installed<a class="headerlink" href="#preventing-test-directory-from-being-installed" title="Permalink to this headline">¶</a></h2> +<h2>Preventing test directory from being installed<a class="headerlink" href="#preventing-test-directory-from-being-installed" title="Permalink to this heading">¶</a></h2> <p>Many packages using the setuptools build system utilize the convenient <code class="docutils literal notranslate"><span class="pre">find_packages()</span></code> method to locate the Python sources. In some cases, this method also wrongly grabs top-level test directories or other files @@ -706,7 +702,7 @@ directories in the install phase:</p> </div> </section> <section id="enabling-tests"> -<span id="index-16"></span><h2>Enabling tests<a class="headerlink" href="#enabling-tests" title="Permalink to this headline">¶</a></h2> +<span id="index-16"></span><h2>Enabling tests<a class="headerlink" href="#enabling-tests" title="Permalink to this heading">¶</a></h2> <p>Since Python performs only minimal build-time (or more precisely, import-time) checking of correctness, it is important to run tests of Python packages in order to catch any problems early. This is @@ -719,7 +715,7 @@ specify a test runner that’s not strictly necessary — e.g. specify anywhere and work just fine with built-in modules. The best way to determine the test runner to use is to grep the test sources.</p> <section id="using-distutils-enable-tests"> -<h3>Using distutils_enable_tests<a class="headerlink" href="#using-distutils-enable-tests" title="Permalink to this headline">¶</a></h3> +<h3>Using distutils_enable_tests<a class="headerlink" href="#using-distutils-enable-tests" title="Permalink to this heading">¶</a></h3> <p>The simplest way of enabling tests is to call <code class="docutils literal notranslate"><span class="pre">distutils_enable_tests</span></code> in global scope, passing the test runner name as the first argument. This function takes care of declaring test phase, setting appropriate @@ -758,7 +754,7 @@ setting <code class="docutils literal notranslate"><span class="pre">RDEPEND</sp </ul> </section> <section id="adding-more-test-dependencies"> -<h3>Adding more test dependencies<a class="headerlink" href="#adding-more-test-dependencies" title="Permalink to this headline">¶</a></h3> +<h3>Adding more test dependencies<a class="headerlink" href="#adding-more-test-dependencies" title="Permalink to this heading">¶</a></h3> <p>Additional test dependencies can be specified in <code class="docutils literal notranslate"><span class="pre">test?</span></code> conditional. The flag normally does not need to be explicitly declared, as <code class="docutils literal notranslate"><span class="pre">distutils_enable_tests</span></code> does that in the majority of cases.</p> @@ -798,7 +794,7 @@ can be rewritten as:</p> </div> </section> <section id="installing-the-package-before-running-tests"> -<h3>Installing the package before running tests<a class="headerlink" href="#installing-the-package-before-running-tests" title="Permalink to this headline">¶</a></h3> +<h3>Installing the package before running tests<a class="headerlink" href="#installing-the-package-before-running-tests" title="Permalink to this heading">¶</a></h3> <p>In PEP 517 mode, the eclass automatically exposes a venv-style install tree to the test phase. No explicit action in necessary.</p> <p>In the legacy mode, <code class="docutils literal notranslate"><span class="pre">distutils_enable_tests</span></code> has an optional @@ -807,7 +803,7 @@ to a temporary directory. More information can be found in the legacy section.</p> </section> <section id="undesirable-test-dependencies"> -<h3>Undesirable test dependencies<a class="headerlink" href="#undesirable-test-dependencies" title="Permalink to this headline">¶</a></h3> +<h3>Undesirable test dependencies<a class="headerlink" href="#undesirable-test-dependencies" title="Permalink to this heading">¶</a></h3> <p>There is a number of packages that are frequently listed as test dependencies upstream but have little to no value for Gentoo users. It is recommended to skip those test dependencies whenever possible. @@ -832,7 +828,7 @@ for the former, and an environment close enough to the latter. Do not use tox in ebuilds.</p> </section> <section id="customizing-the-test-phase"> -<h3>Customizing the test phase<a class="headerlink" href="#customizing-the-test-phase" title="Permalink to this headline">¶</a></h3> +<h3>Customizing the test phase<a class="headerlink" href="#customizing-the-test-phase" title="Permalink to this heading">¶</a></h3> <p>If additional pre-/post-test phase actions need to be performed, they can be easily injected via overriding <code class="docutils literal notranslate"><span class="pre">src_test()</span></code> and making it call <code class="docutils literal notranslate"><span class="pre">distutils-r1_src_test</span></code>:</p> @@ -920,7 +916,7 @@ of its logic.</p> so you must make sure to call it if you override <code class="docutils literal notranslate"><span class="pre">src_test</span></code>.</p> </section> <section id="customizing-the-test-phase-for-pytest"> -<span id="index-17"></span><h3>Customizing the test phase for pytest<a class="headerlink" href="#customizing-the-test-phase-for-pytest" title="Permalink to this headline">¶</a></h3> +<span id="index-17"></span><h3>Customizing the test phase for pytest<a class="headerlink" href="#customizing-the-test-phase-for-pytest" title="Permalink to this heading">¶</a></h3> <p>For the relatively frequent case of pytest-based packages needing additional customization, a <code class="docutils literal notranslate"><span class="pre">epytest</span></code> helper is provided. The helper runs <code class="docutils literal notranslate"><span class="pre">pytest</span></code> with a standard set of options and automatic handling @@ -937,7 +933,7 @@ python_test<span class="o">()</span> <span class="o">{</span> </div> </section> <section id="running-tests-with-virtualx"> -<span id="index-18"></span><h3>Running tests with virtualx<a class="headerlink" href="#running-tests-with-virtualx" title="Permalink to this headline">¶</a></h3> +<span id="index-18"></span><h3>Running tests with virtualx<a class="headerlink" href="#running-tests-with-virtualx" title="Permalink to this heading">¶</a></h3> <p>Test suites requiring a display to work correctly can often be appeased usng Xvfb. If the package in question does not start Xvfb directly, <code class="docutils literal notranslate"><span class="pre">virtualx.eclass</span></code> can be used to do that. Whenever possible, it is @@ -973,7 +969,7 @@ this. In other contexts, <code class="docutils literal notranslate"><span class </section> </section> <section id="building-documentation-via-sphinx"> -<span id="index-19"></span><h2>Building documentation via Sphinx<a class="headerlink" href="#building-documentation-via-sphinx" title="Permalink to this headline">¶</a></h2> +<span id="index-19"></span><h2>Building documentation via Sphinx<a class="headerlink" href="#building-documentation-via-sphinx" title="Permalink to this heading">¶</a></h2> <p><code class="docutils literal notranslate"><span class="pre">dev-python/sphinx</span></code> is commonly used to document Python packages. It comes with a number of plugins and themes that make it convenient to write and combine large text documents (such as this Guide!), @@ -986,7 +982,7 @@ for Sphinx, and packages that use plugins need to guarantee the same implementation across all plugins. To cover all those use cases easily, the <code class="docutils literal notranslate"><span class="pre">distutils_enable_sphinx</span></code> function is provided.</p> <section id="basic-documentation-with-autodoc"> -<h3>Basic documentation with autodoc<a class="headerlink" href="#basic-documentation-with-autodoc" title="Permalink to this headline">¶</a></h3> +<h3>Basic documentation with autodoc<a class="headerlink" href="#basic-documentation-with-autodoc" title="Permalink to this heading">¶</a></h3> <p>The most common case is a package that uses Sphinx along with autodoc. It can be recognized by <code class="docutils literal notranslate"><span class="pre">conf.py</span></code> listing <code class="docutils literal notranslate"><span class="pre">sphinx.ext.autodoc</span></code> in the extension list. In order to support building documentation, @@ -1025,7 +1021,7 @@ of the supported implementations, and appropriate <code class="docutils literal implementation to build and install HTML documentation.</p> </section> <section id="additional-sphinx-extensions"> -<h3>Additional Sphinx extensions<a class="headerlink" href="#additional-sphinx-extensions" title="Permalink to this headline">¶</a></h3> +<h3>Additional Sphinx extensions<a class="headerlink" href="#additional-sphinx-extensions" title="Permalink to this heading">¶</a></h3> <p>It is not uncommon for packages to require additional third-party extensions to Sphinx. Those include themes. In order to specify dependencies on the additional packages, pass them as extra arguments @@ -1058,7 +1054,7 @@ packages. However, it does not have to be the one in <code class="docutils lite for this package.</p> </section> <section id="sphinx-without-autodoc-or-extensions"> -<h3>Sphinx without autodoc or extensions<a class="headerlink" href="#sphinx-without-autodoc-or-extensions" title="Permalink to this headline">¶</a></h3> +<h3>Sphinx without autodoc or extensions<a class="headerlink" href="#sphinx-without-autodoc-or-extensions" title="Permalink to this heading">¶</a></h3> <p>Finally, there are packages that use Sphinx purely to build documentation from text files, without inspecting Python code. For those packages, the any-r1 API can be omitted entirely and plain @@ -1092,7 +1088,7 @@ should be used, and issue a warning if it’s missing or incorrect.</p> <span class="target" id="index-20"></span></section> </section> <section id="packages-with-optional-python-build-system-usage"> -<span id="index-21"></span><h2>Packages with optional Python build system usage<a class="headerlink" href="#packages-with-optional-python-build-system-usage" title="Permalink to this headline">¶</a></h2> +<span id="index-21"></span><h2>Packages with optional Python build system usage<a class="headerlink" href="#packages-with-optional-python-build-system-usage" title="Permalink to this heading">¶</a></h2> <p>The eclass has been written with the assumption that the vast majority of its consumers will be using the Python build systems unconditionally. For this reason, it sets the ebuild metadata variables (dependencies, @@ -1201,7 +1197,7 @@ follows:</p> </div> </section> <section id="packages-with-rust-extensions-using-cargo"> -<span id="index-22"></span><h2>Packages with Rust extensions (using Cargo)<a class="headerlink" href="#packages-with-rust-extensions-using-cargo" title="Permalink to this headline">¶</a></h2> +<span id="index-22"></span><h2>Packages with Rust extensions (using Cargo)<a class="headerlink" href="#packages-with-rust-extensions-using-cargo" title="Permalink to this heading">¶</a></h2> <p>Some Python build systems include support for writing extensions in the Rust programming language. Two examples of these are setuptools using <code class="docutils literal notranslate"><span class="pre">dev-python/setuptools_rust</span></code> plugin and Maturin. Normally, @@ -1346,7 +1342,7 @@ warnings. Finally, the ebuild needs to call <code class="docutils literal notra </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -1363,7 +1359,7 @@ warnings. Finally, the ebuild needs to call <code class="docutils literal notra ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/eclass.html b/guide/eclass.html index 5833a4c..ceb6066 100644 --- a/guide/eclass.html +++ b/guide/eclass.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Choosing between Python eclasses — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,9 +35,9 @@ <div class="body" role="main"> <section id="choosing-between-python-eclasses"> -<h1>Choosing between Python eclasses<a class="headerlink" href="#choosing-between-python-eclasses" title="Permalink to this headline">¶</a></h1> +<h1>Choosing between Python eclasses<a class="headerlink" href="#choosing-between-python-eclasses" title="Permalink to this heading">¶</a></h1> <section id="build-time-vs-runtime-use"> -<h2>Build-time vs runtime use<a class="headerlink" href="#build-time-vs-runtime-use" title="Permalink to this headline">¶</a></h2> +<h2>Build-time vs runtime use<a class="headerlink" href="#build-time-vs-runtime-use" title="Permalink to this heading">¶</a></h2> <p>The first basis for choosing Python eclass is whether Python is used merely at build-time or at runtime as well.</p> <p>A runtime use occurs if the package explicitly needs Python to be @@ -63,7 +64,7 @@ loads Python code from the package and a compatible Python version must be enforced.</p> </section> <section id="single-impl-vs-multi-impl"> -<h2>Single-impl vs multi-impl<a class="headerlink" href="#single-impl-vs-multi-impl" title="Permalink to this headline">¶</a></h2> +<h2>Single-impl vs multi-impl<a class="headerlink" href="#single-impl-vs-multi-impl" title="Permalink to this heading">¶</a></h2> <p>The second important basis for packages using Python at runtime is whether the package in question should support multi-implementation install or not.</p> @@ -101,7 +102,7 @@ These USE flag sets can be set independently to provide greater flexibility for developers and end users.</p> </section> <section id="distutils-and-related-build-systems"> -<h2>Distutils and related build systems<a class="headerlink" href="#distutils-and-related-build-systems" title="Permalink to this headline">¶</a></h2> +<h2>Distutils and related build systems<a class="headerlink" href="#distutils-and-related-build-systems" title="Permalink to this heading">¶</a></h2> <p>The third basis for choosing an eclass is the build system used. If the project uses one of Python-specific build systems, that is distutils, setuptools, flit or poetry, the <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass @@ -114,7 +115,7 @@ packages. It provides full set of default phase functions, making writing ebuilds much easier.</p> </section> <section id="a-rule-of-thumb"> -<h2>A rule of thumb<a class="headerlink" href="#a-rule-of-thumb" title="Permalink to this headline">¶</a></h2> +<h2>A rule of thumb<a class="headerlink" href="#a-rule-of-thumb" title="Permalink to this heading">¶</a></h2> <p>As a rule of thumb, the following checklist can be used to determine the eclass to use:</p> <ol class="arabic simple"> @@ -128,7 +129,7 @@ at runtime, use <code class="docutils literal notranslate"><span class="pre">pyt </ol> </section> <section id="python-utils-r1"> -<h2>python-utils-r1<a class="headerlink" href="#python-utils-r1" title="Permalink to this headline">¶</a></h2> +<h2>python-utils-r1<a class="headerlink" href="#python-utils-r1" title="Permalink to this heading">¶</a></h2> <p>Besides the aforementioned eclasses, the suite includes a common utility eclass <code class="docutils literal notranslate"><span class="pre">python-utils-r1</span></code>. This eclass is inherited by all other eclasses, and it is considered to be a part of their API. Therefore, @@ -208,7 +209,7 @@ and are not suitable for being used otherwise.</p> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -225,7 +226,7 @@ and are not suitable for being used otherwise.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/expert-multi.html b/guide/expert-multi.html index 470a4cf..841f654 100644 --- a/guide/expert-multi.html +++ b/guide/expert-multi.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Expert python-r1 usage — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,12 +35,12 @@ <div class="body" role="main"> <section id="expert-python-r1-usage"> -<h1>Expert python-r1 usage<a class="headerlink" href="#expert-python-r1-usage" title="Permalink to this headline">¶</a></h1> +<h1>Expert python-r1 usage<a class="headerlink" href="#expert-python-r1-usage" title="Permalink to this heading">¶</a></h1> <p>The APIs described in this chapter are powerful but even harder to use than those described in <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> chapter. You should not consider using them unless you have a proper ninja training.</p> <section id="partially-restricting-python-implementation"> -<span id="index-0"></span><h2>Partially restricting Python implementation<a class="headerlink" href="#partially-restricting-python-implementation" title="Permalink to this headline">¶</a></h2> +<span id="index-0"></span><h2>Partially restricting Python implementation<a class="headerlink" href="#partially-restricting-python-implementation" title="Permalink to this heading">¶</a></h2> <p>There are packages that have been ported to Python 3 only partially. They may still have some optional dependencies that support Python 2 only, they may have some components that do not support Python 3 yet. @@ -153,7 +154,7 @@ list.</p> </div> <span class="target" id="index-1"></span></section> <section id="restricting-interpreters-for-python-setup"> -<span id="index-2"></span><h2>Restricting interpreters for python_setup<a class="headerlink" href="#restricting-interpreters-for-python-setup" title="Permalink to this headline">¶</a></h2> +<span id="index-2"></span><h2>Restricting interpreters for python_setup<a class="headerlink" href="#restricting-interpreters-for-python-setup" title="Permalink to this heading">¶</a></h2> <p>A specific case of the restriction described above is when the build step supports a subset of Python targets for the runtime part. This could happen e.g. if package’s Python bindings have been ported @@ -289,7 +290,7 @@ call).</p> package’s files, the any-r1 API described below is preferable to this.</p> <span class="target" id="index-3"></span></section> <section id="disjoint-build-dependencies-any-r1-api"> -<span id="index-4"></span><h2>Disjoint build dependencies (any-r1 API)<a class="headerlink" href="#disjoint-build-dependencies-any-r1-api" title="Permalink to this headline">¶</a></h2> +<span id="index-4"></span><h2>Disjoint build dependencies (any-r1 API)<a class="headerlink" href="#disjoint-build-dependencies-any-r1-api" title="Permalink to this heading">¶</a></h2> <p>Some packages have disjoint sets of runtime and pure build-time dependencies. The former need to be built for all enabled implementations, the latter only for one of them. The any-r1 API @@ -298,7 +299,7 @@ in <code class="docutils literal notranslate"><span class="pre">python-r1</span> to build documentation. Naturally, you’re going to build the documents only once, not separately for every enabled target.</p> <section id="using-regular-python-r1-api"> -<h3>Using regular python-r1 API<a class="headerlink" href="#using-regular-python-r1-api" title="Permalink to this headline">¶</a></h3> +<h3>Using regular python-r1 API<a class="headerlink" href="#using-regular-python-r1-api" title="Permalink to this heading">¶</a></h3> <p>If you were using the regular API, you’d have to use <code class="docutils literal notranslate"><span class="pre">${PYTHON_USEDEP}</span></code> on the dependencies. The resulting code could look like the following:</p> @@ -328,7 +329,7 @@ to the old version of <code class="docutils literal notranslate"><span class="pr be used via Python 2.7 at all.</p> </section> <section id="using-any-r1-api-with-python-r1"> -<h3>Using any-r1 API with python-r1<a class="headerlink" href="#using-any-r1-api-with-python-r1" title="Permalink to this headline">¶</a></h3> +<h3>Using any-r1 API with python-r1<a class="headerlink" href="#using-any-r1-api-with-python-r1" title="Permalink to this heading">¶</a></h3> <p>As the name suggests, the any-r1 API resembles the API used by <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code> eclass. The disjoint build-time dependencies are declared using <code class="docutils literal notranslate"><span class="pre">python_gen_any_dep</span></code>, and need to be tested @@ -369,7 +370,7 @@ we have used this API to add Python 3.8 support to packages before another implementation for Sphinx.</p> </section> <section id="different-sets-of-build-time-dependencies"> -<h3>Different sets of build-time dependencies<a class="headerlink" href="#different-sets-of-build-time-dependencies" title="Permalink to this headline">¶</a></h3> +<h3>Different sets of build-time dependencies<a class="headerlink" href="#different-sets-of-build-time-dependencies" title="Permalink to this heading">¶</a></h3> <p>Let’s consider the case when Python is used at build-time for something else still. In that case, we want <code class="docutils literal notranslate"><span class="pre">python_setup</span></code> to work unconditionally but enforce dependencies only with <code class="docutils literal notranslate"><span class="pre">doc</span></code> flag enabled.</p> @@ -402,7 +403,7 @@ it will use <em>any</em> interpreter that is supported and installed, even if it is not enabled explicitly in <code class="docutils literal notranslate"><span class="pre">PYTHON_TARGETS</span></code>.</p> </section> <section id="using-any-r1-api-with-distutils-r1"> -<h3>Using any-r1 API with distutils-r1<a class="headerlink" href="#using-any-r1-api-with-distutils-r1" title="Permalink to this headline">¶</a></h3> +<h3>Using any-r1 API with distutils-r1<a class="headerlink" href="#using-any-r1-api-with-distutils-r1" title="Permalink to this heading">¶</a></h3> <p>The alternate build dependency API also integrates with <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass. If <code class="docutils literal notranslate"><span class="pre">python_check_deps()</span></code> is declared, the <code class="docutils literal notranslate"><span class="pre">python_*_all()</span></code> sub-phase functions are called with the interpreter selected according @@ -433,7 +434,7 @@ therefore <code class="docutils literal notranslate"><span class="pre">python_ch </section> </section> <section id="combining-any-r1-api-with-implementation-restrictions"> -<h2>Combining any-r1 API with implementation restrictions<a class="headerlink" href="#combining-any-r1-api-with-implementation-restrictions" title="Permalink to this headline">¶</a></h2> +<h2>Combining any-r1 API with implementation restrictions<a class="headerlink" href="#combining-any-r1-api-with-implementation-restrictions" title="Permalink to this heading">¶</a></h2> <p>Both APIs described above can be combined. This can be used when build-time scripts support a subset of implementations supported by the package itself, and by its build-time dependencies. For example, @@ -610,7 +611,7 @@ to <code class="docutils literal notranslate"><span class="pre">python_gen_any_d </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -627,7 +628,7 @@ to <code class="docutils literal notranslate"><span class="pre">python_gen_any_d ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/genindex.html b/guide/genindex.html index b24fd44..5477d3e 100644 --- a/guide/genindex.html +++ b/guide/genindex.html @@ -1,7 +1,7 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> @@ -11,6 +11,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="#" /> <link rel="search" title="Search" href="search.html" /> @@ -340,7 +341,7 @@ </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -357,7 +358,7 @@ ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> </div> diff --git a/guide/helper.html b/guide/helper.html index cb86425..d411753 100644 --- a/guide/helper.html +++ b/guide/helper.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Common helper functions — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,7 +35,7 @@ <div class="body" role="main"> <section id="common-helper-functions"> -<h1>Common helper functions<a class="headerlink" href="#common-helper-functions" title="Permalink to this headline">¶</a></h1> +<h1>Common helper functions<a class="headerlink" href="#common-helper-functions" title="Permalink to this heading">¶</a></h1> <p>The functions described in this chapter are common to all three basic eclasses. To facilitate code reuse, they are declared in <code class="docutils literal notranslate"><span class="pre">python-utils-r1.eclass</span></code>. However, you should not inherit this @@ -42,7 +43,7 @@ eclass directly and instead assume the functions are provided as part of the API of other eclasses.</p> <p>Eclass reference: <a class="reference external" href="https://devmanual.gentoo.org/eclass-reference/python-utils-r1.eclass/index.html">python-utils-r1.eclass(5)</a></p> <span class="target" id="index-0"></span><span class="target" id="index-1"></span><span class="target" id="index-2"></span><span class="target" id="index-3"></span><span class="target" id="index-4"></span><span class="target" id="index-5"></span><span class="target" id="index-6"></span><section id="install-helpers"> -<span id="index-7"></span><h2>Install helpers<a class="headerlink" href="#install-helpers" title="Permalink to this headline">¶</a></h2> +<span id="index-7"></span><h2>Install helpers<a class="headerlink" href="#install-helpers" title="Permalink to this heading">¶</a></h2> <p>The install helpers are provided commonly for <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> and <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> eclasses. Their main purpose is to facilitate installing Python scripts, modules and extensions whenever the package @@ -108,7 +109,7 @@ extensions:</p> </div> </section> <section id="fixing-shebangs-on-installed-scripts"> -<span id="index-8"></span><h2>Fixing shebangs on installed scripts<a class="headerlink" href="#fixing-shebangs-on-installed-scripts" title="Permalink to this headline">¶</a></h2> +<span id="index-8"></span><h2>Fixing shebangs on installed scripts<a class="headerlink" href="#fixing-shebangs-on-installed-scripts" title="Permalink to this heading">¶</a></h2> <p>If upstream build system installs Python scripts, it should also update their shebangs to match the interpreter used for install. Otherwise, the scripts could end up being run via another implementation, one @@ -157,7 +158,7 @@ to install a script with <code class="docutils literal notranslate"><span class= </div> </section> <section id="byte-compiling-python-modules"> -<span id="index-9"></span><h2>Byte-compiling Python modules<a class="headerlink" href="#byte-compiling-python-modules" title="Permalink to this headline">¶</a></h2> +<span id="index-9"></span><h2>Byte-compiling Python modules<a class="headerlink" href="#byte-compiling-python-modules" title="Permalink to this heading">¶</a></h2> <p>Python modules are byte compiled in order to speed up their loading. Byte-compilation is normally done by the build system when the modules are installed. However, sometimes packages fail to compile them @@ -196,7 +197,7 @@ to them can be passed to the function:</p> </div> <span class="target" id="index-10"></span><span class="target" id="index-11"></span><span class="target" id="index-12"></span><span class="target" id="index-13"></span><span class="target" id="index-14"></span><span class="target" id="index-15"></span></section> <section id="querying-the-implementation-information"> -<span id="index-16"></span><h2>Querying the implementation information<a class="headerlink" href="#querying-the-implementation-information" title="Permalink to this headline">¶</a></h2> +<span id="index-16"></span><h2>Querying the implementation information<a class="headerlink" href="#querying-the-implementation-information" title="Permalink to this heading">¶</a></h2> <p>Most of the time, various build systems manage to detect and query the Python implementation correctly for necessary build details. Ocassionally, you need to provide those values or override bad detection @@ -319,7 +320,7 @@ helpers</a> instead.</p> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -336,7 +337,7 @@ helpers</a> instead.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/index.html b/guide/index.html index 10c530c..8ff8454 100644 --- a/guide/index.html +++ b/guide/index.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Gentoo Python Guide — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -33,12 +34,12 @@ <div class="body" role="main"> <section id="gentoo-python-guide"> -<h1>Gentoo Python Guide<a class="headerlink" href="#gentoo-python-guide" title="Permalink to this headline">¶</a></h1> +<h1>Gentoo Python Guide<a class="headerlink" href="#gentoo-python-guide" title="Permalink to this heading">¶</a></h1> <dl class="field-list simple"> -<dt class="field-odd">Author</dt> +<dt class="field-odd">Author<span class="colon">:</span></dt> <dd class="field-odd"><p>Michał Górny</p> </dd> -<dt class="field-even">License</dt> +<dt class="field-even">License<span class="colon">:</span></dt> <dd class="field-even"><p><a class="reference external" href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International</a></p> </dd> </dl> @@ -207,7 +208,7 @@ </ul> </div> <section id="indices-and-tables"> -<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h2> +<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this heading">¶</a></h2> <ul class="simple"> <li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li> <li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li> @@ -273,7 +274,7 @@ </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -290,7 +291,7 @@ ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/interpreter-maintenance.html b/guide/interpreter-maintenance.html index f0ab8b4..9407e9e 100644 --- a/guide/interpreter-maintenance.html +++ b/guide/interpreter-maintenance.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Maintenance of Python implementations — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -33,9 +34,9 @@ <div class="body" role="main"> <section id="maintenance-of-python-implementations"> -<h1>Maintenance of Python implementations<a class="headerlink" href="#maintenance-of-python-implementations" title="Permalink to this headline">¶</a></h1> +<h1>Maintenance of Python implementations<a class="headerlink" href="#maintenance-of-python-implementations" title="Permalink to this heading">¶</a></h1> <section id="life-cycle-of-a-python-implementation"> -<h2>Life cycle of a Python implementation<a class="headerlink" href="#life-cycle-of-a-python-implementation" title="Permalink to this headline">¶</a></h2> +<h2>Life cycle of a Python implementation<a class="headerlink" href="#life-cycle-of-a-python-implementation" title="Permalink to this heading">¶</a></h2> <p>Every Python implementation (understood as a potential target) in Gentoo follows roughly the following life cycle:</p> <ol class="arabic simple"> @@ -91,9 +92,9 @@ at stage 8, as the targets were removed already and it is kept as a dependency and testing target.</p> </section> <section id="notes-specific-to-python-interpreters"> -<h2>Notes specific to Python interpreters<a class="headerlink" href="#notes-specific-to-python-interpreters" title="Permalink to this headline">¶</a></h2> +<h2>Notes specific to Python interpreters<a class="headerlink" href="#notes-specific-to-python-interpreters" title="Permalink to this heading">¶</a></h2> <section id="cpython-patchsets"> -<h3>CPython patchsets<a class="headerlink" href="#cpython-patchsets" title="Permalink to this headline">¶</a></h3> +<h3>CPython patchsets<a class="headerlink" href="#cpython-patchsets" title="Permalink to this heading">¶</a></h3> <p>Gentoo is maintaining patchsets for all CPython versions. These include some non-upstreamable Gentoo patches and upstream backports. While it is considered acceptable to add a new patch (e.g. a security bug fix) @@ -134,7 +135,7 @@ create the tag and push it:</p> </div> </section> <section id="pypy"> -<h3>PyPy<a class="headerlink" href="#pypy" title="Permalink to this headline">¶</a></h3> +<h3>PyPy<a class="headerlink" href="#pypy" title="Permalink to this heading">¶</a></h3> <p>Due to high resource requirements and long build time, PyPy on Gentoo is provided both in source and precompiled form. This creates a bit unusual ebuild structure:</p> @@ -168,9 +169,9 @@ in <code class="docutils literal notranslate"><span class="pre">~/binpkg/${arch} </section> </section> <section id="adding-a-new-python-implementation"> -<h2>Adding a new Python implementation<a class="headerlink" href="#adding-a-new-python-implementation" title="Permalink to this headline">¶</a></h2> +<h2>Adding a new Python implementation<a class="headerlink" href="#adding-a-new-python-implementation" title="Permalink to this heading">¶</a></h2> <section id="eclass-and-profile-changes"> -<h3>Eclass and profile changes<a class="headerlink" href="#eclass-and-profile-changes" title="Permalink to this headline">¶</a></h3> +<h3>Eclass and profile changes<a class="headerlink" href="#eclass-and-profile-changes" title="Permalink to this heading">¶</a></h3> <p>When adding a new Python target, please remember to perform all the following tasks:</p> <ul class="simple"> @@ -195,7 +196,7 @@ in <code class="docutils literal notranslate"><span class="pre">app-portage/gpyu </ul> </section> <section id="porting-initial-packages"> -<h3>Porting initial packages<a class="headerlink" href="#porting-initial-packages" title="Permalink to this headline">¶</a></h3> +<h3>Porting initial packages<a class="headerlink" href="#porting-initial-packages" title="Permalink to this heading">¶</a></h3> <p>The initial porting is quite hard due to a number of circular dependencies. To ease the process, it is recommended to temporarily limit testing of the packages that feature many additional test @@ -282,7 +283,7 @@ on reenabling tests in the packages where they were skipped.</p> </section> </section> <section id="python-build-system-bootstrap"> -<h2>Python build system bootstrap<a class="headerlink" href="#python-build-system-bootstrap" title="Permalink to this headline">¶</a></h2> +<h2>Python build system bootstrap<a class="headerlink" href="#python-build-system-bootstrap" title="Permalink to this heading">¶</a></h2> <p>Python build systems are often facing the bootstrap problem — that is, the build system itself has some dependencies, while these dependencies require the same build system to build. The common upstream way @@ -378,7 +379,7 @@ dependencies will be added or vendored into flit_core.</p> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -395,7 +396,7 @@ dependencies will be added or vendored into flit_core.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/interpreter.html b/guide/interpreter.html index 1f00c19..b2ce233 100644 --- a/guide/interpreter.html +++ b/guide/interpreter.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Python interpreters — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,9 +35,9 @@ <div class="body" role="main"> <section id="python-interpreters"> -<h1>Python interpreters<a class="headerlink" href="#python-interpreters" title="Permalink to this headline">¶</a></h1> +<h1>Python interpreters<a class="headerlink" href="#python-interpreters" title="Permalink to this heading">¶</a></h1> <section id="versions-of-python"> -<h2>Versions of Python<a class="headerlink" href="#versions-of-python" title="Permalink to this headline">¶</a></h2> +<h2>Versions of Python<a class="headerlink" href="#versions-of-python" title="Permalink to this heading">¶</a></h2> <p>By a <em>version of Python</em> we usually mean the variant of Python language and standard library interface as used by a specific version of <a class="reference external" href="https://www.python.org/">CPython</a>, the reference implementation of Python.</p> @@ -66,7 +67,7 @@ window of 3-4 versions of Python 3. They are provided as slots of <code class="docutils literal notranslate"><span class="pre">dev-lang/python</span></code>.</p> </section> <section id="alternative-python-implementations"> -<h2>Alternative Python implementations<a class="headerlink" href="#alternative-python-implementations" title="Permalink to this headline">¶</a></h2> +<h2>Alternative Python implementations<a class="headerlink" href="#alternative-python-implementations" title="Permalink to this heading">¶</a></h2> <p>CPython is the reference and most commonly used Python implementation. However, there are other interpreters that aim to maintain reasonable compatibility with it.</p> @@ -103,7 +104,7 @@ features and standard library modules while preserving backwards compatibility with existing code. It is not packaged in Gentoo.</p> </section> <section id="support-for-multiple-implementations"> -<h2>Support for multiple implementations<a class="headerlink" href="#support-for-multiple-implementations" title="Permalink to this headline">¶</a></h2> +<h2>Support for multiple implementations<a class="headerlink" href="#support-for-multiple-implementations" title="Permalink to this heading">¶</a></h2> <p>The support for simultaneously using multiple Python implementations is implemented primarily through USE flags. The packages installing or using Python files define either <code class="docutils literal notranslate"><span class="pre">PYTHON_TARGETS</span></code> @@ -127,7 +128,7 @@ nor <code class="docutils literal notranslate"><span class="pre">python3</span>< also be modified to call specific version of Python directly.</p> </section> <section id="backports"> -<h2>Backports<a class="headerlink" href="#backports" title="Permalink to this headline">¶</a></h2> +<h2>Backports<a class="headerlink" href="#backports" title="Permalink to this heading">¶</a></h2> <p>A common method of improving compatibility with older versions of Python is to backport new standard library modules or features. Packages doing that are generally called <em>backports</em>.</p> @@ -253,7 +254,7 @@ syntax than native asyncio code.</p> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -270,7 +271,7 @@ syntax than native asyncio code.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/migration.html b/guide/migration.html index 63112b2..828a085 100644 --- a/guide/migration.html +++ b/guide/migration.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Migration guides — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,9 +35,9 @@ <div class="body" role="main"> <section id="migration-guides"> -<h1>Migration guides<a class="headerlink" href="#migration-guides" title="Permalink to this headline">¶</a></h1> +<h1>Migration guides<a class="headerlink" href="#migration-guides" title="Permalink to this heading">¶</a></h1> <section id="migrating-from-old-python-usedep-syntax-in-python-single-r1"> -<span id="index-0"></span><h2>Migrating from old PYTHON_USEDEP syntax in python-single-r1<a class="headerlink" href="#migrating-from-old-python-usedep-syntax-in-python-single-r1" title="Permalink to this headline">¶</a></h2> +<span id="index-0"></span><h2>Migrating from old PYTHON_USEDEP syntax in python-single-r1<a class="headerlink" href="#migrating-from-old-python-usedep-syntax-in-python-single-r1" title="Permalink to this heading">¶</a></h2> <p>Prior to February 2020, <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> used to provide a single <code class="docutils literal notranslate"><span class="pre">PYTHON_USEDEP</span></code> variable alike the two other eclasses. However, getting it to work correctly both on single-impl and multi-impl packages @@ -67,16 +68,12 @@ you probably got single-impl vs. multi-impl wrong.</p></li> method.</p> </section> <section id="migrating-from-eapi-7-to-eapi-8"> -<span id="index-1"></span><h2>Migrating from EAPI 7 to EAPI 8<a class="headerlink" href="#migrating-from-eapi-7-to-eapi-8" title="Permalink to this headline">¶</a></h2> +<span id="index-1"></span><h2>Migrating from EAPI 7 to EAPI 8<a class="headerlink" href="#migrating-from-eapi-7-to-eapi-8" title="Permalink to this heading">¶</a></h2> <p>EAPI 8 has banned everything that’s been deprecated in EAPI 7, as well as some other obsolete stuff. The following table lists all banned things along with their suggested replacements.</p> <blockquote> <div><table class="docutils align-default"> -<colgroup> -<col style="width: 46%" /> -<col style="width: 54%" /> -</colgroup> <thead> <tr class="row-odd"><th class="head"><p>Deprecated thing</p></th> <th class="head"><p>Replacement</p></th> @@ -196,7 +193,7 @@ of Python 2 support, it always evaluated to true.</p></li> <p>All the aforementioned replacements are available in all EAPIs.</p> </section> <section id="migrating-to-pep-517-builds"> -<h2>Migrating to PEP 517 builds<a class="headerlink" href="#migrating-to-pep-517-builds" title="Permalink to this headline">¶</a></h2> +<h2>Migrating to PEP 517 builds<a class="headerlink" href="#migrating-to-pep-517-builds" title="Permalink to this heading">¶</a></h2> <p>As of January 2022, the <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> can use PEP 517 build backends instead of calling setuptools directly. The new mode is particularly useful for:</p> @@ -297,7 +294,7 @@ necessary and tests should work out of the box.</p></li> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -314,7 +311,7 @@ necessary and tests should work out of the box.</p></li> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/multi.html b/guide/multi.html index 9c2bec6..392e5bb 100644 --- a/guide/multi.html +++ b/guide/multi.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>python-r1 — multi-impl packages — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,7 +35,7 @@ <div class="body" role="main"> <section id="python-r1-multi-impl-packages"> -<h1>python-r1 — multi-impl packages<a class="headerlink" href="#python-r1-multi-impl-packages" title="Permalink to this headline">¶</a></h1> +<h1>python-r1 — multi-impl packages<a class="headerlink" href="#python-r1-multi-impl-packages" title="Permalink to this heading">¶</a></h1> <p>The <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> eclass is used to install multi-impl packages. It is considered an expert eclass — when possible, you should prefer using <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> instead. For packages using distutils @@ -42,7 +43,7 @@ or a similar Python build system, <code class="docutils literal notranslate"><sp instead.</p> <p>Eclass reference: <a class="reference external" href="https://devmanual.gentoo.org/eclass-reference/python-r1.eclass/index.html">python-r1.eclass(5)</a></p> <section id="manual-install"> -<span id="index-0"></span><h2>Manual install<a class="headerlink" href="#manual-install" title="Permalink to this headline">¶</a></h2> +<span id="index-0"></span><h2>Manual install<a class="headerlink" href="#manual-install" title="Permalink to this heading">¶</a></h2> <p>The simplest case of multi-impl package is a package without a specific build system. The modules need to be installed manually here, and <code class="docutils literal notranslate"><span class="pre">python_foreach_impl</span></code> function is used to repeat the install step @@ -110,7 +111,7 @@ need to be executed:</p> </div> </section> <section id="dependencies"> -<span id="index-1"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this headline">¶</a></h2> +<span id="index-1"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this heading">¶</a></h2> <p>When depending on other Python packages, USE dependencies need to be declared in order to ensure that the dependencies would be built against all the Python implementations enabled for the package. This is easily @@ -124,7 +125,7 @@ to the dependencies:</p> </div> </section> <section id="pure-python-autotools-package"> -<span id="index-2"></span><h2>Pure Python autotools package<a class="headerlink" href="#pure-python-autotools-package" title="Permalink to this headline">¶</a></h2> +<span id="index-2"></span><h2>Pure Python autotools package<a class="headerlink" href="#pure-python-autotools-package" title="Permalink to this heading">¶</a></h2> <p>Another typical case for this eclass is to handle a pure Python package with a non-standard build system. In this case, it is generally necessary to call phase functions via <code class="docutils literal notranslate"><span class="pre">python_foreach_impl</span></code>. Whenever @@ -249,7 +250,7 @@ to do that:</p> has been removed in order to disable out-of-source builds.</p> </section> <section id="conditional-python-use"> -<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Permalink to this headline">¶</a></h2> +<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Permalink to this heading">¶</a></h2> <p>When the package installs Python components conditionally to a USE flag, the respective USE conditional needs to be consistently used in metadata variables and in <code class="docutils literal notranslate"><span class="pre">python_foreach_impl</span></code> calls.</p> @@ -309,7 +310,7 @@ rules for installing Python files as they are suitable only for single-impl installs.</p> </section> <section id="additional-build-time-python-use"> -<span id="index-3"></span><h2>Additional build-time Python use<a class="headerlink" href="#additional-build-time-python-use" title="Permalink to this headline">¶</a></h2> +<span id="index-3"></span><h2>Additional build-time Python use<a class="headerlink" href="#additional-build-time-python-use" title="Permalink to this heading">¶</a></h2> <p>Some packages additionally require Python at build time, independently of Python components installed (i.e. outside <code class="docutils literal notranslate"><span class="pre">python_foreach_impl</span></code>). The eclass provides extensive API for this purpose but for now we’ll @@ -436,7 +437,7 @@ flag, while parts affecting build time (<code class="docutils literal notranslat </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -453,7 +454,7 @@ flag, while parts affecting build time (<code class="docutils literal notranslat ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/package-maintenance.html b/guide/package-maintenance.html index 320466d..9fb1d4e 100644 --- a/guide/package-maintenance.html +++ b/guide/package-maintenance.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Python package maintenance — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,9 +35,9 @@ <div class="body" role="main"> <section id="python-package-maintenance"> -<h1>Python package maintenance<a class="headerlink" href="#python-package-maintenance" title="Permalink to this headline">¶</a></h1> +<h1>Python package maintenance<a class="headerlink" href="#python-package-maintenance" title="Permalink to this heading">¶</a></h1> <section id="support-for-python-2"> -<h2>Support for Python 2<a class="headerlink" href="#support-for-python-2" title="Permalink to this headline">¶</a></h2> +<h2>Support for Python 2<a class="headerlink" href="#support-for-python-2" title="Permalink to this heading">¶</a></h2> <p>Since Python 2.7 reached EOL, Gentoo is currently phasing out support for Python 2. Unless your package or its reverse dependencies really need it, you should omit it from <code class="docutils literal notranslate"><span class="pre">PYTHON_COMPAT</span></code>. If you’re adding @@ -49,7 +50,7 @@ of reverse dependencies afterwards.</p> supporting it soon are being slowly removed.</p> </section> <section id="which-implementations-to-test-new-packages-for"> -<h2>Which implementations to test new packages for?<a class="headerlink" href="#which-implementations-to-test-new-packages-for" title="Permalink to this headline">¶</a></h2> +<h2>Which implementations to test new packages for?<a class="headerlink" href="#which-implementations-to-test-new-packages-for" title="Permalink to this heading">¶</a></h2> <p>The absolute minimum set of targets are the current default targets found in <code class="docutils literal notranslate"><span class="pre">profiles/base/make.defaults</span></code>. However, developers are strongly encouraged to test at least the next Python 3 version @@ -58,7 +59,7 @@ in order to ease future transition, and preferably all future versions.</p> coverage of PyPy3 support.</p> </section> <section id="adding-new-python-implementations-to-existing-packages"> -<h2>Adding new Python implementations to existing packages<a class="headerlink" href="#adding-new-python-implementations-to-existing-packages" title="Permalink to this headline">¶</a></h2> +<h2>Adding new Python implementations to existing packages<a class="headerlink" href="#adding-new-python-implementations-to-existing-packages" title="Permalink to this heading">¶</a></h2> <p>New Python implementations can generally be added to existing packages without a revision bump. This is because the new dependencies are added conditionally to new USE flags. Since the existing users can not have @@ -70,7 +71,7 @@ will not be able to enable newly added flags and therefore the risk of the change breaking stable systems is minimal.</p> </section> <section id="which-packages-can-be-co-maintained-by-the-python-project"> -<h2>Which packages can be (co-)maintained by the Python project?<a class="headerlink" href="#which-packages-can-be-co-maintained-by-the-python-project" title="Permalink to this headline">¶</a></h2> +<h2>Which packages can be (co-)maintained by the Python project?<a class="headerlink" href="#which-packages-can-be-co-maintained-by-the-python-project" title="Permalink to this heading">¶</a></h2> <p>A large part of the Python ecosystem is fairly consistent, making it feasible for (co-)maintenance by the Gentoo Python team.</p> <p>As a rule of thumb, Python team is ready to maintain packages specific @@ -87,7 +88,7 @@ the package. However, if you are not a member of the project, please do not add us without asking first.</p> </section> <section id="porting-packages-to-a-new-eapi"> -<h2>Porting packages to a new EAPI<a class="headerlink" href="#porting-packages-to-a-new-eapi" title="Permalink to this headline">¶</a></h2> +<h2>Porting packages to a new EAPI<a class="headerlink" href="#porting-packages-to-a-new-eapi" title="Permalink to this heading">¶</a></h2> <p>When porting packages to a new EAPI, please take care not to port the dependencies of Portage prematurely. This generally includes <code class="docutils literal notranslate"><span class="pre">app-portage/gemato</span></code>, <code class="docutils literal notranslate"><span class="pre">dev-python/setuptools</span></code> and their recursive @@ -169,7 +170,7 @@ necessary to install a new Portage version.</p> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -186,7 +187,7 @@ necessary to install a new Portage version.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/porting.html b/guide/porting.html index 82dd7bc..3ff19a5 100644 --- a/guide/porting.html +++ b/guide/porting.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Porting tips — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,7 +35,7 @@ <div class="body" role="main"> <section id="porting-tips"> -<h1>Porting tips<a class="headerlink" href="#porting-tips" title="Permalink to this headline">¶</a></h1> +<h1>Porting tips<a class="headerlink" href="#porting-tips" title="Permalink to this heading">¶</a></h1> <p>This section highlights some of the known incompatible changes made in Python that could break Python scripts and modules that used to work in prior versions. The sections are split into retroactive changes made @@ -44,9 +45,9 @@ to all Python releases, and information specific to every Python branch of other problems you’ve hit while porting your packages, please let me know and I will update it.</p> <section id="retroactive-changes"> -<h2>Retroactive changes<a class="headerlink" href="#retroactive-changes" title="Permalink to this headline">¶</a></h2> +<h2>Retroactive changes<a class="headerlink" href="#retroactive-changes" title="Permalink to this heading">¶</a></h2> <section id="bpo43882-urlsplit-now-strips-lf-cr-and-ht-characters"> -<h3><a class="reference external" href="https://bugs.python.org/issue43882">bpo43882</a>: urlsplit now strips LF, CR and HT characters<a class="headerlink" href="#bpo43882-urlsplit-now-strips-lf-cr-and-ht-characters" title="Permalink to this headline">¶</a></h3> +<h3><a class="reference external" href="https://bugs.python.org/issue43882">bpo43882</a>: urlsplit now strips LF, CR and HT characters<a class="headerlink" href="#bpo43882-urlsplit-now-strips-lf-cr-and-ht-characters" title="Permalink to this heading">¶</a></h3> <p>Changed in: 2.7.18_p9, 3.6.13_p3, 3.7.10_p3, 3.8.9_p2, 3.9.4_p1</p> <p>Historically, various <a class="reference external" href="https://docs.python.org/3/library/urllib.parse.html">urllib.parse</a> methods have passed special characters such as LF, CR and HT through into the split URL components. @@ -74,10 +75,10 @@ PR#14349</a> for an example of impact and a fix.</p> </section> </section> <section id="python-3-11"> -<h2>Python 3.11<a class="headerlink" href="#python-3-11" title="Permalink to this headline">¶</a></h2> +<h2>Python 3.11<a class="headerlink" href="#python-3-11" title="Permalink to this heading">¶</a></h2> <p>See also: <a class="reference external" href="https://docs.python.org/3.11/whatsnew/3.11.html">what’s new in Python 3.11</a></p> <section id="generator-based-coroutine-removal-asyncio-coroutine"> -<h3>Generator-based coroutine removal (asyncio.coroutine)<a class="headerlink" href="#generator-based-coroutine-removal-asyncio-coroutine" title="Permalink to this headline">¶</a></h3> +<h3>Generator-based coroutine removal (asyncio.coroutine)<a class="headerlink" href="#generator-based-coroutine-removal-asyncio-coroutine" title="Permalink to this heading">¶</a></h3> <p>Support for <a class="reference external" href="https://docs.python.org/3.10/library/asyncio-task.html#generator-based-coroutines">generator-based coroutines</a> has been deprecated since Python 3.8, and is finally removed in 3.11. This usually results in the following error:</p> @@ -101,7 +102,7 @@ and <code class="docutils literal notranslate"><span class="pre">yield</span> <s </div> </section> <section id="inspect-getargspec-and-inspect-formatargspec-removal"> -<h3>inspect.getargspec() and inspect.formatargspec() removal<a class="headerlink" href="#inspect-getargspec-and-inspect-formatargspec-removal" title="Permalink to this headline">¶</a></h3> +<h3>inspect.getargspec() and inspect.formatargspec() removal<a class="headerlink" href="#inspect-getargspec-and-inspect-formatargspec-removal" title="Permalink to this heading">¶</a></h3> <p>The <a class="reference external" href="https://docs.python.org/3.10/library/inspect.html#inspect.getargspec">inspect.getargspec()</a> (deprecated since Python 3.0) and <a class="reference external" href="https://docs.python.org/3.10/library/inspect.html#inspect.formatargspec">inspect.formatargspec()</a> (deprecated since Python 3.5) functions are both removed in Python 3.11.</p> @@ -202,10 +203,10 @@ of <code class="docutils literal notranslate"><span class="pre">Signature</span> </section> </section> <section id="python-3-10"> -<h2>Python 3.10<a class="headerlink" href="#python-3-10" title="Permalink to this headline">¶</a></h2> +<h2>Python 3.10<a class="headerlink" href="#python-3-10" title="Permalink to this heading">¶</a></h2> <p>See also: <a class="reference external" href="https://docs.python.org/3/whatsnew/3.10.html">what’s new in Python 3.10</a></p> <section id="configure-no-package-python-3-1-found"> -<h3>configure: No package ‘python-3.1’ found<a class="headerlink" href="#configure-no-package-python-3-1-found" title="Permalink to this headline">¶</a></h3> +<h3>configure: No package ‘python-3.1’ found<a class="headerlink" href="#configure-no-package-python-3-1-found" title="Permalink to this heading">¶</a></h3> <p>automake prior to 1.16.3 wrongly recognized Python 3.10 as 3.1. As a result, build with Python 3.10 fails:</p> <div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">checking for python version... 3.1</span> @@ -241,17 +242,13 @@ distribution of automake:</p> <p>The upstream fix is to create new distfiles using automake-1.16.3+.</p> </section> <section id="distutils-sysconfig-deprecation"> -<h3>distutils.sysconfig deprecation<a class="headerlink" href="#distutils-sysconfig-deprecation" title="Permalink to this headline">¶</a></h3> +<h3>distutils.sysconfig deprecation<a class="headerlink" href="#distutils-sysconfig-deprecation" title="Permalink to this heading">¶</a></h3> <p>Upstream intends to remove distutils by Python 3.12. Python 3.10 starts throwing deprecation warnings for various distutils modules. The distutils.sysconfig is usually easy to port.</p> <p>The following table summarizes replacements for common path getters.</p> <blockquote> <div><table class="docutils align-default"> -<colgroup> -<col style="width: 51%" /> -<col style="width: 49%" /> -</colgroup> <thead> <tr class="row-odd"><th class="head"><p>distutils.sysconfig call</p></th> <th class="head"><p>sysconfig replacement</p></th> @@ -284,10 +281,10 @@ no trivial replacement for the variants with <code class="docutils literal notra </section> </section> <section id="python-3-9"> -<h2>Python 3.9<a class="headerlink" href="#python-3-9" title="Permalink to this headline">¶</a></h2> +<h2>Python 3.9<a class="headerlink" href="#python-3-9" title="Permalink to this heading">¶</a></h2> <p>See also: <a class="reference external" href="https://docs.python.org/3/whatsnew/3.9.html">what’s new in Python 3.9</a></p> <section id="base64-encodestring-base64-decodestring-removal"> -<h3>base64.encodestring / base64.decodestring removal<a class="headerlink" href="#base64-encodestring-base64-decodestring-removal" title="Permalink to this headline">¶</a></h3> +<h3>base64.encodestring / base64.decodestring removal<a class="headerlink" href="#base64-encodestring-base64-decodestring-removal" title="Permalink to this heading">¶</a></h3> <p>Python 3.9 removes the deprecated <code class="docutils literal notranslate"><span class="pre">base64.encodestring()</span></code> and <code class="docutils literal notranslate"><span class="pre">base64.decodestring()</span></code> functions. While they were deprecated since Python 3.1, many packages still use them today.</p> @@ -316,10 +313,10 @@ of base64-encoded data for any length of output.</p> </section> </section> <section id="python-3-8"> -<h2>Python 3.8<a class="headerlink" href="#python-3-8" title="Permalink to this headline">¶</a></h2> +<h2>Python 3.8<a class="headerlink" href="#python-3-8" title="Permalink to this heading">¶</a></h2> <p>See also: <a class="reference external" href="https://docs.python.org/3/whatsnew/3.8.html">what’s new in Python 3.8</a></p> <section id="python-config-and-pkg-config-no-longer-list-python-library-by-default"> -<h3>python-config and pkg-config no longer list Python library by default<a class="headerlink" href="#python-config-and-pkg-config-no-longer-list-python-library-by-default" title="Permalink to this headline">¶</a></h3> +<h3>python-config and pkg-config no longer list Python library by default<a class="headerlink" href="#python-config-and-pkg-config-no-longer-list-python-library-by-default" title="Permalink to this heading">¶</a></h3> <p>Until Python 3.7, the <code class="docutils literal notranslate"><span class="pre">python-X.Y</span></code> pkg-config file and python-config tool listed the Python library. Starting with 3.8, this is no longer the case. If you are building Python extensions, this is fine (they @@ -407,7 +404,7 @@ are provided for the purpose.</p> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -424,7 +421,7 @@ are provided for the purpose.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/preface.html b/guide/preface.html index 2616fc1..18b3e1e 100644 --- a/guide/preface.html +++ b/guide/preface.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Preface — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,7 +35,7 @@ <div class="body" role="main"> <section id="preface"> -<h1>Preface<a class="headerlink" href="#preface" title="Permalink to this headline">¶</a></h1> +<h1>Preface<a class="headerlink" href="#preface" title="Permalink to this heading">¶</a></h1> <p>Gentoo provides one of the best frameworks for providing Python support in packages among operating systems. This includes support for running multiple versions of Python (while most other distributions @@ -116,7 +117,7 @@ and improvements are welcome.</p> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -133,7 +134,7 @@ and improvements are welcome.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/pytest.html b/guide/pytest.html index ad3f8bc..6a29ca2 100644 --- a/guide/pytest.html +++ b/guide/pytest.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>pytest recipes — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,9 +35,9 @@ <div class="body" role="main"> <section id="pytest-recipes"> -<h1>pytest recipes<a class="headerlink" href="#pytest-recipes" title="Permalink to this headline">¶</a></h1> +<h1>pytest recipes<a class="headerlink" href="#pytest-recipes" title="Permalink to this heading">¶</a></h1> <section id="skipping-tests-based-on-markers"> -<h2>Skipping tests based on markers<a class="headerlink" href="#skipping-tests-based-on-markers" title="Permalink to this headline">¶</a></h2> +<h2>Skipping tests based on markers<a class="headerlink" href="#skipping-tests-based-on-markers" title="Permalink to this heading">¶</a></h2> <p>A few packages use <a class="reference external" href="https://docs.pytest.org/en/stable/example/markers.html">custom pytest markers</a> to indicate e.g. tests requiring Internet access. These markers can be used to conveniently disable whole test groups, e.g.:</p> @@ -47,7 +48,7 @@ disable whole test groups, e.g.:</p> </div> </section> <section id="skipping-tests-based-on-paths-names"> -<h2>Skipping tests based on paths/names<a class="headerlink" href="#skipping-tests-based-on-paths-names" title="Permalink to this headline">¶</a></h2> +<h2>Skipping tests based on paths/names<a class="headerlink" href="#skipping-tests-based-on-paths-names" title="Permalink to this heading">¶</a></h2> <p>There are two primary methods of skipping tests based on path (and name) in pytest: using <code class="docutils literal notranslate"><span class="pre">--ignore</span></code> and <code class="docutils literal notranslate"><span class="pre">--deselect</span></code>.</p> <p><code class="docutils literal notranslate"><span class="pre">--ignore</span></code> causes pytest to entirely ignore a file or a directory @@ -71,7 +72,7 @@ requires using the local scope.</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>python_test<span class="o">()</span> <span class="o">{</span> <span class="nb">local</span> <span class="nv">EPYTEST_IGNORE</span><span class="o">=(</span> <span class="c1"># ignore whole file with missing dep</span> - --ignore tests/test_client.py + tests/test_client.py <span class="o">)</span> <span class="nb">local</span> <span class="nv">EPYTEST_DESELECT</span><span class="o">=(</span> <span class="c1"># deselect a single test</span> @@ -89,7 +90,7 @@ requires using the local scope.</p> </div> </section> <section id="avoiding-the-dependency-on-pytest-runner"> -<h2>Avoiding the dependency on pytest-runner<a class="headerlink" href="#avoiding-the-dependency-on-pytest-runner" title="Permalink to this headline">¶</a></h2> +<h2>Avoiding the dependency on pytest-runner<a class="headerlink" href="#avoiding-the-dependency-on-pytest-runner" title="Permalink to this heading">¶</a></h2> <p><a class="reference external" href="https://pypi.org/project/pytest-runner/">pytest-runner</a> is a package providing <code class="docutils literal notranslate"><span class="pre">pytest</span></code> command to setuptools. While it might be convenient upstream, there is no real reason to use it in Gentoo packages. It has no real advantage over calling pytest @@ -107,7 +108,7 @@ tests. If this is the case, the dependency must be stripped.</p> </div> </section> <section id="using-pytest-xdist-to-run-tests-in-parallel"> -<h2>Using pytest-xdist to run tests in parallel<a class="headerlink" href="#using-pytest-xdist-to-run-tests-in-parallel" title="Permalink to this headline">¶</a></h2> +<h2>Using pytest-xdist to run tests in parallel<a class="headerlink" href="#using-pytest-xdist-to-run-tests-in-parallel" title="Permalink to this heading">¶</a></h2> <p><a class="reference external" href="https://pypi.org/project/pytest-xdist/">pytest-xdist</a> is a plugin that makes it possible to run multiple tests in parallel. This is especially useful for programs with large test suites that take significant time to run single-threaded.</p> @@ -141,7 +142,7 @@ gain from doing so. If the package’s tests take a short time to finish, please avoid the dependency and strip it if necessary.</p> </section> <section id="avoiding-dependencies-on-other-pytest-plugins"> -<h2>Avoiding dependencies on other pytest plugins<a class="headerlink" href="#avoiding-dependencies-on-other-pytest-plugins" title="Permalink to this headline">¶</a></h2> +<h2>Avoiding dependencies on other pytest plugins<a class="headerlink" href="#avoiding-dependencies-on-other-pytest-plugins" title="Permalink to this heading">¶</a></h2> <p>There is a number of pytest plugins that have little value to Gentoo users. They include plugins for test coverage (<code class="docutils literal notranslate"><span class="pre">dev-python/pytest-cov</span></code>), coding style (<code class="docutils literal notranslate"><span class="pre">dev-python/pytest-flake8</span></code>) @@ -166,7 +167,7 @@ to strip options enabling them from <code class="docutils literal notranslate">< </div> </section> <section id="explicitly-disabling-automatic-pytest-plugins"> -<h2>Explicitly disabling automatic pytest plugins<a class="headerlink" href="#explicitly-disabling-automatic-pytest-plugins" title="Permalink to this headline">¶</a></h2> +<h2>Explicitly disabling automatic pytest plugins<a class="headerlink" href="#explicitly-disabling-automatic-pytest-plugins" title="Permalink to this heading">¶</a></h2> <p>Besides plugins explicitly used by the package, there are a few pytest plugins that enable themselves automatically for all test suites when installed. In some cases, their presence causes tests of packages @@ -182,7 +183,7 @@ it explicitly:</p> </div> </section> <section id="expert-disabling-plugin-autoloading-entirely"> -<h2>Expert: disabling plugin autoloading entirely<a class="headerlink" href="#expert-disabling-plugin-autoloading-entirely" title="Permalink to this headline">¶</a></h2> +<h2>Expert: disabling plugin autoloading entirely<a class="headerlink" href="#expert-disabling-plugin-autoloading-entirely" title="Permalink to this heading">¶</a></h2> <p>If a test suite invokes pytest recursively (this is particularly the case when packaging other pytest plugins), the <code class="docutils literal notranslate"><span class="pre">-p</span></code> option can be insufficient to disable problematic plugins, as it does not @@ -207,7 +208,7 @@ the <code class="docutils literal notranslate"><span class="pre">entry_points.tx </div> </section> <section id="typeerror-make-test-flaky-got-an-unexpected-keyword-argument-reruns"> -<h2>TypeError: _make_test_flaky() got an unexpected keyword argument ‘reruns’<a class="headerlink" href="#typeerror-make-test-flaky-got-an-unexpected-keyword-argument-reruns" title="Permalink to this headline">¶</a></h2> +<h2>TypeError: _make_test_flaky() got an unexpected keyword argument ‘reruns’<a class="headerlink" href="#typeerror-make-test-flaky-got-an-unexpected-keyword-argument-reruns" title="Permalink to this heading">¶</a></h2> <p>If you see a test error resembling the following:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>TypeError: _make_test_flaky<span class="o">()</span> got an unexpected keyword argument <span class="s1">'reruns'</span> </pre></div> @@ -230,7 +231,7 @@ python_test<span class="o">()</span> <span class="o">{</span> </div> </section> <section id="importpathmismatcherror"> -<h2>ImportPathMismatchError<a class="headerlink" href="#importpathmismatcherror" title="Permalink to this headline">¶</a></h2> +<h2>ImportPathMismatchError<a class="headerlink" href="#importpathmismatcherror" title="Permalink to this heading">¶</a></h2> <p>An <code class="docutils literal notranslate"><span class="pre">ImportPathMismatchError</span></code> generally indicates that the same Python module (or one that supposedly looks the same) has been loaded twice using different paths, e.g.:</p> @@ -258,17 +259,13 @@ discovery to the actual test directories, e.g.:</p> </div> </section> <section id="fixture-not-found"> -<h2>fixture ‘…’ not found<a class="headerlink" href="#fixture-not-found" title="Permalink to this headline">¶</a></h2> +<h2>fixture ‘…’ not found<a class="headerlink" href="#fixture-not-found" title="Permalink to this heading">¶</a></h2> <p>Most of the time, a missing fixture indicates that some pytest plugin is not installed. In rare cases, it can signify an incompatible pytest version or package issue.</p> <p>The following table maps common fixture names to their respective plugins.</p> <table class="docutils align-default"> -<colgroup> -<col style="width: 49%" /> -<col style="width: 51%" /> -</colgroup> <thead> <tr class="row-odd"><th class="head"><p>Fixture name</p></th> <th class="head"><p>Package</p></th> @@ -294,7 +291,7 @@ plugins.</p> </table> </section> <section id="warnings"> -<h2>Warnings<a class="headerlink" href="#warnings" title="Permalink to this headline">¶</a></h2> +<h2>Warnings<a class="headerlink" href="#warnings" title="Permalink to this heading">¶</a></h2> <p>pytest captures all warnings from the test suite by default, and prints a summary of them at the end of the test suite run:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="o">===============================</span> warnings <span class="nv">summary</span> <span class="o">===============================</span> @@ -419,7 +416,7 @@ setting ignores <code class="docutils literal notranslate"><span class="pre">Dep </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -436,7 +433,7 @@ setting ignores <code class="docutils literal notranslate"><span class="pre">Dep ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/search.html b/guide/search.html index d0ad692..56e63f2 100644 --- a/guide/search.html +++ b/guide/search.html @@ -1,7 +1,7 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <script src="_static/searchtools.js"></script> <script src="_static/language_data.js"></script> @@ -130,7 +131,7 @@ ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> </div> diff --git a/guide/searchindex.js b/guide/searchindex.js index 493976e..fc71c41 100644 --- a/guide/searchindex.js +++ b/guide/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["any","basic","buildsys","concept","depend","distutils","distutils-legacy","eclass","expert-multi","helper","index","interpreter","interpreter-maintenance","migration","multi","package-maintenance","porting","preface","pytest","single","test"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"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},filenames:["any.rst","basic.rst","buildsys.rst","concept.rst","depend.rst","distutils.rst","distutils-legacy.rst","eclass.rst","expert-multi.rst","helper.rst","index.rst","interpreter.rst","interpreter-maintenance.rst","migration.rst","multi.rst","package-maintenance.rst","porting.rst","preface.rst","pytest.rst","single.rst","test.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[0,2,4,5,6,8,10,12,14,16,18,19,20],"01":18,"0420":[],"0x00007f748bc47740":20,"0x00007fb5db746740":20,"0x03000000":20,"0x03030000":11,"1":[0,2,3,4,5,6,8,9,12,18,19,20],"10":[1,4,5,8,10,12],"100":12,"10000":2,"1014":20,"10_p3":16,"11":[2,5,10,12,20],"110":5,"117":20,"119":20,"12":[2,5,8,16,18],"127":20,"13":[5,18,20],"131":5,"135":18,"13_p3":16,"14":[8,20],"143":5,"14349":16,"148":5,"16":16,"17":8,"170":20,"18":8,"180":20,"187":20,"18_p9":16,"193":20,"1999":[0,2,4,5,6,8,14,19],"2":[0,2,3,4,5,8,9,10,11,12,13,14,16,17,19,20],"20":12,"20120407":[2,8],"2017":8,"2020":[0,2,4,5,6,8,13,14,19],"2022":[5,13,18],"208":0,"23":20,"234":20,"24":[2,8,18,20],"25":20,"26":8,"27":[2,8],"29":5,"292":5,"2934":20,"2_7":[4,5],"2_pkg_setup":2,"2d":14,"2to3":6,"3":[0,2,3,4,5,6,8,9,10,11,12,13,14,15,17,18,19,20],"30":5,"31":2,"34":20,"360":2,"38":5,"3_":4,"3_6":[5,14],"3_7":[5,14],"3_8":5,"3_p30":0,"4":[0,3,5,8,9,10,11,12,14,20],"40":12,"42":2,"420":3,"425":5,"48":5,"492":16,"4_p1":16,"5":[0,2,5,8,9,11,12,14,16,18,19,20],"517":[1,3,6,10,12,20],"524":20,"54":20,"577":18,"578":20,"583":18,"596":20,"5a":20,"6":[0,1,2,4,5,6,8,11,12,14,16,18,19,20],"621":1,"655482":0,"66":20,"671":20,"6e5e8a57628095d8d0c8bbb38187afb0f3a42112":2,"7":[0,1,2,3,4,5,6,8,9,10,11,12,14,15,16,18,19,20],"70":2,"717":5,"73":20,"74":20,"7m":16,"8":[0,1,2,3,4,5,6,8,9,10,11,12,19,20],"80":5,"85":20,"87":20,"9":[2,5,10,12,20],"90":[2,14],"975":20,"991":20,"9_p2":16,"abstract":[7,14],"boolean":5,"break":[15,16],"byte":[10,16],"case":[0,1,2,3,4,5,6,7,8,9,11,12,13,14,16,18,19,20],"catch":5,"class":[0,1,5,16,18],"default":[1,2,5,6,7,8,9,12,13,14,15,18,19,20],"do":[0,1,3,4,5,6,8,9,11,12,14,15,17,18,19,20],"export":[0,1,2,5,19],"final":[1,2,4,5,9,12,13,16,19,20],"float":16,"function":[0,1,4,6,7,8,10,11,13,14,16,19,20],"g\u00f3rny":10,"import":[0,1,3,4,5,6,7,11,12,13,14,16,18,20],"int":16,"long":[5,11,12],"micha\u0142":10,"new":[2,5,6,9,10,11,13,16,18],"null":20,"public":[0,2,4,5,6,8,14,19],"return":[0,2,8,16,20],"short":[13,18],"static":[5,8],"switch":[4,9,12,13,20],"throw":16,"true":[0,1,2,5,6,8,12,13,16,20],"try":[1,6,8,9,11,20],"var":20,"while":[0,2,3,4,5,6,7,8,11,12,14,16,17,18,19,20],A:[0,1,2,4,5,6,8,10,11,15,18],As:[1,3,5,6,7,8,11,13,15,16,18,19,20],At:[2,5,12,15,17],But:20,By:[5,6,11],For:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,16,18,20],If:[1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,18,19,20],In:[0,1,2,3,4,5,7,8,10,11,12,14,16,18,19,20],It:[0,1,3,4,5,6,7,9,11,12,13,14,16,18,19,20],Its:12,No:[3,5],Not:18,On:11,One:[16,20],That:[2,16,20],The:[0,2,3,4,6,7,8,9,10,11,12,13,14,15,16,18,19,20],Their:[5,6,9],Then:[5,12],There:[1,3,5,8,9,16,18,20],These:[1,6,7,12,13,18,20],To:[5,6,8,9,12,16,18,19],With:[6,20],_:[5,12,20],____________________:20,_____________________:18,______________________:18,__dict__:20,__import__:3,__init__:[1,3,5,9,18,20],__legacy__:5,__main__:20,__name__:3,__path__:3,_all:[5,8],_bootstrap:20,_distribut:5,_do_pars:5,_feedparser_sgmllib:9,_find_and_load:20,_find_and_load_unlock:20,_gcd_import:20,_get_vers:5,_hashtabl:5,_importtestmodul:20,_install_setup_requir:5,_lib:5,_load_unlock:20,_make_test_flaki:10,_multical:20,_overridesdir:14,_pytest:[18,20],_python_all_impl:12,_python_impl_match:12,_python_impl_support:[],_python_set_impl:12,_python_verify_pattern:12,_rc:2,_run_cod:20,_run_module_as_main:20,_rust:5,_tslib:5,abil:[5,6],abl:[3,15],abort:10,about:[3,6,13],abov:[0,1,6,8,12,13,15,19,20],absolut:[0,1,9,15,19,20],accept:[0,1,5,6,9,12,15,16,18],access:[0,5,10,11,18],accompani:11,accord:8,account:[2,5,8,20],acct:2,achiev:[0,8,11,16],across:5,act:3,action:[3,5],activ:[8,17],actual:[1,5,6,7,8,9,11,12,18,20],ad:[1,10,11,13,14,18],add:[1,2,5,6,8,12,15,19,20],addit:[1,2,4,6,8,9,10,11,12,13,18,20],addition:[5,11,14],addnod:3,addopt:5,address:[6,12,16],adishatz:4,adjust:[4,9,11,16],admin:[2,8],advanc:10,advantag:[4,5,18,20],affect:[9,14],aforement:[7,13,16],after:[3,5,6,9,12,13,16],afterward:[11,14,15],again:[1,2,20],against:[0,4,7,9,11,12,14,19,20],aggress:12,agnost:2,aim:[5,11,15,17],aiohttp:[5,18],alabast:[5,6],alias:[5,16],alik:[6,11,13],all:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,18,19,20],allow:[7,20],allow_test:20,alon:11,along:[2,5,6,7,11,13,19,20],alongsid:[5,6],alpha:[0,2,4,5,6,8,12,14,19],alreadi:[5,9,12,14],also:[0,1,3,4,5,6,7,8,9,11,12,13,14,16,18,20],alter:[5,18],altern:[3,6,8,10,16,17,20],altogeth:20,alwai:[5,6,8,11,13,16,17],am:14,amd64:[0,2,4,5,6,8,12,14,19],among:17,amount:[11,12,20],an:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,19,20],analysi:[2,19],ani:[1,2,3,5,6,7,10,14,16,18,20],annot:16,announc:12,anoth:[0,8,9,14,16,18,20],anticip:15,anymor:[8,11],anyth:9,anywai:[5,16],anywher:5,apach:[0,2,4,5,8],apb:2,api:[0,2,7,9,10,11,13,14,16],app:[0,2,4,5,8,12,14,15],appeas:5,append:[5,14],appli:[1,4,5,6,7,12,15,18,19,20],applic:[2,9,12],approach:[1,5,8],appropri:[0,2,4,5,6,7,9,11,12,15,19],ar:[0,1,2,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20],arab:19,arabey:19,arabic2tran:19,arbitrari:[2,13],arch:[2,8,12],archiv:[0,2,4,10,19,20],area:20,arg:16,argcomplet:5,argpars:5,argspec:16,argument:[4,6,10,13,16,20],argv:[],arm64:[0,2,4,5,6,8,14,19],arm:[0,2,4,5,6,8,19],around:[3,5,6,12,20],arrai:5,artifact:5,asgiref:18,asgitest:18,ask:[12,15],asn1:5,asn1_der:5,assert:10,assign:1,assum:[0,1,5,6,9,13,19],assumpt:5,async:[16,18],asyncio:[11,18,20],attempt:[5,16,20],attr:[5,12],attribut:[3,10,16],attributeerror:16,author:[0,2,4,5,6,8,9,10,12,14,19],autoload:10,autom:2,automak:16,automat:[3,4,5,6,10,12],autoreconf:16,autotool:[0,5,6,10,16,19],avail:[4,5,6,8,12,13,16,17],avoid:[5,6,8,10,15,16,17,20],awai:[6,7],await:16,b64_encodebyt:16,b64decod:16,b64encod:16,b:0,back:[3,6,16],backend:[4,10,12,13],backport:[4,6,10,12],backtrac:20,backward:[5,11,12,16],bad:[9,16],badurl:16,ban:13,bar:16,base:[1,5,8,10,12,14,15,19,20],baselin:12,basemap:19,basenam:1,bash:[0,5,7,8,9,19],basi:7,basic:[9,10,20],batch:12,bdepend:[0,1,2,5,6,8,12,14,18,19],becam:[4,11],becaus:[2,5,6,15,18,20],becom:[11,12,16],been:[5,6,8,11,12,13,14,16,18],befor:[1,4,8,9,10,12,14,16,20],beforehand:5,beginn:17,behav:[5,8],behavior:[8,11,16],being:[1,3,6,7,8,9,10,11,12,15,16,18,20],beings:8,belong:[1,20],below:8,besid:[2,6,7,11,14,18],best:[0,5,12,16,17,18],better:[3,6,11,12,13,14],between:[1,5,8,10,11,12,13,16],bewar:20,beyond:17,bidirect:11,big:8,bin:[1,2,7,8,9,12,19,20],binari:[5,9,12],bind:[0,2,5,8,14,19],bindir:8,binpkg:12,bison:8,bit:[1,12,17],bitprophet:6,black:4,bleach:5,block:[0,8,13,20],bmrblib:2,boltzmann:2,boost:[2,7],bootstrap:[5,6,10],both:[0,1,3,5,6,7,8,12,13,16,17,18,19,20],bottom:5,bound:[3,11,16],box:[11,13],branch:[0,16,20],breakag:[5,20],broken:[5,6,18,20],brython:11,bsd:[0,2,5,6,8,14,19],bu:0,bug:[0,5,6,12,20],buggi:14,build:[3,9,10,11,16,20],build_api:5,build_config:2,build_dir:[2,3,5,14,20],build_ext:[5,6,20],build_meta:5,build_pdb2pka:2,buildscript:2,buildtool:[2,19],built:[0,1,3,5,6,7,8,11,12,14,17,19,20],builtin:2,bump:[5,12,15],bundl:[2,12],bypass:1,byte_compil:9,bz2:[2,8,19],bzip2:8,c:[1,2,5,6,8,9,10,14],cach:14,cachedir:20,cairo:14,calcul:2,call:[0,1,2,3,6,7,8,9,10,11,13,14,16,18,19,20],callabl:16,caller:20,can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,18,19,20],cangjian:14,cannot:[2,4,5,9,11,20],cantera:2,canva:14,capabl:0,captur:[18,20],care:[1,2,5,7,9,15,20],cargo:10,cargo_crate_uri:5,cargo_opt:5,cargo_src_unpack:5,carri:15,cat:[2,5],categori:1,caus:[1,4,5,8,9,13,18,20],cc:[2,9],cc_flag:2,cd:[2,5,9,12,20],ceas:20,certifi:8,cf:[5,12],cffi:10,cfg:[1,3,5,6,18],cflag:[5,9,20],cgit:0,chain:0,chanc:18,chang:[5,6,8,9,10,11,13,14,15,20],chapter:[2,8,9],chardet:[5,8],cheap:1,check:[0,5,6,9,12,13,16,17,20],checklist:[7,10],checkout:[5,12,20],cheetah3:2,chemic:2,chemistri:2,cherri:12,chewi:2,choic:[2,6,13,20],choos:[10,11,14],chose:13,chosen:12,chrpath:[2,8],ci:[5,20],cinnamon:0,circular:12,classifi:[1,6],clean:[6,12,13],cleanli:[6,12],cleanup:13,clear:12,clearli:[5,20],cli:[4,5],click:4,client:[2,8,9,11,14],clone:12,close:5,closest:6,cmake:[0,6,19],cmake_src_configur:[9,19],cmake_src_instal:9,cmd2:5,cmd:5,co:[10,20],code:[0,1,3,5,6,7,8,9,11,12,13,14,16,18,19,20],collada:5,collect:[6,18,20],collid:[18,20],collis:[3,5,20],color:5,colorama:5,coloredlog:5,column:5,com:[0,2,4,5,6,8,12,14,16,20],combin:[0,2,5,10,11,12,13,17,18,19,20],come:[5,13,18],comma:18,command:[10,14,18],commit:[2,20],common:[0,3,5,6,7,10,11,12,13,16,17,18,19,20],commonli:[1,2,3,5,6,9,11],compar:16,compat:[0,1,2,4,5,6,7,9,11,12,13,16,19],compet:11,compil:[5,6,10,11,20],complet:[0,5,16,17],complex:[7,19],compon:[2,3,8,11,14,16],composit:19,compress:5,compris:5,conceiv:[],concept:[1,5,10],concern:3,condit:[6,10,12,18,20],condition:[0,1,2,5,7,11,12,14,15,18,19],conf:[5,6],config:[5,9,12],configfil:20,configur:[5,6,8,13,14,20],confirm:20,confus:18,connect:20,consid:[1,2,3,6,7,8,12,14,16],consist:[1,6,9,13,14,15],console_script:[5,6],construct:[2,4,8,19],consum:[5,6,20],contain:[1,3,4,5,6,7,12,13],content:3,context:[5,19],continu:[8,12,20],contrari:16,control:[2,4,5,18],conveni:[1,4,5,6,18,20],convers:[5,6],convert:[6,8,13],convinc:20,copi:[1,3,5,6,9,11,19],copyright:[0,2,4,5,6,8,14,19],core:[2,5,20],coreutil:8,correct:[1,5,6,9,10,18,19],correctli:[0,1,5,6,7,9,11,12,13,16,20],correspond:[5,12],cost:5,could:[0,2,3,5,6,8,9,16,19],cov:[5,18],cover:[1,5,6,13],coverag:[1,5,15,18],cp:20,cpp:2,cpython:[1,4,5,9,11,13],crate:5,creat:[1,3,4,5,6,7,12,13,16],creativ:10,cropgtk:9,cruft:13,cryptic:5,cryptographi:8,csound:19,current:[0,5,6,11,12,13,15,18,20],custom:[1,2,6,10,13,18],cxx:2,cxx_flag:2,cxxflag:2,cycl:10,cyclic:[],cygwin:[5,6],cython:[2,10,14,19],d:[0,2,3,5,8,9,14,18],daemon:[2,8],danger:16,dash:5,dask:[5,18],data:[0,2,5,6,9,16,19,20],databas:[2,4],date:[12,17,20],dateutil:4,dbpathprefix:2,dbu:[0,2],dbuild_python_interfac:19,dbuild_python_opcod:19,deal:[2,7,8,10,15],debug:2,decid:[12,18],declar:[0,1,2,5,6,8,9,12,14,18,19],declare_namespac:3,decode_usenet_chunk:20,decodebyt:16,decor:[16,20],dedic:[5,6,14],deep:17,def:[16,18,20],default_src_prepar:5,defin:[0,1,5,6,11,19],definit:6,delet:[2,3,14],demonstr:[0,19],dep:[0,5,13,15,18],depend:[3,6,7,9,10,11,12,13,15,17],dependneci:5,deprec:[1,3,10,11,13],deprecationwarn:18,deriv:[5,6,7],desc:12,describ:[0,6,8,9],descript:[0,2,4,5,6,8,14,19],deselect:[12,18,20],design:[1,19],desir:[13,16,20],destdir:[2,8,9],destin:20,detail:[2,7,9,11,13,16,20],detect:[3,5,9,20],detector:5,determin:[5,6,7,11,19,20],dev:[0,1,2,3,4,5,6,7,8,11,12,13,14,15,18,19,20],devel:8,develop:[0,1,7,11,12,15,17,18,20],devic:[2,8],devmanu:20,dict2db:19,dict:[5,19],dictionari:[6,19],did:[3,13,16,20],die:[2,3,5,8,9,14,18,20],diff:12,differ:[0,1,3,5,9,10,11,16,18,20],dir:[5,14],direct:[6,7,14],directli:[1,5,6,7,9,11,13,16,18,20],directori:[3,6,9,10,11,12,13,14,16,18,20],disabl:[2,5,8,10,12,14,19,20],disable_tiff:5,disable_webp:5,discontinu:12,discourag:[3,6],discov:20,discoveri:[5,18,20],discret:18,disjoint:10,disk:20,displai:5,dist:5,distfil:[5,16,19],distinguish:[3,5,13],distribut:[0,2,4,5,6,7,8,14,16,17,19,20],distutil:[1,3,4,10,13,14,18,19,20],distutils_all_subphase_impl:8,distutils_arg:[5,13],distutils_dep:5,distutils_enable_sphinx:[5,8],distutils_enable_test:[4,13,18,20],distutils_in_source_build:6,distutils_install_for_test:[6,13,18,20],distutils_opt:5,distutils_pep517_instal:20,distutils_single_impl:5,distutils_strict_entry_point:6,distutils_use_pep517:[5,13],distutils_use_setuptool:[5,13],django:[16,20],dndebug:20,doabl:3,dobin:[2,9],doc:[1,2,5,8,19],docinto:5,docker:12,docompress:5,document:[1,2,8,10,11,14,17,20],dodir:9,dodoc:[2,5],doe:[1,2,3,5,6,8,9,11,12,14,15,16,18,20],doin:9,dom:11,domain:20,doman:2,don:[5,13],done:[1,5,6,8,9,12,14,18,20],doubl:19,down:11,downgrad:8,download:[0,2,5,8,14],downstream:20,dpython3_include_dir:13,dpython3_librari:13,dpython_dest:9,dpython_execut:9,dpython_include_dir:9,dpython_librari:9,draw:14,driver:2,drop:[11,16],duali:19,due:[10,12,14,18],dump:20,duplic:[5,14,20],dure:[1,6,7,12,13,18],dynam:2,e:[1,2,3,5,6,7,8,9,11,12,13,14,15,16,18,19,20],each:[5,6,7,11,14],eapi:[0,2,4,5,6,8,10,14,19],eappli:2,eapply_us:2,earli:[5,7,8,12],earlier:[3,13],eas:[12,15],easi:[5,16,20],easier:7,easiest:[5,19],easili:[5,14,18,20],eautoreconf:[14,16],ebuild:[0,1,4,5,6,7,12,13,14,15,16,17,19,20],echo:8,eclass:[0,1,2,3,4,5,6,8,9,10,13,14,17,18,19,20],econf:[5,19],econf_sourc:14,ecosystem:[5,15,17],ed:[2,9,15],editor:5,effect:[8,11],effici:5,egg:[5,6,18],eigen3:2,eigen:2,einstalldoc:[5,8,14],either:[1,2,5,7,8,9,11,13,18,20],electrostat:2,elibc_freebsd:2,elibc_glibc:8,els:[2,8,11,16],emak:[5,8,9],emb:16,embed:[1,2,9,11],emerg:12,empti:[4,5],en:5,enabl:[0,4,6,7,8,10,11,12,14,15,18],enable_tiff:5,enable_webp:5,encod:[5,16],encodebyt:16,encourag:[5,15],end:[5,6,7,9,12,14,18,20],energi:19,enforc:[1,4,5,7,8,11,18],enough:[1,5],ensur:[0,1,5,6,9,14,19],entir:[3,5,9,10,12,13,14,20],entri:[1,5,18],entropi:9,entry_point:[6,18],env:[9,12],env_var:2,environ:[0,5,6,10,11,13,14,16,18,19],envvar:18,eof:[2,5],eol:15,ep:5,eprefix:[2,8,9],epydoc:8,epytest:[5,6,8,12,18,20],epytest_deselect:[12,18],epytest_ignor:18,epython:[1,2,5,8,9,12,13,18,20],equal:20,equival:[3,6,8,9,13],error:[0,2,5,9,13,16,18,20],escap:[4,13,19],escon:2,eselect:8,esetup:[5,8],especi:[5,18,20],establish:[1,5,13,20],etc:1,eunittest:20,eutil:2,evalu:13,even:[5,8,9,11,18,20],event:[3,18],event_loop:18,eventlet:18,eventu:12,everi:[4,5,6,8,12,14,16],everyth:[2,13],ex:12,exact:[3,5,11,19],exactli:[0,7],exampl:[0,4,5,6,7,8,9,11,12,16,17,18,19,20],except:[6,7,9,11,12,16],exclud:5,exec:[1,8,9,11,12,20],exec_modul:20,exec_prefix:16,execut:[5,6,7,9,11,12,13,14,20],exist:[5,7,10,11,12],exit:[16,20],expand:4,expans:4,expect:[6,18,20],experienc:18,experiment:5,expert:[5,10,14,20],explain:[0,1,6],explan:20,explicit:[3,4,5,6,19,20],explicitli:[1,5,7,8,10,13,20],exploit:16,expos:[5,6],express:[0,8,13,19],ext:5,extend:[5,11],extend_path:3,extens:[1,6,7,8,9,10,11,14,15,16],extern:[1,2,5,6,7,11,12],extra:[1,5,6,10],extra_inc_dir:2,extra_opt:19,extran:5,extras_requir:[1,5],extrem:6,ez_setup:5,f90_interfac:2,f:[2,9],face:[12,20],facil:6,facilit:[5,9],fact:[5,20],fail:[0,1,2,5,8,9,11,12,16,18,20],failur:[1,5,10,12,18],fairli:[2,15,19],fall:[6,16],fallback:6,fals:[0,2,5,8,12,16],far:[3,12,19],fastdl:2,faster:5,fatal:[18,20],fdl:[0,19],feasibl:15,featur:[0,4,5,6,8,11,12,13,19,20],februari:13,feel:[5,15],fetch:12,few:[2,4,6,12,18,20],fewest:12,fi:[0,2,5,8,12,14,19],file:[0,1,2,3,5,6,7,8,9,10,11,12,13,14,16,18,19],filenam:[4,5],filesdir:2,fill:17,filterwarn:18,finalize_opt:5,find:[0,2,3,4,6,14,18,20],find_packag:5,fine:[3,5,12,16],finish:18,fionet:14,first:[5,6,7,11,12,15,16,18,20],firstli:20,fish:5,fit:[6,20],fix:[5,6,10,11,12,16,18,20],fixm:5,fixtur:[10,12],flag:[0,1,5,7,8,9,10,11,12,14,15,19,20],flake8:[5,18],flaki:[18,20],flex:8,flexibl:[5,7],flit:[1,6,7,12,13],flit_cor:[5,12],flit_scm:5,fnmatch:4,focu:[1,12,14],focus:12,folder:5,follow:[0,1,3,4,5,6,7,8,9,12,13,16,17,18,19,20],foo:[7,16],footprint:5,forbidden:5,forc:[5,6,8,9,12,13,18,20],fordfrog:19,foreach:5,fork:[0,11,12,20],form:[1,4,12,17],format:[8,12,16],former:[1,5,8,13,16,20],fortran:2,fortran_need:2,fortran_standard:2,fortranflag:2,forward:12,found:[0,1,3,5,6,9,10,15,20],foundat:14,four:[9,13,19],fourth:13,fragment:16,framework:[2,3,5,11,17],free:[2,15,20],freedesktop:0,freezegun:[4,18,20],freezer:18,frequent:[5,18],freshli:3,frobnic:5,from:[0,2,3,4,6,7,8,10,11,12,14,15,16,18,19,20],frozen:20,fspath:20,ftp:[2,19],full:[1,2,4,5,7,13,20],fullargspec:16,fulli:[4,5,7],func:[2,8],funcsig:11,further:[1,18],furthermor:[0,2,5],futur:[5,15],g:[1,2,3,5,6,7,8,9,11,12,13,14,15,16,18,19,20],ga:14,gain:[2,18],gap:17,gaupol:8,gc:11,gemato:15,gener:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,18,19,20],gentoo:[0,1,2,4,5,6,8,9,11,12,14,15,16,17,18,19,20],get:[0,5,6,12,13,18,20],get_event_loop:18,get_libdir:[2,8],get_nproc:[],get_path:16,get_python_inc:16,get_python_lib:16,get_udevdir:[2,8],getar:2,getcc:[2,9],getcxx:2,getfc:2,getfullargspec:16,getranlib:2,getter:[9,13,16],gettext:8,gfx:2,gh:[5,20],gi:14,git:[5,12,20],github:[0,2,4,5,6,8,12,14,17,19,20],gitlab:[2,8],give:19,given:13,glib:2,global:[0,1,5,8,13,14,18,19],gna:2,gnome2:[0,4,14],gnome2_src_configur:14,gnome2_src_instal:14,gnome2_src_prepar:14,gnome:[0,4,14],gnu:[0,2,4,5,6,8,14,19],go:[1,2,8,12,17,18],goal:[8,12,20],gobject:0,goe:[12,20],goocanva:14,good:[11,17,18,20],got:[10,13],gp:[2,8],gpl:[0,2,4,8,14,19],gpsd:[2,8],gpsd_group:[2,8],gpsd_user:[2,8],gpyutil:12,grab:[5,13],grace:2,gracefulli:[1,4,8],graph:12,greater:[5,7],greenlet:[10,18],grep:5,gross:13,group:[1,2,6,13,18],gtk2:19,gtk:14,guarante:[5,6],guess:20,gui_script:6,guid:[1,3,5,16,17],gz:[0,2,4,5,6,8,14,19,20],h:[8,9,19],ha:[2,3,5,6,7,11,12,13,14,15,16,18,20],hack:[5,6,7,13],had:2,hand:[11,13],handl:[1,4,5,6,8,13,14],handler:5,hang:8,happen:[2,3,4,6,7,8,11,12,19,20],hard:[5,8,12],hardcod:[1,12,18],harder:8,hardest:0,hardwar:11,harmless:[],has_vers:[0,12],hashtabl:5,hatchl:5,have:[0,2,3,4,5,6,7,8,9,11,12,14,15,16,18,19,20],header:[1,9],heavi:6,help:[0,5,17,20],helper:[4,5,10,14,19,20],henc:[2,5,14],hepforg:19,here:[6,8,14,19],hexvers:[11,20],high:[2,12,15,19],highlight:[0,16,19],hint:20,histor:[3,5,6,13,16],hit:16,hold:16,home:[6,12,13],homepag:[0,2,4,5,6,8,14,19],hook:5,horrend:20,host:0,hous:11,how:[5,20],howev:[1,3,5,6,7,8,9,11,12,13,15,16,18,19,20],hppa:[0,2,4,5,6,8,14,19],html:[0,5,8],http:[0,2,4,5,6,8,9,12,14,16,19,20],httpbin:[8,18],human:8,humanfriendli:5,hybrid:[5,10],hypothesi:[5,20],hz1jw:19,i18n:14,i:[3,5,6,7,11,12,14,16,18,20],ia64:[0,2,4,5,6,8,14,19],idea:20,ideal:[11,15,20],ident:5,identifi:1,idepend:0,idna:8,ignor:[3,4,5,8,18,20],imag:[5,9],imagin:8,immedi:[4,5,19],impact:16,impl:[1,5,10,13],implement:[0,1,3,4,5,6,7,10,14,17,18,19,20],impli:[2,9,11],implic:5,implicit:[14,20],implicitli:[0,3,5,8,12,19],import_modul:20,import_path:20,importerror:[5,6,10,11],importlib:[6,11,20],importlib_metadata:[4,5,6],importmod:20,importpathmismatcherror:10,improp:17,improv:[11,17],incdir:8,includ:[1,2,3,4,5,6,7,9,12,15,16,17,18,19,20],incompat:[6,11,16,18,20],inconsist:[12,20],incorrect:[5,6],increment:11,inde:13,independ:[2,5,6,7,14,19],index:[5,10],indic:[1,5,6,11,12,13,18,20],indirect:5,individu:[2,5,11,18],infer_vers:5,inflect:5,inflector:5,info:[0,6,18],inform:[1,3,5,6,10,13,16,20],inherit:[0,1,2,4,5,6,7,8,9,13,14,16,18,19],ini:[1,5,18,20],init:5,initi:20,inject:[3,5,19],inlin:[2,7,14],inplac:6,insert:16,insid:[0,1,3,5,6,9,12,14,18,19],insinto:9,inspect:5,instabl:18,instal:[0,1,3,4,7,8,10,11,12,13,15,16,18],install_requir:[1,3,5,6],instanc:[5,13],instead:[2,3,5,6,7,8,9,13,14,16,18,19,20],insuffici:18,intact:5,integr:[5,8,10,11],intend:[5,16,20],intent:18,interact:11,interest:[6,8,20],interfac:[3,6,11,16],intermedi:5,intern:10,internet:[5,10,18],interpret:[0,1,2,5,6,7,9,10,13,14,15,16,18,19],interrupt:18,interspers:6,interv:5,intro:8,introduc:[5,11],introspect:0,invalid:0,investig:8,invoc:[0,5,18],invok:[5,18,20],involv:[8,13],io:[2,4,5,8,14,19],ipaddress:11,ironpython:11,irrelev:[5,20],iso:8,isol:5,isort:20,issu:[5,6,13,16,18,20],item:20,its:[0,1,2,3,5,6,7,8,11,12,15,16,18,20],itself:[5,6,8,9,12,18],ius:[0,2,4,5,8,14,19],iwdevtool:5,j1:5,januari:13,jaraco:[3,5,12,18],java:11,javascript:11,jazzband:5,job:[2,18],jq:5,json:5,jupyt:5,jupyter_packag:5,just:[1,5,6,11,13,20],justifi:18,jython:11,k6:16,k7:16,k8:16,keep:[5,15,17],kei:[1,5,16,18,19],kept:12,kernel:14,kernel_linux:8,keyword:[0,2,4,5,6,8,10,14,16,19],kind:[1,3,5,7,9,11,20],kinet:2,kitti:9,know:[13,16,20],known:[6,16,20],kp3:16,kp4:16,kp5:16,kvm:14,kwarg:16,kwonlyarg:16,kwonlydefault:16,la:14,lack:[3,9,20],lambda:20,land:9,lang:[2,8,11,12,19],languag:[1,2,5,11,15],larg:[5,12,15,18],last:[3,5],later:11,latest:5,latter:[2,5,8,13,16,18,20],layer:[5,14],layout:[3,6,13],ldap:2,ldb:2,ldflag:[2,5],lead:20,leak:20,learn:3,least:[0,5,8,15,20],leav:6,leftov:6,legaci:[10,13,16],length:16,lenient:12,less:[3,20],let:[2,4,8,16,19],level:[3,5,9,11,20],levenshtein:8,lgpl:[0,2,5,14,19],lib64:9,lib:[2,3,5,7,9,16,18,20],libboost_python:7,libbsd:2,libcangji:14,libdir:[2,8,9],libdirnam:2,libfmt:2,libfoo:5,libimag:9,libpcap:2,libpcr:2,libpython:[7,16],librari:[0,1,2,3,4,5,8,9,11,14,19],libsecret:0,libtool:14,libudev:2,libusb:2,libx11:2,libxslt:2,licens:[0,2,4,5,6,8,10,14,19],life:10,light:1,lightweight:[4,5],like:[0,2,4,5,6,8,11,15,16,19,20],limit:[6,12,15,17],line:[0,3,5,13,15,16,19,20],link:[5,7,9,16],linker:[5,9],linkflag:2,linter:1,linux:[0,2,4,5,6,8,9,14,16,19,20],linux_distribut:11,linuxmint:0,list:[4,5,8,12,13,18],liter:[0,4,19],littl:[5,6,18],live:12,ll:[4,14],load:[3,7,9,18,20],local:[1,2,3,5,8,9,12,13,14,18,19,20],localize_pydatetim:5,locat:[3,5],lock:5,log:5,logic:[5,6,12],login:20,lollypop:4,longer:[4,5,6,13],look:[0,1,6,8,18,19,20],lookuperror:5,loop:[2,5,18],looponfail:18,lot:[11,15],lp:20,lpython3:16,lxml:8,lzma:11,m68k:[0,4,5,6,8,19],m:[5,18,20],machin:14,maco:[0,4,5,6,8,19],made:[13,14,16,19],mai:[1,3,5,6,8,12,13,15,16,18,20],main:[5,9],main_event_loop:18,maintain:[5,10,11,12,18],mainten:10,major:[4,5,6,7,11,12,20],make:[2,3,4,5,6,7,12,13,15,16,18,19,20],make_wrapp:[2,9],makefil:[5,14],makeopt:[],makeopts_job:[2,18],man:16,manag:[0,4,5,6,8,9,20],manbuild:[2,8],mani:[2,5,8,12,14,15,16,20],manipul:[5,20],manpag:5,manpow:15,manual:[2,5,6,10,12],map:[2,5,6,8,18],march:13,mark:[15,18,20],marker:[5,10],martinblech:5,mask:[12,15],master:[5,20],match:[0,2,4,5,6,8,9,11,12,15,19],matplotlib:[2,5,19],maturin:5,max_atom:2,maximum:[1,5],mayb:20,mayhem:20,md:2,me:16,mean:[0,1,2,5,7,8,11,15,16,18,19,20],meaning:6,meaningfulli:1,meant:[1,13],mechan:[5,7,11],media:[0,2,8],member:15,mere:[5,7],meson:[0,4,7,10],messag:[1,5,20],met:16,metadata:[1,5,6,14,19],method:[3,5,11,13,16,18,20],mgorni:12,microcontrol:11,micropython:11,might:18,migrat:[5,10],minfx:2,minim:[5,11,15],minimum:[0,15,19],minor:[11,20],mint:0,mip:[0,2,4,5,6,8,19],mirror:[2,4,5,6,8,14,19,20],misbehav:6,misc:[2,8],miscompil:5,miss:[3,5,6,9,10,11,12,13,17,18],mistak:5,mit:[5,6],mix:[],mkdir:12,mock:[0,4,8,11,12,18,20],mocker:18,mod:20,mode:[1,3,6,10,13],model:7,modern:[1,4,5,6,12,18,20],modif:5,modifi:[5,6,11,20],modul:[1,3,4,5,6,7,8,10,11,14,15,16,18,20],module_nam:20,modulenotfounderror:3,modulesdir:2,molecular:2,molmol:2,moment:[5,12,13,15],mongo:2,mongodb:[2,4],more:[0,1,3,4,7,9,11,12,13,16,18,19,20],most:[0,3,5,6,9,11,12,13,14,17,18,19,20],mostli:[16,17],move:[0,5,12],mozilla:5,mpi:5,mrzechonek:2,much:[2,5,7,20],multi:[1,5,10,13,19],multibuild:14,multipl:[1,3,4,5,7,10,14,17,18,20],multiprocess:18,music:4,must:[0,1,2,3,5,6,7,8,11,18,19,20],mutual:[],my_p:2,my_pn:9,mycmakearg:[9,13,19],myconf:[2,8],mydistutilsarg:13,myesconsarg:[2,8],myself:20,mysql:[4,14],n:[2,18],name:[1,2,3,4,5,6,7,8,9,10,11,14,16,20],namespac:[10,18],namespace_packag:3,nativ:11,natur:[2,5,8],nautilu:0,ncurs:[2,14],nd:2,nears:12,necessari:[0,2,5,6,8,9,11,12,13,14,15,18,19,20],need:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,18,19,20],nemo:0,nest:18,net:[2,8,11,14,19],netloc:16,network:[5,6,18,20],never:[6,11,13],nevertheless:5,newer:[3,4,5,6,12,16],newli:15,newlin:16,next:[12,15,18],ninja:8,nmr:2,no_network:20,no_waf_libdir:2,nodej:5,non:[1,5,6,7,9,12,14,16,18,20],none:[2,5,6,16],nonfat:5,nonfunct:5,nongnu:[2,8],nor:[11,17],normal:[0,3,5,8,9,14,19],nose:[4,5,20],nosetest:20,nostrip:[2,8],notabl:[5,16],note:[0,1,5,6,7,8,9,10,11,13,14,15,16,18,19,20],now:[3,5,6,8,13,14,20],nowadai:[9,12,13],nox:[],noxfil:1,number:[5,7,12,18],numdifftool:2,numpi:[1,2],nurl:16,o0:20,o:[2,5],object:[2,11,16,19],obligatori:12,obsolet:[12,13],obviou:[1,20],ocassion:9,occur:[7,18],offici:5,offset:9,often:[1,5,12,20],old:[2,4,5,6,8,10,12,16,20],older:[1,11],omit:[5,15,16],ommit:1,onc:[0,5,8,11,12],one:[0,1,2,3,4,5,6,7,8,9,11,12,16,17,18,19,20],ones:12,onli:[0,1,2,3,4,5,6,7,8,9,11,12,14,16,18,19,20],opal:2,open:[2,16],openbabel:2,opendx:2,openldap:2,openvpn:9,oper:[5,17],opposit:[8,11,13],optfeatur:1,optimize_flag:2,option:[0,1,3,4,6,8,10,13,15,18,19,20],optional_packag:2,order:[0,1,2,4,5,7,9,12,13,14,15,19],org:[0,2,4,5,6,8,9,12,14,19],organ:3,orient:[2,16],origin:[5,9,11,12,16],other:[0,1,2,3,4,5,7,9,10,11,12,13,14,16,17,19,20],otherwis:[0,5,6,7,8,9],ought:16,our:[6,12,18,20],out:[8,9,10,11,12,13,14,15],outofboundstimedelta:5,output:[4,5,6,9,16,20],outsid:[14,19],over:[5,11,12,18,19,20],overrid:[5,9,14,20],own:[5,12,20],p1:16,p2:16,p:[0,2,4,5,6,8,14,18,19,20],pace:11,packag:[0,4,7,8,9,10,11,13,17,18],page:[10,16,17],panda:5,pandas_datetime_to_datetimestruct:5,parallel:10,param:[16,18],paramet:[5,8,16],parametr:18,paremet:5,parent:[3,9],pars:16,parsed_vers:5,parseresult:16,part:[2,3,4,5,7,8,9,12,13,14,15,18,20],parti:5,partial:[4,9,10,13],particular:[0,1,4,5,6,11,20],particularli:[0,6,11,13,18,20],pass:[0,6,8,9,10,12,13,16,18,20],password:4,patch:[2,5,6,8,11,12,20],path:[1,3,5,6,9,10,12,13,16,20],pathlib:[18,20],pattern:[4,12,13,19],pax:8,pbr:[5,6],pch:2,pcre:2,pdepend:[0,2,8,12],pdm:[5,13],peopl:17,pep517:[5,10],pep8:5,pep:[1,3,6,10,12,16,20],per:[3,5],perform:[0,2,5,6,11,12,14,19,20],period:13,permit:[3,4,5,6,11,15],pexpect:[0,5],pf:5,phase:[0,1,3,6,7,8,10,13,14,15,19,20],physic:[5,19],pick:12,pillow:5,pip:[5,12,20],pipelin:[2,20],pkg:9,pkg_config:2,pkg_config_path:16,pkg_postinst:[1,5],pkg_resourc:[3,6],pkg_setup:[0,1,2,8,19],pkgcheck:13,pkgconfig:[0,2,8,14],pkgutil:3,place:[1,6,11,12],placehold:13,plain:[2,5,6,13],plan:11,platform:[11,16,20],platinclud:16,platlib:16,platstdlib:16,player:[0,4],pleas:[5,6,8,9,12,15,16,18,19,20],plot:19,plu:[0,19],pluggi:20,plugin:[1,3,5,6,8,10,20],pm:6,pn:[0,2,4,5,6,8,9,14,19,20],pngcrush:2,poetri:[1,6,7,13],poetry_cor:5,point:[1,5,11,12,13,18,20],pointless:5,poisson:2,poissonboltzmann:2,polib:0,popd:20,popt:2,popul:[5,15],port:[5,8,10],portabl:3,portag:[3,5,8,12,14,15,18,20],posit:5,posixpath:18,possibl:[0,2,4,5,6,7,8,9,12,14,17,18,20],post:[5,6,13],postgr:4,potenti:[12,16,18],power:8,pp:[2,8],ppc64:[0,2,4,5,6,8,14,19],ppc:[0,2,4,5,6,8,14,19],pr:16,practic:[8,11,12],pre:5,preced:20,precis:[5,8,9],precompil:12,predict:19,prefac:10,prefer:[1,5,7,8,11,12,14,15,18,20],prefix:[2,8,9,16,20],pregener:5,prematur:15,prepar:[8,9,19],preprocessor:9,presenc:[8,18],present:[1,5,6],preserv:[6,11],presum:2,pretti:16,prevent:[4,10,11,19,20],previou:[1,5,12,13,16],previous:12,primari:[5,18],primarili:[7,11],print:[0,3,8,14,18,20],prior:[2,3,5,6,8,13,16,20],privat:13,proactiv:15,probabl:[1,6,8,13,19],problem:[1,3,4,5,6,8,10,12,16,17,18],problemat:[3,5,6,10,18],process:[3,5,12,16,19],produc:[5,12],profil:[6,15],program:[1,2,5,6,11,16,18],programm:[0,15],progress:12,proj:5,project:[0,1,5,7,8,9,10,14,17,18],prone:0,propag:19,proper:[2,8],properli:[5,6,13],properti:20,protocol:[0,2,19],prototyp:16,provid:[0,1,5,6,7,8,9,11,12,13,14,15,16,17,18,20],proxi:[3,14],psf:5,psql:14,psutil:2,pth:3,pub:2,pure:[0,5,6,7,8,10,11,15],purelib:16,purpos:[0,6,9,12,14,16,19,20],pursu:12,push:12,pushd:20,put:[1,8],pv:[0,2,4,5,8,14,19,20],pwd:12,pwman3:4,py2:[2,8,20],py3:18,py:[1,2,3,6,7,8,9,10,11,12,13,14,18,20],py_input_list:20,pyarg:20,pybytearray_check:20,pyc:[2,9],pycodestyl:5,pycountri:8,pydant:12,pydiff:8,pyduali:19,pyext:19,pygit2:20,pygobject:[0,14],pyinc:9,pylib:9,pylist_getitem:20,pymol:2,pymongo:2,pynslcd:9,pyo:[2,9],pyopenssl:8,pypa:6,pyperclip:5,pypi:[4,5,6,8,10,11,13],pyproject2setuppi:[5,6,13],pyproject2toml:6,pyproject:[1,5,7,12],pypy2:[9,11,12],pypy3:[1,4,5,6,8,11,12,13,15,18],pyroot:5,pyseri:5,pysock:8,pytabl:5,pytest:[0,4,8,10,12,20],pytest_cach:20,pytest_disable_plugin_autoload:18,pytest_fork:18,pytest_plugin:18,pytest_pyfunc_cal:20,python2:[2,8,9,13,19],python2_7:[2,5,6,8,13,14,19],python2_packag:2,python3:[1,3,5,9,11,13,16,18,20],python3_11:12,python3_5:8,python3_6:[0,2,4,8,14],python3_7:[4,8],python3_8:3,python3_:[0,1,2,4,5,6,8,12,19],python3_cmd:2,python3_packag:2,python:[3,6,17,18,20],python_:[5,8],python_cflag:16,python_check_dep:[0,2,8],python_compat:[0,2,4,5,6,8,10,12,14,15,19],python_compil:3,python_compile_al:[5,8],python_configur:2,python_configure_al:5,python_copy_sourc:[2,14],python_dep:[0,2,4,5,8,10,14,19],python_doex:9,python_dohead:9,python_domodul:[2,5,9,12,14,19],python_doscript:[9,14,19],python_export:13,python_fix_shebang:9,python_foreach_impl:[1,2,8,14],python_gen:13,python_gen_any_dep:[0,2,8],python_gen_cond_dep:[2,4,5,8,12,13,19],python_gen_impl_dep:4,python_gen_usedep:13,python_gen_useflag:8,python_get:13,python_get_cflag:9,python_get_includedir:[8,9,13],python_get_lib:9,python_get_library_path:[9,13],python_get_python_config:9,python_get_scriptdir:9,python_get_sitedir:[2,3,8,9],python_has_vers:[0,2,8],python_includedir:13,python_instal:[2,3,14],python_install_al:[3,5],python_is_python3:[8,13],python_lib:16,python_libpath:13,python_moduleinto:[2,5,9,14],python_multi_usedep:13,python_newex:9,python_newscript:9,python_optim:[2,8,9],python_pkg_dep:12,python_prepare_al:[5,18],python_req_us:[2,4,5,6,8,14,19],python_requir:1,python_required_us:[2,4,5,8,10,14,19],python_scriptinto:9,python_setup:[0,1,2,10,13,14,19],python_single_target:[7,11,12],python_single_usedep:[4,5,13,19],python_target:[5,7,8,11,12],python_test:[6,8,9,12,18,20],python_test_al:5,python_usedep:[0,2,4,5,8,10,12,14,18,19],python_wrapper_setup:13,pythonn:1,pythonpath:[6,20],pythonprop:19,pythonx_i:1,pyx:5,pyyaml:2,qa:[6,9,17],qa_flags_ignor:5,qemu:14,qemu_python_instal:14,qmp:14,qsl:19,qt:0,qualifi:7,queri:[10,16],question:[0,1,5,7,14,18,20],quick:20,quickli:5,quit:[2,4,6,11,12],quot:[4,19],r1:[1,3,4,9,10,12,20],r1_:5,r1_pkg_setup:[0,2,19],r1_python_compil:[3,5],r1_python_instal:[3,5],r1_python_install_al:[3,5],r1_python_prepare_al:[5,18],r1_src_compil:5,r1_src_configur:5,r1_src_instal:5,r1_src_prepar:[3,5,18],r1_src_test:5,r2:20,r:[0,2,5,9,20],race:10,rais:5,random:18,rang:[2,5,12],ranlib:2,rare:[9,18,20],rather:[1,6,8,16,17,18,20],rc:2,rdep:3,rdepend:[0,1,2,4,5,6,8,13,14,19],re:[5,8,15,20],reach:[12,15],read:[1,5],readabl:20,readi:[5,12,15],readlin:[2,5,8,14],readm:[2,12],readthedoc:5,real:[3,18,20],realli:[13,15,18,20],reason:[2,4,5,6,11,18,20],rebas:12,rebuild:[1,6],rebuild_swig:2,recent:[2,3,5,12,20],recip:10,recogn:[3,5,16],recommend:[2,5,7,12,13,14,16,18,19,20],recurs:[9,15,18],redefin:[5,18],reduc:5,reenabl:[12,18],refer:[0,1,5,9,11,13,14,17,19],refus:[1,11],regard:5,regener:[5,12],regress:5,regular:[7,20],reinstal:12,reject:[8,15,16],rel:[5,18,20],relat:[10,12,13,20],relax:[2,18],releas:[0,2,5,8,11,12,14,15,16],relev:[5,6,13,17,18,20],reli:[5,6,7,11,20],reliabl:[17,20],remain:[7,11,13],remaind:12,rememb:[4,12],remind:6,remot:[12,20],remov:[3,4,5,6,11,12,13,14,15,18,20],renam:[13,16],renamed_shared_librari:2,reorder:13,repeat:[7,14],repeatedli:12,replac:[0,5,6,11,12,13,16],replai:20,replic:14,repoman:13,report:[1,5,6,9,20],repositori:[0,5,6,12],repres:[3,5],reproduc:20,request:[5,8,10],requier:6,requir:[0,1,2,3,4,5,7,8,10,11,12,13,14,15,16,18,19],required_us:[0,1,2,4,5,8,13,14,19],rerun:10,rerunfailur:18,resembl:[8,18],reserv:5,resmok:2,resolv:[1,5,6,10,16,18],resourc:[6,11,12],resourcepath:5,respect:[1,3,5,12,14,18],respons:[1,5],restrict:[0,2,5,10,18,19,20],result:[0,5,6,8,9,12,16,17,18,20],retir:3,retroact:10,reus:9,revers:[5,7,12,15],revis:15,rewrit:20,rewritten:[5,19],rf:2,rich:5,right:6,riscv:[6,8,19],risk:15,riverbankcomput:8,rm:[2,3,5,9],root:[0,5,6,13,19,20],root_numpi:5,rootdir:20,rootpi:5,roughli:[2,9,12,13],round:12,routin:14,rpath:2,rpython:11,rst:5,rsync:8,ruamel:3,rule:[1,2,6,8,10,13,14,15],run:[1,2,4,6,7,8,9,10,11,12,13,14,17,20],run_in_build_dir:[2,8,14],runner:[1,5,10],runpi:20,runtim:[1,2,3,5,8,10,13,14],rust:10,s390:[0,2,4,5,6,8,19],s:[1,2,4,5,6,7,8,9,12,13,14,16,18,19,20],sabyenc3:20,sabyenc3_wrapp:20,sabyenc:20,safe:13,samba:[2,19],same:[0,2,3,4,5,6,7,8,9,11,12,13,14,16,17,18,20],sample_cod:5,sandbox:[8,20],sanit:[5,16],satisfi:[0,1,8,12],sbin:9,scan:13,schema:2,scheme:16,sci:[2,5,19],scipi:2,scm:5,scon:[7,8,10],scons_opt:2,scons_target:2,scons_var:2,sconstruct:[2,8],scop:0,scope:[1,5,8,13,18],scp:12,script:[1,2,5,6,7,8,10,11,12,14,16,19],sdist:[5,20],search:[3,10,20],second:[7,13],secondli:20,secret:0,section:[1,5,6,12,16,20],secur:12,sed:[3,5,8,14,18,20],see:[5,9,16,18,20],seem:20,select:[7,8,18,19],self:[5,16,18,20],semi:18,sens:2,separ:[2,5,6,7,8,11,14,18,20],seri:9,serial:[2,5,8],serv:13,server:[5,20],servic:[0,20],session:[3,20],set:[2,4,5,6,7,10,12,14,15,16,18,19,20],setup:[1,3,6,7,10,13,18,20],setup_requir:[1,5,18],setuptool:[1,3,4,5,7,8,12,13,15,18],setuptools_rust:5,setuptools_scm:[1,10],setuptools_scm_pretend_vers:5,sh:[0,2,4,5,6,8,12,19],share:[3,5],shebang:[1,10,11,20],shell:[0,5,8,14],shift:[6,11],ship:5,shlinkflag:2,shortli:1,should:[1,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20],side:[8,11],sidebar:6,signal:[19,20],signatur:[11,16],signifi:18,signific:[12,18],silent:4,similar:[0,2,5,14,19,20],similarli:[0,1,5],simpl:[2,5,7,13,14,17],simplest:[0,2,5,14,18,20],simpli:[5,16,17,20],simultan:[5,11,17,20],sinc:[1,2,3,5,6,7,11,12,13,15,16,18,20],singl:[0,1,4,6,9,10,14,16,18,20],sip:8,sip_api_major_nr:8,siplib:8,site:[3,5,6,9,11,16,18,20],six:[4,5,8],skip:[5,8,10,12,16],skipif:20,sleep:16,slot:[0,2,4,5,6,8,11,14,19],slow:11,slowli:[12,15],smaller:5,snappi:2,snapshot:[10,20],snippet:[6,16],snowbal:2,so:[1,4,5,6,11,12,18,19,20],socks5:8,softwar:[0,1,4,8,12,14,15,16,20],solari:[0,5,6,19],sole:13,solut:[3,5,16,20],solv:[4,17],some:[0,1,2,3,4,5,6,7,8,11,12,13,14,16,18,19,20],someth:[8,9,20],sometim:[1,5,6,9,11,18,20],somewher:12,soon:15,sort:2,sound:19,sourc:[2,3,10,12,14,17,20],sourceforg:[14,19],space:20,sparc64:[0,6],sparc:[0,2,4,5,6,8,14,19],spawn:1,speak:[6,11],spec:16,special:[1,3,4,5,6,16,20],specif:[0,1,3,4,5,6,7,8,9,10,11,13,14,15,16,18,19,20],specifi:[0,1,2,5,6,7,8,14,18,19,20],speed:9,spew:20,sphinx:[1,3,6,8,10,12],sphinx_rtd_them:8,sphinxtrain:9,split:[0,5,13,16],spulec:4,spuriou:1,sqlite3:4,sqlite:[4,8],src:[2,5,9,20],src_:5,src_compil:[2,5,6,8,14],src_configur:[2,5,8,9,13,14,19],src_instal:[2,5,8,9,14,19],src_prepar:[2,3,5,8,9,14,16,18],src_test:[2,5,6,14],src_unpack:5,src_uri:[0,2,4,5,6,8,14,19,20],ssl:8,sspl:2,stabil:12,stabl:[12,15],stage:[5,12,20],stage_dir:2,stand:11,standalon:[5,12],standard:[3,4,6,7,9,10,11,14,16,20],start:[3,5,6,11,12,15,16,20],state:1,statement:5,statist:5,statsmodel:20,std:2,stdin:3,stdlib:[4,13,16],stemmer:2,step:[5,6,7,8,14],still:[1,5,6,8,11,12,13,16,20],stop:[13,16],str:16,stream:5,streamlin:13,strict:20,strictli:[3,5,6,15,20],string:[0,1,4,5,8,14,16,19],stringif:16,strip:[1,3,5,11,18,20],strongli:[5,6,15],structur:[12,20],stuff:13,style:[4,5,13,17,18,20],sub:[1,3,8,10,20],sub_instal:14,subclass:1,subdir:14,subdirectori:[6,9],submit:6,submodul:3,suboptim:17,subpackag:[3,5],subsequ:6,subset:[1,4,5,7,8,11,12,14,20],substitut:[0,4,19],subtitl:8,subtl:20,success:0,suffici:[2,5,6,7,11,14],suffix:5,suggest:[5,8,13,17,18,20],suit:[0,1,2,5,6,7,8,9,10,12,18],suitabl:[0,7,9,14,17],summar:[5,16],summari:18,sundial:2,sundri:13,superset:19,suppli:6,support:[0,1,2,3,4,5,6,7,8,10,12,13,14,16,17,18,19,20],suppos:16,supposedli:18,sure:[5,18,20],suspici:3,swig:[2,19],sy:[2,5,8,11,14,15,16,20],symbol:5,symlink:9,sync:18,syntax:[4,10,11],system:[0,3,8,9,10,13,14,15,17,19,20],system_eigen:2,system_fmt:2,system_sundi:2,systemd:20,t:[5,7,8,11,13,20],tab:5,tabl:[5,13,16,18],tag:[5,12,20],take:[0,1,2,4,5,6,7,8,9,15,18,20],taken:[5,20],talloc:[2,19],tar:[0,2,4,5,6,8,12,14,19,20],tarbal:[5,12,20],target:[2,5,8,9,11,12,15,19],task:[5,8,12],tauthon:11,tc:[2,9],tcsh:5,tdb:2,team:[12,15],technic:12,telepathi:0,tell:13,temp:20,templat:[0,2,4,5,19],temporari:[5,6],temporarili:[12,13],term:[0,2,4,5,6,8,14,19],termcolor:5,termin:[5,20],test:[0,1,2,3,4,8,10,12,13,17,19],test_arima:20,test_babel_with_language_:20,test_build_latex:20,test_client:18,test_close_to_now_:12,test_comparison:12,test_contextvar:18,test_crc_pickl:20,test_decod:20,test_empty_size_pickl:20,test_filenam:18,test_gener:18,test_leak:18,test_loc:18,test_login:20,test_network:20,test_null_byt:20,test_polyglossia_with_language_:20,test_pytest_plugin:5,test_start_params_bug:20,test_sync:18,test_sync_contextvar:18,test_test_util:5,test_testcase_no_app:5,test_transport:18,test_transport_work:18,test_wrapped_case_is_collect:18,testbitvector:5,testcas:18,tests_requir:[1,5],testsupport:20,tevent:2,text:[5,8],textual:5,tgz:14,than:[1,2,3,6,7,8,11,12,16,17,18,20],thei:[1,2,3,5,6,7,8,9,11,12,13,14,15,16,17,18,20],them:[0,1,2,3,5,6,7,8,9,12,16,18,19,20],theme:[5,6,8],themselv:[6,18,20],therefor:[1,2,5,6,7,8,11,12,15,18],thermodynam:2,thi:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20],thin:[5,6],thing:[12,13,17,18],think:16,third:[5,7,13],thirdli:20,those:[5,6,7,8,9,18,20],though:[8,12],thread:[2,8,18,19,20],three:[0,1,3,9,13,16],through:[3,4,5,6,8,11,16,18,20],throughout:6,thumb:[1,6,10,13,15],tiff:5,time:[1,3,4,5,6,9,10,11,12,13,16,17,18,20],timeout:20,tip:[10,20],tmp:[3,5,9,18,20],todai:16,todo:[2,9,12],toml:[1,5,7,12],tomli:12,too:[5,12,20],tool:[1,2,5,8,14,15,16,20],toolchain:[2,8],toolkit:8,top:[3,5,9,18],topic:[3,17],toward:[],tox:[1,5,20],traceback:[3,5,20],tradit:3,tradition:3,train:8,trans2arab:19,transit:[13,15],translat:8,transport:2,travel:4,travi:5,treat:[2,18],tree:[3,5,13,20],tri:5,trial:13,trigger:[6,18,20],trivial:[0,5,12,16,19],trolliu:11,tsa:20,tslib:5,tupl:16,tut:2,twice:18,two:[1,5,6,8,9,11,13,16,18,19],txt:[5,6,12,18],type:[2,3,6,13,16],typeerror:10,typic:[1,14],ubuntu:20,udev:0,udevdir:[2,8],ugli:13,unabl:[5,20],unblock:12,unbundl:12,unclear:20,uncommon:5,uncondit:[1,2,5,10,13,14],unconditioanlli:20,uncondition:[0,1,2,4,5,6,8,11,19,20],undefin:5,under:[0,1,2,3,4,5,6,8,14,19],underli:[5,6],underscor:[5,20],understand:0,understood:12,undesir:[1,18,20],unexpect:10,unexpectedli:20,unfortun:[13,18,20],unicod:16,uniqu:[5,14],unit:2,unittest:[5,11,20],univers:5,unless:[6,8,15],unlik:[3,5,6,11,15],unmask:12,unmatch:13,unnecessari:[14,19,20],unnecessarili:5,unpars:16,unpredict:5,unresolv:5,unset:6,unstabl:18,unsupport:[8,11],until:16,unusu:12,up:[6,9,12,13,14,17,18,20],updat:[4,6,9,11,12,16],upload:12,uppercas:13,upstream:[1,3,5,6,7,9,11,12,14,15,16,18,20],url:[5,16],urllib3:[8,12],urllib:16,urlpars:16,us:[1,9,10,11,12,13,15,16,20],usabl:[1,11],usag:10,usb:[2,8],use_en:19,use_pch:2,use_pep517:5,use_scon:[2,8],user:[2,3,5,6,7,8,11,12,15,18,19,20],userland:14,userland_gnu:8,userspac:2,usex:[2,5,19],usng:5,usr:[1,2,3,5,7,8,9,18,20],usual:[1,3,4,5,11,13,15,16,18,20],util:[1,2,4,5,8,9,10,12,15,18,19,20],utils_src_configur:[2,19],uucp:[2,8],v2:[0,2,4,5,6,8,14,19],v3:12,v:[2,4,5,14],valid:[1,5,8,16,20],valu:[1,5,6,9,13,18],vararg:16,variabl:[0,1,5,6,8,13,14,16,18,19],variant:[10,11,16,18],variat:10,variou:[1,5,6,9,13,16],varkw:16,vast:[5,12],vc:[5,20],ve:16,vendor:[12,13],venv:[5,6,13],verbatim:16,verbos:[0,20],veri:[3,5,6,9,11,12,17],verifi:[0,1,5,6,8,13,20],version:[1,2,3,5,6,7,8,10,12,13,15,16,17,18,20],version_info:16,via:[1,2,4,6,7,8,9,10,11,12,13,14,18,19,20],video:8,virtual:[0,2,8,14],virtualenv:[1,5,6,12,20],virtx:5,visual:2,vmd:2,vmxcap:14,voacap:19,vs:[10,13],vulnkei:9,vv:20,wa:[0,4,5,11,12,13,18,20],waf:[10,19],waf_binari:[2,19],wai:[0,5,6,9,12,13,18,20],wall:2,want:[5,6,8],warn:[2,3,5,10,16],wcwidth:5,we:[3,4,6,8,11,12,14,15,17],web:11,webencod:5,webp:5,welcom:17,well:[1,5,7,8,11,13,15],went:6,were:[0,2,3,5,8,11,12,13,16],what:16,wheel:[5,12,18],when:[0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,18,19,20],whenev:[1,5,9,14,15,18,19],where:[0,3,5,6,9,12,14,19,20],whether:[0,1,5,6,7,15,18,19,20],which:[0,5,6,10,11,14,20],whitelist:5,who:[5,17],whole:[18,20],wholli:20,whom:20,whose:[1,5],why:[5,6,20],wide:[15,20],wider:2,widest:5,widget:14,wiki:[0,4,8,9,14,17],wildcard:4,window:11,wise:7,wish:[3,5,6],within:[3,5,6,12,17,20],without:[1,4,7,11,13,14,15,18],wno:2,won:8,word:5,work:[0,3,5,6,7,8,9,11,12,13,15,16,18,19,20],workaround:5,workdir:2,workflow:12,world:18,worm:16,worst:[16,20],worthwhil:[1,20],would:[0,2,11,12,14,15,16,19,20],wrap:[0,5,6,9,13],wrapper:[0,1,5,6,9,13,14,20],write:[5,6,7,12,17],written:[0,1,5,7,10,11,18],wrong:[6,13],wrongli:[5,16,20],www:[0,2,8,14,19],wx_gtk_ver:[2,19],wxpython:[2,19],x11:2,x64:[0,4,5,6,8,19],x86:[0,2,4,5,6,8,12,14,19],x86_64:5,x:[1,5,16,18,20],xbox:2,xboxdrv:2,xdg:4,xdist:[10,12,20],xfail:20,xml:[5,6],xmltodict:5,xolox:5,xvfb:5,xz:[0,4,12,14,19],y:[1,2,16],yaml:[2,3],ye:2,yet:[8,12,19],yield:16,yml:5,yoda:19,you:[1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,20],your:[2,4,5,6,7,8,11,12,15,16,18,20],yourself:[2,4,20],zero:4,zip:[5,6],zlib:2,zoneinfo:4,zope:3,zsi:2,zstd:2},titles:["python-any-r1 \u2014 build-time dependency","Common basics","Integration with build systems written in Python","Advanced concepts","Advanced dependencies","distutils-r1 \u2014 standard Python build systems","distutils-r1 legacy concepts","Choosing between Python eclasses","Expert python-r1 usage","Common helper functions","Gentoo Python Guide","Python interpreters","Maintenance of Python implementations","Migration guides","python-r1 \u2014 multi-impl packages","Python package maintenance","Porting tips","Preface","pytest recipes","python-single-r1 \u2014 single-impl packages","Resolving test suite problems"],titleterms:{"1":16,"10":16,"11":16,"2":15,"3":16,"517":[5,13],"7":13,"8":[13,16],"9":16,"byte":9,"default":16,"function":[5,9],"new":[3,12,15],A:[7,19],In:6,No:16,The:[1,5],_make_test_flaki:18,abort:20,access:20,ad:[3,5,12,15],addit:[0,5,14],advanc:[3,4],altern:11,an:18,ani:[0,8],api:[5,8],ar:3,archiv:5,argument:[5,18],assert:20,asyncio:16,autodoc:5,autoload:18,automat:18,autotool:14,avoid:18,backend:5,backport:11,base64:16,base:[6,16,18],basic:[0,1,5,19],befor:[5,6],being:5,between:7,bootstrap:12,bpo43882:16,build:[0,1,2,5,6,7,8,12,13,14,19],buildapi:5,c:20,call:5,can:15,cargo:5,cffi:4,chang:[12,16],charact:16,checklist:20,choos:[7,20],co:15,combin:8,command:5,common:[1,9],compil:9,concept:[3,6],condit:[0,2,4,5,14,19],config:16,configur:16,content:10,coroutin:16,correct:20,cpython:12,cr:16,custom:5,cycl:12,cython:5,deal:20,decodestr:16,depend:[0,1,2,4,5,8,14,18,19,20],deprec:[5,16],determin:3,dev:[],differ:[6,8],directori:5,disabl:18,disjoint:8,distutil:[5,6,7,8,16],distutils_enable_test:5,distutils_use_setuptool:6,document:5,due:20,eapi:[13,15],eclass:[7,12],enabl:5,encodestr:16,entir:18,entri:6,environ:[1,20],exist:15,expert:[8,18],explicitli:18,extens:[5,20],extra:[2,20],failur:20,file:20,find:1,fix:9,fixtur:18,flag:4,flit:5,formatargspec:16,found:[16,18],from:[1,5,13],gener:16,gentoo:[3,10],getargspec:16,got:18,greenlet:4,guid:[10,13],handl:[],helper:9,hierarch:3,ht:16,hybrid:[2,19],impl:[2,7,14,19],implement:[8,9,11,12,15],importerror:20,importpathmismatcherror:18,indic:10,inform:9,initi:12,inspect:16,instal:[2,5,6,9,14,19,20],integr:2,internet:20,interpret:[4,8,11,12],keyword:18,legaci:[3,5,6],lf:16,librari:16,life:12,list:[1,16],longer:16,maintain:15,mainten:[12,15],manual:[14,19],marker:18,masonri:5,meson:2,migrat:13,miss:20,mode:[5,20],modul:9,more:5,most:1,multi:[2,7,14],multipl:[0,11,19],name:18,namespac:3,note:12,now:16,old:13,option:5,other:[6,18],out:6,packag:[1,2,3,5,6,12,14,15,16,19,20],parallel:[5,18],partial:8,pass:5,patchset:12,path:18,pep517:20,pep:[5,13],phase:5,pkg:16,pkgutil:[],plugin:18,poetri:5,point:6,port:[12,15,16],prefac:17,prevent:5,problem:20,problemat:20,profil:12,project:[6,15],pure:[2,14],py:5,pypi:[12,20],pyproject:6,pytest:[5,18],python:[0,1,2,4,5,7,8,9,10,11,12,13,14,15,16,19],python_compat:1,python_compil:5,python_configur:5,python_dep:1,python_instal:5,python_prepar:5,python_required_us:1,python_setup:8,python_test:5,python_usedep:13,queri:9,r1:[0,2,5,6,7,8,13,14,19],race:5,recip:18,regular:8,relat:7,remov:16,request:4,requir:20,rerun:18,resolv:20,restrict:8,retroact:16,rule:7,run:[5,18],runner:[18,20],runtim:[6,7,19],rust:5,scon:2,script:9,set:[0,8],setup:5,setuptool:6,setuptools_scm:5,shebang:9,singl:[2,5,7,13,19],skip:[18,20],snapshot:5,sourc:[5,6],specif:12,sphinx:5,standard:5,strip:16,structur:3,style:[],sub:5,suit:20,support:[11,15],syntax:13,sysconfig:16,system:[1,2,5,6,7,12],tabl:10,test:[5,6,15,18,20],thumb:7,time:[0,2,7,8,14,19],tip:16,toml:6,type:1,typeerror:18,uncondit:[0,19],undesir:5,unexpect:18,urlsplit:16,us:[0,2,3,4,5,6,7,8,14,18,19],usag:[5,8],util:7,variant:5,variat:6,version:[4,11],via:5,virtualx:5,vs:[6,7],waf:2,warn:18,whether:3,which:15,without:5,written:2,xdist:18}})
\ No newline at end of file +Search.setIndex({"docnames": ["any", "basic", "buildsys", "concept", "depend", "distutils", "distutils-legacy", "eclass", "expert-multi", "helper", "index", "interpreter", "interpreter-maintenance", "migration", "multi", "package-maintenance", "porting", "preface", "pytest", "single", "test"], "filenames": ["any.rst", "basic.rst", "buildsys.rst", "concept.rst", "depend.rst", "distutils.rst", "distutils-legacy.rst", "eclass.rst", "expert-multi.rst", "helper.rst", "index.rst", "interpreter.rst", "interpreter-maintenance.rst", "migration.rst", "multi.rst", "package-maintenance.rst", "porting.rst", "preface.rst", "pytest.rst", "single.rst", "test.rst"], "titles": ["python-any-r1 \u2014 build-time dependency", "Common basics", "Integration with build systems written in Python", "Advanced concepts", "Advanced dependencies", "distutils-r1 \u2014 standard Python build systems", "distutils-r1 legacy concepts", "Choosing between Python eclasses", "Expert python-r1 usage", "Common helper functions", "Gentoo Python Guide", "Python interpreters", "Maintenance of Python implementations", "Migration guides", "python-r1 \u2014 multi-impl packages", "Python package maintenance", "Porting tips", "Preface", "pytest recipes", "python-single-r1 \u2014 single-impl packages", "Resolving test suite problems"], "terms": {"The": [0, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20], "eclass": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 13, 14, 17, 18, 19, 20], "enabl": [0, 4, 6, 7, 8, 10, 11, 12, 14, 15, 18], "support": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 17, 18, 19, 20], "packag": [0, 4, 7, 8, 9, 10, 11, 13, 17, 18], "need": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "pure": [0, 5, 6, 7, 8, 10, 11, 15], "refer": [0, 1, 5, 9, 11, 13, 14, 17, 19], "5": [0, 2, 5, 8, 9, 11, 12, 14, 16, 18, 19, 20], "defin": [0, 1, 5, 6, 11, 19], "featur": [0, 4, 5, 6, 8, 11, 12, 13, 19, 20], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "pkg_setup": [0, 1, 2, 8, 19], "phase": [0, 1, 3, 6, 7, 8, 10, 13, 14, 15, 19, 20], "It": [0, 1, 3, 4, 5, 6, 7, 9, 11, 12, 13, 14, 16, 18, 19, 20], "normal": [0, 3, 5, 8, 9, 14, 19], "call": [0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 13, 14, 16, 18, 19, 20], "python_setup": [0, 1, 2, 10, 13, 14, 19], "function": [0, 1, 4, 6, 7, 8, 10, 11, 13, 14, 16, 19, 20], "order": [0, 1, 2, 4, 5, 7, 9, 12, 13, 14, 15, 19], "find": [0, 2, 3, 4, 6, 14, 18, 20], "suitabl": [0, 7, 9, 14, 17], "interpret": [0, 1, 2, 5, 6, 7, 9, 10, 13, 14, 15, 16, 18, 19], "global": [0, 1, 5, 8, 13, 14, 18, 19], "environ": [0, 5, 6, 10, 11, 13, 14, 16, 18, 19], "appropri": [0, 2, 4, 5, 6, 7, 9, 11, 12, 15, 19], "mean": [0, 1, 2, 5, 7, 8, 11, 15, 16, 18, 19, 20], "most": [0, 3, 5, 6, 9, 11, 12, 13, 14, 17, 18, 19, 20], "trivial": [0, 5, 12, 16, 19], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20], "autotool": [0, 5, 6, 10, 16, 19], "compat": [0, 1, 2, 4, 5, 6, 7, 9, 11, 12, 13, 16, 19], "system": [0, 3, 8, 9, 10, 13, 14, 15, 17, 19, 20], "could": [0, 2, 3, 5, 6, 8, 9, 16, 19], "look": [0, 1, 6, 8, 18, 19, 20], "like": [0, 2, 4, 5, 6, 8, 11, 15, 16, 19, 20], "follow": [0, 1, 3, 4, 5, 6, 7, 8, 9, 12, 13, 16, 17, 18, 19, 20], "copyright": [0, 2, 4, 5, 6, 8, 14, 19], "1999": [0, 2, 4, 5, 6, 8, 14, 19], "2020": [0, 2, 4, 5, 6, 8, 13, 14, 19], "gentoo": [0, 1, 2, 4, 5, 6, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20], "author": [0, 2, 4, 5, 6, 8, 9, 10, 12, 14, 19], "distribut": [0, 2, 4, 5, 6, 7, 8, 14, 16, 17, 19, 20], "under": [0, 1, 2, 3, 4, 5, 6, 8, 14, 19], "term": [0, 2, 4, 5, 6, 8, 14, 19], "gnu": [0, 2, 4, 5, 6, 8, 14, 19], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 18, 19, 20], "public": [0, 2, 4, 5, 6, 8, 14, 19], "licens": [0, 2, 4, 5, 6, 8, 10, 14, 19], "v2": [0, 2, 4, 5, 6, 8, 14, 19], "eapi": [0, 2, 4, 5, 6, 8, 10, 14, 19], "7": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20], "python_compat": [0, 2, 4, 5, 6, 8, 10, 12, 14, 15, 19], "python3_": [0, 1, 2, 4, 5, 6, 8, 12, 19], "6": [0, 1, 2, 4, 5, 6, 8, 11, 12, 14, 16, 18, 19, 20], "8": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 19, 20], "inherit": [0, 1, 2, 4, 5, 6, 7, 8, 9, 13, 14, 16, 18, 19], "descript": [0, 2, 4, 5, 6, 8, 14, 19], "A": [0, 1, 2, 4, 5, 6, 8, 10, 11, 15, 18], "repositori": [0, 5, 6, 12], "data": [0, 2, 5, 6, 9, 16, 19, 20], "file": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19], "describ": [0, 6, 8, 9], "media": [0, 2, 8], "player": [0, 4], "capabl": 0, "homepag": [0, 2, 4, 5, 6, 8, 14, 19], "http": [0, 2, 4, 5, 6, 8, 9, 12, 14, 16, 19, 20], "cgit": 0, "freedesktop": 0, "org": [0, 2, 4, 5, 6, 8, 9, 12, 14, 19], "info": [0, 6, 18], "src_uri": [0, 2, 4, 5, 6, 8, 14, 19, 20], "www": [0, 2, 8, 14, 19], "softwar": [0, 1, 4, 8, 12, 14, 15, 16, 20], "pn": [0, 2, 4, 5, 6, 8, 9, 14, 19, 20], "p": [0, 2, 4, 5, 6, 8, 14, 18, 19, 20], "tar": [0, 2, 4, 5, 6, 8, 12, 14, 19, 20], "gz": [0, 2, 4, 5, 6, 8, 14, 19, 20], "bsd": [0, 2, 5, 6, 8, 14, 19], "slot": [0, 2, 4, 5, 6, 8, 11, 14, 19], "0": [0, 2, 4, 5, 6, 8, 10, 12, 14, 16, 18, 19, 20], "keyword": [0, 2, 4, 5, 6, 8, 10, 14, 16, 19], "alpha": [0, 2, 4, 5, 6, 8, 12, 14, 19], "amd64": [0, 2, 4, 5, 6, 8, 12, 14, 19], "arm": [0, 2, 4, 5, 6, 8, 19], "arm64": [0, 2, 4, 5, 6, 8, 14, 19], "hppa": [0, 2, 4, 5, 6, 8, 14, 19], "ia64": [0, 2, 4, 5, 6, 8, 14, 19], "mip": [0, 2, 4, 5, 6, 8, 19], "ppc": [0, 2, 4, 5, 6, 8, 14, 19], "ppc64": [0, 2, 4, 5, 6, 8, 14, 19], "sh": [0, 2, 4, 5, 6, 8, 12, 19], "sparc": [0, 2, 4, 5, 6, 8, 14, 19], "x86": [0, 2, 4, 5, 6, 8, 12, 14, 19], "ius": [0, 2, 4, 5, 8, 14, 19], "rdepend": [0, 1, 2, 4, 5, 6, 8, 13, 14, 19], "virtual": [0, 2, 8, 14], "udev": 0, "208": 0, "bdepend": [0, 1, 2, 5, 6, 8, 12, 14, 18, 19], "python_dep": [0, 2, 4, 5, 8, 10, 14, 19], "pkgconfig": [0, 2, 8, 14], "ebuild": [0, 1, 4, 5, 6, 7, 12, 13, 14, 15, 16, 17, 19, 20], "demonstr": [0, 19], "absolut": [0, 1, 9, 15, 19, 20], "minimum": [0, 15, 19], "work": [0, 3, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20], "code": [0, 1, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 19, 20], "onli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 16, 18, 19, 20], "three": [0, 1, 3, 9, 13, 16], "highlight": [0, 16, 19], "line": [0, 3, 5, 13, 15, 16, 19, 20], "ar": [0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "specif": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20], "plu": [0, 19], "implicitli": [0, 3, 5, 8, 12, 19], "export": [0, 1, 2, 5, 19], "when": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 18, 19, 20], "other": [0, 1, 2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20], "declar": [0, 1, 2, 5, 6, 8, 9, 12, 14, 18, 19], "ensur": [0, 1, 5, 6, 9, 14, 19], "would": [0, 2, 11, 12, 14, 15, 16, 19, 20], "built": [0, 1, 3, 5, 6, 7, 8, 11, 12, 14, 17, 19, 20], "against": [0, 4, 7, 9, 11, 12, 14, 19, 20], "implement": [0, 1, 3, 4, 5, 6, 7, 10, 14, 17, 18, 19, 20], "specifi": [0, 1, 2, 5, 6, 7, 8, 14, 18, 19, 20], "get": [0, 5, 6, 12, 13, 18, 20], "replac": [0, 5, 6, 11, 12, 13, 16], "python_gen_any_dep": [0, 2, 8], "match": [0, 2, 4, 5, 6, 8, 9, 11, 12, 15, 19], "python_check_dep": [0, 2, 8], "accept": [0, 1, 5, 6, 9, 12, 15, 16, 18], "templat": [0, 2, 4, 5, 19], "where": [0, 3, 5, 6, 9, 12, 14, 19, 20], "liter": [0, 4, 19], "python_usedep": [0, 2, 4, 5, 8, 10, 12, 14, 18, 19], "substitut": [0, 4, 19], "requir": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "same": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 20], "least": [0, 5, 8, 15, 20], "one": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 20], "test": [0, 1, 2, 3, 4, 8, 10, 12, 13, 17, 19], "whether": [0, 1, 5, 6, 7, 15, 18, 19, 20], "question": [0, 1, 5, 7, 14, 18, 20], "In": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 14, 16, 18, 19, 20], "particular": [0, 1, 4, 5, 6, 11, 20], "verifi": [0, 1, 5, 6, 8, 13, 20], "branch": [0, 16, 20], "wa": [0, 4, 5, 11, 12, 13, 18, 20], "satisfi": [0, 1, 8, 12], "were": [0, 2, 3, 5, 8, 11, 12, 13, 16], "instal": [0, 1, 3, 4, 7, 8, 10, 11, 12, 13, 15, 16, 18], "current": [0, 5, 6, 11, 12, 13, 15, 18, 20], "For": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 20], "purpos": [0, 6, 9, 12, 14, 16, 19, 20], "variabl": [0, 1, 5, 6, 8, 13, 14, 16, 18, 19], "string": [0, 1, 4, 5, 8, 14, 16, 19], "best": [0, 5, 12, 16, 17, 18], "explain": [0, 1, 6], "exampl": [0, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 20], "meson": [0, 4, 7, 10], "manag": [0, 4, 5, 6, 8, 9, 20], "cinnamon": 0, "fork": [0, 11, 12, 20], "from": [0, 2, 3, 4, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20], "nautilu": 0, "develop": [0, 1, 7, 11, 12, 15, 17, 18, 20], "linuxmint": 0, "com": [0, 2, 4, 5, 6, 8, 12, 14, 16, 20], "project": [0, 1, 5, 7, 8, 9, 10, 14, 17, 18], "html": [0, 5, 8], "github": [0, 2, 4, 5, 6, 8, 12, 14, 17, 19, 20], "nemo": 0, "archiv": [0, 2, 4, 10, 19, 20], "pv": [0, 2, 4, 5, 8, 14, 19, 20], "gpl": [0, 2, 4, 8, 14, 19], "2": [0, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20], "lgpl": [0, 2, 5, 14, 19], "fdl": [0, 19], "1": [0, 2, 3, 4, 5, 6, 8, 9, 12, 18, 19, 20], "dev": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 18, 19, 20], "polib": 0, "pygobject": [0, 14], "3": [0, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20], "python_has_vers": [0, 2, 8], "provid": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20], "its": [0, 1, 2, 3, 5, 6, 7, 8, 11, 12, 15, 16, 18, 20], "both": [0, 1, 3, 5, 6, 7, 8, 12, 13, 16, 17, 18, 19, 20], "have": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 18, 19, 20], "dep": [0, 5, 13, 15, 18], "true": [0, 1, 2, 5, 6, 8, 12, 13, 16, 20], "them": [0, 1, 2, 3, 5, 6, 7, 8, 9, 12, 16, 18, 19, 20], "while": [0, 2, 3, 4, 5, 6, 7, 8, 11, 12, 14, 16, 17, 18, 19, 20], "which": [0, 5, 6, 10, 11, 14, 20], "wrapper": [0, 1, 5, 6, 9, 13, 14, 20], "help": [0, 5, 17, 20], "take": [0, 1, 2, 4, 5, 6, 7, 8, 9, 15, 18, 20], "singl": [0, 1, 4, 6, 9, 10, 14, 16, 18, 20], "option": [0, 1, 3, 4, 6, 8, 10, 13, 15, 18, 19, 20], "class": [0, 1, 5, 16, 18], "flag": [0, 1, 5, 7, 8, 9, 10, 11, 12, 14, 15, 19, 20], "more": [0, 1, 3, 4, 7, 9, 11, 12, 13, 16, 18, 19, 20], "similarli": [0, 1, 5], "has_vers": [0, 12], "root": [0, 5, 6, 13, 19, 20], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 20], "b": 0, "d": [0, 2, 3, 5, 8, 9, 14, 18], "r": [0, 2, 5, 9, 20], "idepend": 0, "pdepend": [0, 2, 8, 12], "pass": [0, 6, 8, 9, 10, 12, 13, 16, 18, 20], "assum": [0, 1, 5, 6, 9, 13, 19], "verbos": [0, 20], "print": [0, 3, 8, 14, 18, 20], "check": [0, 5, 6, 9, 12, 13, 16, 17, 20], "perform": [0, 2, 5, 6, 11, 12, 14, 19, 20], "result": [0, 5, 6, 8, 9, 12, 16, 17, 18, 20], "return": [0, 2, 8, 16, 20], "success": 0, "found": [0, 1, 3, 5, 6, 9, 10, 15, 20], "fals": [0, 2, 5, 8, 12, 16], "otherwis": [0, 5, 6, 7, 8, 9], "note": [0, 1, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20], "invoc": [0, 5, 18], "chain": 0, "abov": [0, 1, 6, 8, 12, 13, 15, 19, 20], "also": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 20], "written": [0, 1, 5, 7, 10, 11, 18], "import": [0, 1, 3, 4, 5, 6, 7, 11, 12, 13, 14, 16, 18, 20], "understand": 0, "correctli": [0, 1, 5, 6, 7, 9, 11, 12, 13, 16, 20], "exactli": [0, 7], "furthermor": [0, 2, 5], "combin": [0, 2, 5, 10, 11, 12, 13, 17, 18, 19, 20], "must": [0, 1, 2, 3, 5, 6, 7, 8, 11, 18, 19, 20], "onc": [0, 5, 8, 11, 12], "invalid": 0, "split": [0, 5, 13, 16], "some": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 18, 19, 20], "necessari": [0, 2, 5, 6, 8, 9, 11, 12, 13, 14, 15, 18, 19, 20], "particularli": [0, 6, 11, 13, 18, 20], "common": [0, 3, 5, 6, 7, 10, 11, 12, 13, 16, 17, 18, 19, 20], "suit": [0, 1, 2, 5, 6, 7, 8, 9, 10, 12, 18], "case": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 19, 20], "wrap": [0, 5, 6, 9, 13], "programm": [0, 15], "complet": [0, 5, 16, 17], "bash": [0, 5, 7, 8, 9, 19], "scop": 0, "releas": [0, 2, 5, 8, 11, 12, 14, 15, 16], "download": [0, 2, 5, 8, 14], "xz": [0, 4, 12, 14, 19], "s390": [0, 2, 4, 5, 6, 8, 19], "linux": [0, 2, 4, 5, 6, 8, 9, 14, 16, 19, 20], "maco": [0, 4, 5, 6, 8, 19], "x64": [0, 4, 5, 6, 8, 19], "m68k": [0, 4, 5, 6, 8, 19], "mint": 0, "solari": [0, 5, 6, 19], "sparc64": [0, 6], "restrict": [0, 2, 5, 10, 18, 19, 20], "app": [0, 2, 4, 5, 8, 12, 14, 15], "shell": [0, 5, 8, 14], "4": [0, 3, 5, 8, 9, 10, 11, 12, 14, 20], "3_p30": 0, "pexpect": [0, 5], "pytest": [0, 4, 8, 10, 12, 20], "r1_pkg_setup": [0, 2, 19], "anoth": [0, 8, 9, 14, 16, 18, 20], "possibl": [0, 2, 4, 5, 6, 7, 8, 9, 12, 14, 17, 18, 20], "uncondition": [0, 1, 2, 4, 5, 6, 8, 11, 19, 20], "condition": [0, 1, 2, 5, 7, 11, 12, 14, 15, 18, 19], "simplest": [0, 2, 5, 14, 18, 20], "wai": [0, 5, 6, 9, 12, 13, 18, 20], "achiev": [0, 8, 11, 16], "block": [0, 8, 13, 20], "express": [0, 8, 13, 19], "similar": [0, 2, 5, 14, 19, 20], "cmake": [0, 6, 19], "qt": 0, "bind": [0, 2, 5, 8, 14, 19], "telepathi": 0, "bu": 0, "protocol": [0, 2, 19], "dbu": [0, 2], "hardest": 0, "differ": [0, 1, 3, 5, 9, 10, 11, 16, 18, 20], "do": [0, 1, 3, 4, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 19, 20], "error": [0, 2, 5, 9, 13, 16, 18, 20], "prone": 0, "move": [0, 5, 12], "insid": [0, 1, 3, 5, 6, 9, 12, 14, 18, 19], "python3_6": [0, 2, 4, 8, 14], "gnome2": [0, 4, 14], "gobject": 0, "librari": [0, 1, 2, 3, 4, 5, 8, 9, 11, 14, 19], "access": [0, 5, 10, 11, 18], "secret": 0, "servic": [0, 20], "api": [0, 2, 7, 9, 10, 11, 13, 14, 16], "wiki": [0, 4, 8, 9, 14, 17], "gnome": [0, 4, 14], "libsecret": 0, "apach": [0, 2, 4, 5, 8], "introspect": 0, "fail": [0, 1, 2, 5, 8, 9, 11, 12, 16, 18, 20], "bug": [0, 5, 6, 12, 20], "655482": 0, "required_us": [0, 1, 2, 4, 5, 8, 13, 14, 19], "mock": [0, 4, 8, 11, 12, 18, 20], "fi": [0, 2, 5, 8, 12, 14, 19], "host": 0, "variou": [1, 5, 6, 9, 13, 16], "r1": [1, 3, 4, 9, 10, 12, 20], "try": [1, 6, 8, 9, 11, 20], "design": [1, 19], "you": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20], "probabl": [1, 6, 8, 13, 19], "us": [1, 9, 10, 11, 12, 13, 15, 16, 20], "than": [1, 2, 3, 6, 7, 8, 11, 12, 16, 17, 18, 20], "so": [1, 4, 5, 6, 11, 12, 18, 19, 20], "worthwhil": [1, 20], "shortli": 1, "bit": [1, 12, 17], "well": [1, 5, 7, 8, 11, 13, 15], "non": [1, 5, 6, 7, 9, 12, 14, 16, 18, 20], "obviou": [1, 20], "between": [1, 5, 8, 10, 11, 12, 13, 16], "befor": [1, 4, 8, 9, 10, 12, 14, 16, 20], "thei": [1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20], "valid": [1, 5, 8, 16, 20], "valu": [1, 5, 6, 9, 13, 18], "pythonx_i": 1, "cpython": [1, 4, 5, 9, 11, 13], "x": [1, 5, 16, 18, 20], "y": [1, 2, 16], "pypy3": [1, 4, 5, 6, 8, 11, 12, 13, 15, 18], "typic": [1, 14], "ani": [1, 2, 3, 5, 6, 7, 10, 14, 16, 18, 20], "respons": [1, 5], "explicitli": [1, 5, 7, 8, 10, 13, 20], "put": [1, 8], "correct": [1, 5, 6, 9, 10, 18, 19], "meant": [1, 13], "consist": [1, 6, 9, 13, 14, 15], "cover": [1, 5, 6, 13], "time": [1, 3, 4, 5, 6, 9, 10, 11, 12, 13, 16, 17, 18, 20], "runtim": [1, 2, 3, 5, 8, 10, 13, 14], "form": [1, 4, 12, 17], "doe": [1, 2, 3, 5, 6, 8, 9, 11, 12, 14, 15, 16, 18, 20], "appli": [1, 4, 5, 6, 7, 12, 15, 18, 19, 20], "distutil": [1, 3, 4, 10, 13, 14, 18, 19, 20], "assign": 1, "default": [1, 2, 5, 6, 7, 8, 9, 12, 13, 14, 15, 18, 19, 20], "commonli": [1, 2, 3, 5, 6, 9, 11], "concept": [1, 5, 10], "state": 1, "enforc": [1, 4, 5, 7, 8, 11, 18], "whenev": [1, 5, 9, 14, 15, 18, 19], "run": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 20], "two": [1, 5, 6, 8, 9, 11, 13, 16, 18, 19], "being": [1, 3, 6, 7, 8, 9, 10, 11, 12, 15, 16, 18, 20], "epython": [1, 2, 5, 8, 9, 12, 13, 18, 20], "contain": [1, 3, 4, 5, 6, 7, 12, 13], "s": [1, 2, 4, 5, 6, 7, 8, 9, 12, 13, 14, 16, 18, 19, 20], "basenam": 1, "identifi": 1, "e": [1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "g": [1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "python3": [1, 3, 5, 9, 11, 13, 16, 18, 20], "10": [1, 4, 5, 8, 10, 12], "final": [1, 2, 4, 5, 9, 12, 13, 16, 19, 20], "path": [1, 3, 5, 6, 9, 10, 12, 13, 16, 20], "usr": [1, 2, 3, 5, 7, 8, 9, 18, 20], "bin": [1, 2, 7, 8, 9, 12, 19, 20], "full": [1, 2, 4, 5, 7, 13, 20], "should": [1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "embed": [1, 2, 9, 11], "program": [1, 2, 5, 6, 11, 16, 18], "shebang": [1, 10, 11, 20], "spawn": 1, "dure": [1, 6, 7, 12, 13, 18], "prefer": [1, 5, 7, 8, 11, 12, 14, 15, 18, 20], "rather": [1, 6, 8, 16, 17, 18, 20], "bypass": 1, "virtualenv": [1, 5, 6, 12, 20], "creat": [1, 3, 4, 5, 6, 7, 12, 13, 16], "pep": [1, 3, 6, 10, 12, 16, 20], "517": [1, 3, 6, 10, 12, 20], "mode": [1, 3, 6, 10, 13], "mai": [1, 3, 5, 6, 8, 12, 13, 15, 16, 18, 20], "caus": [1, 4, 5, 8, 9, 13, 18, 20], "failur": [1, 5, 10, 12, 18], "modul": [1, 3, 4, 5, 6, 7, 8, 10, 11, 14, 15, 16, 18, 20], "previou": [1, 5, 12, 13, 16], "version": [1, 2, 3, 5, 6, 7, 8, 10, 12, 13, 15, 16, 17, 18, 20], "just": [1, 5, 6, 11, 13, 20], "resolv": [1, 5, 6, 10, 16, 18], "problem": [1, 3, 4, 5, 6, 8, 10, 12, 16, 17, 18], "pythonn": 1, "tool": [1, 2, 5, 8, 14, 15, 16, 20], "etc": 1, "via": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 19, 20], "exec": [1, 8, 9, 11, 12, 20], "hardcod": [1, 12, 18], "either": [1, 2, 5, 7, 8, 9, 11, 13, 18, 20], "establish": [1, 5, 13, 20], "local": [1, 2, 3, 5, 8, 9, 12, 13, 14, 18, 19, 20], "scope": [1, 5, 8, 13, 18], "multi": [1, 5, 10, 13, 19], "impl": [1, 5, 10, 13], "python_foreach_impl": [1, 2, 8, 14], "sub": [1, 3, 8, 10, 20], "setup": [1, 3, 6, 7, 10, 13, 18, 20], "done": [1, 5, 6, 8, 9, 12, 14, 18, 20], "directli": [1, 5, 6, 7, 9, 11, 13, 16, 18, 20], "section": [1, 5, 6, 12, 16, 20], "focu": [1, 12, 14], "often": [1, 5, 12, 20], "extern": [1, 2, 5, 6, 7, 11, 12], "languag": [1, 2, 5, 11, 15], "usual": [1, 3, 4, 5, 11, 13, 15, 16, 18, 20], "rule": [1, 2, 6, 8, 10, 13, 14, 15], "classifi": [1, 6], "categori": 1, "present": [1, 5, 6], "script": [1, 2, 5, 6, 7, 8, 10, 11, 12, 14, 16, 19], "usabl": [1, 11], "whose": [1, 5], "therefor": [1, 2, 5, 6, 7, 8, 11, 12, 15, 18], "howev": [1, 3, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20], "modern": [1, 4, 5, 6, 12, 18, 20], "base": [1, 5, 8, 10, 12, 14, 15, 19, 20], "entri": [1, 5, 18], "point": [1, 5, 11, 12, 13, 18, 20], "refus": [1, 11], "place": [1, 6, 11, 12], "special": [1, 3, 4, 5, 6, 16, 20], "subclass": 1, "extra": [1, 5, 6, 10], "still": [1, 5, 6, 8, 11, 12, 13, 16, 20], "meaningfulli": 1, "handl": [1, 4, 5, 6, 8, 13, 14], "gracefulli": [1, 4, 8], "subset": [1, 4, 5, 7, 8, 11, 12, 14, 20], "without": [1, 4, 7, 11, 13, 14, 15, 18], "There": [1, 3, 5, 8, 9, 16, 18, 20], "multipl": [1, 3, 4, 5, 7, 10, 14, 17, 18, 20], "approach": [1, 5, 8], "ad": [1, 10, 11, 13, 14, 18], "consid": [1, 2, 3, 6, 7, 8, 12, 14, 16], "light": 1, "enough": [1, 5], "inform": [1, 3, 5, 6, 10, 13, 16, 20], "messag": [1, 5, 20], "pkg_postinst": [1, 5], "util": [1, 2, 4, 5, 8, 9, 10, 12, 15, 18, 19, 20], "optfeatur": 1, "cheap": 1, "rebuild": [1, 6], "includ": [1, 2, 3, 4, 5, 6, 7, 9, 12, 15, 16, 17, 18, 19, 20], "__init__": [1, 3, 5, 9, 18, 20], "py": [1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 20], "As": [1, 3, 5, 6, 7, 8, 11, 13, 15, 16, 18, 19, 20], "thumb": [1, 6, 10, 13, 15], "belong": [1, 20], "care": [1, 2, 5, 7, 9, 15, 20], "addit": [1, 2, 4, 6, 8, 9, 10, 11, 12, 13, 18, 20], "plugin": [1, 3, 5, 6, 8, 10, 20], "setuptools_scm": [1, 10], "document": [1, 2, 8, 10, 11, 14, 17, 20], "former": [1, 5, 8, 13, 16, 20], "runner": [1, 5, 10], "sinc": [1, 2, 3, 5, 6, 7, 11, 12, 13, 15, 16, 18, 20], "sometim": [1, 5, 6, 9, 11, 18, 20], "These": [1, 6, 7, 12, 13, 18, 20], "go": [1, 2, 8, 12, 17, 18], "doc": [1, 2, 5, 8, 19], "respect": [1, 3, 5, 12, 14, 18], "maximum": [1, 5], "coverag": [1, 5, 15, 18], "further": [1, 18], "guid": [1, 3, 5, 16, 17], "linter": 1, "report": [1, 5, 6, 9, 20], "actual": [1, 5, 6, 7, 8, 9, 11, 12, 18, 20], "undesir": [1, 18, 20], "again": [1, 2, 20], "conveni": [1, 4, 5, 6, 18, 20], "add": [1, 2, 5, 6, 8, 12, 15, 19, 20], "sphinx": [1, 3, 6, 8, 10, 12], "copi": [1, 3, 5, 6, 9, 11, 19], "c": [1, 2, 5, 6, 8, 9, 10, 14], "extens": [1, 6, 7, 8, 9, 10, 11, 14, 15, 16], "header": [1, 9], "numpi": [1, 2], "If": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "metadata": [1, 5, 6, 14, 19], "pyproject": [1, 5, 7, 12], "toml": [1, 5, 7, 12], "setuptool": [1, 3, 4, 5, 7, 8, 12, 13, 15, 18], "cfg": [1, 3, 5, 6, 18], "custom": [1, 2, 6, 10, 13, 18], "read": [1, 5], "name": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 16, 20], "uncondit": [1, 2, 5, 10, 13, 14], "upstream": [1, 3, 5, 6, 7, 9, 11, 12, 14, 15, 16, 18, 20], "spuriou": 1, "strip": [1, 3, 5, 11, 18, 20], "ommit": 1, "kei": [1, 5, 16, 18, 19], "kind": [1, 3, 5, 7, 9, 11, 20], "621": 1, "older": [1, 11], "flit": [1, 6, 7, 12, 13], "poetri": [1, 6, 7, 13], "indic": [1, 5, 6, 11, 12, 13, 18, 20], "install_requir": [1, 3, 5, 6], "group": [1, 2, 6, 13, 18], "extras_requir": [1, 5], "setup_requir": [1, 5, 18], "deprec": [1, 3, 10, 11, 13], "tests_requir": [1, 5], "tox": [1, 5, 20], "ini": [1, 5, 18, 20], "noxfil": 1, "python_requir": 1, "besid": [2, 6, 7, 11, 14, 18], "few": [2, 4, 6, 12, 18, 20], "make": [2, 3, 4, 5, 6, 7, 12, 13, 15, 16, 18, 19, 20], "proper": [2, 8], "fairli": [2, 15, 19], "recent": [2, 3, 5, 12, 20], "agnost": 2, "henc": [2, 5, 14], "treat": [2, 18], "arbitrari": [2, 13], "ha": [2, 3, 5, 6, 7, 11, 12, 13, 14, 15, 16, 18, 20], "gain": [2, 18], "quit": [2, 4, 6, 11, 12], "At": [2, 5, 12, 15, 17], "mani": [2, 5, 8, 12, 14, 15, 16, 20], "old": [2, 4, 5, 6, 8, 10, 12, 16, 20], "reason": [2, 4, 5, 6, 11, 18, 20], "suffici": [2, 5, 6, 7, 11, 14], "prior": [2, 3, 5, 6, 8, 13, 16, 20], "happen": [2, 3, 4, 6, 7, 8, 11, 12, 19, 20], "natur": [2, 5, 8], "sort": 2, "latter": [2, 5, 8, 13, 16, 18, 20], "set": [2, 4, 5, 6, 7, 10, 12, 14, 15, 16, 18, 19, 20], "much": [2, 5, 7, 20], "compon": [2, 3, 8, 11, 14, 16], "account": [2, 5, 8, 20], "detail": [2, 7, 9, 11, 13, 16, 20], "choic": [2, 6, 13, 20], "chapter": [2, 8, 9], "along": [2, 5, 6, 7, 11, 13, 19, 20], "toolchain": [2, 8], "func": [2, 8], "commit": [2, 20], "6e5e8a57628095d8d0c8bbb38187afb0f3a42112": 2, "userspac": 2, "xbox": 2, "360": 2, "control": [2, 4, 5, 18], "driver": 2, "xboxdrv": 2, "gitlab": [2, 8], "io": [2, 4, 5, 8, 14, 19], "chewi": 2, "workdir": 2, "lib": [2, 3, 5, 7, 9, 16, 18, 20], "boost": [2, 7], "glib": 2, "sy": [2, 5, 8, 11, 14, 15, 16, 20], "libudev": 2, "libusb": 2, "x11": 2, "libx11": 2, "src_compil": [2, 5, 6, 8, 14], "escon": 2, "cxx": 2, "tc": [2, 9], "getcxx": 2, "getar": 2, "ranlib": 2, "getranlib": 2, "cxxflag": 2, "wall": 2, "linkflag": 2, "ldflag": [2, 5], "src_instal": [2, 5, 8, 9, 14, 19], "dobin": [2, 9], "doman": 2, "dodoc": [2, 5], "new": [2, 5, 6, 9, 10, 11, 13, 16, 18], "readm": [2, 12], "md": 2, "todo": [2, 9, 12], "yourself": [2, 4, 20], "becaus": [2, 5, 6, 15, 18, 20], "cannot": [2, 4, 5, 9, 11, 20], "my_p": 2, "src": [2, 5, 9, 20], "_rc": 2, "rc": 2, "high": [2, 12, 15, 19], "open": [2, 16], "sourc": [2, 3, 10, 12, 14, 17, 20], "schema": 2, "free": [2, 15, 20], "orient": [2, 16], "databas": [2, 4], "mongodb": [2, 4], "fastdl": 2, "sspl": 2, "acct": 2, "user": [2, 3, 5, 6, 7, 8, 11, 12, 15, 18, 19, 20], "arch": [2, 8, 12], "snappi": 2, "cpp": 2, "yaml": [2, 3], "70": 2, "thread": [2, 8, 18, 19, 20], "libpcr": 2, "42": 2, "zstd": 2, "snowbal": 2, "stemmer": 2, "net": [2, 8, 11, 14, 19], "libpcap": 2, "zlib": 2, "11": [2, 5, 10, 12, 20], "pymongo": 2, "cheetah3": 2, "psutil": 2, "pyyaml": 2, "type": [2, 3, 6, 13, 16], "ncurs": [2, 14], "readlin": [2, 5, 8, 14], "admin": [2, 8], "mongo": 2, "src_configur": [2, 5, 8, 9, 13, 14, 19], "scons_opt": 2, "cc": [2, 9], "getcc": [2, 9], "disabl": [2, 5, 8, 10, 12, 14, 19, 20], "warn": [2, 3, 5, 10, 16], "pcre": 2, "core": [2, 5, 20], "src_test": [2, 5, 6, 14], "buildscript": 2, "resmok": 2, "dbpathprefix": 2, "job": [2, 18], "makeopts_job": [2, 18], "die": [2, 3, 5, 8, 9, 14, 18, 20], "nostrip": [2, 8], "prefix": [2, 8, 9, 16, 20], "ed": [2, 9, 15], "everyth": [2, 13], "your": [2, 4, 5, 6, 7, 8, 11, 12, 15, 16, 18, 20], "python2_7": [2, 5, 6, 8, 13, 14, 19], "eutil": 2, "molecular": 2, "dynam": 2, "nmr": 2, "analysi": [2, 19], "relax": [2, 18], "gna": 2, "bz2": [2, 8, 19], "python_required_us": [2, 4, 5, 8, 10, 14, 19], "python_gen_cond_dep": [2, 4, 5, 8, 12, 13, 19], "numdifftool": 2, "matplotlib": [2, 5, 19], "python2": [2, 8, 9, 13, 19], "wxpython": [2, 19], "wx_gtk_ver": [2, 19], "sci": [2, 5, 19], "chemistri": 2, "pymol": 2, "bmrblib": 2, "minfx": 2, "scipi": 2, "molmol": 2, "vmd": 2, "visual": 2, "grace": 2, "opendx": 2, "gfx": 2, "pngcrush": 2, "python_moduleinto": [2, 5, 9, 14], "python_domodul": [2, 5, 9, 12, 14, 19], "make_wrapp": [2, 9], "python_get_sitedir": [2, 3, 8, 9], "part": [2, 3, 4, 5, 7, 8, 9, 12, 13, 14, 15, 18, 20], "That": [2, 16, 20], "fortran_need": 2, "fortran": 2, "fortran_standard": 2, "90": [2, 14], "object": [2, 11, 16, 19], "chemic": 2, "kinet": 2, "thermodynam": 2, "transport": 2, "cantera": 2, "v": [2, 4, 5, 14], "pch": 2, "sundial": 2, "eigen": 2, "libfmt": 2, "cython": [2, 10, 14, 19], "2_pkg_setup": 2, "scons_var": 2, "cc_flag": 2, "cxx_flag": 2, "std": 2, "debug": 2, "getfc": 2, "fortranflag": 2, "optimize_flag": 2, "wno": 2, "inlin": [2, 7, 14], "renamed_shared_librari": 2, "use_pch": 2, "usex": [2, 5, 19], "system_fmt": 2, "system_sundi": 2, "system_eigen": 2, "env_var": 2, "extra_inc_dir": 2, "eigen3": 2, "scons_target": 2, "f90_interfac": 2, "n": [2, 18], "python2_packag": 2, "none": [2, 5, 6, 16], "python3_packag": 2, "python3_cmd": 2, "els": [2, 8, 11, 16], "stage_dir": 2, "libdirnam": 2, "get_libdir": [2, 8], "python_optim": [2, 8, 9], "deal": [2, 7, 8, 10, 15], "sens": 2, "plain": [2, 5, 6, 13], "loop": [2, 5, 18], "autom": 2, "pipelin": [2, 20], "poisson": 2, "boltzmann": 2, "electrostat": 2, "calcul": 2, "poissonboltzmann": 2, "apb": 2, "opal": 2, "openbabel": 2, "zsi": 2, "lang": [2, 8, 11, 12, 19], "swig": [2, 19], "src_prepar": [2, 3, 5, 8, 9, 14, 16, 18], "f": [2, 9], "pyc": [2, 9], "o": [2, 5], "pyo": [2, 9], "delet": [2, 3, 14], "eappli": 2, "patch": [2, 5, 6, 8, 11, 12, 20], "eapply_us": 2, "rm": [2, 3, 5, 9], "rf": 2, "python_copy_sourc": [2, 14], "python_configur": 2, "cat": [2, 5], "build_dir": [2, 3, 5, 14, 20], "build_config": 2, "eof": [2, 5], "eprefix": [2, 8, 9], "max_atom": 2, "10000": 2, "build_pdb2pka": 2, "rebuild_swig": 2, "run_in_build_dir": [2, 8, 14], "python_instal": [2, 3, 14], "cd": [2, 5, 9, 12, 20], "let": [2, 4, 8, 16, 19], "independ": [2, 5, 6, 7, 14, 19], "separ": [2, 5, 6, 7, 8, 11, 14, 18, 20], "presum": 2, "manual": [2, 5, 6, 10, 12], "wider": 2, "target": [2, 5, 8, 9, 11, 12, 15, 19], "rang": [2, 5, 12], "recommend": [2, 5, 7, 12, 13, 14, 16, 18, 19, 20], "gp": [2, 8], "daemon": [2, 8], "usb": [2, 8], "serial": [2, 5, 8], "devic": [2, 8], "map": [2, 5, 6, 8, 18], "client": [2, 8, 9, 11, 14], "gpsd": [2, 8], "mirror": [2, 4, 5, 6, 8, 14, 19, 20], "nongnu": [2, 8], "24": [2, 8, 18, 20], "misc": [2, 8], "pp": [2, 8], "20120407": [2, 8], "myesconsarg": [2, 8], "libdir": [2, 8, 9], "udevdir": [2, 8], "get_udevdir": [2, 8], "chrpath": [2, 8], "gpsd_user": [2, 8], "gpsd_group": [2, 8], "uucp": [2, 8], "manbuild": [2, 8], "use_scon": [2, 8], "sconstruct": [2, 8], "py2": [2, 8, 20], "construct": [2, 4, 8, 19], "pkg_config": 2, "shlinkflag": 2, "destdir": [2, 8, 9], "bundl": [2, 12], "simpl": [2, 5, 7, 13, 14, 17], "impli": [2, 9, 11], "python_req_us": [2, 4, 5, 6, 8, 14, 19], "individu": [2, 5, 11, 18], "applic": [2, 9, 12], "had": 2, "instead": [2, 3, 5, 6, 7, 8, 9, 13, 14, 16, 18, 19, 20], "no_waf_libdir": 2, "ye": 2, "unit": 2, "framework": [2, 3, 5, 11, 17], "mrzechonek": 2, "tut": 2, "roughli": [2, 9, 12, 13], "ldap": 2, "ldb": 2, "samba": [2, 19], "ftp": [2, 19], "pub": 2, "elibc_freebsd": 2, "libbsd": 2, "popt": 2, "talloc": [2, 19], "tevent": 2, "9": [2, 5, 10, 12, 20], "31": 2, "tdb": 2, "12": [2, 5, 8, 16, 18], "nd": 2, "openldap": 2, "libxslt": 2, "waf_binari": [2, 19], "buildtool": [2, 19], "filesdir": 2, "27": [2, 8], "optional_packag": 2, "myconf": [2, 8], "rpath": 2, "modulesdir": 2, "builtin": 2, "utils_src_configur": [2, 19], "tradition": 3, "python": [3, 6, 17, 18, 20], "organ": 3, "subpackag": [3, 5], "locat": [3, 5], "parent": [3, 9], "directori": [3, 6, 9, 10, 11, 12, 13, 14, 16, 18, 20], "submodul": 3, "repres": [3, 5], "attribut": [3, 10, 16], "session": [3, 20], "addnod": 3, "site": [3, 5, 6, 9, 11, 16, 18, 20], "fine": [3, 5, 12, 16], "start": [3, 5, 6, 11, 12, 15, 16, 20], "problemat": [3, 5, 6, 10, 18], "top": [3, 5, 9, 18], "level": [3, 5, 9, 11, 20], "layout": [3, 6, 13], "wish": [3, 5, 6], "zope": 3, "share": [3, 5], "interfac": [3, 6, 11, 16], "event": [3, 18], "depend": [3, 6, 7, 9, 10, 11, 12, 13, 15, 17], "far": [3, 12, 19], "concern": 3, "entir": [3, 5, 9, 10, 12, 13, 14, 20], "doabl": 3, "real": [3, 18, 20], "we": [3, 4, 6, 8, 11, 12, 14, 15, 17], "freshli": 3, "build": [3, 9, 10, 11, 16, 20], "abl": [3, 15], "tmp": [3, 5, 9, 18, 20], "portag": [3, 5, 8, 12, 14, 15, 18, 20], "python3_8": 3, "traceback": [3, 5, 20], "last": [3, 5], "stdin": 3, "modulenotfounderror": 3, "No": [3, 5], "now": [3, 5, 6, 8, 13, 14, 20], "around": [3, 5, 6, 12, 20], "back": [3, 6, 16], "better": [3, 6, 11, 12, 13, 14], "solut": [3, 5, 16, 20], "unlik": [3, 5, 6, 11, 15], "tradit": 3, "act": 3, "proxi": [3, 14], "strictli": [3, 5, 6, 15, 20], "bound": [3, 11, 16], "permit": [3, 4, 5, 6, 11, 15], "load": [3, 7, 9, 18, 20], "search": [3, 10, 20], "method": [3, 5, 11, 13, 16, 18, 20], "420": 3, "newer": [3, 4, 5, 6, 12, 16], "pkgutil": 3, "standard": [3, 4, 6, 7, 9, 10, 11, 14, 16, 20], "discourag": [3, 6], "earlier": [3, 13], "ignor": [3, 4, 5, 8, 18, 20], "did": [3, 13, 16, 20], "within": [3, 5, 6, 12, 17, 20], "content": 3, "__path__": 3, "__import__": 3, "extend_path": 3, "__name__": 3, "pkg_resourc": [3, 6], "declare_namespac": 3, "altern": [3, 6, 8, 10, 16, 17, 20], "pth": 3, "automat": [3, 4, 5, 6, 10, 12], "inject": [3, 5, 19], "portabl": 3, "topic": [3, 17], "exact": [3, 5, 11, 19], "detect": [3, 5, 9, 20], "recogn": [3, 5, 16], "lack": [3, 9, 20], "action": [3, 5], "distinguish": [3, 5, 13], "veri": [3, 5, 6, 9, 11, 12, 17], "through": [3, 4, 5, 6, 8, 11, 16, 18, 20], "suspici": 3, "less": [3, 20], "ruamel": 3, "miss": [3, 5, 6, 9, 10, 11, 12, 13, 17, 18], "learn": 3, "about": [3, 6, 13], "collis": [3, 5, 20], "namespace_packag": 3, "per": [3, 5], "remov": [3, 4, 5, 6, 11, 12, 13, 14, 15, 18, 20], "tree": [3, 5, 13, 20], "after": [3, 5, 6, 9, 12, 13, 16], "python_compil": 3, "r1_python_compil": [3, 5], "jaraco": [3, 5, 12, 18], "equival": [3, 6, 8, 9, 13], "r1_python_instal": [3, 5], "python_install_al": [3, 5], "r1_python_install_al": [3, 5], "explicit": [3, 4, 5, 6, 19, 20], "rdep": 3, "sed": [3, 5, 8, 14, 18, 20], "i": [3, 5, 6, 7, 11, 12, 14, 16, 18, 20], "r1_src_prepar": [3, 5, 18], "histor": [3, 5, 6, 13, 16], "process": [3, 5, 12, 16, 19], "retir": 3, "major": [4, 5, 6, 7, 11, 12, 20], "avail": [4, 5, 6, 8, 12, 13, 16, 17], "sqlite3": 4, "sqlite": [4, 8], "xdg": 4, "music": 4, "lollypop": 4, "adishatz": 4, "syntax": [4, 10, 11], "lightweight": [4, 5], "password": 4, "backend": [4, 10, 12, 13], "pwman3": 4, "mysql": [4, 14], "postgr": 4, "fulli": [4, 5, 7], "solv": [4, 17], "python_gen_impl_dep": 4, "helper": [4, 5, 10, 14, 19, 20], "2_7": [4, 5], "3_": 4, "travel": 4, "spulec": 4, "freezegun": [4, 18, 20], "pypi": [4, 5, 6, 8, 10, 11, 13], "dateutil": 4, "six": [4, 5, 8], "nose": [4, 5, 20], "distutils_enable_test": [4, 13, 18, 20], "ll": [4, 14], "backport": [4, 6, 10, 12], "zero": 4, "argument": [4, 6, 10, 13, 16, 20], "output": [4, 5, 6, 9, 16, 20], "everi": [4, 5, 6, 8, 12, 14, 16], "escap": [4, 13, 19], "quot": [4, 19], "partial": [4, 9, 10, 13], "python_single_usedep": [4, 5, 13, 19], "cli": [4, 5], "black": 4, "click": 4, "fnmatch": 4, "style": [4, 5, 13, 17, 18, 20], "wildcard": 4, "stdlib": [4, 13, 16], "rememb": [4, 12], "pattern": [4, 12, 13, 19], "prevent": [4, 10, 11, 19, 20], "filenam": [4, 5], "expans": 4, "expand": 4, "zoneinfo": 4, "advantag": [4, 5, 18, 20], "adjust": [4, 9, 11, 16], "switch": [4, 9, 12, 13, 20], "list": [4, 5, 8, 12, 13, 18], "longer": [4, 5, 6, 13], "silent": 4, "updat": [4, 6, 9, 11, 12, 16], "immedi": [4, 5, 19], "becam": [4, 11], "empti": [4, 5], "importlib_metadata": [4, 5, 6], "python3_7": [4, 8], "facilit": [5, 9], "deriv": [5, 6, 7], "notabl": [5, 16], "effici": 5, "experiment": 5, "guarante": [5, 6], "pleas": [5, 6, 8, 9, 12, 15, 16, 18, 19, 20], "hook": 5, "iwdevtool": 5, "regress": 5, "migrat": [5, 10], "exist": [5, 7, 10, 11, 12], "oper": [5, 17], "backward": [5, 11, 12, 16], "readi": [5, 12, 15], "greater": [5, 7], "number": [5, 7, 12, 18], "cost": 5, "flexibl": [5, 7], "wheel": [5, 12, 18], "zip": [5, 6], "stage": [5, 12, 20], "compil": [5, 6, 10, 11, 20], "mere": [5, 7], "imag": [5, 9], "invok": [5, 18, 20], "popul": [5, 15], "addition": [5, 11, 14], "pyproject2setuppi": [5, 6, 13], "hack": [5, 6, 7, 13], "reli": [5, 6, 7, 11, 20], "distutils_use_pep517": [5, 13], "By": [5, 6, 11], "2022": [5, 13, 18], "xml": [5, 6], "feel": [5, 15], "json": 5, "martinblech": 5, "xmltodict": 5, "mit": [5, 6], "vast": [5, 12], "index": [5, 10], "sdist": [5, 20], "binari": [5, 9, 12], "vc": [5, 20], "mechan": [5, 7, 11], "over": [5, 11, 12, 18, 19, 20], "offici": 5, "instanc": [5, 13], "nonfunct": 5, "append": [5, 14], "uniqu": [5, 14], "suffix": 5, "gh": [5, 20], "request": [5, 8, 10], "distfil": [5, 16, 19], "clearli": [5, 20], "tarbal": [5, 12, 20], "textual": 5, "rich": 5, "implic": 5, "cf": [5, 12], "regener": [5, 12], "anywai": [5, 16], "nevertheless": 5, "even": [5, 8, 9, 11, 18, 20], "pregener": 5, "internet": [5, 10, 18], "nodej": 5, "underli": [5, 6], "txt": [5, 6, 12, 18], "ci": [5, 20], "travi": 5, "yml": 5, "grep": 5, "statement": 5, "indirect": 5, "relev": [5, 6, 13, 17, 18, 20], "unnecessarili": 5, "logic": [5, 6, 12], "long": [5, 11, 12], "quickli": 5, "widest": 5, "avoid": [5, 6, 8, 10, 15, 16, 17, 20], "unpredict": 5, "who": [5, 17], "especi": [5, 18, 20], "distutils_single_impl": 5, "aim": [5, 11, 15, 17], "rewritten": [5, 19], "layer": [5, 14], "pyroot": 5, "rootpi": 5, "physic": [5, 19], "root_numpi": 5, "pytabl": 5, "termcolor": 5, "determin": [5, 6, 7, 11, 19, 20], "flit_cor": [5, 12], "maintain": [5, 10, 11, 12, 18], "suggest": [5, 8, 13, 17, 18, 20], "tabl": [5, 13, 16, 18], "summar": [5, 16], "use_pep517": 5, "flit_scm": 5, "hatchl": 5, "jupyt": 5, "jupyter_packag": 5, "build_api": 5, "maturin": 5, "pbr": [5, 6], "pdm": [5, 13], "pep517": [5, 10], "build_meta": 5, "__legacy__": 5, "standalon": [5, 12], "reserv": 5, "bootstrap": [5, 6, 10], "itself": [5, 6, 8, 9, 12, 18], "own": [5, 12, 20], "Their": [5, 6, 9], "fix": [5, 6, 10, 11, 12, 16, 18, 20], "produc": [5, 12], "ident": 5, "artifact": 5, "reduc": 5, "footprint": 5, "isol": 5, "faster": 5, "poetry_cor": 5, "smaller": 5, "checkout": [5, 12, 20], "abil": [5, 6], "tag": [5, 12, 20], "execut": [5, 6, 7, 9, 11, 12, 13, 14, 20], "143": 5, "_install_setup_requir": 5, "attr": [5, 12], "131": 5, "dist": 5, "dict": [5, 19], "425": 5, "_distribut": 5, "self": [5, 16, 18, 20], "292": 5, "finalize_opt": 5, "717": 5, "ep": 5, "integr": [5, 8, 10, 11], "48": 5, "infer_vers": 5, "_get_vers": 5, "config": [5, 9, 12], "148": 5, "parsed_vers": 5, "_do_pars": 5, "110": 5, "rais": 5, "lookuperror": 5, "scm": 5, "unabl": [5, 20], "sure": [5, 18, 20], "re": [5, 8, 15, 20], "intact": 5, "git": [5, 12, 20], "folder": 5, "don": [5, 13], "t": [5, 7, 8, 11, 13, 20], "pip": [5, 12, 20], "proj": 5, "master": [5, 20], "egg": [5, 6, 18], "setuptools_scm_pretend_vers": 5, "static": [5, 8], "write": [5, 6, 7, 12, 17], "hybrid": [5, 10], "expos": [5, 6], "alwai": [5, 6, 8, 11, 13, 16, 17], "taken": [5, 20], "ship": 5, "issu": [5, 6, 13, 16, 18, 20], "forc": [5, 6, 8, 9, 12, 13, 18, 20], "frobnic": 5, "makefil": [5, 14], "jq": 5, "pyx": 5, "unresolv": 5, "regard": 5, "simultan": [5, 11, 17, 20], "link": [5, 7, 9, 16], "editor": 5, "broken": [5, 6, 18, 20], "cryptic": 5, "revers": [5, 7, 12, 15], "miscompil": 5, "panda": 5, "breakag": [5, 20], "dask": [5, 18], "29": 5, "_lib": 5, "hashtabl": 5, "_hashtabl": 5, "tslib": 5, "_tslib": 5, "13": [5, 18, 20], "interv": 5, "init": 5, "30": 5, "convers": [5, 6], "outofboundstimedelta": 5, "localize_pydatetim": 5, "importerror": [5, 6, 10, 11], "38": 5, "x86_64": 5, "undefin": 5, "symbol": 5, "pandas_datetime_to_datetimestruct": 5, "easiest": [5, 19], "workaround": 5, "j1": 5, "origin": [5, 9, 11, 12, 16], "overrid": [5, 9, 14, 20], "extend": [5, 11], "introduc": [5, 11], "src_": 5, "python_": [5, 8], "_all": [5, 8], "compris": 5, "behav": [5, 8], "r1_": 5, "correspond": [5, 12], "python_prepare_al": [5, 18], "each": [5, 6, 7, 11, 14], "foreach": 5, "python_configure_al": 5, "python_compile_al": [5, 8], "python_test_al": 5, "dedic": [5, 6, 14], "chang": [5, 6, 8, 9, 10, 11, 13, 14, 15, 20], "task": [5, 8, 12], "default_src_prepar": 5, "ez_setup": 5, "end": [5, 6, 7, 9, 12, 14, 18, 20], "dir": [5, 14], "extran": 5, "fixm": 5, "test_pytest_plugin": 5, "test_testcase_no_app": 5, "_": [5, 12, 20], "test_test_util": 5, "pointless": 5, "cov": [5, 18], "addopt": 5, "aiohttp": [5, 18], "r1_python_prepare_al": [5, 18], "duplic": [5, 14, 20], "moment": [5, 12, 13, 15], "modif": 5, "keep": [5, 15, 17], "why": [5, 6, 20], "console_script": [5, 6], "configur": [5, 6, 8, 13, 14, 20], "step": [5, 6, 7, 8, 14], "esetup": [5, 8], "mpi": 5, "distutils_arg": [5, 13], "resourcepath": 5, "compress": 5, "manpag": 5, "see": [5, 9, 16, 18, 20], "distutils_enable_sphinx": [5, 8], "emak": [5, 8, 9], "strongli": [5, 6, 15], "encourag": [5, 15], "testbitvector": 5, "redefin": [5, 18], "too": [5, 12, 20], "collada": 5, "einstalldoc": [5, 8, 14], "docinto": 5, "sample_cod": 5, "docompress": 5, "pf": 5, "main": [5, 9], "manipul": [5, 20], "arrai": 5, "futur": [5, 15], "pillow": 5, "build_ext": [5, 6, 20], "tiff": 5, "webp": 5, "dash": 5, "underscor": [5, 20], "boolean": 5, "disable_tiff": 5, "enable_tiff": 5, "disable_webp": 5, "enable_webp": 5, "modifi": [5, 6, 11, 20], "beforehand": 5, "econf": [5, 19], "paremet": 5, "find_packag": 5, "wrongli": [5, 16, 20], "grab": [5, 13], "intend": [5, 16, 20], "attempt": [5, 16, 20], "mistak": 5, "forbidden": 5, "exclud": 5, "paramet": [5, 8, 16], "properli": [5, 6, 13], "intermedi": 5, "minim": [5, 11, 15], "precis": [5, 8, 9], "catch": 5, "earli": [5, 7, 8, 12], "anywher": 5, "first": [5, 6, 7, 11, 12, 15, 16, 18, 20], "easi": [5, 16, 20], "whitelist": 5, "sanit": [5, 16], "mozilla": 5, "bleach": 5, "webencod": 5, "unittest": [5, 11, 20], "discoveri": [5, 18, 20], "univers": 5, "encod": [5, 16], "detector": 5, "chardet": [5, 8], "cygwin": [5, 6], "hypothesi": [5, 20], "bottom": 5, "venv": [5, 6, 13], "temporari": [5, 6], "frequent": [5, 18], "littl": [5, 6, 18], "skip": [5, 8, 10, 12, 16], "those": [5, 6, 7, 8, 9, 18, 20], "how": [5, 20], "statist": 5, "want": [5, 6, 8], "across": 5, "irrelev": [5, 20], "pep8": 5, "pycodestyl": 5, "flake8": [5, 18], "thin": [5, 6], "alreadi": [5, 9, 12, 14], "close": 5, "pre": 5, "post": [5, 6, 13], "easili": [5, 14, 18, 20], "r1_src_test": 5, "cmd": 5, "cmd2": 5, "colorama": 5, "pyperclip": 5, "wcwidth": 5, "text": [5, 8], "column": 5, "80": 5, "fact": [5, 20], "simpli": [5, 16, 17, 20], "3_6": [5, 14], "3_7": [5, 14], "3_8": 5, "tab": 5, "argpars": 5, "argcomplet": 5, "fish": 5, "tcsh": 5, "rel": [5, 18, 20], "epytest": [5, 6, 8, 12, 18, 20], "network": [5, 6, 18, 20], "marker": [5, 10], "m": [5, 18, 20], "displai": 5, "appeas": 5, "usng": 5, "xvfb": 5, "server": [5, 20], "virtx": 5, "nonfat": 5, "termin": [5, 20], "context": [5, 19], "come": [5, 13, 18], "theme": [5, 6, 8], "larg": [5, 12, 15, 18], "hard": [5, 8, 12], "To": [5, 6, 8, 9, 12, 16, 18, 19], "conf": [5, 6], "ext": 5, "distutils_use_setuptool": [5, 13], "color": 5, "stream": 5, "handler": 5, "log": 5, "coloredlog": 5, "xolox": 5, "readthedoc": 5, "en": 5, "latest": 5, "humanfriendli": 5, "expert": [5, 10, 14, 20], "uncommon": 5, "third": [5, 7, 13], "parti": 5, "inflect": 5, "word": 5, "jazzband": 5, "rst": 5, "linker": [5, 9], "alabast": [5, 6], "python_target": [5, 7, 8, 11, 12], "inspect": 5, "omit": [5, 15, 16], "port": [5, 8, 10], "pyseri": 5, "psf": 5, "tri": 5, "incorrect": [5, 6], "been": [5, 6, 8, 11, 12, 13, 14, 16, 18], "assumpt": 5, "consum": [5, 6, 20], "distutils_opt": 5, "alter": [5, 18], "distutils_dep": 5, "dependneci": 5, "r1_src_compil": 5, "r1_src_instal": 5, "primari": [5, 18], "alongsid": [5, 6], "libfoo": 5, "r1_src_configur": 5, "setuptools_rust": 5, "ecosystem": [5, 15, 17], "bump": [5, 12, 15], "lock": 5, "Then": [5, 12], "crate": 5, "cargo_opt": 5, "url": [5, 16], "cargo_crate_uri": 5, "qa_flags_ignor": 5, "posit": 5, "cflag": [5, 9, 20], "cargo_src_unpack": 5, "inflector": 5, "alias": [5, 16], "asn1": 5, "asn1_der": 5, "_rust": 5, "src_unpack": 5, "here": [6, 8, 14, 19], "direct": [6, 7, 14], "convert": [6, 8, 13], "facil": 6, "right": 6, "fit": [6, 20], "profil": [6, 15], "pyproject2toml": 6, "misbehav": 6, "subsequ": 6, "qa": [6, 9, 17], "unset": 6, "expect": [6, 18, 20], "sidebar": 6, "bitprophet": 6, "snippet": [6, 16], "except": [6, 7, 9, 11, 12, 16], "up": [6, 9, 12, 13, 14, 17, 18, 20], "pm": 6, "cleanli": [6, 12], "condit": [6, 10, 12, 18, 20], "leav": 6, "fallback": 6, "never": [6, 11, 13], "clean": [6, 12, 13], "requier": 6, "With": [6, 20], "themselv": [6, 18, 20], "entry_point": [6, 18], "dictionari": [6, 19], "our": [6, 12, 18, 20], "interest": [6, 8, 20], "gui_script": 6, "meaning": 6, "importlib": [6, 11, 20], "fall": [6, 16], "remind": 6, "distutils_strict_entry_point": 6, "trigger": [6, 18, 20], "wrong": [6, 13], "leftov": 6, "resourc": [6, 11, 12], "submit": 6, "suppli": 6, "heavi": 6, "speak": [6, 11], "known": [6, 16, 20], "limit": [6, 12, 15, 17], "address": [6, 12, 16], "definit": 6, "subdirectori": [6, 9], "interspers": 6, "closest": 6, "inplac": 6, "shift": [6, 11], "throughout": 6, "incompat": [6, 11, 16, 18, 20], "2to3": 6, "distutils_in_source_build": 6, "collect": [6, 18, 20], "pypa": 6, "riscv": [6, 8, 19], "pythonpath": [6, 20], "unless": [6, 8, 15], "distutils_install_for_test": [6, 13, 18, 20], "alik": [6, 11, 13], "preserv": [6, 11], "extrem": 6, "home": [6, 12, 13], "went": 6, "awai": [6, 7], "python_test": [6, 8, 9, 12, 18, 20], "basi": 7, "occur": [7, 18], "libpython": [7, 16], "aforement": [7, 13, 16], "foo": [7, 16], "wise": 7, "abstract": [7, 14], "regular": [7, 20], "scon": [7, 8, 10], "second": [7, 13], "easier": 7, "select": [7, 8, 18, 19], "allow": [7, 20], "complex": [7, 19], "repeat": [7, 14], "model": 7, "libboost_python": 7, "python_single_target": [7, 11, 12], "checklist": [7, 10], "primarili": [7, 11], "qualifi": 7, "remain": [7, 11, 13], "power": 8, "harder": 8, "ninja": 8, "train": 8, "yet": [8, 12, 19], "opposit": [8, 11, 13], "investig": 8, "involv": [8, 13], "human": 8, "beings": 8, "socks5": 8, "ssl": 8, "certifi": 8, "2017": 8, "17": 8, "idna": 8, "urllib3": [8, 12], "26": 8, "pysock": 8, "cryptographi": 8, "pyopenssl": 8, "14": [8, 20], "httpbin": [8, 18], "hang": 8, "continu": [8, 12, 20], "python_gen_useflag": 8, "out": [8, 9, 10, 11, 12, 13, 14, 15], "toolkit": 8, "translat": 8, "format": [8, 12, 16], "subtitl": 8, "pydiff": 8, "iso": 8, "lxml": 8, "pycountri": 8, "18": 8, "levenshtein": 8, "devel": 8, "gettext": 8, "video": 8, "gaupol": 8, "riverbankcomput": 8, "sip": 8, "intro": 8, "sip_api_major_nr": 8, "siplib": 8, "h": [8, 9, 19], "bison": 8, "flex": 8, "prepar": [8, 9, 19], "bindir": 8, "incdir": 8, "python_get_includedir": [8, 9, 13], "echo": 8, "distutils_all_subphase_impl": 8, "python3_5": 8, "bzip2": 8, "epydoc": 8, "eselect": 8, "elibc_glibc": 8, "sandbox": [8, 20], "kernel_linux": 8, "pax": 8, "rsync": 8, "userland_gnu": 8, "coreutil": 8, "below": 8, "sphinx_rtd_them": 8, "practic": [8, 11, 12], "big": 8, "imagin": 8, "anymor": [8, 11], "downgrad": 8, "though": [8, 12], "resembl": [8, 18], "presenc": [8, 18], "activ": [8, 17], "behavior": [8, 11, 16], "goal": [8, 12, 20], "side": [8, 11], "effect": [8, 11], "someth": [8, 9, 20], "accord": 8, "won": 8, "reject": [8, 15, 16], "unsupport": [8, 11], "python_is_python3": [8, 13], "basic": [9, 10, 20], "reus": 9, "four": [9, 13, 19], "python_doex": 9, "python_newex": 9, "python_doscript": [9, 14, 19], "python_newscript": 9, "recurs": [9, 15, 18], "python_dohead": 9, "python_scriptinto": 9, "affect": [9, 14], "symlink": 9, "cropgtk": 9, "sbin": 9, "pynslcd": 9, "anyth": 9, "land": 9, "my_pn": 9, "dodir": 9, "rare": [9, 18, 20], "libimag": 9, "env": [9, 12], "python_fix_shebang": 9, "sphinxtrain": 9, "openvpn": 9, "vulnkei": 9, "insinto": 9, "doin": 9, "kitti": 9, "speed": 9, "nowadai": [9, 12, 13], "pypy2": [9, 11, 12], "_feedparser_sgmllib": 9, "lib64": 9, "byte_compil": 9, "cmake_src_instal": 9, "entropi": 9, "ocassion": 9, "bad": [9, 16], "seri": 9, "getter": [9, 13, 16], "python_get_scriptdir": 9, "python_get_library_path": [9, 13], "python_get_cflag": 9, "preprocessor": 9, "pkg": 9, "python_get_lib": 9, "python_get_python_config": 9, "offset": 9, "mycmakearg": [9, 13, 19], "dpython_dest": 9, "dpython_execut": 9, "dpython_include_dir": 9, "dpython_librari": 9, "cmake_src_configur": [9, 19], "pyinc": 9, "pylib": 9, "micha\u0142": 10, "g\u00f3rny": 10, "creativ": 10, "intern": 10, "prefac": 10, "choos": [10, 11, 14], "vs": [10, 13], "relat": [10, 12, 13, 20], "legaci": [10, 13, 16], "variant": [10, 11, 16, 18], "snapshot": [10, 20], "parallel": 10, "race": 10, "command": [10, 14, 18], "usag": 10, "rust": 10, "cargo": 10, "variat": 10, "byte": [10, 16], "queri": [10, 16], "advanc": 10, "cffi": 10, "greenlet": [10, 18], "abort": 10, "due": [10, 12, 14, 18], "assert": 10, "recip": 10, "xdist": [10, 12, 20], "autoload": 10, "typeerror": 10, "_make_test_flaki": 10, "got": [10, 13], "unexpect": 10, "rerun": 10, "importpathmismatcherror": 10, "fixtur": [10, 12], "namespac": [10, 18], "disjoint": 10, "waf": [10, 19], "tip": [10, 20], "retroact": 10, "mainten": 10, "co": [10, 20], "life": 10, "cycl": 10, "page": [10, 16, 17], "increment": 11, "minor": [11, 20], "plan": 11, "On": 11, "hand": [11, 13], "platform": [11, 16, 20], "linux_distribut": 11, "window": 11, "hous": 11, "rpython": 11, "lot": [11, 15], "good": [11, 17, 18, 20], "gc": 11, "jython": 11, "java": 11, "stand": 11, "alon": 11, "bidirect": 11, "interact": 11, "slow": 11, "pace": 11, "ironpython": 11, "brython": 11, "web": 11, "javascript": 11, "dom": 11, "micropython": 11, "microcontrol": 11, "down": 11, "hardwar": 11, "tauthon": 11, "accompani": 11, "nor": [11, 17], "improv": [11, 17], "ideal": [11, 15, 20], "funcsig": 11, "signatur": [11, 16], "afterward": [11, 14, 15], "becom": [11, 12, 16], "later": 11, "lzma": 11, "compet": 11, "amount": [11, 12, 20], "ipaddress": 11, "drop": [11, 16], "box": [11, 13], "hexvers": [11, 20], "0x03030000": 11, "trolliu": 11, "asyncio": [11, 18, 20], "nativ": 11, "understood": 12, "potenti": [12, 16, 18], "stabl": [12, 15], "mask": [12, 15], "stabil": 12, "inconsist": [12, 20], "graph": 12, "repeatedli": 12, "ask": [12, 15], "push": 12, "forward": 12, "eventu": 12, "slowli": [12, 15], "discontinu": 12, "next": [12, 15, 18], "nears": 12, "obsolet": [12, 13], "live": 12, "team": [12, 15], "unmask": 12, "announc": 12, "date": [12, 17, 20], "thing": [12, 13, 17, 18], "progress": 12, "decid": [12, 18], "somewher": 12, "aggress": 12, "reach": [12, 15], "clear": 12, "pursu": 12, "kept": 12, "secur": 12, "workflow": 12, "clone": 12, "remot": [12, 20], "fetch": 12, "rebas": 12, "v3": 12, "cherri": 12, "pick": 12, "upload": 12, "mkdir": 12, "scp": 12, "precompil": 12, "unusu": 12, "structur": [12, 20], "ex": 12, "technic": 12, "docker": 12, "binpkg": 12, "diff": 12, "mgorni": 12, "desc": 12, "_python_all_impl": 12, "_python_verify_pattern": 12, "_python_set_impl": 12, "_python_impl_match": 12, "python_pkg_dep": 12, "gpyutil": 12, "circular": 12, "eas": [12, 15], "temporarili": [12, 13], "python3_11": 12, "20": 12, "pwd": 12, "round": 12, "signific": [12, 18], "remaind": 12, "pydant": 12, "epytest_deselect": [12, 18], "test_comparison": 12, "test_close_to_now_": 12, "lenient": 12, "deselect": [12, 18, 20], "unblock": 12, "100": 12, "40": 12, "emerg": 12, "previous": 12, "reinstal": 12, "batch": 12, "focus": 12, "reenabl": [12, 18], "face": [12, 20], "goe": [12, 20], "unbundl": 12, "tomli": 12, "obligatori": 12, "baselin": 12, "ones": 12, "chosen": 12, "fewest": 12, "Its": 12, "vendor": [12, 13], "februari": 13, "gross": 13, "serv": 13, "placehold": 13, "transit": [13, 15], "period": 13, "ban": 13, "python_multi_usedep": 13, "know": [13, 16, 20], "given": 13, "repoman": 13, "pkgcheck": 13, "tell": 13, "chose": 13, "reorder": 13, "desir": [13, 16, 20], "scan": 13, "unmatch": 13, "trial": 13, "stuff": 13, "privat": 13, "python_export": 13, "python_wrapper_setup": 13, "python_gen_usedep": 13, "mydistutilsarg": 13, "renam": [13, 16], "cleanup": 13, "python_gen": 13, "march": 13, "python_get": 13, "python_includedir": 13, "python_libpath": 13, "dpython3_include_dir": 13, "dpython3_librari": 13, "sundri": 13, "stop": [13, 16], "realli": [13, 15, 18, 20], "ugli": 13, "sole": 13, "uppercas": 13, "fourth": 13, "cruft": 13, "short": [13, 18], "made": [13, 14, 16, 19], "evalu": 13, "januari": 13, "safe": 13, "streamlin": 13, "unfortun": [13, 18, 20], "inde": 13, "foundat": 14, "fionet": 14, "psql": 14, "cach": 14, "sourceforg": [14, 19], "replic": 14, "tgz": 14, "libcangji": 14, "cangjian": 14, "i18n": 14, "eautoreconf": [14, 16], "econf_sourc": 14, "la": 14, "multibuild": 14, "unnecessari": [14, 19, 20], "implicit": [14, 20], "libtool": 14, "buggi": 14, "canva": 14, "widget": 14, "gtk": 14, "cairo": 14, "2d": 14, "draw": 14, "goocanva": 14, "subdir": 14, "am": 14, "gnome2_src_prepar": 14, "gnome2_src_configur": 14, "gnome2_src_instal": 14, "sub_instal": 14, "gi": 14, "_overridesdir": 14, "outsid": [14, 19], "routin": 14, "qemu": 14, "kernel": 14, "machin": 14, "userland": 14, "kvm": 14, "qemu_python_instal": 14, "vmxcap": 14, "qmp": 14, "ga": 14, "eol": 15, "proactiv": 15, "anticip": 15, "soon": 15, "mark": [15, 18, 20], "wide": [15, 20], "revis": 15, "newli": 15, "risk": 15, "break": [15, 16], "feasibl": 15, "manpow": 15, "member": 15, "prematur": 15, "gemato": 15, "carri": 15, "compar": 16, "think": 16, "ve": 16, "hit": 16, "me": 16, "18_p9": 16, "13_p3": 16, "10_p3": 16, "9_p2": 16, "4_p1": 16, "urllib": 16, "pars": 16, "exploit": 16, "verbatim": 16, "worm": 16, "danger": 16, "worst": [16, 20], "unpars": 16, "django": [16, 20], "pr": 16, "14349": 16, "impact": 16, "urlpars": 16, "nurl": 16, "parseresult": 16, "scheme": 16, "netloc": 16, "param": [16, 18], "fragment": 16, "badurl": 16, "what": 16, "attributeerror": 16, "492": 16, "decor": [16, 20], "async": [16, 18], "def": [16, 18, 20], "yield": 16, "await": 16, "sleep": 16, "callabl": 16, "mostli": [16, 17], "getfullargspec": 16, "p1": 16, "p2": 16, "kp3": 16, "kp4": 16, "kp5": 16, "arg": 16, "kwarg": 16, "argspec": 16, "vararg": 16, "fullargspec": 16, "varkw": 16, "kwonlyarg": 16, "kwonlydefault": 16, "annot": 16, "tupl": 16, "hold": 16, "int": 16, "str": 16, "float": 16, "k6": 16, "k7": 16, "k8": 16, "One": [16, 20], "prototyp": 16, "bar": 16, "pretti": 16, "spec": 16, "stringif": 16, "automak": 16, "16": 16, "exec_prefix": 16, "met": 16, "pkg_config_path": 16, "python_cflag": 16, "python_lib": 16, "man": 16, "exit": [16, 20], "autoreconf": 16, "throw": 16, "get_python_inc": 16, "get_path": 16, "platinclud": 16, "get_python_lib": 16, "purelib": 16, "platlib": 16, "platstdlib": 16, "todai": 16, "encodebyt": 16, "decodebyt": 16, "contrari": 16, "ought": 16, "unicod": 16, "version_info": 16, "b64_encodebyt": 16, "b64encod": 16, "b64decod": 16, "insert": 16, "newlin": 16, "length": 16, "until": 16, "suppos": 16, "emb": 16, "lpython3": 16, "7m": 16, "among": 17, "beyond": 17, "reliabl": [17, 20], "deep": 17, "beginn": 17, "peopl": 17, "suboptim": 17, "improp": 17, "fill": 17, "gap": 17, "welcom": 17, "whole": [18, 20], "parametr": 18, "epytest_ignor": 18, "test_client": 18, "test_gener": 18, "test_filenam": 18, "test_transport": 18, "test_transport_work": 18, "eventlet": 18, "py3": 18, "test_contextvar": 18, "test_leak": 18, "might": 18, "intent": 18, "Not": 18, "collid": [18, 20], "instabl": 18, "unstabl": 18, "discret": 18, "justifi": 18, "semi": 18, "random": 18, "multiprocess": 18, "finish": 18, "01": 18, "chanc": 18, "experienc": 18, "insuffici": 18, "nest": 18, "envvar": 18, "pytest_disable_plugin_autoload": 18, "pytest_plugin": 18, "comma": 18, "looponfail": 18, "pytest_fork": 18, "flaki": [18, 20], "rerunfailur": 18, "supposedli": 18, "twice": 18, "_pytest": [18, 20], "pathlib": [18, 20], "posixpath": 18, "confus": 18, "signifi": 18, "event_loop": 18, "freezer": 18, "mocker": 18, "captur": [18, 20], "summari": 18, "asgiref": 18, "sync": 18, "135": 18, "test_loc": 18, "test_sync": 18, "test_sync_contextvar": 18, "deprecationwarn": 18, "main_event_loop": 18, "get_event_loop": 18, "filterwarn": 18, "fatal": [18, 20], "_____________________": 18, "______________________": 18, "577": 18, "asgitest": 18, "testcas": 18, "583": 18, "test_wrapped_case_is_collect": 18, "interrupt": 18, "world": 18, "plot": 19, "voacap": 19, "propag": 19, "predict": 19, "qsl": 19, "hz1jw": 19, "pythonprop": 19, "basemap": 19, "gtk2": 19, "doubl": 19, "energi": 19, "yoda": 19, "hepforg": 19, "use_en": 19, "pyext": 19, "extra_opt": 19, "give": 19, "sound": 19, "signal": [19, 20], "composit": 19, "csound": 19, "fordfrog": 19, "dbuild_python_interfac": 19, "dbuild_python_opcod": 19, "superset": 19, "arab": 19, "arabey": 19, "duali": 19, "pyduali": 19, "dict2db": 19, "trans2arab": 19, "arabic2tran": 19, "domain": 20, "firstli": 20, "idea": 20, "nosetest": 20, "secondli": 20, "strict": 20, "thirdli": 20, "readabl": 20, "wholli": 20, "spew": 20, "seem": 20, "equal": 20, "ceas": 20, "downstream": 20, "convinc": 20, "preced": 20, "area": 20, "____________________": 20, "systemd": 20, "test_login": 20, "234": 20, "hint": 20, "578": 20, "_importtestmodul": 20, "mod": 20, "import_path": 20, "fspath": 20, "importmod": 20, "524": 20, "import_modul": 20, "module_nam": 20, "127": 20, "_bootstrap": 20, "_gcd_import": 20, "frozen": 20, "1014": 20, "991": 20, "_find_and_load": 20, "975": 20, "_find_and_load_unlock": 20, "671": 20, "_load_unlock": 20, "rewrit": 20, "170": 20, "exec_modul": 20, "__dict__": 20, "login": 20, "r2": 20, "discov": 20, "pyarg": 20, "guess": 20, "quick": 20, "mayb": 20, "eunittest": 20, "confirm": 20, "whom": 20, "myself": 20, "subtl": 20, "lead": 20, "But": 20, "bewar": 20, "unexpectedli": 20, "test_start_params_bug": 20, "xfail": 20, "statsmodel": 20, "tsa": 20, "test_arima": 20, "horrend": 20, "disk": 20, "space": 20, "mayhem": 20, "5a": 20, "test_null_byt": 20, "skipif": 20, "0x03000000": 20, "unconditioanlli": 20, "test_babel_with_language_": 20, "test_build_latex": 20, "test_polyglossia_with_language_": 20, "altogeth": 20, "replai": 20, "devmanu": 20, "explan": 20, "connect": 20, "pygit2": 20, "no_network": 20, "properti": 20, "test_network": 20, "allow_test": 20, "unclear": 20, "backtrac": 20, "pluggi": 20, "cachedir": 20, "pytest_cach": 20, "rootdir": 20, "var": 20, "sabyenc": 20, "configfil": 20, "item": 20, "test_decod": 20, "test_crc_pickl": 20, "54": 20, "test_empty_size_pickl": 20, "0x00007f748bc47740": 20, "testsupport": 20, "74": 20, "sabyenc3_wrapp": 20, "119": 20, "180": 20, "pytest_pyfunc_cal": 20, "caller": 20, "187": 20, "_multical": 20, "temp": 20, "2934": 20, "66": 20, "dump": 20, "vv": 20, "34": 20, "23": 20, "timeout": 20, "25": 20, "sabyenc3": 20, "596": 20, "decode_usenet_chunk": 20, "pybytearray_check": 20, "pylist_getitem": 20, "py_input_list": 20, "lp": 20, "0x00007fb5db746740": 20, "73": 20, "117": 20, "87": 20, "lambda": 20, "__main__": 20, "runpi": 20, "85": 20, "_run_cod": 20, "193": 20, "_run_module_as_main": 20, "initi": 20, "reproduc": 20, "ubuntu": 20, "dndebug": 20, "leak": 20, "o0": 20, "isort": 20, "distutils_pep517_instal": 20, "destin": 20, "cp": 20, "pushd": 20, "null": 20, "popd": 20}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"python": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19], "ani": [0, 8], "r1": [0, 2, 5, 6, 7, 8, 13, 14, 19], "build": [0, 1, 2, 5, 6, 7, 8, 12, 13, 14, 19], "time": [0, 2, 7, 8, 14, 19], "depend": [0, 1, 2, 4, 5, 8, 14, 18, 19, 20], "basic": [0, 1, 5, 19], "us": [0, 2, 3, 4, 5, 6, 7, 8, 14, 18, 19], "uncondit": [0, 19], "condit": [0, 2, 4, 5, 14, 19], "addit": [0, 5, 14], "multipl": [0, 11, 19], "set": [0, 8], "common": [1, 9], "python_compat": 1, "python_dep": 1, "python_required_us": 1, "environ": [1, 20], "packag": [1, 2, 3, 5, 6, 12, 14, 15, 16, 19, 20], "The": [1, 5], "most": 1, "type": 1, "find": 1, "list": [1, 16], "from": [1, 5, 13], "system": [1, 2, 5, 6, 7, 12], "integr": 2, "written": 2, "meson": 2, "scon": 2, "extra": [2, 20], "singl": [2, 5, 7, 13, 19], "impl": [2, 7, 14, 19], "instal": [2, 5, 6, 9, 14, 19, 20], "pure": [2, 14], "multi": [2, 7, 14], "hybrid": [2, 19], "waf": 2, "advanc": [3, 4], "concept": [3, 6], "namespac": 3, "hierarch": 3, "structur": 3, "determin": 3, "whether": 3, "ar": 3, "ad": [3, 5, 12, 15], "new": [3, 12, 15], "gentoo": [3, 10], "legaci": [3, 5, 6], "request": 4, "flag": 4, "interpret": [4, 8, 11, 12], "version": [4, 11], "cffi": 4, "greenlet": 4, "distutil": [5, 6, 7, 8, 16], "standard": 5, "pep": [5, 13], "517": [5, 13], "mode": [5, 20], "sourc": [5, 6], "archiv": 5, "variant": 5, "deprec": [5, 16], "backend": 5, "flit": 5, "buildapi": 5, "poetri": 5, "masonri": 5, "api": [5, 8], "setuptools_scm": 5, "snapshot": 5, "cython": 5, "parallel": [5, 18], "race": 5, "sub": 5, "phase": 5, "function": [5, 9], "python_prepar": 5, "python_configur": 5, "python_compil": 5, "python_test": 5, "python_instal": 5, "pass": 5, "argument": [5, 18], "setup": 5, "py": 5, "call": 5, "custom": 5, "command": 5, "prevent": 5, "test": [5, 6, 15, 18, 20], "directori": 5, "being": 5, "enabl": 5, "distutils_enable_test": 5, "more": 5, "befor": [5, 6], "run": [5, 18], "undesir": 5, "pytest": [5, 18], "virtualx": 5, "document": 5, "via": 5, "sphinx": 5, "autodoc": 5, "extens": [5, 20], "without": 5, "option": 5, "usag": [5, 8], "rust": 5, "cargo": 5, "differ": [6, 8], "variat": 6, "distutils_use_setuptool": 6, "setuptool": 6, "entri": 6, "point": 6, "other": [6, 18], "runtim": [6, 7, 19], "pyproject": 6, "toml": 6, "base": [6, 16, 18], "project": [6, 15], "In": 6, "vs": [6, 7], "out": 6, "choos": [7, 20], "between": 7, "eclass": [7, 12], "relat": 7, "A": [7, 19], "rule": 7, "thumb": 7, "util": 7, "expert": [8, 18], "partial": 8, "restrict": 8, "implement": [8, 9, 11, 12, 15], "python_setup": 8, "disjoint": 8, "regular": 8, "combin": 8, "helper": 9, "fix": 9, "shebang": 9, "script": 9, "byte": 9, "compil": 9, "modul": 9, "queri": 9, "inform": 9, "guid": [10, 13], "content": 10, "indic": 10, "tabl": 10, "altern": 11, "support": [11, 15], "backport": 11, "mainten": [12, 15], "life": 12, "cycl": 12, "note": 12, "specif": 12, "cpython": 12, "patchset": 12, "pypi": [12, 20], "profil": 12, "chang": [12, 16], "port": [12, 15, 16], "initi": 12, "bootstrap": 12, "migrat": 13, "old": 13, "python_usedep": 13, "syntax": 13, "eapi": [13, 15], "7": 13, "8": [13, 16], "manual": [14, 19], "autotool": 14, "2": 15, "which": 15, "exist": 15, "can": 15, "co": 15, "maintain": 15, "tip": 16, "retroact": 16, "bpo43882": 16, "urlsplit": 16, "now": 16, "strip": 16, "lf": 16, "cr": 16, "ht": 16, "charact": 16, "3": 16, "11": 16, "gener": 16, "coroutin": 16, "remov": 16, "asyncio": 16, "inspect": 16, "getargspec": 16, "formatargspec": 16, "10": 16, "configur": 16, "No": 16, "1": 16, "found": [16, 18], "sysconfig": 16, "9": 16, "base64": 16, "encodestr": 16, "decodestr": 16, "config": 16, "pkg": 16, "longer": 16, "librari": 16, "default": 16, "prefac": 17, "recip": 18, "skip": [18, 20], "marker": 18, "path": 18, "name": 18, "avoid": 18, "runner": [18, 20], "xdist": 18, "plugin": 18, "explicitli": 18, "disabl": 18, "automat": 18, "autoload": 18, "entir": 18, "typeerror": 18, "_make_test_flaki": 18, "got": 18, "an": 18, "unexpect": 18, "keyword": 18, "rerun": 18, "importpathmismatcherror": 18, "fixtur": 18, "warn": 18, "resolv": 20, "suit": 20, "problem": 20, "correct": 20, "miss": 20, "file": 20, "importerror": 20, "c": 20, "checklist": 20, "deal": 20, "failur": 20, "problemat": 20, "requir": 20, "internet": 20, "access": 20, "abort": 20, "due": 20, "assert": 20, "pep517": 20}, "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 diff --git a/guide/single.html b/guide/single.html index b5782a5..ab369b3 100644 --- a/guide/single.html +++ b/guide/single.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>python-single-r1 — single-impl packages — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,7 +35,7 @@ <div class="body" role="main"> <section id="python-single-r1-single-impl-packages"> -<h1>python-single-r1 — single-impl packages<a class="headerlink" href="#python-single-r1-single-impl-packages" title="Permalink to this headline">¶</a></h1> +<h1>python-single-r1 — single-impl packages<a class="headerlink" href="#python-single-r1-single-impl-packages" title="Permalink to this heading">¶</a></h1> <p>The <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> eclass is used to install single-impl packages. It is probably the easiest eclass to use, and it is recommended over <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> whenever multi-impl support would add unnecessary @@ -42,7 +43,7 @@ complexity. However, for packages using distutils or a similar Python build system, <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass should be used instead.</p> <p>Eclass reference: <a class="reference external" href="https://devmanual.gentoo.org/eclass-reference/python-single-r1.eclass/index.html">python-single-r1.eclass(5)</a></p> <section id="basic-use-for-unconditional-python"> -<h2>Basic use for unconditional Python<a class="headerlink" href="#basic-use-for-unconditional-python" title="Permalink to this headline">¶</a></h2> +<h2>Basic use for unconditional Python<a class="headerlink" href="#basic-use-for-unconditional-python" title="Permalink to this heading">¶</a></h2> <p>The defining feature of this eclass is that it defines a <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> phase. It normally calls <code class="docutils literal notranslate"><span class="pre">python_setup</span></code> function in order to determine the interpreter selected by user, and set the global @@ -80,7 +81,7 @@ the four highlighted lines are specific to Python eclasses, plus the implicitly exported <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> phase.</p> <span class="target" id="index-0"></span><span class="target" id="index-1"></span></section> <section id="dependencies"> -<span id="index-2"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this headline">¶</a></h2> +<span id="index-2"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this heading">¶</a></h2> <p>When depending on other Python packages, USE dependencies need to be declared in order to ensure that the dependencies would be built against the Python implementation used for the package. The exact dependency @@ -126,7 +127,7 @@ inside and outside <code class="docutils literal notranslate"><span class="pre"> inside it.</p> </section> <section id="conditional-python-use"> -<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Permalink to this headline">¶</a></h2> +<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Permalink to this heading">¶</a></h2> <p>The examples so far assumed that Python is used unconditionally. If Python support is conditional to a USE flag, appropriate USE conditionals need to be used in metadata variables, and <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> @@ -172,7 +173,7 @@ needs to be rewritten to call the default implementation conditionally:</p> </div> </section> <section id="a-hybrid-build-time-conditional-runtime"> -<h2>A hybrid: build-time + conditional runtime<a class="headerlink" href="#a-hybrid-build-time-conditional-runtime" title="Permalink to this headline">¶</a></h2> +<h2>A hybrid: build-time + conditional runtime<a class="headerlink" href="#a-hybrid-build-time-conditional-runtime" title="Permalink to this heading">¶</a></h2> <p>A fairly common pattern is for Python to be required unconditionally at build time but only conditionally at runtime. This happens e.g. when the package is calling some helper scripts at build time, and optionally @@ -219,7 +220,7 @@ USE-conditional:</p> <p>Note that eclass-exported <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> is used unconditionally here.</p> </section> <section id="multiple-use-conditions"> -<h2>Multiple USE conditions<a class="headerlink" href="#multiple-use-conditions" title="Permalink to this headline">¶</a></h2> +<h2>Multiple USE conditions<a class="headerlink" href="#multiple-use-conditions" title="Permalink to this heading">¶</a></h2> <p>Finally, let’s give an example of a package where Python is needed for two independent conditions. To make it more complex, one of them applies to build time (tests) while the other to runtime (bindings).</p> @@ -273,7 +274,7 @@ the one in <code class="docutils literal notranslate"><span class="pre">REQUIRED used in dependencies.</p> </section> <section id="manual-install"> -<h2>Manual install<a class="headerlink" href="#manual-install" title="Permalink to this headline">¶</a></h2> +<h2>Manual install<a class="headerlink" href="#manual-install" title="Permalink to this heading">¶</a></h2> <p>Some packages do not include Python files in their build systems, or do not install all of them. In this case, the necessary files can be installed via one of the installation helpers.</p> @@ -374,7 +375,7 @@ can be installed via one of the installation helpers.</p> </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -391,7 +392,7 @@ can be installed via one of the installation helpers.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | diff --git a/guide/test.html b/guide/test.html index 6b443e6..47995a1 100644 --- a/guide/test.html +++ b/guide/test.html @@ -1,10 +1,10 @@ <!DOCTYPE html> -<html> +<html lang="en"> <head> <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" /> <title>Resolving test suite problems — Gentoo Python Guide documentation</title> <link rel="stylesheet" type="text/css" href="_static/pygments.css" /> @@ -12,6 +12,7 @@ <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 src="_static/doctools.js"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> @@ -34,9 +35,9 @@ <div class="body" role="main"> <section id="resolving-test-suite-problems"> -<h1>Resolving test suite problems<a class="headerlink" href="#resolving-test-suite-problems" title="Permalink to this headline">¶</a></h1> +<h1>Resolving test suite problems<a class="headerlink" href="#resolving-test-suite-problems" title="Permalink to this heading">¶</a></h1> <section id="choosing-the-correct-test-runner"> -<h2>Choosing the correct test runner<a class="headerlink" href="#choosing-the-correct-test-runner" title="Permalink to this headline">¶</a></h2> +<h2>Choosing the correct test runner<a class="headerlink" href="#choosing-the-correct-test-runner" title="Permalink to this heading">¶</a></h2> <p>There are a few modules used to run tests in Python packages. The most common include the built-in <a class="reference external" href="https://docs.python.org/3/library/unittest.html">unittest</a> module, <a class="reference external" href="https://docs.pytest.org/en/latest/">pytest</a> and <a class="reference external" href="https://github.com/nose-devs/nose">nose</a>. There are also some rarely used test tools and domain-specific solutions, @@ -73,7 +74,7 @@ If you have some free time, convincing upstream to switch from nose to pytest is a worthwhile goal.</p> </section> <section id="missing-test-files-in-pypi-packages"> -<h2>Missing test files in PyPI packages<a class="headerlink" href="#missing-test-files-in-pypi-packages" title="Permalink to this headline">¶</a></h2> +<h2>Missing test files in PyPI packages<a class="headerlink" href="#missing-test-files-in-pypi-packages" title="Permalink to this heading">¶</a></h2> <p>One of the more common test-related problems is that PyPI packages (generated via <code class="docutils literal notranslate"><span class="pre">setup.py</span> <span class="pre">sdist</span></code>) often miss some or all test files. The latter results in no tests being run, the former in test failures @@ -87,7 +88,7 @@ tarball:</p> </div> </section> <section id="importerrors-for-c-extensions"> -<h2>ImportErrors for C extensions<a class="headerlink" href="#importerrors-for-c-extensions" title="Permalink to this headline">¶</a></h2> +<h2>ImportErrors for C extensions<a class="headerlink" href="#importerrors-for-c-extensions" title="Permalink to this heading">¶</a></h2> <p>Tests are often invoked in such a way that the Python packages and modules from the current directory take precedence over these found in the staging area or build directory. In fact, this is often @@ -142,7 +143,7 @@ instead:</p> </div> </section> <section id="checklist-for-dealing-with-test-failures"> -<h2>Checklist for dealing with test failures<a class="headerlink" href="#checklist-for-dealing-with-test-failures" title="Permalink to this headline">¶</a></h2> +<h2>Checklist for dealing with test failures<a class="headerlink" href="#checklist-for-dealing-with-test-failures" title="Permalink to this heading">¶</a></h2> <p>If you see some test failures but do not have a guess as to why they would be happening, try the following for a start:</p> <ol class="arabic simple"> @@ -194,7 +195,7 @@ be skipped.</p></li> </ol> </section> <section id="skipping-problematic-tests"> -<h2>Skipping problematic tests<a class="headerlink" href="#skipping-problematic-tests" title="Permalink to this headline">¶</a></h2> +<h2>Skipping problematic tests<a class="headerlink" href="#skipping-problematic-tests" title="Permalink to this heading">¶</a></h2> <p>While generally it is preferable to fix tests, sometimes you will face failures that cannot be easily resolved. This especially applies to tests that are broken themselves rather than indicating real problems @@ -245,7 +246,7 @@ simply remove that file. If all tests belonging to the package are broken, you can use <code class="docutils literal notranslate"><span class="pre">RESTRICT=test</span></code> to disable testing altogether.</p> </section> <section id="tests-requiring-internet-access"> -<h2>Tests requiring Internet access<a class="headerlink" href="#tests-requiring-internet-access" title="Permalink to this headline">¶</a></h2> +<h2>Tests requiring Internet access<a class="headerlink" href="#tests-requiring-internet-access" title="Permalink to this heading">¶</a></h2> <p>One of more common causes of test failures are attempts to use Internet. With Portage blocking network access by default, packages performing tests against remote servers often fail.</p> @@ -285,7 +286,7 @@ distutils_enable_tests pytest </div> </section> <section id="tests-aborting-due-to-assertions"> -<h2>Tests aborting (due to assertions)<a class="headerlink" href="#tests-aborting-due-to-assertions" title="Permalink to this headline">¶</a></h2> +<h2>Tests aborting (due to assertions)<a class="headerlink" href="#tests-aborting-due-to-assertions" title="Permalink to this heading">¶</a></h2> <p>There are cases of package’s tests terminating with an unclear error message and backtrace similar to the following:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="o">=============================</span> <span class="nb">test</span> session <span class="nv">starts</span> <span class="o">==============================</span> @@ -348,7 +349,7 @@ $ pytest -s </div> </section> <section id="installing-extra-dependencies-in-test-environment-pep517-mode"> -<h2>Installing extra dependencies in test environment (PEP517 mode)<a class="headerlink" href="#installing-extra-dependencies-in-test-environment-pep517-mode" title="Permalink to this headline">¶</a></h2> +<h2>Installing extra dependencies in test environment (PEP517 mode)<a class="headerlink" href="#installing-extra-dependencies-in-test-environment-pep517-mode" title="Permalink to this heading">¶</a></h2> <p>Rarely, the test suite expects some package being installed that does not fit being packaged and installed system-wide. For example, isort’s tests use a few example plugins that are not useful to end @@ -453,7 +454,7 @@ into it for the purpose of testing. Note that <code class="docutils literal not </form> </div> </div> -<script>$('#searchbox').show(0);</script> +<script>document.getElementById('searchbox').style.display = "block"</script> @@ -470,7 +471,7 @@ into it for the purpose of testing. Note that <code class="docutils literal not ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 4.5.0</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 5.0.1</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a> | |