This is an automated email from the ASF dual-hosted git repository.
quinnj pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/arrow-julia.git
The following commit(s) were added to refs/heads/asf-site by this push:
new d25d44b build based on 3aa469a
d25d44b is described below
commit d25d44baa0178aaa57dc876ae6277600cd374865
Author: Documenter.jl <[email protected]>
AuthorDate: Tue Oct 28 03:05:35 2025 +0000
build based on 3aa469a
---
v2.8.1-rc1/.documenter-siteinfo.json | 1 +
v2.8.1-rc1/assets/documenter.js | 1227 +++++++++++++++++++++
v2.8.1-rc1/assets/themes/catppuccin-frappe.css | 1 +
v2.8.1-rc1/assets/themes/catppuccin-latte.css | 1 +
v2.8.1-rc1/assets/themes/catppuccin-macchiato.css | 1 +
v2.8.1-rc1/assets/themes/catppuccin-mocha.css | 1 +
v2.8.1-rc1/assets/themes/documenter-dark.css | 7 +
v2.8.1-rc1/assets/themes/documenter-light.css | 9 +
v2.8.1-rc1/assets/themeswap.js | 84 ++
v2.8.1-rc1/assets/warner.js | 68 ++
v2.8.1-rc1/index.html | 19 +
v2.8.1-rc1/manual/index.html | 70 ++
v2.8.1-rc1/objects.inv | Bin 0 -> 1234 bytes
v2.8.1-rc1/reference/index.html | 46 +
v2.8.1-rc1/search_index.js | 3 +
v2.8.1-rc1/siteinfo.js | 2 +
16 files changed, 1540 insertions(+)
diff --git a/v2.8.1-rc1/.documenter-siteinfo.json
b/v2.8.1-rc1/.documenter-siteinfo.json
new file mode 100644
index 0000000..89add8d
--- /dev/null
+++ b/v2.8.1-rc1/.documenter-siteinfo.json
@@ -0,0 +1 @@
+{"documenter":{"julia_version":"1.11.7","generation_timestamp":"2025-10-28T03:05:29","documenter_version":"1.15.0"}}
\ No newline at end of file
diff --git a/v2.8.1-rc1/assets/documenter.js b/v2.8.1-rc1/assets/documenter.js
new file mode 100644
index 0000000..9aeb0be
--- /dev/null
+++ b/v2.8.1-rc1/assets/documenter.js
@@ -0,0 +1,1227 @@
+// Generated by Documenter.jl
+requirejs.config({
+ paths: {
+ 'highlight-julia':
'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia.min',
+ 'headroom':
'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min',
+ 'jqueryui':
'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min',
+ 'katex-auto-render':
'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/contrib/auto-render.min',
+ 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min',
+ 'headroom-jquery':
'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min',
+ 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min',
+ 'highlight':
'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min',
+ 'highlight-julia-repl':
'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min',
+ },
+ shim: {
+ "highlight-julia": {
+ "deps": [
+ "highlight"
+ ]
+ },
+ "katex-auto-render": {
+ "deps": [
+ "katex"
+ ]
+ },
+ "headroom-jquery": {
+ "deps": [
+ "jquery",
+ "headroom"
+ ]
+ },
+ "highlight-julia-repl": {
+ "deps": [
+ "highlight"
+ ]
+ }
+}});
+////////////////////////////////////////////////////////////////////////////////
+require(['jquery', 'katex', 'katex-auto-render'], function($, katex,
renderMathInElement) {
+$(document).ready(function() {
+ renderMathInElement(
+ document.body,
+ {
+ "delimiters": [
+ {
+ "left": "$",
+ "right": "$",
+ "display": false
+ },
+ {
+ "left": "$$",
+ "right": "$$",
+ "display": true
+ },
+ {
+ "left": "\\[",
+ "right": "\\]",
+ "display": true
+ }
+ ]
+}
+ );
+})
+
+})
+////////////////////////////////////////////////////////////////////////////////
+require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'],
function($) {
+$(document).ready(function() {
+ hljs.highlightAll();
+})
+
+})
+////////////////////////////////////////////////////////////////////////////////
+require(['jquery'], function($) {
+
+let timer = 0;
+var isExpanded = true;
+
+$(document).on(
+ "click",
+ ".docstring .docstring-article-toggle-button",
+ function () {
+ let articleToggleTitle = "Expand docstring";
+ const parent = $(this).parent();
+
+ debounce(() => {
+ if (parent.siblings("section").is(":visible")) {
+ parent
+ .find("a.docstring-article-toggle-button")
+ .removeClass("fa-chevron-down")
+ .addClass("fa-chevron-right");
+ } else {
+ parent
+ .find("a.docstring-article-toggle-button")
+ .removeClass("fa-chevron-right")
+ .addClass("fa-chevron-down");
+
+ articleToggleTitle = "Collapse docstring";
+ }
+
+ parent
+ .children(".docstring-article-toggle-button")
+ .prop("title", articleToggleTitle);
+ parent.siblings("section").slideToggle();
+ });
+ },
+);
+
+$(document).on("click", ".docs-article-toggle-button", function (event) {
+ let articleToggleTitle = "Expand docstring";
+ let navArticleToggleTitle = "Expand all docstrings";
+ let animationSpeed = event.noToggleAnimation ? 0 : 400;
+
+ debounce(() => {
+ if (isExpanded) {
+ $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down");
+ $("a.docstring-article-toggle-button")
+ .removeClass("fa-chevron-down")
+ .addClass("fa-chevron-right");
+
+ isExpanded = false;
+
+ $(".docstring section").slideUp(animationSpeed);
+ } else {
+ $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up");
+ $("a.docstring-article-toggle-button")
+ .removeClass("fa-chevron-right")
+ .addClass("fa-chevron-down");
+
+ isExpanded = true;
+ articleToggleTitle = "Collapse docstring";
+ navArticleToggleTitle = "Collapse all docstrings";
+
+ $(".docstring section").slideDown(animationSpeed);
+ }
+
+ $(this).prop("title", navArticleToggleTitle);
+ $(".docstring-article-toggle-button").prop("title", articleToggleTitle);
+ });
+});
+
+function debounce(callback, timeout = 300) {
+ if (Date.now() - timer > timeout) {
+ callback();
+ }
+
+ clearTimeout(timer);
+
+ timer = Date.now();
+}
+
+})
+////////////////////////////////////////////////////////////////////////////////
+require([], function() {
+function addCopyButtonCallbacks() {
+ for (const el of document.getElementsByTagName("pre")) {
+ const button = document.createElement("button");
+ button.classList.add("copy-button", "fa-solid", "fa-copy");
+ button.setAttribute("aria-label", "Copy this code block");
+ button.setAttribute("title", "Copy");
+
+ el.appendChild(button);
+
+ const success = function () {
+ button.classList.add("success", "fa-check");
+ button.classList.remove("fa-copy");
+ };
+
+ const failure = function () {
+ button.classList.add("error", "fa-xmark");
+ button.classList.remove("fa-copy");
+ };
+
+ button.addEventListener("click", function () {
+ copyToClipboard(el.innerText).then(success, failure);
+
+ setTimeout(function () {
+ button.classList.add("fa-copy");
+ button.classList.remove("success", "fa-check", "fa-xmark");
+ }, 5000);
+ });
+ }
+}
+
+function copyToClipboard(text) {
+ // clipboard API is only available in secure contexts
+ if (window.navigator && window.navigator.clipboard) {
+ return window.navigator.clipboard.writeText(text);
+ } else {
+ return new Promise(function (resolve, reject) {
+ try {
+ const el = document.createElement("textarea");
+ el.textContent = text;
+ el.style.position = "fixed";
+ el.style.opacity = 0;
+ document.body.appendChild(el);
+ el.select();
+ document.execCommand("copy");
+
+ resolve();
+ } catch (err) {
+ reject(err);
+ } finally {
+ document.body.removeChild(el);
+ }
+ });
+ }
+}
+
+if (document.readyState === "loading") {
+ document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks);
+} else {
+ addCopyButtonCallbacks();
+}
+
+})
+////////////////////////////////////////////////////////////////////////////////
+require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) {
+
+// Manages the top navigation bar (hides it when the user starts scrolling
down on the
+// mobile).
+window.Headroom = Headroom; // work around buggy module loading?
+$(document).ready(function () {
+ $("#documenter .docs-navbar").headroom({
+ tolerance: { up: 10, down: 10 },
+ });
+});
+
+})
+////////////////////////////////////////////////////////////////////////////////
+require(['jquery'], function($) {
+
+$(document).ready(function () {
+ let meta = $("div[data-docstringscollapsed]").data();
+
+ if (meta?.docstringscollapsed) {
+ $("#documenter-article-toggle-button").trigger({
+ type: "click",
+ noToggleAnimation: true,
+ });
+
+ setTimeout(function () {
+ if (window.location.hash) {
+ const targetId = window.location.hash.substring(1);
+ const targetElement = document.getElementById(targetId);
+
+ if (targetElement) {
+ targetElement.scrollIntoView({
+ behavior: "smooth",
+ block: "center",
+ });
+ }
+ }
+ }, 100);
+ }
+});
+
+})
+////////////////////////////////////////////////////////////////////////////////
+require(['jquery'], function($) {
+
+/*
+To get an in-depth about the thought process you can refer:
https://hetarth02.hashnode.dev/series/gsoc
+
+PSEUDOCODE:
+
+Searching happens automatically as the user types or adjusts the selected
filters.
+To preserve responsiveness, as much as possible of the slow parts of the
search are done
+in a web worker. Searching and result generation are done in the worker, and
filtering and
+DOM updates are done in the main thread. The filters are in the main thread as
they should
+be very quick to apply. This lets filters be changed without re-searching with
minisearch
+(which is possible even if filtering is on the worker thread) and also lets
filters be
+changed _while_ the worker is searching and without message passing (neither
of which are
+possible if filtering is on the worker thread)
+
+SEARCH WORKER:
+
+Import minisearch
+
+Build index
+
+On message from main thread
+ run search
+ find the first 200 unique results from each category, and compute their divs
for display
+ note that this is necessary and sufficient information for the main thread
to find the
+ first 200 unique results from any given filter set
+ post results to main thread
+
+MAIN:
+
+Launch worker
+
+Declare nonconstant globals (worker_is_running, last_search_text,
unfiltered_results)
+
+On text update
+ if worker is not running, launch_search()
+
+launch_search
+ set worker_is_running to true, set last_search_text to the search text
+ post the search query to worker
+
+on message from worker
+ if last_search_text is not the same as the text in the search field,
+ the latest search result is not reflective of the latest search query, so
update again
+ launch_search()
+ otherwise
+ set worker_is_running to false
+
+ regardless, display the new search results to the user
+ save the unfiltered_results as a global
+ update_search()
+
+on filter click
+ adjust the filter selection
+ update_search()
+
+update_search
+ apply search filters by looping through the unfiltered_results and finding
the first 200
+ unique results that match the filters
+
+ Update the DOM
+*/
+
+/////// SEARCH WORKER ///////
+
+function worker_function(documenterSearchIndex, documenterBaseURL, filters) {
+ importScripts(
+ "https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/index.min.js",
+ );
+
+ let data = documenterSearchIndex.map((x, key) => {
+ x["id"] = key; // minisearch requires a unique for each object
+ return x;
+ });
+
+ // list below is the lunr 2.1.3 list minus the intersect with names(Base)
+ // (all, any, get, in, is, only, which) and (do, else, for, let, where,
while, with)
+ // ideally we'd just filter the original list but it's not available as a
variable
+ const stopWords = new Set([
+ "a",
+ "able",
+ "about",
+ "across",
+ "after",
+ "almost",
+ "also",
+ "am",
+ "among",
+ "an",
+ "and",
+ "are",
+ "as",
+ "at",
+ "be",
+ "because",
+ "been",
+ "but",
+ "by",
+ "can",
+ "cannot",
+ "could",
+ "dear",
+ "did",
+ "does",
+ "either",
+ "ever",
+ "every",
+ "from",
+ "got",
+ "had",
+ "has",
+ "have",
+ "he",
+ "her",
+ "hers",
+ "him",
+ "his",
+ "how",
+ "however",
+ "i",
+ "if",
+ "into",
+ "it",
+ "its",
+ "just",
+ "least",
+ "like",
+ "likely",
+ "may",
+ "me",
+ "might",
+ "most",
+ "must",
+ "my",
+ "neither",
+ "no",
+ "nor",
+ "not",
+ "of",
+ "off",
+ "often",
+ "on",
+ "or",
+ "other",
+ "our",
+ "own",
+ "rather",
+ "said",
+ "say",
+ "says",
+ "she",
+ "should",
+ "since",
+ "so",
+ "some",
+ "than",
+ "that",
+ "the",
+ "their",
+ "them",
+ "then",
+ "there",
+ "these",
+ "they",
+ "this",
+ "tis",
+ "to",
+ "too",
+ "twas",
+ "us",
+ "wants",
+ "was",
+ "we",
+ "were",
+ "what",
+ "when",
+ "who",
+ "whom",
+ "why",
+ "will",
+ "would",
+ "yet",
+ "you",
+ "your",
+ ]);
+
+ let index = new MiniSearch({
+ fields: ["title", "text"], // fields to index for full-text search
+ storeFields: ["location", "title", "text", "category", "page"], // fields
to return with results
+ processTerm: (term) => {
+ let word = stopWords.has(term) ? null : term;
+ if (word) {
+ // custom trimmer that doesn't strip @ and !, which are used in julia
macro and function names
+ word = word
+ .replace(/^[^a-zA-Z0-9@!]+/, "")
+ .replace(/[^a-zA-Z0-9@!]+$/, "");
+
+ word = word.toLowerCase();
+ }
+
+ return word ?? null;
+ },
+ // add . as a separator, because otherwise "title":
"Documenter.Anchors.add!", would not
+ // find anything if searching for "add!", only for the entire qualification
+ tokenize: (string) => string.split(/[\s\-\.]+/),
+ // options which will be applied during the search
+ searchOptions: {
+ prefix: true,
+ boost: { title: 100 },
+ fuzzy: 2,
+ },
+ });
+
+ index.addAll(data);
+
+ /**
+ * Used to map characters to HTML entities.
+ * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts
+ */
+ const htmlEscapes = {
+ "&": "&",
+ "<": "<",
+ ">": ">",
+ '"': """,
+ "'": "'",
+ };
+
+ /**
+ * Used to match HTML entities and HTML characters.
+ * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts
+ */
+ const reUnescapedHtml = /[&<>"']/g;
+ const reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
+
+ /**
+ * Escape function from lodash
+ * Refer: https://github.com/lodash/lodash/blob/main/src/escape.ts
+ */
+ function escape(string) {
+ return string && reHasUnescapedHtml.test(string)
+ ? string.replace(reUnescapedHtml, (chr) => htmlEscapes[chr])
+ : string || "";
+ }
+
+ /**
+ * RegX escape function from MDN
+ * Refer:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
+ */
+ function escapeRegExp(string) {
+ return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the
whole matched string
+ }
+
+ /**
+ * Make the result component given a minisearch result data object and the
value
+ * of the search input as queryString. To view the result object structure,
refer:
+ *
https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult
+ *
+ * @param {object} result
+ * @param {string} querystring
+ * @returns string
+ */
+ function make_search_result(result, querystring) {
+ let search_divider = `<div class="search-divider w-100"></div>`;
+ let display_link =
+ result.location.slice(Math.max(0), Math.min(50, result.location.length))
+
+ (result.location.length > 30 ? "..." : ""); // To cut-off the link
because it messes with the overflow of the whole div
+
+ if (result.page !== "") {
+ display_link += ` (${result.page})`;
+ }
+ searchstring = escapeRegExp(querystring);
+ let textindex = new RegExp(`${searchstring}`, "i").exec(result.text);
+ let text =
+ textindex !== null
+ ? result.text.slice(
+ Math.max(textindex.index - 100, 0),
+ Math.min(
+ textindex.index + querystring.length + 100,
+ result.text.length,
+ ),
+ )
+ : ""; // cut-off text before and after from the match
+
+ text = text.length ? escape(text) : "";
+
+ let display_result = text.length
+ ? "..." +
+ text.replace(
+ new RegExp(`${escape(searchstring)}`, "i"), // For first occurrence
+ '<span class="search-result-highlight py-1">$&</span>',
+ ) +
+ "..."
+ : ""; // highlights the match
+
+ let in_code = false;
+ if (!["page", "section"].includes(result.category.toLowerCase())) {
+ in_code = true;
+ }
+
+ // We encode the full url to escape some special characters which can lead
to broken links
+ let result_div = `
+ <a href="${encodeURI(
+ documenterBaseURL + "/" + result.location,
+ )}" class="search-result-link w-100 is-flex is-flex-direction-column
gap-2 px-4 py-2">
+ <div class="w-100 is-flex is-flex-wrap-wrap
is-justify-content-space-between is-align-items-flex-start">
+ <div class="search-result-title has-text-weight-bold ${
+ in_code ? "search-result-code-title" : ""
+ }">${escape(result.title)}</div>
+ <div class="property-search-result-badge">${result.category}</div>
+ </div>
+ <p>
+ ${display_result}
+ </p>
+ <div
+ class="has-text-left"
+ style="font-size: smaller;"
+ title="${result.location}"
+ >
+ <i class="fas fa-link"></i> ${display_link}
+ </div>
+ </a>
+ ${search_divider}
+ `;
+
+ return result_div;
+ }
+
+ self.onmessage = function (e) {
+ let query = e.data;
+ let results = index.search(query, {
+ filter: (result) => {
+ // Only return relevant results
+ return result.score >= 1;
+ },
+ combineWith: "AND",
+ });
+
+ // Pre-filter to deduplicate and limit to 200 per category to the extent
+ // possible without knowing what the filters are.
+ let filtered_results = [];
+ let counts = {};
+ for (let filter of filters) {
+ counts[filter] = 0;
+ }
+ let present = {};
+
+ for (let result of results) {
+ cat = result.category;
+ cnt = counts[cat];
+ if (cnt < 200) {
+ id = cat + "---" + result.location;
+ if (present[id]) {
+ continue;
+ }
+ present[id] = true;
+ filtered_results.push({
+ location: result.location,
+ category: cat,
+ div: make_search_result(result, query),
+ });
+ }
+ }
+
+ postMessage(filtered_results);
+ };
+}
+
+/////// SEARCH MAIN ///////
+
+function runSearchMainCode() {
+ // `worker = Threads.@spawn worker_function(documenterSearchIndex)`, but in
JavaScript!
+ const filters = [
+ ...new Set(documenterSearchIndex["docs"].map((x) => x.category)),
+ ];
+ const worker_str =
+ "(" +
+ worker_function.toString() +
+ ")(" +
+ JSON.stringify(documenterSearchIndex["docs"]) +
+ "," +
+ JSON.stringify(documenterBaseURL) +
+ "," +
+ JSON.stringify(filters) +
+ ")";
+ const worker_blob = new Blob([worker_str], { type: "text/javascript" });
+ const worker = new Worker(URL.createObjectURL(worker_blob));
+
+ // Whether the worker is currently handling a search. This is a boolean
+ // as the worker only ever handles 1 or 0 searches at a time.
+ var worker_is_running = false;
+
+ // The last search text that was sent to the worker. This is used to
determine
+ // if the worker should be launched again when it reports back results.
+ var last_search_text = "";
+
+ // The results of the last search. This, in combination with the state of
the filters
+ // in the DOM, is used compute the results to display on calls to
update_search.
+ var unfiltered_results = [];
+
+ // Which filter is currently selected
+ var selected_filter = "";
+
+ document.addEventListener("reset-filter", function () {
+ selected_filter = "";
+ update_search();
+ });
+
+ //update the url with search query
+ function updateSearchURL(query) {
+ const url = new URL(window.location);
+
+ if (query && query.trim() !== "") {
+ url.searchParams.set("q", query);
+ } else {
+ // remove the 'q' param if it exists
+ if (url.searchParams.has("q")) {
+ url.searchParams.delete("q");
+ }
+ }
+
+ // Add or remove the filter parameter based on selected_filter
+ if (selected_filter && selected_filter.trim() !== "") {
+ url.searchParams.set("filter", selected_filter);
+ } else {
+ // remove the 'filter' param if it exists
+ if (url.searchParams.has("filter")) {
+ url.searchParams.delete("filter");
+ }
+ }
+
+ // Only update history if there are parameters, otherwise use the base URL
+ if (url.search) {
+ window.history.replaceState({}, "", url);
+ } else {
+ window.history.replaceState({}, "", url.pathname + url.hash);
+ }
+ }
+
+ $(document).on("input", ".documenter-search-input", function (event) {
+ if (!worker_is_running) {
+ launch_search();
+ }
+ });
+
+ function launch_search() {
+ worker_is_running = true;
+ last_search_text = $(".documenter-search-input").val();
+ updateSearchURL(last_search_text);
+ worker.postMessage(last_search_text);
+ }
+
+ worker.onmessage = function (e) {
+ if (last_search_text !== $(".documenter-search-input").val()) {
+ launch_search();
+ } else {
+ worker_is_running = false;
+ }
+
+ unfiltered_results = e.data;
+ update_search();
+ };
+
+ $(document).on("click", ".search-filter", function () {
+ let search_input = $(".documenter-search-input");
+ let cursor_position = search_input[0].selectionStart;
+
+ if ($(this).hasClass("search-filter-selected")) {
+ selected_filter = "";
+ } else {
+ selected_filter = $(this).text().toLowerCase();
+ }
+
+ // This updates search results and toggles classes for UI:
+ update_search();
+
+ search_input.focus();
+ search_input.setSelectionRange(cursor_position, cursor_position);
+ });
+
+ /**
+ * Make/Update the search component
+ */
+ function update_search() {
+ let querystring = $(".documenter-search-input").val();
+ updateSearchURL(querystring);
+
+ if (querystring.trim()) {
+ if (selected_filter == "") {
+ results = unfiltered_results;
+ } else {
+ results = unfiltered_results.filter((result) => {
+ return selected_filter == result.category.toLowerCase();
+ });
+ }
+
+ let search_result_container = ``;
+ let modal_filters = make_modal_body_filters();
+ let search_divider = `<div class="search-divider w-100"></div>`;
+
+ if (results.length) {
+ let links = [];
+ let count = 0;
+ let search_results = "";
+
+ for (var i = 0, n = results.length; i < n && count < 200; ++i) {
+ let result = results[i];
+ if (result.location && !links.includes(result.location)) {
+ search_results += result.div;
+ count++;
+ links.push(result.location);
+ }
+ }
+
+ if (count == 1) {
+ count_str = "1 result";
+ } else if (count == 200) {
+ count_str = "200+ results";
+ } else {
+ count_str = count + " results";
+ }
+ let result_count = `<div class="is-size-6">${count_str}</div>`;
+
+ search_result_container = `
+ <div class="is-flex is-flex-direction-column gap-2
is-align-items-flex-start">
+ ${modal_filters}
+ ${search_divider}
+ ${result_count}
+ <div class="is-clipped w-100 is-flex
is-flex-direction-column gap-2 is-align-items-flex-start has-text-justified
mt-1">
+ ${search_results}
+ </div>
+ </div>
+ `;
+ } else {
+ search_result_container = `
+ <div class="is-flex is-flex-direction-column gap-2
is-align-items-flex-start">
+ ${modal_filters}
+ ${search_divider}
+ <div class="is-size-6">0 result(s)</div>
+ </div>
+ <div class="has-text-centered my-5 py-5">No result found!</div>
+ `;
+ }
+
+ if ($(".search-modal-card-body").hasClass("is-justify-content-center")) {
+ $(".search-modal-card-body").removeClass("is-justify-content-center");
+ }
+
+ $(".search-modal-card-body").html(search_result_container);
+ } else {
+ if (!$(".search-modal-card-body").hasClass("is-justify-content-center"))
{
+ $(".search-modal-card-body").addClass("is-justify-content-center");
+ }
+
+ $(".search-modal-card-body").html(`
+ <div class="has-text-centered my-5 py-5">Type something to get
started!</div>
+ `);
+ }
+ }
+
+ //url param checking
+ function checkURLForSearch() {
+ const urlParams = new URLSearchParams(window.location.search);
+ const searchQuery = urlParams.get("q");
+ const filterParam = urlParams.get("filter");
+
+ // Set the selected filter if present in URL
+ if (filterParam) {
+ selected_filter = filterParam.toLowerCase();
+ }
+
+ // Trigger input event if there's a search query to perform the search
+ if (searchQuery) {
+ $(".documenter-search-input").val(searchQuery).trigger("input");
+ }
+ }
+ setTimeout(checkURLForSearch, 100);
+
+ /**
+ * Make the modal filter html
+ *
+ * @returns string
+ */
+ function make_modal_body_filters() {
+ let str = filters
+ .map((val) => {
+ if (selected_filter == val.toLowerCase()) {
+ return `<a href="javascript:;" class="search-filter
search-filter-selected"><span>${val}</span></a>`;
+ } else {
+ return `<a href="javascript:;"
class="search-filter"><span>${val}</span></a>`;
+ }
+ })
+ .join("");
+
+ return `
+ <div class="is-flex gap-2 is-flex-wrap-wrap
is-justify-content-flex-start is-align-items-center search-filters">
+ <span class="is-size-6">Filters:</span>
+ ${str}
+ </div>`;
+ }
+}
+
+function waitUntilSearchIndexAvailable() {
+ // It is possible that the documenter.js script runs before the page
+ // has finished loading and documenterSearchIndex gets defined.
+ // So we need to wait until the search index actually loads before setting
+ // up all the search-related stuff.
+ if (
+ typeof documenterSearchIndex !== "undefined" &&
+ typeof $ !== "undefined"
+ ) {
+ runSearchMainCode();
+ } else {
+ console.warn("Search Index or jQuery not available, waiting");
+ setTimeout(waitUntilSearchIndexAvailable, 100);
+ }
+}
+
+// The actual entry point to the search code
+waitUntilSearchIndexAvailable();
+
+})
+////////////////////////////////////////////////////////////////////////////////
+require(['jquery'], function($) {
+
+// Modal settings dialog
+$(document).ready(function () {
+ var settings = $("#documenter-settings");
+ $("#documenter-settings-button").click(function () {
+ settings.toggleClass("is-active");
+ });
+ // Close the dialog if X is clicked
+ $("#documenter-settings button.delete").click(function () {
+ settings.removeClass("is-active");
+ });
+ // Close dialog if ESC is pressed
+ $(document).keyup(function (e) {
+ if (e.keyCode == 27) settings.removeClass("is-active");
+ });
+});
+
+})
+////////////////////////////////////////////////////////////////////////////////
+require(['jquery'], function($) {
+
+$(document).ready(function () {
+ let search_modal_header = `
+ <header class="modal-card-head gap-2 is-align-items-center
is-justify-content-space-between w-100 px-3">
+ <div class="field mb-0 w-100">
+ <p class="control has-icons-right">
+ <input class="input documenter-search-input" type="text"
placeholder="Search" />
+ <span class="icon is-small is-right has-text-primary-dark gap-2">
+ <i class="fas fa-link link-icon is-clickable"></i>
+ <i class="fas fa-magnifying-glass mr-4"></i>
+ </span>
+ </p>
+ </div>
+ <div class="icon is-size-4 is-clickable close-search-modal">
+ <i class="fas fa-times"></i>
+ </div>
+ </header>
+ `;
+
+ let initial_search_body = `
+ <div class="has-text-centered my-5 py-5">Type something to get
started!</div>
+ `;
+
+ let search_modal_footer = `
+ <footer class="modal-card-foot is-flex is-justify-content-space-between
is-align-items-center">
+ <div class="is-flex gap-3 is-flex-wrap-wrap">
+ <span>
+ <kbd class="search-modal-key-hints">Ctrl</kbd> +
+ <kbd class="search-modal-key-hints">/</kbd> to search
+ </span>
+ <span> <kbd class="search-modal-key-hints">esc</kbd> to close </span>
+ </div>
+ <div class="is-flex gap-3 is-flex-wrap-wrap">
+ <span>
+ <kbd class="search-modal-key-hints">↑</kbd>
+ <kbd class="search-modal-key-hints">↓</kbd> to navigate
+ </span>
+ <span> <kbd class="search-modal-key-hints">Enter</kbd> to select
</span>
+ </div>
+ </footer>
+ `;
+
+ $(document.body).append(
+ `
+ <div class="modal" id="search-modal">
+ <div class="modal-background"></div>
+ <div class="modal-card search-min-width-50 search-min-height-100
is-justify-content-center">
+ ${search_modal_header}
+ <section class="modal-card-body is-flex is-flex-direction-column
is-justify-content-center gap-4 search-modal-card-body">
+ ${initial_search_body}
+ </section>
+ ${search_modal_footer}
+ </div>
+ </div>
+ `,
+ );
+
+ function checkURLForSearch() {
+ const urlParams = new URLSearchParams(window.location.search);
+ const searchQuery = urlParams.get("q");
+
+ if (searchQuery) {
+ //only if there is a search query, open the modal
+ openModal();
+ }
+ }
+
+ //this function will be called whenever the page will load
+ checkURLForSearch();
+
+ document.querySelector(".docs-search-query").addEventListener("click", () =>
{
+ openModal();
+ });
+
+ document
+ .querySelector(".close-search-modal")
+ .addEventListener("click", () => {
+ closeModal();
+ });
+
+ $(document).on("click", ".search-result-link", function () {
+ closeModal();
+ });
+
+ document.addEventListener("keydown", (event) => {
+ if ((event.ctrlKey || event.metaKey) && event.key === "/") {
+ openModal();
+ } else if (event.key === "Escape") {
+ closeModal();
+ } else if (
+ document.querySelector("#search-modal")?.classList.contains("is-active")
+ ) {
+ const searchResults = document.querySelectorAll(".search-result-link");
+
+ if (event.key === "ArrowDown") {
+ event.preventDefault();
+ if (searchResults.length > 0) {
+ const currentFocused = document.activeElement;
+ const currentIndex =
+ Array.from(searchResults).indexOf(currentFocused);
+ const nextIndex =
+ currentIndex < searchResults.length - 1 ? currentIndex + 1 : 0;
+ searchResults[nextIndex].focus();
+ }
+ } else if (event.key === "ArrowUp") {
+ event.preventDefault();
+ if (searchResults.length > 0) {
+ const currentFocused = document.activeElement;
+ const currentIndex =
+ Array.from(searchResults).indexOf(currentFocused);
+ const prevIndex =
+ currentIndex > 0 ? currentIndex - 1 : searchResults.length - 1;
+ searchResults[prevIndex].focus();
+ }
+ }
+ }
+ });
+
+ //event listener for the link icon to copy the URL
+ $(document).on("click", ".link-icon", function () {
+ const currentUrl = window.location.href;
+
+ navigator.clipboard
+ .writeText(currentUrl)
+ .then(() => {
+ const $linkIcon = $(this);
+ $linkIcon.removeClass("fa-link").addClass("fa-check");
+
+ setTimeout(() => {
+ $linkIcon.removeClass("fa-check").addClass("fa-link");
+ }, 1000);
+ })
+ .catch((err) => {
+ console.error("Failed to copy URL: ", err);
+ });
+ });
+
+ // Functions to open and close a modal
+ function openModal() {
+ let searchModal = document.querySelector("#search-modal");
+
+ searchModal.classList.add("is-active");
+ document.querySelector(".documenter-search-input").focus();
+ }
+
+ function closeModal() {
+ let searchModal = document.querySelector("#search-modal");
+ let initial_search_body = `
+ <div class="has-text-centered my-5 py-5">Type something to get
started!</div>
+ `;
+
+ $(".documenter-search-input").val("");
+ $(".search-modal-card-body").html(initial_search_body);
+
+ document.dispatchEvent(new CustomEvent("reset-filter"));
+
+ searchModal.classList.remove("is-active");
+ document.querySelector(".documenter-search-input").blur();
+
+ if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) {
+ $(".search-modal-card-body").addClass("is-justify-content-center");
+ }
+ }
+
+ document
+ .querySelector("#search-modal .modal-background")
+ .addEventListener("click", () => {
+ closeModal();
+ });
+});
+
+})
+////////////////////////////////////////////////////////////////////////////////
+require(['jquery'], function($) {
+
+// Manages the showing and hiding of the sidebar.
+$(document).ready(function () {
+ var sidebar = $("#documenter > .docs-sidebar");
+ var sidebar_button = $("#documenter-sidebar-button");
+ sidebar_button.click(function (ev) {
+ ev.preventDefault();
+ sidebar.toggleClass("visible");
+ if (sidebar.hasClass("visible")) {
+ // Makes sure that the current menu item is visible in the sidebar.
+ $("#documenter .docs-menu a.is-active").focus();
+ }
+ });
+ $("#documenter > .docs-main").bind("click", function (ev) {
+ if ($(ev.target).is(sidebar_button)) {
+ return;
+ }
+ if (sidebar.hasClass("visible")) {
+ sidebar.removeClass("visible");
+ }
+ });
+});
+
+// Resizes the package name / sitename in the sidebar if it is too wide.
+// Inspired by: https://github.com/davatron5000/FitText.js
+$(document).ready(function () {
+ e = $("#documenter .docs-autofit");
+ function resize() {
+ var L = parseInt(e.css("max-width"), 10);
+ var L0 = e.width();
+ if (L0 > L) {
+ var h0 = parseInt(e.css("font-size"), 10);
+ e.css("font-size", (L * h0) / L0);
+ // TODO: make sure it survives resizes?
+ }
+ }
+ // call once and then register events
+ resize();
+ $(window).resize(resize);
+ $(window).on("orientationchange", resize);
+});
+
+// Scroll the navigation bar to the currently selected menu item
+$(document).ready(function () {
+ var sidebar = $("#documenter .docs-menu").get(0);
+ var active = $("#documenter .docs-menu .is-active").get(0);
+ if (typeof active !== "undefined") {
+ sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15;
+ }
+});
+
+})
+////////////////////////////////////////////////////////////////////////////////
+require(['jquery'], function($) {
+
+// Theme picker setup
+$(document).ready(function () {
+ // onchange callback
+ $("#documenter-themepicker").change(function themepick_callback(ev) {
+ var themename = $("#documenter-themepicker option:selected").attr("value");
+ if (themename === "auto") {
+ // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ?
'dark' : 'light');
+ window.localStorage.removeItem("documenter-theme");
+ } else {
+ // set_theme(themename);
+ window.localStorage.setItem("documenter-theme", themename);
+ }
+ // We re-use the global function from themeswap.js to actually do the
swapping.
+ set_theme_from_local_storage();
+ });
+
+ // Make sure that the themepicker displays the correct theme when the theme
is retrieved
+ // from localStorage
+ if (typeof window.localStorage !== "undefined") {
+ var theme = window.localStorage.getItem("documenter-theme");
+ if (theme !== null) {
+ $("#documenter-themepicker option").each(function (i, e) {
+ e.selected = e.value === theme;
+ });
+ }
+ }
+});
+
+})
+////////////////////////////////////////////////////////////////////////////////
+require(['jquery'], function($) {
+
+// update the version selector with info from the siteinfo.js and
../versions.js files
+$(document).ready(function () {
+ // If the version selector is disabled with
DOCUMENTER_VERSION_SELECTOR_DISABLED in the
+ // siteinfo.js file, we just return immediately and not display the version
selector.
+ if (
+ typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" &&
+ DOCUMENTER_VERSION_SELECTOR_DISABLED
+ ) {
+ return;
+ }
+
+ var version_selector = $("#documenter .docs-version-selector");
+ var version_selector_select = $("#documenter .docs-version-selector select");
+
+ version_selector_select.change(function (x) {
+ target_href = version_selector_select
+ .children("option:selected")
+ .get(0).value;
+ window.location.href = target_href;
+ });
+
+ // add the current version to the selector based on siteinfo.js, but only if
the selector is empty
+ if (
+ typeof DOCUMENTER_CURRENT_VERSION !== "undefined" &&
+ $("#version-selector > option").length == 0
+ ) {
+ var option = $(
+ "<option value='#' selected='selected'>" +
+ DOCUMENTER_CURRENT_VERSION +
+ "</option>",
+ );
+ version_selector_select.append(option);
+ }
+
+ if (typeof DOC_VERSIONS !== "undefined") {
+ var existing_versions = version_selector_select.children("option");
+ var existing_versions_texts = existing_versions.map(function (i, x) {
+ return x.text;
+ });
+ DOC_VERSIONS.forEach(function (each) {
+ var version_url = documenterBaseURL + "/../" + each + "/";
+ var existing_id = $.inArray(each, existing_versions_texts);
+ // if not already in the version selector, add it as a new option,
+ // otherwise update the old option with the URL and enable it
+ if (existing_id == -1) {
+ var option = $(
+ "<option value='" + version_url + "'>" + each + "</option>",
+ );
+ version_selector_select.append(option);
+ } else {
+ var option = existing_versions[existing_id];
+ option.value = version_url;
+ option.disabled = false;
+ }
+ });
+ }
+
+ // only show the version selector if the selector has been populated
+ if (version_selector_select.children("option").length > 0) {
+ version_selector.toggleClass("visible");
+ }
+});
+
+})
diff --git a/v2.8.1-rc1/assets/themes/catppuccin-frappe.css
b/v2.8.1-rc1/assets/themes/catppuccin-frappe.css
new file mode 100644
index 0000000..a5a99a3
--- /dev/null
+++ b/v2.8.1-rc1/assets/themes/catppuccin-frappe.css
@@ -0,0 +1 @@
+html.theme--catppuccin-frappe
.pagination-previous,html.theme--catppuccin-frappe
.pagination-next,html.theme--catppuccin-frappe
.pagination-link,html.theme--catppuccin-frappe
.pagination-ellipsis,html.theme--catppuccin-frappe
.file-cta,html.theme--catppuccin-frappe
.file-name,html.theme--catppuccin-frappe .select
select,html.theme--catppuccin-frappe .textarea,html.theme--catppuccin-frappe
.input,html.theme--catppuccin-frappe #documenter .docs-sidebar
form.docs-search>input,html.theme--c [...]
diff --git a/v2.8.1-rc1/assets/themes/catppuccin-latte.css
b/v2.8.1-rc1/assets/themes/catppuccin-latte.css
new file mode 100644
index 0000000..f92591d
--- /dev/null
+++ b/v2.8.1-rc1/assets/themes/catppuccin-latte.css
@@ -0,0 +1 @@
+html.theme--catppuccin-latte
.pagination-previous,html.theme--catppuccin-latte
.pagination-next,html.theme--catppuccin-latte
.pagination-link,html.theme--catppuccin-latte
.pagination-ellipsis,html.theme--catppuccin-latte
.file-cta,html.theme--catppuccin-latte .file-name,html.theme--catppuccin-latte
.select select,html.theme--catppuccin-latte
.textarea,html.theme--catppuccin-latte .input,html.theme--catppuccin-latte
#documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin- [...]
diff --git a/v2.8.1-rc1/assets/themes/catppuccin-macchiato.css
b/v2.8.1-rc1/assets/themes/catppuccin-macchiato.css
new file mode 100644
index 0000000..755a194
--- /dev/null
+++ b/v2.8.1-rc1/assets/themes/catppuccin-macchiato.css
@@ -0,0 +1 @@
+html.theme--catppuccin-macchiato
.pagination-previous,html.theme--catppuccin-macchiato
.pagination-next,html.theme--catppuccin-macchiato
.pagination-link,html.theme--catppuccin-macchiato
.pagination-ellipsis,html.theme--catppuccin-macchiato
.file-cta,html.theme--catppuccin-macchiato
.file-name,html.theme--catppuccin-macchiato .select
select,html.theme--catppuccin-macchiato
.textarea,html.theme--catppuccin-macchiato
.input,html.theme--catppuccin-macchiato #documenter .docs-sidebar form.d [...]
diff --git a/v2.8.1-rc1/assets/themes/catppuccin-mocha.css
b/v2.8.1-rc1/assets/themes/catppuccin-mocha.css
new file mode 100644
index 0000000..926c716
--- /dev/null
+++ b/v2.8.1-rc1/assets/themes/catppuccin-mocha.css
@@ -0,0 +1 @@
+html.theme--catppuccin-mocha
.pagination-previous,html.theme--catppuccin-mocha
.pagination-next,html.theme--catppuccin-mocha
.pagination-link,html.theme--catppuccin-mocha
.pagination-ellipsis,html.theme--catppuccin-mocha
.file-cta,html.theme--catppuccin-mocha .file-name,html.theme--catppuccin-mocha
.select select,html.theme--catppuccin-mocha
.textarea,html.theme--catppuccin-mocha .input,html.theme--catppuccin-mocha
#documenter .docs-sidebar form.docs-search>input,html.theme--catppuccin- [...]
diff --git a/v2.8.1-rc1/assets/themes/documenter-dark.css
b/v2.8.1-rc1/assets/themes/documenter-dark.css
new file mode 100644
index 0000000..cd71f36
--- /dev/null
+++ b/v2.8.1-rc1/assets/themes/documenter-dark.css
@@ -0,0 +1,7 @@
+html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark
.pagination-next,html.theme--documenter-dark
.pagination-link,html.theme--documenter-dark
.pagination-ellipsis,html.theme--documenter-dark
.file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark
.select select,html.theme--documenter-dark
.textarea,html.theme--documenter-dark .input,html.theme--documenter-dark
#documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark
.butt [...]
+ Theme: a11y-dark
+ Author: @ericwbailey
+ Maintainer: @ericwbailey
+
+ Based on the Tomorrow Night Eighties theme:
https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css
+*/}html.theme--documenter-dark
html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark
article,html.theme--documenter-dark aside,html.theme--documenter-dark
figure,html.theme--documenter-dark footer,html.theme--documenter-dark
header,html.theme--documenter-dark hgroup,html.theme--documenter-dark sec [...]
diff --git a/v2.8.1-rc1/assets/themes/documenter-light.css
b/v2.8.1-rc1/assets/themes/documenter-light.css
new file mode 100644
index 0000000..e1ac71f
--- /dev/null
+++ b/v2.8.1-rc1/assets/themes/documenter-light.css
@@ -0,0 +1,9 @@
+.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select
select,.textarea,.input,#documenter .docs-sidebar
form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px
solid
transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em
- 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.7 [...]
+ Theme: Default
+ Description: Original highlight.js style
+ Author: (c) Ivan Sagalaev <[email protected]>
+ Maintainer: @highlightjs/core-team
+ Website: https://highlightjs.org/
+ License: see project LICENSE
+ Touched: 2021
+*/pre
code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px
5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag
.hljs-name,.hljs-tag
.hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta
.hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}
[...]
diff --git a/v2.8.1-rc1/assets/themeswap.js b/v2.8.1-rc1/assets/themeswap.js
new file mode 100644
index 0000000..9f5eebe
--- /dev/null
+++ b/v2.8.1-rc1/assets/themeswap.js
@@ -0,0 +1,84 @@
+// Small function to quickly swap out themes. Gets put into the <head> tag..
+function set_theme_from_local_storage() {
+ // Initialize the theme to null, which means default
+ var theme = null;
+ // If the browser supports the localstorage and is not disabled then try to
get the
+ // documenter theme
+ if (window.localStorage != null) {
+ // Get the user-picked theme from localStorage. May be `null`, which means
the default
+ // theme.
+ theme = window.localStorage.getItem("documenter-theme");
+ }
+ // Check if the users preference is for dark color scheme
+ var darkPreference =
+ window.matchMedia("(prefers-color-scheme: dark)").matches === true;
+ // Initialize a few variables for the loop:
+ //
+ // - active: will contain the index of the theme that should be active.
Note that there
+ // is no guarantee that localStorage contains sane values. If `active`
stays `null`
+ // we either could not find the theme or it is the default (primary)
theme anyway.
+ // Either way, we then need to stick to the primary theme.
+ //
+ // - disabled: style sheets that should be disabled (i.e. all the theme
style sheets
+ // that are not the currently active theme)
+ var active = null;
+ var disabled = [];
+ var primaryLightTheme = null;
+ var primaryDarkTheme = null;
+ for (var i = 0; i < document.styleSheets.length; i++) {
+ var ss = document.styleSheets[i];
+ // The <link> tag of each style sheet is expected to have a
data-theme-name attribute
+ // which must contain the name of the theme. The names in localStorage
much match this.
+ var themename = ss.ownerNode.getAttribute("data-theme-name");
+ // attribute not set => non-theme stylesheet => ignore
+ if (themename === null) continue;
+ // To distinguish the default (primary) theme, it needs to have the
data-theme-primary
+ // attribute set.
+ if (ss.ownerNode.getAttribute("data-theme-primary") !== null) {
+ primaryLightTheme = themename;
+ }
+ // Check if the theme is primary dark theme so that we could store its
name in darkTheme
+ if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) {
+ primaryDarkTheme = themename;
+ }
+ // If we find a matching theme (and it's not the default), we'll set
active to non-null
+ if (themename === theme) active = i;
+ // Store the style sheets of inactive themes so that we could disable them
+ if (themename !== theme) disabled.push(ss);
+ }
+ var activeTheme = null;
+ if (active !== null) {
+ // If we did find an active theme, we'll (1) add the theme--$(theme) class
to <html>
+ document.getElementsByTagName("html")[0].className = "theme--" + theme;
+ activeTheme = theme;
+ } else {
+ // If we did _not_ find an active theme, then we need to fall back to the
primary theme
+ // which can either be dark or light, depending on the user's OS
preference.
+ var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme;
+ // In case it somehow happens that the relevant primary theme was not
found in the
+ // preceding loop, we abort without doing anything.
+ if (activeTheme === null) {
+ console.error("Unable to determine primary theme.");
+ return;
+ }
+ // When switching to the primary light theme, then we must not have a
class name
+ // for the <html> tag. That's only for non-primary or the primary dark
theme.
+ if (darkPreference) {
+ document.getElementsByTagName("html")[0].className =
+ "theme--" + activeTheme;
+ } else {
+ document.getElementsByTagName("html")[0].className = "";
+ }
+ }
+ for (var i = 0; i < document.styleSheets.length; i++) {
+ var ss = document.styleSheets[i];
+ // The <link> tag of each style sheet is expected to have a
data-theme-name attribute
+ // which must contain the name of the theme. The names in localStorage
much match this.
+ var themename = ss.ownerNode.getAttribute("data-theme-name");
+ // attribute not set => non-theme stylesheet => ignore
+ if (themename === null) continue;
+ // we'll disable all the stylesheets, except for the active one
+ ss.disabled = !(themename == activeTheme);
+ }
+}
+set_theme_from_local_storage();
diff --git a/v2.8.1-rc1/assets/warner.js b/v2.8.1-rc1/assets/warner.js
new file mode 100644
index 0000000..891cd53
--- /dev/null
+++ b/v2.8.1-rc1/assets/warner.js
@@ -0,0 +1,68 @@
+function maybeAddWarning() {
+ // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION
and DOCUMENTER_STABLE
+ // in siteinfo.js. DOCUMENTER_IS_DEV_VERSION is optional and defined in
siteinfo.js.
+ // If the required variables are undefined something went horribly wrong, so
we abort.
+ if (
+ window.DOCUMENTER_NEWEST === undefined ||
+ window.DOCUMENTER_CURRENT_VERSION === undefined ||
+ window.DOCUMENTER_STABLE === undefined
+ ) {
+ return;
+ }
+
+ // Current version is not a version number, so we can't tell if it's the
newest version. Abort.
+ if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) {
+ return;
+ }
+
+ // Current version is newest version, so no need to add a warning.
+ if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) {
+ return;
+ }
+
+ // Add a noindex meta tag (unless one exists) so that search engines don't
index this version of the docs.
+ if (document.body.querySelector('meta[name="robots"]') === null) {
+ const meta = document.createElement("meta");
+ meta.name = "robots";
+ meta.content = "noindex";
+
+ document.getElementsByTagName("head")[0].appendChild(meta);
+ }
+
+ const div = document.createElement("div");
+ // Base class is added by default
+ div.classList.add("warning-overlay-base");
+ const closer = document.createElement("button");
+ closer.classList.add("outdated-warning-closer", "delete");
+ closer.addEventListener("click", function () {
+ document.body.removeChild(div);
+ });
+ const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE;
+
+ // Determine if this is a development version or an older release
+ let warningMessage = "";
+ if (window.DOCUMENTER_IS_DEV_VERSION === true) {
+ div.classList.add("dev-warning-overlay");
+ warningMessage =
+ "This documentation is for the <strong>development version</strong> and
may contain unstable or unreleased features.<br>";
+ } else {
+ div.classList.add("outdated-warning-overlay");
+ warningMessage =
+ "This documentation is for an <strong>older version</strong> that may be
missing recent changes.<br>";
+ }
+
+ warningMessage +=
+ '<a href="' +
+ href +
+ '">Click here to go to the documentation for the latest stable
release.</a>';
+
+ div.innerHTML = warningMessage;
+ div.appendChild(closer);
+ document.body.appendChild(div);
+}
+
+if (document.readyState === "loading") {
+ document.addEventListener("DOMContentLoaded", maybeAddWarning);
+} else {
+ maybeAddWarning();
+}
diff --git a/v2.8.1-rc1/index.html b/v2.8.1-rc1/index.html
new file mode 100644
index 0000000..9c631ae
--- /dev/null
+++ b/v2.8.1-rc1/index.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport"
content="width=device-width, initial-scale=1.0"/><title>Home ·
Arrow.jl</title><meta name="title" content="Home · Arrow.jl"/><meta
property="og:title" content="Home · Arrow.jl"/><meta property="twitter:title"
content="Home · Arrow.jl"/><meta name="description" content="Documentation for
Arrow.jl."/><meta property="og:description" content="Documentation for
Arrow.jl."/><meta property="twitter:description" content="Document [...]
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+--><h1 id="Arrow.jl"><a class="docs-heading-anchor"
href="#Arrow.jl">Arrow.jl</a><a id="Arrow.jl-1"></a><a
class="docs-heading-anchor-permalink" href="#Arrow.jl"
title="Permalink"></a></h1><ul><li><a href="manual/#User-Manual">User
Manual</a></li><li class="no-marker"><ul><li><a
href="manual/#Support-for-generic-path-like-types">Support for generic
path-like types</a></li><li><a href="manual/#Reading-arrow-data">Reading arrow
data</a></li><li class="no-marker"><ul><li><a href="manual/#Ar [...]
diff --git a/v2.8.1-rc1/manual/index.html b/v2.8.1-rc1/manual/index.html
new file mode 100644
index 0000000..44c6134
--- /dev/null
+++ b/v2.8.1-rc1/manual/index.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport"
content="width=device-width, initial-scale=1.0"/><title>User Manual ·
Arrow.jl</title><meta name="title" content="User Manual · Arrow.jl"/><meta
property="og:title" content="User Manual · Arrow.jl"/><meta
property="twitter:title" content="User Manual · Arrow.jl"/><meta
name="description" content="Documentation for Arrow.jl."/><meta
property="og:description" content="Documentation for Arrow.jl."/><meta
property="twitter:de [...]
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+--><h1 id="User-Manual"><a class="docs-heading-anchor"
href="#User-Manual">User Manual</a><a id="User-Manual-1"></a><a
class="docs-heading-anchor-permalink" href="#User-Manual"
title="Permalink"></a></h1><p>The goal of this documentation is to provide a
brief introduction to the arrow data format, then provide a walk-through of the
functionality provided in the Arrow.jl Julia package, with an aim to expose a
little of the machinery "under the hood" to help explain how things
wo [...]
+
+table = Arrow.Table("data.arrow")</code></pre><h3
id="Arrow.Table"><a class="docs-heading-anchor"
href="#Arrow.Table"><code>Arrow.Table</code></a><a id="Arrow.Table-1"></a><a
class="docs-heading-anchor-permalink" href="#Arrow.Table"
title="Permalink"></a></h3><p>The type of <code>table</code> in this example
will be an <code>Arrow.Table</code>. When "reading" the arrow data,
<code>Arrow.Table</code> first <a
href="https://en.wikipedia.org/wiki/Mmap">"mmapped" [...]
+
+struct Person
+ id::Int
+ name::String
+end
+
+# overload interface method for custom type Person; return a symbol as the
"name"
+# this instructs Arrow.write what "label" to include with a column
with this custom type
+ArrowTypes.arrowname(::Type{Person}) = :Person
+# overload JuliaType on `Val{:Person}`, which is like a dispatchable string
+# return our custom *type* Person; this enables Arrow.Table to know how the
"label"
+# on a custom column should be mapped to a Julia type and deserialized
+ArrowTypes.JuliaType(::Val{:Person}) = Person
+
+table = (col1=[Person(1, "Bob"), Person(2, "Jane")],)
+io = IOBuffer()
+Arrow.write(io, table)
+seekstart(io)
+table2 = Arrow.Table(io)</code></pre><p>In this example, we're writing our
<code>table</code>, which is a NamedTuple with one column named
<code>col1</code>, which has two elements which are instances of our custom
<code>Person</code> struct. We overload <code>Arrowtypes.arrowname</code> so
that Arrow.jl knows how to serialize our <code>Person</code> struct. We then
overload <code>ArrowTypes.JuliaType</code> so the deserialization process knows
how to map from our type label back to [...]
+ArrowTypes.ArrowType(::Type{Nothing}) = Missing
+ArrowTypes.toarrow(::Nothing) = missing
+const NOTHING = Symbol("JuliaLang.Nothing")
+ArrowTypes.arrowname(::Type{Nothing}) = NOTHING
+ArrowTypes.JuliaType(::Val{NOTHING}) = Nothing
+ArrowTypes.fromarrow(::Type{Nothing}, ::Missing) =
nothing</code></pre><p>Let's walk through what's going on here,
line-by-line:</p><ul><li><code>ArrowKind</code> overload:
<code>ArrowKind</code>s are generic "categories" of types supported
by the arrow format, like <code>PrimitiveKind</code>, <code>ListKind</code>,
etc. They each correspond to a different data layout strategy supported in the
arrow format. Here, we define <code>nothing</code>'s kind to be <code>Nul
[...]
+table = (col = [
+ Interval{Closed,Unbounded}(1,nothing),
+],)
+const NAME = Symbol("JuliaLang.Interval")
+ArrowTypes.arrowname(::Type{Interval{T, L, R}}) where {T, L, R} = NAME
+const LOOKUP = Dict(
+ "Closed" => Closed,
+ "Unbounded" => Unbounded
+)
+ArrowTypes.arrowmetadata(::Type{Interval{T, L, R}}) where {T, L, R} =
string(L, ".", R)
+function ArrowTypes.JuliaType(::Val{NAME}, ::Type{NamedTuple{names, types}},
meta) where {names, types}
+ L, R = split(meta, ".")
+ return Interval{fieldtype(types, 1), LOOKUP[L], LOOKUP[R]}
+end
+ArrowTypes.fromarrow(::Type{Interval{T, L, R}}, first, last) where {T, L, R} =
Interval{L, R}(first, R == Unbounded ? nothing : last)
+io = Arrow.tobuffer(table)
+tbl = Arrow.Table(io)</code></pre><p>Again, let's break down what's
going on here:</p><ul><li>Here we're trying to save an
<code>Interval</code> type in the arrow format; this type is unique in that it
has two type parameters (<code>Closed</code> and <code>Unbounded</code>) that
are not inferred/based on fields, but are just "type tags" on the
type itself</li><li>Note that we define a generic <code>arrowname</code> method
on all <code>Interval</code>s, regardless of [...]
+tbl_parts = Tables.partitioner([(col1=data1, col2=data2), (col1=data3,
col2=data4)])
+Arrow.write(io, tbl_parts)
+
+# treat an array of csv files with same schema where each file is a partition
+# in this form, a function `CSV.File` is applied to each element of 2nd
argument
+csv_parts = Tables.partitioner(CSV.File, csv_files)
+Arrow.write(io, csv_parts)</code></pre><h3 id="Arrow.Writer"><a
class="docs-heading-anchor"
href="#Arrow.Writer"><code>Arrow.Writer</code></a><a id="Arrow.Writer-1"></a><a
class="docs-heading-anchor-permalink" href="#Arrow.Writer"
title="Permalink"></a></h3><p>With <code>Arrow.Writer</code>, you instantiate
an <code>Arrow.Writer</code> object, write sources using it, and then close it.
This allows for incrmental writes to the same sink. It is similar to
<code>Arrow.append</code> withou [...]
diff --git a/v2.8.1-rc1/objects.inv b/v2.8.1-rc1/objects.inv
new file mode 100644
index 0000000..aa172ea
Binary files /dev/null and b/v2.8.1-rc1/objects.inv differ
diff --git a/v2.8.1-rc1/reference/index.html b/v2.8.1-rc1/reference/index.html
new file mode 100644
index 0000000..c7949cc
--- /dev/null
+++ b/v2.8.1-rc1/reference/index.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport"
content="width=device-width, initial-scale=1.0"/><title>API Reference ·
Arrow.jl</title><meta name="title" content="API Reference · Arrow.jl"/><meta
property="og:title" content="API Reference · Arrow.jl"/><meta
property="twitter:title" content="API Reference · Arrow.jl"/><meta
name="description" content="Documentation for Arrow.jl."/><meta
property="og:description" content="Documentation for Arrow.jl."/><meta
property="tw [...]
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+--><h1 id="API-Reference"><a class="docs-heading-anchor"
href="#API-Reference">API Reference</a><a id="API-Reference-1"></a><a
class="docs-heading-anchor-permalink" href="#API-Reference"
title="Permalink"></a></h1><article class="docstring"><header><a
class="docstring-article-toggle-button fa-solid fa-chevron-down"
href="javascript:;" title="Collapse docstring"></a><a class="docstring-binding"
id="Arrow.ArrowVector"
href="#Arrow.ArrowVector"><code>Arrow.ArrowVector</code></a> — <span cla [...]
+Arrow.Stream(file::String; convert::Bool=true)
+Arrow.Stream(bytes::Vector{UInt8}, pos=1, len=nothing; convert::Bool=true)
+Arrow.Stream(inputs::Vector; convert::Bool=true)</code></pre><p>Start reading
an arrow formatted table, from:</p><ul><li><code>io</code>, bytes will be read
all at once via <code>read(io)</code></li><li><code>file</code>, bytes will be
read via <code>Mmap.mmap(file)</code></li><li><code>bytes</code>, a byte vector
directly, optionally allowing specifying the starting byte position
<code>pos</code> and <code>len</code></li><li>A <code>Vector</code> of any of
the above, in which each input [...]
+Arrow.Table(file::String; convert::Bool=true)
+Arrow.Table(bytes::Vector{UInt8}, pos=1, len=nothing; convert::Bool=true)
+Arrow.Table(inputs::Vector; convert::Bool=true)</code></pre><p>Read an arrow
formatted table, from:</p><ul><li><code>io</code>, bytes will be read all at
once via <code>read(io)</code></li><li><code>file</code>, bytes will be read
via <code>Mmap.mmap(file)</code></li><li><code>bytes</code>, a byte vector
directly, optionally allowing specifying the starting byte position
<code>pos</code> and <code>len</code></li><li>A <code>Vector</code> of any of
the above, in which each input should be [...]
+
+julia> partition1 = (col1 = [1, 2], col2 = ["A", "B"])
+(col1 = [1, 2], col2 = ["A", "B"])
+
+julia> Arrow.write(writer, partition1)
+
+julia> partition2 = (col1 = [3, 4], col2 = ["C", "D"])
+(col1 = [3, 4], col2 = ["C", "D"])
+
+julia> Arrow.write(writer, partition2)
+
+julia> close(writer)</code></pre><p>It's also possible to automatically
close the Writer using a do-block:</p><pre><code class="language-julia
hljs">julia> open(Arrow.Writer, tempname()) do writer
+ partition1 = (col1 = [1, 2], col2 = ["A", "B"])
+ Arrow.write(writer, partition1)
+ partition2 = (col1 = [3, 4], col2 = ["C", "D"])
+ Arrow.write(writer, partition2)
+ end</code></pre></div><a class="docs-sourcelink" target="_blank"
href="https://github.com/apache/arrow-julia/blob/3aa469a061a958c493105e06f6b8b209bb8e3ef0/src/write.jl#L78-L110">source</a></section></article><article
class="docstring"><header><a class="docstring-article-toggle-button fa-solid
fa-chevron-down" href="javascript:;" title="Collapse docstring"></a><a
class="docstring-binding" id="Arrow.append"
href="#Arrow.append"><code>Arrow.append</code></a> — <span class="docstring-
[...]
+Arrow.append(file::String, tbl)
+tbl |> Arrow.append(file)</code></pre><p>Append any <a
href="https://github.com/JuliaData/Tables.jl">Tables.jl</a>-compatible
<code>tbl</code> to an existing arrow formatted file or IO. The existing arrow
data must be in IPC stream format. Note that appending to the "feather
formatted file" is <em>not</em> allowed, as this file format doesn't
support appending. That means files written like
<code>Arrow.write(filename::String, tbl)</code> <em>cannot</em> be appended to;
i [...]
+Arrow.write(file::String, tbl)
+tbl |> Arrow.write(io_or_file)</code></pre><p>Write any <a
href="https://github.com/JuliaData/Tables.jl">Tables.jl</a>-compatible
<code>tbl</code> out as arrow formatted data. Providing an <code>io::IO</code>
argument will cause the data to be written to it in the <a
href="https://arrow.apache.org/docs/format/Columnar.html#ipc-streaming-format">"streaming"
format</a>, unless <code>file=true</code> keyword argument is passed.
Providing a <code>file::String</code> argument wil [...]
diff --git a/v2.8.1-rc1/search_index.js b/v2.8.1-rc1/search_index.js
new file mode 100644
index 0000000..de793bd
--- /dev/null
+++ b/v2.8.1-rc1/search_index.js
@@ -0,0 +1,3 @@
+var documenterSearchIndex = {"docs":
+[{"location":"manual/","page":"User Manual","title":"User
Manual","text":"<!---\n Licensed to the Apache Software Foundation (ASF) under
one\n or more contributor license agreements. See the NOTICE file\n
distributed with this work for additional information\n regarding copyright
ownership. The ASF licenses this file\n to you under the Apache License,
Version 2.0 (the\n \"License\"); you may not use this file except in
compliance\n with the License. You may obtain a copy of the [...]
+}
diff --git a/v2.8.1-rc1/siteinfo.js b/v2.8.1-rc1/siteinfo.js
new file mode 100644
index 0000000..d6e70d8
--- /dev/null
+++ b/v2.8.1-rc1/siteinfo.js
@@ -0,0 +1,2 @@
+var DOCUMENTER_CURRENT_VERSION = "v2.8.1-rc1";
+var DOCUMENTER_IS_DEV_VERSION = false;