+
+ Read the Docs
+ v: ${config.versions.current.slug}
+
+
+
+
+ ${renderLanguages(config)}
+ ${renderVersions(config)}
+ ${renderDownloads(config)}
+
+ On Read the Docs
+
+ Project Home
+
+
+ Builds
+
+
+ Downloads
+
+
+
+ Search
+
+
+
+
+
+
+ Hosted by Read the Docs
+
+
+
+ `;
+
+ // Inject the generated flyout into the body HTML element.
+ document.body.insertAdjacentHTML("beforeend", flyout);
+
+ // Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout.
+ document
+ .querySelector("#flyout-search-form")
+ .addEventListener("focusin", () => {
+ const event = new CustomEvent("readthedocs-search-show");
+ document.dispatchEvent(event);
+ });
+ })
+}
+
+if (themeLanguageSelector || themeVersionSelector) {
+ function onSelectorSwitch(event) {
+ const option = event.target.selectedIndex;
+ const item = event.target.options[option];
+ window.location.href = item.dataset.url;
+ }
+
+ document.addEventListener("readthedocs-addons-data-ready", function (event) {
+ const config = event.detail.data();
+
+ const versionSwitch = document.querySelector(
+ "div.switch-menus > div.version-switch",
+ );
+ if (themeVersionSelector) {
+ let versions = config.versions.active;
+ if (config.versions.current.hidden || config.versions.current.type === "external") {
+ versions.unshift(config.versions.current);
+ }
+ const versionSelect = `
+
+ ${versions
+ .map(
+ (version) => `
+
+ ${version.slug}
+ `,
+ )
+ .join("\n")}
+
+ `;
+
+ versionSwitch.innerHTML = versionSelect;
+ versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
+ }
+
+ const languageSwitch = document.querySelector(
+ "div.switch-menus > div.language-switch",
+ );
+
+ if (themeLanguageSelector) {
+ if (config.projects.translations.length) {
+ // Add the current language to the options on the selector
+ let languages = config.projects.translations.concat(
+ config.projects.current,
+ );
+ languages = languages.sort((a, b) =>
+ a.language.name.localeCompare(b.language.name),
+ );
+
+ const languageSelect = `
+
+ ${languages
+ .map(
+ (language) => `
+
+ ${language.language.name}
+ `,
+ )
+ .join("\n")}
+
+ `;
+
+ languageSwitch.innerHTML = languageSelect;
+ languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
+ }
+ else {
+ languageSwitch.remove();
+ }
+ }
+ });
+}
+
+document.addEventListener("readthedocs-addons-data-ready", function (event) {
+ // Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav.
+ document
+ .querySelector("[role='search'] input")
+ .addEventListener("focusin", () => {
+ const event = new CustomEvent("readthedocs-search-show");
+ document.dispatchEvent(event);
+ });
+});
\ No newline at end of file
diff --git a/_static/language_data.js b/_static/language_data.js
new file mode 100644
index 0000000..c7fe6c6
--- /dev/null
+++ b/_static/language_data.js
@@ -0,0 +1,192 @@
+/*
+ * This script contains the language-specific data used by searchtools.js,
+ * namely the list of stopwords, stemmer, scorer and splitter.
+ */
+
+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, if available */
+
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+ var step2list = {
+ ational: 'ate',
+ tional: 'tion',
+ enci: 'ence',
+ anci: 'ance',
+ izer: 'ize',
+ bli: 'ble',
+ alli: 'al',
+ entli: 'ent',
+ eli: 'e',
+ ousli: 'ous',
+ ization: 'ize',
+ ation: 'ate',
+ ator: 'ate',
+ alism: 'al',
+ iveness: 'ive',
+ fulness: 'ful',
+ ousness: 'ous',
+ aliti: 'al',
+ iviti: 'ive',
+ biliti: 'ble',
+ logi: 'log'
+ };
+
+ var step3list = {
+ icate: 'ic',
+ ative: '',
+ alize: 'al',
+ iciti: 'ic',
+ ical: 'ic',
+ ful: '',
+ ness: ''
+ };
+
+ var c = "[^aeiou]"; // consonant
+ var v = "[aeiouy]"; // vowel
+ var C = c + "[^aeiouy]*"; // consonant sequence
+ var V = v + "[aeiou]*"; // vowel sequence
+
+ var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
+ var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
+ var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
+ var s_v = "^(" + C + ")?" + v; // vowel in stem
+
+ this.stemWord = function (w) {
+ var stem;
+ var suffix;
+ var firstch;
+ var origword = w;
+
+ if (w.length < 3)
+ return w;
+
+ var re;
+ var re2;
+ var re3;
+ var re4;
+
+ firstch = w.substr(0,1);
+ if (firstch == "y")
+ w = firstch.toUpperCase() + w.substr(1);
+
+ // Step 1a
+ re = /^(.+?)(ss|i)es$/;
+ re2 = /^(.+?)([^s])s$/;
+
+ if (re.test(w))
+ w = w.replace(re,"$1$2");
+ else if (re2.test(w))
+ w = w.replace(re2,"$1$2");
+
+ // Step 1b
+ re = /^(.+?)eed$/;
+ re2 = /^(.+?)(ed|ing)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ re = new RegExp(mgr0);
+ if (re.test(fp[1])) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+ }
+ else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1];
+ re2 = new RegExp(s_v);
+ if (re2.test(stem)) {
+ w = stem;
+ re2 = /(at|bl|iz)$/;
+ re3 = new RegExp("([^aeiouylsz])\\1$");
+ re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+ if (re2.test(w))
+ w = w + "e";
+ else if (re3.test(w)) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+ else if (re4.test(w))
+ w = w + "e";
+ }
+ }
+
+ // Step 1c
+ re = /^(.+?)y$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(s_v);
+ if (re.test(stem))
+ w = stem + "i";
+ }
+
+ // Step 2
+ re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = new RegExp(mgr0);
+ if (re.test(stem))
+ w = stem + step2list[suffix];
+ }
+
+ // Step 3
+ re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = new RegExp(mgr0);
+ if (re.test(stem))
+ w = stem + step3list[suffix];
+ }
+
+ // Step 4
+ re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+ re2 = /^(.+?)(s|t)(ion)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(mgr1);
+ if (re.test(stem))
+ w = stem;
+ }
+ else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1] + fp[2];
+ re2 = new RegExp(mgr1);
+ if (re2.test(stem))
+ w = stem;
+ }
+
+ // Step 5
+ re = /^(.+?)e$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(mgr1);
+ re2 = new RegExp(meq1);
+ re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+ if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+ w = stem;
+ }
+ re = /ll$/;
+ re2 = new RegExp(mgr1);
+ if (re.test(w) && re2.test(w)) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+
+ // and turn initial Y back to y
+ if (firstch == "y")
+ w = firstch.toLowerCase() + w.substr(1);
+ return w;
+ }
+}
+
diff --git a/_static/minus.png b/_static/minus.png
new file mode 100644
index 0000000..d96755f
Binary files /dev/null and b/_static/minus.png differ
diff --git a/_static/plus.png b/_static/plus.png
new file mode 100644
index 0000000..7107cec
Binary files /dev/null and b/_static/plus.png differ
diff --git a/_static/pygments.css b/_static/pygments.css
new file mode 100644
index 0000000..5f2b0a2
--- /dev/null
+++ b/_static/pygments.css
@@ -0,0 +1,75 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #ffffcc }
+.highlight { background: #eeffcc; }
+.highlight .c { color: #408090; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #F00 } /* Error */
+.highlight .k { color: #007020; font-weight: bold } /* Keyword */
+.highlight .o { color: #666 } /* Operator */
+.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #007020 } /* Comment.Preproc */
+.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #408090; background-color: #FFF0F0 } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
+.highlight .gr { color: #F00 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #333 } /* Generic.Output */
+.highlight .gp { color: #C65D09; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #04D } /* Generic.Traceback */
+.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #007020 } /* Keyword.Pseudo */
+.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #902000 } /* Keyword.Type */
+.highlight .m { color: #208050 } /* Literal.Number */
+.highlight .s { color: #4070A0 } /* Literal.String */
+.highlight .na { color: #4070A0 } /* Name.Attribute */
+.highlight .nb { color: #007020 } /* Name.Builtin */
+.highlight .nc { color: #0E84B5; font-weight: bold } /* Name.Class */
+.highlight .no { color: #60ADD5 } /* Name.Constant */
+.highlight .nd { color: #555; font-weight: bold } /* Name.Decorator */
+.highlight .ni { color: #D55537; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #007020 } /* Name.Exception */
+.highlight .nf { color: #06287E } /* Name.Function */
+.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
+.highlight .nn { color: #0E84B5; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #BB60D5 } /* Name.Variable */
+.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #BBB } /* Text.Whitespace */
+.highlight .mb { color: #208050 } /* Literal.Number.Bin */
+.highlight .mf { color: #208050 } /* Literal.Number.Float */
+.highlight .mh { color: #208050 } /* Literal.Number.Hex */
+.highlight .mi { color: #208050 } /* Literal.Number.Integer */
+.highlight .mo { color: #208050 } /* Literal.Number.Oct */
+.highlight .sa { color: #4070A0 } /* Literal.String.Affix */
+.highlight .sb { color: #4070A0 } /* Literal.String.Backtick */
+.highlight .sc { color: #4070A0 } /* Literal.String.Char */
+.highlight .dl { color: #4070A0 } /* Literal.String.Delimiter */
+.highlight .sd { color: #4070A0; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #4070A0 } /* Literal.String.Double */
+.highlight .se { color: #4070A0; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #4070A0 } /* Literal.String.Heredoc */
+.highlight .si { color: #70A0D0; font-style: italic } /* Literal.String.Interpol */
+.highlight .sx { color: #C65D09 } /* Literal.String.Other */
+.highlight .sr { color: #235388 } /* Literal.String.Regex */
+.highlight .s1 { color: #4070A0 } /* Literal.String.Single */
+.highlight .ss { color: #517918 } /* Literal.String.Symbol */
+.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #06287E } /* Name.Function.Magic */
+.highlight .vc { color: #BB60D5 } /* Name.Variable.Class */
+.highlight .vg { color: #BB60D5 } /* Name.Variable.Global */
+.highlight .vi { color: #BB60D5 } /* Name.Variable.Instance */
+.highlight .vm { color: #BB60D5 } /* Name.Variable.Magic */
+.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/_static/searchtools.js b/_static/searchtools.js
new file mode 100644
index 0000000..2c774d1
--- /dev/null
+++ b/_static/searchtools.js
@@ -0,0 +1,632 @@
+/*
+ * Sphinx JavaScript utilities for the full-text search.
+ */
+"use strict";
+
+/**
+ * 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 [docname, title, anchor, descr, score, filename]
+ // and returns the new score.
+ /*
+ score: result => {
+ const [docname, title, anchor, descr, score, filename, kind] = result
+ return score
+ },
+ */
+
+ // query matches the full name of an object
+ objNameMatch: 11,
+ // 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
+ },
+ // Used when the priority is not in the mapping.
+ objPrioDefault: 0,
+
+ // query found in title
+ title: 15,
+ partialTitle: 7,
+ // query found in terms
+ term: 5,
+ partialTerm: 2,
+ };
+}
+
+// Global search result kind enum, used by themes to style search results.
+class SearchResultKind {
+ static get index() { return "index"; }
+ static get object() { return "object"; }
+ static get text() { return "text"; }
+ static get title() { return "title"; }
+}
+
+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, searchTerms, highlightTerms) => {
+ const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
+ const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
+ const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
+ const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
+ const contentRoot = document.documentElement.dataset.content_root;
+
+ const [docName, title, anchor, descr, score, _filename, kind] = item;
+
+ let listItem = document.createElement("li");
+ // Add a class representing the item's type:
+ // can be used by a theme's CSS selector for styling
+ // See SearchResultKind for the class names.
+ listItem.classList.add(`kind-${kind}`);
+ 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 = contentRoot + dirname;
+ linkUrl = requestUrl;
+ } else {
+ // normal html builders
+ requestUrl = contentRoot + docName + docFileSuffix;
+ linkUrl = docName + docLinkSuffix;
+ }
+ let linkEl = listItem.appendChild(document.createElement("a"));
+ linkEl.href = linkUrl + anchor;
+ linkEl.dataset.score = score;
+ linkEl.innerHTML = title;
+ if (descr) {
+ listItem.appendChild(document.createElement("span")).innerHTML =
+ " (" + descr + ")";
+ // highlight search terms in the description
+ if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
+ highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
+ }
+ else if (showSearchSummary)
+ fetch(requestUrl)
+ .then((responseData) => responseData.text())
+ .then((data) => {
+ if (data)
+ listItem.appendChild(
+ Search.makeSearchSummary(data, searchTerms, anchor)
+ );
+ // highlight search terms in the summary
+ if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
+ highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
+ });
+ 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 = Documentation.ngettext(
+ "Search finished, found one page matching the search query.",
+ "Search finished, found ${resultCount} pages matching the search query.",
+ resultCount,
+ ).replace('${resultCount}', resultCount);
+};
+const _displayNextItem = (
+ results,
+ resultCount,
+ searchTerms,
+ highlightTerms,
+) => {
+ // results left, load the summary and display it
+ // this is intended to be dynamic (don't sub resultsCount)
+ if (results.length) {
+ _displayItem(results.pop(), searchTerms, highlightTerms);
+ setTimeout(
+ () => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
+ 5
+ );
+ }
+ // search finished, update title and status message
+ else _finishSearch(resultCount);
+};
+// Helper function used by query() to order search results.
+// Each input is an array of [docname, title, anchor, descr, score, filename, kind].
+// Order the results by score (in opposite order of appearance, since the
+// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
+const _orderResultsByScoreThenName = (a, b) => {
+ const leftScore = a[4];
+ const rightScore = b[4];
+ if (leftScore === rightScore) {
+ // same score: sort alphabetically
+ 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;
+};
+
+/**
+ * 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
+ */
+const Search = {
+ _index: null,
+ _queued_query: null,
+ _pulse_status: -1,
+
+ htmlToText: (htmlString, anchor) => {
+ const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
+ for (const removalQuery of [".headerlink", "script", "style"]) {
+ htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
+ }
+ if (anchor) {
+ const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
+ if (anchorContent) return anchorContent.textContent;
+
+ console.warn(
+ `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`
+ );
+ }
+
+ // if anchor not specified or not found, fall back to main content
+ const docContent = htmlElement.querySelector('[role="main"]');
+ if (docContent) return docContent.textContent;
+
+ console.warn(
+ "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template."
+ );
+ return "";
+ },
+
+ 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: (url) =>
+ (document.body.appendChild(document.createElement("script")).src = url),
+
+ setIndex: (index) => {
+ Search._index = index;
+ if (Search._queued_query !== null) {
+ const query = Search._queued_query;
+ Search._queued_query = null;
+ Search.query(query);
+ }
+ },
+
+ hasIndex: () => Search._index !== null,
+
+ deferQuery: (query) => (Search._queued_query = query),
+
+ stopPulse: () => (Search._pulse_status = -1),
+
+ startPulse: () => {
+ if (Search._pulse_status >= 0) return;
+
+ const pulse = () => {
+ Search._pulse_status = (Search._pulse_status + 1) % 4;
+ 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: (query) => {
+ // create the required interface elements
+ 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.setAttribute("role", "list");
+ 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 (Search.hasIndex()) Search.query(query);
+ else Search.deferQuery(query);
+ },
+
+ _parseQuery: (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;
+
+ // stem the word
+ let word = stemmer.stemWord(queryTermLower);
+ // select the correct list
+ if (word[0] === "-") excludedTerms.add(word.substr(1));
+ else {
+ searchTerms.add(word);
+ highlightTerms.add(queryTermLower);
+ }
+ });
+
+ if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
+ localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
+ }
+
+ // console.debug("SEARCH: searching for:");
+ // console.info("required: ", [...searchTerms]);
+ // console.info("excluded: ", [...excludedTerms]);
+
+ return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
+ },
+
+ /**
+ * execute search (requires search index to be loaded)
+ */
+ _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {
+ const filenames = Search._index.filenames;
+ const docNames = Search._index.docnames;
+ const titles = Search._index.titles;
+ const allTitles = Search._index.alltitles;
+ const indexEntries = Search._index.indexentries;
+
+ // Collect multiple result groups to be sorted separately and then ordered.
+ // Each is an array of [docname, title, anchor, descr, score, filename, kind].
+ const normalResults = [];
+ const nonMainIndexResults = [];
+
+ _removeChildren(document.getElementById("search-progress"));
+
+ const queryLower = query.toLowerCase().trim();
+ for (const [title, foundTitles] of Object.entries(allTitles)) {
+ if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
+ for (const [file, id] of foundTitles) {
+ const score = Math.round(Scorer.title * queryLower.length / title.length);
+ const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
+ normalResults.push([
+ docNames[file],
+ titles[file] !== title ? `${titles[file]} > ${title}` : title,
+ id !== null ? "#" + id : "",
+ null,
+ score + boost,
+ filenames[file],
+ SearchResultKind.title,
+ ]);
+ }
+ }
+ }
+
+ // search for explicit entries in index directives
+ for (const [entry, foundEntries] of Object.entries(indexEntries)) {
+ if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
+ for (const [file, id, isMain] of foundEntries) {
+ const score = Math.round(100 * queryLower.length / entry.length);
+ const result = [
+ docNames[file],
+ titles[file],
+ id ? "#" + id : "",
+ null,
+ score,
+ filenames[file],
+ SearchResultKind.index,
+ ];
+ if (isMain) {
+ normalResults.push(result);
+ } else {
+ nonMainIndexResults.push(result);
+ }
+ }
+ }
+ }
+
+ // lookup as object
+ objectTerms.forEach((term) =>
+ normalResults.push(...Search.performObjectSearch(term, objectTerms))
+ );
+
+ // lookup as search terms in fulltext
+ normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));
+
+ // let the scorer override scores with a custom scoring function
+ if (Scorer.score) {
+ normalResults.forEach((item) => (item[4] = Scorer.score(item)));
+ nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
+ }
+
+ // Sort each group of results by score and then alphabetically by name.
+ normalResults.sort(_orderResultsByScoreThenName);
+ nonMainIndexResults.sort(_orderResultsByScoreThenName);
+
+ // Combine the result groups in (reverse) order.
+ // Non-main index entries are typically arbitrary cross-references,
+ // so display them after other results.
+ let results = [...nonMainIndexResults, ...normalResults];
+
+ // 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;
+ }, []);
+
+ return results.reverse();
+ },
+
+ query: (query) => {
+ const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);
+ const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);
+
+ // for debugging
+ //Search.lastresults = results.slice(); // a copy
+ // console.info("search results:", Search.lastresults);
+
+ // print the results
+ _displayNextItem(results, results.length, searchTerms, highlightTerms);
+ },
+
+ /**
+ * search for object names
+ */
+ 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]],
+ SearchResultKind.object,
+ ]);
+ };
+ Object.keys(objects).forEach((prefix) =>
+ objects[prefix].forEach((array) =>
+ objectSearchCallback(prefix, array)
+ )
+ );
+ return results;
+ },
+
+ /**
+ * search for full-text terms in the index
+ */
+ performTermsSearch: (searchTerms, excludedTerms) => {
+ // prepare search
+ const terms = Search._index.terms;
+ const titleTerms = Search._index.titleterms;
+ const filenames = Search._index.filenames;
+ const docNames = Search._index.docnames;
+ const titles = Search._index.titles;
+
+ const scoreMap = new Map();
+ const fileMap = new Map();
+
+ // perform the search on the required terms
+ 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) {
+ const escapedWord = _escapeRegExp(word);
+ if (!terms.hasOwnProperty(word)) {
+ Object.keys(terms).forEach((term) => {
+ if (term.match(escapedWord))
+ arr.push({ files: terms[term], score: Scorer.partialTerm });
+ });
+ }
+ if (!titleTerms.hasOwnProperty(word)) {
+ Object.keys(titleTerms).forEach((term) => {
+ if (term.match(escapedWord))
+ arr.push({ files: titleTerms[term], score: Scorer.partialTitle });
+ });
+ }
+ }
+
+ // no match but word was a required one
+ if (arr.every((record) => record.files === undefined)) return;
+
+ // found search word in contents
+ 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
+ files.forEach((file) => {
+ if (!fileMap.has(file)) fileMap.set(file, [word]);
+ else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);
+ });
+ });
+
+ // now check if the files don't contain excluded terms
+ const results = [];
+ for (const [file, wordList] of fileMap) {
+ // check if all requirements are matched
+
+ // as search terms with length < 3 are discarded
+ const filteredTermCount = [...searchTerms].filter(
+ (term) => term.length > 2
+ ).length;
+ if (
+ wordList.length !== searchTerms.size &&
+ wordList.length !== filteredTermCount
+ )
+ continue;
+
+ // ensure that none of the excluded terms is in the search result
+ if (
+ [...excludedTerms].some(
+ (term) =>
+ terms[term] === file ||
+ titleTerms[term] === file ||
+ (terms[term] || []).includes(file) ||
+ (titleTerms[term] || []).includes(file)
+ )
+ )
+ break;
+
+ // 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],
+ SearchResultKind.text,
+ ]);
+ }
+ return results;
+ },
+
+ /**
+ * helper function to return a node containing the
+ * search summary for a given text. keywords is a list
+ * of stemmed words.
+ */
+ makeSearchSummary: (htmlText, keywords, anchor) => {
+ const text = Search.htmlToText(htmlText, anchor);
+ if (text === "") return null;
+
+ const textLower = text.toLowerCase();
+ const actualStartPosition = [...keywords]
+ .map((k) => textLower.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("p");
+ summary.classList.add("context");
+ summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
+
+ return summary;
+ },
+};
+
+_ready(Search.init);
diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js
new file mode 100644
index 0000000..8a96c69
--- /dev/null
+++ b/_static/sphinx_highlight.js
@@ -0,0 +1,154 @@
+/* Highlighting utilities for Sphinx HTML documentation. */
+"use strict";
+
+const SPHINX_HIGHLIGHT_ENABLED = true
+
+/**
+ * highlight a given string on a node by wrapping it in
+ * span elements with the given class name.
+ */
+const _highlight = (node, addItems, text, className) => {
+ if (node.nodeType === Node.TEXT_NODE) {
+ const val = node.nodeValue;
+ const parent = node.parentNode;
+ const pos = val.toLowerCase().indexOf(text);
+ if (
+ pos >= 0 &&
+ !parent.classList.contains(className) &&
+ !parent.classList.contains("nohighlight")
+ ) {
+ let span;
+
+ const closestNode = parent.closest("body, svg, foreignObject");
+ const isInSVG = closestNode && closestNode.matches("svg");
+ if (isInSVG) {
+ span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
+ } else {
+ span = document.createElement("span");
+ span.classList.add(className);
+ }
+
+ span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+ const rest = document.createTextNode(val.substr(pos + text.length));
+ parent.insertBefore(
+ span,
+ parent.insertBefore(
+ rest,
+ node.nextSibling
+ )
+ );
+ node.nodeValue = val.substr(0, pos);
+ /* There may be more occurrences of search term in this node. So call this
+ * function recursively on the remaining fragment.
+ */
+ _highlight(rest, addItems, text, className);
+
+ if (isInSVG) {
+ const rect = document.createElementNS(
+ "http://www.w3.org/2000/svg",
+ "rect"
+ );
+ const bbox = parent.getBBox();
+ rect.x.baseVal.value = bbox.x;
+ rect.y.baseVal.value = bbox.y;
+ rect.width.baseVal.value = bbox.width;
+ rect.height.baseVal.value = bbox.height;
+ rect.setAttribute("class", className);
+ addItems.push({ parent: parent, target: rect });
+ }
+ }
+ } else if (node.matches && !node.matches("button, select, textarea")) {
+ node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
+ }
+};
+const _highlightText = (thisNode, text, className) => {
+ let addItems = [];
+ _highlight(thisNode, addItems, text, className);
+ addItems.forEach((obj) =>
+ obj.parent.insertAdjacentElement("beforebegin", obj.target)
+ );
+};
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+const SphinxHighlight = {
+
+ /**
+ * highlight the search words provided in localstorage in the text
+ */
+ highlightSearchWords: () => {
+ if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
+
+ // get and clear terms from localstorage
+ const url = new URL(window.location);
+ const highlight =
+ localStorage.getItem("sphinx_highlight_terms")
+ || url.searchParams.get("highlight")
+ || "";
+ localStorage.removeItem("sphinx_highlight_terms")
+ url.searchParams.delete("highlight");
+ window.history.replaceState({}, "", url);
+
+ // get individual terms from highlight string
+ const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
+ if (terms.length === 0) return; // nothing to do
+
+ // There should never be more than one element matching "div.body"
+ const divBody = document.querySelectorAll("div.body");
+ const body = divBody.length ? divBody[0] : document.querySelector("body");
+ window.setTimeout(() => {
+ terms.forEach((term) => _highlightText(body, term, "highlighted"));
+ }, 10);
+
+ const searchBox = document.getElementById("searchbox");
+ if (searchBox === null) return;
+ searchBox.appendChild(
+ document
+ .createRange()
+ .createContextualFragment(
+ '
' +
+ '' +
+ _("Hide Search Matches") +
+ "
"
+ )
+ );
+ },
+
+ /**
+ * helper function to hide the search marks again
+ */
+ hideSearchWords: () => {
+ document
+ .querySelectorAll("#searchbox .highlight-link")
+ .forEach((el) => el.remove());
+ document
+ .querySelectorAll("span.highlighted")
+ .forEach((el) => el.classList.remove("highlighted"));
+ localStorage.removeItem("sphinx_highlight_terms")
+ },
+
+ initEscapeListener: () => {
+ // only install a listener if it is really needed
+ if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
+
+ document.addEventListener("keydown", (event) => {
+ // bail for input elements
+ if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
+ // bail with special keys
+ if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
+ if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
+ SphinxHighlight.hideSearchWords();
+ event.preventDefault();
+ }
+ });
+ },
+};
+
+_ready(() => {
+ /* Do not call highlightSearchWords() when we are on the search page.
+ * It will highlight words from the *previous* search query.
+ */
+ if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
+ SphinxHighlight.initEscapeListener();
+});
diff --git a/_static/uqbar.css b/_static/uqbar.css
new file mode 100644
index 0000000..789fa39
--- /dev/null
+++ b/_static/uqbar.css
@@ -0,0 +1,73 @@
+p.rubric.section-header {
+ font-family: "Roboto Slab", "ff-tisa-web-pro", "Georgia", Arial, sans-serif;
+ font-size: 125%;
+ font-weight: 700;
+ margin-bottom: 24px;
+}
+
+p.rubric.class-header {
+ font-family: "Roboto Slab", "ff-tisa-web-pro", "Georgia", Arial, sans-serif;
+ font-size: 100%;
+ font-weight: 700;
+ margin-bottom: 24px !important;
+}
+
+.rst-content table.field-list td.field-body > a {
+ line-height: 24px;
+}
+
+.rst-content table.field-list td.field-body > p {
+ line-height: 24px;
+}
+
+.rst-content table.field-list td.field-body > p > a {
+ font-size: 90%;
+}
+
+.uqbar-book {
+ margin-bottom: 24px;
+}
+
+.uqbar-book > object, .uqbar-book > img {
+ max-width: 100%;
+ height: auto;
+}
+
+div.example {
+ -moz-border-radius: 2px;
+ -moz-box-shadow: 0px 0px 10px #eee;
+ -webkit-border-radius: 2px;
+ -webkit-box-shadow: 0px 0px 10px #eee;
+ border-radius: 2px;
+ border: 1px solid #ddd;
+ box-shadow: 0px 0px 10px #eee;
+ margin-bottom: 24px;
+ padding: 24px;
+ }
+
+div.example :last-child {
+ margin-bottom: 0;
+ }
+
+tt.attribute {
+ color: #fff;
+ font-size: 0.75em;
+ margin: 0 1em 0 0;
+ padding: 0.5em;
+ }
+
+tt.abstract {
+ background-color: #666;
+ }
+
+tt.classmethod {
+ background-color: #c96;
+ }
+
+tt.inherited {
+ background-color: #6cc;
+ }
+
+tt.staticmethod {
+ background-color: #69c;
+ }
diff --git a/api/index.html b/api/index.html
new file mode 100644
index 0000000..a477c93
--- /dev/null
+++ b/api/index.html
@@ -0,0 +1,378 @@
+
+
+
+
+
+
+
+
+
Nauert API — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+Nauert API
+
+
+
+Extension for quantizing rhythm, based on Paul Nauert’s Q-Grid technique.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+QEvent
+Abstract Q-event.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+QSchema
+Abstract Q-schema.
+
+
+
+
+
+
+
+
+
+QTargetItem
+Abstract class for QTargetBeat and QTargetMeasure.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/attackpointoptimizers.html b/api/nauert/attackpointoptimizers.html
new file mode 100644
index 0000000..fa1829f
--- /dev/null
+++ b/api/nauert/attackpointoptimizers.html
@@ -0,0 +1,413 @@
+
+
+
+
+
+
+
+
+
attackpointoptimizers — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+attackpointoptimizers
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_abc {
+ graph [label=abc];
+ node [color=1];
+ "abc.ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",
+ label=ABC,
+ target=_top];
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=2];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.attackpointoptimizers" {
+ graph [label="nauert.attackpointoptimizers"];
+ node [color=3];
+ "nauert.attackpointoptimizers.AttackPointOptimizer" [URL="../api/nauert/attackpointoptimizers.html#nauert.attackpointoptimizers.AttackPointOptimizer",
+ color=black,
+ fontcolor=white,
+ label="Attack\nPoint\nOptimizer",
+ shape=oval,
+ style="bold, filled",
+ target=_top];
+ "nauert.attackpointoptimizers.MeasurewiseAttackPointOptimizer" [URL="../api/nauert/attackpointoptimizers.html#nauert.attackpointoptimizers.MeasurewiseAttackPointOptimizer",
+ color=black,
+ fontcolor=white,
+ label="Measurewise\nAttack\nPoint\nOptimizer",
+ target=_top];
+ "nauert.attackpointoptimizers.NaiveAttackPointOptimizer" [URL="../api/nauert/attackpointoptimizers.html#nauert.attackpointoptimizers.NaiveAttackPointOptimizer",
+ color=black,
+ fontcolor=white,
+ label="Naive\nAttack\nPoint\nOptimizer",
+ target=_top];
+ "nauert.attackpointoptimizers.NullAttackPointOptimizer" [URL="../api/nauert/attackpointoptimizers.html#nauert.attackpointoptimizers.NullAttackPointOptimizer",
+ color=black,
+ fontcolor=white,
+ label="Null\nAttack\nPoint\nOptimizer",
+ target=_top];
+ "nauert.attackpointoptimizers.AttackPointOptimizer" -> "nauert.attackpointoptimizers.MeasurewiseAttackPointOptimizer";
+ "nauert.attackpointoptimizers.AttackPointOptimizer" -> "nauert.attackpointoptimizers.NaiveAttackPointOptimizer";
+ "nauert.attackpointoptimizers.AttackPointOptimizer" -> "nauert.attackpointoptimizers.NullAttackPointOptimizer";
+ }
+ "abc.ABC" -> "nauert.attackpointoptimizers.AttackPointOptimizer";
+ "builtins.object" -> "abc.ABC";
+}
+
+
+
+
+
+abstract class nauert.attackpointoptimizers. AttackPointOptimizer [source]
+Abstract attack-point optimizer.
+Attack-point optimizers may alter the number, order, and individual
+durations of leaves in a logical tie, but may not alter the overall
+duration of that logical tie.
+They effectively “clean up” notation, post-quantization.
+
+
+
+__call__
+Calls attack-point optimizer.
+
+
+
+
+
+
+overridden abstract __call__ ( argument ) [source]
+Calls attack-point optimizer.
+
+
+
+
+
+
+
+
+class nauert.attackpointoptimizers. MeasurewiseAttackPointOptimizer [source]
+Measurewise attack-point optimizer.
+Attempts to optimize attack points in an expression with regard to the
+effective time signature of that expression.
+Only acts on measures.
+
+
>>> staff = abjad . Staff ( "c'8 d'8 e'8 f'8 g'8 a'8 b'8 c''8" )
+>>> abjad . show ( staff )
+
+
+
+
+
>>> source_tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> q_events = nauert . QEventSequence . from_tempo_scaled_leaves (
+... staff [:],
+... tempo = source_tempo ,
+... )
+>>> target_tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 54 )
+>>> q_schema = nauert . MeasurewiseQSchema ( tempo = target_tempo )
+
+
+
+
+
Without the measure-wise attack-point optimizer:
+
>>> voice = nauert . quantize ( q_events , q_schema = q_schema )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
With the measure-wise attack-point optimizer:
+
>>> optimizer = nauert . MeasurewiseAttackPointOptimizer ()
+>>> voice = nauert . quantize (
+... q_events ,
+... attack_point_optimizer = optimizer ,
+... q_schema = q_schema ,
+... )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
+
+__call__
+Calls measurewise attack-point optimizer.
+
+
+
+
+
+
+overridden __call__ ( argument : Container , time_signature : TimeSignature | None = None ) → None [source]
+Calls measurewise attack-point optimizer.
+
+
+
+
+
+
+class nauert.attackpointoptimizers. NaiveAttackPointOptimizer [source]
+Naive attack-point optimizer. (The default attack-point optimizer)
+Optimizes attack points by fusing tie leaves within logical ties with leaf
+durations decreasing monotonically.
+Logical ties will be partitioned into sub-logical-ties if leaves are found
+with metronome marks attached.
+
+
>>> staff = abjad . Staff ( "c'8 d'8 e'8 f'8 g'8 a'8 b'8 c''8" )
+>>> abjad . show ( staff )
+
+
+
+
+
>>> source_tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> q_events = nauert . QEventSequence . from_tempo_scaled_leaves (
+... staff [:],
+... tempo = source_tempo ,
+... )
+>>> target_tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 54 )
+>>> q_schema = nauert . MeasurewiseQSchema ( tempo = target_tempo )
+
+
+
+
+
>>> optimizer = nauert . NaiveAttackPointOptimizer ()
+>>> voice = nauert . quantize (
+... q_events ,
+... attack_point_optimizer = optimizer ,
+... q_schema = q_schema ,
+... )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
+
+__call__
+Calls naive attack-point optimizer.
+
+
+
+
+
+
+overridden __call__ ( argument ) [source]
+Calls naive attack-point optimizer.
+
+
+
+
+
+
+class nauert.attackpointoptimizers. NullAttackPointOptimizer [source]
+Null attack-point optimizer.
+Performs no attack-point optimization.
+
+
>>> staff = abjad . Staff ( "c'8 d'8 e'8 f'8 g'8 a'8 b'8 c''8" )
+>>> abjad . show ( staff )
+
+
+
+
+
>>> source_tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> q_events = nauert . QEventSequence . from_tempo_scaled_leaves (
+... staff [:],
+... tempo = source_tempo ,
+... )
+>>> target_tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 54 )
+>>> q_schema = nauert . MeasurewiseQSchema ( tempo = target_tempo )
+
+
+
+
+
>>> optimizer = nauert . NullAttackPointOptimizer ()
+>>> voice = nauert . quantize (
+... q_events ,
+... attack_point_optimizer = optimizer ,
+... q_schema = q_schema ,
+... )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
+
+__call__
+Calls null attack-point optimizer.
+
+
+
+
+
+
+overridden __call__ ( argument ) [source]
+Calls null attack-point optimizer.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/gracehandlers.html b/api/nauert/gracehandlers.html
new file mode 100644
index 0000000..fc977c7
--- /dev/null
+++ b/api/nauert/gracehandlers.html
@@ -0,0 +1,501 @@
+
+
+
+
+
+
+
+
+
gracehandlers — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+gracehandlers
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_abc {
+ graph [label=abc];
+ node [color=1];
+ "abc.ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",
+ label=ABC,
+ target=_top];
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=2];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.gracehandlers" {
+ graph [label="nauert.gracehandlers"];
+ node [color=3];
+ "nauert.gracehandlers.CollapsingGraceHandler" [URL="../api/nauert/gracehandlers.html#nauert.gracehandlers.CollapsingGraceHandler",
+ color=black,
+ fontcolor=white,
+ label="Collapsing\nGrace\nHandler",
+ target=_top];
+ "nauert.gracehandlers.ConcatenatingGraceHandler" [URL="../api/nauert/gracehandlers.html#nauert.gracehandlers.ConcatenatingGraceHandler",
+ color=black,
+ fontcolor=white,
+ label="Concatenating\nGrace\nHandler",
+ target=_top];
+ "nauert.gracehandlers.DiscardingGraceHandler" [URL="../api/nauert/gracehandlers.html#nauert.gracehandlers.DiscardingGraceHandler",
+ color=black,
+ fontcolor=white,
+ label="Discarding\nGrace\nHandler",
+ target=_top];
+ "nauert.gracehandlers.GraceHandler" [URL="../api/nauert/gracehandlers.html#nauert.gracehandlers.GraceHandler",
+ color=black,
+ fontcolor=white,
+ label="Grace\nHandler",
+ shape=oval,
+ style="bold, filled",
+ target=_top];
+ "nauert.gracehandlers.GraceHandler" -> "nauert.gracehandlers.CollapsingGraceHandler";
+ "nauert.gracehandlers.GraceHandler" -> "nauert.gracehandlers.ConcatenatingGraceHandler";
+ "nauert.gracehandlers.GraceHandler" -> "nauert.gracehandlers.DiscardingGraceHandler";
+ }
+ "abc.ABC" -> "nauert.gracehandlers.GraceHandler";
+ "builtins.object" -> "abc.ABC";
+}
+
+
+
+
+
+abstract class nauert.gracehandlers. GraceHandler [source]
+Abstract grace-handler.
+Determines what pitch, if any, will be selected from a list of QEvents
+to be applied to an attack-point generated by a QGrid
, and whether
+there should be a BeforeGraceContainer
attached to that attack-point.
+When called on a sequence of QEvents
, GraceHandler
subclasses
+should return a pair, where the first item of the pair is a sequence of
+pitch tokens or None
, and where the second item of the pair is a
+BeforeGraceContainer
instance or None.
+
+
+
+
+
+overridden abstract __call__ ( q_events ) → tuple [ tuple [ NamedPitch , ... ] , tuple | None , BeforeGraceContainer | None ] [source]
+Calls grace handler.
+
+
+
+
+
+
+
+
+class nauert.gracehandlers. CollapsingGraceHandler [source]
+Collapsing grace-handler.
+Collapses pitch information into a single chord rather than creating a
+grace container.
+
+
>>> durations = [ 1000 , 1 , 1 , 997 ]
+>>> pitches = [ 0 , 7 , 4 , 0 ]
+>>> method = nauert . QEventSequence . from_millisecond_pitch_pairs
+>>> pairs = tuple ( zip ( durations , pitches , strict = True ))
+>>> q_event_sequence = method ( pairs )
+>>> grace_handler = nauert . CollapsingGraceHandler ()
+>>> voice = nauert . quantize ( q_event_sequence , grace_handler = grace_handler )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
+
+__call__
+Calls collapsing grace handler.
+
+
+
+
+
+
+overridden __call__ ( q_events : Sequence [ QEvent ] ) → tuple [ tuple [ NamedPitch , ... ] , tuple , None ] [source]
+Calls collapsing grace handler.
+
+
+
+
+
+
+class nauert.gracehandlers. ConcatenatingGraceHandler ( discard_grace_rest : bool = True , grace_duration : Duration = Duration(1, 16) , replace_rest_with_final_grace_note : bool = True ) [source]
+Concatenating grace-handler.
+Concatenates all but the final QEvent
attached to a QGrid
offset
+into a BeforeGraceContainer
, using a fixed leaf duration duration
.
+
+
When called, it returns pitch information of final QEvent
, and the
+generated BeforeGraceContainer
, if any:
+
>>> durations = [ 1000 , 1 , 999 ]
+>>> pitches = [ 0 , 2 , 0 ]
+>>> pairs = tuple ( zip ( durations , pitches , strict = True ))
+>>> q_event_sequence = nauert . QEventSequence . from_millisecond_pitch_pairs ( pairs )
+>>> grace_handler = nauert . ConcatenatingGraceHandler ()
+>>> voice = nauert . quantize ( q_event_sequence , grace_handler = grace_handler )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
When discard_grace_rest
is set to True
(the default), all the
+grace rests are discarded:
+
>>> durations = [ 1000 , 1 , 999 ]
+>>> pitches = [ 0 , None , 0 ]
+>>> pairs = tuple ( zip ( durations , pitches , strict = True ))
+>>> q_event_sequence = nauert . QEventSequence . from_millisecond_pitch_pairs ( pairs )
+>>> grace_handler = nauert . ConcatenatingGraceHandler ()
+>>> voice = nauert . quantize ( q_event_sequence , grace_handler = grace_handler )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
When discard_grace_rest
is set to False
, grace rests are not
+discarded:
+
>>> grace_handler = nauert . ConcatenatingGraceHandler ( discard_grace_rest = False )
+>>> voice = nauert . quantize ( q_event_sequence , grace_handler = grace_handler )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
When replace_rest_with_final_grace_note
is set to False
, grace
+notes are allowed to be attached to a rest:
+
>>> durations = [ 1000 , 1 , 999 , 1000 ]
+>>> pitches = [ 0 , 0 , None , 0 ]
+>>> pairs = tuple ( zip ( durations , pitches , strict = True ))
+>>> q_event_sequence = nauert . QEventSequence . from_millisecond_pitch_pairs ( pairs )
+>>> grace_handler = nauert . ConcatenatingGraceHandler (
+... replace_rest_with_final_grace_note = False
+... )
+>>> voice = nauert . quantize ( q_event_sequence , grace_handler = grace_handler )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
When replace_rest_with_final_grace_note
is set to True
(the
+default behavior), any rest with grace notes attached to it is replaced
+by the last pitched grace note in the grace container:
+
>>> grace_handler = nauert . ConcatenatingGraceHandler ()
+>>> voice = nauert . quantize ( q_event_sequence , grace_handler = grace_handler )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
+
+
+
+overridden __call__ ( q_events : Sequence [ QEvent ] ) → tuple [ tuple [ NamedPitch , ... ] , tuple | None , BeforeGraceContainer | None ] [source]
+Calls concatenating grace handler.
+
+
+
+
+
+handle_orphaned_q_event_proxies ( last_leaf , q_event_proxies ) [source]
+Embeds orphaned QEvents
into an AfterGraceContainer
and
+attaches it to last_leaf
.
+
+
>>> durations = [ 1000 , 1000 , 1000 , 400 , 50 , 50 ]
+>>> pitches = range ( len ( durations ))
+>>> pairs = tuple ( zip ( durations , pitches , strict = True ))
+>>> method = nauert . QEventSequence . from_millisecond_pitch_pairs
+>>> q_event_sequence = method ( pairs )
+>>> search_tree = nauert . UnweightedSearchTree ()
+>>> attack_point_optimizer = nauert . MeasurewiseAttackPointOptimizer ()
+>>> q_schema = nauert . MeasurewiseQSchema (
+... search_tree = search_tree ,
+... time_signature = ( 7 , 8 ),
+... use_full_measure = True ,
+... )
+>>> result = nauert . quantize (
+... q_event_sequence ,
+... q_schema = q_schema ,
+... attach_tempos = True ,
+... attack_point_optimizer = attack_point_optimizer ,
+... )
+>>> staff = abjad . Staff ([ result ])
+>>> score = abjad . Score ([ staff ], name = "Score" )
+>>> abjad . show ( staff )
+
+
+
+
+
+
+
+
+
+
+discard_grace_rest
+Boolean of whether to discard grace rests or not.
+
+
+
+
+grace_duration
+Grace duration of concantenating grace handler.
+
+
+
+
+replace_rest_with_final_grace_note
+Boolean of whether to replace the rest with the final (pitched) grace
+note.
+
+
+
+
+
+
+class nauert.gracehandlers. DiscardingGraceHandler [source]
+Discarding grace-handler.
+Discards all but final q-event attached to an offset.
+Does not create grace containers.
+
+
>>> durations = [ 1000 , 1 , 1 , 998 ]
+>>> pitches = [ 0 , 1 , 2 , 3 ]
+>>> pairs = tuple ( zip ( durations , pitches , strict = True ))
+>>> q_event_sequence = nauert . QEventSequence . from_millisecond_pitch_pairs ( pairs )
+>>> grace_handler = nauert . DiscardingGraceHandler ()
+>>> voice = nauert . quantize ( q_event_sequence , grace_handler = grace_handler )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
>>> for pqe in grace_handler . discarded_q_events [ 0 ]:
+... pqe
+...
+PitchedQEvent(offset=Offset((1000, 1)), pitches=(NamedPitch("cs'"),), index=None, attachments=())
+PitchedQEvent(offset=Offset((1001, 1)), pitches=(NamedPitch("d'"),), index=None, attachments=())
+
+
+
+
+
+
+
+
+overridden __call__ ( q_events : Sequence [ QEvent ] ) → tuple [ tuple [ NamedPitch , ... ] , tuple , None ] [source]
+Calls discarding grace handler.
+
+
+
+
+
+discarded_q_events
+Gets discarded QEvents.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/heuristics.html b/api/nauert/heuristics.html
new file mode 100644
index 0000000..68a8496
--- /dev/null
+++ b/api/nauert/heuristics.html
@@ -0,0 +1,251 @@
+
+
+
+
+
+
+
+
+
heuristics — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+heuristics
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_abc {
+ graph [label=abc];
+ node [color=1];
+ "abc.ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",
+ label=ABC,
+ target=_top];
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=2];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.heuristics" {
+ graph [label="nauert.heuristics"];
+ node [color=3];
+ "nauert.heuristics.DistanceHeuristic" [URL="../api/nauert/heuristics.html#nauert.heuristics.DistanceHeuristic",
+ color=black,
+ fontcolor=white,
+ label="Distance\nHeuristic",
+ target=_top];
+ "nauert.heuristics.Heuristic" [URL="../api/nauert/heuristics.html#nauert.heuristics.Heuristic",
+ color=black,
+ fontcolor=white,
+ label=Heuristic,
+ shape=oval,
+ style="bold, filled",
+ target=_top];
+ "nauert.heuristics.Heuristic" -> "nauert.heuristics.DistanceHeuristic";
+ }
+ "abc.ABC" -> "nauert.heuristics.Heuristic";
+ "builtins.object" -> "abc.ABC";
+}
+
+
+
+
+
+abstract class nauert.heuristics. Heuristic [source]
+Abstract heuristic.
+Heuristics rank Q-grids according to the criteria they encapsulate.
+Heuristics provide the means by which the quantizer selects a single
+QGrid
from all computed QGrids
for any given QTargetBeat
to
+represent that beat.
+
+
+
+
+
+overridden __call__ ( q_target_beats : tuple [ QTargetBeat , ... ] ) → tuple [ QTargetBeat , ... ] [source]
+Calls heuristic.
+
+
+
+
+
+
+
+
+class nauert.heuristics. DistanceHeuristic [source]
+Distance heuristic.
+Considers only the computed distance of each QGrid
and the number of
+leaves of that QGrid
when choosing the optimal QGrid
for a given
+QTargetBeat
.
+The QGrid
with the smallest distance and fewest number of leaves will
+be selected.
+
+
>>> durations = [ 1000 ] * 8
+>>> pitches = range ( 8 )
+>>> pairs = tuple ( zip ( durations , pitches , strict = True ))
+>>> q_event_sequence = nauert . QEventSequence . from_millisecond_pitch_pairs ( pairs )
+>>> heuristic = nauert . DistanceHeuristic ()
+>>> voice = nauert . quantize ( q_event_sequence , heuristic = heuristic )
+>>> staff = abjad . Staff ([ voice ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/index.html b/api/nauert/index.html
new file mode 100644
index 0000000..6bf7df9
--- /dev/null
+++ b/api/nauert/index.html
@@ -0,0 +1,476 @@
+
+
+
+
+
+
+
+
+
nauert — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+nauert
+Extension for quantizing rhythm, based on Paul Nauert’s Q-Grid technique.
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true
+ ];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0
+ ];
+ edge [color=lightslategrey,
+ penwidth=1
+ ];
+ subgraph cluster_abc {
+ graph [label=abc];
+ node [color=1];
+ "abc.ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",
+ label=ABC,
+ target=_top];
+ }
+ subgraph "cluster_abjad.rhythmtrees" {
+ graph [label="abjad.rhythmtrees"];
+ node [color=2];
+ "abjad.rhythmtrees.RhythmTreeContainer" [label="Rhythm\nTree\nContainer"];
+ "abjad.rhythmtrees.RhythmTreeNode" [label="Rhythm\nTree\nNode"];
+ "abjad.rhythmtrees.RhythmTreeNode" -> "abjad.rhythmtrees.RhythmTreeContainer";
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=3];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_multiprocessing.context" {
+ graph [label="multiprocessing.context"];
+ node [color=4];
+ "multiprocessing.context.Process" [label=Process];
+ }
+ subgraph "cluster_multiprocessing.process" {
+ graph [label="multiprocessing.process"];
+ node [color=5];
+ "multiprocessing.process.BaseProcess" [label="Base\nProcess"];
+ }
+ subgraph "cluster_nauert.attackpointoptimizers" {
+ graph [label="nauert.attackpointoptimizers"];
+ node [color=6];
+ "nauert.attackpointoptimizers.AttackPointOptimizer" [URL="../api/nauert/attackpointoptimizers.html#nauert.attackpointoptimizers.AttackPointOptimizer",
+ label="Attack\nPoint\nOptimizer",
+ shape=oval,
+ style=bold,
+ target=_top];
+ "nauert.attackpointoptimizers.MeasurewiseAttackPointOptimizer" [URL="../api/nauert/attackpointoptimizers.html#nauert.attackpointoptimizers.MeasurewiseAttackPointOptimizer",
+ label="Measurewise\nAttack\nPoint\nOptimizer",
+ target=_top];
+ "nauert.attackpointoptimizers.AttackPointOptimizer" -> "nauert.attackpointoptimizers.MeasurewiseAttackPointOptimizer" [minlen=1];
+ "nauert.attackpointoptimizers.NaiveAttackPointOptimizer" [URL="../api/nauert/attackpointoptimizers.html#nauert.attackpointoptimizers.NaiveAttackPointOptimizer",
+ label="Naive\nAttack\nPoint\nOptimizer",
+ target=_top];
+ "nauert.attackpointoptimizers.AttackPointOptimizer" -> "nauert.attackpointoptimizers.NaiveAttackPointOptimizer" [minlen=2];
+ "nauert.attackpointoptimizers.NullAttackPointOptimizer" [URL="../api/nauert/attackpointoptimizers.html#nauert.attackpointoptimizers.NullAttackPointOptimizer",
+ label="Null\nAttack\nPoint\nOptimizer",
+ target=_top];
+ "nauert.attackpointoptimizers.AttackPointOptimizer" -> "nauert.attackpointoptimizers.NullAttackPointOptimizer" [minlen=3];
+ }
+ subgraph "cluster_nauert.gracehandlers" {
+ graph [label="nauert.gracehandlers"];
+ node [color=7];
+ "nauert.gracehandlers.CollapsingGraceHandler" [URL="../api/nauert/gracehandlers.html#nauert.gracehandlers.CollapsingGraceHandler",
+ label="Collapsing\nGrace\nHandler",
+ target=_top];
+ "nauert.gracehandlers.ConcatenatingGraceHandler" [URL="../api/nauert/gracehandlers.html#nauert.gracehandlers.ConcatenatingGraceHandler",
+ label="Concatenating\nGrace\nHandler",
+ target=_top];
+ "nauert.gracehandlers.DiscardingGraceHandler" [URL="../api/nauert/gracehandlers.html#nauert.gracehandlers.DiscardingGraceHandler",
+ label="Discarding\nGrace\nHandler",
+ target=_top];
+ "nauert.gracehandlers.GraceHandler" [URL="../api/nauert/gracehandlers.html#nauert.gracehandlers.GraceHandler",
+ label="Grace\nHandler",
+ shape=oval,
+ style=bold,
+ target=_top];
+ "nauert.gracehandlers.GraceHandler" -> "nauert.gracehandlers.CollapsingGraceHandler" [minlen=1];
+ "nauert.gracehandlers.GraceHandler" -> "nauert.gracehandlers.ConcatenatingGraceHandler" [minlen=2];
+ "nauert.gracehandlers.GraceHandler" -> "nauert.gracehandlers.DiscardingGraceHandler" [minlen=3];
+ }
+ subgraph "cluster_nauert.heuristics" {
+ graph [label="nauert.heuristics"];
+ node [color=8];
+ "nauert.heuristics.DistanceHeuristic" [URL="../api/nauert/heuristics.html#nauert.heuristics.DistanceHeuristic",
+ label="Distance\nHeuristic",
+ target=_top];
+ "nauert.heuristics.Heuristic" [URL="../api/nauert/heuristics.html#nauert.heuristics.Heuristic",
+ label=Heuristic,
+ shape=oval,
+ style=bold,
+ target=_top];
+ "nauert.heuristics.Heuristic" -> "nauert.heuristics.DistanceHeuristic" [minlen=1];
+ }
+ subgraph "cluster_nauert.jobhandlers" {
+ graph [label="nauert.jobhandlers"];
+ node [color=9];
+ "nauert.jobhandlers.JobHandler" [URL="../api/nauert/jobhandlers.html#nauert.jobhandlers.JobHandler",
+ label="Job\nHandler",
+ shape=oval,
+ style=bold,
+ target=_top];
+ "nauert.jobhandlers.ParallelJobHandler" [URL="../api/nauert/jobhandlers.html#nauert.jobhandlers.ParallelJobHandler",
+ label="Parallel\nJob\nHandler",
+ target=_top];
+ "nauert.jobhandlers.JobHandler" -> "nauert.jobhandlers.ParallelJobHandler" [minlen=1];
+ "nauert.jobhandlers.SerialJobHandler" [URL="../api/nauert/jobhandlers.html#nauert.jobhandlers.SerialJobHandler",
+ label="Serial\nJob\nHandler",
+ target=_top];
+ "nauert.jobhandlers.JobHandler" -> "nauert.jobhandlers.SerialJobHandler" [minlen=2];
+ "nauert.jobhandlers.ParallelJobHandlerWorker" [URL="../api/nauert/jobhandlers.html#nauert.jobhandlers.ParallelJobHandlerWorker",
+ label="Parallel\nJob\nHandler\nWorker",
+ target=_top];
+ }
+ subgraph "cluster_nauert.qeventproxy" {
+ graph [label="nauert.qeventproxy"];
+ node [color=1];
+ "nauert.qeventproxy.QEventProxy" [URL="../api/nauert/qeventproxy.html#nauert.qeventproxy.QEventProxy",
+ label="QEvent\nProxy",
+ target=_top];
+ }
+ subgraph "cluster_nauert.qevents" {
+ graph [label="nauert.qevents"];
+ node [color=2];
+ "nauert.qevents.PitchedQEvent" [URL="../api/nauert/qevents.html#nauert.qevents.PitchedQEvent",
+ label="Pitched\nQEvent",
+ target=_top];
+ "nauert.qevents.QEvent" [URL="../api/nauert/qevents.html#nauert.qevents.QEvent",
+ label=QEvent,
+ shape=oval,
+ style=bold,
+ target=_top];
+ "nauert.qevents.QEvent" -> "nauert.qevents.PitchedQEvent" [minlen=1];
+ "nauert.qevents.SilentQEvent" [URL="../api/nauert/qevents.html#nauert.qevents.SilentQEvent",
+ label="Silent\nQEvent",
+ target=_top];
+ "nauert.qevents.QEvent" -> "nauert.qevents.SilentQEvent" [minlen=2];
+ "nauert.qevents.TerminalQEvent" [URL="../api/nauert/qevents.html#nauert.qevents.TerminalQEvent",
+ label="Terminal\nQEvent",
+ target=_top];
+ "nauert.qevents.QEvent" -> "nauert.qevents.TerminalQEvent" [minlen=3];
+ }
+ subgraph "cluster_nauert.qeventsequence" {
+ graph [label="nauert.qeventsequence"];
+ node [color=3];
+ "nauert.qeventsequence.QEventSequence" [URL="../api/nauert/qeventsequence.html#nauert.qeventsequence.QEventSequence",
+ label="QEvent\nSequence",
+ target=_top];
+ }
+ subgraph "cluster_nauert.qgrid" {
+ graph [label="nauert.qgrid"];
+ node [color=4];
+ "nauert.qgrid.QGrid" [URL="../api/nauert/qgrid.html#nauert.qgrid.QGrid",
+ label=QGrid,
+ target=_top];
+ "nauert.qgrid.QGridContainer" [URL="../api/nauert/qgrid.html#nauert.qgrid.QGridContainer",
+ label="QGrid\nContainer",
+ target=_top];
+ "nauert.qgrid.QGridLeaf" [URL="../api/nauert/qgrid.html#nauert.qgrid.QGridLeaf",
+ label="QGrid\nLeaf",
+ target=_top];
+ }
+ subgraph "cluster_nauert.qschemaitems" {
+ graph [label="nauert.qschemaitems"];
+ node [color=5];
+ "nauert.qschemaitems.BeatwiseQSchemaItem" [URL="../api/nauert/qschemaitems.html#nauert.qschemaitems.BeatwiseQSchemaItem",
+ label="Beatwise\nQSchema\nItem",
+ target=_top];
+ "nauert.qschemaitems.MeasurewiseQSchemaItem" [URL="../api/nauert/qschemaitems.html#nauert.qschemaitems.MeasurewiseQSchemaItem",
+ label="Measurewise\nQSchema\nItem",
+ target=_top];
+ "nauert.qschemaitems.QSchemaItem" [URL="../api/nauert/qschemaitems.html#nauert.qschemaitems.QSchemaItem",
+ label="QSchema\nItem",
+ shape=oval,
+ style=bold,
+ target=_top];
+ "nauert.qschemaitems.QSchemaItem" -> "nauert.qschemaitems.BeatwiseQSchemaItem" [minlen=1];
+ "nauert.qschemaitems.QSchemaItem" -> "nauert.qschemaitems.MeasurewiseQSchemaItem" [minlen=2];
+ }
+ subgraph "cluster_nauert.qschemas" {
+ graph [label="nauert.qschemas"];
+ node [color=6];
+ "nauert.qschemas.BeatwiseQSchema" [URL="../api/nauert/qschemas.html#nauert.qschemas.BeatwiseQSchema",
+ label="Beatwise\nQSchema",
+ target=_top];
+ "nauert.qschemas.MeasurewiseQSchema" [URL="../api/nauert/qschemas.html#nauert.qschemas.MeasurewiseQSchema",
+ label="Measurewise\nQSchema",
+ target=_top];
+ "nauert.qschemas.QSchema" [URL="../api/nauert/qschemas.html#nauert.qschemas.QSchema",
+ label=QSchema,
+ shape=oval,
+ style=bold,
+ target=_top];
+ "nauert.qschemas.QSchema" -> "nauert.qschemas.BeatwiseQSchema" [minlen=1];
+ "nauert.qschemas.QSchema" -> "nauert.qschemas.MeasurewiseQSchema" [minlen=2];
+ }
+ subgraph "cluster_nauert.qtargetitems" {
+ graph [label="nauert.qtargetitems"];
+ node [color=7];
+ "nauert.qtargetitems.QTargetBeat" [URL="../api/nauert/qtargetitems.html#nauert.qtargetitems.QTargetBeat",
+ label="QTarget\nBeat",
+ target=_top];
+ "nauert.qtargetitems.QTargetItem" [URL="../api/nauert/qtargetitems.html#nauert.qtargetitems.QTargetItem",
+ label="QTarget\nItem",
+ shape=oval,
+ style=bold,
+ target=_top];
+ "nauert.qtargetitems.QTargetItem" -> "nauert.qtargetitems.QTargetBeat" [minlen=1];
+ "nauert.qtargetitems.QTargetMeasure" [URL="../api/nauert/qtargetitems.html#nauert.qtargetitems.QTargetMeasure",
+ label="QTarget\nMeasure",
+ target=_top];
+ "nauert.qtargetitems.QTargetItem" -> "nauert.qtargetitems.QTargetMeasure" [minlen=2];
+ }
+ subgraph "cluster_nauert.qtargets" {
+ graph [label="nauert.qtargets"];
+ node [color=8];
+ "nauert.qtargets.BeatwiseQTarget" [URL="../api/nauert/qtargets.html#nauert.qtargets.BeatwiseQTarget",
+ label="Beatwise\nQTarget",
+ target=_top];
+ "nauert.qtargets.MeasurewiseQTarget" [URL="../api/nauert/qtargets.html#nauert.qtargets.MeasurewiseQTarget",
+ label="Measurewise\nQTarget",
+ target=_top];
+ "nauert.qtargets.QTarget" [URL="../api/nauert/qtargets.html#nauert.qtargets.QTarget",
+ label=QTarget,
+ shape=oval,
+ style=bold,
+ target=_top];
+ "nauert.qtargets.QTarget" -> "nauert.qtargets.BeatwiseQTarget" [minlen=1];
+ "nauert.qtargets.QTarget" -> "nauert.qtargets.MeasurewiseQTarget" [minlen=2];
+ }
+ subgraph "cluster_nauert.quantizationjob" {
+ graph [label="nauert.quantizationjob"];
+ node [color=9];
+ "nauert.quantizationjob.QuantizationJob" [URL="../api/nauert/quantizationjob.html#nauert.quantizationjob.QuantizationJob",
+ label="Quantization\nJob",
+ target=_top];
+ }
+ subgraph "cluster_nauert.searchtrees" {
+ graph [label="nauert.searchtrees"];
+ node [color=1];
+ "nauert.searchtrees.SearchTree" [URL="../api/nauert/searchtrees.html#nauert.searchtrees.SearchTree",
+ label="Search\nTree",
+ shape=oval,
+ style=bold,
+ target=_top];
+ "nauert.searchtrees.UnweightedSearchTree" [URL="../api/nauert/searchtrees.html#nauert.searchtrees.UnweightedSearchTree",
+ label="Unweighted\nSearch\nTree",
+ target=_top];
+ "nauert.searchtrees.SearchTree" -> "nauert.searchtrees.UnweightedSearchTree" [minlen=1];
+ "nauert.searchtrees.WeightedSearchTree" [URL="../api/nauert/searchtrees.html#nauert.searchtrees.WeightedSearchTree",
+ label="Weighted\nSearch\nTree",
+ target=_top];
+ "nauert.searchtrees.SearchTree" -> "nauert.searchtrees.WeightedSearchTree" [minlen=2];
+ }
+ subgraph "cluster_uqbar.containers.unique_tree" {
+ graph [label="uqbar.containers.unique_tree"];
+ node [color=2];
+ "uqbar.containers.unique_tree.UniqueTreeContainer" [label="Unique\nTree\nContainer"];
+ "uqbar.containers.unique_tree.UniqueTreeList" [label="Unique\nTree\nList"];
+ "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeList" [minlen=1];
+ "uqbar.containers.unique_tree.UniqueTreeNode" [label="Unique\nTree\nNode"];
+ "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.containers.unique_tree.UniqueTreeContainer" [minlen=1];
+ }
+ "abc.ABC" -> "nauert.attackpointoptimizers.AttackPointOptimizer";
+ "abc.ABC" -> "nauert.gracehandlers.GraceHandler";
+ "abc.ABC" -> "nauert.heuristics.Heuristic" [minlen=1];
+ "abc.ABC" -> "nauert.jobhandlers.JobHandler";
+ "abc.ABC" -> "nauert.qevents.QEvent";
+ "abc.ABC" -> "nauert.qschemaitems.QSchemaItem";
+ "abc.ABC" -> "nauert.qschemas.QSchema";
+ "abc.ABC" -> "nauert.qtargetitems.QTargetItem";
+ "abc.ABC" -> "nauert.qtargets.QTarget";
+ "abc.ABC" -> "nauert.searchtrees.SearchTree";
+ "abjad.rhythmtrees.RhythmTreeContainer" -> "nauert.qgrid.QGridContainer" [minlen=1];
+ "abjad.rhythmtrees.RhythmTreeNode" -> "nauert.qgrid.QGridLeaf";
+ "builtins.object" -> "abc.ABC";
+ "builtins.object" -> "abjad.rhythmtrees.RhythmTreeNode";
+ "builtins.object" -> "multiprocessing.process.BaseProcess" [minlen=1];
+ "builtins.object" -> "nauert.qeventproxy.QEventProxy" [minlen=2];
+ "builtins.object" -> "nauert.qeventsequence.QEventSequence" [minlen=3];
+ "builtins.object" -> "nauert.qgrid.QGrid" [minlen=1];
+ "builtins.object" -> "nauert.quantizationjob.QuantizationJob" [minlen=2];
+ "builtins.object" -> "uqbar.containers.unique_tree.UniqueTreeNode";
+ "multiprocessing.context.Process" -> "nauert.jobhandlers.ParallelJobHandlerWorker" [minlen=1];
+ "multiprocessing.process.BaseProcess" -> "multiprocessing.context.Process" [minlen=1];
+ "uqbar.containers.unique_tree.UniqueTreeList" -> "abjad.rhythmtrees.RhythmTreeContainer";
+ "uqbar.containers.unique_tree.UniqueTreeNode" -> "nauert.qgrid.QGridLeaf";
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/jobhandlers.html b/api/nauert/jobhandlers.html
new file mode 100644
index 0000000..92fe4bc
--- /dev/null
+++ b/api/nauert/jobhandlers.html
@@ -0,0 +1,428 @@
+
+
+
+
+
+
+
+
+
jobhandlers — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+jobhandlers
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_abc {
+ graph [label=abc];
+ node [color=1];
+ "abc.ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",
+ label=ABC,
+ target=_top];
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=2];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_multiprocessing.context" {
+ graph [label="multiprocessing.context"];
+ node [color=3];
+ "multiprocessing.context.Process" [label=Process];
+ }
+ subgraph "cluster_multiprocessing.process" {
+ graph [label="multiprocessing.process"];
+ node [color=4];
+ "multiprocessing.process.BaseProcess" [label="Base\nProcess"];
+ }
+ subgraph "cluster_nauert.jobhandlers" {
+ graph [label="nauert.jobhandlers"];
+ node [color=5];
+ "nauert.jobhandlers.JobHandler" [URL="../api/nauert/jobhandlers.html#nauert.jobhandlers.JobHandler",
+ color=black,
+ fontcolor=white,
+ label="Job\nHandler",
+ shape=oval,
+ style="bold, filled",
+ target=_top];
+ "nauert.jobhandlers.ParallelJobHandler" [URL="../api/nauert/jobhandlers.html#nauert.jobhandlers.ParallelJobHandler",
+ color=black,
+ fontcolor=white,
+ label="Parallel\nJob\nHandler",
+ target=_top];
+ "nauert.jobhandlers.ParallelJobHandlerWorker" [URL="../api/nauert/jobhandlers.html#nauert.jobhandlers.ParallelJobHandlerWorker",
+ color=black,
+ fontcolor=white,
+ label="Parallel\nJob\nHandler\nWorker",
+ target=_top];
+ "nauert.jobhandlers.SerialJobHandler" [URL="../api/nauert/jobhandlers.html#nauert.jobhandlers.SerialJobHandler",
+ color=black,
+ fontcolor=white,
+ label="Serial\nJob\nHandler",
+ target=_top];
+ "nauert.jobhandlers.JobHandler" -> "nauert.jobhandlers.ParallelJobHandler";
+ "nauert.jobhandlers.JobHandler" -> "nauert.jobhandlers.SerialJobHandler";
+ }
+ "abc.ABC" -> "nauert.jobhandlers.JobHandler";
+ "builtins.object" -> "abc.ABC";
+ "builtins.object" -> "multiprocessing.process.BaseProcess";
+ "multiprocessing.context.Process" -> "nauert.jobhandlers.ParallelJobHandlerWorker";
+ "multiprocessing.process.BaseProcess" -> "multiprocessing.context.Process";
+}
+
+
+
+
+
+abstract class nauert.jobhandlers. JobHandler [source]
+Abstact job-handler.
+JobHandlers
control how QuantizationJob
instances are processed by
+the quantize
function, either serially or in parallel.
+
+
+
+
+
+overridden abstract __call__ ( jobs ) [source]
+Calls job handler.
+
+
+
+
+
+
+
+
+class nauert.jobhandlers. ParallelJobHandler [source]
+Parallel job-handler.
+Processes QuantizationJob
instances in parallel, based on the number of
+CPUs available.
+
+
+
+__call__
+Calls parallel job handler.
+
+
+
+
+
+
+overridden __call__ ( jobs ) [source]
+Calls parallel job handler.
+
+
+
+
+
+
+class nauert.jobhandlers. ParallelJobHandlerWorker ( job_queue = None , result_queue = None ) [source]
+Parallel job-handler worker.
+Worker process which runs QuantizationJobs
.
+Not composer-safe.
+Used internally by ParallelJobHandler
.
+
+
+
+run
+Runs parallel job handler worker.
+
+
+
+
+
+
+
+( BaseProcess
). __repr__ ( )
+Return repr(self).
+
+
+
+
+
+
+
+( BaseProcess
). close ( )
+Close the Process object.
+This method releases resources held by the Process object. It is
+an error to call this method if the child process is still running.
+
+
+
+
+
+
+( BaseProcess
). is_alive ( )
+Return whether process is alive
+
+
+
+
+
+
+( BaseProcess
). join ( timeout = None )
+Wait until child process terminates
+
+
+
+
+
+
+( BaseProcess
). kill ( )
+Terminate process; sends SIGKILL signal or uses TerminateProcess()
+
+
+
+
+
+overridden run ( ) → None [source]
+Runs parallel job handler worker.
+
+
+
+
+
+( BaseProcess
). start ( )
+Start child process
+
+
+
+
+
+
+( BaseProcess
). terminate ( )
+Terminate process; sends SIGTERM signal or uses TerminateProcess()
+
+
+
+
+
+
+
+( BaseProcess
). authkey
+
+
+
+
+
+
+( BaseProcess
). daemon
+Return whether process is a daemon
+
+
+
+
+
+
+( BaseProcess
). name
+
+
+
+
+
+
+
+( BaseProcess
). exitcode
+Return exit code of process or None if it has yet to stop
+
+
+
+
+
+
+( BaseProcess
). ident
+Return identifier (PID) of process or None if it has yet to start
+
+
+
+
+
+
+( BaseProcess
). pid
+Return identifier (PID) of process or None if it has yet to start
+
+
+
+
+
+
+( BaseProcess
). sentinel
+Return a file descriptor (Unix) or handle (Windows) suitable for
+waiting for process termination.
+
+
+
+
+
+
+
+class nauert.jobhandlers. SerialJobHandler [source]
+Serial job-handler.
+
+
+
+__call__
+Calls serial job handler.
+
+
+
+
+
+
+overridden __call__ ( jobs : Sequence [ QuantizationJob ] ) → Sequence [ QuantizationJob ] [source]
+Calls serial job handler.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/qeventproxy.html b/api/nauert/qeventproxy.html
new file mode 100644
index 0000000..5a35bf0
--- /dev/null
+++ b/api/nauert/qeventproxy.html
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+
+
qeventproxy — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+qeventproxy
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=1];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.qeventproxy" {
+ graph [label="nauert.qeventproxy"];
+ node [color=2];
+ "nauert.qeventproxy.QEventProxy" [URL="../api/nauert/qeventproxy.html#nauert.qeventproxy.QEventProxy",
+ color=black,
+ fontcolor=white,
+ label="QEvent\nProxy",
+ target=_top];
+ }
+ "builtins.object" -> "nauert.qeventproxy.QEventProxy";
+}
+
+
+
+
+
+class nauert.qeventproxy. QEventProxy ( q_event : QEvent | None = None , * offsets : Offset ) [source]
+Q-event proxy.
+Maps Q-event offset with the range of its beatspan to the range 0-1.
+
+
>>> q_event = nauert . PitchedQEvent ( abjad . Offset ( 130 ), [ 0 , 1 , 4 ])
+>>> nauert . QEventProxy ( q_event , abjad . Offset ( 0.5 ))
+QEventProxy(q_event=PitchedQEvent(offset=Offset((130, 1)), pitches=(NamedPitch("c'"), NamedPitch("cs'"), NamedPitch("e'")), index=None, attachments=()), offset=Offset((1, 2)))
+
+
+
+Not composer-safe.
+Used internally by the quantize
function.
+
+
+
+__eq__
+Is true when argument is a q-event proxy with offset and q-event equal to those of this q-event proxy.
+
+__hash__
+Hashes q-event proxy.
+
+__repr__
+Gets repr.
+
+index
+Gets index of q-event proxy.
+
+offset
+Gets offset of q-event proxy.
+
+q_event
+Gets q-event of q-event proxy.
+
+
+
+
+
+
+overridden __eq__ ( argument ) → bool [source]
+Is true when argument is a q-event proxy with offset and q-event
+equal to those of this q-event proxy. Otherwise false.
+
+
+
+
+overridden __hash__ ( ) → int [source]
+Hashes q-event proxy.
+Required to be explicitly redefined on Python 3 if __eq__ changes.
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+index
+Gets index of q-event proxy.
+
+
+
+
+offset
+Gets offset of q-event proxy.
+
+
+
+
+q_event
+Gets q-event of q-event proxy.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/qevents.html b/api/nauert/qevents.html
new file mode 100644
index 0000000..b8fd26d
--- /dev/null
+++ b/api/nauert/qevents.html
@@ -0,0 +1,562 @@
+
+
+
+
+
+
+
+
+
qevents — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+qevents
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_abc {
+ graph [label=abc];
+ node [color=1];
+ "abc.ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",
+ label=ABC,
+ target=_top];
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=2];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.qevents" {
+ graph [label="nauert.qevents"];
+ node [color=3];
+ "nauert.qevents.PitchedQEvent" [URL="../api/nauert/qevents.html#nauert.qevents.PitchedQEvent",
+ color=black,
+ fontcolor=white,
+ label="Pitched\nQEvent",
+ target=_top];
+ "nauert.qevents.QEvent" [URL="../api/nauert/qevents.html#nauert.qevents.QEvent",
+ color=black,
+ fontcolor=white,
+ label=QEvent,
+ shape=oval,
+ style="bold, filled",
+ target=_top];
+ "nauert.qevents.SilentQEvent" [URL="../api/nauert/qevents.html#nauert.qevents.SilentQEvent",
+ color=black,
+ fontcolor=white,
+ label="Silent\nQEvent",
+ target=_top];
+ "nauert.qevents.TerminalQEvent" [URL="../api/nauert/qevents.html#nauert.qevents.TerminalQEvent",
+ color=black,
+ fontcolor=white,
+ label="Terminal\nQEvent",
+ target=_top];
+ "nauert.qevents.QEvent" -> "nauert.qevents.PitchedQEvent";
+ "nauert.qevents.QEvent" -> "nauert.qevents.SilentQEvent";
+ "nauert.qevents.QEvent" -> "nauert.qevents.TerminalQEvent";
+ }
+ "abc.ABC" -> "nauert.qevents.QEvent";
+ "builtins.object" -> "abc.ABC";
+}
+
+
+
+
+QEvent
+Abstract Q-event.
+
+
+
+
+
+abstract class nauert.qevents. QEvent ( offset : Offset = Offset((0, 1)) , index : int | None = None , attachments : Iterable = () ) [source]
+Abstract Q-event.
+Represents an attack point to be quantized.
+All QEvents
possess a rational offset in milliseconds, and an optional
+index for disambiguating events which fall on the same offset in a
+QGrid
.
+
+
+
+
+
+overridden __lt__ ( argument ) → bool [source]
+Is true when epxr is a q-event with offset greater than that of this
+q-event. Otherwise false.
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+classmethod from_offset_pitches_attachments ( offset , pitches , attachments ) → QEvent [source]
+
+
+
+
+
+attachments
+The attachments of the QEvent.
+
+
+
+
+index
+The optional index, for sorting QEvents with identical offsets.
+
+
+
+
+offset
+The offset in milliseconds of the event.
+
+
+
+
+
+
+
+
+class nauert.qevents. PitchedQEvent ( offset : Offset = Offset((0, 1)) , pitches : Iterable [ int | float ] = () , attachments : Iterable = () , index : int | None = None ) [source]
+Pitched q-event.
+Indicates the onset of a period of pitched material in a q-event sequence.
+
+
>>> pitches = [ 0 , 1 , 4 ]
+>>> nauert . PitchedQEvent ( abjad . Offset ( 1000 ), pitches )
+PitchedQEvent(offset=Offset((1000, 1)), pitches=(NamedPitch("c'"), NamedPitch("cs'"), NamedPitch("e'")), index=None, attachments=())
+
+
+
+
+
+
+__eq__
+Is true when argument is a pitched q-event with offset, pitches, attachments and index equal to those of this pitched q-event.
+
+__hash__
+Hashes pitched q-event.
+
+__repr__
+Gets repr.
+
+attachments
+Gets attachments of pitched q-event.
+
+pitches
+Gets pitches of pitched q-event.
+
+
+
+
+
+
+overridden __eq__ ( argument ) → bool [source]
+Is true when argument is a pitched q-event with offset, pitches,
+attachments and index equal to those of this pitched q-event. Otherwise
+false.
+
+
+
+
+overridden __hash__ ( ) → int [source]
+Hashes pitched q-event.
+Required to be explicitly redefined on Python 3 if __eq__ changes.
+
+
+
+
+
+( QEvent
). __lt__ ( argument ) → bool
+Is true when epxr is a q-event with offset greater than that of this
+q-event. Otherwise false.
+
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+
+classmethod ( QEvent
). from_offset_pitches_attachments ( offset , pitches , attachments ) → QEvent
+
+
+
+
+
+
+overridden attachments
+Gets attachments of pitched q-event.
+
+
+
+
+
+( QEvent
). index
+The optional index, for sorting QEvents with identical offsets.
+
+
+
+
+
+
+( QEvent
). offset
+The offset in milliseconds of the event.
+
+
+
+
+
+pitches
+Gets pitches of pitched q-event.
+
+
+
+
+
+
+class nauert.qevents. SilentQEvent ( offset : Offset = Offset((0, 1)) , attachments : Iterable = () , index : int | None = None ) [source]
+Silent q-event.
+
+
>>> q_event = nauert . SilentQEvent ( abjad . Offset ( 1000 ))
+>>> q_event
+SilentQEvent(offset=Offset((1000, 1)), index=None, attachments=())
+
+
+
+
+
+
+__eq__
+Is true when argument is a silent q-event with offset, attachments and index equal to those of this silent q-event.
+
+__hash__
+Hashes silent q-event.
+
+attachments
+Gets attachments of silent q-event.
+
+
+
+
+
+
+overridden __eq__ ( argument ) → bool [source]
+Is true when argument is a silent q-event with offset, attachments
+and index equal to those of this silent q-event. Otherwise false.
+
+
+
+
+overridden __hash__ ( ) → int [source]
+Hashes silent q-event.
+Required to be explicitly redefined on Python 3 if __eq__ changes.
+
+
+
+
+
+( QEvent
). __lt__ ( argument ) → bool
+Is true when epxr is a q-event with offset greater than that of this
+q-event. Otherwise false.
+
+
+
+
+
+
+( QEvent
). __repr__ ( ) → str
+Gets repr.
+
+
+
+
+
+
+
+classmethod ( QEvent
). from_offset_pitches_attachments ( offset , pitches , attachments ) → QEvent
+
+
+
+
+
+
+overridden attachments
+Gets attachments of silent q-event.
+
+
+
+
+
+( QEvent
). index
+The optional index, for sorting QEvents with identical offsets.
+
+
+
+
+
+
+( QEvent
). offset
+The offset in milliseconds of the event.
+
+
+
+
+
+
+
+class nauert.qevents. TerminalQEvent ( offset : Offset = Offset((0, 1)) ) [source]
+Terminal q-event.
+
+
>>> nauert . TerminalQEvent ( abjad . Offset ( 1000 ))
+TerminalQEvent(offset=Offset((1000, 1)), index=None, attachments=())
+
+
+
+Carries no significance outside the context of a QEventSequence
.
+
+
+
+__eq__
+Is true when argument is a terminal q-event with offset equal to that of this terminal q-event.
+
+__hash__
+Hashes terminal q-event.
+
+
+
+
+
+
+overridden __eq__ ( argument ) → bool [source]
+Is true when argument is a terminal q-event with offset equal to that
+of this terminal q-event. Otherwise false.
+
+
+
+
+overridden __hash__ ( ) → int [source]
+Hashes terminal q-event.
+Required to be explicitly redefined on Python 3 if __eq__ changes.
+
+
+
+
+
+( QEvent
). __lt__ ( argument ) → bool
+Is true when epxr is a q-event with offset greater than that of this
+q-event. Otherwise false.
+
+
+
+
+
+
+( QEvent
). __repr__ ( ) → str
+Gets repr.
+
+
+
+
+
+
+
+classmethod ( QEvent
). from_offset_pitches_attachments ( offset , pitches , attachments ) → QEvent
+
+
+
+
+
+
+
+( QEvent
). attachments
+The attachments of the QEvent.
+
+
+
+
+
+
+( QEvent
). index
+The optional index, for sorting QEvents with identical offsets.
+
+
+
+
+
+
+( QEvent
). offset
+The offset in milliseconds of the event.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/qeventsequence.html b/api/nauert/qeventsequence.html
new file mode 100644
index 0000000..16e325e
--- /dev/null
+++ b/api/nauert/qeventsequence.html
@@ -0,0 +1,443 @@
+
+
+
+
+
+
+
+
+
qeventsequence — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+qeventsequence
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=1];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.qeventsequence" {
+ graph [label="nauert.qeventsequence"];
+ node [color=2];
+ "nauert.qeventsequence.QEventSequence" [URL="../api/nauert/qeventsequence.html#nauert.qeventsequence.QEventSequence",
+ color=black,
+ fontcolor=white,
+ label="QEvent\nSequence",
+ target=_top];
+ }
+ "builtins.object" -> "nauert.qeventsequence.QEventSequence";
+}
+
+
+
+
+
+class nauert.qeventsequence. QEventSequence ( sequence ) [source]
+Q-event sequence.
+Contains only pitched q-events and silent q-events, and terminates with a
+single terminal q-event.
+A q-event sequence is the primary input to the quantizer.
+
+
A q-event sequence provides a number of convenience functions to assist
+with instantiating new sequences:
+
>>> durations = ( 1000 , - 500 , 1250 , - 500 , 750 )
+>>> sequence = nauert . QEventSequence . from_millisecond_durations ( durations )
+>>> for q_event in sequence :
+... q_event
+...
+PitchedQEvent(offset=Offset((0, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+SilentQEvent(offset=Offset((1000, 1)), index=None, attachments=())
+PitchedQEvent(offset=Offset((1500, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+SilentQEvent(offset=Offset((2750, 1)), index=None, attachments=())
+PitchedQEvent(offset=Offset((3250, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+TerminalQEvent(offset=Offset((4000, 1)), index=None, attachments=())
+
+
+
+
+
+
+
+
+__contains__ ( argument ) → bool [source]
+Is true when q-event sequence contains argument
. Otherwise false.
+
+
+
+
+overridden __eq__ ( argument ) → bool [source]
+Is true when q-event sequence equals argument
. Otherwise false.
+
+
+
+
+__getitem__ ( argument : int ) → QEvent [source]
+
+__getitem__ ( argument : slice ) → tuple [ QEvent , ... ]
+Gets item or slice identified by argument .
+Returns item or slice.
+
+
+
+
+overridden __hash__ ( ) → int [source]
+Hashes q-event sequence.
+Required to be explicitly redefined on Python 3 if __eq__ changes.
+
+
+
+
+__iter__ ( ) → Iterator [ QEvent ] [source]
+Iterates q-event sequence.
+
+
+
+
+__len__ ( ) → int [source]
+Gets length of q-event sequence.
+
+
+
+
+
+classmethod from_millisecond_durations ( milliseconds : Sequence [ int | float ] , fuse_silences : bool = False ) → QEventSequence [source]
+Changes sequence of millisecond durations
to QEventSequence
:
+>>> durations = [ - 250 , 500 , - 1000 , 1250 , - 1000 ]
+>>> sequence = nauert . QEventSequence . from_millisecond_durations ( durations )
+>>> for q_event in sequence :
+... q_event
+...
+SilentQEvent(offset=Offset((0, 1)), index=None, attachments=())
+PitchedQEvent(offset=Offset((250, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+SilentQEvent(offset=Offset((750, 1)), index=None, attachments=())
+PitchedQEvent(offset=Offset((1750, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+SilentQEvent(offset=Offset((3000, 1)), index=None, attachments=())
+TerminalQEvent(offset=Offset((4000, 1)), index=None, attachments=())
+
+
+
+
+
+
+classmethod from_millisecond_offsets ( offsets : Sequence [ Offset ] ) → QEventSequence [source]
+Changes millisecond offsets
to QEventSequence
:
+>>> numbers = [ 0 , 250 , 750 , 1750 , 3000 , 4000 ]
+>>> offsets = [ abjad . Offset ( _ ) for _ in numbers ]
+>>> sequence = nauert . QEventSequence . from_millisecond_offsets ( offsets )
+>>> for q_event in sequence :
+... q_event
+...
+PitchedQEvent(offset=Offset((0, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+PitchedQEvent(offset=Offset((250, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+PitchedQEvent(offset=Offset((750, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+PitchedQEvent(offset=Offset((1750, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+PitchedQEvent(offset=Offset((3000, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+TerminalQEvent(offset=Offset((4000, 1)), index=None, attachments=())
+
+
+
+
+
+
+classmethod from_millisecond_pitch_attachment_tuples ( tuples : Iterable [ tuple ] ) → QEventSequence [source]
+Changes (millisecond-duration, pitch, attachment) tuples
into
+QEventSequence
:
+>>> durations = [ 250 , 500 , 1000 , 1250 , 1000 ]
+>>> pitches = [( 0 ,), None , ( 2 , 3 ), None , ( 1 ,)]
+>>> attachments = [( "foo" ,), (), (), (), ( "foobar" , "foo" )]
+>>> tuples = tuple ( zip ( durations , pitches , attachments ))
+>>> method = nauert . QEventSequence . from_millisecond_pitch_attachment_tuples
+>>> sequence = method ( tuples )
+>>> for q_event in sequence :
+... q_event
+...
+PitchedQEvent(offset=Offset((0, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=('foo',))
+SilentQEvent(offset=Offset((250, 1)), index=None, attachments=())
+PitchedQEvent(offset=Offset((750, 1)), pitches=(NamedPitch("d'"), NamedPitch("ef'")), index=None, attachments=())
+SilentQEvent(offset=Offset((1750, 1)), index=None, attachments=())
+PitchedQEvent(offset=Offset((3000, 1)), pitches=(NamedPitch("cs'"),), index=None, attachments=('foobar', 'foo'))
+TerminalQEvent(offset=Offset((4000, 1)), index=None, attachments=())
+
+
+
+
+
+
+classmethod from_millisecond_pitch_pairs ( pairs : Iterable [ tuple ] ) → QEventSequence [source]
+Changes (millisecond-duration, pitch) pairs
into QEventSequence
:
+>>> durations = [ 250 , 500 , 1000 , 1250 , 1000 ]
+>>> pitches = [( 0 ,), None , ( 2 , 3 ), None , ( 1 ,)]
+>>> pairs = tuple ( zip ( durations , pitches ))
+>>> sequence = nauert . QEventSequence . from_millisecond_pitch_pairs ( pairs )
+>>> for q_event in sequence :
+... q_event
+...
+PitchedQEvent(offset=Offset((0, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+SilentQEvent(offset=Offset((250, 1)), index=None, attachments=())
+PitchedQEvent(offset=Offset((750, 1)), pitches=(NamedPitch("d'"), NamedPitch("ef'")), index=None, attachments=())
+SilentQEvent(offset=Offset((1750, 1)), index=None, attachments=())
+PitchedQEvent(offset=Offset((3000, 1)), pitches=(NamedPitch("cs'"),), index=None, attachments=())
+TerminalQEvent(offset=Offset((4000, 1)), index=None, attachments=())
+
+
+
+
+
+
+classmethod from_tempo_scaled_durations ( durations : Sequence [ Duration | tuple [ int , int ] ] , tempo : MetronomeMark ) → QEventSequence [source]
+Changes durations
, scaled by tempo
into a QEventSequence
:
+
+
>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 174 )
+>>> pairs = [( 1 , 4 ), ( - 3 , 16 ), ( 1 , 16 ), ( - 1 , 2 )]
+>>> durations = [ abjad . Duration ( _ ) for _ in pairs ]
+>>> method = nauert . QEventSequence . from_tempo_scaled_durations
+>>> sequence = method ( durations , tempo = tempo )
+>>> for q_event in sequence :
+... q_event
+...
+PitchedQEvent(offset=Offset((0, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+SilentQEvent(offset=Offset((10000, 29)), index=None, attachments=())
+PitchedQEvent(offset=Offset((17500, 29)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+SilentQEvent(offset=Offset((20000, 29)), index=None, attachments=())
+TerminalQEvent(offset=Offset((40000, 29)), index=None, attachments=())
+
+
+
+
+
+
+
+classmethod from_tempo_scaled_leaves ( leaves , tempo = None ) → QEventSequence [source]
+Changes leaves
, optionally with tempo
into a QEventSequence
:
+>>> staff = abjad . Staff ( "c'4 <d' fs'>8. r16 gqs'2" )
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 72 )
+>>> sequence = nauert . QEventSequence . from_tempo_scaled_leaves ( staff [:], tempo )
+>>> for q_event in sequence :
+... q_event
+...
+PitchedQEvent(offset=Offset((0, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+PitchedQEvent(offset=Offset((2500, 3)), pitches=(NamedPitch("d'"), NamedPitch("fs'")), index=None, attachments=())
+SilentQEvent(offset=Offset((4375, 3)), index=None, attachments=())
+PitchedQEvent(offset=Offset((5000, 3)), pitches=(NamedPitch("gqs'"),), index=None, attachments=())
+TerminalQEvent(offset=Offset((10000, 3)), index=None, attachments=())
+
+
+If tempo
is None
, all leaves in leaves
must have an
+effective, non-imprecise tempo. The millisecond-duration of each leaf
+will be determined by its effective tempo.
+
+
+
+
+
+duration_in_ms
+Get duration QEventSequence
in milliseconds:
+>>> durations = ( 1000 , - 500 , 1250 , - 500 , 750 )
+>>> sequence = nauert . QEventSequence . from_millisecond_durations ( durations )
+>>> sequence . duration_in_ms
+Duration(4000, 1)
+
+
+
+
+
+
+sequence
+Gets sequence of q-events.
+>>> durations = ( 1000 , - 500 , 1250 , - 500 , 750 )
+>>> sequence = nauert . QEventSequence . from_millisecond_durations ( durations )
+>>> for q_event in sequence . sequence :
+... q_event
+...
+PitchedQEvent(offset=Offset((0, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+SilentQEvent(offset=Offset((1000, 1)), index=None, attachments=())
+PitchedQEvent(offset=Offset((1500, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+SilentQEvent(offset=Offset((2750, 1)), index=None, attachments=())
+PitchedQEvent(offset=Offset((3250, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=())
+TerminalQEvent(offset=Offset((4000, 1)), index=None, attachments=())
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/qgrid.html b/api/nauert/qgrid.html
new file mode 100644
index 0000000..593ddaa
--- /dev/null
+++ b/api/nauert/qgrid.html
@@ -0,0 +1,1280 @@
+
+
+
+
+
+
+
+
+
qgrid — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+qgrid
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph "cluster_abjad.rhythmtrees" {
+ graph [label="abjad.rhythmtrees"];
+ node [color=1];
+ "abjad.rhythmtrees.RhythmTreeContainer" [label="Rhythm\nTree\nContainer"];
+ "abjad.rhythmtrees.RhythmTreeNode" [label="Rhythm\nTree\nNode"];
+ "abjad.rhythmtrees.RhythmTreeNode" -> "abjad.rhythmtrees.RhythmTreeContainer";
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=2];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.qgrid" {
+ graph [label="nauert.qgrid"];
+ node [color=3];
+ "nauert.qgrid.QGrid" [URL="../api/nauert/qgrid.html#nauert.qgrid.QGrid",
+ color=black,
+ fontcolor=white,
+ label=QGrid,
+ target=_top];
+ "nauert.qgrid.QGridContainer" [URL="../api/nauert/qgrid.html#nauert.qgrid.QGridContainer",
+ color=black,
+ fontcolor=white,
+ label="QGrid\nContainer",
+ target=_top];
+ "nauert.qgrid.QGridLeaf" [URL="../api/nauert/qgrid.html#nauert.qgrid.QGridLeaf",
+ color=black,
+ fontcolor=white,
+ label="QGrid\nLeaf",
+ target=_top];
+ }
+ subgraph "cluster_uqbar.containers.unique_tree" {
+ graph [label="uqbar.containers.unique_tree"];
+ node [color=4];
+ "uqbar.containers.unique_tree.UniqueTreeContainer" [label="Unique\nTree\nContainer"];
+ "uqbar.containers.unique_tree.UniqueTreeList" [label="Unique\nTree\nList"];
+ "uqbar.containers.unique_tree.UniqueTreeNode" [label="Unique\nTree\nNode"];
+ "uqbar.containers.unique_tree.UniqueTreeContainer" -> "uqbar.containers.unique_tree.UniqueTreeList";
+ "uqbar.containers.unique_tree.UniqueTreeNode" -> "uqbar.containers.unique_tree.UniqueTreeContainer";
+ }
+ "abjad.rhythmtrees.RhythmTreeContainer" -> "nauert.qgrid.QGridContainer";
+ "abjad.rhythmtrees.RhythmTreeNode" -> "nauert.qgrid.QGridLeaf";
+ "builtins.object" -> "abjad.rhythmtrees.RhythmTreeNode";
+ "builtins.object" -> "nauert.qgrid.QGrid";
+ "builtins.object" -> "uqbar.containers.unique_tree.UniqueTreeNode";
+ "uqbar.containers.unique_tree.UniqueTreeList" -> "abjad.rhythmtrees.RhythmTreeContainer";
+ "uqbar.containers.unique_tree.UniqueTreeNode" -> "nauert.qgrid.QGridLeaf";
+}
+
+
+
+
+
+class nauert.qgrid. QGrid ( root_node : QGridLeaf | QGridContainer | None = None , next_downbeat : QGridLeaf | None = None ) [source]
+Q-grid.
+Rhythm-tree-based model for how millisecond attack points collapse onto the
+offsets generated by a nested rhythmic structure.
+
+
QGrids
model not only the internal nodes of the nesting structure,
+but also the downbeat to the “next” QGrid
, allowing events which
+occur very late within one structure to collapse virtually onto the
+beginning of the next structure.
+
QEventProxies
can be “loaded in” to the node contained by the
+QGrid
closest to their virtual offset:
+
>>> q_grid = nauert . QGrid ()
+>>> q_event_a = nauert . PitchedQEvent ( abjad . Offset ( 250 ), [ 0 ])
+>>> q_event_b = nauert . PitchedQEvent ( abjad . Offset ( 750 ), [ 1 ])
+>>> proxy_a = nauert . QEventProxy ( q_event_a , abjad . Offset ( 0.25 ))
+>>> proxy_b = nauert . QEventProxy ( q_event_b , abjad . Offset ( 0.75 ))
+>>> q_grid . fit_q_events ([ proxy_a , proxy_b ])
+
+
+
>>> for q_event_proxy in q_grid . root_node . q_event_proxies :
+... q_event_proxy
+...
+QEventProxy(q_event=PitchedQEvent(offset=Offset((250, 1)), pitches=(NamedPitch("c'"),), index=None, attachments=()), offset=Offset((1, 4)))
+
+
+
>>> for q_event_proxy in q_grid . next_downbeat . q_event_proxies :
+... q_event_proxy
+...
+QEventProxy(q_event=PitchedQEvent(offset=Offset((750, 1)), pitches=(NamedPitch("cs'"),), index=None, attachments=()), offset=Offset((3, 4)))
+
+
+
+Used internally by the quantize
function.
+
+
+
+__call__
+Calls q-grid.
+
+__copy__
+Copies q-grid.
+
+__eq__
+Is true if argument is a q-grid with root node and next downbeat equal to those of this q-grid.
+
+__hash__
+Hashes q-grid.
+
+__repr__
+Gets repr.
+
+distance
+The computed total distance (divided by the number of QEventProxy
objects) of the offset of each QEventProxy
contained by the QGrid
to the offset of the QGridLeaf
to which the QEventProxy
is attached.
+
+fit_q_events
+Fits each QEventProxy
in q_event_proxies
onto the contained QGridLeaf
whose offset is nearest.
+
+leaves
+Gets all of the leaf nodes in the QGrid, including the next downbeat's node.
+
+next_downbeat
+Gets the node representing the "next" downbeat after the contents of the QGrid's tree.
+
+offsets
+Gets the offsets between 0 and 1 of all of the leaf nodes in the QGrid.
+
+pretty_rtm_format
+Gets the pretty RTM-format of the root node of the QGrid
.
+
+regroup_leaves_with_unencessary_divisions
+Regroups leaves that belong to the same parent in which only the first leaf contains q_event_prox[y|ies].
+
+root_node
+Gets the root node of the QGrid
.
+
+rtm_format
+Gets the RTM format of the root node of the QGrid
.
+
+sort_q_events_by_index
+Sorts QEventProxies
attached to each QGridLeaf
in a QGrid
by their index.
+
+subdivide_leaf
+Replaces the QGridLeaf
leaf
contained in a QGrid
by a QGridContainer
containing QGridLeaves
with durations equal to the ratio described in subdivisions
+
+subdivide_leaves
+Given a sequence of leaf-index:subdivision-ratio pairs pairs
, subdivide the QGridLeaves
described by the indices into QGridContainers
containing QGridLeaves
with durations equal to their respective subdivision-ratios.
+
+
+
+
+
+
+overridden __call__ ( beatspan : Duration ) → list [ Leaf | Tuplet ] [source]
+Calls q-grid.
+
+
+
+
+__copy__ ( * arguments : None ) → QGrid [source]
+Copies q-grid.
+
+
+
+
+overridden __eq__ ( argument ) → bool [source]
+Is true if argument is a q-grid with root node and next downbeat
+equal to those of this q-grid. Otherwise false.
+
+
+
+
+overridden __hash__ ( ) → int [source]
+Hashes q-grid.
+Required to be explicitly redefined on Python 3 if __eq__ changes.
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+fit_q_events ( q_event_proxies : Sequence [ QEventProxy ] ) → None [source]
+Fits each QEventProxy
in q_event_proxies
onto the contained
+QGridLeaf
whose offset is nearest.
+
+
+
+
+regroup_leaves_with_unencessary_divisions ( ) → None [source]
+Regroups leaves that belong to the same parent in which only the first
+leaf contains q_event_prox[y|ies].
+
+
+
+
+sort_q_events_by_index ( ) → None [source]
+Sorts QEventProxies
attached to each QGridLeaf
in a QGrid
+by their index.
+
+
+
+
+subdivide_leaf ( leaf : QGridLeaf , subdivisions : Sequence [ Duration | tuple [ int , int ] | int ] ) → list [ QEventProxy ] [source]
+Replaces the QGridLeaf
leaf
contained in a QGrid
by a
+QGridContainer
containing QGridLeaves
with durations equal to
+the ratio described in subdivisions
+Returns the QEventProxies
attached to leaf
.
+
+
+
+
+subdivide_leaves ( pairs : Sequence [ tuple [ int , tuple [ int , int ] ] ] ) → list [ QEventProxy ] [source]
+Given a sequence of leaf-index:subdivision-ratio pairs pairs
,
+subdivide the QGridLeaves
described by the indices into
+QGridContainers
containing QGridLeaves
with durations equal to
+their respective subdivision-ratios.
+Returns the QEventProxies
attached to thus subdivided
+QGridLeaf
.
+
+
+
+
+
+distance
+The computed total distance (divided by the number of QEventProxy
+objects) of the offset of each QEventProxy
contained by the
+QGrid
to the offset of the QGridLeaf
to which the
+QEventProxy
is attached.
+
+
>>> q_grid = nauert . QGrid ()
+>>> q_event_a = nauert . PitchedQEvent ( abjad . Offset ( 250 ), [ 0 ], [ "A" ])
+>>> q_event_b = nauert . PitchedQEvent ( abjad . Offset ( 750 ), [ 1 ], [ "B" ])
+>>> proxy_a = nauert . QEventProxy ( q_event_a , abjad . Offset ( 0.25 ))
+>>> proxy_b = nauert . QEventProxy ( q_event_b , abjad . Offset ( 0.75 ))
+>>> q_grid . fit_q_events ([ proxy_a , proxy_b ])
+>>> print ( q_grid . rtm_format )
+1
+
+
+
>>> pairs = zip ( q_grid . leaves , q_grid . offsets , strict = True )
+>>> for index , ( leaf , offset ) in enumerate ( pairs ):
+... for q_event_proxy in leaf . q_event_proxies :
+... q_event = q_event_proxy . q_event
+... print (
+... "leaf's index: {} , leaf's offset: {} , q_event: {} " . format (
+... index , offset , q_event . attachments
+... )
+... )
+...
+leaf's index: 0, leaf's offset: 0, q_event: ('A',)
+leaf's index: 1, leaf's offset: 1, q_event: ('B',)
+
+
+
>>> q_grid . distance
+Duration(1, 4)
+
+
+
>>> q_events = q_grid . subdivide_leaves ([( 0 , ( 1 , 1 ))])
+>>> q_grid . fit_q_events ( q_events )
+>>> q_events = q_grid . subdivide_leaves ([( 0 , ( 1 , 1 ))])
+>>> q_grid . fit_q_events ( q_events )
+>>> print ( q_grid . rtm_format )
+(1 ((1 (1 1)) 1))
+
+
+
>>> pairs = zip ( q_grid . leaves , q_grid . offsets , strict = True )
+>>> for index , ( leaf , offset ) in enumerate ( pairs ):
+... for q_event_proxy in leaf . q_event_proxies :
+... q_event = q_event_proxy . q_event
+... print (
+... "leaf's index: {} , leaf's offset: {} , q_event: {} " . format (
+... index , offset , q_event . attachments
+... )
+... )
+...
+leaf's index: 1, leaf's offset: 1/4, q_event: ('A',)
+leaf's index: 2, leaf's offset: 1/2, q_event: ('B',)
+
+
+
>>> q_grid . distance
+Duration(1, 8)
+
+
+
+
+
+
+
+leaves
+Gets all of the leaf nodes in the QGrid, including the next downbeat’s
+node.
+
+
+
+
+next_downbeat
+Gets the node representing the “next” downbeat after the contents of
+the QGrid’s tree.
+
+
+
+
+offsets
+Gets the offsets between 0 and 1 of all of the leaf nodes in the QGrid.
+
+
+
+
+pretty_rtm_format
+Gets the pretty RTM-format of the root node of the QGrid
.
+
+
+
+
+root_node
+Gets the root node of the QGrid
.
+
+
+
+
+rtm_format
+Gets the RTM format of the root node of the QGrid
.
+
+
+
+
+
+
+class nauert.qgrid. QGridContainer ( pair : tuple [ int , int ] , children : Sequence [ RhythmTreeNode ] = () , * , name : str = '' ) [source]
+Q-grid container.
+
+
>>> nauert . QGridContainer (( 1 , 1 ))
+QGridContainer((1, 1))
+
+
+
+Used internally by QGrid
.
+
+
+
+
+
+
+( RhythmTreeContainer
). __add__ ( rtc : RhythmTreeContainer ) → RhythmTreeContainer
+Concatenates self
and rtc
.
+The operation a + b = c
returns a new rhythm-tree container c
+with the contents of a
followed by the contents of b
; the
+operation is noncommutative.
+
+
>>> rtc_a = abjad . rhythmtrees . parse ( "(1 (1 1 1))" )[ 0 ]
+>>> components = rtc_a ( abjad . Duration ( 1 , 2 ))
+>>> voice = abjad . Voice ( components )
+>>> leaf = abjad . select . leaf ( voice , 0 )
+>>> abjad . setting ( leaf ) . Score . proportionalNotationDuration = "#1/12"
+>>> abjad . show ( voice )
+
+
+
+
+
>>> rtc_b = abjad . rhythmtrees . parse ( "(1 (3 4))" )[ 0 ]
+>>> components = rtc_b ( abjad . Duration ( 1 , 2 ))
+>>> voice = abjad . Voice ( components )
+>>> leaf = abjad . select . leaf ( voice , 0 )
+>>> abjad . setting ( leaf ) . Score . proportionalNotationDuration = "#1/12"
+>>> abjad . show ( voice )
+
+
+
+
+
>>> rtc_c = rtc_a + rtc_b
+>>> components = rtc_c ( abjad . Duration ( 1 , 2 ))
+>>> voice = abjad . Voice ( components )
+>>> leaf = abjad . select . leaf ( voice , 0 )
+>>> abjad . setting ( leaf ) . Score . proportionalNotationDuration = "#1/12"
+>>> abjad . show ( voice )
+
+
+
+
+
The pair of c
equals the sum of the pairs of a
and b
:
+
+
+
+
+
+
+
+
+
+
+( RhythmTreeContainer
). __call__ ( duration : Duration ) → list [ Leaf | Tuplet ]
+Makes list of leaves and / or tuplets equal to duration
.
+
+
>>> string = "(1 (1 (2 (1 1 1)) 2))"
+>>> rtc = abjad . rhythmtrees . parse ( string )[ 0 ]
+>>> components = rtc ( abjad . Duration ( 1 , 1 ))
+>>> voice = abjad . Voice ( components )
+>>> abjad . setting ( voice [ 0 ]) . proportionalNotationDuration = "#1/12"
+>>> abjad . show ( voice )
+
+
+
+
+
+
+
+
+
+
+
+( UniqueTreeContainer
). __contains__ ( expr )
+
+
+
+
+
+
+( UniqueTreeList
). __delitem__ ( i )
+
+
+
+
+
+
+( UniqueTreeList
). __getitem__ ( expr )
+
+
+
+
+
+
+( RhythmTreeContainer
). __graph__ ( ** keywords ) → Graph
+Graphs rhythm-tree container.
+
+
>>> string = "(1 (1 (2 (1 1 1)) 2))"
+>>> rtc = abjad . rhythmtrees . parse ( string )[ 0 ]
+>>> abjad . graph ( rtc )
+
+
+
+
+
+
+
+
+
+( UniqueTreeContainer
). __iter__ ( )
+
+
+
+
+
+
+( UniqueTreeContainer
). __len__ ( )
+
+
+
+
+
+
+( RhythmTreeContainer
). __radd__ ( rtc ) → RhythmTreeContainer
+Adds rtc
and self
.
+
+
+
+
+
+
+( RhythmTreeContainer
). __repr__ ( ) → str
+Gets interpreter representation of rhythm-tree container.
+
+
+
+
+
+
+( UniqueTreeList
). __setitem__ ( i , new_items )
+
+
+
+
+
+
+
+( UniqueTreeList
). append ( expr )
+
+
+
+
+
+
+( UniqueTreeContainer
). depth_first ( top_down = True , prototype = None )
+
+
+
+
+
+
+( UniqueTreeList
). extend ( expr )
+
+
+
+
+
+
+( UniqueTreeList
). index ( expr )
+
+
+
+
+
+
+( UniqueTreeList
). insert ( i , expr )
+
+
+
+
+
+
+( UniqueTreeList
). pop ( i = -1 )
+
+
+
+
+
+
+( UniqueTreeContainer
). recurse ( prototype = None )
+
+
+
+
+
+
+( UniqueTreeList
). remove ( node )
+
+
+
+
+
+
+
+( UniqueTreeNode
). name
+
+
+
+
+
+
+( RhythmTreeNode
). pair
+Gets pair of rhythm-tree node.
+
+
>>> abjad . rhythmtrees . RhythmTreeLeaf (( 1 , 1 )) . pair
+(1, 1)
+
+
+
>>> abjad . rhythmtrees . RhythmTreeLeaf (( 2 , 4 )) . pair
+(2, 4)
+
+
+
+
+
+
+
+
+
+
+( UniqueTreeContainer
). children
+
+
+
+
+
+
+( UniqueTreeNode
). depth
+
+
+
+
+
+
+( RhythmTreeNode
). duration
+Gets duration of rhythm-tree node.
+
+
>>> string = "(1 ((1 (1 1)) (1 (1 1))))"
+>>> rtc = abjad . rhythmtrees . parse ( string )[ 0 ]
+>>> components = rtc ( abjad . Duration ( 1 , 1 ))
+>>> voice = abjad . Voice ( components )
+>>> score = abjad . Score ([ voice ])
+>>> abjad . setting ( score ) . proportionalNotationDuration = "#1/12"
+>>> abjad . show ( score )
+
+
+
+
+
>>> rtc . duration
+Duration(1, 1)
+
+
+
>>> rtc [ 1 ] . duration
+Duration(1, 2)
+
+
+
>>> rtc [ 1 ][ 1 ] . duration
+Duration(1, 4)
+
+
+
+
+
+
+
+
+
+( UniqueTreeNode
). graph_order
+Get graph-order tuple for node.
+>>> from uqbar.containers import UniqueTreeList , UniqueTreeNode
+>>> root_container = UniqueTreeList ( name = "root" )
+>>> outer_container = UniqueTreeList ( name = "outer" )
+>>> inner_container = UniqueTreeList ( name = "inner" )
+>>> node_a = UniqueTreeNode ( name = "a" )
+>>> node_b = UniqueTreeNode ( name = "b" )
+>>> node_c = UniqueTreeNode ( name = "c" )
+>>> node_d = UniqueTreeNode ( name = "d" )
+>>> root_container . extend ([ node_a , outer_container ])
+>>> outer_container . extend ([ inner_container , node_d ])
+>>> inner_container . extend ([ node_b , node_c ])
+
+
+>>> for node in root_container . depth_first ():
+... print ( node . name , node . graph_order )
+...
+a (0,)
+outer (1,)
+inner (1, 0)
+b (1, 0, 0)
+c (1, 0, 1)
+d (1, 1)
+
+
+
+
+
+
+
+leaves
+Gets leaves.
+
+
+
+
+
+( UniqueTreeNode
). parent
+
+
+
+
+
+
+( UniqueTreeNode
). parentage
+
+
+
+
+
+
+( RhythmTreeNode
). pretty_rtm_format
+Gets pretty-printed RTM format of rhythm-tree node.
+
+
>>> string = "(1 ((1 (1 1)) (1 (1 1))))"
+>>> rtc = abjad . rhythmtrees . parse ( string )[ 0 ]
+
+
+
>>> print ( rtc . pretty_rtm_format )
+(1 (
+ (1 (
+ 1
+ 1))
+ (1 (
+ 1
+ 1))))
+
+
+
>>> print ( rtc [ 0 ] . pretty_rtm_format )
+(1 (
+ 1
+ 1))
+
+
+
>>> print ( rtc [ 0 ][ 0 ] . pretty_rtm_format )
+1
+
+
+
+
+
+
+
+
+
+( RhythmTreeNode
). prolation
+Gets prolation of rhythm-tree node.
+
+
+
+
+
+
+( RhythmTreeNode
). prolations
+Gets prolations of rhythm-tree node.
+
+
+
+
+
+
+( UniqueTreeNode
). root
+
+
+
+
+
+
+( RhythmTreeContainer
). rtm_format
+Gets RTM format of rhythm-tree container.
+
+
>>> string = "(1 ((1 (1 1)) (1 (1 1))))"
+>>> rtc = abjad . rhythmtrees . parse ( string )[ 0 ]
+
+
+
>>> rtc . rtm_format
+'(1 ((1 (1 1)) (1 (1 1))))'
+
+
+
>>> rtc [ 0 ] . rtm_format
+'(1 (1 1))'
+
+
+
>>> rtc [ 0 ][ 0 ] . rtm_format
+'1'
+
+
+
+
+
+
+
+
+
+( RhythmTreeNode
). start_offset
+Gets start offset of rhythm-tree node.
+
+
>>> string = "(1 ((1 (1 1)) (1 (1 1))))"
+>>> rtc = abjad . rhythmtrees . parse ( string )[ 0 ]
+
+
+
>>> rtc . start_offset
+Offset((0, 1))
+
+
+
>>> rtc [ 1 ] . start_offset
+Offset((1, 2))
+
+
+
>>> rtc [ 1 ][ 1 ] . start_offset
+Offset((3, 4))
+
+
+
+
+
+
+
+
+
+( RhythmTreeNode
). stop_offset
+Gets stop offset of rhythm-tree node.
+
+
>>> string = "(1 ((1 (1 1)) (1 (1 1))))"
+>>> rtc = abjad . rhythmtrees . parse ( string )[ 0 ]
+
+
+
>>> rtc . stop_offset
+Offset((1, 1))
+
+
+
>>> rtc [ 0 ] . stop_offset
+Offset((1, 2))
+
+
+
>>> rtc [ 0 ][ 0 ] . stop_offset
+Offset((1, 4))
+
+
+
+
+
+
+
+
+
+
+class nauert.qgrid. QGridLeaf ( preprolated_duration : Duration | tuple [ int , int ] = Duration(1, 1) , q_event_proxies : Sequence [ QEventProxy ] = () , is_divisible : bool = True ) [source]
+Q-grid leaf.
+
+
>>> nauert . QGridLeaf ()
+QGridLeaf((1, 1), q_event_proxies=[], is_divisible=True)
+
+
+
+Used internally by QGrid
.
+
+
+
+
+
+overridden __call__ ( pulse_duration : Duration ) → list [ Note | Tuplet ] [source]
+Calls q-grid leaf.
+
+
+
+
+__graph__ ( ** keywords : None ) → Graph [source]
+Graphviz graph of q-grid leaf.
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+is_divisible
+Flag for whether the node may be further divided
+under some search tree.
+
+
+
+
+
+( UniqueTreeNode
). name
+
+
+
+
+
+
+( RhythmTreeNode
). pair
+Gets pair of rhythm-tree node.
+
+
>>> abjad . rhythmtrees . RhythmTreeLeaf (( 1 , 1 )) . pair
+(1, 1)
+
+
+
>>> abjad . rhythmtrees . RhythmTreeLeaf (( 2 , 4 )) . pair
+(2, 4)
+
+
+
+
+
+
+
+
+
+
+( UniqueTreeNode
). depth
+
+
+
+
+
+
+( RhythmTreeNode
). duration
+Gets duration of rhythm-tree node.
+
+
>>> string = "(1 ((1 (1 1)) (1 (1 1))))"
+>>> rtc = abjad . rhythmtrees . parse ( string )[ 0 ]
+>>> components = rtc ( abjad . Duration ( 1 , 1 ))
+>>> voice = abjad . Voice ( components )
+>>> score = abjad . Score ([ voice ])
+>>> abjad . setting ( score ) . proportionalNotationDuration = "#1/12"
+>>> abjad . show ( score )
+
+
+
+
+
>>> rtc . duration
+Duration(1, 1)
+
+
+
>>> rtc [ 1 ] . duration
+Duration(1, 2)
+
+
+
>>> rtc [ 1 ][ 1 ] . duration
+Duration(1, 4)
+
+
+
+
+
+
+
+
+
+( UniqueTreeNode
). graph_order
+Get graph-order tuple for node.
+>>> from uqbar.containers import UniqueTreeList , UniqueTreeNode
+>>> root_container = UniqueTreeList ( name = "root" )
+>>> outer_container = UniqueTreeList ( name = "outer" )
+>>> inner_container = UniqueTreeList ( name = "inner" )
+>>> node_a = UniqueTreeNode ( name = "a" )
+>>> node_b = UniqueTreeNode ( name = "b" )
+>>> node_c = UniqueTreeNode ( name = "c" )
+>>> node_d = UniqueTreeNode ( name = "d" )
+>>> root_container . extend ([ node_a , outer_container ])
+>>> outer_container . extend ([ inner_container , node_d ])
+>>> inner_container . extend ([ node_b , node_c ])
+
+
+>>> for node in root_container . depth_first ():
+... print ( node . name , node . graph_order )
+...
+a (0,)
+outer (1,)
+inner (1, 0)
+b (1, 0, 0)
+c (1, 0, 1)
+d (1, 1)
+
+
+
+
+
+
+
+
+( UniqueTreeNode
). parent
+
+
+
+
+
+
+( UniqueTreeNode
). parentage
+
+
+
+
+
+preceding_q_event_proxies
+Gets preceding q-event proxies of q-grid leaf.
+
+
+
+
+
+( RhythmTreeNode
). pretty_rtm_format
+Gets pretty-printed RTM format of rhythm-tree node.
+
+
>>> string = "(1 ((1 (1 1)) (1 (1 1))))"
+>>> rtc = abjad . rhythmtrees . parse ( string )[ 0 ]
+
+
+
>>> print ( rtc . pretty_rtm_format )
+(1 (
+ (1 (
+ 1
+ 1))
+ (1 (
+ 1
+ 1))))
+
+
+
>>> print ( rtc [ 0 ] . pretty_rtm_format )
+(1 (
+ 1
+ 1))
+
+
+
>>> print ( rtc [ 0 ][ 0 ] . pretty_rtm_format )
+1
+
+
+
+
+
+
+
+
+
+( RhythmTreeNode
). prolation
+Gets prolation of rhythm-tree node.
+
+
+
+
+
+
+( RhythmTreeNode
). prolations
+Gets prolations of rhythm-tree node.
+
+
+
+
+
+q_event_proxies
+Gets q-event proxies of q-grid leaf.
+
+
+
+
+
+( UniqueTreeNode
). root
+
+
+
+
+
+rtm_format
+Gets RTM format of q-grid leaf.
+
+
+
+
+
+( RhythmTreeNode
). start_offset
+Gets start offset of rhythm-tree node.
+
+
>>> string = "(1 ((1 (1 1)) (1 (1 1))))"
+>>> rtc = abjad . rhythmtrees . parse ( string )[ 0 ]
+
+
+
>>> rtc . start_offset
+Offset((0, 1))
+
+
+
>>> rtc [ 1 ] . start_offset
+Offset((1, 2))
+
+
+
>>> rtc [ 1 ][ 1 ] . start_offset
+Offset((3, 4))
+
+
+
+
+
+
+
+
+
+( RhythmTreeNode
). stop_offset
+Gets stop offset of rhythm-tree node.
+
+
>>> string = "(1 ((1 (1 1)) (1 (1 1))))"
+>>> rtc = abjad . rhythmtrees . parse ( string )[ 0 ]
+
+
+
>>> rtc . stop_offset
+Offset((1, 1))
+
+
+
>>> rtc [ 0 ] . stop_offset
+Offset((1, 2))
+
+
+
>>> rtc [ 0 ][ 0 ] . stop_offset
+Offset((1, 4))
+
+
+
+
+
+
+
+
+succeeding_q_event_proxies
+Gets succeeding q-event proxies of q-grid leaf.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/qschemaitems.html b/api/nauert/qschemaitems.html
new file mode 100644
index 0000000..3a577ea
--- /dev/null
+++ b/api/nauert/qschemaitems.html
@@ -0,0 +1,395 @@
+
+
+
+
+
+
+
+
+
qschemaitems — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+qschemaitems
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_abc {
+ graph [label=abc];
+ node [color=1];
+ "abc.ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",
+ label=ABC,
+ target=_top];
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=2];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.qschemaitems" {
+ graph [label="nauert.qschemaitems"];
+ node [color=3];
+ "nauert.qschemaitems.BeatwiseQSchemaItem" [URL="../api/nauert/qschemaitems.html#nauert.qschemaitems.BeatwiseQSchemaItem",
+ color=black,
+ fontcolor=white,
+ label="Beatwise\nQSchema\nItem",
+ target=_top];
+ "nauert.qschemaitems.MeasurewiseQSchemaItem" [URL="../api/nauert/qschemaitems.html#nauert.qschemaitems.MeasurewiseQSchemaItem",
+ color=black,
+ fontcolor=white,
+ label="Measurewise\nQSchema\nItem",
+ target=_top];
+ "nauert.qschemaitems.QSchemaItem" [URL="../api/nauert/qschemaitems.html#nauert.qschemaitems.QSchemaItem",
+ color=black,
+ fontcolor=white,
+ label="QSchema\nItem",
+ shape=oval,
+ style="bold, filled",
+ target=_top];
+ "nauert.qschemaitems.QSchemaItem" -> "nauert.qschemaitems.BeatwiseQSchemaItem";
+ "nauert.qschemaitems.QSchemaItem" -> "nauert.qschemaitems.MeasurewiseQSchemaItem";
+ }
+ "abc.ABC" -> "nauert.qschemaitems.QSchemaItem";
+ "builtins.object" -> "abc.ABC";
+}
+
+
+
+
+
+abstract class nauert.qschemaitems. QSchemaItem ( search_tree : SearchTree | None = None , tempo : MetronomeMark | None = None ) [source]
+Abstract q-schema item.
+Represents a change of state in the timeline of a quantization process.
+
+
+
+search_tree
+The optionally defined search tree.
+
+tempo
+The optionally defined tempo.
+
+
+
+
+
+
+search_tree
+The optionally defined search tree.
+
+
+
+
+tempo
+The optionally defined tempo.
+
+
+
+
+
+
+
+
+class nauert.qschemaitems. BeatwiseQSchemaItem ( beatspan : Duration | None = None , search_tree : SearchTree | None = None , tempo : MetronomeMark | None = None ) [source]
+Beatwise q-schema item.
+
+
Represents a change of state in the timeline of an unmetered
+quantization process:
+
>>> nauert . BeatwiseQSchemaItem ()
+BeatwiseQSchemaItem(beatspan=None, search_tree=None, tempo=None)
+
+
+
+
+
Defines a change in tempo:
+
>>> metronome_mark = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> nauert . BeatwiseQSchemaItem ( tempo = metronome_mark )
+BeatwiseQSchemaItem(beatspan=None, search_tree=None, tempo=MetronomeMark(reference_duration=Duration(1, 4), units_per_minute=60, textual_indication=None, custom_markup=None, decimal=False, hide=False))
+
+
+
+
+
Defines a change in beatspan:
+
>>> nauert . BeatwiseQSchemaItem ( beatspan = abjad . Duration ( 1 , 8 ))
+BeatwiseQSchemaItem(beatspan=Duration(1, 8), search_tree=None, tempo=None)
+
+
+
+
+
+
+__repr__
+Gets repr.
+
+beatspan
+The optionally defined beatspan duration.
+
+
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+beatspan
+The optionally defined beatspan duration.
+
+
+
+
+
+( QSchemaItem
). search_tree
+The optionally defined search tree.
+
+
+
+
+
+
+( QSchemaItem
). tempo
+The optionally defined tempo.
+
+
+
+
+
+
+
+class nauert.qschemaitems. MeasurewiseQSchemaItem ( search_tree : SearchTree | None = None , tempo : MetronomeMark | None = None , time_signature : TimeSignature | None = None , use_full_measure : bool | None = None ) [source]
+Measurewise q-schema item.
+Represents a change of state in the timeline of a metered quantization process.
+>>> q_schema_item = nauert . MeasurewiseQSchemaItem ()
+
+
+
+
Defines a change in tempo:
+
>>> metronome_mark = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> mark = nauert . MeasurewiseQSchemaItem ( tempo = metronome_mark ) . tempo
+>>> abjad . lilypond ( mark )
+'\\tempo 4=60'
+
+
+
+
+
Defines a change in time signature:
+
>>> time_signature = abjad . TimeSignature (( 6 , 8 ))
+>>> nauert . MeasurewiseQSchemaItem ( time_signature = time_signature ) . time_signature
+TimeSignature(pair=(6, 8), hide=False, partial=None)
+
+
+
+
+
Tests for beatspan given a defined time signature:
+
>>> time_signature = abjad . TimeSignature (( 6 , 8 ))
+>>> nauert . MeasurewiseQSchemaItem ( time_signature = time_signature ) . beatspan
+Duration(1, 8)
+
+
+
+
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+beatspan
+The beatspan duration, if a time signature was defined.
+
+
+
+
+
+( QSchemaItem
). search_tree
+The optionally defined search tree.
+
+
+
+
+
+
+( QSchemaItem
). tempo
+The optionally defined tempo.
+
+
+
+
+
+time_signature
+The optionally defined time signature.
+
+
+
+
+use_full_measure
+If true, use the full measure as the beatspan.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/qschemas.html b/api/nauert/qschemas.html
new file mode 100644
index 0000000..c5a88fd
--- /dev/null
+++ b/api/nauert/qschemas.html
@@ -0,0 +1,845 @@
+
+
+
+
+
+
+
+
+
qschemas — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+qschemas
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_abc {
+ graph [label=abc];
+ node [color=1];
+ "abc.ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",
+ label=ABC,
+ target=_top];
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=2];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.qschemas" {
+ graph [label="nauert.qschemas"];
+ node [color=3];
+ "nauert.qschemas.BeatwiseQSchema" [URL="../api/nauert/qschemas.html#nauert.qschemas.BeatwiseQSchema",
+ color=black,
+ fontcolor=white,
+ label="Beatwise\nQSchema",
+ target=_top];
+ "nauert.qschemas.MeasurewiseQSchema" [URL="../api/nauert/qschemas.html#nauert.qschemas.MeasurewiseQSchema",
+ color=black,
+ fontcolor=white,
+ label="Measurewise\nQSchema",
+ target=_top];
+ "nauert.qschemas.QSchema" [URL="../api/nauert/qschemas.html#nauert.qschemas.QSchema",
+ color=black,
+ fontcolor=white,
+ label=QSchema,
+ shape=oval,
+ style="bold, filled",
+ target=_top];
+ "nauert.qschemas.QSchema" -> "nauert.qschemas.BeatwiseQSchema";
+ "nauert.qschemas.QSchema" -> "nauert.qschemas.MeasurewiseQSchema";
+ }
+ "abc.ABC" -> "nauert.qschemas.QSchema";
+ "builtins.object" -> "abc.ABC";
+}
+
+
+
+
+QSchema
+Abstract Q-schema.
+
+
+
+
+
+abstract class nauert.qschemas. QSchema ( * arguments , ** keywords ) [source]
+Abstract Q-schema.
+QSchema
allows for the specification of quantization settings
+diachronically, at any time-step of the quantization process.
+In practice, this provides a means for the composer to change the tempo,
+search-tree, time-signature etc., effectively creating a template into
+which quantized rhythms can be “poured”, without yet knowing what those
+rhythms might be, or even how much time the ultimate result will take. Like
+Abjad indicators the settings made at any given time-step via a QSchema
+instance are understood to persist until changed.
+All concrete QSchema
subclasses strongly implement default values for
+all of their parameters.
+
+
+
+
+
+overridden __call__ ( duration : Duration ) → QTarget [source]
+Calls QSchema on duration
.
+
+
+
+
+__getitem__ ( argument : int ) → dict [source]
+Gets item or slice identified by argument .
+
+
+
+
+
+item_class
+Gets schema’s item class.
+
+
+
+
+items
+Gets items dictionary.
+
+
+
+
+search_tree
+Gets default search tree.
+
+
+
+
+target_class
+Gets schema’s target class.
+
+
+
+
+target_item_class
+Gets schema’s target class’ item class.
+
+
+
+
+tempo
+Gets default tempo.
+
+
+
+
+
+
+
+
+class nauert.qschemas. BeatwiseQSchema ( * arguments , ** keywords ) [source]
+Beatwise q-schema.
+Treats beats as timestep unit.
+
+>>> q_schema = nauert . BeatwiseQSchema ()
+
+
+
Without arguments, it uses smart defaults:
+
+
+
Each time-step in a BeatwiseQSchema
is composed of three settings:
+
+
+beatspan
+search_tree
+tempo
+
+
+
These settings can be applied as global defaults for the schema via keyword
+arguments, which persist until overridden:
+
>>> beatspan = abjad . Duration ( 5 , 16 )
+>>> search_tree = nauert . UnweightedSearchTree ({ 7 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 54 )
+>>> q_schema = nauert . BeatwiseQSchema (
+... beatspan = beatspan ,
+... search_tree = search_tree ,
+... tempo = tempo ,
+... )
+
+
+
+
+
The computed value at any non-negative time-step can be found by
+subscripting:
+
>>> index = 0
+>>> for key , value in sorted ( q_schema [ index ] . items ()):
+... print ( " {} :" . format ( key ), value )
+...
+beatspan: 5/16
+search_tree: UnweightedSearchTree(definition={7: None})
+tempo: MetronomeMark(reference_duration=Duration(1, 4), units_per_minute=54, textual_indication=None, custom_markup=None, decimal=False, hide=False)
+
+
+
>>> index = 1000
+>>> for key , value in sorted ( q_schema [ index ] . items ()):
+... print ( " {} :" . format ( key ), value )
+...
+beatspan: 5/16
+search_tree: UnweightedSearchTree(definition={7: None})
+tempo: MetronomeMark(reference_duration=Duration(1, 4), units_per_minute=54, textual_indication=None, custom_markup=None, decimal=False, hide=False)
+
+
+
+
+
Per-time-step settings can be applied in a variety of ways.
+
Instantiating the schema via *arguments
with a series of either
+BeatwiseQSchemaItem
instances, or dictionaries which could be used to
+instantiate BeatwiseQSchemaItem
instances, will apply those settings
+sequentially, starting from time-step 0
:
+
>>> a = { "beatspan" : abjad . Duration ( 5 , 32 )}
+>>> b = { "beatspan" : abjad . Duration ( 3 , 16 )}
+>>> c = { "beatspan" : abjad . Duration ( 1 , 8 )}
+
+
+
>>> q_schema = nauert . BeatwiseQSchema ( a , b , c )
+
+
+
>>> q_schema [ 0 ][ "beatspan" ]
+Duration(5, 32)
+
+
+
>>> q_schema [ 1 ][ "beatspan" ]
+Duration(3, 16)
+
+
+
>>> q_schema [ 2 ][ "beatspan" ]
+Duration(1, 8)
+
+
+
>>> q_schema [ 3 ][ "beatspan" ]
+Duration(1, 8)
+
+
+
+
+
Similarly, instantiating the schema from a single dictionary, consisting
+of integer:specification pairs, or a sequence via *arguments
of (integer,
+specification) pairs, allows for applying settings to non-sequential
+time-steps:
+
>>> a = { "search_tree" : nauert . UnweightedSearchTree ({ 2 : None })}
+>>> b = { "search_tree" : nauert . UnweightedSearchTree ({ 3 : None })}
+
+
+
>>> settings = {
+... 2 : a ,
+... 4 : b ,
+... }
+
+
+
>>> q_schema = nauert . BeatwiseQSchema ( settings )
+
+
+
>>> import pprint
+>>> ust = q_schema [ 0 ][ "search_tree" ]
+>>> pprint . pprint ( ust . definition )
+{2: {2: {2: {2: None}, 3: None}, 3: None, 5: None, 7: None},
+ 3: {2: {2: None}, 3: None, 5: None},
+ 5: {2: None, 3: None},
+ 7: {2: None},
+ 11: None,
+ 13: None}
+
+
+
>>> ust = q_schema [ 1 ][ "search_tree" ]
+>>> pprint . pprint ( ust . definition )
+{2: {2: {2: {2: None}, 3: None}, 3: None, 5: None, 7: None},
+ 3: {2: {2: None}, 3: None, 5: None},
+ 5: {2: None, 3: None},
+ 7: {2: None},
+ 11: None,
+ 13: None}
+
+
+
>>> q_schema [ 2 ][ "search_tree" ]
+UnweightedSearchTree(definition={2: None})
+
+
+
>>> q_schema [ 3 ][ "search_tree" ]
+UnweightedSearchTree(definition={2: None})
+
+
+
>>> q_schema [ 4 ][ "search_tree" ]
+UnweightedSearchTree(definition={3: None})
+
+
+
>>> q_schema [ 1000 ][ "search_tree" ]
+UnweightedSearchTree(definition={3: None})
+
+
+
+
+
The following is equivalent to the above schema definition:
+
>>> q_schema = nauert . BeatwiseQSchema (
+... ( 2 , { "search_tree" : nauert . UnweightedSearchTree ({ 2 : None })}),
+... ( 4 , { "search_tree" : nauert . UnweightedSearchTree ({ 3 : None })}),
+... )
+
+
+
+
+
+
+
+
+
+( QSchema
). __call__ ( duration : Duration ) → QTarget
+Calls QSchema on duration
.
+
+
+
+
+
+
+( QSchema
). __getitem__ ( argument : int ) → dict
+Gets item or slice identified by argument .
+
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+beatspan
+Gets default beatspan of beatwise q-schema.
+
+
+
+
+overridden item_class
+Gets schema’s item class.
+
+
+
+
+
+( QSchema
). items
+Gets items dictionary.
+
+
+
+
+
+
+( QSchema
). search_tree
+Gets default search tree.
+
+
+
+
+
+overridden target_class
+Gets target class of beatwise q-schema.
+
+
+
+
+overridden target_item_class
+Gets target item class of beatwise q-schema.
+
+
+
+
+
+( QSchema
). tempo
+Gets default tempo.
+
+
+
+
+
+
+
+class nauert.qschemas. MeasurewiseQSchema ( * arguments , ** keywords ) [source]
+Measurewise q-schema.
+Treats measures as its timestep unit.
+>>> q_schema = nauert . MeasurewiseQSchema ()
+
+
+
+
Without arguments, it uses smart defaults:
+
>>> import pprint
+>>> pprint . pprint ( q_schema . search_tree . definition )
+{2: {2: {2: {2: None}, 3: None}, 3: None, 5: None, 7: None},
+ 3: {2: {2: None}, 3: None, 5: None},
+ 5: {2: None, 3: None},
+ 7: {2: None},
+ 11: None,
+ 13: None}
+
+
+
+
+
Each time-step in a MeasurewiseQSchema
is composed of four settings:
+
+
+search_tree
+tempo
+time_signature
+use_full_measure
+
+
+
These settings can be applied as global defaults for the schema via keyword
+arguments, which persist until overridden:
+
>>> search_tree = nauert . UnweightedSearchTree ({ 7 : None })
+>>> time_signature = abjad . TimeSignature (( 3 , 4 ))
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 54 )
+>>> use_full_measure = True
+>>> q_schema = nauert . MeasurewiseQSchema (
+... search_tree = search_tree ,
+... tempo = tempo ,
+... time_signature = time_signature ,
+... use_full_measure = use_full_measure ,
+... )
+
+
+
All of these settings are self-descriptive, except for
+use_full_measure
, which controls whether the measure is subdivided
+by the quantize
function into beats according to its time
+signature.
+
If use_full_measure
is False
, the time-step’s measure will be
+divided into units according to its time-signature. For example, a 4/4
+measure will be divided into 4 units, each having a beatspan of 1/4.
+
On the other hand, if use_full_measure
is set to True
, the
+time-step’s measure will not be subdivided into independent
+quantization units. This usually results in full-measure tuplets.
+
+
+
The computed value at any non-negative time-step can be found by
+subscripting:
+
>>> index = 0
+>>> for key , value in sorted ( q_schema [ index ] . items ()):
+... print ( " {} :" . format ( key ), value )
+...
+search_tree: UnweightedSearchTree(definition={7: None})
+tempo: MetronomeMark(reference_duration=Duration(1, 4), units_per_minute=54, textual_indication=None, custom_markup=None, decimal=False, hide=False)
+time_signature: TimeSignature(pair=(3, 4), hide=False, partial=None)
+use_full_measure: True
+
+
+
>>> index = 1000
+>>> for key , value in sorted ( q_schema [ index ] . items ()):
+... print ( " {} :" . format ( key ), value )
+...
+search_tree: UnweightedSearchTree(definition={7: None})
+tempo: MetronomeMark(reference_duration=Duration(1, 4), units_per_minute=54, textual_indication=None, custom_markup=None, decimal=False, hide=False)
+time_signature: TimeSignature(pair=(3, 4), hide=False, partial=None)
+use_full_measure: True
+
+
+
+
+
Per-time-step settings can be applied in a variety of ways.
+
Instantiating the schema via *arguments
with a series of either
+MeasurewiseQSchemaItem
instances, or dictionaries which could be
+used to instantiate MeasurewiseQSchemaItem
instances, will apply
+those settings sequentially, starting from time-step 0
:
+
>>> a = { "search_tree" : nauert . UnweightedSearchTree ({ 2 : None })}
+>>> b = { "search_tree" : nauert . UnweightedSearchTree ({ 3 : None })}
+>>> c = { "search_tree" : nauert . UnweightedSearchTree ({ 5 : None })}
+
+
+
>>> q_schema = nauert . MeasurewiseQSchema ( a , b , c )
+
+
+
>>> q_schema [ 0 ][ "search_tree" ]
+UnweightedSearchTree(definition={2: None})
+
+
+
>>> q_schema [ 1 ][ "search_tree" ]
+UnweightedSearchTree(definition={3: None})
+
+
+
>>> q_schema [ 2 ][ "search_tree" ]
+UnweightedSearchTree(definition={5: None})
+
+
+
>>> q_schema [ 1000 ][ "search_tree" ]
+UnweightedSearchTree(definition={5: None})
+
+
+
+
+
Similarly, instantiating the schema from a single dictionary,
+consisting of integer:specification pairs, or a sequence via
+*arguments
of (integer, specification) pairs, allows for applying
+settings to non-sequential time-steps:
+
>>> a = { "time_signature" : abjad . TimeSignature (( 7 , 32 ))}
+>>> b = { "time_signature" : abjad . TimeSignature (( 3 , 4 ))}
+>>> c = { "time_signature" : abjad . TimeSignature (( 5 , 8 ))}
+
+
+
>>> settings = {
+... 2 : a ,
+... 4 : b ,
+... 6 : c ,
+... }
+
+
+
>>> q_schema = nauert . MeasurewiseQSchema ( settings )
+
+
+
>>> q_schema [ 0 ][ "time_signature" ]
+TimeSignature(pair=(4, 4), hide=False, partial=None)
+
+
+
>>> q_schema [ 1 ][ "time_signature" ]
+TimeSignature(pair=(4, 4), hide=False, partial=None)
+
+
+
>>> q_schema [ 2 ][ "time_signature" ]
+TimeSignature(pair=(7, 32), hide=False, partial=None)
+
+
+
>>> q_schema [ 3 ][ "time_signature" ]
+TimeSignature(pair=(7, 32), hide=False, partial=None)
+
+
+
>>> q_schema [ 4 ][ "time_signature" ]
+TimeSignature(pair=(3, 4), hide=False, partial=None)
+
+
+
>>> q_schema [ 5 ][ "time_signature" ]
+TimeSignature(pair=(3, 4), hide=False, partial=None)
+
+
+
>>> q_schema [ 6 ][ "time_signature" ]
+TimeSignature(pair=(5, 8), hide=False, partial=None)
+
+
+
>>> q_schema [ 1000 ][ "time_signature" ]
+TimeSignature(pair=(5, 8), hide=False, partial=None)
+
+
+
+
+
The following is equivalent to the above schema definition:
+
>>> q_schema = nauert . MeasurewiseQSchema (
+... ( 2 , { "time_signature" : abjad . TimeSignature (( 7 , 32 ))}),
+... ( 4 , { "time_signature" : abjad . TimeSignature (( 3 , 4 ))}),
+... ( 6 , { "time_signature" : abjad . TimeSignature (( 5 , 8 ))}),
+... )
+
+
+
+
+
+
+
+
+
+( QSchema
). __call__ ( duration : Duration ) → QTarget
+Calls QSchema on duration
.
+
+
+
+
+
+
+( QSchema
). __getitem__ ( argument : int ) → dict
+Gets item or slice identified by argument .
+
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+overridden item_class
+Gets item class of measurewise q-schema.
+
+
+
+
+
+( QSchema
). items
+Gets items dictionary.
+
+
+
+
+
+
+( QSchema
). search_tree
+Gets default search tree.
+
+
+
+
+
+overridden target_class
+Gets target class of measurewise q-schema.
+
+
+
+
+overridden target_item_class
+Gets target item class of measurewise q-schema.
+
+
+
+
+
+( QSchema
). tempo
+Gets default tempo.
+
+
+
+
+
+time_signature
+Gets default time signature of measurewise q-schema.
+
+
>>> q_schema = nauert . MeasurewiseQSchema ( time_signature = abjad . TimeSignature (( 3 , 4 )))
+>>> q_schema . time_signature
+TimeSignature(pair=(3, 4), hide=False, partial=None)
+
+
+
+
+
If there are multiple time signatures in the QSchema, this returns
+the default time signature of (4, 4).
+
>>> a = { "time_signature" : abjad . TimeSignature (( 7 , 32 ))}
+>>> b = { "time_signature" : abjad . TimeSignature (( 3 , 4 ))}
+>>> c = { "time_signature" : abjad . TimeSignature (( 5 , 8 ))}
+
+
+
>>> settings = {
+... 2 : a ,
+... 4 : b ,
+... 6 : c ,
+... }
+
+
+
>>> q_schema = nauert . MeasurewiseQSchema ( settings )
+>>> q_schema . time_signature
+TimeSignature(pair=(4, 4), hide=False, partial=None)
+
+
+
+
+
+
+
+use_full_measure
+Is true when class uses full-measure-as-beatspan default.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/qtargetitems.html b/api/nauert/qtargetitems.html
new file mode 100644
index 0000000..bb1b663
--- /dev/null
+++ b/api/nauert/qtargetitems.html
@@ -0,0 +1,707 @@
+
+
+
+
+
+
+
+
+
qtargetitems — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+qtargetitems
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_abc {
+ graph [label=abc];
+ node [color=1];
+ "abc.ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",
+ label=ABC,
+ target=_top];
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=2];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.qtargetitems" {
+ graph [label="nauert.qtargetitems"];
+ node [color=3];
+ "nauert.qtargetitems.QTargetBeat" [URL="../api/nauert/qtargetitems.html#nauert.qtargetitems.QTargetBeat",
+ color=black,
+ fontcolor=white,
+ label="QTarget\nBeat",
+ target=_top];
+ "nauert.qtargetitems.QTargetItem" [URL="../api/nauert/qtargetitems.html#nauert.qtargetitems.QTargetItem",
+ color=black,
+ fontcolor=white,
+ label="QTarget\nItem",
+ shape=oval,
+ style="bold, filled",
+ target=_top];
+ "nauert.qtargetitems.QTargetMeasure" [URL="../api/nauert/qtargetitems.html#nauert.qtargetitems.QTargetMeasure",
+ color=black,
+ fontcolor=white,
+ label="QTarget\nMeasure",
+ target=_top];
+ "nauert.qtargetitems.QTargetItem" -> "nauert.qtargetitems.QTargetBeat";
+ "nauert.qtargetitems.QTargetItem" -> "nauert.qtargetitems.QTargetMeasure";
+ }
+ "abc.ABC" -> "nauert.qtargetitems.QTargetItem";
+ "builtins.object" -> "abc.ABC";
+}
+
+
+
+
+QTargetItem
+Abstract class for QTargetBeat and QTargetMeasure.
+
+
+
+
+
+abstract class nauert.qtargetitems. QTargetItem [source]
+Abstract class for QTargetBeat and QTargetMeasure.
+
+
+
+
+
+duration_in_ms
+
+
+
+
+offset_in_ms
+
+
+
+
+
+
+
+
+class nauert.qtargetitems. QTargetBeat ( beatspan : Duration = Duration(0, 1) , offset_in_ms : Offset = Offset((0, 1)) , search_tree : SearchTree | None = None , tempo : MetronomeMark = MetronomeMark(reference_duration=Duration(1, 4), units_per_minute=60, textual_indication=None, custom_markup=None, decimal=False, hide=False) ) [source]
+Q-target beat.
+Represents a single beat in a quantization target.
+
+
>>> beatspan = abjad . Duration ( 1 , 8 )
+>>> offset_in_ms = abjad . Offset ( 1500 )
+>>> search_tree = nauert . UnweightedSearchTree ({ 3 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 56 )
+>>> q_target_beat = nauert . QTargetBeat (
+... beatspan = beatspan ,
+... offset_in_ms = offset_in_ms ,
+... search_tree = search_tree ,
+... tempo = tempo ,
+... )
+
+
+
+Not composer-safe.
+Used internally by the quantize
function.
+
+
+
+__call__
+Calls q-target beat.
+
+__repr__
+Gets repr.
+
+beatspan
+Beatspan of q-target beat.
+
+duration_in_ms
+Duration in milliseconds of the q-target beat.
+
+offset_in_ms
+Offset in milliseconds of q-target beat.
+
+q_events
+A list for storing QEventProxy
instances.
+
+q_grid
+The QGrid
instance selected by a Heuristic
.
+
+q_grids
+A tuple of QGrids
generated by a QuantizationJob
.
+
+search_tree
+Search tree of q-target beat.
+
+tempo
+Gets tempo of q-target beat.
+
+
+
+
+
+
+overridden __call__ ( job_id : int ) → QuantizationJob | None [source]
+Calls q-target beat.
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+beatspan
+Beatspan of q-target beat.
+>>> beatspan = abjad . Duration ( 1 , 8 )
+>>> offset_in_ms = abjad . Offset ( 1500 )
+>>> search_tree = nauert . UnweightedSearchTree ({ 3 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 56 )
+
+
+>>> q_target_beat = nauert . QTargetBeat (
+... beatspan = beatspan ,
+... offset_in_ms = offset_in_ms ,
+... search_tree = search_tree ,
+... tempo = tempo ,
+... )
+
+
+>>> q_target_beat . beatspan
+Duration(1, 8)
+
+
+
+
+
+
+overridden duration_in_ms
+Duration in milliseconds of the q-target beat.
+>>> beatspan = abjad . Duration ( 1 , 8 )
+>>> offset_in_ms = abjad . Offset ( 1500 )
+>>> search_tree = nauert . UnweightedSearchTree ({ 3 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 56 )
+
+
+>>> q_target_beat = nauert . QTargetBeat (
+... beatspan = beatspan ,
+... offset_in_ms = offset_in_ms ,
+... search_tree = search_tree ,
+... tempo = tempo ,
+... )
+
+
+>>> q_target_beat . duration_in_ms
+Duration(3750, 7)
+
+
+
+
+
+
+overridden offset_in_ms
+Offset in milliseconds of q-target beat.
+>>> beatspan = abjad . Duration ( 1 , 8 )
+>>> offset_in_ms = abjad . Offset ( 1500 )
+>>> search_tree = nauert . UnweightedSearchTree ({ 3 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 56 )
+
+
+>>> q_target_beat = nauert . QTargetBeat (
+... beatspan = beatspan ,
+... offset_in_ms = offset_in_ms ,
+... search_tree = search_tree ,
+... tempo = tempo ,
+... )
+
+
+>>> q_target_beat . offset_in_ms
+Offset((1500, 1))
+
+
+
+
+
+
+q_events
+A list for storing QEventProxy
instances.
+Used internally by the quantize
function.
+
+
+
+
+q_grid
+The QGrid
instance selected by a Heuristic
.
+Used internally by the quantize
function.
+
+
+
+
+q_grids
+A tuple of QGrids
generated by a QuantizationJob
.
+Used internally by the quantize
function.
+
+
+
+
+search_tree
+Search tree of q-target beat.
+>>> beatspan = abjad . Duration ( 1 , 8 )
+>>> offset_in_ms = abjad . Offset ( 1500 )
+>>> search_tree = nauert . UnweightedSearchTree ({ 3 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 56 )
+
+
+>>> q_target_beat = nauert . QTargetBeat (
+... beatspan = beatspan ,
+... offset_in_ms = offset_in_ms ,
+... search_tree = search_tree ,
+... tempo = tempo ,
+... )
+
+
+>>> q_target_beat . search_tree
+UnweightedSearchTree(definition={3: None})
+
+
+
+
+
+
+tempo
+Gets tempo of q-target beat.
+>>> beatspan = abjad . Duration ( 1 , 8 )
+>>> offset_in_ms = abjad . Offset ( 1500 )
+>>> search_tree = nauert . UnweightedSearchTree ({ 3 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 56 )
+>>> q_target_beat = nauert . QTargetBeat (
+... beatspan = beatspan ,
+... offset_in_ms = offset_in_ms ,
+... search_tree = search_tree ,
+... tempo = tempo ,
+... )
+>>> abjad . lilypond ( q_target_beat . tempo )
+'\\tempo 4=56'
+
+
+
+
+
+
+
+
+class nauert.qtargetitems. QTargetMeasure ( offset_in_ms : Offset = Offset((0, 1)) , search_tree : SearchTree | None = None , time_signature : TimeSignature = TimeSignature(pair=(4, 4), hide=False, partial=None) , tempo : MetronomeMark = MetronomeMark(reference_duration=Duration(1, 1), units_per_minute=None, textual_indication=None, custom_markup=None, decimal=False, hide=False) , use_full_measure : bool = False ) [source]
+Q-target measure.
+Represents a single measure in a measurewise quantization target.
+
+
>>> search_tree = nauert . UnweightedSearchTree ({ 2 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> time_signature = abjad . TimeSignature (( 4 , 4 ))
+>>> q_target_measure = nauert . QTargetMeasure (
+... offset_in_ms = abjad . Offset ( 1000 ),
+... search_tree = search_tree ,
+... tempo = tempo ,
+... time_signature = time_signature ,
+... )
+
+
+
+
+
QTargetMeasures
group QTargetBeats
:
+
>>> for q_target_beat in q_target_measure . beats :
+... print ( q_target_beat . offset_in_ms , q_target_beat . duration_in_ms )
+...
+1000 1000
+2000 1000
+3000 1000
+4000 1000
+
+
+
+
+
If use_full_measure
is set, the QTargetMeasure
will only ever
+contain a single QTargetBeat
instance:
+
>>> another_q_target_measure = nauert . QTargetMeasure (
+... offset_in_ms = abjad . Offset ( 1000 ),
+... search_tree = search_tree ,
+... tempo = tempo ,
+... time_signature = time_signature ,
+... use_full_measure = True ,
+... )
+
+
+
>>> for q_target_beat in another_q_target_measure . beats :
+... print ( q_target_beat . offset_in_ms , q_target_beat . duration_in_ms )
+...
+1000 4000
+
+
+
+Not composer-safe.
+Used internally by the quantize
function.
+
+
+
+__repr__
+Gets repr.
+
+beats
+Gets the tuple of QTargetBeats
contained by the QTargetMeasure
.
+
+duration_in_ms
+Gets duration in milliseconds of the QTargetMeasure
:
+
+offset_in_ms
+Gets offset in milliseconds of the QTargetMeasure
:
+
+search_tree
+Gets the search tree of QTargetMeasure
:
+
+tempo
+Gets the tempo of QTargetMeasure
:
+
+time_signature
+Gets the time signature of the QTargetMeasure
:
+
+use_full_measure
+Is true when QTargetMeasure
uses full measures:
+
+
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+beats
+Gets the tuple of QTargetBeats
contained by the QTargetMeasure
.
+
+
>>> search_tree = nauert . UnweightedSearchTree ({ 2 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> time_signature = abjad . TimeSignature (( 4 , 4 ))
+
+
+
>>> q_target_measure = nauert . QTargetMeasure (
+... offset_in_ms = abjad . Offset ( 1000 ),
+... search_tree = search_tree ,
+... tempo = tempo ,
+... time_signature = time_signature ,
+... )
+
+
+
>>> for q_target_beat in q_target_measure . beats :
+... q_target_beat . offset_in_ms
+...
+Offset((1000, 1))
+Offset((2000, 1))
+Offset((3000, 1))
+Offset((4000, 1))
+
+
+
+
+
+
+
+overridden duration_in_ms
+Gets duration in milliseconds of the QTargetMeasure
:
+
+
>>> search_tree = nauert . UnweightedSearchTree ({ 2 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> time_signature = abjad . TimeSignature (( 4 , 4 ))
+
+
+
>>> q_target_measure = nauert . QTargetMeasure (
+... offset_in_ms = abjad . Offset ( 1000 ),
+... search_tree = search_tree ,
+... tempo = tempo ,
+... time_signature = time_signature ,
+... )
+
+
+
>>> q_target_measure . duration_in_ms
+Duration(4000, 1)
+
+
+
+
+
+
+
+overridden offset_in_ms
+Gets offset in milliseconds of the QTargetMeasure
:
+
+
>>> search_tree = nauert . UnweightedSearchTree ({ 2 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> time_signature = abjad . TimeSignature (( 4 , 4 ))
+
+
+
>>> q_target_measure = nauert . QTargetMeasure (
+... offset_in_ms = abjad . Offset ( 1000 ),
+... search_tree = search_tree ,
+... tempo = tempo ,
+... time_signature = time_signature ,
+... )
+
+
+
>>> q_target_measure . offset_in_ms
+Offset((1000, 1))
+
+
+
+
+
+
+
+search_tree
+Gets the search tree of QTargetMeasure
:
+
+
>>> search_tree = nauert . UnweightedSearchTree ({ 2 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> time_signature = abjad . TimeSignature (( 4 , 4 ))
+
+
+
>>> q_target_measure = nauert . QTargetMeasure (
+... offset_in_ms = abjad . Offset ( 1000 ),
+... search_tree = search_tree ,
+... tempo = tempo ,
+... time_signature = time_signature ,
+... )
+
+
+
>>> q_target_measure . search_tree
+UnweightedSearchTree(definition={2: None})
+
+
+
+
+
+
+
+tempo
+Gets the tempo of QTargetMeasure
:
+
+
>>> search_tree = nauert . UnweightedSearchTree ({ 2 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> time_signature = abjad . TimeSignature (( 4 , 4 ))
+
+
+
>>> q_target_measure = nauert . QTargetMeasure (
+... offset_in_ms = abjad . Offset ( 1000 ),
+... search_tree = search_tree ,
+... tempo = tempo ,
+... time_signature = time_signature ,
+... )
+
+
+
>>> abjad . lilypond ( q_target_measure . tempo )
+'\\tempo 4=60'
+
+
+
+
+
+
+
+time_signature
+Gets the time signature of the QTargetMeasure
:
+
+
>>> search_tree = nauert . UnweightedSearchTree ({ 2 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> time_signature = abjad . TimeSignature (( 4 , 4 ))
+
+
+
>>> q_target_measure = nauert . QTargetMeasure (
+... offset_in_ms = abjad . Offset ( 1000 ),
+... search_tree = search_tree ,
+... tempo = tempo ,
+... time_signature = time_signature ,
+... )
+
+
+
>>> q_target_measure . time_signature
+TimeSignature(pair=(4, 4), hide=False, partial=None)
+
+
+
+
+
+
+
+use_full_measure
+Is true when QTargetMeasure
uses full measures:
+
+
>>> search_tree = nauert . UnweightedSearchTree ({ 2 : None })
+>>> tempo = abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 60 )
+>>> time_signature = abjad . TimeSignature (( 4 , 4 ))
+
+
+
>>> q_target_measure = nauert . QTargetMeasure (
+... offset_in_ms = abjad . Offset ( 1000 ),
+... search_tree = search_tree ,
+... tempo = tempo ,
+... time_signature = time_signature ,
+... )
+
+
+
>>> q_target_measure . use_full_measure
+False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/qtargets.html b/api/nauert/qtargets.html
new file mode 100644
index 0000000..d786935
--- /dev/null
+++ b/api/nauert/qtargets.html
@@ -0,0 +1,378 @@
+
+
+
+
+
+
+
+
+
qtargets — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+qtargets
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_abc {
+ graph [label=abc];
+ node [color=1];
+ "abc.ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",
+ label=ABC,
+ target=_top];
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=2];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.qtargets" {
+ graph [label="nauert.qtargets"];
+ node [color=3];
+ "nauert.qtargets.BeatwiseQTarget" [URL="../api/nauert/qtargets.html#nauert.qtargets.BeatwiseQTarget",
+ color=black,
+ fontcolor=white,
+ label="Beatwise\nQTarget",
+ target=_top];
+ "nauert.qtargets.MeasurewiseQTarget" [URL="../api/nauert/qtargets.html#nauert.qtargets.MeasurewiseQTarget",
+ color=black,
+ fontcolor=white,
+ label="Measurewise\nQTarget",
+ target=_top];
+ "nauert.qtargets.QTarget" [URL="../api/nauert/qtargets.html#nauert.qtargets.QTarget",
+ color=black,
+ fontcolor=white,
+ label=QTarget,
+ shape=oval,
+ style="bold, filled",
+ target=_top];
+ "nauert.qtargets.QTarget" -> "nauert.qtargets.BeatwiseQTarget";
+ "nauert.qtargets.QTarget" -> "nauert.qtargets.MeasurewiseQTarget";
+ }
+ "abc.ABC" -> "nauert.qtargets.QTarget";
+ "builtins.object" -> "abc.ABC";
+}
+
+
+
+
+
+abstract class nauert.qtargets. QTarget ( items : Sequence [ QTargetItem ] | None = None ) [source]
+Q-target.
+QTarget
is created by a concrete QSchema
instance.
+QTarget
represents the mold into which the timepoints contained by a
+QSequence
instance will be poured, as structured by that QSchema
+instance.
+Not composer-safe.
+Used internally by the quantize
function.
+
+
+
+
+
+overridden __call__ ( q_event_sequence : QEventSequence , grace_handler : GraceHandler | None = None , heuristic : Heuristic | None = None , job_handler : JobHandler | None = None , attack_point_optimizer : AttackPointOptimizer | None = None , attach_tempos : bool = True ) [source]
+Calls q-target.
+
+
+
+
+
+beats
+Gets beats of q-target.
+
+
+
+
+duration_in_ms
+Gets duration of q-target in milliseconds.
+
+
+
+
+item_class
+Gets item class of q-target.
+
+
+
+
+items
+Gets items of q-target.
+
+
+
+
+
+
+
+
+class nauert.qtargets. BeatwiseQTarget ( items : Sequence [ QTargetBeat ] | None = None ) [source]
+Beatwise q-target.
+Not composer-safe.
+Used internally by the quantize
function.
+
+
+
+beats
+Gets beats of beatwise q-target.
+
+item_class
+Gets item class of beatwise q-target.
+
+
+
+
+
+
+
+
+overridden beats
+Gets beats of beatwise q-target.
+
+
+
+
+
+( QTarget
). duration_in_ms
+Gets duration of q-target in milliseconds.
+
+
+
+
+
+overridden item_class
+Gets item class of beatwise q-target.
+
+
+
+
+
+( QTarget
). items
+Gets items of q-target.
+
+
+
+
+
+
+
+class nauert.qtargets. MeasurewiseQTarget ( items : Sequence [ QTargetMeasure ] | None = None ) [source]
+Measurewise quantization target.
+Not composer-safe.
+Used internally by the quantize
function.
+
+
+
+beats
+Gets beats of measurewise q-target.
+
+item_class
+Gets item class of measurewise q-target.
+
+
+
+
+
+
+
+
+overridden beats
+Gets beats of measurewise q-target.
+
+
+
+
+
+( QTarget
). duration_in_ms
+Gets duration of q-target in milliseconds.
+
+
+
+
+
+overridden item_class
+Gets item class of measurewise q-target.
+
+
+
+
+
+( QTarget
). items
+Gets items of q-target.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/quantizationjob.html b/api/nauert/quantizationjob.html
new file mode 100644
index 0000000..70e4ae4
--- /dev/null
+++ b/api/nauert/quantizationjob.html
@@ -0,0 +1,340 @@
+
+
+
+
+
+
+
+
+
quantizationjob — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+quantizationjob
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=1];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.quantizationjob" {
+ graph [label="nauert.quantizationjob"];
+ node [color=2];
+ "nauert.quantizationjob.QuantizationJob" [URL="../api/nauert/quantizationjob.html#nauert.quantizationjob.QuantizationJob",
+ color=black,
+ fontcolor=white,
+ label="Quantization\nJob",
+ target=_top];
+ }
+ "builtins.object" -> "nauert.quantizationjob.QuantizationJob";
+}
+
+
+
+
+
+class nauert.quantizationjob. QuantizationJob ( job_id : int = 1 , search_tree : SearchTree | None = None , q_event_proxies : Sequence [ QEventProxy ] | None = None , q_grids : Sequence [ QGrid ] | None = None ) [source]
+Quantization job.
+Copiable, picklable class for generating all QGrids
which are valid
+under a given SearchTree
for a sequence of QEventProxies
.
+
+
>>> q_event_a = nauert . PitchedQEvent ( abjad . Offset ( 250 ), [ 0 , 1 ])
+>>> q_event_b = nauert . SilentQEvent ( abjad . Offset ( 500 ))
+>>> q_event_c = nauert . PitchedQEvent ( abjad . Offset ( 750 ), [ 3 , 7 ])
+>>> proxy_a = nauert . QEventProxy ( q_event_a , abjad . Offset ( 0.25 ))
+>>> proxy_b = nauert . QEventProxy ( q_event_b , abjad . Offset ( 0.5 ))
+>>> proxy_c = nauert . QEventProxy ( q_event_c , abjad . Offset ( 0.75 ))
+
+
+
>>> definition = { 2 : { 2 : None }, 3 : None , 5 : None }
+>>> search_tree = nauert . UnweightedSearchTree ( definition )
+
+
+
>>> job = nauert . QuantizationJob ( 1 , search_tree , [ proxy_a , proxy_b , proxy_c ])
+
+
+
+
+
QuantizationJob
generates QGrids
when called, and stores those
+QGrids
on its q_grids
attribute, allowing them to be recalled
+later, even if pickled:
+
>>> job ()
+>>> for q_grid in job . q_grids :
+... print ( q_grid . rtm_format )
+...
+1
+(1 (1 1 1 1 1))
+(1 (1 1 1))
+(1 (1 1))
+(1 ((1 (1 1)) (1 (1 1))))
+
+
+
+QuantizationJob
is intended to be useful in multiprocessing-enabled
+environments.
+
+
+
+__call__
+Calls quantization job.
+
+__eq__
+Is true when argument is a quantization job with job ID, search tree, q-event proxies and q-grids equal to those of this quantization job.
+
+__hash__
+Hashes quantization job.
+
+__repr__
+Gets repr.
+
+job_id
+Gets the job id of the QuantizationJob
.
+
+q_event_proxies
+Gets the QEventProxies
the QuantizationJob
was instantiated with.
+
+q_grids
+Gets generated QGrids
.
+
+search_tree
+Gets search tree QuantizationJob
was instantiated with.
+
+
+
+
+
+
+overridden __call__ ( ) → None [source]
+Calls quantization job.
+
+
+
+
+overridden __eq__ ( argument ) → bool [source]
+Is true when argument is a quantization job with job ID, search tree,
+q-event proxies and q-grids equal to those of this quantization job.
+Otherwise false.
+
+
+
+
+overridden __hash__ ( ) → int [source]
+Hashes quantization job.
+Required to be explicitly redefined on Python 3 if __eq__ changes.
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets repr.
+
+
+
+
+
+job_id
+Gets the job id of the QuantizationJob
.
+Only meaningful when the job is processed via multiprocessing, as the
+job id is necessary to reconstruct the order of jobs.
+
+
+
+
+q_event_proxies
+Gets the QEventProxies
the QuantizationJob
was instantiated with.
+>>> q_event_a = nauert . PitchedQEvent ( abjad . Offset ( 250 ), [ 0 , 1 ])
+>>> q_event_b = nauert . SilentQEvent ( abjad . Offset ( 500 ))
+>>> q_event_c = nauert . PitchedQEvent ( abjad . Offset ( 750 ), [ 3 , 7 ])
+>>> proxy_a = nauert . QEventProxy ( q_event_a , abjad . Offset ( 0.25 ))
+>>> proxy_b = nauert . QEventProxy ( q_event_b , abjad . Offset ( 0.5 ))
+>>> proxy_c = nauert . QEventProxy ( q_event_c , abjad . Offset ( 0.75 ))
+
+
+>>> definition = { 2 : { 2 : None }, 3 : None , 5 : None }
+>>> search_tree = nauert . UnweightedSearchTree ( definition )
+
+
+>>> job = nauert . QuantizationJob ( 1 , search_tree , [ proxy_a , proxy_b , proxy_c ])
+>>> job ()
+
+
+>>> for q_event_proxy in job . q_event_proxies :
+... print ( type ( q_event_proxy . q_event ) . __name__ )
+...
+PitchedQEvent
+SilentQEvent
+PitchedQEvent
+
+
+
+
+
+
+q_grids
+Gets generated QGrids
.
+>>> q_event_a = nauert . PitchedQEvent ( abjad . Offset ( 250 ), [ 0 , 1 ])
+>>> q_event_b = nauert . SilentQEvent ( abjad . Offset ( 500 ))
+>>> q_event_c = nauert . PitchedQEvent ( abjad . Offset ( 750 ), [ 3 , 7 ])
+>>> proxy_a = nauert . QEventProxy ( q_event_a , abjad . Offset ( 0.25 ))
+>>> proxy_b = nauert . QEventProxy ( q_event_b , abjad . Offset ( 0.5 ))
+>>> proxy_c = nauert . QEventProxy ( q_event_c , abjad . Offset ( 0.75 ))
+>>> definition = { 2 : { 2 : None }, 3 : None , 5 : None }
+>>> search_tree = nauert . UnweightedSearchTree ( definition )
+>>> job = nauert . QuantizationJob ( 1 , search_tree , [ proxy_a , proxy_b , proxy_c ])
+>>> job ()
+
+
+>>> for q_grid in job . q_grids :
+... print ( q_grid . rtm_format )
+...
+1
+(1 (1 1 1 1 1))
+(1 (1 1 1))
+(1 (1 1))
+(1 ((1 (1 1)) (1 (1 1))))
+
+
+
+
+
+
+search_tree
+Gets search tree QuantizationJob
was instantiated with.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/quantizer.html b/api/nauert/quantizer.html
new file mode 100644
index 0000000..cd297f6
--- /dev/null
+++ b/api/nauert/quantizer.html
@@ -0,0 +1,260 @@
+
+
+
+
+
+
+
+
+
quantizer — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+quantizer
+
+
+
+
+
+
+nauert.quantizer. quantize ( q_event_sequence : QEventSequence , q_schema : QSchema | None = None , grace_handler : GraceHandler | None = None , heuristic : Heuristic | None = None , job_handler : JobHandler | None = None , attack_point_optimizer : AttackPointOptimizer | None = None , attach_tempos : bool = True ) → Voice [source]
+Quantizer function.
+Quantizes sequences of attack-points, encapsulated by QEventSequences
,
+into score trees.
+
+
>>> durations = [ 1000 ] * 8
+>>> pitches = range ( 8 )
+>>> pairs = tuple ( zip ( durations , pitches , strict = True ))
+>>> method = nauert . QEventSequence . from_millisecond_pitch_pairs
+>>> q_event_sequence = method ( pairs )
+
+
+
+
+
Quantization defaults to outputting into a 4/4, quarter=60 musical structure:
+
>>> result = nauert . quantize ( q_event_sequence )
+>>> staff = abjad . Staff ([ result ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
However, the behavior of the quantize
function can be modified at
+call-time. Passing a QSchema
instance will alter the
+macro-structure of the output.
+
Here, we quantize using settings specified by a MeasurewiseQSchema
,
+which will cause the quantize
function to group the output into
+measures with different tempi and time signatures:
+
>>> measurewise_q_schema = nauert . MeasurewiseQSchema (
+... {
+... "tempo" : abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 78 ),
+... "time_signature" : abjad . TimeSignature (( 2 , 4 )),
+... },
+... {
+... "tempo" : abjad . MetronomeMark ( abjad . Duration ( 1 , 8 ), 57 ),
+... "time_signature" : abjad . TimeSignature (( 5 , 4 )),
+... },
+... )
+>>> result = nauert . quantize (
+... q_event_sequence ,
+... q_schema = measurewise_q_schema ,
+... )
+>>> staff = abjad . Staff ([ result ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
+
+
Here we quantize using settings specified by a BeatwiseQSchema
,
+which keeps the output of the quantize
function “flattened”,
+without measures or explicit time signatures. The default beat-wise
+settings of quarter=60 persists until the third “beatspan”:
+
>>> beatwise_q_schema = nauert . BeatwiseQSchema (
+... {
+... 2 : { "tempo" : abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 120 )},
+... 5 : { "tempo" : abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 90 )},
+... 7 : { "tempo" : abjad . MetronomeMark ( abjad . Duration ( 1 , 4 ), 30 )},
+... }
+... )
+
+
+
>>> result = nauert . quantize (
+... q_event_sequence ,
+... q_schema = beatwise_q_schema ,
+... )
+>>> staff = abjad . Staff ([ result ])
+>>> score = abjad . Score ([ staff ])
+>>> abjad . show ( score )
+
+
+
+
+
Note that TieChains
are generally fused together in the above
+example, but break at tempo changes.
+
+
+
The use of BeatwiseQSchema and MeasurewiseAttackPointOptimizer is
+not supported. Please raise an issue if you would like this to be
+supported in the future.
+
>>> q_schema = nauert . BeatwiseQSchema ()
+>>> attack_point_optimizer = nauert . MeasurewiseAttackPointOptimizer ()
+>>> result = nauert . quantize (
+... q_event_sequence ,
+... attack_point_optimizer = attack_point_optimizer ,
+... q_schema = q_schema ,
+... )
+Traceback (most recent call last):
+ File "<stdin>" , line 1 , in <module>
+ File "/Users/trevor/Repositories/Projects/nauert/source/nauert/quantizer.py" , line 285 , in quantize
+ notation = q_target (
+ q_event_sequence ,
+ ...< 4 lines >...
+ attach_tempos = attach_tempos ,
+ )
+ File "/Users/trevor/Repositories/Projects/nauert/source/nauert/qtargets.py" , line 85 , in __call__
+ raise TypeError ( message )
+TypeError : BeatwiseQTarget is not supposed to be used together with MeasurewiseAttackPointOptimizer.
+
+
+
+Other keyword arguments are:
+
+
+grace_handler
: a GraceHandler
instance controls whether and
+how grace notes are used in the output. Options currently include
+CollapsingGraceHandler
, ConcatenatingGraceHandler
and
+DiscardingGraceHandler
.
+heuristic
: a Heuristic
instance controls how output rhythms
+are selected from a pool of candidates. Options currently include
+the DistanceHeuristic
class.
+job_handler
: a JobHandler
instance controls whether or not
+parallel processing is used during the quantization process.
+Options include the SerialJobHandler
and ParallelJobHandler
+classes.
+attack_point_optimizer
: an AttackPointOptimizer
instance
+controls whether and how logical ties are re-notated.
+Options currently include MeasurewiseAttackPointOptimizer
,
+NaiveAttackPointOptimizer
and NullAttackPointOptimizer
.
+
+
+Refer to the reference pages for BeatwiseQSchema
and
+MeasurewiseQSchema
for more information on controlling the quantize
+function’s output, and to the reference on SearchTree
for information
+on controlling the rhythmic complexity of that same output.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/api/nauert/searchtrees.html b/api/nauert/searchtrees.html
new file mode 100644
index 0000000..37d37fc
--- /dev/null
+++ b/api/nauert/searchtrees.html
@@ -0,0 +1,538 @@
+
+
+
+
+
+
+
+
+
searchtrees — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+searchtrees
+
+
+digraph InheritanceGraph {
+ graph [bgcolor=transparent,
+ color=lightsteelblue2,
+ fontname=Arial,
+ fontsize=10,
+ outputorder=edgesfirst,
+ overlap=prism,
+ penwidth=2,
+ rankdir=LR,
+ splines=spline,
+ style="dashed, rounded",
+ truecolor=true];
+ node [colorscheme=pastel19,
+ fontname=Arial,
+ fontsize=10,
+ height=0,
+ penwidth=2,
+ shape=box,
+ style="filled, rounded",
+ width=0];
+ edge [color=lightslategrey,
+ penwidth=1];
+ subgraph cluster_abc {
+ graph [label=abc];
+ node [color=1];
+ "abc.ABC" [URL="https://docs.python.org/3/library/abc.html#abc.ABC",
+ label=ABC,
+ target=_top];
+ }
+ subgraph cluster_builtins {
+ graph [label=builtins];
+ node [color=2];
+ "builtins.object" [URL="https://docs.python.org/3/library/functions.html#object",
+ label=object,
+ target=_top];
+ }
+ subgraph "cluster_nauert.searchtrees" {
+ graph [label="nauert.searchtrees"];
+ node [color=3];
+ "nauert.searchtrees.SearchTree" [URL="../api/nauert/searchtrees.html#nauert.searchtrees.SearchTree",
+ color=black,
+ fontcolor=white,
+ label="Search\nTree",
+ shape=oval,
+ style="bold, filled",
+ target=_top];
+ "nauert.searchtrees.UnweightedSearchTree" [URL="../api/nauert/searchtrees.html#nauert.searchtrees.UnweightedSearchTree",
+ color=black,
+ fontcolor=white,
+ label="Unweighted\nSearch\nTree",
+ target=_top];
+ "nauert.searchtrees.WeightedSearchTree" [URL="../api/nauert/searchtrees.html#nauert.searchtrees.WeightedSearchTree",
+ color=black,
+ fontcolor=white,
+ label="Weighted\nSearch\nTree",
+ target=_top];
+ "nauert.searchtrees.SearchTree" -> "nauert.searchtrees.UnweightedSearchTree";
+ "nauert.searchtrees.SearchTree" -> "nauert.searchtrees.WeightedSearchTree";
+ }
+ "abc.ABC" -> "nauert.searchtrees.SearchTree";
+ "builtins.object" -> "abc.ABC";
+}
+
+
+
+
+
+abstract class nauert.searchtrees. SearchTree ( definition : dict | None = None ) [source]
+Abstract search tree.
+SearchTrees
encapsulate strategies for generating collections of
+QGrids
, given a set of QEventProxy
instances as input.
+They allow composers to define the degree and quality of nested rhythmic
+subdivisions in the quantization output. That is to say, they allow
+composers to specify what sorts of tuplets and ratios of pulses may be
+contained within other tuplets, to arbitrary levels of nesting.
+
+
+
+__call__
+Calls search tree.
+
+__eq__
+Is true when argument is a search tree with definition equal to that of this search tree.
+
+__hash__
+Hashes search tree.
+
+__repr__
+Gets interpreter representation.
+
+default_definition
+Gets default search tree definition.
+
+definition
+Gets search tree definition.
+
+
+
+
+
+
+overridden __call__ ( q_grid : QGrid ) → list [ QGrid ] [source]
+Calls search tree.
+
+
+
+
+overridden __eq__ ( argument ) → bool [source]
+Is true when argument is a search tree with definition equal to that of
+this search tree. Otherwise false.
+
+
+
+
+overridden __hash__ ( ) → int [source]
+Hashes search tree.
+Required to be explicitly redefined on Python 3 if __eq__ changes.
+
+
+
+
+overridden __repr__ ( ) → str [source]
+Gets interpreter representation.
+
+
+
+
+
+default_definition
+Gets default search tree definition.
+
+
+
+
+definition
+Gets search tree definition.
+
+
+
+
+
+
+
+
+class nauert.searchtrees. UnweightedSearchTree ( definition : dict | None = None ) [source]
+Unweighted search tree based on Paul Nauert’s model.
+
+
>>> import pprint
+>>> search_tree = nauert . UnweightedSearchTree ()
+>>> pprint . pprint ( search_tree . definition )
+{2: {2: {2: {2: None}, 3: None}, 3: None, 5: None, 7: None},
+ 3: {2: {2: None}, 3: None, 5: None},
+ 5: {2: None, 3: None},
+ 7: {2: None},
+ 11: None,
+ 13: None}
+
+
+
+
+
The search tree defines how nodes in a QGrid
may be subdivided, if
+they happen to contain QEvents
(or, in actuality, QEventProxy
+instances which reference QEvents
, but rescale their offsets
+between 0
and 1
).
+
In the default definition, the root node of the QGrid
may be
+subdivided into 2
, 3
, 5
, 7
, 11
or 13
equal
+parts. If divided into 2
parts, the divisions of the root node may
+be divided again into 2
, 3
, 5
or 7
, and so forth.
+
This definition is structured as a collection of nested dictionaries,
+whose keys are integers, and whose values are either the sentinel
+None
indicating no further permissable divisions, or dictionaries
+obeying these same rules, which then indicate the possibilities for
+further division.
+
Calling a UnweightedSearchTree
with a QGrid
instance will
+generate all permissable subdivided QGrids
, according to the
+definition of the called search tree:
+
>>> q_event_a = nauert . PitchedQEvent ( abjad . Offset ( 130 ), [ 0 , 1 , 4 ])
+>>> q_event_b = nauert . PitchedQEvent ( abjad . Offset ( 150 ), [ 2 , 3 , 5 ])
+>>> proxy_a = nauert . QEventProxy ( q_event_a , abjad . Offset ( 0.5 ))
+>>> proxy_b = nauert . QEventProxy ( q_event_b , abjad . Offset ( 0.667 ))
+>>> q_grid = nauert . QGrid ()
+>>> q_grid . fit_q_events ([ proxy_a , proxy_b ])
+>>> q_grids = search_tree ( q_grid )
+>>> for grid in q_grids :
+... print ( grid . rtm_format )
+...
+(1 (1 1))
+(1 (1 1 1))
+(1 (1 1 1 1 1))
+(1 (1 1 1 1 1 1 1))
+(1 (1 1 1 1 1 1 1 1 1 1 1))
+(1 (1 1 1 1 1 1 1 1 1 1 1 1 1))
+
+
+
+
+
A custom UnweightedSearchTree
may be defined by passing in a
+dictionary, as described above. The following search tree only permits
+divisions of the root node into 2s
and 3s
, and if divided into
+2
, a node may be divided once more into 2
parts:
+
>>> definition = { 2 : { 2 : None }, 3 : None }
+>>> search_tree = nauert . UnweightedSearchTree ( definition )
+
+
+
>>> q_grids = search_tree ( q_grid )
+>>> for grid in q_grids :
+... print ( grid . rtm_format )
+...
+(1 (1 1))
+(1 (1 1 1))
+
+
+
+
+
+
+default_definition
+The default search tree definition, based on the search tree given by Paul Nauert:
+
+
+
+
+
+
+
+
+( SearchTree
). __eq__ ( argument ) → bool
+Is true when argument is a search tree with definition equal to that of
+this search tree. Otherwise false.
+
+
+
+
+
+
+( SearchTree
). __hash__ ( ) → int
+Hashes search tree.
+Required to be explicitly redefined on Python 3 if __eq__ changes.
+
+
+
+
+
+
+( SearchTree
). __repr__ ( ) → str
+Gets interpreter representation.
+
+
+
+
+
+
+overridden default_definition
+The default search tree definition, based on the search tree given by
+Paul Nauert:
+>>> import pprint
+>>> search_tree = nauert . UnweightedSearchTree ()
+>>> pprint . pprint ( search_tree . default_definition )
+{2: {2: {2: {2: None}, 3: None}, 3: None, 5: None, 7: None},
+ 3: {2: {2: None}, 3: None, 5: None},
+ 5: {2: None, 3: None},
+ 7: {2: None},
+ 11: None,
+ 13: None}
+
+
+
+
+
+
+
+( SearchTree
). definition
+Gets search tree definition.
+
+
+
+
+
+
+
+class nauert.searchtrees. WeightedSearchTree ( definition : dict | None = None ) [source]
+Weighted search tree.
+
+
Allows for dividing nodes in a q-grid into parts with unequal weights.
+
>>> search_tree = nauert . WeightedSearchTree ()
+>>> search_tree . definition
+{'divisors': (2, 3, 5, 7), 'max_depth': 3, 'max_divisions': 2}
+
+
+
+
+
In WeightedSearchTree
’s definition:
+
+
+
+divisors
controls the sum of the parts of the ratio a nodemay be divided into,
+
+
+
+
+max_depth
controls how many levels of tuplet nestingare permitted, and
+
+
+
+
+max_divisions
controls the maximum permitted length of theweights in the ratio.
+
+
+
+
+
+
Thus, the default WeightedSearchTree
permits the following ratios:
+
>>> for composition in search_tree . all_compositions :
+... composition
+...
+(1, 1)
+(2, 1)
+(1, 2)
+(4, 1)
+(3, 2)
+(2, 3)
+(1, 4)
+(6, 1)
+(5, 2)
+(4, 3)
+(3, 4)
+(2, 5)
+(1, 6)
+
+
+
+
+
+
+
+
+
+
+( SearchTree
). __eq__ ( argument ) → bool
+Is true when argument is a search tree with definition equal to that of
+this search tree. Otherwise false.
+
+
+
+
+
+
+( SearchTree
). __hash__ ( ) → int
+Hashes search tree.
+Required to be explicitly redefined on Python 3 if __eq__ changes.
+
+
+
+
+
+
+( SearchTree
). __repr__ ( ) → str
+Gets interpreter representation.
+
+
+
+
+
+
+all_compositions
+Gets all compositions of weighted search tree.
+
+
+
+
+overridden default_definition
+Gets default definition of weighted search tree.
+
+
+
+
+
+( SearchTree
). definition
+Gets search tree definition.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/genindex.html b/genindex.html
new file mode 100644
index 0000000..3cfc599
--- /dev/null
+++ b/genindex.html
@@ -0,0 +1,1146 @@
+
+
+
+
+
+
+
+
Index — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+
Index
+
+
+
_
+ |
A
+ |
B
+ |
C
+ |
D
+ |
E
+ |
F
+ |
G
+ |
H
+ |
I
+ |
J
+ |
K
+ |
L
+ |
M
+ |
N
+ |
O
+ |
P
+ |
Q
+ |
R
+ |
S
+ |
T
+ |
U
+ |
W
+
+
+
_
+
+
+
A
+
+
+
B
+
+
+
C
+
+
+
D
+
+
+
E
+
+
+
F
+
+
+
G
+
+
+
H
+
+
+
I
+
+
+
J
+
+
+
K
+
+
+
L
+
+
+
M
+
+
+
N
+
+
+
O
+
+
+
P
+
+
+
Q
+
+
+
R
+
+
+
S
+
+
+
T
+
+
+
U
+
+
+
W
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..a1839c7
--- /dev/null
+++ b/index.html
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
Nauert — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/objects.inv b/objects.inv
new file mode 100644
index 0000000..d481974
Binary files /dev/null and b/objects.inv differ
diff --git a/py-modindex.html b/py-modindex.html
new file mode 100644
index 0000000..8cd99aa
--- /dev/null
+++ b/py-modindex.html
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
Python Module Index — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+ Python Module Index
+
+
+
+
+
+
+
+
+
+
Python Module Index
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/search.html b/search.html
new file mode 100644
index 0000000..00a0b30
--- /dev/null
+++ b/search.html
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
Search — nauert 3.21 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nauert
+
+
+
+
+
+
+
+
+
+
+
+ Please activate JavaScript to enable the search functionality.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/searchindex.js b/searchindex.js
new file mode 100644
index 0000000..18233db
--- /dev/null
+++ b/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({"alltitles": {"Nauert": [[17, null]], "Nauert API": [[0, null]], "attackpointoptimizers": [[1, null]], "gracehandlers": [[2, null]], "heuristics": [[3, null]], "jobhandlers": [[5, null]], "nauert": [[4, null]], "qeventproxy": [[6, null]], "qevents": [[7, null]], "qeventsequence": [[8, null]], "qgrid": [[9, null]], "qschemaitems": [[10, null]], "qschemas": [[11, null]], "qtargetitems": [[12, null]], "qtargets": [[13, null]], "quantizationjob": [[14, null]], "quantizer": [[15, null]], "searchtrees": [[16, null]]}, "docnames": ["api/index", "api/nauert/attackpointoptimizers", "api/nauert/gracehandlers", "api/nauert/heuristics", "api/nauert/index", "api/nauert/jobhandlers", "api/nauert/qeventproxy", "api/nauert/qevents", "api/nauert/qeventsequence", "api/nauert/qgrid", "api/nauert/qschemaitems", "api/nauert/qschemas", "api/nauert/qtargetitems", "api/nauert/qtargets", "api/nauert/quantizationjob", "api/nauert/quantizer", "api/nauert/searchtrees", "index"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1}, "filenames": ["api/index.rst", "api/nauert/attackpointoptimizers.rst", "api/nauert/gracehandlers.rst", "api/nauert/heuristics.rst", "api/nauert/index.rst", "api/nauert/jobhandlers.rst", "api/nauert/qeventproxy.rst", "api/nauert/qevents.rst", "api/nauert/qeventsequence.rst", "api/nauert/qgrid.rst", "api/nauert/qschemaitems.rst", "api/nauert/qschemas.rst", "api/nauert/qtargetitems.rst", "api/nauert/qtargets.rst", "api/nauert/quantizationjob.rst", "api/nauert/quantizer.rst", "api/nauert/searchtrees.rst", "index.rst"], "indexentries": {"__add__() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.__add__", false]], "__call__() (nauert.attackpointoptimizers.attackpointoptimizer method)": [[1, "nauert.attackpointoptimizers.AttackPointOptimizer.__call__", false]], "__call__() (nauert.attackpointoptimizers.measurewiseattackpointoptimizer method)": [[1, "nauert.attackpointoptimizers.MeasurewiseAttackPointOptimizer.__call__", false]], "__call__() (nauert.attackpointoptimizers.naiveattackpointoptimizer method)": [[1, "nauert.attackpointoptimizers.NaiveAttackPointOptimizer.__call__", false]], "__call__() (nauert.attackpointoptimizers.nullattackpointoptimizer method)": [[1, "nauert.attackpointoptimizers.NullAttackPointOptimizer.__call__", false]], "__call__() (nauert.gracehandlers.collapsinggracehandler method)": [[2, "nauert.gracehandlers.CollapsingGraceHandler.__call__", false]], "__call__() (nauert.gracehandlers.concatenatinggracehandler method)": [[2, "nauert.gracehandlers.ConcatenatingGraceHandler.__call__", false]], "__call__() (nauert.gracehandlers.discardinggracehandler method)": [[2, "nauert.gracehandlers.DiscardingGraceHandler.__call__", false]], "__call__() (nauert.gracehandlers.gracehandler method)": [[2, "nauert.gracehandlers.GraceHandler.__call__", false]], "__call__() (nauert.heuristics.distanceheuristic method)": [[3, "nauert.heuristics.DistanceHeuristic.__call__", false]], "__call__() (nauert.heuristics.heuristic method)": [[3, "nauert.heuristics.Heuristic.__call__", false]], "__call__() (nauert.jobhandlers.jobhandler method)": [[5, "nauert.jobhandlers.JobHandler.__call__", false]], "__call__() (nauert.jobhandlers.paralleljobhandler method)": [[5, "nauert.jobhandlers.ParallelJobHandler.__call__", false]], "__call__() (nauert.jobhandlers.serialjobhandler method)": [[5, "nauert.jobhandlers.SerialJobHandler.__call__", false]], "__call__() (nauert.qgrid.qgrid method)": [[9, "nauert.qgrid.QGrid.__call__", false]], "__call__() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.__call__", false]], "__call__() (nauert.qgrid.qgridleaf method)": [[9, "nauert.qgrid.QGridLeaf.__call__", false]], "__call__() (nauert.qschemas.beatwiseqschema method)": [[11, "nauert.qschemas.BeatwiseQSchema.__call__", false]], "__call__() (nauert.qschemas.measurewiseqschema method)": [[11, "nauert.qschemas.MeasurewiseQSchema.__call__", false]], "__call__() (nauert.qschemas.qschema method)": [[11, "nauert.qschemas.QSchema.__call__", false]], "__call__() (nauert.qtargetitems.qtargetbeat method)": [[12, "nauert.qtargetitems.QTargetBeat.__call__", false]], "__call__() (nauert.qtargets.beatwiseqtarget method)": [[13, "nauert.qtargets.BeatwiseQTarget.__call__", false]], "__call__() (nauert.qtargets.measurewiseqtarget method)": [[13, "nauert.qtargets.MeasurewiseQTarget.__call__", false]], "__call__() (nauert.qtargets.qtarget method)": [[13, "nauert.qtargets.QTarget.__call__", false]], "__call__() (nauert.quantizationjob.quantizationjob method)": [[14, "nauert.quantizationjob.QuantizationJob.__call__", false]], "__call__() (nauert.searchtrees.searchtree method)": [[16, "nauert.searchtrees.SearchTree.__call__", false]], "__call__() (nauert.searchtrees.unweightedsearchtree method)": [[16, "nauert.searchtrees.UnweightedSearchTree.__call__", false]], "__call__() (nauert.searchtrees.weightedsearchtree method)": [[16, "nauert.searchtrees.WeightedSearchTree.__call__", false]], "__contains__() (nauert.qeventsequence.qeventsequence method)": [[8, "nauert.qeventsequence.QEventSequence.__contains__", false]], "__contains__() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.__contains__", false]], "__copy__() (nauert.qgrid.qgrid method)": [[9, "nauert.qgrid.QGrid.__copy__", false]], "__delitem__() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.__delitem__", false]], "__eq__() (nauert.qeventproxy.qeventproxy method)": [[6, "nauert.qeventproxy.QEventProxy.__eq__", false]], "__eq__() (nauert.qevents.pitchedqevent method)": [[7, "nauert.qevents.PitchedQEvent.__eq__", false]], "__eq__() (nauert.qevents.silentqevent method)": [[7, "nauert.qevents.SilentQEvent.__eq__", false]], "__eq__() (nauert.qevents.terminalqevent method)": [[7, "nauert.qevents.TerminalQEvent.__eq__", false]], "__eq__() (nauert.qeventsequence.qeventsequence method)": [[8, "nauert.qeventsequence.QEventSequence.__eq__", false]], "__eq__() (nauert.qgrid.qgrid method)": [[9, "nauert.qgrid.QGrid.__eq__", false]], "__eq__() (nauert.quantizationjob.quantizationjob method)": [[14, "nauert.quantizationjob.QuantizationJob.__eq__", false]], "__eq__() (nauert.searchtrees.searchtree method)": [[16, "nauert.searchtrees.SearchTree.__eq__", false]], "__eq__() (nauert.searchtrees.unweightedsearchtree method)": [[16, "nauert.searchtrees.UnweightedSearchTree.__eq__", false]], "__eq__() (nauert.searchtrees.weightedsearchtree method)": [[16, "nauert.searchtrees.WeightedSearchTree.__eq__", false]], "__getitem__() (nauert.qeventsequence.qeventsequence method)": [[8, "nauert.qeventsequence.QEventSequence.__getitem__", false]], "__getitem__() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.__getitem__", false]], "__getitem__() (nauert.qschemas.beatwiseqschema method)": [[11, "nauert.qschemas.BeatwiseQSchema.__getitem__", false]], "__getitem__() (nauert.qschemas.measurewiseqschema method)": [[11, "nauert.qschemas.MeasurewiseQSchema.__getitem__", false]], "__getitem__() (nauert.qschemas.qschema method)": [[11, "nauert.qschemas.QSchema.__getitem__", false]], "__graph__() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.__graph__", false]], "__graph__() (nauert.qgrid.qgridleaf method)": [[9, "nauert.qgrid.QGridLeaf.__graph__", false]], "__hash__() (nauert.qeventproxy.qeventproxy method)": [[6, "nauert.qeventproxy.QEventProxy.__hash__", false]], "__hash__() (nauert.qevents.pitchedqevent method)": [[7, "nauert.qevents.PitchedQEvent.__hash__", false]], "__hash__() (nauert.qevents.silentqevent method)": [[7, "nauert.qevents.SilentQEvent.__hash__", false]], "__hash__() (nauert.qevents.terminalqevent method)": [[7, "nauert.qevents.TerminalQEvent.__hash__", false]], "__hash__() (nauert.qeventsequence.qeventsequence method)": [[8, "nauert.qeventsequence.QEventSequence.__hash__", false]], "__hash__() (nauert.qgrid.qgrid method)": [[9, "nauert.qgrid.QGrid.__hash__", false]], "__hash__() (nauert.quantizationjob.quantizationjob method)": [[14, "nauert.quantizationjob.QuantizationJob.__hash__", false]], "__hash__() (nauert.searchtrees.searchtree method)": [[16, "nauert.searchtrees.SearchTree.__hash__", false]], "__hash__() (nauert.searchtrees.unweightedsearchtree method)": [[16, "nauert.searchtrees.UnweightedSearchTree.__hash__", false]], "__hash__() (nauert.searchtrees.weightedsearchtree method)": [[16, "nauert.searchtrees.WeightedSearchTree.__hash__", false]], "__iter__() (nauert.qeventsequence.qeventsequence method)": [[8, "nauert.qeventsequence.QEventSequence.__iter__", false]], "__iter__() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.__iter__", false]], "__len__() (nauert.qeventsequence.qeventsequence method)": [[8, "nauert.qeventsequence.QEventSequence.__len__", false]], "__len__() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.__len__", false]], "__lt__() (nauert.qevents.pitchedqevent method)": [[7, "nauert.qevents.PitchedQEvent.__lt__", false]], "__lt__() (nauert.qevents.qevent method)": [[7, "nauert.qevents.QEvent.__lt__", false]], "__lt__() (nauert.qevents.silentqevent method)": [[7, "nauert.qevents.SilentQEvent.__lt__", false]], "__lt__() (nauert.qevents.terminalqevent method)": [[7, "nauert.qevents.TerminalQEvent.__lt__", false]], "__radd__() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.__radd__", false]], "__repr__() (nauert.jobhandlers.paralleljobhandlerworker method)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.__repr__", false]], "__repr__() (nauert.qeventproxy.qeventproxy method)": [[6, "nauert.qeventproxy.QEventProxy.__repr__", false]], "__repr__() (nauert.qevents.pitchedqevent method)": [[7, "nauert.qevents.PitchedQEvent.__repr__", false]], "__repr__() (nauert.qevents.qevent method)": [[7, "nauert.qevents.QEvent.__repr__", false]], "__repr__() (nauert.qevents.silentqevent method)": [[7, "nauert.qevents.SilentQEvent.__repr__", false]], "__repr__() (nauert.qevents.terminalqevent method)": [[7, "nauert.qevents.TerminalQEvent.__repr__", false]], "__repr__() (nauert.qgrid.qgrid method)": [[9, "nauert.qgrid.QGrid.__repr__", false]], "__repr__() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.__repr__", false]], "__repr__() (nauert.qgrid.qgridleaf method)": [[9, "nauert.qgrid.QGridLeaf.__repr__", false]], "__repr__() (nauert.qschemaitems.beatwiseqschemaitem method)": [[10, "nauert.qschemaitems.BeatwiseQSchemaItem.__repr__", false]], "__repr__() (nauert.qschemaitems.measurewiseqschemaitem method)": [[10, "nauert.qschemaitems.MeasurewiseQSchemaItem.__repr__", false]], "__repr__() (nauert.qschemas.beatwiseqschema method)": [[11, "nauert.qschemas.BeatwiseQSchema.__repr__", false]], "__repr__() (nauert.qschemas.measurewiseqschema method)": [[11, "nauert.qschemas.MeasurewiseQSchema.__repr__", false]], "__repr__() (nauert.qtargetitems.qtargetbeat method)": [[12, "nauert.qtargetitems.QTargetBeat.__repr__", false]], "__repr__() (nauert.qtargetitems.qtargetmeasure method)": [[12, "nauert.qtargetitems.QTargetMeasure.__repr__", false]], "__repr__() (nauert.quantizationjob.quantizationjob method)": [[14, "nauert.quantizationjob.QuantizationJob.__repr__", false]], "__repr__() (nauert.searchtrees.searchtree method)": [[16, "nauert.searchtrees.SearchTree.__repr__", false]], "__repr__() (nauert.searchtrees.unweightedsearchtree method)": [[16, "nauert.searchtrees.UnweightedSearchTree.__repr__", false]], "__repr__() (nauert.searchtrees.weightedsearchtree method)": [[16, "nauert.searchtrees.WeightedSearchTree.__repr__", false]], "__setitem__() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.__setitem__", false]], "all_compositions (nauert.searchtrees.weightedsearchtree attribute)": [[16, "nauert.searchtrees.WeightedSearchTree.all_compositions", false]], "append() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.append", false]], "attachments (nauert.qevents.pitchedqevent attribute)": [[7, "nauert.qevents.PitchedQEvent.attachments", false]], "attachments (nauert.qevents.qevent attribute)": [[7, "nauert.qevents.QEvent.attachments", false]], "attachments (nauert.qevents.silentqevent attribute)": [[7, "nauert.qevents.SilentQEvent.attachments", false]], "attachments (nauert.qevents.terminalqevent attribute)": [[7, "nauert.qevents.TerminalQEvent.attachments", false]], "attackpointoptimizer (class in nauert.attackpointoptimizers)": [[1, "nauert.attackpointoptimizers.AttackPointOptimizer", false]], "authkey (nauert.jobhandlers.paralleljobhandlerworker attribute)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.authkey", false]], "beats (nauert.qtargetitems.qtargetmeasure attribute)": [[12, "nauert.qtargetitems.QTargetMeasure.beats", false]], "beats (nauert.qtargets.beatwiseqtarget attribute)": [[13, "nauert.qtargets.BeatwiseQTarget.beats", false]], "beats (nauert.qtargets.measurewiseqtarget attribute)": [[13, "nauert.qtargets.MeasurewiseQTarget.beats", false]], "beats (nauert.qtargets.qtarget attribute)": [[13, "nauert.qtargets.QTarget.beats", false]], "beatspan (nauert.qschemaitems.beatwiseqschemaitem attribute)": [[10, "nauert.qschemaitems.BeatwiseQSchemaItem.beatspan", false]], "beatspan (nauert.qschemaitems.measurewiseqschemaitem attribute)": [[10, "nauert.qschemaitems.MeasurewiseQSchemaItem.beatspan", false]], "beatspan (nauert.qschemas.beatwiseqschema attribute)": [[11, "nauert.qschemas.BeatwiseQSchema.beatspan", false]], "beatspan (nauert.qtargetitems.qtargetbeat attribute)": [[12, "nauert.qtargetitems.QTargetBeat.beatspan", false]], "beatwiseqschema (class in nauert.qschemas)": [[11, "nauert.qschemas.BeatwiseQSchema", false]], "beatwiseqschemaitem (class in nauert.qschemaitems)": [[10, "nauert.qschemaitems.BeatwiseQSchemaItem", false]], "beatwiseqtarget (class in nauert.qtargets)": [[13, "nauert.qtargets.BeatwiseQTarget", false]], "children (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.children", false]], "close() (nauert.jobhandlers.paralleljobhandlerworker method)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.close", false]], "collapsinggracehandler (class in nauert.gracehandlers)": [[2, "nauert.gracehandlers.CollapsingGraceHandler", false]], "concatenatinggracehandler (class in nauert.gracehandlers)": [[2, "nauert.gracehandlers.ConcatenatingGraceHandler", false]], "daemon (nauert.jobhandlers.paralleljobhandlerworker attribute)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.daemon", false]], "default_definition (nauert.searchtrees.searchtree attribute)": [[16, "nauert.searchtrees.SearchTree.default_definition", false]], "default_definition (nauert.searchtrees.unweightedsearchtree attribute)": [[16, "nauert.searchtrees.UnweightedSearchTree.default_definition", false]], "default_definition (nauert.searchtrees.weightedsearchtree attribute)": [[16, "nauert.searchtrees.WeightedSearchTree.default_definition", false]], "definition (nauert.searchtrees.searchtree attribute)": [[16, "nauert.searchtrees.SearchTree.definition", false]], "definition (nauert.searchtrees.unweightedsearchtree attribute)": [[16, "nauert.searchtrees.UnweightedSearchTree.definition", false]], "definition (nauert.searchtrees.weightedsearchtree attribute)": [[16, "nauert.searchtrees.WeightedSearchTree.definition", false]], "depth (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.depth", false]], "depth (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.depth", false]], "depth_first() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.depth_first", false]], "discard_grace_rest (nauert.gracehandlers.concatenatinggracehandler attribute)": [[2, "nauert.gracehandlers.ConcatenatingGraceHandler.discard_grace_rest", false]], "discarded_q_events (nauert.gracehandlers.discardinggracehandler attribute)": [[2, "nauert.gracehandlers.DiscardingGraceHandler.discarded_q_events", false]], "discardinggracehandler (class in nauert.gracehandlers)": [[2, "nauert.gracehandlers.DiscardingGraceHandler", false]], "distance (nauert.qgrid.qgrid attribute)": [[9, "nauert.qgrid.QGrid.distance", false]], "distanceheuristic (class in nauert.heuristics)": [[3, "nauert.heuristics.DistanceHeuristic", false]], "duration (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.duration", false]], "duration (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.duration", false]], "duration_in_ms (nauert.qeventsequence.qeventsequence attribute)": [[8, "nauert.qeventsequence.QEventSequence.duration_in_ms", false]], "duration_in_ms (nauert.qtargetitems.qtargetbeat attribute)": [[12, "nauert.qtargetitems.QTargetBeat.duration_in_ms", false]], "duration_in_ms (nauert.qtargetitems.qtargetitem attribute)": [[12, "nauert.qtargetitems.QTargetItem.duration_in_ms", false]], "duration_in_ms (nauert.qtargetitems.qtargetmeasure attribute)": [[12, "nauert.qtargetitems.QTargetMeasure.duration_in_ms", false]], "duration_in_ms (nauert.qtargets.beatwiseqtarget attribute)": [[13, "nauert.qtargets.BeatwiseQTarget.duration_in_ms", false]], "duration_in_ms (nauert.qtargets.measurewiseqtarget attribute)": [[13, "nauert.qtargets.MeasurewiseQTarget.duration_in_ms", false]], "duration_in_ms (nauert.qtargets.qtarget attribute)": [[13, "nauert.qtargets.QTarget.duration_in_ms", false]], "exitcode (nauert.jobhandlers.paralleljobhandlerworker attribute)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.exitcode", false]], "extend() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.extend", false]], "fit_q_events() (nauert.qgrid.qgrid method)": [[9, "nauert.qgrid.QGrid.fit_q_events", false]], "from_millisecond_durations() (nauert.qeventsequence.qeventsequence class method)": [[8, "nauert.qeventsequence.QEventSequence.from_millisecond_durations", false]], "from_millisecond_offsets() (nauert.qeventsequence.qeventsequence class method)": [[8, "nauert.qeventsequence.QEventSequence.from_millisecond_offsets", false]], "from_millisecond_pitch_attachment_tuples() (nauert.qeventsequence.qeventsequence class method)": [[8, "nauert.qeventsequence.QEventSequence.from_millisecond_pitch_attachment_tuples", false]], "from_millisecond_pitch_pairs() (nauert.qeventsequence.qeventsequence class method)": [[8, "nauert.qeventsequence.QEventSequence.from_millisecond_pitch_pairs", false]], "from_offset_pitches_attachments() (nauert.qevents.pitchedqevent class method)": [[7, "nauert.qevents.PitchedQEvent.from_offset_pitches_attachments", false]], "from_offset_pitches_attachments() (nauert.qevents.qevent class method)": [[7, "nauert.qevents.QEvent.from_offset_pitches_attachments", false]], "from_offset_pitches_attachments() (nauert.qevents.silentqevent class method)": [[7, "nauert.qevents.SilentQEvent.from_offset_pitches_attachments", false]], "from_offset_pitches_attachments() (nauert.qevents.terminalqevent class method)": [[7, "nauert.qevents.TerminalQEvent.from_offset_pitches_attachments", false]], "from_tempo_scaled_durations() (nauert.qeventsequence.qeventsequence class method)": [[8, "nauert.qeventsequence.QEventSequence.from_tempo_scaled_durations", false]], "from_tempo_scaled_leaves() (nauert.qeventsequence.qeventsequence class method)": [[8, "nauert.qeventsequence.QEventSequence.from_tempo_scaled_leaves", false]], "grace_duration (nauert.gracehandlers.concatenatinggracehandler attribute)": [[2, "nauert.gracehandlers.ConcatenatingGraceHandler.grace_duration", false]], "gracehandler (class in nauert.gracehandlers)": [[2, "nauert.gracehandlers.GraceHandler", false]], "graph_order (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.graph_order", false]], "graph_order (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.graph_order", false]], "handle_orphaned_q_event_proxies() (nauert.gracehandlers.concatenatinggracehandler method)": [[2, "nauert.gracehandlers.ConcatenatingGraceHandler.handle_orphaned_q_event_proxies", false]], "heuristic (class in nauert.heuristics)": [[3, "nauert.heuristics.Heuristic", false]], "ident (nauert.jobhandlers.paralleljobhandlerworker attribute)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.ident", false]], "index (nauert.qeventproxy.qeventproxy attribute)": [[6, "nauert.qeventproxy.QEventProxy.index", false]], "index (nauert.qevents.pitchedqevent attribute)": [[7, "nauert.qevents.PitchedQEvent.index", false]], "index (nauert.qevents.qevent attribute)": [[7, "nauert.qevents.QEvent.index", false]], "index (nauert.qevents.silentqevent attribute)": [[7, "nauert.qevents.SilentQEvent.index", false]], "index (nauert.qevents.terminalqevent attribute)": [[7, "nauert.qevents.TerminalQEvent.index", false]], "index() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.index", false]], "insert() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.insert", false]], "is_alive() (nauert.jobhandlers.paralleljobhandlerworker method)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.is_alive", false]], "is_divisible (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.is_divisible", false]], "item_class (nauert.qschemas.beatwiseqschema attribute)": [[11, "nauert.qschemas.BeatwiseQSchema.item_class", false]], "item_class (nauert.qschemas.measurewiseqschema attribute)": [[11, "nauert.qschemas.MeasurewiseQSchema.item_class", false]], "item_class (nauert.qschemas.qschema attribute)": [[11, "nauert.qschemas.QSchema.item_class", false]], "item_class (nauert.qtargets.beatwiseqtarget attribute)": [[13, "nauert.qtargets.BeatwiseQTarget.item_class", false]], "item_class (nauert.qtargets.measurewiseqtarget attribute)": [[13, "nauert.qtargets.MeasurewiseQTarget.item_class", false]], "item_class (nauert.qtargets.qtarget attribute)": [[13, "nauert.qtargets.QTarget.item_class", false]], "items (nauert.qschemas.beatwiseqschema attribute)": [[11, "nauert.qschemas.BeatwiseQSchema.items", false]], "items (nauert.qschemas.measurewiseqschema attribute)": [[11, "nauert.qschemas.MeasurewiseQSchema.items", false]], "items (nauert.qschemas.qschema attribute)": [[11, "nauert.qschemas.QSchema.items", false]], "items (nauert.qtargets.beatwiseqtarget attribute)": [[13, "nauert.qtargets.BeatwiseQTarget.items", false]], "items (nauert.qtargets.measurewiseqtarget attribute)": [[13, "nauert.qtargets.MeasurewiseQTarget.items", false]], "items (nauert.qtargets.qtarget attribute)": [[13, "nauert.qtargets.QTarget.items", false]], "job_id (nauert.quantizationjob.quantizationjob attribute)": [[14, "nauert.quantizationjob.QuantizationJob.job_id", false]], "jobhandler (class in nauert.jobhandlers)": [[5, "nauert.jobhandlers.JobHandler", false]], "join() (nauert.jobhandlers.paralleljobhandlerworker method)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.join", false]], "kill() (nauert.jobhandlers.paralleljobhandlerworker method)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.kill", false]], "leaves (nauert.qgrid.qgrid attribute)": [[9, "nauert.qgrid.QGrid.leaves", false]], "leaves (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.leaves", false]], "measurewiseattackpointoptimizer (class in nauert.attackpointoptimizers)": [[1, "nauert.attackpointoptimizers.MeasurewiseAttackPointOptimizer", false]], "measurewiseqschema (class in nauert.qschemas)": [[11, "nauert.qschemas.MeasurewiseQSchema", false]], "measurewiseqschemaitem (class in nauert.qschemaitems)": [[10, "nauert.qschemaitems.MeasurewiseQSchemaItem", false]], "measurewiseqtarget (class in nauert.qtargets)": [[13, "nauert.qtargets.MeasurewiseQTarget", false]], "module": [[1, "module-nauert.attackpointoptimizers", false], [2, "module-nauert.gracehandlers", false], [3, "module-nauert.heuristics", false], [4, "module-nauert", false], [5, "module-nauert.jobhandlers", false], [6, "module-nauert.qeventproxy", false], [7, "module-nauert.qevents", false], [8, "module-nauert.qeventsequence", false], [9, "module-nauert.qgrid", false], [10, "module-nauert.qschemaitems", false], [11, "module-nauert.qschemas", false], [12, "module-nauert.qtargetitems", false], [13, "module-nauert.qtargets", false], [14, "module-nauert.quantizationjob", false], [15, "module-nauert.quantizer", false], [16, "module-nauert.searchtrees", false]], "naiveattackpointoptimizer (class in nauert.attackpointoptimizers)": [[1, "nauert.attackpointoptimizers.NaiveAttackPointOptimizer", false]], "name (nauert.jobhandlers.paralleljobhandlerworker attribute)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.name", false]], "name (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.name", false]], "name (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.name", false]], "nauert": [[4, "module-nauert", false]], "nauert.attackpointoptimizers": [[1, "module-nauert.attackpointoptimizers", false]], "nauert.gracehandlers": [[2, "module-nauert.gracehandlers", false]], "nauert.heuristics": [[3, "module-nauert.heuristics", false]], "nauert.jobhandlers": [[5, "module-nauert.jobhandlers", false]], "nauert.qeventproxy": [[6, "module-nauert.qeventproxy", false]], "nauert.qevents": [[7, "module-nauert.qevents", false]], "nauert.qeventsequence": [[8, "module-nauert.qeventsequence", false]], "nauert.qgrid": [[9, "module-nauert.qgrid", false]], "nauert.qschemaitems": [[10, "module-nauert.qschemaitems", false]], "nauert.qschemas": [[11, "module-nauert.qschemas", false]], "nauert.qtargetitems": [[12, "module-nauert.qtargetitems", false]], "nauert.qtargets": [[13, "module-nauert.qtargets", false]], "nauert.quantizationjob": [[14, "module-nauert.quantizationjob", false]], "nauert.quantizer": [[15, "module-nauert.quantizer", false]], "nauert.searchtrees": [[16, "module-nauert.searchtrees", false]], "next_downbeat (nauert.qgrid.qgrid attribute)": [[9, "nauert.qgrid.QGrid.next_downbeat", false]], "nullattackpointoptimizer (class in nauert.attackpointoptimizers)": [[1, "nauert.attackpointoptimizers.NullAttackPointOptimizer", false]], "offset (nauert.qeventproxy.qeventproxy attribute)": [[6, "nauert.qeventproxy.QEventProxy.offset", false]], "offset (nauert.qevents.pitchedqevent attribute)": [[7, "nauert.qevents.PitchedQEvent.offset", false]], "offset (nauert.qevents.qevent attribute)": [[7, "nauert.qevents.QEvent.offset", false]], "offset (nauert.qevents.silentqevent attribute)": [[7, "nauert.qevents.SilentQEvent.offset", false]], "offset (nauert.qevents.terminalqevent attribute)": [[7, "nauert.qevents.TerminalQEvent.offset", false]], "offset_in_ms (nauert.qtargetitems.qtargetbeat attribute)": [[12, "nauert.qtargetitems.QTargetBeat.offset_in_ms", false]], "offset_in_ms (nauert.qtargetitems.qtargetitem attribute)": [[12, "nauert.qtargetitems.QTargetItem.offset_in_ms", false]], "offset_in_ms (nauert.qtargetitems.qtargetmeasure attribute)": [[12, "nauert.qtargetitems.QTargetMeasure.offset_in_ms", false]], "offsets (nauert.qgrid.qgrid attribute)": [[9, "nauert.qgrid.QGrid.offsets", false]], "pair (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.pair", false]], "pair (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.pair", false]], "paralleljobhandler (class in nauert.jobhandlers)": [[5, "nauert.jobhandlers.ParallelJobHandler", false]], "paralleljobhandlerworker (class in nauert.jobhandlers)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker", false]], "parent (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.parent", false]], "parent (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.parent", false]], "parentage (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.parentage", false]], "parentage (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.parentage", false]], "pid (nauert.jobhandlers.paralleljobhandlerworker attribute)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.pid", false]], "pitchedqevent (class in nauert.qevents)": [[7, "nauert.qevents.PitchedQEvent", false]], "pitches (nauert.qevents.pitchedqevent attribute)": [[7, "nauert.qevents.PitchedQEvent.pitches", false]], "pop() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.pop", false]], "preceding_q_event_proxies (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.preceding_q_event_proxies", false]], "pretty_rtm_format (nauert.qgrid.qgrid attribute)": [[9, "nauert.qgrid.QGrid.pretty_rtm_format", false]], "pretty_rtm_format (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.pretty_rtm_format", false]], "pretty_rtm_format (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.pretty_rtm_format", false]], "prolation (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.prolation", false]], "prolation (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.prolation", false]], "prolations (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.prolations", false]], "prolations (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.prolations", false]], "q_event (nauert.qeventproxy.qeventproxy attribute)": [[6, "nauert.qeventproxy.QEventProxy.q_event", false]], "q_event_proxies (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.q_event_proxies", false]], "q_event_proxies (nauert.quantizationjob.quantizationjob attribute)": [[14, "nauert.quantizationjob.QuantizationJob.q_event_proxies", false]], "q_events (nauert.qtargetitems.qtargetbeat attribute)": [[12, "nauert.qtargetitems.QTargetBeat.q_events", false]], "q_grid (nauert.qtargetitems.qtargetbeat attribute)": [[12, "nauert.qtargetitems.QTargetBeat.q_grid", false]], "q_grids (nauert.qtargetitems.qtargetbeat attribute)": [[12, "nauert.qtargetitems.QTargetBeat.q_grids", false]], "q_grids (nauert.quantizationjob.quantizationjob attribute)": [[14, "nauert.quantizationjob.QuantizationJob.q_grids", false]], "qevent (class in nauert.qevents)": [[7, "nauert.qevents.QEvent", false]], "qeventproxy (class in nauert.qeventproxy)": [[6, "nauert.qeventproxy.QEventProxy", false]], "qeventsequence (class in nauert.qeventsequence)": [[8, "nauert.qeventsequence.QEventSequence", false]], "qgrid (class in nauert.qgrid)": [[9, "nauert.qgrid.QGrid", false]], "qgridcontainer (class in nauert.qgrid)": [[9, "nauert.qgrid.QGridContainer", false]], "qgridleaf (class in nauert.qgrid)": [[9, "nauert.qgrid.QGridLeaf", false]], "qschema (class in nauert.qschemas)": [[11, "nauert.qschemas.QSchema", false]], "qschemaitem (class in nauert.qschemaitems)": [[10, "nauert.qschemaitems.QSchemaItem", false]], "qtarget (class in nauert.qtargets)": [[13, "nauert.qtargets.QTarget", false]], "qtargetbeat (class in nauert.qtargetitems)": [[12, "nauert.qtargetitems.QTargetBeat", false]], "qtargetitem (class in nauert.qtargetitems)": [[12, "nauert.qtargetitems.QTargetItem", false]], "qtargetmeasure (class in nauert.qtargetitems)": [[12, "nauert.qtargetitems.QTargetMeasure", false]], "quantizationjob (class in nauert.quantizationjob)": [[14, "nauert.quantizationjob.QuantizationJob", false]], "quantize() (in module nauert.quantizer)": [[15, "nauert.quantizer.quantize", false]], "recurse() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.recurse", false]], "regroup_leaves_with_unencessary_divisions() (nauert.qgrid.qgrid method)": [[9, "nauert.qgrid.QGrid.regroup_leaves_with_unencessary_divisions", false]], "remove() (nauert.qgrid.qgridcontainer method)": [[9, "nauert.qgrid.QGridContainer.remove", false]], "replace_rest_with_final_grace_note (nauert.gracehandlers.concatenatinggracehandler attribute)": [[2, "nauert.gracehandlers.ConcatenatingGraceHandler.replace_rest_with_final_grace_note", false]], "root (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.root", false]], "root (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.root", false]], "root_node (nauert.qgrid.qgrid attribute)": [[9, "nauert.qgrid.QGrid.root_node", false]], "rtm_format (nauert.qgrid.qgrid attribute)": [[9, "nauert.qgrid.QGrid.rtm_format", false]], "rtm_format (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.rtm_format", false]], "rtm_format (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.rtm_format", false]], "run() (nauert.jobhandlers.paralleljobhandlerworker method)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.run", false]], "search_tree (nauert.qschemaitems.beatwiseqschemaitem attribute)": [[10, "nauert.qschemaitems.BeatwiseQSchemaItem.search_tree", false]], "search_tree (nauert.qschemaitems.measurewiseqschemaitem attribute)": [[10, "nauert.qschemaitems.MeasurewiseQSchemaItem.search_tree", false]], "search_tree (nauert.qschemaitems.qschemaitem attribute)": [[10, "nauert.qschemaitems.QSchemaItem.search_tree", false]], "search_tree (nauert.qschemas.beatwiseqschema attribute)": [[11, "nauert.qschemas.BeatwiseQSchema.search_tree", false]], "search_tree (nauert.qschemas.measurewiseqschema attribute)": [[11, "nauert.qschemas.MeasurewiseQSchema.search_tree", false]], "search_tree (nauert.qschemas.qschema attribute)": [[11, "nauert.qschemas.QSchema.search_tree", false]], "search_tree (nauert.qtargetitems.qtargetbeat attribute)": [[12, "nauert.qtargetitems.QTargetBeat.search_tree", false]], "search_tree (nauert.qtargetitems.qtargetmeasure attribute)": [[12, "nauert.qtargetitems.QTargetMeasure.search_tree", false]], "search_tree (nauert.quantizationjob.quantizationjob attribute)": [[14, "nauert.quantizationjob.QuantizationJob.search_tree", false]], "searchtree (class in nauert.searchtrees)": [[16, "nauert.searchtrees.SearchTree", false]], "sentinel (nauert.jobhandlers.paralleljobhandlerworker attribute)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.sentinel", false]], "sequence (nauert.qeventsequence.qeventsequence attribute)": [[8, "nauert.qeventsequence.QEventSequence.sequence", false]], "serialjobhandler (class in nauert.jobhandlers)": [[5, "nauert.jobhandlers.SerialJobHandler", false]], "silentqevent (class in nauert.qevents)": [[7, "nauert.qevents.SilentQEvent", false]], "sort_q_events_by_index() (nauert.qgrid.qgrid method)": [[9, "nauert.qgrid.QGrid.sort_q_events_by_index", false]], "start() (nauert.jobhandlers.paralleljobhandlerworker method)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.start", false]], "start_offset (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.start_offset", false]], "start_offset (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.start_offset", false]], "stop_offset (nauert.qgrid.qgridcontainer attribute)": [[9, "nauert.qgrid.QGridContainer.stop_offset", false]], "stop_offset (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.stop_offset", false]], "subdivide_leaf() (nauert.qgrid.qgrid method)": [[9, "nauert.qgrid.QGrid.subdivide_leaf", false]], "subdivide_leaves() (nauert.qgrid.qgrid method)": [[9, "nauert.qgrid.QGrid.subdivide_leaves", false]], "succeeding_q_event_proxies (nauert.qgrid.qgridleaf attribute)": [[9, "nauert.qgrid.QGridLeaf.succeeding_q_event_proxies", false]], "target_class (nauert.qschemas.beatwiseqschema attribute)": [[11, "nauert.qschemas.BeatwiseQSchema.target_class", false]], "target_class (nauert.qschemas.measurewiseqschema attribute)": [[11, "nauert.qschemas.MeasurewiseQSchema.target_class", false]], "target_class (nauert.qschemas.qschema attribute)": [[11, "nauert.qschemas.QSchema.target_class", false]], "target_item_class (nauert.qschemas.beatwiseqschema attribute)": [[11, "nauert.qschemas.BeatwiseQSchema.target_item_class", false]], "target_item_class (nauert.qschemas.measurewiseqschema attribute)": [[11, "nauert.qschemas.MeasurewiseQSchema.target_item_class", false]], "target_item_class (nauert.qschemas.qschema attribute)": [[11, "nauert.qschemas.QSchema.target_item_class", false]], "tempo (nauert.qschemaitems.beatwiseqschemaitem attribute)": [[10, "nauert.qschemaitems.BeatwiseQSchemaItem.tempo", false]], "tempo (nauert.qschemaitems.measurewiseqschemaitem attribute)": [[10, "nauert.qschemaitems.MeasurewiseQSchemaItem.tempo", false]], "tempo (nauert.qschemaitems.qschemaitem attribute)": [[10, "nauert.qschemaitems.QSchemaItem.tempo", false]], "tempo (nauert.qschemas.beatwiseqschema attribute)": [[11, "nauert.qschemas.BeatwiseQSchema.tempo", false]], "tempo (nauert.qschemas.measurewiseqschema attribute)": [[11, "nauert.qschemas.MeasurewiseQSchema.tempo", false]], "tempo (nauert.qschemas.qschema attribute)": [[11, "nauert.qschemas.QSchema.tempo", false]], "tempo (nauert.qtargetitems.qtargetbeat attribute)": [[12, "nauert.qtargetitems.QTargetBeat.tempo", false]], "tempo (nauert.qtargetitems.qtargetmeasure attribute)": [[12, "nauert.qtargetitems.QTargetMeasure.tempo", false]], "terminalqevent (class in nauert.qevents)": [[7, "nauert.qevents.TerminalQEvent", false]], "terminate() (nauert.jobhandlers.paralleljobhandlerworker method)": [[5, "nauert.jobhandlers.ParallelJobHandlerWorker.terminate", false]], "time_signature (nauert.qschemaitems.measurewiseqschemaitem attribute)": [[10, "nauert.qschemaitems.MeasurewiseQSchemaItem.time_signature", false]], "time_signature (nauert.qschemas.measurewiseqschema attribute)": [[11, "nauert.qschemas.MeasurewiseQSchema.time_signature", false]], "time_signature (nauert.qtargetitems.qtargetmeasure attribute)": [[12, "nauert.qtargetitems.QTargetMeasure.time_signature", false]], "unweightedsearchtree (class in nauert.searchtrees)": [[16, "nauert.searchtrees.UnweightedSearchTree", false]], "use_full_measure (nauert.qschemaitems.measurewiseqschemaitem attribute)": [[10, "nauert.qschemaitems.MeasurewiseQSchemaItem.use_full_measure", false]], "use_full_measure (nauert.qschemas.measurewiseqschema attribute)": [[11, "nauert.qschemas.MeasurewiseQSchema.use_full_measure", false]], "use_full_measure (nauert.qtargetitems.qtargetmeasure attribute)": [[12, "nauert.qtargetitems.QTargetMeasure.use_full_measure", false]], "weightedsearchtree (class in nauert.searchtrees)": [[16, "nauert.searchtrees.WeightedSearchTree", false]]}, "objects": {"": [[4, 0, 0, "-", "nauert"]], "nauert": [[1, 0, 0, "-", "attackpointoptimizers"], [2, 0, 0, "-", "gracehandlers"], [3, 0, 0, "-", "heuristics"], [5, 0, 0, "-", "jobhandlers"], [6, 0, 0, "-", "qeventproxy"], [7, 0, 0, "-", "qevents"], [8, 0, 0, "-", "qeventsequence"], [9, 0, 0, "-", "qgrid"], [10, 0, 0, "-", "qschemaitems"], [11, 0, 0, "-", "qschemas"], [12, 0, 0, "-", "qtargetitems"], [13, 0, 0, "-", "qtargets"], [14, 0, 0, "-", "quantizationjob"], [15, 0, 0, "-", "quantizer"], [16, 0, 0, "-", "searchtrees"]], "nauert.attackpointoptimizers": [[1, 1, 1, "", "AttackPointOptimizer"], [1, 1, 1, "", "MeasurewiseAttackPointOptimizer"], [1, 1, 1, "", "NaiveAttackPointOptimizer"], [1, 1, 1, "", "NullAttackPointOptimizer"]], "nauert.attackpointoptimizers.AttackPointOptimizer": [[1, 2, 1, "", "__call__"]], "nauert.attackpointoptimizers.MeasurewiseAttackPointOptimizer": [[1, 2, 1, "", "__call__"]], "nauert.attackpointoptimizers.NaiveAttackPointOptimizer": [[1, 2, 1, "", "__call__"]], "nauert.attackpointoptimizers.NullAttackPointOptimizer": [[1, 2, 1, "", "__call__"]], "nauert.gracehandlers": [[2, 1, 1, "", "CollapsingGraceHandler"], [2, 1, 1, "", "ConcatenatingGraceHandler"], [2, 1, 1, "", "DiscardingGraceHandler"], [2, 1, 1, "", "GraceHandler"]], "nauert.gracehandlers.CollapsingGraceHandler": [[2, 2, 1, "", "__call__"]], "nauert.gracehandlers.ConcatenatingGraceHandler": [[2, 2, 1, "", "__call__"], [2, 3, 1, "", "discard_grace_rest"], [2, 3, 1, "", "grace_duration"], [2, 2, 1, "", "handle_orphaned_q_event_proxies"], [2, 3, 1, "", "replace_rest_with_final_grace_note"]], "nauert.gracehandlers.DiscardingGraceHandler": [[2, 2, 1, "", "__call__"], [2, 3, 1, "", "discarded_q_events"]], "nauert.gracehandlers.GraceHandler": [[2, 2, 1, "", "__call__"]], "nauert.heuristics": [[3, 1, 1, "", "DistanceHeuristic"], [3, 1, 1, "", "Heuristic"]], "nauert.heuristics.DistanceHeuristic": [[3, 2, 1, "", "__call__"]], "nauert.heuristics.Heuristic": [[3, 2, 1, "", "__call__"]], "nauert.jobhandlers": [[5, 1, 1, "", "JobHandler"], [5, 1, 1, "", "ParallelJobHandler"], [5, 1, 1, "", "ParallelJobHandlerWorker"], [5, 1, 1, "", "SerialJobHandler"]], "nauert.jobhandlers.JobHandler": [[5, 2, 1, "", "__call__"]], "nauert.jobhandlers.ParallelJobHandler": [[5, 2, 1, "", "__call__"]], "nauert.jobhandlers.ParallelJobHandlerWorker": [[5, 2, 1, "", "__repr__"], [5, 3, 1, "", "authkey"], [5, 2, 1, "", "close"], [5, 3, 1, "", "daemon"], [5, 3, 1, "", "exitcode"], [5, 3, 1, "", "ident"], [5, 2, 1, "", "is_alive"], [5, 2, 1, "", "join"], [5, 2, 1, "", "kill"], [5, 3, 1, "", "name"], [5, 3, 1, "", "pid"], [5, 2, 1, "", "run"], [5, 3, 1, "", "sentinel"], [5, 2, 1, "", "start"], [5, 2, 1, "", "terminate"]], "nauert.jobhandlers.SerialJobHandler": [[5, 2, 1, "", "__call__"]], "nauert.qeventproxy": [[6, 1, 1, "", "QEventProxy"]], "nauert.qeventproxy.QEventProxy": [[6, 2, 1, "", "__eq__"], [6, 2, 1, "", "__hash__"], [6, 2, 1, "", "__repr__"], [6, 3, 1, "", "index"], [6, 3, 1, "", "offset"], [6, 3, 1, "", "q_event"]], "nauert.qevents": [[7, 1, 1, "", "PitchedQEvent"], [7, 1, 1, "", "QEvent"], [7, 1, 1, "", "SilentQEvent"], [7, 1, 1, "", "TerminalQEvent"]], "nauert.qevents.PitchedQEvent": [[7, 2, 1, "", "__eq__"], [7, 2, 1, "", "__hash__"], [7, 2, 1, "", "__lt__"], [7, 2, 1, "", "__repr__"], [7, 3, 1, "", "attachments"], [7, 2, 1, "", "from_offset_pitches_attachments"], [7, 3, 1, "", "index"], [7, 3, 1, "", "offset"], [7, 3, 1, "", "pitches"]], "nauert.qevents.QEvent": [[7, 2, 1, "", "__lt__"], [7, 2, 1, "", "__repr__"], [7, 3, 1, "", "attachments"], [7, 2, 1, "", "from_offset_pitches_attachments"], [7, 3, 1, "", "index"], [7, 3, 1, "", "offset"]], "nauert.qevents.SilentQEvent": [[7, 2, 1, "", "__eq__"], [7, 2, 1, "", "__hash__"], [7, 2, 1, "", "__lt__"], [7, 2, 1, "", "__repr__"], [7, 3, 1, "", "attachments"], [7, 2, 1, "", "from_offset_pitches_attachments"], [7, 3, 1, "", "index"], [7, 3, 1, "", "offset"]], "nauert.qevents.TerminalQEvent": [[7, 2, 1, "", "__eq__"], [7, 2, 1, "", "__hash__"], [7, 2, 1, "", "__lt__"], [7, 2, 1, "", "__repr__"], [7, 3, 1, "", "attachments"], [7, 2, 1, "", "from_offset_pitches_attachments"], [7, 3, 1, "", "index"], [7, 3, 1, "", "offset"]], "nauert.qeventsequence": [[8, 1, 1, "", "QEventSequence"]], "nauert.qeventsequence.QEventSequence": [[8, 2, 1, "", "__contains__"], [8, 2, 1, "", "__eq__"], [8, 2, 1, "", "__getitem__"], [8, 2, 1, "", "__hash__"], [8, 2, 1, "", "__iter__"], [8, 2, 1, "", "__len__"], [8, 3, 1, "", "duration_in_ms"], [8, 2, 1, "", "from_millisecond_durations"], [8, 2, 1, "", "from_millisecond_offsets"], [8, 2, 1, "", "from_millisecond_pitch_attachment_tuples"], [8, 2, 1, "", "from_millisecond_pitch_pairs"], [8, 2, 1, "", "from_tempo_scaled_durations"], [8, 2, 1, "", "from_tempo_scaled_leaves"], [8, 3, 1, "", "sequence"]], "nauert.qgrid": [[9, 1, 1, "", "QGrid"], [9, 1, 1, "", "QGridContainer"], [9, 1, 1, "", "QGridLeaf"]], "nauert.qgrid.QGrid": [[9, 2, 1, "", "__call__"], [9, 2, 1, "", "__copy__"], [9, 2, 1, "", "__eq__"], [9, 2, 1, "", "__hash__"], [9, 2, 1, "", "__repr__"], [9, 3, 1, "", "distance"], [9, 2, 1, "", "fit_q_events"], [9, 3, 1, "", "leaves"], [9, 3, 1, "", "next_downbeat"], [9, 3, 1, "", "offsets"], [9, 3, 1, "", "pretty_rtm_format"], [9, 2, 1, "", "regroup_leaves_with_unencessary_divisions"], [9, 3, 1, "", "root_node"], [9, 3, 1, "", "rtm_format"], [9, 2, 1, "", "sort_q_events_by_index"], [9, 2, 1, "", "subdivide_leaf"], [9, 2, 1, "", "subdivide_leaves"]], "nauert.qgrid.QGridContainer": [[9, 2, 1, "", "__add__"], [9, 2, 1, "", "__call__"], [9, 2, 1, "", "__contains__"], [9, 2, 1, "", "__delitem__"], [9, 2, 1, "", "__getitem__"], [9, 2, 1, "", "__graph__"], [9, 2, 1, "", "__iter__"], [9, 2, 1, "", "__len__"], [9, 2, 1, "", "__radd__"], [9, 2, 1, "", "__repr__"], [9, 2, 1, "", "__setitem__"], [9, 2, 1, "", "append"], [9, 3, 1, "", "children"], [9, 3, 1, "", "depth"], [9, 2, 1, "", "depth_first"], [9, 3, 1, "", "duration"], [9, 2, 1, "", "extend"], [9, 3, 1, "", "graph_order"], [9, 2, 1, "", "index"], [9, 2, 1, "", "insert"], [9, 3, 1, "", "leaves"], [9, 3, 1, "", "name"], [9, 3, 1, "", "pair"], [9, 3, 1, "", "parent"], [9, 3, 1, "", "parentage"], [9, 2, 1, "", "pop"], [9, 3, 1, "", "pretty_rtm_format"], [9, 3, 1, "", "prolation"], [9, 3, 1, "", "prolations"], [9, 2, 1, "", "recurse"], [9, 2, 1, "", "remove"], [9, 3, 1, "", "root"], [9, 3, 1, "", "rtm_format"], [9, 3, 1, "", "start_offset"], [9, 3, 1, "", "stop_offset"]], "nauert.qgrid.QGridLeaf": [[9, 2, 1, "", "__call__"], [9, 2, 1, "", "__graph__"], [9, 2, 1, "", "__repr__"], [9, 3, 1, "", "depth"], [9, 3, 1, "", "duration"], [9, 3, 1, "", "graph_order"], [9, 3, 1, "", "is_divisible"], [9, 3, 1, "", "name"], [9, 3, 1, "", "pair"], [9, 3, 1, "", "parent"], [9, 3, 1, "", "parentage"], [9, 3, 1, "", "preceding_q_event_proxies"], [9, 3, 1, "", "pretty_rtm_format"], [9, 3, 1, "", "prolation"], [9, 3, 1, "", "prolations"], [9, 3, 1, "", "q_event_proxies"], [9, 3, 1, "", "root"], [9, 3, 1, "", "rtm_format"], [9, 3, 1, "", "start_offset"], [9, 3, 1, "", "stop_offset"], [9, 3, 1, "", "succeeding_q_event_proxies"]], "nauert.qschemaitems": [[10, 1, 1, "", "BeatwiseQSchemaItem"], [10, 1, 1, "", "MeasurewiseQSchemaItem"], [10, 1, 1, "", "QSchemaItem"]], "nauert.qschemaitems.BeatwiseQSchemaItem": [[10, 2, 1, "", "__repr__"], [10, 3, 1, "", "beatspan"], [10, 3, 1, "", "search_tree"], [10, 3, 1, "", "tempo"]], "nauert.qschemaitems.MeasurewiseQSchemaItem": [[10, 2, 1, "", "__repr__"], [10, 3, 1, "", "beatspan"], [10, 3, 1, "", "search_tree"], [10, 3, 1, "", "tempo"], [10, 3, 1, "", "time_signature"], [10, 3, 1, "", "use_full_measure"]], "nauert.qschemaitems.QSchemaItem": [[10, 3, 1, "", "search_tree"], [10, 3, 1, "", "tempo"]], "nauert.qschemas": [[11, 1, 1, "", "BeatwiseQSchema"], [11, 1, 1, "", "MeasurewiseQSchema"], [11, 1, 1, "", "QSchema"]], "nauert.qschemas.BeatwiseQSchema": [[11, 2, 1, "", "__call__"], [11, 2, 1, "", "__getitem__"], [11, 2, 1, "", "__repr__"], [11, 3, 1, "", "beatspan"], [11, 3, 1, "", "item_class"], [11, 3, 1, "", "items"], [11, 3, 1, "", "search_tree"], [11, 3, 1, "", "target_class"], [11, 3, 1, "", "target_item_class"], [11, 3, 1, "", "tempo"]], "nauert.qschemas.MeasurewiseQSchema": [[11, 2, 1, "", "__call__"], [11, 2, 1, "", "__getitem__"], [11, 2, 1, "", "__repr__"], [11, 3, 1, "", "item_class"], [11, 3, 1, "", "items"], [11, 3, 1, "", "search_tree"], [11, 3, 1, "", "target_class"], [11, 3, 1, "", "target_item_class"], [11, 3, 1, "", "tempo"], [11, 3, 1, "", "time_signature"], [11, 3, 1, "", "use_full_measure"]], "nauert.qschemas.QSchema": [[11, 2, 1, "", "__call__"], [11, 2, 1, "", "__getitem__"], [11, 3, 1, "", "item_class"], [11, 3, 1, "", "items"], [11, 3, 1, "", "search_tree"], [11, 3, 1, "", "target_class"], [11, 3, 1, "", "target_item_class"], [11, 3, 1, "", "tempo"]], "nauert.qtargetitems": [[12, 1, 1, "", "QTargetBeat"], [12, 1, 1, "", "QTargetItem"], [12, 1, 1, "", "QTargetMeasure"]], "nauert.qtargetitems.QTargetBeat": [[12, 2, 1, "", "__call__"], [12, 2, 1, "", "__repr__"], [12, 3, 1, "", "beatspan"], [12, 3, 1, "", "duration_in_ms"], [12, 3, 1, "", "offset_in_ms"], [12, 3, 1, "", "q_events"], [12, 3, 1, "", "q_grid"], [12, 3, 1, "", "q_grids"], [12, 3, 1, "", "search_tree"], [12, 3, 1, "", "tempo"]], "nauert.qtargetitems.QTargetItem": [[12, 3, 1, "", "duration_in_ms"], [12, 3, 1, "", "offset_in_ms"]], "nauert.qtargetitems.QTargetMeasure": [[12, 2, 1, "", "__repr__"], [12, 3, 1, "", "beats"], [12, 3, 1, "", "duration_in_ms"], [12, 3, 1, "", "offset_in_ms"], [12, 3, 1, "", "search_tree"], [12, 3, 1, "", "tempo"], [12, 3, 1, "", "time_signature"], [12, 3, 1, "", "use_full_measure"]], "nauert.qtargets": [[13, 1, 1, "", "BeatwiseQTarget"], [13, 1, 1, "", "MeasurewiseQTarget"], [13, 1, 1, "", "QTarget"]], "nauert.qtargets.BeatwiseQTarget": [[13, 2, 1, "", "__call__"], [13, 3, 1, "", "beats"], [13, 3, 1, "", "duration_in_ms"], [13, 3, 1, "", "item_class"], [13, 3, 1, "", "items"]], "nauert.qtargets.MeasurewiseQTarget": [[13, 2, 1, "", "__call__"], [13, 3, 1, "", "beats"], [13, 3, 1, "", "duration_in_ms"], [13, 3, 1, "", "item_class"], [13, 3, 1, "", "items"]], "nauert.qtargets.QTarget": [[13, 2, 1, "", "__call__"], [13, 3, 1, "", "beats"], [13, 3, 1, "", "duration_in_ms"], [13, 3, 1, "", "item_class"], [13, 3, 1, "", "items"]], "nauert.quantizationjob": [[14, 1, 1, "", "QuantizationJob"]], "nauert.quantizationjob.QuantizationJob": [[14, 2, 1, "", "__call__"], [14, 2, 1, "", "__eq__"], [14, 2, 1, "", "__hash__"], [14, 2, 1, "", "__repr__"], [14, 3, 1, "", "job_id"], [14, 3, 1, "", "q_event_proxies"], [14, 3, 1, "", "q_grids"], [14, 3, 1, "", "search_tree"]], "nauert.quantizer": [[15, 4, 1, "", "quantize"]], "nauert.searchtrees": [[16, 1, 1, "", "SearchTree"], [16, 1, 1, "", "UnweightedSearchTree"], [16, 1, 1, "", "WeightedSearchTree"]], "nauert.searchtrees.SearchTree": [[16, 2, 1, "", "__call__"], [16, 2, 1, "", "__eq__"], [16, 2, 1, "", "__hash__"], [16, 2, 1, "", "__repr__"], [16, 3, 1, "", "default_definition"], [16, 3, 1, "", "definition"]], "nauert.searchtrees.UnweightedSearchTree": [[16, 2, 1, "", "__call__"], [16, 2, 1, "", "__eq__"], [16, 2, 1, "", "__hash__"], [16, 2, 1, "", "__repr__"], [16, 3, 1, "", "default_definition"], [16, 3, 1, "", "definition"]], "nauert.searchtrees.WeightedSearchTree": [[16, 2, 1, "", "__call__"], [16, 2, 1, "", "__eq__"], [16, 2, 1, "", "__hash__"], [16, 2, 1, "", "__repr__"], [16, 3, 1, "", "all_compositions"], [16, 3, 1, "", "default_definition"], [16, 3, 1, "", "definition"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function"}, "terms": {"": [0, 4, 9, 11, 15, 16], "0": [2, 6, 7, 8, 9, 11, 12, 14, 16], "1": [1, 2, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16], "1000": [2, 3, 7, 8, 11, 12, 15], "10000": 8, "1001": 2, "11": [11, 16], "12": 9, "120": 15, "1250": 8, "13": [11, 16], "130": [6, 16], "150": 16, "1500": [8, 12], "16": [1, 2, 8, 11, 15], "174": 8, "1750": 8, "17500": 8, "19": [1, 2, 3, 9, 15], "2": [1, 2, 3, 6, 8, 9, 11, 12, 14, 15, 16], "2000": 12, "20000": 8, "25": [9, 14], "250": [8, 9, 14], "2500": 8, "2750": 8, "285": 15, "29": 8, "3": [2, 6, 7, 8, 9, 11, 12, 14, 15, 16], "30": 15, "3000": [8, 12], "32": [1, 11, 15], "3250": 8, "3750": 12, "4": [1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 15, 16], "400": 2, "4000": [8, 12], "40000": 8, "4375": 8, "5": [1, 6, 9, 11, 14, 15, 16], "50": 2, "500": [8, 14], "5000": 8, "54": [1, 11], "56": 12, "57": 15, "6": [10, 11, 16], "60": [1, 2, 3, 10, 12, 15], "64": 1, "667": 16, "7": [1, 2, 9, 11, 12, 14, 15, 16], "72": 8, "75": [9, 14], "750": [8, 9, 14], "78": 15, "8": [1, 2, 3, 8, 9, 10, 11, 12, 15], "83": [1, 2, 3, 9, 15], "85": 15, "90": 15, "997": 2, "998": 2, "999": 2, "A": [8, 9, 12, 16], "For": 11, "If": [8, 10, 11, 12, 16], "In": [11, 16], "It": 5, "Not": [5, 6, 12, 13], "On": 11, "That": 16, "The": [1, 3, 7, 8, 9, 10, 11, 12, 15, 16], "These": 11, "With": 1, "_": 8, "__add__": 9, "__call__": [1, 2, 3, 5, 9, 11, 12, 13, 14, 15, 16], "__contains__": [8, 9], "__copy__": 9, "__delitem__": 9, "__eq__": [6, 7, 8, 9, 14, 16], "__getitem__": [8, 9, 11], "__graph__": 9, "__hash__": [6, 7, 8, 9, 14, 16], "__iter__": [8, 9], "__len__": [8, 9], "__lt__": 7, "__name__": 14, "__radd__": 9, "__repr__": [5, 6, 7, 9, 10, 11, 12, 14, 16], "__setitem__": 9, "abc": [1, 2, 3, 4, 5, 7, 10, 11, 12, 13, 16], "abjad": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16], "abov": [11, 15, 16], "abstact": 5, "abstract": [0, 1, 2, 3, 5, 7, 10, 11, 12, 13, 16], "accord": [3, 11, 16], "act": 1, "actual": 16, "add": 9, "after": 9, "aftergrac": 2, "aftergracecontain": 2, "again": 16, "aliv": 5, "all": [2, 3, 7, 8, 9, 11, 14, 16], "all_composit": 16, "allow": [2, 9, 11, 14, 16], "also": 9, "alter": [1, 15], "an": [1, 2, 5, 7, 8, 10, 15], "ani": [2, 3, 11], "another_q_target_measur": 12, "api": 17, "append": 9, "appli": [2, 11], "ar": [1, 2, 5, 11, 14, 15, 16], "arbitrari": 16, "argument": [1, 6, 7, 8, 9, 11, 14, 15, 16], "assist": 8, "attach": [1, 2, 6, 7, 8, 9], "attach_tempo": [2, 13, 15], "attack": [1, 2, 7, 9, 15], "attack_point_optim": [1, 2, 13, 15], "attackpointoptim": [0, 4, 13, 15, 17], "attempt": 1, "attribut": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16], "authkei": 5, "avail": 5, "b": [1, 9, 11], "base": [0, 4, 5, 9, 16], "baseprocess": [4, 5], "beat": [3, 11, 12, 13, 15], "beatspan": [6, 9, 10, 11, 12, 15], "beatwis": [10, 11, 13], "beatwise_q_schema": 15, "beatwiseqschema": [4, 11, 15], "beatwiseqschemaitem": [4, 10, 11], "beatwiseqtarget": [4, 13, 15], "beforegracecontain": 2, "begin": 9, "behavior": [2, 15], "belong": 9, "between": [9, 16], "bgcolor": 9, "bool": [2, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16], "boolean": 2, "box": 9, "break": 15, "c": [1, 2, 3, 6, 7, 8, 9, 11, 15], "calc": 9, "call": [1, 2, 3, 5, 9, 11, 12, 13, 14, 15, 16], "can": [9, 11, 15], "candid": 15, "carri": 7, "caus": 15, "chang": [6, 7, 8, 9, 10, 11, 14, 15, 16], "child": 5, "children": 9, "choos": 3, "chord": 2, "class": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "classmethod": [7, 8], "clean": 1, "close": 5, "closest": 9, "code": 5, "collaps": [2, 9], "collapsinggracehandl": [2, 4, 15], "collect": 16, "complex": 15, "compon": 9, "compos": [5, 6, 11, 12, 13, 16], "composit": 16, "comput": [3, 9, 11], "concanten": 2, "concaten": [2, 9], "concatenatinggracehandl": [2, 4, 15], "concret": [11, 13], "consid": 3, "consist": 11, "contain": [1, 2, 4, 8, 9, 12, 13, 16], "content": 9, "context": [4, 5, 7], "control": [5, 11, 15, 16], "conveni": 8, "copi": 9, "copiabl": 14, "could": 11, "cpu": 5, "creat": [2, 11, 13], "criteria": 3, "current": 15, "custom": 16, "custom_markup": [10, 11, 12], "d": [1, 2, 3, 8, 9, 15], "daemon": 5, "decim": [10, 11, 12], "decreas": 1, "default": [1, 2, 11, 15, 16], "default_definit": 16, "defin": [10, 16], "definit": [11, 12, 14, 16], "degre": 16, "depth": 9, "depth_first": 9, "describ": [9, 16], "descript": 11, "descriptor": 5, "determin": [2, 8], "diachron": 11, "dict": [11, 16], "dictionari": [11, 16], "differ": 15, "digraph": 9, "disambigu": 7, "discard": 2, "discard_grace_rest": 2, "discarded_q_ev": 2, "discardinggracehandl": [2, 4, 15], "distanc": [3, 9], "distanceheurist": [3, 4, 15], "divid": [9, 11, 16], "divis": 16, "divisor": 16, "doe": 2, "downbeat": 9, "durat": [1, 2, 3, 8, 9, 10, 11, 12, 13, 15], "duration_in_m": [8, 12, 13], "dure": 15, "e": [1, 2, 3, 6, 7, 15], "each": [3, 8, 9, 11], "ef": [2, 3, 8, 15], "effect": [1, 8, 11], "either": [5, 11, 16], "emb": 2, "enabl": 14, "encapsul": [3, 15, 16], "english": [1, 2, 3, 9, 15], "enumer": 9, "environ": 14, "epxr": 7, "equal": [6, 7, 8, 9, 14, 16], "equival": 11, "error": 5, "etc": 11, "even": [11, 14], "event": [2, 6, 7, 8, 9, 14], "ever": 12, "exampl": [11, 15], "except": 11, "exit": 5, "exitcod": 5, "explicit": 15, "explicitli": [6, 7, 8, 9, 14, 16], "expr": 9, "express": 1, "extend": 9, "extens": [0, 4], "f": [1, 2, 3, 8, 15], "fall": 7, "fals": [2, 6, 7, 8, 9, 10, 11, 12, 14, 16], "fewest": 3, "file": [5, 15], "final": 2, "first": [2, 9], "fit": 9, "fit_q_ev": [9, 16], "fix": 2, "flag": 9, "flatten": 15, "float": [7, 8], "follow": [9, 11, 16], "foo": 8, "foobar": 8, "format": [9, 11], "forth": 16, "found": [1, 11], "four": 11, "fraction": 9, "from": [2, 3, 9, 11, 15], "from_millisecond_dur": 8, "from_millisecond_offset": 8, "from_millisecond_pitch_attachment_tupl": 8, "from_millisecond_pitch_pair": [2, 3, 8, 15], "from_offset_pitches_attach": 7, "from_tempo_scaled_dur": 8, "from_tempo_scaled_leav": [1, 8], "full": [10, 11, 12], "function": [0, 5, 6, 8, 9, 11, 12, 13, 15], "further": [9, 16], "fuse": [1, 15], "fuse_sil": 8, "futur": 15, "g": [1, 2, 3, 9, 15], "gener": [2, 9, 12, 14, 15, 16], "get": [2, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16], "given": [3, 9, 10, 11, 14, 16], "global": 11, "gq": 8, "grace": [2, 15], "grace_dur": 2, "grace_handl": [2, 13, 15], "gracehandl": [0, 4, 13, 15, 17], "graph": 9, "graph_ord": 9, "graphviz": 9, "greater": 7, "grid": [0, 3, 4, 9, 14, 16], "group": [12, 15], "ha": 5, "hand": 11, "handl": 5, "handle_orphaned_q_event_proxi": 2, "handler": [2, 5], "happen": 16, "hash": [6, 7, 8, 9, 14, 16], "have": [8, 11], "held": 5, "here": 15, "heurist": [0, 4, 12, 13, 15, 17], "hide": [10, 11, 12], "how": [5, 9, 11, 15, 16], "howev": 15, "i": [2, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16], "id": 14, "ident": [5, 7], "identifi": [5, 8, 11], "implement": 11, "import": [9, 11, 16], "imprecis": 8, "includ": [9, 15], "independ": 11, "index": [2, 6, 7, 8, 9, 11], "indic": [7, 9, 11, 16], "individu": 1, "inform": [2, 15], "inner": 9, "inner_contain": 9, "input": [8, 16], "insert": 9, "instanc": [2, 5, 11, 12, 13, 15, 16], "instanti": [8, 11, 14], "int": [6, 7, 8, 9, 11, 12, 14, 16], "integ": [11, 16], "intend": 14, "intern": [5, 6, 9, 12, 13], "interpret": [9, 16], "is_al": 5, "is_divis": 9, "issu": 15, "item": [2, 8, 10, 11, 13], "item_class": [11, 13], "iter": [7, 8], "its": [6, 8, 11, 14], "job": [5, 14], "job_handl": [13, 15], "job_id": [12, 14], "job_queu": 5, "jobhandl": [0, 4, 13, 15, 17], "join": 5, "keep": 15, "kei": [11, 16], "keyword": [9, 11, 15], "kill": 5, "know": 11, "label": 9, "languag": [1, 2, 3, 9, 15], "last": [2, 15], "last_leaf": 2, "late": 9, "later": 14, "leaf": [1, 2, 8, 9], "leav": [1, 3, 8, 9], "len": 2, "length": [8, 16], "level": 16, "like": [11, 15], "lilypond": [10, 12], "line": 15, "list": [2, 9, 12, 16], "load": 9, "logic": [1, 15], "macro": 15, "made": 11, "mai": [1, 9, 16], "make": 9, "mani": 16, "map": 6, "mark": [1, 10], "materi": 7, "max_depth": 16, "max_divis": 16, "maximum": 16, "mean": [3, 11], "meaning": 14, "measur": [1, 10, 11, 12, 15], "measurewis": [1, 10, 11, 12, 13], "measurewise_q_schema": 15, "measurewiseattackpointoptim": [1, 2, 4, 15], "measurewiseqschema": [1, 2, 4, 11, 15], "measurewiseqschemaitem": [4, 10, 11], "measurewiseqtarget": [4, 13], "messag": 15, "meter": 10, "method": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "metronom": 1, "metronome_mark": 10, "metronomemark": [1, 8, 10, 11, 12, 15], "might": 11, "millisecond": [7, 8, 9, 12, 13], "model": [9, 16], "modifi": 15, "modul": 15, "mold": 13, "monoton": 1, "more": [15, 16], "most": 15, "much": 11, "multipl": 11, "multiprocess": [4, 5, 14], "music": 15, "must": 8, "naiv": 1, "naiveattackpointoptim": [1, 4, 15], "name": [2, 5, 9], "namedpitch": [2, 6, 7, 8, 9], "nauert": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "nearest": 9, "necessari": 14, "neg": 11, "nest": [9, 16], "new": [1, 2, 3, 8, 9, 15], "new_item": 9, "next": 9, "next_downbeat": 9, "node": [9, 16], "node_0": 9, "node_1": 9, "node_2": 9, "node_3": 9, "node_4": 9, "node_5": 9, "node_6": 9, "node_a": 9, "node_b": 9, "node_c": 9, "node_d": 9, "non": [8, 11], "noncommut": 9, "none": [1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "notat": [1, 15], "note": [2, 9, 15], "null": 1, "nullattackpointoptim": [1, 4, 15], "number": [1, 3, 5, 8, 9], "obei": 16, "object": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16], "occur": 9, "offset": [2, 6, 7, 8, 9, 12, 14, 16], "offset_in_m": 12, "onc": 16, "one": 9, "onli": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16], "onset": 7, "onto": 9, "oper": 9, "optim": [1, 3], "option": [7, 8, 10, 15], "order": [1, 9, 14], "orphan": 2, "other": [11, 15, 16], "otherwis": [6, 7, 8, 9, 14, 16], "outer": 9, "outer_contain": 9, "output": [15, 16], "outsid": 7, "overal": 1, "overridden": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16], "page": 15, "pair": [2, 3, 8, 9, 10, 11, 12, 15], "parallel": [5, 15], "paralleljobhandl": [4, 5, 15], "paralleljobhandlerwork": [4, 5], "paramet": 11, "parent": 9, "parentag": 9, "pars": 9, "part": 16, "partial": [10, 11, 12], "partit": 1, "pass": [15, 16], "paul": [0, 4, 16], "per": 11, "perform": 1, "period": 7, "permiss": 16, "permit": 16, "persist": [11, 15], "pickl": 14, "picklabl": 14, "pid": 5, "pitch": [2, 3, 6, 7, 8, 9, 15], "pitchedqev": [2, 4, 6, 7, 8, 9, 14, 16], "pleas": 15, "point": [1, 2, 7, 9, 15], "pool": 15, "pop": 9, "possess": 7, "possibl": 16, "post": 1, "pour": [11, 13], "pprint": [11, 16], "pqe": 2, "practic": 11, "preced": 9, "preceding_q_event_proxi": 9, "preprolated_dur": 9, "pretti": 9, "pretty_rtm_format": 9, "primari": 8, "print": [9, 11, 12, 14, 16], "process": [4, 5, 10, 11, 14, 15], "project": 15, "prolat": 9, "properti": [2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16], "proportionalnotationdur": 9, "prototyp": 9, "provid": [3, 8, 11], "proxi": [6, 9, 14], "proxy_a": [9, 14, 16], "proxy_b": [9, 14, 16], "proxy_c": 14, "puls": 16, "pulse_dur": 9, "py": 15, "python": [6, 7, 8, 9, 14, 16], "q": [0, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16], "q_event": [1, 2, 6, 7, 8, 9, 12, 14], "q_event_a": [9, 14, 16], "q_event_b": [9, 14, 16], "q_event_c": 14, "q_event_prox": 9, "q_event_proxi": [2, 9, 14], "q_event_sequ": [2, 3, 13, 15], "q_grid": [9, 12, 14, 16], "q_schema": [1, 2, 11, 15], "q_schema_item": 10, "q_target": 15, "q_target_beat": [3, 12], "q_target_measur": 12, "qevent": [0, 2, 4, 6, 8, 16, 17], "qeventproxi": [0, 4, 9, 12, 14, 16, 17], "qeventsequ": [0, 1, 2, 3, 4, 7, 13, 15, 17], "qgrid": [0, 2, 3, 4, 7, 12, 14, 16, 17], "qgridcontain": [4, 9], "qgridleaf": [4, 9], "qgridleav": 9, "qschema": [0, 4, 13, 15, 17], "qschemaitem": [0, 4, 17], "qsequenc": 13, "qtarget": [0, 4, 11, 15, 17], "qtargetbeat": [3, 4, 12, 13], "qtargetitem": [0, 4, 13, 17], "qtargetmeasur": [4, 12, 13], "qualiti": 16, "quantiz": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17], "quantizationjob": [0, 4, 5, 12, 17], "quarter": 15, "r16": [1, 2, 8, 15], "r32": [1, 15], "r4": [2, 15], "r8": 15, "rais": 15, "rang": [2, 3, 6, 15], "rank": 3, "rather": 2, "ratio": [9, 16], "ration": 7, "re": 15, "read": [2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16], "recal": 14, "recent": 15, "reconstruct": 14, "recurs": 9, "redefin": [6, 7, 8, 9, 14, 16], "refer": [15, 16], "reference_dur": [10, 11, 12], "regard": 1, "regroup": 9, "regroup_leaves_with_unencessary_divis": 9, "releas": 5, "remov": 9, "replac": [2, 9], "replace_rest_with_final_grace_not": 2, "repositori": 15, "repr": [5, 6, 7, 9, 10, 11, 12, 14], "repres": [3, 7, 9, 10, 12, 13], "represent": [9, 16], "requir": [6, 7, 8, 9, 14, 16], "rescal": 16, "resourc": 5, "respect": 9, "rest": 2, "result": [2, 11, 15], "result_queu": 5, "return": [2, 5, 8, 9, 11], "rhythm": [0, 4, 9, 11, 15], "rhythmic": [9, 15, 16], "rhythmtre": [4, 9], "rhythmtreecontain": [4, 9], "rhythmtreeleaf": 9, "rhythmtreenod": [4, 9], "root": [9, 16], "root_contain": 9, "root_nod": 9, "rtc": 9, "rtc_a": 9, "rtc_b": 9, "rtc_c": 9, "rtm": 9, "rtm_format": [9, 14, 16], "rule": 16, "run": 5, "safe": [5, 6, 12, 13], "sai": 16, "same": [7, 9, 15, 16], "scale": 8, "schema": [10, 11], "score": [1, 2, 3, 9, 15], "search": [9, 10, 11, 12, 14, 16], "search_tre": [2, 10, 11, 12, 14, 16], "searchtre": [0, 4, 10, 12, 14, 15, 17], "second": 2, "select": [2, 3, 9, 12, 15], "self": [5, 9, 11], "send": 5, "sentinel": [5, 16], "sequenc": [2, 5, 7, 8, 9, 11, 13, 14, 15], "sequenti": 11, "seri": 11, "serial": 5, "serialjobhandl": [4, 5, 15], "set": [2, 9, 11, 12, 15, 16], "shape": 9, "should": 2, "show": [1, 2, 3, 9, 15], "sigkil": 5, "signal": 5, "signatur": [1, 10, 11, 12, 15], "signific": 7, "sigterm": 5, "silent": [7, 8], "silentqev": [4, 7, 8, 14], "similarli": 11, "singl": [2, 3, 8, 11, 12], "slice": [8, 11], "smallest": 3, "smart": 11, "so": 16, "some": 9, "sort": [7, 9, 11, 16], "sort_q_events_by_index": 9, "sourc": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "source_tempo": 1, "special": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16], "specif": 11, "specifi": [15, 16], "staff": [1, 2, 3, 8, 15], "start": [5, 9, 11], "start_offset": 9, "state": 10, "static": [7, 8], "stdin": 15, "step": 11, "still": 5, "stop": [5, 9], "stop_offset": 9, "store": [12, 14], "str": [6, 7, 9, 10, 11, 12, 14, 16], "strategi": 16, "strict": [2, 3, 9, 15], "string": 9, "strongli": 11, "structur": [9, 13, 15, 16], "sub": 1, "subclass": [2, 11], "subdivid": [9, 11, 16], "subdivide_leaf": 9, "subdivide_leav": 9, "subdivis": [9, 16], "subpackag": 4, "subscript": 11, "succeed": 9, "succeeding_q_event_proxi": 9, "suitabl": 5, "sum": [9, 16], "summari": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16], "support": 15, "suppos": 15, "take": 11, "target": [11, 12, 13], "target_class": 11, "target_item_class": 11, "target_tempo": 1, "techniqu": [0, 4], "tempi": 15, "templat": 11, "tempo": [1, 2, 3, 8, 10, 11, 12, 15], "termin": [5, 7, 8], "terminalqev": [4, 7, 8], "terminateprocess": 5, "test": 10, "text": 9, "textual_ind": [10, 11, 12], "than": [2, 7], "thei": [1, 3, 16], "them": 14, "thi": [5, 6, 7, 9, 11, 14, 15, 16], "third": 15, "those": [6, 7, 9, 11, 14], "three": 11, "thu": [9, 16], "ti": [1, 15], "tie": 1, "tiechain": 15, "time": [1, 2, 3, 10, 11, 12, 15], "time_signatur": [1, 2, 10, 11, 12, 15], "timelin": 10, "timeout": 5, "timepoint": 13, "timesignatur": [1, 10, 11, 12, 15], "timestep": 11, "togeth": 15, "token": 2, "top_down": 9, "total": 9, "traceback": 15, "transpar": 9, "treat": 11, "tree": [9, 10, 11, 12, 14, 15, 16], "trevor": 15, "triangl": 9, "true": [2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "truecolor": 9, "tupl": [2, 3, 8, 9, 12, 15], "tuplet": [1, 9, 11, 15, 16], "tweak": 9, "type": 14, "typeerror": 15, "ultim": 11, "under": [9, 14], "understood": 11, "unequ": 16, "unique_tre": [4, 9], "uniquetreecontain": [4, 9], "uniquetreelist": [4, 9], "uniquetreenod": [4, 9], "unit": 11, "units_per_minut": [10, 11, 12], "unix": 5, "unmet": 10, "until": [5, 11, 15], "unweight": 16, "unweightedsearchtre": [2, 4, 11, 12, 14, 16], "up": 1, "uqbar": [4, 9], "us": [2, 5, 6, 9, 10, 11, 12, 13, 14, 15], "use_full_measur": [2, 10, 11, 12], "user": 15, "ust": 11, "usual": 11, "valid": 14, "valu": [11, 16], "varieti": 11, "veri": 9, "version": [1, 2, 3, 9, 15], "via": [11, 14], "virtual": 9, "voic": [1, 2, 3, 9, 15], "wa": [10, 14], "wai": 11, "wait": 5, "we": 15, "weight": 16, "weightedsearchtre": [4, 16], "what": [2, 11, 16], "when": [2, 3, 6, 7, 8, 11, 12, 14, 16], "where": 2, "whether": [2, 5, 9, 11, 15], "which": [3, 5, 7, 9, 11, 13, 14, 15, 16], "whose": [9, 16], "window": 5, "wise": [1, 15], "within": [1, 9, 16], "without": [1, 11, 15], "worker": 5, "would": 15, "write": [5, 9], "y": 9, "yet": [5, 11], "you": 15, "zip": [2, 3, 8, 9, 15]}, "titles": ["Nauert API", "attackpointoptimizers", "gracehandlers", "heuristics", "nauert", "jobhandlers", "qeventproxy", "qevents", "qeventsequence", "qgrid", "qschemaitems", "qschemas", "qtargetitems", "qtargets", "quantizationjob", "quantizer", "searchtrees", "Nauert"], "titleterms": {"api": 0, "attackpointoptim": 1, "gracehandl": 2, "heurist": 3, "jobhandl": 5, "nauert": [0, 4, 17], "qevent": 7, "qeventproxi": 6, "qeventsequ": 8, "qgrid": 9, "qschema": 11, "qschemaitem": 10, "qtarget": 13, "qtargetitem": 12, "quantiz": 15, "quantizationjob": 14, "searchtre": 16}})
\ No newline at end of file