-
- Read the Docs
- v: ${config.versions.current.slug}
-
-
-
-
- ${renderLanguages(config)}
- ${renderVersions(config)}
- ${renderDownloads(config)}
-
- On Read the Docs
-
- Project Home
-
-
- Builds
-
-
- Downloads
-
-
-
- 검색
-
-
-
-
-
-
- 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/docs/build/html/_static/language_data.js b/docs/build/html/_static/language_data.js
deleted file mode 100644
index c7fe6c6..0000000
--- a/docs/build/html/_static/language_data.js
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * 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/docs/build/html/_static/minus.png b/docs/build/html/_static/minus.png
deleted file mode 100644
index d96755f..0000000
Binary files a/docs/build/html/_static/minus.png and /dev/null differ
diff --git a/docs/build/html/_static/plus.png b/docs/build/html/_static/plus.png
deleted file mode 100644
index 7107cec..0000000
Binary files a/docs/build/html/_static/plus.png and /dev/null differ
diff --git a/docs/build/html/_static/pygments.css b/docs/build/html/_static/pygments.css
deleted file mode 100644
index 6f8b210..0000000
--- a/docs/build/html/_static/pygments.css
+++ /dev/null
@@ -1,75 +0,0 @@
-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: #f8f8f8; }
-.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
-.highlight .err { border: 1px solid #F00 } /* Error */
-.highlight .k { color: #008000; font-weight: bold } /* Keyword */
-.highlight .o { color: #666 } /* Operator */
-.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
-.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #9C6500 } /* Comment.Preproc */
-.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
-.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #3D7B7B; font-style: italic } /* 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: #E40000 } /* Generic.Error */
-.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.highlight .gi { color: #008400 } /* Generic.Inserted */
-.highlight .go { color: #717171 } /* Generic.Output */
-.highlight .gp { color: #000080; 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: #008000; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #008000 } /* Keyword.Pseudo */
-.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #B00040 } /* Keyword.Type */
-.highlight .m { color: #666 } /* Literal.Number */
-.highlight .s { color: #BA2121 } /* Literal.String */
-.highlight .na { color: #687822 } /* Name.Attribute */
-.highlight .nb { color: #008000 } /* Name.Builtin */
-.highlight .nc { color: #00F; font-weight: bold } /* Name.Class */
-.highlight .no { color: #800 } /* Name.Constant */
-.highlight .nd { color: #A2F } /* Name.Decorator */
-.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
-.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
-.highlight .nf { color: #00F } /* Name.Function */
-.highlight .nl { color: #767600 } /* Name.Label */
-.highlight .nn { color: #00F; font-weight: bold } /* Name.Namespace */
-.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #19177C } /* Name.Variable */
-.highlight .ow { color: #A2F; font-weight: bold } /* Operator.Word */
-.highlight .w { color: #BBB } /* Text.Whitespace */
-.highlight .mb { color: #666 } /* Literal.Number.Bin */
-.highlight .mf { color: #666 } /* Literal.Number.Float */
-.highlight .mh { color: #666 } /* Literal.Number.Hex */
-.highlight .mi { color: #666 } /* Literal.Number.Integer */
-.highlight .mo { color: #666 } /* Literal.Number.Oct */
-.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
-.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
-.highlight .sc { color: #BA2121 } /* Literal.String.Char */
-.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
-.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
-.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
-.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
-.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
-.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
-.highlight .sx { color: #008000 } /* Literal.String.Other */
-.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
-.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
-.highlight .ss { color: #19177C } /* Literal.String.Symbol */
-.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
-.highlight .fm { color: #00F } /* Name.Function.Magic */
-.highlight .vc { color: #19177C } /* Name.Variable.Class */
-.highlight .vg { color: #19177C } /* Name.Variable.Global */
-.highlight .vi { color: #19177C } /* Name.Variable.Instance */
-.highlight .vm { color: #19177C } /* Name.Variable.Magic */
-.highlight .il { color: #666 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/docs/build/html/_static/searchtools.js b/docs/build/html/_static/searchtools.js
deleted file mode 100644
index 91f4be5..0000000
--- a/docs/build/html/_static/searchtools.js
+++ /dev/null
@@ -1,635 +0,0 @@
-/*
- * 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 = [];
- // find documents, if any, containing the query word in their text/title term indices
- // use Object.hasOwnProperty to avoid mismatching against prototype properties
- const arr = [
- { files: terms.hasOwnProperty(word) ? terms[word] : undefined, score: Scorer.term },
- { files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, 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, new Map());
- const fileScores = scoreMap.get(file);
- fileScores.set(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).get(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/docs/build/html/_static/sphinx_highlight.js b/docs/build/html/_static/sphinx_highlight.js
deleted file mode 100644
index 8a96c69..0000000
--- a/docs/build/html/_static/sphinx_highlight.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/* 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/docs/build/html/_static/translations.js b/docs/build/html/_static/translations.js
deleted file mode 100644
index 58fdf54..0000000
--- a/docs/build/html/_static/translations.js
+++ /dev/null
@@ -1,62 +0,0 @@
-Documentation.addTranslations({
- "locale": "ko",
- "messages": {
- "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s",
- "© %(copyright_prefix)s %(copyright)s.": "",
- ", in ": ", \ubb38\uc11c - ",
- "About these documents": "\uc774 \ubb38\uc11c \uc815\ubcf4",
- "Automatically generated list of changes in version %(version)s": "\ubc84\uc804 %(version)s\uc758 \ubcc0\uacbd \uc0ac\ud56d (\uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ub41c \ubaa9\ub85d)",
- "C API changes": "C API \ubcc0\uacbd \uc0ac\ud56d",
- "Changes in Version %(version)s — %(docstitle)s": "\ubc84\uc804 %(version)s\uc758 \ubcc0\uacbd \uc0ac\ud56d — %(docstitle)s",
- "Collapse sidebar": "\uc0ac\uc774\ub4dc\ubc14 \ub2eb\uae30",
- "Complete Table of Contents": "\uc885\ud569 \ubaa9\ucc28",
- "Contents": "\ub0b4\uc6a9",
- "Copyright": "\uc800\uc791\uad8c",
- "Created using
Sphinx %(sphinx_version)s.": "
Sphinx %(sphinx_version)s \ubc84\uc804\uc73c\ub85c \uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.",
- "Expand sidebar": "\uc0ac\uc774\ub4dc\ubc14 \uc5f4\uae30",
- "Full index on one page": "\ud55c \ud398\uc774\uc9c0\uc5d0 \uc804\uccb4 \uc0c9\uc778 \ubcf4\uae30",
- "General Index": "\uc804\uccb4 \uc0c9\uc778",
- "Global Module Index": "\ubaa8\ub4c8 \ucd1d \uc0c9\uc778",
- "Go": "\uc774\ub3d9",
- "Hide Search Matches": "\uac80\uc0c9 \uc77c\uce58 \uc228\uae30\uae30",
- "Index": "\uc0c9\uc778",
- "Index – %(key)s": "",
- "Index pages by letter": "\uc54c\ud30c\ubcb3\ubcc4 \uc0c9\uc778",
- "Indices and tables:": "\uc0c9\uc778 \ubc0f \ud45c \ubaa9\ub85d:",
- "Last updated on %(last_updated)s.": "\ucd5c\uc885 \uc5c5\ub370\uc774\ud2b8: %(last_updated)s",
- "Library changes": "\ub77c\uc774\ube0c\ub7ec\ub9ac \ubcc0\uacbd \uc0ac\ud56d",
- "Navigation": "\ud0d0\uc0c9",
- "Next topic": "\ub2e4\uc74c \ud56d\ubaa9",
- "Other changes": "\ub2e4\ub978 \ubcc0\uacbd \uc0ac\ud56d",
- "Overview": "\uac1c\uc694",
- "Please activate JavaScript to enable the search\n functionality.": "\uac80\uc0c9 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 JavaScript\ub97c \ud65c\uc131\ud654\ud558\uc2ed\uc2dc\uc624.",
- "Preparing search...": "\uac80\uc0c9 \uc900\ube44 \uc911\u2026",
- "Previous topic": "\uc774\uc804 \ud56d\ubaa9",
- "Quick search": "\ube60\ub978 \uac80\uc0c9",
- "Search": "\uac80\uc0c9",
- "Search Page": "\uac80\uc0c9 \ud398\uc774\uc9c0",
- "Search Results": "\uac80\uc0c9 \uacb0\uacfc",
- "Search finished, found one page matching the search query.": [
- ""
- ],
- "Search within %(docstitle)s": "%(docstitle)s\uc5d0\uc11c \ucc3e\uae30",
- "Searching": "\uac80\uc0c9 \uc911",
- "Searching for multiple words only shows matches that contain\n all words.": "\uc5ec\ub7ec \ub2e8\uc5b4\ub97c \uac80\uc0c9\ud558\uba74 \ubaa8\ub4e0 \ub2e8\uc5b4\uac00 \ud3ec\ud568\ub41c \uc77c\uce58 \ud56d\ubaa9\ub9cc \ud45c\uc2dc\ub429\ub2c8\ub2e4.",
- "Show Source": "\uc18c\uc2a4 \ubcf4\uae30",
- "Table of Contents": "\ubaa9\ucc28",
- "This Page": "\ud604\uc7ac \ubb38\uc11c",
- "Welcome! This is": "\ud658\uc601\ud569\ub2c8\ub2e4!",
- "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\uac80\uc0c9\uc5b4\uc640 \uc77c\uce58\ud558\ub294 \ubb38\uc11c\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ubaa8\ub4e0 \ub2e8\uc5b4\uc758 \ucca0\uc790\uac00 \uc62c\ubc14\ub978\uc9c0, \ucda9\ubd84\ud55c \uce74\ud14c\uace0\ub9ac\ub97c \uc120\ud0dd\ud588\ub294\uc9c0 \ud655\uc778\ud558\uc2ed\uc2dc\uc624.",
- "all functions, classes, terms": "\ud568\uc218, \ud074\ub798\uc2a4 \ubc0f \uc6a9\uc5b4 \uac1c\uad00",
- "can be huge": "\ud070 \uacbd\uc6b0\uac00 \uc788\uc73c\ubbc0\ub85c \uc8fc\uc758",
- "last updated": "\ucd5c\uc885 \uc5c5\ub370\uc774\ud2b8",
- "lists all sections and subsections": "\ubaa8\ub4e0 \uad6c\uc5ed\uacfc \ud558\uc704 \uad6c\uc5ed \ubaa9\ub85d",
- "next chapter": "\ub2e4\uc74c \uc7a5",
- "previous chapter": "\uc774\uc804 \uc7a5",
- "quick access to all modules": "\ubaa8\ub4e0 \ubaa8\ub4c8 \uc870\uacac\ud45c",
- "search": "\uac80\uc0c9",
- "search this documentation": "\ubb38\uc11c \uac80\uc0c9",
- "the documentation for": "\ubb38\uc11c:"
- },
- "plural_expr": "0"
-});
\ No newline at end of file
diff --git a/docs/build/html/advanced_usage.html b/docs/build/html/advanced_usage.html
deleted file mode 100644
index ab40641..0000000
--- a/docs/build/html/advanced_usage.html
+++ /dev/null
@@ -1,454 +0,0 @@
-
-
-
-
-
-
-
-
-
고급 사용법 — Atio 2.0.0 문서
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atio
-
-
-
-
-
-
-
-
-
-고급 사용법
-이 섹션에서는 Atio의 고급 기능들을 다룹니다.
-
-스냅샷 기반 버전 관리
-Atio는 데이터의 버전을 관리할 수 있는 스냅샷 시스템을 제공합니다.
-
-기본 스냅샷 쓰기
-import atio
-import pandas as pd
-
-# 데이터 생성
-df = pd . DataFrame ({
- "id" : [ 1 , 2 , 3 ],
- "name" : [ "Alice" , "Bob" , "Charlie" ]
-})
-
-# 스냅샷으로 저장 (버전 관리)
-atio . write_snapshot ( df , "users_table" , format = "parquet" )
-
-# 새로운 데이터로 업데이트
-df_new = pd . DataFrame ({
- "id" : [ 1 , 2 , 3 , 4 ],
- "name" : [ "Alice" , "Bob" , "Charlie" , "David" ]
-})
-
-# append 모드로 스냅샷 추가
-atio . write_snapshot ( df_new , "users_table" , mode = "append" , format = "parquet" )
-
-
-
-
-스냅샷 읽기
-# 최신 버전 읽기
-latest_data = atio . read_table ( "users_table" )
-
-# 특정 버전 읽기
-version_1_data = atio . read_table ( "users_table" , version = 1 )
-
-# Polars로 읽기
-polars_data = atio . read_table ( "users_table" , output_as = "polars" )
-
-
-
-
-스냅샷 정리
-from datetime import timedelta
-
-# 7일 이상 된 스냅샷 삭제 (dry run)
-atio . expire_snapshots ( "users_table" , keep_for = timedelta ( days = 7 ), dry_run = True )
-
-# 실제 삭제 실행
-atio . expire_snapshots ( "users_table" , keep_for = timedelta ( days = 7 ), dry_run = False )
-
-
-
-
-
-데이터베이스 연동
-Pandas와 Polars를 사용하여 데이터베이스에 안전하게 데이터를 저장할 수 있습니다.
-
-Pandas SQL 연동
-import atio
-import pandas as pd
-from sqlalchemy import create_engine
-
-# 데이터베이스 연결
-engine = create_engine ( 'postgresql://user:password@localhost/dbname' )
-
-df = pd . DataFrame ({
- "id" : [ 1 , 2 , 3 ],
- "name" : [ "Alice" , "Bob" , "Charlie" ]
-})
-
-# SQL 데이터베이스에 저장
-atio . write ( df , format = "sql" , name = "users" , con = engine )
-
-
-
-
-Polars 데이터베이스 연동
-import atio
-import polars as pl
-
-df = pl . DataFrame ({
- "id" : [ 1 , 2 , 3 ],
- "name" : [ "Alice" , "Bob" , "Charlie" ]
-})
-
-# 데이터베이스에 저장
-atio . write ( df , format = "database" ,
- table_name = "users" ,
- connection_uri = "postgresql://user:password@localhost/dbname" )
-
-
-
-
-
-성능 최적화
-
-진행도 표시
-대용량 파일 처리 시 진행 상황을 실시간으로 확인할 수 있습니다.
-import atio
-import pandas as pd
-import numpy as np
-
-# 대용량 데이터 생성
-large_df = pd . DataFrame ( np . random . randn ( 1000000 , 10 ))
-
-# 진행도 표시와 함께 저장
-atio . write ( large_df , "large_data.parquet" ,
- format = "parquet" ,
- show_progress = True )
-
-
-
-
-상세 로깅
-성능 진단을 위한 상세한 로깅을 활성화할 수 있습니다.
-# 상세한 성능 정보 출력
-atio . write ( df , "data.parquet" , format = "parquet" , verbose = True )
-
-
-이를 통해 다음과 같은 정보를 확인할 수 있습니다:
-
-각 단계별 소요 시간
-임시 파일 생성 및 교체 과정
-백업 및 롤백 과정
-성능 병목점 분석
-
-
-
-
-에러 처리
-Atio는 다양한 에러 상황에 대해 안전하게 처리합니다.
-
-파일 시스템 에러
-import atio
-import pandas as pd
-
-df = pd . DataFrame ({ "a" : [ 1 , 2 , 3 ]})
-
-try :
- # 권한이 없는 디렉토리에 저장 시도
- atio . write ( df , "/root/data.parquet" , format = "parquet" )
-except PermissionError as e :
- print ( f "권한 에러: { e } " )
- # 원본 파일은 그대로 보존됨
-
-
-
-
-포맷 에러
-try :
- # 지원하지 않는 포맷 사용
- atio . write ( df , "data.unknown" , format = "unknown" )
-except ValueError as e :
- print ( f "지원하지 않는 포맷: { e } " )
-
-
-
-
-데이터베이스 에러
-try :
- # 잘못된 데이터베이스 연결 정보
- atio . write ( df , format = "sql" ,
- name = "users" ,
- con = "invalid_connection" )
-except Exception as e :
- print ( f "데이터베이스 에러: { e } " )
-
-
-
-
-
-플러그인 확장
-Atio는 플러그인 아키텍처를 통해 새로운 형식을 쉽게 추가할 수 있습니다.
-
-커스텀 형식 등록
-from atio.plugins import register_writer
-import pandas as pd
-
-# 커스텀 형식 등록
-def custom_writer ( df , path , ** kwargs ):
- # 커스텀 저장 로직
- with open ( path , 'w' ) as f :
- f . write ( "Custom format \n " )
- f . write ( df . to_string ())
-
-# Pandas DataFrame에 대한 커스텀 형식 등록
-register_writer ( pd . DataFrame , "custom" , custom_writer )
-
-# 사용
-df = pd . DataFrame ({ "a" : [ 1 , 2 , 3 ]})
-atio . write ( df , "data.custom" , format = "custom" )
-
-
-
-
-
-NumPy 배열 처리
-NumPy 배열의 다양한 저장 방식을 지원합니다.
-
-단일 배열 저장
-import atio
-import numpy as np
-
-arr = np . array ([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]])
-
-# .npy 파일로 저장
-atio . write ( arr , "array.npy" , format = "npy" )
-
-# .csv 파일로 저장
-atio . write ( arr , "array.csv" , format = "csv" )
-
-
-
-
-여러 배열 저장
-# 여러 배열을 딕셔너리로 저장
-arrays = {
- "features" : np . random . randn ( 1000 , 10 ),
- "labels" : np . random . randint ( 0 , 2 , 1000 ),
- "metadata" : np . array ([ 1 , 2 , 3 , 4 , 5 ])
-}
-
-# 압축된 .npz 파일로 저장
-atio . write ( arrays , "data.npz" , format = "npz_compressed" )
-
-
-
-
-
-실제 사용 사례
-
-머신러닝 파이프라인
-import atio
-import pandas as pd
-from sklearn.model_selection import train_test_split
-from sklearn.ensemble import RandomForestClassifier
-
-# 데이터 로드 및 전처리
-df = pd . read_csv ( "raw_data.csv" )
-
-# 전처리된 데이터를 안전하게 저장
-atio . write ( df , "processed_data.parquet" , format = "parquet" )
-
-# 학습/테스트 분할
-X_train , X_test , y_train , y_test = train_test_split (
- df . drop ( 'target' , axis = 1 ), df [ 'target' ], test_size = 0.2
-)
-
-# 분할된 데이터를 스냅샷으로 저장
-atio . write_snapshot ( X_train , "training_data" , format = "parquet" )
-atio . write_snapshot ( X_test , "test_data" , format = "parquet" )
-
-# 모델 학습
-model = RandomForestClassifier ()
-model . fit ( X_train , y_train )
-
-# 예측 결과를 안전하게 저장
-predictions = model . predict ( X_test )
-results_df = pd . DataFrame ({
- 'actual' : y_test ,
- 'predicted' : predictions
-})
-
-atio . write ( results_df , "predictions.parquet" , format = "parquet" )
-
-
-
-
-ETL 파이프라인
-import atio
-import pandas as pd
-from sqlalchemy import create_engine
-
-# 1. 원본 데이터 로드
-raw_data = pd . read_csv ( "source_data.csv" )
-
-# 2. 데이터 정제
-cleaned_data = raw_data . dropna ()
-cleaned_data = cleaned_data [ cleaned_data [ 'value' ] > 0 ]
-
-# 3. 안전하게 정제된 데이터 저장
-atio . write ( cleaned_data , "cleaned_data.parquet" , format = "parquet" )
-
-# 4. 데이터베이스에 저장
-engine = create_engine ( 'postgresql://user:password@localhost/warehouse' )
-atio . write ( cleaned_data , format = "sql" ,
- name = "processed_table" ,
- con = engine ,
- if_exists = 'replace' )
-
-# 5. 스냅샷으로 버전 관리
-atio . write_snapshot ( cleaned_data , "daily_processed" , format = "parquet" )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/build/html/api.html b/docs/build/html/api.html
deleted file mode 100644
index b4782d6..0000000
--- a/docs/build/html/api.html
+++ /dev/null
@@ -1,489 +0,0 @@
-
-
-
-
-
-
-
-
-
API 참조 — Atio 2.0.0 문서
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atio
-
-
-
-
-
-
-
-
-
-API 참조
-Atio의 모든 함수와 클래스에 대한 상세한 API 문서입니다.
-
-주요 함수
-Atio: 안전한 원자적 파일 쓰기 라이브러리
-
-
-Core 모듈
-progress 적용 후 write 함수
-
-
-atio.core. write ( obj , target_path = None , format = None , show_progress = False , verbose = False , ** kwargs ) [소스]
-데이터 객체(obj)를 안전하게 target_path 또는 데이터베이스에 저장합니다.
-
-파일 기반 쓰기 (format: ‘csv’, ‘parquet’, ‘excel’ 등):
-- target_path (str): 필수. 데이터가 저장될 파일 경로입니다.
-- 롤백 기능이 있는 원자적 쓰기를 수행합니다.
-데이터베이스 기반 쓰기 (format: ‘sql’, ‘database’):
-- target_path: 사용되지 않습니다.
-- kwargs (dict): 데이터베이스 쓰기에 필요한 추가 인자들입니다.
-
-
-pandas.to_sql: ‘name’(테이블명), ‘con’(커넥션 객체)가 필수입니다.
-polars.write_database: ‘table_name’, ‘connection_uri’가 필수입니다.
-
-
-
-
-
-매개변수:
-
-obj – 저장할 데이터 객체 (e.g., pandas.DataFrame, polars.DataFrame, np.ndarray).
-target_path (str , optional ) – 파일 저장 경로. 파일 기반 쓰기 시 필수. Defaults to None.
-format (str , optional ) – 저장할 포맷. Defaults to None.
-show_progress (bool ) – 진행도 표시 여부. Defaults to False.
-verbose (bool ) – 상세한 성능 진단 정보 출력 여부. Defaults to False.
-**kwargs – 각 쓰기 함수에 전달될 추가 키워드 인자.
-
-
-
-
-
-
-
-atio.core. write_snapshot ( obj , table_path , mode = 'overwrite' , format = 'parquet' , ** kwargs ) [소스]
-
-
-
-
-atio.core. read_table ( table_path , version = None , output_as = 'pandas' ) [소스]
-
-
-
-
-atio.core. expire_snapshots ( table_path , keep_for = datetime.timedelta(days=7) , dry_run = True ) [소스]
-설정된 보관 기간(keep_for)보다 오래된 스냅샷과
-더 이상 참조되지 않는 데이터 파일을 삭제합니다.
-
-
-
-
-write()
-안전한 원자적 파일 쓰기를 수행하는 메인 함수입니다.
-
-
-atio. write ( obj , target_path = None , format = 'parquet' , ** kwargs )
-
-매개변수:
-
-obj – 저장할 데이터 객체 (pandas.DataFrame, polars.DataFrame, numpy.ndarray)
-target_path – 저장할 파일 경로 (파일 저장 시 필수)
-format – 저장 형식 (‘csv’, ‘parquet’, ‘excel’, ‘json’, ‘sql’, ‘database’)
-show_progress – 진행률 표시 여부 (기본값: False)
-verbose – 상세 성능 정보 출력 여부 (기본값: False)
-**kwargs –
형식별 추가 매개변수
-
-
-
-반환:
-None
-
-Raises:
-ValueError, IOError, DatabaseError
-
-
-사용 예제:
-import atio
-import pandas as pd
-
-df = pd . DataFrame ({ "a" : [ 1 , 2 , 3 ]})
-
-# 기본 사용법
-atio . write ( df , "data.parquet" , format = "parquet" )
-
-# 진행률 표시
-atio . write ( df , "data.parquet" , format = "parquet" , show_progress = True )
-
-# 성능 정보 출력
-atio . write ( df , "data.parquet" , format = "parquet" , verbose = True )
-
-
-
-
-
-
-write_snapshot()
-데이터 스냅샷을 생성하여 버전 관리를 수행합니다.
-
-
-atio. write_snapshot ( obj , table_name , format = 'parquet' , ** kwargs )
-
-매개변수:
-
-
-반환:
-생성된 스냅샷 ID
-
-
-사용 예제:
-# 스냅샷 생성
-snapshot_id = atio . write_snapshot ( df , "users" , format = "parquet" )
-print ( f "생성된 스냅샷 ID: { snapshot_id } " )
-
-
-
-
-
-
-read_table()
-스냅샷에서 데이터를 읽어옵니다.
-
-
-atio. read_table ( table_name , snapshot_id = 'latest' , format = 'parquet' , ** kwargs )
-
-매개변수:
-
-
-반환:
-데이터 객체
-
-
-사용 예제:
-# 최신 스냅샷 읽기
-df = atio . read_table ( "users" , format = "parquet" )
-
-# 특정 스냅샷 읽기
-df = atio . read_table ( "users" , snapshot_id = "20240101_120000" , format = "parquet" )
-
-
-
-
-
-
-expire_snapshots()
-오래된 스냅샷을 정리합니다.
-
-
-atio. expire_snapshots ( table_name , days = 30 , format = 'parquet' )
-
-매개변수:
-
-table_name – 테이블 이름
-days – 보관할 일수 (기본값: 30)
-format – 형식
-
-
-반환:
-삭제된 스냅샷 수
-
-
-사용 예제:
-# 30일 이상 된 스냅샷 정리
-deleted_count = atio . expire_snapshots ( "users" , days = 30 )
-print ( f "삭제된 스냅샷 수: { deleted_count } " )
-
-
-
-
-
-
-Plugins 모듈
-
-
-atio.plugins. register_writer ( obj_type , fmt , handler ) [소스]
-(객체 타입, 포맷) 쌍으로 쓰기 핸들러를 등록
-
-
-
-
-atio.plugins. get_writer ( obj , fmt ) [소스]
-객체의 타입과 포맷에 맞는 핸들러를 조회
-
-
-
-
-Utils 모듈
-
-
-atio.utils. setup_logger ( name = 'atio' , debug_level = False ) [소스]
-
-
-
-
-atio.utils. check_file_exists ( path ) [소스]
-
-
-
-
-class atio.utils. ProgressBar ( filepath : str , stop_event : Event , description : str = 'Writing' ) [소스]
-기반 클래스: object
-파일 쓰기 진행 상황을 콘솔에 표시하는 클래스.
-스피너, 처리된 용량, 처리 속도, 경과 시간을 표시합니다.
-
-
-__init__ ( filepath : str , stop_event : Event , description : str = 'Writing' ) [소스]
-
-
-
-
-run ( ) [소스]
-진행도 막대를 실행하는 메인 루프.
-이 함수가 모니터링 스레드에서 실행됩니다.
-
-
-
-
-
-
-atio.utils. read_json ( path : str ) [소스]
-
-
-
-
-atio.utils. write_json ( data : dict , path : str ) [소스]
-
-
-
-
-지원하는 형식
-
-CSV 형식
-atio . write ( df , "data.csv" , format = "csv" , index = False , encoding = 'utf-8' )
-
-
-지원 매개변수:
-- index : 인덱스 포함 여부
-- encoding : 인코딩 방식
-- sep : 구분자
-- na_rep : NA 값 표현
-
-
-Parquet 형식
-atio . write ( df , "data.parquet" , format = "parquet" , compression = 'snappy' )
-
-
-지원 매개변수:
-- compression : 압축 방식 (‘snappy’, ‘gzip’, ‘brotli’)
-- engine : 엔진 (‘pyarrow’, ‘fastparquet’)
-
-
-Excel 형식
-atio . write ( df , "data.xlsx" , format = "excel" , sheet_name = "Sheet1" )
-
-
-지원 매개변수:
-- sheet_name : 시트 이름
-- engine : 엔진 (‘openpyxl’, ‘xlsxwriter’)
-
-
-JSON 형식
-atio . write ( df , "data.json" , format = "json" , orient = "records" )
-
-
-지원 매개변수:
-- orient : 방향 (‘records’, ‘split’, ‘index’, ‘columns’, ‘values’, ‘table’)
-
-
-SQL 형식
-atio . write ( df , format = "sql" , name = "table_name" , con = engine , if_exists = "replace" )
-
-
-지원 매개변수:
-- name : 테이블 이름
-- con : 데이터베이스 연결
-- if_exists : 테이블 존재 시 동작 (‘fail’, ‘replace’, ‘append’)
-
-
-
-예외 처리
-Atio는 다음과 같은 예외를 발생시킬 수 있습니다:
-
-예외 처리 예제:
-try :
- atio . write ( df , "data.parquet" , format = "parquet" )
-except ValueError as e :
- print ( f "매개변수 오류: { e } " )
-except IOError as e :
- print ( f "파일 시스템 오류: { e } " )
-except Exception as e :
- print ( f "예상치 못한 오류: { e } " )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/build/html/configuration.html b/docs/build/html/configuration.html
deleted file mode 100644
index 6cb5489..0000000
--- a/docs/build/html/configuration.html
+++ /dev/null
@@ -1,629 +0,0 @@
-
-
-
-
-
-
-
-
-
설정 및 구성 — Atio 2.0.0 문서
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atio
-
-
-
-
-
-
-
-
-
-설정 및 구성
-Atio의 다양한 설정 옵션과 구성 방법을 설명합니다.
-
-로깅 설정
-Atio는 상세한 로깅을 통해 작업 과정을 추적할 수 있습니다.
-
-기본 로깅
-import atio
-import pandas as pd
-
-df = pd . DataFrame ({ "a" : [ 1 , 2 , 3 ]})
-
-# 기본 로깅 (INFO 레벨)
-atio . write ( df , "data.parquet" , format = "parquet" )
-
-
-출력 예시:
-`
-[INFO] 임시 디렉토리 생성: /tmp/tmp12345
-[INFO] 임시 파일 경로: /tmp/tmp12345/data.parquet
-[INFO] 사용할 writer: to_parquet (format: parquet)
-[INFO] 데이터 임시 파일에 저장 완료: /tmp/tmp12345/data.parquet
-[INFO] 원자적 교체 완료: /tmp/tmp12345/data.parquet -> data.parquet
-[INFO] _SUCCESS 플래그 파일 생성: .data.parquet._SUCCESS
-[INFO] ✅ Atomic write completed successfully (took 0.1234s)
-`
-
-
-상세 로깅
-# 상세한 성능 정보 출력 (DEBUG 레벨)
-atio . write ( df , "data.parquet" , format = "parquet" , verbose = True )
-
-
-출력 예시:
-`
-[INFO] 임시 디렉토리 생성: /tmp/tmp12345
-[INFO] 임시 파일 경로: /tmp/tmp12345/data.parquet
-[INFO] 사용할 writer: to_parquet (format: parquet)
-[INFO] 데이터 임시 파일에 저장 완료: /tmp/tmp12345/data.parquet
-[INFO] 원자적 교체 완료: /tmp/tmp12345/data.parquet -> data.parquet
-[INFO] _SUCCESS 플래그 파일 생성: .data.parquet._SUCCESS
-[DEBUG] Atomic write step timings (SUCCESS): setup=0.0012s, write_call=0.0987s, replace=0.0001s, success_flag=0.0001s, total=0.1001s
-[INFO] ✅ Atomic write completed successfully (took 0.1001s)
-`
-
-
-
-진행도 표시
-대용량 파일 처리 시 진행 상황을 실시간으로 확인할 수 있습니다.
-
-기본 진행도 표시
-import atio
-import pandas as pd
-import numpy as np
-
-# 대용량 데이터 생성
-large_df = pd . DataFrame ( np . random . randn ( 1000000 , 10 ))
-
-# 진행도 표시와 함께 저장
-atio . write ( large_df , "large_data.parquet" ,
- format = "parquet" ,
- show_progress = True )
-
-
-출력 예시:
-`
-⠋ Writing large_data.parquet... [ 45.2 MB | 12.3 MB/s | 00:03 ]
-⠙ Writing large_data.parquet... [ 67.8 MB | 11.9 MB/s | 00:05 ]
-⠹ Writing large_data.parquet... [ 89.1 MB | 12.1 MB/s | 00:07 ]
-✅ Writing completed successfully (89.1 MB in 7s)
-`
-
-
-진행도 표시 옵션
-진행도 표시는 다음과 같은 정보를 제공합니다:
-
-스피너 : 작업 진행 상태를 시각적으로 표시
-파일 크기 : 현재까지 저장된 데이터 크기
-처리 속도 : 초당 처리되는 데이터 양
-경과 시간 : 작업 시작 후 경과한 시간
-
-
-
-
-성능 최적화 설정
-
-메모리 사용량 최적화
-# 대용량 데이터 처리 시 메모리 효율적인 설정
-atio . write ( large_df , "data.parquet" , format = "parquet" ,
- compression = 'snappy' , # 빠른 압축
- index = False ) # 인덱스 제외로 메모리 절약
-
-
-
-
-압축 설정
-# 속도 우선 (압축 없음)
-atio . write ( df , "data.parquet" , format = "parquet" , compression = None )
-
-# 균형 (snappy 압축)
-atio . write ( df , "data.parquet" , format = "parquet" , compression = 'snappy' )
-
-# 용량 우선 (gzip 압축)
-atio . write ( df , "data.parquet" , format = "parquet" , compression = 'gzip' )
-
-
-
-
-
-임시 디렉토리 설정
-기본적으로 Atio는 시스템의 임시 디렉토리를 사용합니다.
-
-사용자 정의 임시 디렉토리
-import os
-import tempfile
-
-# 임시 디렉토리 설정
-tempfile . tempdir = "/path/to/custom/temp"
-
-# 또는 환경 변수 설정
-os . environ [ 'TMPDIR' ] = "/path/to/custom/temp"
-
-
-주의사항:
-- 임시 디렉토리는 충분한 디스크 공간이 있어야 합니다
-- 쓰기 권한이 있어야 합니다
-- 빠른 I/O 성능을 위해 SSD를 권장합니다
-
-
-
-에러 처리 설정
-Atio는 다양한 에러 상황에 대해 안전하게 처리합니다.
-
-롤백 동작
-# 기본적으로 롤백이 자동으로 수행됩니다
-try :
- atio . write ( df , "data.parquet" , format = "parquet" )
-except Exception as e :
- # 에러 발생 시 원본 파일은 보존됩니다
- print ( f "저장 실패: { e } " )
- # 임시 파일은 자동으로 정리됩니다
-
-
-
-
-백업 파일 관리
-# 백업 파일은 작업 성공 시 자동으로 삭제됩니다
-# 실패 시에는 롤백 후 삭제됩니다
-
-# 백업 파일이 남아있는 경우 수동으로 확인
-import os
-backup_file = "data.parquet._backup"
-if os . path . exists ( backup_file ):
- print ( "백업 파일이 존재합니다. 수동 확인이 필요할 수 있습니다." )
-
-
-
-
-
-완료 플래그 시스템
-Atio는 작업 완료를 확인할 수 있는 플래그 파일을 생성합니다.
-
-플래그 파일 확인
-import os
-
-# 저장 완료 후 플래그 파일 확인
-atio . write ( df , "data.parquet" , format = "parquet" )
-
-# 플래그 파일 경로
-flag_file = ".data.parquet._SUCCESS"
-
-if os . path . exists ( flag_file ):
- print ( "저장이 성공적으로 완료되었습니다." )
-else :
- print ( "저장이 완료되지 않았거나 실패했습니다." )
-
-
-
-
-플래그 파일 활용
-# 배치 처리에서 완료 여부 확인
-files_to_process = [ "data1.parquet" , "data2.parquet" , "data3.parquet" ]
-
-for file in files_to_process :
- flag_file = f ". { file } ._SUCCESS"
- if not os . path . exists ( flag_file ):
- print ( f " { file } 처리가 완료되지 않았습니다." )
- # 재처리 로직
-
-
-
-
-
-스냅샷 설정
-스냅샷 시스템의 다양한 설정 옵션을 설명합니다.
-
-스냅샷 모드
-# overwrite 모드 (기본값)
-atio . write_snapshot ( df , "table_path" , mode = "overwrite" , format = "parquet" )
-
-# append 모드 (기존 데이터에 추가)
-atio . write_snapshot ( df , "table_path" , mode = "append" , format = "parquet" )
-
-
-
-
-스냅샷 정리 설정
-from datetime import timedelta
-
-# 7일 이상 된 스냅샷 삭제
-atio . expire_snapshots ( "table_path" ,
- keep_for = timedelta ( days = 7 ),
- dry_run = True ) # 실제 삭제 전 확인
-
-# 30일 이상 된 스냅샷 삭제
-atio . expire_snapshots ( "table_path" ,
- keep_for = timedelta ( days = 30 ),
- dry_run = False ) # 실제 삭제
-
-
-
-
-
-환경 변수 설정
-Atio의 동작을 제어하는 환경 변수들을 설정할 수 있습니다.
-
-로깅 레벨 설정
-import os
-
-# DEBUG 레벨로 로깅 설정
-os . environ [ 'ATIO_LOG_LEVEL' ] = 'DEBUG'
-
-# INFO 레벨로 로깅 설정 (기본값)
-os . environ [ 'ATIO_LOG_LEVEL' ] = 'INFO'
-
-
-
-
-임시 디렉토리 설정
-# 임시 디렉토리 경로 설정
-os . environ [ 'ATIO_TEMP_DIR' ] = '/path/to/temp'
-
-# 또는 시스템 임시 디렉토리 설정
-os . environ [ 'TMPDIR' ] = '/path/to/temp'
-
-
-
-
-성능 모니터링 설정
-# 성능 모니터링 활성화
-os . environ [ 'ATIO_PERFORMANCE_MONITORING' ] = 'true'
-
-# 성능 모니터링 비활성화
-os . environ [ 'ATIO_PERFORMANCE_MONITORING' ] = 'false'
-
-
-
-
-
-플러그인 설정
-커스텀 플러그인을 등록하여 새로운 형식을 지원할 수 있습니다.
-
-플러그인 등록
-from atio.plugins import register_writer
-import pandas as pd
-
-# 커스텀 형식 등록
-def custom_writer ( df , path , ** kwargs ):
- # 커스텀 저장 로직
- with open ( path , 'w' ) as f :
- f . write ( "Custom format \n " )
- f . write ( df . to_string ())
-
-# 등록
-register_writer ( pd . DataFrame , "custom" , custom_writer )
-
-
-
-
-플러그인 확인
-from atio.plugins import WRITER_MAPPING
-
-# 등록된 플러그인 확인
-for obj_type , formats in WRITER_MAPPING . items ():
- print ( f "Object type: { obj_type . __name__ } " )
- for fmt , handler in formats . items ():
- print ( f " - { fmt } : { handler } " )
-
-
-
-
-
-설정 파일 사용
-설정을 파일로 관리하여 일관된 설정을 유지할 수 있습니다.
-
-JSON 설정 파일
-import json
-
-# 설정 파일 생성
-config = {
- "default_format" : "parquet" ,
- "compression" : "snappy" ,
- "show_progress" : True ,
- "verbose" : False ,
- "temp_dir" : "/path/to/temp"
-}
-
-with open ( "atio_config.json" , "w" ) as f :
- json . dump ( config , f , indent = 2 )
-
-# 설정 파일 읽기
-with open ( "atio_config.json" , "r" ) as f :
- config = json . load ( f )
-
-# 설정 적용
-atio . write ( df , "data.parquet" ,
- format = config . get ( "default_format" , "parquet" ),
- compression = config . get ( "compression" , "snappy" ),
- show_progress = config . get ( "show_progress" , False ),
- verbose = config . get ( "verbose" , False ))
-
-
-
-
-YAML 설정 파일
-import yaml
-
-# 설정 파일 생성
-config = {
- "default_format" : "parquet" ,
- "compression" : "snappy" ,
- "show_progress" : True ,
- "verbose" : False ,
- "temp_dir" : "/path/to/temp"
-}
-
-with open ( "atio_config.yaml" , "w" ) as f :
- yaml . dump ( config , f )
-
-# 설정 파일 읽기
-with open ( "atio_config.yaml" , "r" ) as f :
- config = yaml . safe_load ( f )
-
-
-
-
-
-모범 사례
-
-프로덕션 환경 설정
-# 프로덕션 환경을 위한 설정
-import os
-import tempfile
-
-# 1. 전용 임시 디렉토리 설정
-tempfile . tempdir = "/var/tmp/atio"
-os . makedirs ( tempfile . tempdir , exist_ok = True )
-
-# 2. 로깅 레벨 설정
-os . environ [ 'ATIO_LOG_LEVEL' ] = 'INFO'
-
-# 3. 성능 최적화 설정
-def safe_write ( df , path , ** kwargs ):
- return atio . write ( df , path ,
- format = "parquet" ,
- compression = "snappy" ,
- show_progress = True ,
- verbose = False ,
- ** kwargs )
-
-
-
-
-개발 환경 설정
-# 개발 환경을 위한 설정
-import os
-
-# 1. 상세 로깅 활성화
-os . environ [ 'ATIO_LOG_LEVEL' ] = 'DEBUG'
-
-# 2. 성능 모니터링 활성화
-os . environ [ 'ATIO_PERFORMANCE_MONITORING' ] = 'true'
-
-# 3. 개발용 설정
-def dev_write ( df , path , ** kwargs ):
- return atio . write ( df , path ,
- format = "parquet" ,
- compression = None , # 압축 없음으로 빠른 처리
- show_progress = True ,
- verbose = True , # 상세 정보 출력
- ** kwargs )
-
-
-
-
-
-설정 검증
-설정이 올바르게 적용되었는지 확인하는 방법을 설명합니다.
-
-기본 검증
-import atio
-import pandas as pd
-import tempfile
-
-# 테스트 데이터 생성
-df = pd . DataFrame ({ "test" : [ 1 , 2 , 3 ]})
-
-# 설정 테스트
-def test_config ():
- # 임시 디렉토리 확인
- print ( f "임시 디렉토리: { tempfile . gettempdir () } " )
-
- # 로깅 테스트
- atio . write ( df , "test.parquet" , format = "parquet" , verbose = True )
-
- # 플래그 파일 확인
- import os
- if os . path . exists ( ".test.parquet._SUCCESS" ):
- print ( "설정이 올바르게 작동합니다." )
- else :
- print ( "설정에 문제가 있을 수 있습니다." )
-
-
-
-
-성능 테스트
-import time
-import pandas as pd
-import numpy as np
-
-# 성능 테스트
-def performance_test ():
- # 대용량 데이터 생성
- large_df = pd . DataFrame ( np . random . randn ( 100000 , 10 ))
-
- # 성능 측정
- start_time = time . time ()
- atio . write ( large_df , "performance_test.parquet" ,
- format = "parquet" ,
- show_progress = True )
- end_time = time . time ()
-
- print ( f "처리 시간: { end_time - start_time : .2f } 초" )
-
- # 파일 크기 확인
- import os
- file_size = os . path . getsize ( "performance_test.parquet" )
- print ( f "파일 크기: { file_size / 1024 / 1024 : .2f } MB" )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/build/html/examples.html b/docs/build/html/examples.html
deleted file mode 100644
index 75ea738..0000000
--- a/docs/build/html/examples.html
+++ /dev/null
@@ -1,539 +0,0 @@
-
-
-
-
-
-
-
-
-
사용 예제 — Atio 2.0.0 문서
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atio
-
-
-
-
-
-
-
-
-
-사용 예제
-Atio의 다양한 사용 사례와 고급 기능을 살펴보세요.
-
-기본 예제
-
-간단한 데이터 저장
-import atio
-import pandas as pd
-
-# 샘플 데이터 생성
-data = {
- "id" : [ 1 , 2 , 3 , 4 , 5 ],
- "name" : [ "Alice" , "Bob" , "Charlie" , "Diana" , "Eve" ],
- "age" : [ 25 , 30 , 35 , 28 , 32 ],
- "city" : [ "Seoul" , "Busan" , "Incheon" , "Daegu" , "Daejeon" ],
- "salary" : [ 50000 , 60000 , 70000 , 55000 , 65000 ]
-}
-
-df = pd . DataFrame ( data )
-
-# 다양한 형식으로 저장
-atio . write ( df , "employees.parquet" , format = "parquet" )
-atio . write ( df , "employees.csv" , format = "csv" , index = False )
-atio . write ( df , "employees.xlsx" , format = "excel" , sheet_name = "Employees" )
-
-
-
-
-
-대용량 데이터 처리
-
-진행률 표시와 성능 모니터링
-import numpy as np
-import pandas as pd
-import atio
-
-# 대용량 데이터 생성 (100만 행)
-large_data = {
- "id" : range ( 1 , 1000001 ),
- "value" : np . random . randn ( 1000000 ),
- "category" : np . random . choice ([ "A" , "B" , "C" ], 1000000 ),
- "timestamp" : pd . date_range ( "2024-01-01" , periods = 1000000 , freq = "S" )
-}
-
-large_df = pd . DataFrame ( large_data )
-
-# 진행률 표시와 성능 모니터링 활성화
-atio . write (
- large_df ,
- "large_dataset.parquet" ,
- format = "parquet" ,
- show_progress = True ,
- verbose = True ,
- compression = 'snappy'
-)
-
-
-
-
-
-데이터베이스 연동
-
-PostgreSQL 데이터베이스 저장
-import atio
-import pandas as pd
-from sqlalchemy import create_engine
-
-# 데이터베이스 연결
-engine = create_engine ( 'postgresql://username:password@localhost:5432/mydb' )
-
-# 샘플 데이터
-sales_data = {
- "order_id" : [ 1001 , 1002 , 1003 , 1004 , 1005 ],
- "product_name" : [ "Laptop" , "Mouse" , "Keyboard" , "Monitor" , "Headphones" ],
- "quantity" : [ 1 , 2 , 1 , 1 , 3 ],
- "price" : [ 1200 , 25 , 75 , 300 , 150 ],
- "order_date" : pd . date_range ( "2024-01-01" , periods = 5 )
-}
-
-sales_df = pd . DataFrame ( sales_data )
-
-# 데이터베이스에 안전하게 저장
-atio . write (
- sales_df ,
- format = "sql" ,
- name = "sales_orders" ,
- con = engine ,
- if_exists = "replace" ,
- index = False
-)
-
-
-
-
-
-스냅샷 기반 버전 관리
-
-데이터 버전 관리
-import atio
-import pandas as pd
-from datetime import datetime , timedelta
-
-# 초기 데이터
-initial_data = {
- "user_id" : [ 1 , 2 , 3 ],
- "name" : [ "Alice" , "Bob" , "Charlie" ],
- "status" : [ "active" , "active" , "inactive" ]
-}
-
-df = pd . DataFrame ( initial_data )
-
-# 초기 스냅샷 생성
-snapshot_id_1 = atio . write_snapshot ( df , "users" , format = "parquet" )
-print ( f "초기 스냅샷 생성: { snapshot_id_1 } " )
-
-# 데이터 업데이트
-df . loc [ df [ 'user_id' ] == 3 , 'status' ] = 'active'
-df = df . append ({ "user_id" : 4 , "name" : "Diana" , "status" : "active" }, ignore_index = True )
-
-# 업데이트된 스냅샷 생성
-snapshot_id_2 = atio . write_snapshot ( df , "users" , format = "parquet" )
-print ( f "업데이트 스냅샷 생성: { snapshot_id_2 } " )
-
-# 최신 데이터 읽기
-latest_df = atio . read_table ( "users" , format = "parquet" )
-print ( "최신 데이터:" )
-print ( latest_df )
-
-# 특정 스냅샷 읽기
-initial_df = atio . read_table ( "users" , snapshot_id = snapshot_id_1 , format = "parquet" )
-print ( "초기 데이터:" )
-print ( initial_df )
-
-# 오래된 스냅샷 정리 (7일 이상)
-deleted_count = atio . expire_snapshots ( "users" , days = 7 , format = "parquet" )
-print ( f "삭제된 스냅샷 수: { deleted_count } " )
-
-
-
-
-
-Polars DataFrame 활용
-
-고성능 데이터 처리
-import atio
-import polars as pl
-import numpy as np
-
-# Polars DataFrame 생성
-polars_data = {
- "id" : range ( 1 , 10001 ),
- "value" : np . random . randn ( 10000 ),
- "category" : np . random . choice ([ "A" , "B" , "C" , "D" ], 10000 ),
- "score" : np . random . uniform ( 0 , 100 , 10000 )
-}
-
-polars_df = pl . DataFrame ( polars_data )
-
-# Polars DataFrame 저장
-atio . write (
- polars_df ,
- "polars_data.parquet" ,
- format = "parquet" ,
- compression = 'snappy' ,
- show_progress = True
-)
-
-# 데이터 변환 후 저장
-filtered_df = polars_df . filter ( pl . col ( "score" ) > 50 )
-aggregated_df = filtered_df . group_by ( "category" ) . agg (
- pl . col ( "value" ) . mean () . alias ( "avg_value" ),
- pl . col ( "score" ) . mean () . alias ( "avg_score" )
-)
-
-atio . write ( aggregated_df , "aggregated_data.parquet" , format = "parquet" )
-
-
-
-
-
-에러 처리 및 복구
-
-안전한 데이터 처리
-import atio
-import pandas as pd
-import os
-
-def safe_data_processing ():
- try :
- # 원본 파일이 있는지 확인
- if os . path . exists ( "important_data.parquet" ):
- print ( "원본 파일이 존재합니다." )
-
- # 데이터 처리 및 저장
- df = pd . DataFrame ({
- "id" : [ 1 , 2 , 3 ],
- "data" : [ "important" , "data" , "here" ]
- })
-
- atio . write ( df , "important_data.parquet" , format = "parquet" )
- print ( "데이터가 안전하게 저장되었습니다." )
-
- # SUCCESS 파일 확인
- if os . path . exists ( "important_data.parquet_SUCCESS" ):
- print ( "저장 완료 플래그가 생성되었습니다." )
-
- except Exception as e :
- print ( f "오류 발생: { e } " )
- print ( "원본 파일이 보존되었습니다." )
-
- # 임시 파일 정리
- temp_files = [ f for f in os . listdir ( "." ) if f . startswith ( "important_data.parquet.tmp" )]
- for temp_file in temp_files :
- try :
- os . remove ( temp_file )
- print ( f "임시 파일 정리: { temp_file } " )
- except :
- pass
-
-# 안전한 데이터 처리 실행
-safe_data_processing ()
-
-
-
-
-
-배치 처리
-
-여러 파일 동시 처리
-import atio
-import pandas as pd
-import os
-from pathlib import Path
-
-def process_multiple_files ():
- # 처리할 파일 목록
- files_to_process = [
- { "name" : "users" , "data" : pd . DataFrame ({ "id" : [ 1 , 2 ], "name" : [ "Alice" , "Bob" ]})},
- { "name" : "products" , "data" : pd . DataFrame ({ "id" : [ 1 , 2 ], "product" : [ "Laptop" , "Mouse" ]})},
- { "name" : "orders" , "data" : pd . DataFrame ({ "id" : [ 1 , 2 ], "amount" : [ 100 , 200 ]})}
- ]
-
- # 각 파일을 안전하게 처리
- for file_info in files_to_process :
- try :
- file_path = f " { file_info [ 'name' ] } .parquet"
- atio . write (
- file_info [ 'data' ],
- file_path ,
- format = "parquet" ,
- show_progress = True
- )
- print ( f " { file_info [ 'name' ] } 파일 처리 완료" )
-
- except Exception as e :
- print ( f " { file_info [ 'name' ] } 파일 처리 실패: { e } " )
- continue
-
-# 배치 처리 실행
-process_multiple_files ()
-
-
-
-
-
-성능 최적화
-
-압축 및 최적화 설정
-import atio
-import pandas as pd
-import numpy as np
-
-# 대용량 데이터 생성
-large_df = pd . DataFrame ({
- "id" : range ( 1 , 100001 ),
- "value" : np . random . randn ( 100000 ),
- "text" : [ "sample text" ] * 100000
-})
-
-# 다양한 압축 설정으로 성능 비교
-compression_settings = [
- ( "snappy" , "fast_compression.parquet" ),
- ( "gzip" , "balanced_compression.parquet" ),
- ( "brotli" , "high_compression.parquet" )
-]
-
-for compression , filename in compression_settings :
- print ( f " \n { compression } 압축으로 저장 중..." )
- atio . write (
- large_df ,
- filename ,
- format = "parquet" ,
- compression = compression ,
- show_progress = True ,
- verbose = True
- )
-
- # 파일 크기 확인
- file_size = os . path . getsize ( filename ) / ( 1024 * 1024 ) # MB
- print ( f "파일 크기: { file_size : .2f } MB" )
-
-
-
-
-
-실제 사용 사례
-
-데이터 파이프라인
-import atio
-import pandas as pd
-from datetime import datetime , timedelta
-
-class DataPipeline :
- def __init__ ( self , base_path = "data" ):
- self . base_path = Path ( base_path )
- self . base_path . mkdir ( exist_ok = True )
-
- def extract_data ( self ):
- """데이터 추출 (시뮬레이션)"""
- # 실제로는 API나 데이터베이스에서 데이터를 가져옴
- data = {
- "timestamp" : pd . date_range ( datetime . now (), periods = 1000 , freq = "H" ),
- "value" : np . random . randn ( 1000 ),
- "source" : [ "api" ] * 1000
- }
- return pd . DataFrame ( data )
-
- def transform_data ( self , df ):
- """데이터 변환"""
- # 시간별 집계
- df [ 'hour' ] = df [ 'timestamp' ] . dt . hour
- df [ 'day' ] = df [ 'timestamp' ] . dt . date
-
- # 일별 통계
- daily_stats = df . groupby ( 'day' ) . agg ({
- 'value' : [ 'mean' , 'std' , 'min' , 'max' ]
- }) . round ( 2 )
-
- return daily_stats
-
- def load_data ( self , df , table_name ):
- """데이터 로드"""
- # 스냅샷 생성
- snapshot_id = atio . write_snapshot (
- df ,
- table_name ,
- format = "parquet"
- )
-
- # 최신 데이터도 별도 저장
- latest_path = self . base_path / f " { table_name } _latest.parquet"
- atio . write ( df , str ( latest_path ), format = "parquet" )
-
- return snapshot_id
-
- def run_pipeline ( self ):
- """파이프라인 실행"""
- print ( "데이터 파이프라인 시작..." )
-
- # 1. 데이터 추출
- raw_data = self . extract_data ()
- print ( f "추출된 데이터: { len ( raw_data ) } 행" )
-
- # 2. 데이터 변환
- processed_data = self . transform_data ( raw_data )
- print ( f "처리된 데이터: { len ( processed_data ) } 행" )
-
- # 3. 데이터 로드
- snapshot_id = self . load_data ( processed_data , "daily_stats" )
- print ( f "스냅샷 생성 완료: { snapshot_id } " )
-
- # 4. 오래된 스냅샷 정리
- deleted_count = atio . expire_snapshots ( "daily_stats" , days = 30 )
- print ( f "정리된 스냅샷: { deleted_count } 개" )
-
- print ( "파이프라인 완료!" )
-
-# 파이프라인 실행
-pipeline = DataPipeline ()
-pipeline . run_pipeline ()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/build/html/formats.html b/docs/build/html/formats.html
deleted file mode 100644
index 7d12e18..0000000
--- a/docs/build/html/formats.html
+++ /dev/null
@@ -1,516 +0,0 @@
-
-
-
-
-
-
-
-
-
지원하는 파일 형식 — Atio 2.0.0 문서
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atio
-
-
-
-
-
-
-
-
-
-지원하는 파일 형식
-Atio는 다양한 데이터 형식을 지원합니다. 각 형식별로 지원하는 라이브러리와 사용법을 설명합니다.
-
-Pandas DataFrame 형식
-Pandas DataFrame은 가장 많은 형식을 지원합니다.
-
-CSV (Comma-Separated Values)
-import atio
-import pandas as pd
-
-df = pd . DataFrame ({
- "name" : [ "Alice" , "Bob" , "Charlie" ],
- "age" : [ 25 , 30 , 35 ],
- "city" : [ "Seoul" , "Busan" , "Incheon" ]
-})
-
-# 기본 CSV 저장
-atio . write ( df , "users.csv" , format = "csv" )
-
-# 추가 옵션과 함께 저장
-atio . write ( df , "users.csv" , format = "csv" ,
- index = False ,
- encoding = 'utf-8' ,
- sep = ';' )
-
-
-지원 옵션:
-- index : 인덱스 포함 여부 (기본값: True)
-- encoding : 인코딩 방식 (기본값: ‘utf-8’)
-- sep : 구분자 (기본값: ‘,’)
-- header : 헤더 포함 여부 (기본값: True)
-
-
-Parquet
-# Parquet 형식으로 저장
-atio . write ( df , "users.parquet" , format = "parquet" )
-
-# 압축 옵션과 함께 저장
-atio . write ( df , "users.parquet" , format = "parquet" ,
- compression = 'snappy' )
-
-
-지원 옵션:
-- compression : 압축 방식 (‘snappy’, ‘gzip’, ‘brotli’, None)
-- index : 인덱스 포함 여부 (기본값: True)
-
-
-Excel
-# Excel 파일로 저장
-atio . write ( df , "users.xlsx" , format = "excel" )
-
-# 시트명과 옵션 지정
-atio . write ( df , "users.xlsx" , format = "excel" ,
- sheet_name = "Users" ,
- index = False )
-
-
-지원 옵션:
-- sheet_name : 시트 이름 (기본값: ‘Sheet1’)
-- index : 인덱스 포함 여부 (기본값: True)
-- engine : 엔진 (‘openpyxl’, ‘xlsxwriter’)
-필요 라이브러리: pip install openpyxl
-
-
-JSON
-# JSON 형식으로 저장
-atio . write ( df , "users.json" , format = "json" )
-
-# 들여쓰기와 함께 저장
-atio . write ( df , "users.json" , format = "json" ,
- indent = 2 ,
- orient = 'records' )
-
-
-지원 옵션:
-- orient : JSON 구조 (‘split’, ‘records’, ‘index’, ‘columns’, ‘values’, ‘table’)
-- indent : 들여쓰기 크기
-- date_format : 날짜 형식
-
-
-Pickle
-# Pickle 형식으로 저장
-atio . write ( df , "users.pkl" , format = "pickle" )
-
-# 압축과 함께 저장
-atio . write ( df , "users.pkl" , format = "pickle" ,
- compression = 'gzip' )
-
-
-지원 옵션:
-- compression : 압축 방식 (‘gzip’, ‘bz2’, ‘xz’, None)
-
-
-HTML
-# HTML 테이블로 저장
-atio . write ( df , "users.html" , format = "html" )
-
-# 스타일과 함께 저장
-atio . write ( df , "users.html" , format = "html" ,
- index = False ,
- classes = 'table table-striped' )
-
-
-지원 옵션:
-- classes : CSS 클래스
-- index : 인덱스 포함 여부 (기본값: True)
-
-
-SQL
-import atio
-import pandas as pd
-from sqlalchemy import create_engine
-
-# 데이터베이스 연결
-engine = create_engine ( 'postgresql://user:password@localhost/dbname' )
-
-df = pd . DataFrame ({
- "id" : [ 1 , 2 , 3 ],
- "name" : [ "Alice" , "Bob" , "Charlie" ]
-})
-
-# SQL 데이터베이스에 저장
-atio . write ( df , format = "sql" ,
- name = "users" ,
- con = engine ,
- if_exists = 'replace' )
-
-
-지원 옵션:
-- name : 테이블 이름 (필수)
-- con : 데이터베이스 연결 객체 (필수)
-- if_exists : 테이블이 존재할 때 동작 (‘fail’, ‘replace’, ‘append’)
-- index : 인덱스를 컬럼으로 저장 여부 (기본값: True)
-필요 라이브러리: pip install sqlalchemy
-
-
-
-Polars DataFrame 형식
-Polars는 빠른 데이터 처리를 위한 현대적인 DataFrame 라이브러리입니다.
-
-CSV
-import atio
-import polars as pl
-
-df = pl . DataFrame ({
- "name" : [ "Alice" , "Bob" , "Charlie" ],
- "age" : [ 25 , 30 , 35 ],
- "city" : [ "Seoul" , "Busan" , "Incheon" ]
-})
-
-# CSV 저장
-atio . write ( df , "users.csv" , format = "csv" )
-
-# 구분자와 함께 저장
-atio . write ( df , "users.csv" , format = "csv" ,
- separator = ';' )
-
-
-지원 옵션:
-- separator : 구분자 (기본값: ‘,’)
-- include_header : 헤더 포함 여부 (기본값: True)
-
-
-Parquet
-# Parquet 저장
-atio . write ( df , "users.parquet" , format = "parquet" )
-
-# 압축과 함께 저장
-atio . write ( df , "users.parquet" , format = "parquet" ,
- compression = "snappy" )
-
-
-지원 옵션:
-- compression : 압축 방식 (‘snappy’, ‘gzip’, ‘brotli’, ‘lz4raw’, ‘zstd’, None)
-
-
-JSON
-# JSON 저장
-atio . write ( df , "users.json" , format = "json" )
-
-# 파일별 저장
-atio . write ( df , "users.json" , format = "json" ,
- file = True )
-
-
-지원 옵션:
-- file : 파일별 저장 여부 (기본값: False)
-
-
-IPC (Arrow)
-# IPC (Arrow) 형식으로 저장
-atio . write ( df , "users.arrow" , format = "ipc" )
-
-# 압축과 함께 저장
-atio . write ( df , "users.arrow" , format = "ipc" ,
- compression = "lz4" )
-
-
-지원 옵션:
-- compression : 압축 방식 (‘lz4’, ‘zstd’, None)
-
-
-Avro
-# Avro 형식으로 저장
-atio . write ( df , "users.avro" , format = "avro" )
-
-
-필요 라이브러리: pip install fastavro
-
-
-Excel
-# Excel 저장
-atio . write ( df , "users.xlsx" , format = "excel" )
-
-
-필요 라이브러리: pip install xlsx2csv openpyxl
-
-
-Database
-# 데이터베이스에 저장
-atio . write ( df , format = "database" ,
- table_name = "users" ,
- connection_uri = "postgresql://user:password@localhost/dbname" )
-
-
-지원 옵션:
-- table_name : 테이블 이름 (필수)
-- connection_uri : 데이터베이스 연결 URI (필수)
-필요 라이브러리: pip install connectorx
-
-
-
-NumPy 배열 형식
-NumPy 배열은 수치 데이터 처리에 최적화된 형식을 지원합니다.
-
-NPY (NumPy Binary)
-import atio
-import numpy as np
-
-arr = np . array ([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]])
-
-# .npy 파일로 저장
-atio . write ( arr , "array.npy" , format = "npy" )
-
-
-특징:
-- 단일 배열을 효율적으로 저장
-- 메타데이터와 함께 저장
-- 빠른 읽기/쓰기 속도
-
-
-NPZ (NumPy Compressed)
-# 여러 배열을 딕셔너리로 저장
-arrays = {
- "features" : np . random . randn ( 1000 , 10 ),
- "labels" : np . random . randint ( 0 , 2 , 1000 ),
- "metadata" : np . array ([ 1 , 2 , 3 , 4 , 5 ])
-}
-
-# 압축되지 않은 .npz 파일로 저장
-atio . write ( arrays , "data.npz" , format = "npz" )
-
-# 압축된 .npz 파일로 저장
-atio . write ( arrays , "data.npz" , format = "npz_compressed" )
-
-
-특징:
-- 여러 배열을 하나의 파일에 저장
-- 압축 옵션으로 저장 공간 절약
-- 딕셔너리 형태로 데이터 구조화
-
-
-CSV
-# CSV로 저장
-atio . write ( arr , "array.csv" , format = "csv" )
-
-# 구분자와 함께 저장
-atio . write ( arr , "array.csv" , format = "csv" ,
- delimiter = ';' ,
- fmt = ' %.2f ' )
-
-
-지원 옵션:
-- delimiter : 구분자 (기본값: ‘,’)
-- fmt : 숫자 형식 (예: ‘%.2f’, ‘%.4e’)
-- header : 헤더 포함 여부
-- comments : 주석 문자
-
-
-
-형식별 성능 비교
-다양한 형식의 성능 특성을 비교해보겠습니다.
-
-속도 비교
-
-가장 빠른 형식:
-- NumPy: .npy , .npz
-- Polars: .ipc (Arrow)
-- Pandas: .parquet (snappy 압축)
-중간 속도:
-- CSV (단순한 구조)
-- JSON (중간 복잡도)
-상대적으로 느린 형식:
-- Excel (복잡한 구조)
-- Pickle (Python 특화)
-
-
-
-용량 비교
-
-가장 작은 용량:
-- .parquet (컬럼 기반 압축)
-- .npz_compressed (압축된 NumPy)
-- .ipc (Arrow 압축)
-중간 용량:
-- .npy (단일 배열)
-- JSON (텍스트 기반)
-상대적으로 큰 용량:
-- CSV (텍스트 기반)
-- Excel (복잡한 구조)
-
-
-
-호환성 비교
-
-최고 호환성:
-- CSV (모든 시스템에서 지원)
-- JSON (웹 표준)
-좋은 호환성:
-- Excel (비즈니스 환경)
-- Parquet (빅데이터 생태계)
-제한적 호환성:
-- .npy /.npz (Python/NumPy 특화)
-- .ipc (Arrow 생태계)
-
-
-
-
-권장 사용 사례
-
-데이터 분석 및 머신러닝
-# 학습 데이터: 빠른 읽기/쓰기를 위해 Parquet 사용
-atio . write ( training_data , "train.parquet" , format = "parquet" )
-
-# 모델 가중치: NumPy 배열로 저장
-atio . write ( model_weights , "weights.npy" , format = "npy" )
-
-# 실험 결과: JSON으로 저장 (가독성)
-atio . write ( results , "experiment_results.json" , format = "json" )
-
-
-
-
-웹 애플리케이션
-# API 응답: JSON 형식
-atio . write ( api_data , "response.json" , format = "json" )
-
-# 대용량 데이터: Parquet 형식
-atio . write ( large_dataset , "dataset.parquet" , format = "parquet" )
-
-
-
-
-데이터 파이프라인
-# 중간 결과: 빠른 처리를 위해 IPC 사용
-atio . write ( intermediate_data , "step1.arrow" , format = "ipc" )
-
-# 최종 결과: 호환성을 위해 CSV 사용
-atio . write ( final_data , "output.csv" , format = "csv" )
-
-
-
-
-비즈니스 보고서
-# 엑셀 보고서
-atio . write ( report_data , "monthly_report.xlsx" , format = "excel" )
-
-# HTML 대시보드
-atio . write ( dashboard_data , "dashboard.html" , format = "html" )
-
-
-
-
-
-형식 확장하기
-새로운 형식을 추가하려면 플러그인 시스템을 사용하세요.
-from atio.plugins import register_writer
-import pandas as pd
-
-# 커스텀 형식 등록
-def yaml_writer ( df , path , ** kwargs ):
- import yaml
- data = df . to_dict ( 'records' )
- with open ( path , 'w' ) as f :
- yaml . dump ( data , f , ** kwargs )
-
-# 등록
-register_writer ( pd . DataFrame , "yaml" , yaml_writer )
-
-# 사용
-atio . write ( df , "data.yaml" , format = "yaml" )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html
deleted file mode 100644
index 5d6b9d5..0000000
--- a/docs/build/html/genindex.html
+++ /dev/null
@@ -1,265 +0,0 @@
-
-
-
-
-
-
-
-
색인 — Atio 2.0.0 문서
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atio
-
-
-
-
-
-
-
-
-
-
색인
-
-
-
_
- |
A
- |
C
- |
E
- |
G
- |
M
- |
P
- |
R
- |
S
- |
W
-
-
-
_
-
-
-
A
-
-
-
C
-
-
-
E
-
-
-
G
-
-
-
M
-
-
-
P
-
-
-
R
-
-
-
S
-
-
-
W
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/build/html/index.html b/docs/build/html/index.html
deleted file mode 100644
index fd3d738..0000000
--- a/docs/build/html/index.html
+++ /dev/null
@@ -1,440 +0,0 @@
-
-
-
-
-
-
-
-
-
Atio Documentation — Atio 2.0.0 문서
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atio
-
-
-
-
-
-
-
-
-
-Atio Documentation
-Atio 🛡️는 안전하고 원자적인 파일 쓰기를 지원하는 경량 Python 라이브러리입니다.
-Pandas, Polars, NumPy 등 데이터 객체 저장 시 파일 손상 없이 , ** 트랜잭션처럼 안전하게 처리**할 수 있습니다.
-
-주요 기능
-
-🔒 Atomic File Writing Safe writing using temporary files
-
-📊 Multiple Format Support CSV, Parquet, Excel, JSON, etc.
-
-🗄️ Database Support Direct SQL and Database writing
-
-📈 Progress Display Progress monitoring for large data processing
-
-🔄 Rollback Function Automatic recovery when errors occur
-
-🎯 Simple API Intuitive and easy-to-use interface
-
-📋 Version Management Snapshot-based data version management
-
-🧹 Auto Cleanup Automatic deletion of old data
-
-
-
-
-빠른 시작
-import atio
-import pandas as pd
-
-# 간단한 DataFrame 생성
-df = pd . DataFrame ({
- "name" : [ "Alice" , "Bob" , "Charlie" ],
- "age" : [ 25 , 30 , 35 ],
- "city" : [ "Seoul" , "Busan" , "Incheon" ]
-})
-
-# 안전한 파일 쓰기
-atio . write ( df , "users.parquet" , format = "parquet" )
-
-# 진행도 표시와 함께 저장
-atio . write ( df , "users.csv" , format = "csv" , show_progress = True )
-
-
-
-
-지원하는 형식
-
-지원하는 파일 형식
-
-
-
-
-
-
-
-형식
-Pandas
-Polars
-NumPy
-
-
-
-CSV
-✅
-✅
-✅
-
-Parquet
-✅
-✅
-❌
-
-Excel
-✅
-✅
-❌
-
-JSON
-✅
-✅
-❌
-
-Pickle
-✅
-❌
-❌
-
-HTML
-✅
-❌
-❌
-
-SQL
-✅
-❌
-❌
-
-Database
-❌
-✅
-❌
-
-NPY/NPZ
-❌
-❌
-✅
-
-
-
-
-
-사용 사례
-
-🔹 데이터 파이프라인 ETL 과정에서 중간 데이터 안전하게 저장
-
-🔹 실험 데이터 관리 머신러닝 실험 결과의 버전 관리
-
-🔹 대용량 데이터 처리 대용량 파일의 안전한 저장 및 진행도 모니터링
-
-🔹 데이터베이스 연동 Pandas/Polars 데이터를 SQL/NoSQL DB에 안전하게 저장
-
-
-
-
-
-
-API Reference
-
-핵심 함수들
-Atio: 안전한 원자적 파일 쓰기 라이브러리
-progress 적용 후 write 함수
-
-
-atio.core. write ( obj , target_path = None , format = None , show_progress = False , verbose = False , ** kwargs ) [소스]
-데이터 객체(obj)를 안전하게 target_path 또는 데이터베이스에 저장합니다.
-
-파일 기반 쓰기 (format: ‘csv’, ‘parquet’, ‘excel’ 등):
-- target_path (str): 필수. 데이터가 저장될 파일 경로입니다.
-- 롤백 기능이 있는 원자적 쓰기를 수행합니다.
-데이터베이스 기반 쓰기 (format: ‘sql’, ‘database’):
-- target_path: 사용되지 않습니다.
-- kwargs (dict): 데이터베이스 쓰기에 필요한 추가 인자들입니다.
-
-
-pandas.to_sql: ‘name’(테이블명), ‘con’(커넥션 객체)가 필수입니다.
-polars.write_database: ‘table_name’, ‘connection_uri’가 필수입니다.
-
-
-
-
-
-매개변수:
-
-obj – 저장할 데이터 객체 (e.g., pandas.DataFrame, polars.DataFrame, np.ndarray).
-target_path (str , optional ) – 파일 저장 경로. 파일 기반 쓰기 시 필수. Defaults to None.
-format (str , optional ) – 저장할 포맷. Defaults to None.
-show_progress (bool ) – 진행도 표시 여부. Defaults to False.
-verbose (bool ) – 상세한 성능 진단 정보 출력 여부. Defaults to False.
-**kwargs – 각 쓰기 함수에 전달될 추가 키워드 인자.
-
-
-
-
-
-
-
-atio.core. write_snapshot ( obj , table_path , mode = 'overwrite' , format = 'parquet' , ** kwargs ) [소스]
-
-
-
-
-atio.core. read_table ( table_path , version = None , output_as = 'pandas' ) [소스]
-
-
-
-
-atio.core. expire_snapshots ( table_path , keep_for = datetime.timedelta(days=7) , dry_run = True ) [소스]
-설정된 보관 기간(keep_for)보다 오래된 스냅샷과
-더 이상 참조되지 않는 데이터 파일을 삭제합니다.
-
-
-
-
-atio.plugins. register_writer ( obj_type , fmt , handler ) [소스]
-(객체 타입, 포맷) 쌍으로 쓰기 핸들러를 등록
-
-
-
-
-atio.plugins. get_writer ( obj , fmt ) [소스]
-객체의 타입과 포맷에 맞는 핸들러를 조회
-
-
-
-
-atio.utils. setup_logger ( name = 'atio' , debug_level = False ) [소스]
-
-
-
-
-atio.utils. check_file_exists ( path ) [소스]
-
-
-
-
-class atio.utils. ProgressBar ( filepath : str , stop_event : Event , description : str = 'Writing' ) [소스]
-파일 쓰기 진행 상황을 콘솔에 표시하는 클래스.
-스피너, 처리된 용량, 처리 속도, 경과 시간을 표시합니다.
-
-
-__init__ ( filepath : str , stop_event : Event , description : str = 'Writing' ) [소스]
-
-
-
-
-run ( ) [소스]
-진행도 막대를 실행하는 메인 루프.
-이 함수가 모니터링 스레드에서 실행됩니다.
-
-
-
-
-
-
-atio.utils. read_json ( path : str ) [소스]
-
-
-
-
-atio.utils. write_json ( data : dict , path : str ) [소스]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/build/html/installation.html b/docs/build/html/installation.html
deleted file mode 100644
index 6e08980..0000000
--- a/docs/build/html/installation.html
+++ /dev/null
@@ -1,310 +0,0 @@
-
-
-
-
-
-
-
-
-
설치 가이드 — Atio 2.0.0 문서
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atio
-
-
-
-
-
-
-
-
-
-설치 가이드
-Atio를 설치하는 방법을 안내합니다.
-
-PyPI를 통한 설치
-가장 간단한 설치 방법은 PyPI를 사용하는 것입니다:
-
-
-특정 버전 설치
-특정 버전을 설치하려면:
- pip install atio == 2 .0.0
-
-
-
-
-개발 버전 설치
-최신 개발 버전을 설치하려면:
- pip install git+https://github.com/seojaeohcode/atio.git
-
-
-
-
-
-의존성
-
-필수 의존성
-
-Python 3.8+
-pandas
-numpy
-
-
-
-선택적 의존성
-특정 형식을 사용하려면 추가 라이브러리가 필요합니다:
-Parquet 형식:
-.. code-block:: bash
-
-pip install pyarrow
-# 또는
-pip install fastparquet
-
-Excel 형식:
-.. code-block:: bash
-
-pip install openpyxl
-# 또는
-pip install xlsxwriter
-
-SQL 데이터베이스:
-.. code-block:: bash
-
-
-Polars 지원:
-.. code-block:: bash
-
-
-Avro 형식 (Polars):
-.. code-block:: bash
-
-
-Polars Excel 지원:
-.. code-block:: bash
-
-pip install xlsx2csv openpyxl
-
-Polars 데이터베이스 지원:
-.. code-block:: bash
-
-
-
-
-모든 의존성 설치
-모든 기능을 사용하려면:
-
-또는 개별적으로:
- pip install atio
-pip install pyarrow openpyxl sqlalchemy polars fastavro xlsx2csv connectorx
-
-
-
-
-
-환경 확인
-설치가 완료되었는지 확인하려면:
-import atio
-print ( f "Atio 버전: { atio . __version__ } " )
-
-# 기본 기능 테스트
-import pandas as pd
-df = pd . DataFrame ({ "test" : [ 1 , 2 , 3 ]})
-atio . write ( df , "test.parquet" , format = "parquet" )
-print ( "설치가 성공적으로 완료되었습니다!" )
-
-
-
-
-가상환경 사용 권장
-프로젝트별로 독립적인 환경을 유지하기 위해 가상환경 사용을 권장합니다:
-# 가상환경 생성
-python -m venv atio_env
-
-# 가상환경 활성화 (Windows)
-atio_env\S cripts\a ctivate
-
-# 가상환경 활성화 (macOS/Linux)
-source atio_env/bin/activate
-
-# Atio 설치
-pip install atio
-
-
-
-
-Conda 사용
-Conda를 사용하는 경우:
-# Conda 환경 생성
-conda create -n atio_env python = 3 .8
-conda activate atio_env
-
-# Atio 설치
-pip install atio
-
-
-
-
-문제 해결
-설치 중 문제가 발생하는 경우:
-권한 오류:
-.. code-block:: bash
-
-
-캐시 문제:
-.. code-block:: bash
-
-pip install atio –no-cache-dir
-
-의존성 충돌:
-.. code-block:: bash
-
-pip install atio –force-reinstall
-
-특정 Python 버전:
-.. code-block:: bash
-
-python3.8 -m pip install atio
-
-
-
-업그레이드
-최신 버전으로 업그레이드:
- pip install --upgrade atio
-
-
-특정 버전으로 다운그레이드:
- pip install atio == 1 .0.0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv
deleted file mode 100644
index 1b00a34..0000000
Binary files a/docs/build/html/objects.inv and /dev/null differ
diff --git a/docs/build/html/py-modindex.html b/docs/build/html/py-modindex.html
deleted file mode 100644
index 2ec5a74..0000000
--- a/docs/build/html/py-modindex.html
+++ /dev/null
@@ -1,144 +0,0 @@
-
-
-
-
-
-
-
-
Python 모듈 목록 — Atio 2.0.0 문서
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atio
-
-
-
-
-
-
-
-
-
-
Python 모듈 목록
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/build/html/quickstart.html b/docs/build/html/quickstart.html
deleted file mode 100644
index 445bdea..0000000
--- a/docs/build/html/quickstart.html
+++ /dev/null
@@ -1,238 +0,0 @@
-
-
-
-
-
-
-
-
-
빠른 시작 — Atio 2.0.0 문서
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atio
-
-
-
-
-
-
-
-
-
-빠른 시작
-Atio를 사용하여 안전한 파일 쓰기를 시작해보세요.
-
-기본 사용법
-가장 간단한 사용법부터 시작해보겠습니다:
-import atio
-import pandas as pd
-
-# 샘플 데이터 생성
-df = pd . DataFrame ({
- "name" : [ "Alice" , "Bob" , "Charlie" ],
- "age" : [ 25 , 30 , 35 ],
- "city" : [ "Seoul" , "Busan" , "Incheon" ]
-})
-
-# 안전한 파일 쓰기
-atio . write ( df , "users.parquet" , format = "parquet" )
-
-
-이 코드는 다음과 같은 안전장치를 제공합니다:
-
-✅ 임시 파일에 먼저 저장
-✅ 저장 완료 후 원자적으로 파일 교체
-✅ 실패 시 원본 파일 보존
-✅ _SUCCESS 플래그 파일 생성
-
-
-
-다양한 형식 지원
-Atio는 다양한 데이터 형식을 지원합니다:
-# CSV 형식
-atio . write ( df , "users.csv" , format = "csv" , index = False )
-
-# Excel 형식
-atio . write ( df , "users.xlsx" , format = "excel" , sheet_name = "Users" )
-
-# JSON 형식
-atio . write ( df , "users.json" , format = "json" , orient = "records" )
-
-# Parquet 형식 (권장)
-atio . write ( df , "users.parquet" , format = "parquet" )
-
-
-
-
-진행률 표시
-대용량 데이터 처리 시 진행률을 확인할 수 있습니다:
-# 진행률 표시 활성화
-atio . write ( large_df , "big_data.parquet" , format = "parquet" , show_progress = True )
-
-
-
-
-성능 모니터링
-상세한 성능 정보를 확인하려면:
-# 성능 정보 출력
-atio . write ( df , "data.parquet" , format = "parquet" , verbose = True )
-
-
-
-
-Polars DataFrame 지원
-Polars DataFrame도 지원합니다:
-import polars as pl
-
-# Polars DataFrame 생성
-polars_df = pl . DataFrame ({
- "a" : [ 1 , 2 , 3 ],
- "b" : [ 4 , 5 , 6 ]
-})
-
-# Polars DataFrame 저장
-atio . write ( polars_df , "data.parquet" , format = "parquet" )
-
-
-
-
-데이터베이스 저장
-SQL 데이터베이스에 직접 저장할 수도 있습니다:
-from sqlalchemy import create_engine
-
-# 데이터베이스 연결
-engine = create_engine ( 'postgresql://user:password@localhost/dbname' )
-
-# 데이터베이스에 저장
-atio . write ( df , format = "sql" , name = "users" , con = engine , if_exists = "replace" )
-
-
-
-
-스냅샷 기능
-데이터 버전 관리를 위한 스냅샷 기능:
-# 스냅샷 생성
-atio . write_snapshot ( df , "users" , format = "parquet" )
-
-# 스냅샷 읽기
-df = atio . read_table ( "users" , snapshot_id = "latest" )
-
-# 오래된 스냅샷 정리
-atio . expire_snapshots ( "users" , days = 30 )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/build/html/search.html b/docs/build/html/search.html
deleted file mode 100644
index 29cc9bb..0000000
--- a/docs/build/html/search.html
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-
-
-
-
-
-
검색 — Atio 2.0.0 문서
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atio
-
-
-
-
-
-
-
-
-
-
-
- Please activate JavaScript to enable the search functionality.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js
deleted file mode 100644
index b78a68e..0000000
--- a/docs/build/html/searchindex.js
+++ /dev/null
@@ -1 +0,0 @@
-Search.setIndex({"alltitles":{"API Reference":[[5,"api-reference"]],"API \ucc38\uc870":[[1,null]],"API \ucc38\uc870:":[[5,null]],"Atio Documentation":[[5,null]],"Avro":[[4,"avro"]],"CSV":[[4,"csv"],[4,"id5"]],"CSV (Comma-Separated Values)":[[4,"csv-comma-separated-values"]],"CSV \ud615\uc2dd":[[1,"csv"]],"Conda \uc0ac\uc6a9":[[6,"conda"]],"Core \ubaa8\ub4c8":[[1,"core"]],"Database":[[4,"database"]],"ETL \ud30c\uc774\ud504\ub77c\uc778":[[0,"etl"]],"Excel":[[4,"excel"],[4,"id4"]],"Excel \ud615\uc2dd":[[1,"excel"]],"HTML":[[4,"html"]],"IPC (Arrow)":[[4,"ipc-arrow"]],"Indices and tables":[[5,"indices-and-tables"]],"JSON":[[4,"json"],[4,"id3"]],"JSON \uc124\uc815 \ud30c\uc77c":[[2,"json"]],"JSON \ud615\uc2dd":[[1,"json"]],"NPY (NumPy Binary)":[[4,"npy-numpy-binary"]],"NPZ (NumPy Compressed)":[[4,"npz-numpy-compressed"]],"NumPy \ubc30\uc5f4 \ucc98\ub9ac":[[0,"numpy"]],"NumPy \ubc30\uc5f4 \ud615\uc2dd":[[4,"numpy"]],"Pandas DataFrame \ud615\uc2dd":[[4,"pandas-dataframe"]],"Pandas SQL \uc5f0\ub3d9":[[0,"pandas-sql"]],"Parquet":[[4,"parquet"],[4,"id2"]],"Parquet \ud615\uc2dd":[[1,"parquet"]],"Pickle":[[4,"pickle"]],"Plugins \ubaa8\ub4c8":[[1,"plugins"]],"Polars DataFrame \uc9c0\uc6d0":[[7,"polars-dataframe"]],"Polars DataFrame \ud615\uc2dd":[[4,"polars-dataframe"]],"Polars DataFrame \ud65c\uc6a9":[[3,"polars-dataframe"]],"Polars \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\ub3d9":[[0,"polars"]],"PostgreSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc800\uc7a5":[[3,"postgresql"]],"PyPI\ub97c \ud1b5\ud55c \uc124\uce58":[[6,"pypi"]],"SQL":[[4,"sql"]],"SQL \ud615\uc2dd":[[1,"sql"]],"Utils \ubaa8\ub4c8":[[1,"utils"]],"YAML \uc124\uc815 \ud30c\uc77c":[[2,"yaml"]],"expire_snapshots()":[[1,"expire-snapshots"]],"read_table()":[[1,"read-table"]],"write()":[[1,"write"]],"write_snapshot()":[[1,"write-snapshot"]],"\uac00\uc0c1\ud658\uacbd \uc0ac\uc6a9 \uad8c\uc7a5":[[6,"id9"]],"\uac04\ub2e8\ud55c \ub370\uc774\ud130 \uc800\uc7a5":[[3,"id3"]],"\uac1c\ubc1c \ubc84\uc804 \uc124\uce58":[[6,"id3"]],"\uac1c\ubc1c \ud658\uacbd \uc124\uc815":[[2,"id32"]],"\uace0\uae09 \uc0ac\uc6a9\ubc95":[[0,null]],"\uace0\uc131\ub2a5 \ub370\uc774\ud130 \ucc98\ub9ac":[[3,"id9"]],"\uad8c\uc7a5 \uc0ac\uc6a9 \uc0ac\ub840":[[4,"id10"]],"\uae30\ubcf8 \uac80\uc99d":[[2,"id34"]],"\uae30\ubcf8 \ub85c\uae45":[[2,"id3"]],"\uae30\ubcf8 \uc0ac\uc6a9\ubc95":[[7,"id2"]],"\uae30\ubcf8 \uc2a4\ub0c5\uc0f7 \uc4f0\uae30":[[0,"id3"]],"\uae30\ubcf8 \uc608\uc81c":[[3,"id2"]],"\uae30\ubcf8 \uc9c4\ud589\ub3c4 \ud45c\uc2dc":[[2,"id6"]],"\ub2e4\uc591\ud55c \ud615\uc2dd \uc9c0\uc6d0":[[7,"id3"]],"\ub2e4\uc74c \ub2e8\uacc4":[[7,"id8"]],"\ub2e8\uc77c \ubc30\uc5f4 \uc800\uc7a5":[[0,"id16"]],"\ub300\uc6a9\ub7c9 \ub370\uc774\ud130 \ucc98\ub9ac":[[3,"id4"]],"\ub370\uc774\ud130 \ubc84\uc804 \uad00\ub9ac":[[3,"id8"]],"\ub370\uc774\ud130 \ubd84\uc11d \ubc0f \uba38\uc2e0\ub7ec\ub2dd":[[4,"id11"]],"\ub370\uc774\ud130 \ud30c\uc774\ud504\ub77c\uc778":[[3,"id17"],[4,"id13"]],"\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5d0\ub7ec":[[0,"id13"]],"\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5f0\ub3d9":[[0,"id6"],[3,"id6"]],"\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc800\uc7a5":[[7,"id6"]],"\ub85c\uae45 \ub808\ubca8 \uc124\uc815":[[2,"id23"]],"\ub85c\uae45 \uc124\uc815":[[2,"id2"]],"\ub864\ubc31 \ub3d9\uc791":[[2,"id14"]],"\uba38\uc2e0\ub7ec\ub2dd \ud30c\uc774\ud504\ub77c\uc778":[[0,"id19"]],"\uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9 \ucd5c\uc801\ud654":[[2,"id9"]],"\ubaa8\ub4e0 \uc758\uc874\uc131 \uc124\uce58":[[6,"id7"]],"\ubaa8\ubc94 \uc0ac\ub840":[[2,"id30"]],"\ubaa9\ucc28":[[5,"id7"]],"\ubb38\uc81c \ud574\uacb0":[[6,"id10"]],"\ubc30\uce58 \ucc98\ub9ac":[[3,"id12"]],"\ubc31\uc5c5 \ud30c\uc77c \uad00\ub9ac":[[2,"id15"]],"\ube44\uc988\ub2c8\uc2a4 \ubcf4\uace0\uc11c":[[4,"id14"]],"\ube60\ub978 \uc2dc\uc791":[[5,"id4"],[7,null]],"\uc0ac\uc6a9 \uc0ac\ub840":[[5,"id6"]],"\uc0ac\uc6a9 \uc608\uc81c":[[3,null]],"\uc0ac\uc6a9\uc790 \uac00\uc774\ub4dc:":[[5,null]],"\uc0ac\uc6a9\uc790 \uc815\uc758 \uc784\uc2dc \ub514\ub809\ud1a0\ub9ac":[[2,"id12"]],"\uc0c1\uc138 \ub85c\uae45":[[0,"id9"],[2,"id4"]],"\uc120\ud0dd\uc801 \uc758\uc874\uc131":[[6,"id6"]],"\uc124\uc815 \uac80\uc99d":[[2,"id33"]],"\uc124\uc815 \ubc0f \uad6c\uc131":[[2,null]],"\uc124\uc815 \ud30c\uc77c \uc0ac\uc6a9":[[2,"id29"]],"\uc124\uce58 \uac00\uc774\ub4dc":[[6,null]],"\uc131\ub2a5 \ubaa8\ub2c8\ud130\ub9c1":[[7,"id5"]],"\uc131\ub2a5 \ubaa8\ub2c8\ud130\ub9c1 \uc124\uc815":[[2,"id25"]],"\uc131\ub2a5 \ucd5c\uc801\ud654":[[0,"id7"],[3,"id14"]],"\uc131\ub2a5 \ucd5c\uc801\ud654 \uc124\uc815":[[2,"id8"]],"\uc131\ub2a5 \ud14c\uc2a4\ud2b8":[[2,"id35"]],"\uc18d\ub3c4 \ube44\uad50":[[4,"id7"]],"\uc2a4\ub0c5\uc0f7 \uae30\ub2a5":[[7,"id7"]],"\uc2a4\ub0c5\uc0f7 \uae30\ubc18 \ubc84\uc804 \uad00\ub9ac":[[0,"id2"],[3,"id7"]],"\uc2a4\ub0c5\uc0f7 \ubaa8\ub4dc":[[2,"id20"]],"\uc2a4\ub0c5\uc0f7 \uc124\uc815":[[2,"id19"]],"\uc2a4\ub0c5\uc0f7 \uc77d\uae30":[[0,"id4"]],"\uc2a4\ub0c5\uc0f7 \uc815\ub9ac":[[0,"id5"]],"\uc2a4\ub0c5\uc0f7 \uc815\ub9ac \uc124\uc815":[[2,"id21"]],"\uc2e4\uc81c \uc0ac\uc6a9 \uc0ac\ub840":[[0,"id18"],[3,"id16"]],"\uc548\uc804\ud55c \ub370\uc774\ud130 \ucc98\ub9ac":[[3,"id11"]],"\uc555\ucd95 \ubc0f \ucd5c\uc801\ud654 \uc124\uc815":[[3,"id15"]],"\uc555\ucd95 \uc124\uc815":[[2,"id10"]],"\uc5c5\uadf8\ub808\uc774\ub4dc":[[6,"id11"]],"\uc5d0\ub7ec \ucc98\ub9ac":[[0,"id10"]],"\uc5d0\ub7ec \ucc98\ub9ac \ubc0f \ubcf5\uad6c":[[3,"id10"]],"\uc5d0\ub7ec \ucc98\ub9ac \uc124\uc815":[[2,"id13"]],"\uc5ec\ub7ec \ubc30\uc5f4 \uc800\uc7a5":[[0,"id17"]],"\uc5ec\ub7ec \ud30c\uc77c \ub3d9\uc2dc \ucc98\ub9ac":[[3,"id13"]],"\uc608\uc678 \ucc98\ub9ac":[[1,"id9"]],"\uc644\ub8cc \ud50c\ub798\uadf8 \uc2dc\uc2a4\ud15c":[[2,"id16"]],"\uc6a9\ub7c9 \ube44\uad50":[[4,"id8"]],"\uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158":[[4,"id12"]],"\uc758\uc874\uc131":[[6,"id4"]],"\uc784\uc2dc \ub514\ub809\ud1a0\ub9ac \uc124\uc815":[[2,"id11"],[2,"id24"]],"\uc81c\uac70":[[6,"id12"]],"\uc8fc\uc694 \uae30\ub2a5":[[5,"id3"]],"\uc8fc\uc694 \ud568\uc218":[[1,"id1"]],"\uc9c0\uc6d0\ud558\ub294 \ud30c\uc77c \ud615\uc2dd":[[4,null],[5,"id9"]],"\uc9c0\uc6d0\ud558\ub294 \ud615\uc2dd":[[1,"id8"],[5,"id5"]],"\uc9c4\ud589\ub3c4 \ud45c\uc2dc":[[0,"id8"],[2,"id5"]],"\uc9c4\ud589\ub3c4 \ud45c\uc2dc \uc635\uc158":[[2,"id7"]],"\uc9c4\ud589\ub960 \ud45c\uc2dc":[[7,"id4"]],"\uc9c4\ud589\ub960 \ud45c\uc2dc\uc640 \uc131\ub2a5 \ubaa8\ub2c8\ud130\ub9c1":[[3,"id5"]],"\ucee4\uc2a4\ud140 \ud615\uc2dd \ub4f1\ub85d":[[0,"id15"]],"\ud2b9\uc815 \ubc84\uc804 \uc124\uce58":[[6,"id2"]],"\ud30c\uc77c \uc2dc\uc2a4\ud15c \uc5d0\ub7ec":[[0,"id11"]],"\ud3ec\ub9f7 \uc5d0\ub7ec":[[0,"id12"]],"\ud504\ub85c\ub355\uc158 \ud658\uacbd \uc124\uc815":[[2,"id31"]],"\ud50c\ub798\uadf8 \ud30c\uc77c \ud655\uc778":[[2,"id17"]],"\ud50c\ub798\uadf8 \ud30c\uc77c \ud65c\uc6a9":[[2,"id18"]],"\ud50c\ub7ec\uadf8\uc778 \ub4f1\ub85d":[[2,"id27"]],"\ud50c\ub7ec\uadf8\uc778 \uc124\uc815":[[2,"id26"]],"\ud50c\ub7ec\uadf8\uc778 \ud655\uc778":[[2,"id28"]],"\ud50c\ub7ec\uadf8\uc778 \ud655\uc7a5":[[0,"id14"]],"\ud544\uc218 \uc758\uc874\uc131":[[6,"id5"]],"\ud575\uc2ec \ud568\uc218\ub4e4":[[5,"module-atio"]],"\ud615\uc2dd \ud655\uc7a5\ud558\uae30":[[4,"id15"]],"\ud615\uc2dd\ubcc4 \uc131\ub2a5 \ube44\uad50":[[4,"id6"]],"\ud638\ud658\uc131 \ube44\uad50":[[4,"id9"]],"\ud658\uacbd \ubcc0\uc218 \uc124\uc815":[[2,"id22"]],"\ud658\uacbd \ud655\uc778":[[6,"id8"]]},"docnames":["advanced_usage","api","configuration","examples","formats","index","installation","quickstart"],"envversion":{"sphinx":65,"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.viewcode":1},"filenames":["advanced_usage.rst","api.rst","configuration.rst","examples.rst","formats.rst","index.rst","installation.rst","quickstart.rst"],"indexentries":{"__init__() (atio.utils.progressbar \uba54\uc11c\ub4dc)":[[1,"atio.utils.ProgressBar.__init__",false],[5,"atio.utils.ProgressBar.__init__",false]],"atio":[[1,"module-atio",false],[5,"module-atio",false]],"atio.core":[[1,"module-atio.core",false],[5,"module-atio.core",false]],"atio.expire_snapshots() (atio.core \ubaa8\ub4c8)":[[1,"atio.core.atio.expire_snapshots",false]],"atio.plugins":[[1,"module-atio.plugins",false],[5,"module-atio.plugins",false]],"atio.read_table() (atio.core \ubaa8\ub4c8)":[[1,"atio.core.atio.read_table",false]],"atio.utils":[[1,"module-atio.utils",false],[5,"module-atio.utils",false]],"atio.write() (atio.core \ubaa8\ub4c8)":[[1,"atio.core.atio.write",false]],"atio.write_snapshot() (atio.core \ubaa8\ub4c8)":[[1,"atio.core.atio.write_snapshot",false]],"check_file_exists() (atio.utils \ubaa8\ub4c8)":[[1,"atio.utils.check_file_exists",false],[5,"atio.utils.check_file_exists",false]],"expire_snapshots() (atio.core \ubaa8\ub4c8)":[[1,"atio.core.expire_snapshots",false],[5,"atio.core.expire_snapshots",false]],"get_writer() (atio.plugins \ubaa8\ub4c8)":[[1,"atio.plugins.get_writer",false],[5,"atio.plugins.get_writer",false]],"module":[[1,"module-atio",false],[1,"module-atio.core",false],[1,"module-atio.plugins",false],[1,"module-atio.utils",false],[5,"module-atio",false],[5,"module-atio.core",false],[5,"module-atio.plugins",false],[5,"module-atio.utils",false]],"progressbar (atio.utils \ud074\ub798\uc2a4)":[[1,"atio.utils.ProgressBar",false],[5,"atio.utils.ProgressBar",false]],"read_json() (atio.utils \ubaa8\ub4c8)":[[1,"atio.utils.read_json",false],[5,"atio.utils.read_json",false]],"read_table() (atio.core \ubaa8\ub4c8)":[[1,"atio.core.read_table",false],[5,"atio.core.read_table",false]],"register_writer() (atio.plugins \ubaa8\ub4c8)":[[1,"atio.plugins.register_writer",false],[5,"atio.plugins.register_writer",false]],"run() (atio.utils.progressbar \uba54\uc11c\ub4dc)":[[1,"atio.utils.ProgressBar.run",false],[5,"atio.utils.ProgressBar.run",false]],"setup_logger() (atio.utils \ubaa8\ub4c8)":[[1,"atio.utils.setup_logger",false],[5,"atio.utils.setup_logger",false]],"write() (atio.core \ubaa8\ub4c8)":[[1,"atio.core.write",false],[5,"atio.core.write",false]],"write_json() (atio.utils \ubaa8\ub4c8)":[[1,"atio.utils.write_json",false],[5,"atio.utils.write_json",false]],"write_snapshot() (atio.core \ubaa8\ub4c8)":[[1,"atio.core.write_snapshot",false],[5,"atio.core.write_snapshot",false]]},"objects":{"":[[5,0,0,"-","atio"]],"atio":[[5,0,0,"-","core"],[5,0,0,"-","plugins"],[5,0,0,"-","utils"]],"atio.core":[[5,1,1,"","expire_snapshots"],[5,1,1,"","read_table"],[5,1,1,"","write"],[5,1,1,"","write_snapshot"]],"atio.core.atio":[[1,1,1,"","expire_snapshots"],[1,1,1,"","read_table"],[1,1,1,"","write"],[1,1,1,"","write_snapshot"]],"atio.plugins":[[5,1,1,"","get_writer"],[5,1,1,"","register_writer"]],"atio.utils":[[5,2,1,"","ProgressBar"],[5,1,1,"","check_file_exists"],[5,1,1,"","read_json"],[5,1,1,"","setup_logger"],[5,1,1,"","write_json"]],"atio.utils.ProgressBar":[[5,3,1,"","__init__"],[5,3,1,"","run"]]},"objnames":{"0":["py","module","Python \ubaa8\ub4c8"],"1":["py","function","Python \ud568\uc218"],"2":["py","class","Python \ud074\ub798\uc2a4"],"3":["py","method","Python \uba54\uc11c\ub4dc"]},"objtypes":{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},"terms":{"":[2,3],"0":[0,2,3,4,6],"00":2,"0001":2,"0012":2,"01":3,"03":2,"05":2,"07":2,"0987":2,"1":[0,1,2,3,4,6,7],"10":[0,2,4],"100":3,"1000":[0,3,4],"10000":3,"100000":[2,3],"1000000":[0,2,3],"1000001":3,"100001":3,"10001":3,"1001":[2,3],"1002":3,"1003":3,"1004":3,"1005":3,"100\ub9cc":3,"1024":[2,3],"11":2,"12":2,"1200":3,"1234":2,"150":3,"2":[0,1,2,3,4,6,7],"200":3,"2024":3,"20240101_120000":1,"25":[3,4,5,7],"28":3,"2f":[2,3,4],"3":[0,1,2,3,4,6,7],"30":[1,2,3,4,5,7],"300":3,"30\uc77c":[1,2],"32":3,"35":[3,4,5,7],"4":[0,3,4,7],"45":2,"4e":4,"5":[0,3,4,7],"50":3,"50000":3,"5432":3,"55000":3,"6":[0,4,7],"60000":3,"65000":3,"67":2,"7":[0,1,2,3,5],"70000":3,"75":3,"7\uc77c":[0,2,3],"8":[1,2,4,6],"89":2,"9":2,"A":3,"__init__":[1,3,5],"__name__":2,"__version__":6,"_backup":2,"_latest":3,"_success":[2,7],"activ":[3,6],"actual":0,"ag":[3,4,5,7],"agg":3,"aggregated_data":3,"aggregated_df":3,"alia":3,"alic":[0,3,4,5,7],"all":6,"amount":3,"api":[3,4,7],"api_data":4,"api\ub098":3,"append":[0,1,2,3,4],"arr":[0,4],"arrai":[0,4],"atio":[0,1,2,3,4,6,7],"atio_config":2,"atio_env":6,"atio_log_level":2,"atio_performance_monitor":2,"atio_temp_dir":2,"atio\ub294":[0,1,2,4,7],"atio\ub97c":[6,7],"atio\uc758":[0,1,2,3],"atom":[2,5],"auto":5,"automat":5,"avg_scor":3,"avg_valu":3,"avro":6,"axi":0,"b":[3,7],"backup_fil":2,"balanced_compress":3,"base":5,"base_path":3,"bash":6,"big_data":7,"bin":6,"block":6,"bob":[0,3,4,5,7],"bool":[1,5],"brotli":[1,3,4],"busan":[3,4,5,7],"bz2":4,"c":3,"cach":6,"categori":3,"charli":[0,3,4,5,7],"check_file_exist":[1,5],"choic":3,"citi":[3,4,5,7],"class":[1,3,4,5],"cleaned_data":0,"cleanup":5,"code":6,"col":3,"column":[1,4],"com":6,"comment":4,"complet":2,"compress":[1,2,3],"compression_set":3,"con":[0,1,3,4,5,7],"conda":5,"conda\ub97c":6,"config":2,"connection_uri":[0,1,4,5],"connectorx":[4,6],"continu":3,"core":5,"creat":6,"create_engin":[0,3,4,7],"css":4,"csv":[0,3,5,7],"csv\ub85c":4,"custom":[0,2],"custom_writ":[0,2],"d":3,"daegu":3,"daejeon":3,"dai":[0,1,2,3,5,7],"daily_process":0,"daily_stat":3,"dashboard":4,"dashboard_data":4,"data":[0,1,2,3,4,5,7],"data1":2,"data2":2,"data3":2,"databas":[0,1,5],"databaseerror":1,"datafram":[0,1,2,5,6],"dataframe\ub3c4":7,"dataframe\uc5d0":0,"dataframe\uc740":4,"datapipelin":3,"dataset":4,"date":3,"date_format":4,"date_rang":3,"datetim":[0,1,2,3,5],"david":0,"dbname":[0,4,7],"db\uc5d0":5,"debug":2,"debug_level":[1,5],"def":[0,2,3,4],"default":[1,5],"default_format":2,"delet":5,"deleted_count":[1,3],"delimit":4,"descript":[1,5],"dev_writ":2,"df":[0,1,2,3,4,5,6,7],"df_new":0,"diana":3,"dict":[1,5],"dir":6,"direct":5,"displai":5,"drop":0,"dropna":0,"dry":0,"dry_run":[0,1,2,5],"dt":3,"dump":[2,4],"e":[0,1,2,3,5],"easi":5,"els":2,"employe":3,"encod":[1,4],"end_tim":2,"engin":[0,1,3,4,7],"ensembl":0,"environ":2,"error":5,"etc":5,"etl":5,"ev":3,"event":[1,5],"excel":[3,5,6,7],"except":[0,1,2,3],"exist":[2,3],"exist_ok":[2,3],"experiment_result":4,"expire_snapshot":[0,2,3,5,7],"extract_data":3,"f":[0,1,2,3,4,6],"fail":[1,4],"fals":[0,1,2,3,4,5,7],"fast_compress":3,"fastavro":[4,6],"fastparquet":[1,6],"featur":[0,4],"file":[2,4,5],"file_info":3,"file_path":3,"file_s":[2,3],"filenam":3,"filepath":[1,5],"files_to_process":[2,3],"filter":3,"filtered_df":3,"final_data":4,"fit":0,"flag_fil":2,"fmt":[1,2,4,5],"forc":6,"format":[0,1,2,3,4,5,6,7],"freq":3,"from":[0,2,3,4,7],"function":5,"g":[1,5],"get":2,"get_writ":[1,5],"getsiz":[2,3],"gettempdir":2,"git":6,"github":6,"group_bi":3,"groupbi":3,"gzip":[1,2,3,4],"h":3,"handler":[1,2,5],"header":4,"headphon":3,"here":3,"high_compress":3,"hour":3,"html":5,"http":6,"i":2,"id":[0,1,3,4],"if_exist":[0,1,3,4,7],"ignore_index":3,"import":[0,1,2,3,4,5,6,7],"important_data":3,"importerror":1,"inact":3,"incheon":[3,4,5,7],"include_head":4,"indent":[2,4],"index":[1,2,3,4,7],"info":2,"initial_data":3,"initial_df":3,"instal":[4,6],"interfac":5,"intermediate_data":4,"intuit":5,"invalid_connect":0,"ioerror":1,"item":2,"json":[5,7],"json\uc73c\ub85c":4,"keep_for":[0,1,2,5],"keyboard":3,"kwarg":[0,1,2,4,5],"label":[0,4],"laptop":3,"larg":5,"large_data":[0,2,3],"large_dataset":[3,4],"large_df":[0,2,3,7],"latest":[1,7],"latest_data":0,"latest_df":3,"latest_path":3,"len":3,"linux":6,"listdir":3,"load":2,"load_data":3,"loc":3,"localhost":[0,3,4,7],"lz4":4,"lz4raw":4,"m":6,"maco":6,"makedir":2,"manag":5,"max":3,"mb":[2,3],"mean":3,"metadata":[0,4],"min":3,"mkdir":3,"mode":[0,1,2,5],"model":0,"model_select":0,"model_weight":4,"monitor":[3,5],"monthly_report":4,"mous":3,"multipl":5,"mydb":3,"n":[0,2,3,6],"na":1,"na_rep":1,"name":[0,1,3,4,5,7],"ndarrai":[1,5],"none":[1,2,4,5],"nosql":5,"now":3,"np":[0,1,2,3,4,5],"npy":[0,5],"npz":[0,5],"npz_compress":[0,4],"numpi":[1,2,3,5,6],"o":[2,3],"obj":[1,5],"obj_typ":[1,2,5],"object":[1,2],"occur":5,"old":5,"open":[0,2,4],"openpyxl":[1,4,6],"option":[1,5],"order":3,"order_d":3,"order_id":3,"orient":[1,4,7],"output":4,"output_a":[0,1,5],"overwrit":[1,2,5],"panda":[1,2,3,5,6,7],"pandas\uc640":0,"parquet":[0,2,3,5,6,7],"parquet_success":3,"pass":3,"password":[0,3,4,7],"path":[0,1,2,3,4,5],"pathlib":3,"pd":[0,1,2,3,4,5,6,7],"performance_test":2,"period":3,"permissionerror":0,"pickl":5,"pip":[4,6],"pipelin":3,"pkl":4,"pl":[0,3,4,7],"plugin":[0,2,4,5],"polar":[1,5,6],"polars_data":[0,3],"polars_df":[3,7],"polars\ub294":4,"polars\ub85c":0,"polars\ub97c":0,"postgresql":[0,4,7],"predict":0,"price":3,"print":[0,1,2,3,6],"process":5,"process_multiple_fil":3,"processed_data":[0,3],"processed_t":0,"product":3,"product_nam":3,"progress":[1,5],"progressbar":[1,5],"pyarrow":[1,6],"pypi\ub97c":5,"python":[4,5,6],"python3":6,"quantiti":3,"r":2,"rais":1,"randint":[0,4],"randn":[0,2,3,4],"random":[0,2,3,4],"randomforestclassifi":0,"rang":3,"raw_data":[0,3],"read_csv":0,"read_json":[1,5],"read_tabl":[0,3,5,7],"record":[1,4,7],"recoveri":5,"register_writ":[0,1,2,4,5],"reinstal":6,"remov":3,"replac":[0,1,2,3,4,7],"report_data":4,"respons":4,"result":4,"results_df":0,"return":[2,3],"rollback":5,"root":0,"round":3,"run":[0,1,5],"run_pipelin":3,"safe":5,"safe_data_process":3,"safe_load":2,"safe_writ":2,"salari":3,"sales_data":3,"sales_df":3,"sales_ord":3,"sampl":3,"score":3,"script":6,"self":3,"seojaeohcod":6,"seoul":[3,4,5,7],"sep":[1,4],"setup":2,"setup_logg":[1,5],"sheet1":[1,4],"sheet_nam":[1,3,4,7],"show_progress":[0,1,2,3,5,7],"simpl":5,"sklearn":0,"snappi":[1,2,3,4],"snapshot":5,"snapshot_id":[1,3,7],"snapshot_id_1":3,"snapshot_id_2":3,"sourc":[3,6],"source_data":0,"split":[1,4],"sql":[3,5,6,7],"sqlalchemi":[0,3,4,6,7],"ssd\ub97c":2,"start_tim":2,"startswith":3,"statu":3,"std":3,"step":2,"step1":4,"stop_ev":[1,5],"str":[1,3,5],"stripe":4,"success":[2,3],"success_flag":2,"successfulli":2,"support":5,"tabl":[1,4],"table_nam":[0,1,3,4,5],"table_path":[1,2,5],"target":0,"target_path":[1,5],"temp":2,"temp_dir":2,"temp_fil":3,"tempdir":2,"tempfil":2,"temporari":5,"test":[2,6],"test_config":2,"test_data":0,"test_siz":0,"text":3,"time":2,"timedelta":[0,1,2,3,5],"timestamp":3,"tmp":[2,3],"tmp12345":2,"tmpdir":2,"to_dict":4,"to_parquet":2,"to_sql":[1,5],"to_str":[0,2],"took":2,"total":2,"train":4,"train_test_split":0,"training_data":[0,4],"transform_data":3,"true":[0,1,2,3,4,5,7],"try":[0,1,2,3],"type":2,"uniform":3,"uninstal":6,"unknown":0,"upgrad":6,"uri":4,"us":5,"user":[0,1,3,4,5,6,7],"user_id":3,"usernam":3,"users_t":0,"utf":[1,4],"util":5,"valu":[0,1,3],"valueerror":[0,1],"var":2,"venv":6,"verbos":[0,1,2,3,5,7],"version":[0,1,5],"version_1_data":0,"w":[0,2,4],"warehous":0,"weight":4,"when":5,"window":6,"write":[0,2,3,4,5,6,7],"write_cal":2,"write_databas":[1,5],"write_json":[1,5],"write_snapshot":[0,2,3,5,7],"writer":2,"writer_map":2,"x_test":0,"x_train":0,"xlsx":[1,3,4,7],"xlsx2csv":[4,6],"xlsxwriter":[1,4,6],"xz":4,"y_test":0,"y_train":0,"yaml":4,"yaml_writ":4,"zstd":4,"\uac00":[1,5],"\uac00\ub3c5\uc131":4,"\uac00\uc0c1\ud658\uacbd":5,"\uac00\uc774\ub4dc":7,"\uac00\uc7a5":[4,6,7],"\uac00\uc838\uc634":3,"\uac00\uc911\uce58":4,"\uac01":[0,1,3,4,5],"\uac04\ub2e8\ud55c":[5,6,7],"\uac12":1,"\uac19\uc740":[0,1,2,7],"\uac1c":3,"\uac1c\ubc1c\uc6a9":2,"\uac1c\ubcc4\uc801\uc73c\ub85c":6,"\uac1d\uccb4":[1,4,5],"\uac1d\uccb4\uc758":[1,5],"\uac80\uc0c9":5,"\uac80\uc99d":5,"\uac83\uc785\ub2c8\ub2e4":6,"\uacb0\uacfc":4,"\uacb0\uacfc\ub97c":0,"\uacb0\uacfc\uc758":5,"\uacbd\uacfc":[1,2,5],"\uacbd\uacfc\ud55c":2,"\uacbd\ub7c9":5,"\uacbd\ub85c":[1,2,5],"\uacbd\ub85c\uc785\ub2c8\ub2e4":[1,5],"\uacbd\uc6b0":[1,2,6],"\uace0\uae09":[3,5,7],"\uacf5\uac04":4,"\uacf5\uac04\uc774":2,"\uacfc\uc815":0,"\uacfc\uc815\uc5d0\uc11c":5,"\uacfc\uc815\uc744":2,"\uad00\ub9ac":5,"\uad00\ub9ac\ub97c":[1,7],"\uad00\ub9ac\ud558\uc5ec":2,"\uad00\ub9ac\ud560":0,"\uad50\uccb4":[0,2,7],"\uad6c\ubd84\uc790":[1,4],"\uad6c\ubd84\uc790\uc640":4,"\uad6c\uc131":5,"\uad6c\uc870":4,"\uad6c\uc870\ud654":4,"\uad8c\uc7a5":[5,7],"\uad8c\uc7a5\ud569\ub2c8\ub2e4":[2,6],"\uad8c\ud55c":[0,6],"\uad8c\ud55c\uc774":[0,2],"\uade0\ud615":2,"\uadf8\ub300\ub85c":0,"\uae30\uac04":[1,5],"\uae30\ub2a5":6,"\uae30\ub2a5\ub4e4\uc744":0,"\uae30\ub2a5\uc744":[3,6],"\uae30\ub2a5\uc774":[1,5],"\uae30\ubc18":[1,4,5],"\uae30\ubcf8":[1,4,5,6],"\uae30\ubcf8\uac12":[1,2,4],"\uae30\ubcf8\uc801\uc73c\ub85c":2,"\uae30\uc874":2,"\ub0a0\uc9dc":4,"\ub0a8\uc544\uc788\ub294":2,"\ub290\ub9b0":4,"\ub294":5,"\ub2e4\ub8f9\ub2c8\ub2e4":0,"\ub2e4\uc591\ud55c":[0,2,3,4,5],"\ub2e4\uc6b4\uadf8\ub808\uc774\ub4dc":6,"\ub2e4\uc74c":5,"\ub2e4\uc74c\uacfc":[0,1,2,7],"\ub2e8\uacc4":5,"\ub2e8\uacc4\ubcc4":0,"\ub2e8\uc21c\ud55c":4,"\ub2e8\uc77c":4,"\ub300\uc2dc\ubcf4\ub4dc":4,"\ub300\uc6a9\ub7c9":[0,2,4,5,7],"\ub300\ud55c":[0,1],"\ub300\ud574":[0,2],"\ub354":[1,5],"\ub370\uc774\ud130":[0,1,2,5,7],"\ub370\uc774\ud130\uac00":[1,3,5],"\ub370\uc774\ud130\ub3c4":3,"\ub370\uc774\ud130\ub85c":0,"\ub370\uc774\ud130\ub97c":[0,1,3,5],"\ub370\uc774\ud130\ubca0\uc774\uc2a4":[1,4,5,6],"\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0":[0,1,3,4,5,7],"\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c":3,"\ub370\uc774\ud130\uc5d0":2,"\ub370\uc774\ud130\uc758":0,"\ub3c5\ub9bd\uc801\uc778":6,"\ub3d9\uc791":[1,4],"\ub3d9\uc791\uc744":2,"\ub41c":[0,1,2],"\ub4e4\uc5ec\uc4f0\uae30":4,"\ub4e4\uc5ec\uc4f0\uae30\uc640":4,"\ub4f1":[1,5],"\ub4f1\ub85d":[1,4,5],"\ub4f1\ub85d\ub41c":2,"\ub4f1\ub85d\ud558\uc5ec":2,"\ub514\ub809\ud1a0\ub9ac":5,"\ub514\ub809\ud1a0\ub9ac\ub294":2,"\ub514\ub809\ud1a0\ub9ac\ub97c":2,"\ub514\ub809\ud1a0\ub9ac\uba85":1,"\ub514\ub809\ud1a0\ub9ac\uc5d0":0,"\ub514\uc2a4\ud06c":2,"\ub515\uc154\ub108\ub9ac":4,"\ub515\uc154\ub108\ub9ac\ub85c":[0,4],"\ub54c":4,"\ub610\ub294":[1,2,5,6],"\ub77c\uc774\ube0c\ub7ec\ub9ac":[1,4,5],"\ub77c\uc774\ube0c\ub7ec\ub9ac\uac00":6,"\ub77c\uc774\ube0c\ub7ec\ub9ac\uc640":4,"\ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4":[4,5],"\ub808\ubca8\ub85c":2,"\ub85c\uae45":5,"\ub85c\uae45\uc744":[0,2],"\ub85c\ub4dc":[0,3],"\ub85c\uc9c1":[0,2],"\ub864\ubc31":[0,1,5],"\ub864\ubc31\uc774":2,"\ub8e8\ud504":[1,5],"\ub97c":[1,5],"\ub9c9\ub300\ub97c":[1,5],"\ub9ce\uc740":4,"\ub9de\ub294":[1,5],"\ub9e4\uac1c\ubcc0\uc218":[1,5],"\ub9e4\uac1c\ubcc0\uc218\ub098":1,"\uba38\uc2e0\ub7ec\ub2dd":5,"\uba3c\uc800":7,"\uba54\uc778":[1,5],"\uba54\ud0c0\ub370\uc774\ud130\uc640":4,"\ubaa8\ub2c8\ud130\ub9c1":[1,5],"\ubaa8\ub378":[0,4],"\ubaa8\ub4c8":5,"\ubaa8\ub4dc\ub85c":0,"\ubaa8\ub4e0":[1,4],"\ubaa8\ubc94":5,"\ubaa9\ub85d":[3,5],"\ubabb\ud55c":1,"\ubb38\uc11c\uc785\ub2c8\ub2e4":1,"\ubb38\uc790":4,"\ubb38\uc81c":5,"\ubb38\uc81c\uac00":[2,6],"\ubc0f":[0,5],"\ubc18\ud658":1,"\ubc1c\uc0dd":[2,3],"\ubc1c\uc0dd\uc2dc\ud0ac":1,"\ubc1c\uc0dd\ud558\ub294":6,"\ubc29\ubc95\uc740":6,"\ubc29\ubc95\uc744":[2,6],"\ubc29\uc2dd":[1,4],"\ubc29\uc2dd\uc744":0,"\ubc29\ud5a5":1,"\ubc30\uc5f4":5,"\ubc30\uc5f4\ub85c":4,"\ubc30\uc5f4\uc740":4,"\ubc30\uc5f4\uc744":[0,4],"\ubc30\uc5f4\uc758":0,"\ubc30\uce58":[2,5],"\ubc31\uc5c5":0,"\ubc84\uc804":[1,5,7],"\ubc84\uc804\uc73c\ub85c":6,"\ubc84\uc804\uc744":[0,6],"\ubcc0\uc218":5,"\ubcc0\uc218\ub4e4\uc744":2,"\ubcc0\ud658":3,"\ubcc4\ub3c4":3,"\ubcd1\ubaa9\uc810":0,"\ubcf4\uad00":[1,5],"\ubcf4\uad00\ud560":1,"\ubcf4\ub2e4":[1,5],"\ubcf4\uc874":7,"\ubcf4\uc874\ub418\uc5c8\uc2b5\ub2c8\ub2e4":3,"\ubcf4\uc874\ub428":0,"\ubcf4\uc874\ub429\ub2c8\ub2e4":2,"\ubcf5\uad6c":5,"\ubcf5\uc7a1\ub3c4":4,"\ubcf5\uc7a1\ud55c":4,"\ubd84\uc11d":0,"\ubd84\ud560":0,"\ubd84\ud560\ub41c":0,"\ube44\uad50":3,"\ube44\uad50\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4":4,"\ube44\ud65c\uc131\ud654":2,"\ube45\ub370\uc774\ud130":4,"\ube60\ub978":[2,4],"\uc0ac\ub840\uc640":3,"\uc0ac\uc6a9":[1,7],"\uc0ac\uc6a9\ub418\uc9c0":[1,5],"\uc0ac\uc6a9\ubc95":[1,5],"\uc0ac\uc6a9\ubc95\ubd80\ud130":7,"\uc0ac\uc6a9\ubc95\uc744":4,"\uc0ac\uc6a9\uc744":6,"\uc0ac\uc6a9\ud558\ub294":6,"\uc0ac\uc6a9\ud558\ub824\uba74":6,"\uc0ac\uc6a9\ud558\uc138\uc694":4,"\uc0ac\uc6a9\ud558\uc5ec":[0,7],"\uc0ac\uc6a9\ud560":2,"\uc0ac\uc6a9\ud569\ub2c8\ub2e4":2,"\uc0ad\uc81c":[0,2],"\uc0ad\uc81c\ub41c":[1,3],"\uc0ad\uc81c\ub429\ub2c8\ub2e4":2,"\uc0ad\uc81c\ud569\ub2c8\ub2e4":[1,5],"\uc0b4\ud3b4\ubcf4\uc138\uc694":3,"\uc0c1\ub300\uc801\uc73c\ub85c":4,"\uc0c1\uc138":1,"\uc0c1\uc138\ud55c":[0,1,2,5,7],"\uc0c1\ud0dc\ub97c":2,"\uc0c1\ud669\uc5d0":[0,2],"\uc0c1\ud669\uc744":[0,1,2,5],"\uc0c8\ub85c\uc6b4":[0,2,4],"\uc0c9\uc778":5,"\uc0d8\ud50c":[3,7],"\uc0dd\uc131":[0,1,2,3,5,6,7],"\uc0dd\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4":3,"\uc0dd\uc131\ub41c":1,"\uc0dd\uc131\ud558\uc5ec":1,"\uc0dd\uc131\ud569\ub2c8\ub2e4":2,"\uc0dd\ud0dc\uacc4":4,"\uc124\uba85\ud569\ub2c8\ub2e4":[2,4],"\uc124\uc815":5,"\uc124\uc815\ub41c":[1,5],"\uc124\uc815\uc5d0":2,"\uc124\uc815\uc73c\ub85c":3,"\uc124\uc815\uc744":2,"\uc124\uc815\uc774":2,"\uc124\uc815\ud560":2,"\uc124\uce58":[5,7],"\uc124\uce58\uac00":6,"\uc124\uce58\ub418\uc9c0":1,"\uc124\uce58\ud558\ub294":6,"\uc124\uce58\ud558\ub824\uba74":6,"\uc131\uacf5":2,"\uc131\uacf5\uc801\uc73c\ub85c":[2,6],"\uc131\ub2a5":[1,5],"\uc131\ub2a5\uc744":2,"\uc139\uc158\uc5d0\uc11c\ub294":0,"\uc18c\uc2a4":[1,5],"\uc18c\uc694":0,"\uc18d\ub3c4":[1,2,5],"\uc190\uc0c1":5,"\uc218":[0,1,2,3,5,7],"\uc218\ub3c4":7,"\uc218\ub3d9":2,"\uc218\ub3d9\uc73c\ub85c":2,"\uc218\uce58":4,"\uc218\ud589\ub429\ub2c8\ub2e4":2,"\uc218\ud589\ud558\ub294":1,"\uc218\ud589\ud569\ub2c8\ub2e4":[1,5],"\uc22b\uc790":4,"\uc27d\uac8c":0,"\uc2a4\ub0c5\uc0f7":[1,5],"\uc2a4\ub0c5\uc0f7\uacfc":[1,5],"\uc2a4\ub0c5\uc0f7\uc5d0\uc11c":1,"\uc2a4\ub0c5\uc0f7\uc73c\ub85c":0,"\uc2a4\ub0c5\uc0f7\uc744":1,"\uc2a4\ub808\ub4dc\uc5d0\uc11c":[1,5],"\uc2a4\ud0c0\uc77c\uacfc":4,"\uc2a4\ud53c\ub108":[1,2,5],"\uc2dc":[0,1,2,5,7],"\uc2dc\uac01\uc801\uc73c\ub85c":2,"\uc2dc\uac04":[0,2],"\uc2dc\uac04\ubcc4":3,"\uc2dc\uac04\uc744":[1,5],"\uc2dc\ub3c4":0,"\uc2dc\ubbac\ub808\uc774\uc158":3,"\uc2dc\uc2a4\ud15c":[1,5],"\uc2dc\uc2a4\ud15c\uc5d0\uc11c":4,"\uc2dc\uc2a4\ud15c\uc744":[0,4],"\uc2dc\uc2a4\ud15c\uc758":2,"\uc2dc\uc5d0\ub294":2,"\uc2dc\uc791":[2,3],"\uc2dc\uc791\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4":7,"\uc2dc\uc791\ud574\ubcf4\uc138\uc694":7,"\uc2dc\ud2b8":[1,4],"\uc2dc\ud2b8\uba85\uacfc":4,"\uc2e4\uc2dc\uac04\uc73c\ub85c":[0,2],"\uc2e4\uc81c":[2,5],"\uc2e4\uc81c\ub85c\ub294":3,"\uc2e4\ud328":[2,3,7],"\uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4":2,"\uc2e4\ud589":[0,3],"\uc2e4\ud589\ub429\ub2c8\ub2e4":[1,5],"\uc2e4\ud589\ud558\ub294":[1,5],"\uc2e4\ud5d8":[4,5],"\uc30d\uc73c\ub85c":[1,5],"\uc4f0\uae30":[1,2,4,5,7],"\uc4f0\uae30\ub97c":[1,4,5,7],"\uc4f0\uae30\uc5d0":[1,5],"\uc544\ud0a4\ud14d\ucc98\ub97c":0,"\uc548\ub0b4\ud569\ub2c8\ub2e4":6,"\uc548\uc804\uc7a5\uce58\ub97c":7,"\uc548\uc804\ud558\uac8c":[0,1,2,3,5],"\uc548\uc804\ud558\uace0":5,"\uc548\uc804\ud55c":[1,5,7],"\uc54a\ub294":[0,1,5],"\uc54a\uc2b5\ub2c8\ub2e4":[1,5],"\uc54a\uc558\uac70\ub098":2,"\uc54a\uc558\uc2b5\ub2c8\ub2e4":2,"\uc54a\uc740":[1,4],"\uc555\ucd95":[1,4],"\uc555\ucd95\uacfc":4,"\uc555\ucd95\ub418\uc9c0":4,"\uc555\ucd95\ub41c":[0,4],"\uc555\ucd95\uc73c\ub85c":3,"\uc591":2,"\uc5c5\uadf8\ub808\uc774\ub4dc":5,"\uc5c5\ub370\uc774\ud2b8":[0,3],"\uc5c5\ub370\uc774\ud2b8\ub41c":3,"\uc5c6\ub294":0,"\uc5c6\uc74c":2,"\uc5c6\uc74c\uc73c\ub85c":2,"\uc5c6\uc774":5,"\uc5d0\ub7ec":5,"\uc5d1\uc140":4,"\uc5d4\uc9c4":[1,4],"\uc5ec\ub7ec":4,"\uc5ec\ubd80":[1,2,4,5],"\uc5f0\uacb0":[0,1,3,4,7],"\uc5f0\ub3d9":5,"\uc608":4,"\uc608\uc0c1\uce58":1,"\uc608\uc2dc":2,"\uc608\uc678":5,"\uc608\uc678\ub97c":1,"\uc608\uc81c":[1,5,7],"\uc608\uce21":0,"\uc624\ub798\ub41c":[1,3,5,7],"\uc624\ub958":[1,3,6],"\uc62c\ubc14\ub974\uac8c":2,"\uc635\uc158":4,"\uc635\uc158\uacfc":[2,4],"\uc635\uc158\uc73c\ub85c":4,"\uc635\uc158\uc744":2,"\uc644\ub8cc":[3,5,7],"\uc644\ub8cc\ub418\uc5c8\ub294\uc9c0":6,"\uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4":[2,6],"\uc644\ub8cc\ub418\uc9c0":2,"\uc644\ub8cc\ub97c":2,"\uc6a9\ub7c9":[1,2,5],"\uc6b0\uc120":2,"\uc6d0\ubcf8":[0,2,3,7],"\uc6d0\uc790\uc801":[1,2,5],"\uc6d0\uc790\uc801\uc73c\ub85c":7,"\uc6d0\uc790\uc801\uc778":5,"\uc704\ud55c":[0,2,4,7],"\uc704\ud574":[2,4,6],"\uc720\uc9c0\ud558\uae30":6,"\uc720\uc9c0\ud560":2,"\uc751\ub2f5":4,"\uc758\uc874\uc131":5,"\uc774":[0,1,5,7],"\uc774\ub97c":0,"\uc774\ub984":[1,4],"\uc774\uc0c1":[0,1,2,3,5],"\uc778\ub371\uc2a4":[1,2,4],"\uc778\ub371\uc2a4\ub97c":4,"\uc778\uc790":[1,5],"\uc778\uc790\ub4e4\uc785\ub2c8\ub2e4":[1,5],"\uc778\ucf54\ub529":[1,4],"\uc77c\uad00\ub41c":2,"\uc77c\ubcc4":3,"\uc77c\uc218":1,"\uc77d\uae30":[1,2,3,4,7],"\uc77d\uc5b4\uc635\ub2c8\ub2e4":1,"\uc77d\uc744":1,"\uc784\uc2dc":[0,3,5,7],"\uc788\ub294":[0,1,2,5],"\uc788\ub294\uc9c0":3,"\uc788\uc2b5\ub2c8\ub2e4":[0,1,2,5,7],"\uc788\uc5b4\uc57c":2,"\uc788\uc744":2,"\uc790\ub3d9\uc73c\ub85c":2,"\uc791\ub3d9\ud569\ub2c8\ub2e4":2,"\uc791\uc5c5":2,"\uc791\uc740":4,"\uc798\ubabb\ub41c":[0,1],"\uc7ac\ucc98\ub9ac":2,"\uc800\uc7a5":[1,2,4,5],"\uc800\uc7a5\ub418\uc5c8\uc2b5\ub2c8\ub2e4":3,"\uc800\uc7a5\ub41c":2,"\uc800\uc7a5\ub420":[1,5],"\uc800\uc7a5\uc774":2,"\uc800\uc7a5\ud560":[0,1,5,7],"\uc800\uc7a5\ud569\ub2c8\ub2e4":[1,5],"\uc801\uc6a9":[1,2,5],"\uc801\uc6a9\ub418\uc5c8\ub294\uc9c0":2,"\uc804":2,"\uc804\ub2ec\ub420":[1,5],"\uc804\uc6a9":2,"\uc804\ucc98\ub9ac":0,"\uc804\ucc98\ub9ac\ub41c":0,"\uc804\uccb4":7,"\uc808\uc57d":[2,4],"\uc815\ub9ac":[1,3,7],"\uc815\ub9ac\ub41c":3,"\uc815\ub9ac\ub429\ub2c8\ub2e4":2,"\uc815\ub9ac\ud569\ub2c8\ub2e4":1,"\uc815\ubcf4":[0,1,2,5,7],"\uc815\ubcf4\ub97c":[0,2,7],"\uc815\uc81c":0,"\uc815\uc81c\ub41c":0,"\uc81c\uac70":5,"\uc81c\uac70\ud558\ub824\uba74":6,"\uc81c\uacf5\ud569\ub2c8\ub2e4":[0,2,7],"\uc81c\uc5b4\ud558\ub294":2,"\uc81c\uc678\ub85c":2,"\uc81c\ud55c\uc801":4,"\uc870\ud68c":[1,5],"\uc874\uc7ac":1,"\uc874\uc7ac\ud560":4,"\uc874\uc7ac\ud569\ub2c8\ub2e4":[2,3],"\uc88b\uc740":4,"\uc8fc\uc11d":4,"\uc8fc\uc758\uc0ac\ud56d":2,"\uc911":[3,6],"\uc911\uac04":[4,5],"\uc9c0\uc6d0":[1,4,5,6],"\uc9c0\uc6d0\ud558\uc9c0":0,"\uc9c0\uc6d0\ud560":2,"\uc9c0\uc6d0\ud569\ub2c8\ub2e4":[0,4,7],"\uc9c0\uc815":4,"\uc9c1\uc811":7,"\uc9c4\ub2e8":[1,5],"\uc9c4\ub2e8\uc744":0,"\uc9c4\ud589":[0,1,2,5],"\uc9c4\ud589\ub3c4":[1,5],"\uc9c4\ud589\ub960":[1,5],"\uc9c4\ud589\ub960\uc744":7,"\uc9d1\uacc4":3,"\ucc38\uc870":7,"\ucc38\uc870\ub418\uc9c0":[1,5],"\ucc98\ub9ac":[5,7],"\ucc98\ub9ac\uac00":2,"\ucc98\ub9ac\ub418\ub294":2,"\ucc98\ub9ac\ub41c":[1,3,5],"\ucc98\ub9ac\ub97c":4,"\ucc98\ub9ac\uc5d0":4,"\ucc98\ub9ac\uc5d0\uc11c":2,"\ucc98\ub9ac\ud560":3,"\ucc98\ub9ac\ud569\ub2c8\ub2e4":[0,2],"\ucd08":2,"\ucd08\uae30":3,"\ucd08\ub2f9":2,"\ucd5c\uace0":4,"\ucd5c\uc2e0":[0,1,3,6],"\ucd5c\uc801\ud654":5,"\ucd5c\uc801\ud654\ub41c":4,"\ucd5c\uc885":4,"\ucd94\uac00":[0,1,2,4,5,6],"\ucd94\uac00\ud558\ub824\uba74":4,"\ucd94\uac00\ud560":0,"\ucd94\uc801\ud560":2,"\ucd94\ucd9c":3,"\ucd94\ucd9c\ub41c":3,"\ucd9c\ub825":[0,1,2,5,7],"\ucda9\ub3cc":6,"\ucda9\ubd84\ud55c":2,"\uce21\uc815":2,"\uce90\uc2dc":6,"\ucee4\ub125\uc158":[1,5],"\ucee4\uc2a4\ud140":[2,4],"\uceec\ub7fc":4,"\uceec\ub7fc\uc73c\ub85c":4,"\ucf54\ub4dc\ub294":7,"\ucf58\uc194\uc5d0":[1,5],"\ud06c\uae30":[2,3,4],"\ud070":4,"\ud074\ub798\uc2a4":[1,4,5],"\ud074\ub798\uc2a4\uc5d0":1,"\ud0a4\uc6cc\ub4dc":[1,5],"\ud0c0\uc785":[1,5],"\ud0c0\uc785\uacfc":[1,5],"\ud14c\uc2a4\ud2b8":[0,6],"\ud14c\uc774\ube14":[1,4],"\ud14c\uc774\ube14\ub85c":4,"\ud14c\uc774\ube14\uba85":[1,5],"\ud14c\uc774\ube14\uc774":4,"\ud14d\uc2a4\ud2b8":4,"\ud1b5\uacc4":3,"\ud1b5\ud55c":5,"\ud1b5\ud574":[0,2],"\ud2b8\ub79c\uc7ad\uc158\ucc98\ub7fc":5,"\ud2b9\uc131\uc744":4,"\ud2b9\uc815":[0,1,3],"\ud2b9\uc9d5":4,"\ud2b9\ud654":4,"\ud30c\uc774\ud504\ub77c\uc778":5,"\ud30c\uc77c":[1,7],"\ud30c\uc77c\ub85c":[0,2,4],"\ud30c\uc77c\ubcc4":4,"\ud30c\uc77c\uc5d0":[2,4,7],"\ud30c\uc77c\uc740":[0,2],"\ud30c\uc77c\uc744":[1,2,3,5],"\ud30c\uc77c\uc758":5,"\ud30c\uc77c\uc774":[2,3],"\ud328\ud0a4\uc9c0\uac00":1,"\ud398\uc774\uc9c0":5,"\ud3ec\ub9f7":[1,5],"\ud3ec\ub9f7\uc5d0":[1,5],"\ud3ec\ud568":[1,4],"\ud45c\uc2dc":[1,5],"\ud45c\uc2dc\ub294":2,"\ud45c\uc2dc\uc640":[0,2,5],"\ud45c\uc2dc\ud558\ub294":[1,5],"\ud45c\uc2dc\ud569\ub2c8\ub2e4":[1,5],"\ud45c\uc900":4,"\ud45c\ud604":1,"\ud504\ub85c\uc81d\ud2b8\ubcc4\ub85c":6,"\ud50c\ub798\uadf8":[5,7],"\ud50c\ub798\uadf8\uac00":3,"\ud50c\ub7ec\uadf8\uc778":[4,5],"\ud50c\ub7ec\uadf8\uc778\uc744":2,"\ud544\uc218":[1,4,5],"\ud544\uc218\uc785\ub2c8\ub2e4":[1,5],"\ud544\uc694":4,"\ud544\uc694\ud55c":[1,5],"\ud544\uc694\ud560":2,"\ud544\uc694\ud569\ub2c8\ub2e4":6,"\ud558\ub098\uc758":4,"\ud559\uc2b5":[0,4],"\ud560":5,"\ud568\uaed8":[0,2,4,5],"\ud568\uc218":5,"\ud568\uc218\uac00":[1,5],"\ud568\uc218\uc5d0":[1,5],"\ud568\uc218\uc640":1,"\ud568\uc218\uc785\ub2c8\ub2e4":1,"\ud569\ub2c8\ub2e4":2,"\ud574\uacb0":5,"\ud578\ub4e4\ub7ec\ub97c":[1,5],"\ud589":3,"\ud5e4\ub354":4,"\ud604\ub300\uc801\uc778":4,"\ud604\uc7ac\uae4c\uc9c0":2,"\ud615\uc2dd":[2,6],"\ud615\uc2dd\ubcc4":1,"\ud615\uc2dd\ubcc4\ub85c":4,"\ud615\uc2dd\uc73c\ub85c":[3,4],"\ud615\uc2dd\uc744":[0,2,4,6,7],"\ud615\uc2dd\uc758":4,"\ud615\ud0dc\ub85c":4,"\ud638\ud658\uc131\uc744":4,"\ud655\uc778":[3,5],"\ud655\uc778\uc774":2,"\ud655\uc778\ud558\ub294":2,"\ud655\uc778\ud558\ub824\uba74":[6,7],"\ud655\uc778\ud560":[0,2,7],"\ud655\uc7a5":5,"\ud658\uacbd":[4,5],"\ud658\uacbd\uc744":[2,6],"\ud65c\uc131\ud654":[2,3,6,7],"\ud65c\uc131\ud654\ud560":0,"\ud65c\uc6a9":5,"\ud6a8\uc728\uc801\uc73c\ub85c":4,"\ud6a8\uc728\uc801\uc778":2,"\ud6c4":[1,2,3,5,7]},"titles":["\uace0\uae09 \uc0ac\uc6a9\ubc95","API \ucc38\uc870","\uc124\uc815 \ubc0f \uad6c\uc131","\uc0ac\uc6a9 \uc608\uc81c","\uc9c0\uc6d0\ud558\ub294 \ud30c\uc77c \ud615\uc2dd","Atio Documentation","\uc124\uce58 \uac00\uc774\ub4dc","\ube60\ub978 \uc2dc\uc791"],"titleterms":{"api":[1,5],"arrow":4,"atio":5,"avro":4,"binari":4,"comma":4,"compress":4,"conda":6,"core":1,"csv":[1,4],"databas":4,"datafram":[3,4,7],"document":5,"etl":0,"excel":[1,4],"expire_snapshot":1,"html":4,"indic":5,"ipc":4,"json":[1,2,4],"npy":4,"npz":4,"numpi":[0,4],"panda":[0,4],"parquet":[1,4],"pickl":4,"plugin":1,"polar":[0,3,4,7],"postgresql":3,"pypi\ub97c":6,"read_tabl":1,"refer":5,"separ":4,"sql":[0,1,4],"tabl":5,"util":1,"valu":4,"write":1,"write_snapshot":1,"yaml":2,"\uac00\uc0c1\ud658\uacbd":6,"\uac00\uc774\ub4dc":[5,6],"\uac04\ub2e8\ud55c":3,"\uac1c\ubc1c":[2,6],"\uac80\uc99d":2,"\uace0\uae09":0,"\uace0\uc131\ub2a5":3,"\uad00\ub9ac":[0,2,3],"\uad6c\uc131":2,"\uad8c\uc7a5":[4,6],"\uae30\ub2a5":[5,7],"\uae30\ubc18":[0,3],"\uae30\ubcf8":[0,2,3,7],"\ub2e4\uc591\ud55c":7,"\ub2e4\uc74c":7,"\ub2e8\uacc4":7,"\ub2e8\uc77c":0,"\ub300\uc6a9\ub7c9":3,"\ub370\uc774\ud130":[3,4],"\ub370\uc774\ud130\ubca0\uc774\uc2a4":[0,3,7],"\ub3d9\uc2dc":3,"\ub3d9\uc791":2,"\ub4f1\ub85d":[0,2],"\ub514\ub809\ud1a0\ub9ac":2,"\ub808\ubca8":2,"\ub85c\uae45":[0,2],"\ub864\ubc31":2,"\uba38\uc2e0\ub7ec\ub2dd":[0,4],"\uba54\ubaa8\ub9ac":2,"\ubaa8\ub2c8\ud130\ub9c1":[2,3,7],"\ubaa8\ub4c8":1,"\ubaa8\ub4dc":2,"\ubaa8\ub4e0":6,"\ubaa8\ubc94":2,"\ubaa9\ucc28":5,"\ubb38\uc81c":6,"\ubc0f":[2,3,4],"\ubc30\uc5f4":[0,4],"\ubc30\uce58":3,"\ubc31\uc5c5":2,"\ubc84\uc804":[0,3,6],"\ubcc0\uc218":2,"\ubcf4\uace0\uc11c":4,"\ubcf5\uad6c":3,"\ubd84\uc11d":4,"\ube44\uad50":4,"\ube44\uc988\ub2c8\uc2a4":4,"\ube60\ub978":[5,7],"\uc0ac\ub840":[0,2,3,4,5],"\uc0ac\uc6a9":[0,2,3,4,5,6],"\uc0ac\uc6a9\ub7c9":2,"\uc0ac\uc6a9\ubc95":[0,7],"\uc0ac\uc6a9\uc790":[2,5],"\uc0c1\uc138":[0,2],"\uc120\ud0dd\uc801":6,"\uc124\uc815":[2,3],"\uc124\uce58":6,"\uc131\ub2a5":[0,2,3,4,7],"\uc18d\ub3c4":4,"\uc2a4\ub0c5\uc0f7":[0,2,3,7],"\uc2dc\uc2a4\ud15c":[0,2],"\uc2dc\uc791":[5,7],"\uc2e4\uc81c":[0,3],"\uc4f0\uae30":0,"\uc548\uc804\ud55c":3,"\uc555\ucd95":[2,3],"\uc560\ud50c\ub9ac\ucf00\uc774\uc158":4,"\uc5c5\uadf8\ub808\uc774\ub4dc":6,"\uc5d0\ub7ec":[0,2,3],"\uc5ec\ub7ec":[0,3],"\uc5f0\ub3d9":[0,3],"\uc608\uc678":1,"\uc608\uc81c":3,"\uc635\uc158":2,"\uc644\ub8cc":2,"\uc6a9\ub7c9":4,"\uc6f9":4,"\uc758\uc874\uc131":6,"\uc77d\uae30":0,"\uc784\uc2dc":2,"\uc800\uc7a5":[0,3,7],"\uc815\ub9ac":[0,2],"\uc815\uc758":2,"\uc81c\uac70":6,"\uc8fc\uc694":[1,5],"\uc9c0\uc6d0":7,"\uc9c0\uc6d0\ud558\ub294":[1,4,5],"\uc9c4\ud589\ub3c4":[0,2],"\uc9c4\ud589\ub960":[3,7],"\ucc38\uc870":[1,5],"\ucc98\ub9ac":[0,1,2,3],"\ucd5c\uc801\ud654":[0,2,3],"\ucee4\uc2a4\ud140":0,"\ud14c\uc2a4\ud2b8":2,"\ud1b5\ud55c":6,"\ud2b9\uc815":6,"\ud30c\uc774\ud504\ub77c\uc778":[0,3,4],"\ud30c\uc77c":[0,2,3,4,5],"\ud3ec\ub9f7":0,"\ud45c\uc2dc":[0,2,7],"\ud45c\uc2dc\uc640":3,"\ud504\ub85c\ub355\uc158":2,"\ud50c\ub798\uadf8":2,"\ud50c\ub7ec\uadf8\uc778":[0,2],"\ud544\uc218":6,"\ud568\uc218":1,"\ud568\uc218\ub4e4":5,"\ud574\uacb0":6,"\ud575\uc2ec":5,"\ud615\uc2dd":[0,1,4,5,7],"\ud615\uc2dd\ubcc4":4,"\ud638\ud658\uc131":4,"\ud655\uc778":[2,6],"\ud655\uc7a5":0,"\ud655\uc7a5\ud558\uae30":4,"\ud658\uacbd":[2,6],"\ud65c\uc6a9":[2,3]}})
\ No newline at end of file