diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..d04a4a6 --- /dev/null +++ b/404.html @@ -0,0 +1,33 @@ + + + + + + + + + + + + + +

404

That's a Four-Oh-Four.
Take me home
+ + + diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..1729309 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +evonote.org diff --git a/assets/0. TL_DR.html-04cf456a.js b/assets/0. TL_DR.html-04cf456a.js new file mode 100644 index 0000000..d732b6e --- /dev/null +++ b/assets/0. TL_DR.html-04cf456a.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-6d91ab6a","path":"/writings/0.%20TL_DR.html","title":"TL;DR","lang":"en-US","frontmatter":{},"headers":[],"git":{"updatedTime":1696131659000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":1}]},"filePathRelative":"writings/0. TL;DR.md"}');export{t as data}; diff --git a/assets/0. TL_DR.html-29b463da.js b/assets/0. TL_DR.html-29b463da.js new file mode 100644 index 0000000..752c774 --- /dev/null +++ b/assets/0. TL_DR.html-29b463da.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as i,e as n}from"./app-75398fc7.js";const r={},a=n('

TL;DR

Indexing

Searching

',6),o=[a];function l(s,h){return t(),i("div",null,o)}const c=e(r,[["render",l],["__file","0. TL_DR.html.vue"]]);export{c as default}; diff --git a/assets/1. Indexing is non-trivial.html-c2c2b6c3.js b/assets/1. Indexing is non-trivial.html-c2c2b6c3.js new file mode 100644 index 0000000..c5f87df --- /dev/null +++ b/assets/1. Indexing is non-trivial.html-c2c2b6c3.js @@ -0,0 +1,5 @@ +import{_ as i,r as o,o as r,c as s,a as e,b as n,d as a,e as d}from"./app-75398fc7.js";const h={},l=d(`

Indexing is understanding

What does it mean by understanding? Usually, it is use as the opposite of just memorizing. When you memorize something, you just remember it. But when you understand something, there are a few more magic happening:

This is quite difficult because the context usually doesn't match the knowledge exactly. For example, if the doctor says: "don't drink any water". You may think that you can drink juice, but you can't drink juice either. You can't drink anything.

This is even more difficult. The reason is two-fold:

Ancient approaches

The most important example of the use of indexing is search engine. Search engines collect the keywords in the documents and index them. When you search for a keyword, the search engine will return the documents that contain the keyword. This is the most basic form of indexing.

Search engines provide an efficient way to find a webpage with some keywords. However, you cannot imagine you discover the gravity by searching "apple" in Google. This is because the search engine doesn't understand the relation between the keywords. It only knows that the keywords appear in the same document. This approach is already very powerful, but we obviously want more.

A way to analyze the relation and the context of the keywords is to use a knowledge graph. A knowledge graph is a graph that contains the objects and the relations between them. For example, juice and water can be two nodes linked by an edge has ingrediant. In this way, it might help understanding whether you can drink juice when the doctor says "don't drink any water".

However, obviously, none of these ancient approaches has a chance to draw a relation between celestial bodies and gravity. Ever after decades of development, they still struggle with understanding everything that is a little bit abstract. Certainly we need something new.

In the large language model (LLM) era

I will not introduce the history of the reason why LLMs work. But I believe every one of you who are reading this article must have some feeling that LLM can understand abstract mathematical concepts. If you ask ChatGPT:

When I dress myself, I can put on my shirt and then my pants. 
+I can also put on my pants and then my shirt. It won't make a difference.
+
+What mathematical concept is this?
+

ChatGPT will recognize that the order of the two actions doesn't matter, so it is related to commutativity. The answer won't change a lot if you modify the situation as long as it represents the concept of commutativity. It's quite hard to imagine how a search engine or a knowledge graph can do this. The word "commutativity" doesn't even appear in the question.

However, this good performance of LLM is at a cost. The most important limitation is that LLM the size of its input is limited, and it is completely not at the same scale as the knowledge graph and traditional search engines. You have to decide what is the most important context that the LLM have to know before you ask the question. This, again, requires some understanding of the knowledge. LLM helps you the best when you already have some understanding of the knowledge.

Embedding-based indexing

Good news is that LLM not only helps us by directly giving the answer. It also helps us index existing knowledge. Notice that LLM are built with deep learning technology, in which neural networks are used to process the knowledge. In the intermediate layers of the neural network, the knowledge is represented as vectors called embeddings.

These embeddings carry all the information about the input and have already been processed by the neural network for abstract understanding. Therefore, if two inputs to the LLM have similar embeddings, they are likely to be related, even in an abstract way. This is the key idea of embedding-based indexing.

Giving a few pieces of knowledge, we can use LLM to generate their embeddings as their index. Whenever a context is given, we generate the embedding of the context and find the similar embeddings in the knowledge base. This will have the model to gain essential knowledge before answering a question. Importantly, this embedding similarity-based indexing is totally scalable, meaning that you have the chance to index the knowledge of astronomy and gravity together!

Wrap up

Though there might be still a lot of steps before we let the model rediscover gravity, we have already seen the potential of LLM in indexing. Importantly, we find a good roadmap to solve the two problems we put in the beginning. For the first, by embedding similarity, we have the tool for finding the relevant knowledge to the context and retrieve them. "Don't drink water" will have a high similarity with "don't drink juice". For the second, with the abstract understanding ability of LLM, we can extract relation of two pieces of knowledge. It can discover that "don't drink water" actually means "don't drink any liquid".

With embedding-based search in hand, it seems what left for us to build is simply improve its performance. However, you will find it as a surprisingly tricky task which involves much philosophical effort. Let's discuss it in another article.

Related works

`,25),c={href:"https://dl.acm.org/doi/pdf/10.1145/3486250",target:"_blank",rel:"noopener noreferrer"},u={href:"https://www.llamaindex.ai/",target:"_blank",rel:"noopener noreferrer"},g={href:"https://acl2023-retrieval-lm.github.io/",target:"_blank",rel:"noopener noreferrer"};function p(m,w){const t=o("ExternalLinkIcon");return r(),s("div",null,[l,e("p",null,[e("a",c,[n("History of retrieval"),a(t)])]),e("p",null,[e("a",u,[n("LlamaIndex"),a(t)])]),e("p",null,[e("a",g,[n("ACL 2023 Tutorial on Retrieval-based Language Models"),a(t)])])])}const f=i(h,[["render",p],["__file","1. Indexing is non-trivial.html.vue"]]);export{f as default}; diff --git a/assets/1. Indexing is non-trivial.html-de27ef5e.js b/assets/1. Indexing is non-trivial.html-de27ef5e.js new file mode 100644 index 0000000..95333f2 --- /dev/null +++ b/assets/1. Indexing is non-trivial.html-de27ef5e.js @@ -0,0 +1 @@ +const i=JSON.parse('{"key":"v-f061bc86","path":"/writings/1.%20Indexing%20is%20non-trivial.html","title":"Indexing is understanding","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Embedding-based indexing","slug":"embedding-based-indexing","link":"#embedding-based-indexing","children":[]}],"git":{"updatedTime":1696877859000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":2}]},"filePathRelative":"writings/1. Indexing is non-trivial.md"}');export{i as data}; diff --git a/assets/2. Tree indexing.html-3ef81c1b.js b/assets/2. Tree indexing.html-3ef81c1b.js new file mode 100644 index 0000000..294fb38 --- /dev/null +++ b/assets/2. Tree indexing.html-3ef81c1b.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as o,e as a}from"./app-75398fc7.js";const n={},i=a('

Tree indexing

Tree might be the most common traditional indexing that are adopted by human-being before the advent of computers. People have practiced organizing books in nested section for thousands of year. It has two advantages:

This is the most obvious reason and this is why we call it indexing. However, there are more subtle reasons:

These reasons are important when the reader is not familiar with the knowledge. It makes it possible to understand the knowledge better without reading the whole book. It works by the following mechanism:

What does it mean to LLM?

The reason why we underscore the importance of tree indexing is obviously not because we want to make a better book. Our question is whether LLM can benefit from tree indexing. The answer is obviously yes. The reason is from the following points:

Further, if we make the LLM into an agent who can actively travel on the book and add new content to the book.

What is the difference between tree indexing for human and for LLM?

Usually, in human made books, the tree structure is quite coarse. One of the reasons might be this: explicit fine-grained tree structure is hard to make and read. Though human writers might make a lot of list and aside to make the tree structure actually more fine-grained, it is laborious to give a name to every small section. The human readers are also not willing to read a book with too many small sections.

However, the situation does not hold for LLM. This is because

Wrap up

With the discussion above, we know that

As we discussed in the first article, indexing is closed related to understanding. Surely, we can see that tree indexing can help organizing and retrieve knowledge. However, could it really help LLM to understand abstract things like science?

',20),r=[i];function s(h,l){return t(),o("div",null,r)}const c=e(n,[["render",s],["__file","2. Tree indexing.html.vue"]]);export{c as default}; diff --git a/assets/2. Tree indexing.html-c8f97e3e.js b/assets/2. Tree indexing.html-c8f97e3e.js new file mode 100644 index 0000000..2a001a5 --- /dev/null +++ b/assets/2. Tree indexing.html-c8f97e3e.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-6b2d87a8","path":"/writings/2.%20Tree%20indexing.html","title":"Tree indexing","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"What does it mean to LLM?","slug":"what-does-it-mean-to-llm","link":"#what-does-it-mean-to-llm","children":[]},{"level":2,"title":"What is the difference between tree indexing for human and for LLM?","slug":"what-is-the-difference-between-tree-indexing-for-human-and-for-llm","link":"#what-is-the-difference-between-tree-indexing-for-human-and-for-llm","children":[]}],"git":{"updatedTime":1696131659000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":1}]},"filePathRelative":"writings/2. Tree indexing.md"}');export{e as data}; diff --git a/assets/2.1 Method of Loci and sparsity.html-004732f1.js b/assets/2.1 Method of Loci and sparsity.html-004732f1.js new file mode 100644 index 0000000..d97fbcc --- /dev/null +++ b/assets/2.1 Method of Loci and sparsity.html-004732f1.js @@ -0,0 +1 @@ +import{_ as a,r as n,o as i,c as s,a as e,b as t,d as h,e as r}from"./app-75398fc7.js";const d={},c=r('

Method of Loci

Method of Loci, also known as memory palace, is a method to memorize things by associating them with a place. It is a very old method and has been used for thousands of years. It is also a very effective method.

When you try to memorize a list of things, you can just imagine a place you are familiar with and put the things in the place. When you want to recall the things, you can just imagine the place and the things will come to your mind.

Why is the method good?

Why this method is efficient? Here is the claim:

Claim

Method of Loci is efficient because it creates a graph of knowledge with each node has only limited number of edges. That is, it is a sparse graph.

Here, in the graph of knowledge, the nodes are the context (situation) and the edges leads to the memory or another situation. The whole point of method of loci is to turn a list of things, which is densely indexed, into a sparsely connected structure.

Why sparse graph is good?

Here is the claim:

Claim

Sparse graph performs better because it fits in context window of human brain better.

Thinking with a sparse graph limits the number of things you need to think about at one time. In this meantime, because the knowledge are still interconnected, you can still think about the whole knowledge.

What does it mean to LLM?

',12),l={href:"https://arxiv.org/abs/2307.03172",target:"_blank",rel:"noopener noreferrer"},p=e("p",null,"Maybe it can be improved in the future, but I strongly don't believe that will happen very fast. We can use the sparsity of the graph to decrease the number of things LLM needs to think about at one time and enhance the performance.",-1),u=e("h2",{id:"how-about-evonote",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-about-evonote","aria-hidden":"true"},"#"),t(" How about EvoNote?")],-1),m=e("p",null,"EvoNote uses the tree structure to index the knowledge. It has a natural advantage to make the connection at each node (note) sparse. Compared to the approaches that use a flat list (e.g., chunks) or a dense graph (e.g., knowledge graph) to index the knowledge, it is more efficient.",-1),f=e("h2",{id:"how-about-docinpy",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#how-about-docinpy","aria-hidden":"true"},"#"),t(" How about DocInPy")],-1),g=e("p",null,"DocInPy provides a way to add sections to your Python codes to separate the functions and classes for arranging them into a tree structure. It makes it possible to make the tree sparse.",-1),y=e("p",null,"There are a lot of Python projects put a tons of functions in one file. This have put a barrier for both human and LLM to understand the code for a long time. DocInPy can help to solve this problem.",-1);function b(w,_){const o=n("ExternalLinkIcon");return i(),s("div",null,[c,e("p",null,[t("LLM also has a limited number of token in the context window. Current technology still struggles to make the context window large. When it seems to be large, the performance is usually not good. (See "),e("a",l,[t("Lost in the Middle: How Language Models Use Long Contexts"),h(o)]),t(")")]),p,u,m,f,g,y])}const v=a(d,[["render",b],["__file","2.1 Method of Loci and sparsity.html.vue"]]);export{v as default}; diff --git a/assets/2.1 Method of Loci and sparsity.html-042d72fb.js b/assets/2.1 Method of Loci and sparsity.html-042d72fb.js new file mode 100644 index 0000000..dfe5c6a --- /dev/null +++ b/assets/2.1 Method of Loci and sparsity.html-042d72fb.js @@ -0,0 +1 @@ +const o=JSON.parse('{"key":"v-5ebcc181","path":"/writings/2.1%20Method%20of%20Loci%20and%20sparsity.html","title":"Method of Loci","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Why is the method good?","slug":"why-is-the-method-good","link":"#why-is-the-method-good","children":[]},{"level":2,"title":"Why sparse graph is good?","slug":"why-sparse-graph-is-good","link":"#why-sparse-graph-is-good","children":[]},{"level":2,"title":"What does it mean to LLM?","slug":"what-does-it-mean-to-llm","link":"#what-does-it-mean-to-llm","children":[]},{"level":2,"title":"How about EvoNote?","slug":"how-about-evonote","link":"#how-about-evonote","children":[]},{"level":2,"title":"How about DocInPy","slug":"how-about-docinpy","link":"#how-about-docinpy","children":[]}],"git":{"updatedTime":1696877859000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":3}]},"filePathRelative":"writings/2.1 Method of Loci and sparsity.md"}');export{o as data}; diff --git a/assets/3. Copernicus and indexing.html-9b0fa442.js b/assets/3. Copernicus and indexing.html-9b0fa442.js new file mode 100644 index 0000000..8613c59 --- /dev/null +++ b/assets/3. Copernicus and indexing.html-9b0fa442.js @@ -0,0 +1 @@ +const n=JSON.parse('{"key":"v-416a7838","path":"/writings/3.%20Copernicus%20and%20indexing.html","title":"What are different understandings?","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Tree indexing as an understanding","slug":"tree-indexing-as-an-understanding","link":"#tree-indexing-as-an-understanding","children":[]},{"level":2,"title":"Tree transformation as a transformation of understanding","slug":"tree-transformation-as-a-transformation-of-understanding","link":"#tree-transformation-as-a-transformation-of-understanding","children":[]},{"level":2,"title":"Understanding inside LLM","slug":"understanding-inside-llm","link":"#understanding-inside-llm","children":[]}],"git":{"updatedTime":1696877859000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":2}]},"filePathRelative":"writings/3. Copernicus and indexing.md"}');export{n as data}; diff --git a/assets/3. Copernicus and indexing.html-a74d369d.js b/assets/3. Copernicus and indexing.html-a74d369d.js new file mode 100644 index 0000000..577ef2e --- /dev/null +++ b/assets/3. Copernicus and indexing.html-a74d369d.js @@ -0,0 +1 @@ +import{_ as i,r as o,o as s,c as r,a as e,b as n,d as a,e as d}from"./app-75398fc7.js";const h={},c=d('

What are different understandings?

In the previous article, we found that indexing is deeply related to understanding. However, can we somehow give a definition of understanding? We mentioned in the first article that memorization is different from understanding. So the explicit knowledge must not be the understanding and understanding must be something other than the knowledge itself. Naturally, because the "other" thing must be related to the stand-alone knowledge, we can call it the implicit context of the knowledge. With this definition, I claim that

Claim

To understand a thing, you must know that implicit context of it.

and consequently,

Claim

The way to understand a thing, is the way to assign the implicit context to it.

Let's illustrate this with a few examples.

Example

Modern educated human think they understand earthquake and treat it as a result of the movement of tectonic plates. They think they understand because they can fit the phenomenon of earthquake into his existing knowledge of geology and use it as a context.

Example

Ancient Japanese people think they understand earthquake and treat it as a result of the movement of a giant catfish supporting the Japanese islands. They think they understand because they can fit the phenomenon of earthquake into his existing knowledge of mythology and use it as a context.

In this example, we show that different people have different understanding of the same thing. They assign different implicit context to one thing and both strongly believes so.

Here, I want to emphasize that, we do not care about which context they assign is correct or not. We only care about the fact that they assign different context. Importantly, the context they assign might be both correct, but the context they assign is different.

Example

A person who believes geocentric model thinks he understands the movement planets because they can perfectly fit into his existing knowledge of astronomy and use it as a context, though in the context planets move in a very complicated way.

Example

A person who believes heliocentric model thinks he understands the movement planets because they can perfectly fit into his existing knowledge of astronomy and use it as a context. The context is different from the previous one and the planets move in a very simple way.

Tree indexing as an understanding

As we introduced in the previous article, tree indexing can help assign a context to the knowledge. With a tree indexing, we can find existing knowledge that is similar to the incoming ones. With the help of the paths of the existing knowledge, a new path, namely a new context, can be created. This is the way tree indexing helps LLM to understand the knowledge. Specifically, the understanding can be carried out in the following way

Procedure

Tree transformation as a transformation of understanding

The generation of implicit context in tree indexing relies on the logic of paths. Therefore, we can say the logic of path generation can be used to characterize understandings. People can change the path logic to achieve a new understanding. For example: TODO.

Understanding inside LLM

LLM can understand sentences. Where is the implicit context? My interpretation is that the layers of the LLM is responsible for adding these implicit contexts, including the grammar, meaning of tokens and world knowledge. After being processed by layers, the hidden state, which is the embedding of the sentence, contains the implicit context. Therefore, we can say that even the simplest embedding based search provides a way to understand the knowledge, even when no tree structure is involved.

Related works

',20),l={href:"https://link.springer.com/article/10.1007/s11229-005-5000-4",target:"_blank",rel:"noopener noreferrer"},p={href:"https://doi.org/10.1111/mila.12220",target:"_blank",rel:"noopener noreferrer"};function g(u,m){const t=o("ExternalLinkIcon");return s(),r("div",null,[c,e("p",null,[e("a",l,[n("A Contextual Approach to Scientific Understanding"),a(t)])]),e("p",null,[e("a",p,[n("Memory is a modeling system"),a(t)])])])}const w=i(h,[["render",g],["__file","3. Copernicus and indexing.html.vue"]]);export{w as default}; diff --git a/assets/4. Continuous and discrete knowledge.html-aedec547.js b/assets/4. Continuous and discrete knowledge.html-aedec547.js new file mode 100644 index 0000000..2a852d6 --- /dev/null +++ b/assets/4. Continuous and discrete knowledge.html-aedec547.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as o,e as a}from"./app-75398fc7.js";const n={},i=a('

Continuous and discrete knowledge

Surely, there are many criteria to classify knowledge. The important thing is how much insight we can get from the classification. In this article, I will introduce how to use the idea of continuous and discrete to classify knowledge.

Discrete knowledge

What is discrete knowledge?

Definition

Discrete knowledge is the ones whose state is defined in a discrete space. Variation on it cannot be infinitesimal.

For example, a coin has two states: head and tail. The state of a coin is discrete knowledge.

More importantly, logic deductions are operating discrete knowledge. All the system with a flavour of logic and have a clear border of what is true and what is wrong, e.g., knowledge graph and symbolic deductions, are mainly operating discrete knowledge.

What is the property of discrete knowledge?

Discrete knowledge is clear and easy to operate with computers. They can ensure 100% correctness given correct assumptions. For fields that have a concrete assumption, e.g., mathematics, discrete knowledge and its deduction will suffice.

Failure of discrete knowledge

However, not all fields have concrete assumptions. In the long debate of rationalism and empiricism, people found that it is absolutely not easy to find reliable and non-trivial assumption to reason from (See Kant and Hume). My claim to the failure is that the world is too complex to be described by a few pieces of discrete knowledge. Even there are a set of such discrete knowledge, they are not affordable to the human brain. For example, I admit that the world might be discrete if you look at it in a very small scale. However, the number of discrete states is too large for human to make any useful deduction except for cosmology or particle physics. Most of the useful knowledge does not change its essence when you vary it a little bit.

Continuous knowledge

What is continuous knowledge?

Definition

Continuous knowledge is the ones whose state is defined in a continuous space. It allows an infinitesimal variation.

For example, the probability that a coin will be head is continuous knowledge. The probability is a real number between 0 and 1.

More importantly, neural networks hold continuous knowledge. The state of a neural network is defined by the weights of the connections between neurons. The weights are real numbers, which is a continuous space.

How to tell whether the knowledge is continuous?

It might be tricky to check whether a piece of knowledge is continuous or not. The key is to imagine whether the knowledge can have a very small variation and still remain mostly true. For example, when you try to recall a voice of someone, you can never ensure that your memory today is the same as your memory yesterday. It also works for smell, visual or kinetic memory.

Most importantly, though also containing discrete knowledge like grammar, a large part of our knowledge about words is also continuous. Your feeling about a certain word is continuous. The most obvious example is brands. You must have a certain feeling about Coca-cola, Pepsi, Tesla and BMW; and they don't have a clear border of correctness, nor you can check your feeling is stable.

What is the property of continuous knowledge?

The representation power of continuous knowledge is much stronger than discrete knowledge. It is very hard to imagine how to represent the feeling of ski or recalling a picture with a discrete format.

Continuous knowledge is more natural for human to process. Most of the physics theory also assume that the space is continuous or its discreteness is negligible for human. The power of continuous knowledge can also be proved by the success of neural network. There was a shift of the paradigm of artificial intelligence in the 1990s from discrete to continuous and then follows the triumph of neural networks in nearly all the field.

Natural language carries continuous knowledge

Admittedly, symbols in a language is discrete. However, they are meaningless without an interpreter. The development of natural language processing has witnessed that all the discrete approaches to understand natural language failed. The history has seen that parsing sentences in to syntax tree is hard and not as useful as using neural networks to directly process the natural language.

Syntax tree can never represent the accurate meaning. For example, I can set a question: "If apple means eat in the next sentence. 'Mike apple an apple.' What did Mike intake?" This question is easy for human to answer but will break any natural language parser.

Failure of continuous knowledge

However, the intrinsic drawbacks of continuous knowledge are still there. Even in 2023, we still cannot handle math, logic and coding satisfactorily with neural networks. This is surely because of the discrete nature of these tasks. How to bridge continuous knowledge with discrete knowledge will be the main challenge of building AI.

Insight

EvoNote is trying to add more discrete structure to the continuous knowledge.

EvoNote uses tree structure to organize the natural languages in a macro scale (Recall the section: Tree indexing). This can assign the continuous knowledge a discrete structure (tree), which we believe can help building a continuous-discrete hybrid knowledge to help making AI capable at discrete tasks.

',30),s=[i];function r(l,d){return t(),o("div",null,s)}const h=e(n,[["render",r],["__file","4. Continuous and discrete knowledge.html.vue"]]);export{h as default}; diff --git a/assets/4. Continuous and discrete knowledge.html-e31de42f.js b/assets/4. Continuous and discrete knowledge.html-e31de42f.js new file mode 100644 index 0000000..50f05f8 --- /dev/null +++ b/assets/4. Continuous and discrete knowledge.html-e31de42f.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-43d2144f","path":"/writings/4.%20Continuous%20and%20discrete%20knowledge.html","title":"Continuous and discrete knowledge","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Discrete knowledge","slug":"discrete-knowledge","link":"#discrete-knowledge","children":[{"level":3,"title":"What is discrete knowledge?","slug":"what-is-discrete-knowledge","link":"#what-is-discrete-knowledge","children":[]},{"level":3,"title":"What is the property of discrete knowledge?","slug":"what-is-the-property-of-discrete-knowledge","link":"#what-is-the-property-of-discrete-knowledge","children":[]},{"level":3,"title":"Failure of discrete knowledge","slug":"failure-of-discrete-knowledge","link":"#failure-of-discrete-knowledge","children":[]}]},{"level":2,"title":"Continuous knowledge","slug":"continuous-knowledge","link":"#continuous-knowledge","children":[{"level":3,"title":"What is continuous knowledge?","slug":"what-is-continuous-knowledge","link":"#what-is-continuous-knowledge","children":[]},{"level":3,"title":"How to tell whether the knowledge is continuous?","slug":"how-to-tell-whether-the-knowledge-is-continuous","link":"#how-to-tell-whether-the-knowledge-is-continuous","children":[]},{"level":3,"title":"What is the property of continuous knowledge?","slug":"what-is-the-property-of-continuous-knowledge","link":"#what-is-the-property-of-continuous-knowledge","children":[]},{"level":3,"title":"Natural language carries continuous knowledge","slug":"natural-language-carries-continuous-knowledge","link":"#natural-language-carries-continuous-knowledge","children":[]},{"level":3,"title":"Failure of continuous knowledge","slug":"failure-of-continuous-knowledge","link":"#failure-of-continuous-knowledge","children":[]}]},{"level":2,"title":"How all this related to EvoNote?","slug":"how-all-this-related-to-evonote","link":"#how-all-this-related-to-evonote","children":[]}],"git":{"updatedTime":1696966382000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":4}]},"filePathRelative":"writings/4. Continuous and discrete knowledge.md"}');export{e as data}; diff --git a/assets/4.1 Interface of continuous and discrete.html-20711f93.js b/assets/4.1 Interface of continuous and discrete.html-20711f93.js new file mode 100644 index 0000000..4b399a1 --- /dev/null +++ b/assets/4.1 Interface of continuous and discrete.html-20711f93.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-49ee2257","path":"/writings/4.1%20Interface%20of%20continuous%20and%20discrete.html","title":"Interface of continuous and discrete","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Heap attack","slug":"heap-attack","link":"#heap-attack","children":[{"level":3,"title":"Paradox of the heap","slug":"paradox-of-the-heap","link":"#paradox-of-the-heap","children":[]},{"level":3,"title":"Attack to any continuous concept","slug":"attack-to-any-continuous-concept","link":"#attack-to-any-continuous-concept","children":[]}]},{"level":2,"title":"Mixture of continuous and discrete","slug":"mixture-of-continuous-and-discrete","link":"#mixture-of-continuous-and-discrete","children":[{"level":3,"title":"Machine learning engineers","slug":"machine-learning-engineers","link":"#machine-learning-engineers","children":[]}]},{"level":2,"title":"Math that bridges continuous and discrete","slug":"math-that-bridges-continuous-and-discrete","link":"#math-that-bridges-continuous-and-discrete","children":[{"level":3,"title":"Group theory","slug":"group-theory","link":"#group-theory","children":[]},{"level":3,"title":"Topology","slug":"topology","link":"#topology","children":[]}]}],"git":{"updatedTime":1696966382000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":4}]},"filePathRelative":"writings/4.1 Interface of continuous and discrete.md"}');export{e as data}; diff --git a/assets/4.1 Interface of continuous and discrete.html-98bab576.js b/assets/4.1 Interface of continuous and discrete.html-98bab576.js new file mode 100644 index 0000000..975f8d4 --- /dev/null +++ b/assets/4.1 Interface of continuous and discrete.html-98bab576.js @@ -0,0 +1 @@ +import{_ as a,r as o,o as i,c as s,a as e,b as t,d as r,e as c}from"./app-75398fc7.js";const h={},d=c('

Interface of continuous and discrete

Heap attack

Paradox of the heap

Story

If you remove one grain of sand from a heap of sand, it is still a heap. If you keep removing grains of sand, eventually you will have only one grain of sand left. Is it still a heap?

The key point of this paradox lies in the continuous nature of the concept - heap. The concept heap, is actually never well-defined when we use it as natural language. It also does not have a formal definition in any way. You knowledge about the heap might vary infinitesimally.

Observation

For a same object, you might think that is a heap this second and not a heap in the next second. However, you do not think your knowledge about the heap is changing even you give different answer. This proves that the concept heap is continuous because infinitesimal variation does not matter.

Attack to any continuous concept

For any continuous concept that does not have a clear definition. You can always attack it by the following way:

Protocol

For example, you can attack the concept machine learning by the following way:

Example

Importantly, nearly all the big concepts are continuous, including philosophy, science, understanding, knowledge, freedom, democracy, etc. They are all vulnerable to this attack. Though they are useful concepts, people should keep in mind that they can never have a clear definition. This impossibility of this has been proved by the history.

Mixture of continuous and discrete

There are knowledge that is neither continuous nor discrete. They are mixture of both. For example, though I claimed that neural networks mainly carry continuous knowledge, they also carry discrete knowledge by its network structure. The network structure is discrete and the weights are continuous.

The tree of knowledge in EvoNote is the same. The tree structure is discrete and the knowledge in the nodes are continuous because they are natural language.

Machine learning engineers

Machine learning engineers does a funny job. They design the discrete structure of the neural network and train the continuous weights. In this way, they mix the discrete and continuous knowledge together.

In this process, one interesting point is the roles of human and machine. The discrete structure is designed by human and the continuous weights are trained by machine. Therefore, machine only deals with continuous knowledge and the discrete knowledge are handled by human. This matches the performance of the model as products - they are good at continuous tasks and bad at discrete tasks.

Network Architecture Search (NAS) is a process that tries to automate the design of the discrete structure. However, it failed heavily in the competition with the transformer structure. This proves that machine learning are not good at discrete tasks again.

Math that bridges continuous and discrete

Math provides some concrete bridge between continuous and discrete. This kind of bridge is hard to find from daily life knowledge. This makes math beautiful and holy.

Group theory

The space where the continuous knowledge lives might have a symmetry described by a certain Lie group. Group theory offers a way to analyze these continuous knowledge by analyzing its Lie group. For example, the Lie group might have a countable number of generators, which gives a discrete way to analyze the continuous knowledge. We can also analyze the representation of the Lie group, which will make the representation of it more discrete if we can decompose it into irreducible representations.

',23),l={href:"https://arxiv.org/abs/2006.10503",target:"_blank",rel:"noopener noreferrer"},u=e("h3",{id:"topology",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#topology","aria-hidden":"true"},"#"),t(" Topology")],-1),p=e("p",null,"Topology is an example where continuous entities can be unambiguously represented by discrete entities.",-1),m=e("p",null,"Condense matter physics loves topology very much. Part of the reason is the topological properties of condensed matter system nearly the only way to describe them in a discrete way.",-1);function g(f,y){const n=o("ExternalLinkIcon");return i(),s("div",null,[d,e("p",null,[t("Using the discrete knowledge found by group theory have been applied to neural network design. "),e("a",l,[t("Equivariant neural network"),r(n)]),t(" is one example.")]),u,p,m])}const b=a(h,[["render",g],["__file","4.1 Interface of continuous and discrete.html.vue"]]);export{b as default}; diff --git a/assets/4.2 Tyranny of science.html-7dafcbed.js b/assets/4.2 Tyranny of science.html-7dafcbed.js new file mode 100644 index 0000000..097f811 --- /dev/null +++ b/assets/4.2 Tyranny of science.html-7dafcbed.js @@ -0,0 +1 @@ +import{_ as c,o as i,c as n,a as e,b as t}from"./app-75398fc7.js";const a={},s=e("h1",{id:"tyranny-of-science",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#tyranny-of-science","aria-hidden":"true"},"#"),t(" Tyranny of science")],-1),o=e("p",null,"See Nietzsche and Foucault.",-1),r=e("h2",{id:"scientific-discourse",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#scientific-discourse","aria-hidden":"true"},"#"),t(" Scientific discourse")],-1),d=e("p",null,"Science is meant to be accurate, whose cost is ignore the rich context that real-life situation might have. By making science the absolute premium way to think, it put a coercive discretizer to human world, which leads to a deviation from the fact and many tragedies.",-1),h=[s,o,r,d];function _(l,f){return i(),n("div",null,h)}const m=c(a,[["render",_],["__file","4.2 Tyranny of science.html.vue"]]);export{m as default}; diff --git a/assets/4.2 Tyranny of science.html-c043c0d4.js b/assets/4.2 Tyranny of science.html-c043c0d4.js new file mode 100644 index 0000000..0f1d23c --- /dev/null +++ b/assets/4.2 Tyranny of science.html-c043c0d4.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-98e96e0e","path":"/writings/4.2%20Tyranny%20of%20science.html","title":"Tyranny of science","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Scientific discourse","slug":"scientific-discourse","link":"#scientific-discourse","children":[]}],"git":{"updatedTime":1696289115000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":1}]},"filePathRelative":"writings/4.2 Tyranny of science.md"}');export{e as data}; diff --git a/assets/404.html-3485f7d0.js b/assets/404.html-3485f7d0.js new file mode 100644 index 0000000..6a19e56 --- /dev/null +++ b/assets/404.html-3485f7d0.js @@ -0,0 +1 @@ +import{_ as e,o as c,c as t}from"./app-75398fc7.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default}; diff --git a/assets/404.html-60b35caa.js b/assets/404.html-60b35caa.js new file mode 100644 index 0000000..7a25b17 --- /dev/null +++ b/assets/404.html-60b35caa.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-3706649a","path":"/404.html","title":"","lang":"en-US","frontmatter":{"layout":"NotFound"},"headers":[],"git":{},"filePathRelative":null}');export{t as data}; diff --git a/assets/Comments on previous work.html-92af1631.js b/assets/Comments on previous work.html-92af1631.js new file mode 100644 index 0000000..ec35ccd --- /dev/null +++ b/assets/Comments on previous work.html-92af1631.js @@ -0,0 +1 @@ +import{_ as e,o as t,c as o,e as n}from"./app-75398fc7.js";const a={},s=n('

Comment on previous philosophical works

My comments are mainly made on the following paper:

What is Understanding? An Overview of Recent Debates in Epistemology and Philosophy of Science: https://philpapers.org/rec/BAUWIU

A decisive question

My decisive question to philosophers: Is Pavlov's dog and Russell's chicken understand bell and the coming of the farmer?

My answer: yes! They understand to the extend that they can draw and context. We should not require the context to be always true. Even human believe mythology.

My observation: Most of the philosophers do not agree with me according to the reference.

Chapter-wise comments

4.1 Understanding and the facts

My comment: factivity, to any extend, is not related to understanding. Understanding can easily be totally wrong. Mythology is a good example.

4.2.2. Grasping

My comment: It seems like the philosophers care about knowing the causality and thinks this might be a standard of understanding. In my view, causality is just a piece of knowledge. People usually forming an implicit context with it does not make it a necessary piece of understanding.

',12),i=[s];function r(h,c){return t(),o("div",null,i)}const p=e(a,[["render",r],["__file","Comments on previous work.html.vue"]]);export{p as default}; diff --git a/assets/Comments on previous work.html-e69171fc.js b/assets/Comments on previous work.html-e69171fc.js new file mode 100644 index 0000000..a1c3d67 --- /dev/null +++ b/assets/Comments on previous work.html-e69171fc.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-2e6765f0","path":"/writings/Comments%20on%20previous%20work.html","title":"Comment on previous philosophical works","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"A decisive question","slug":"a-decisive-question","link":"#a-decisive-question","children":[]},{"level":2,"title":"Chapter-wise comments","slug":"chapter-wise-comments","link":"#chapter-wise-comments","children":[]}],"git":{"updatedTime":1696131659000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":1}]},"filePathRelative":"writings/Comments on previous work.md"}');export{e as data}; diff --git a/assets/app-75398fc7.js b/assets/app-75398fc7.js new file mode 100644 index 0000000..366f74b --- /dev/null +++ b/assets/app-75398fc7.js @@ -0,0 +1,10 @@ +const zl="modulepreload",jl=function(e){return"/"+e},Go={},he=function(t,n,r){if(!n||n.length===0)return t();const o=document.getElementsByTagName("link");return Promise.all(n.map(s=>{if(s=jl(s),s in Go)return;Go[s]=!0;const i=s.endsWith(".css"),l=i?'[rel="stylesheet"]':"";if(!!r)for(let u=o.length-1;u>=0;u--){const f=o[u];if(f.href===s&&(!i||f.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${s}"]${l}`))return;const c=document.createElement("link");if(c.rel=i?"stylesheet":zl,i||(c.as="script",c.crossOrigin=""),c.href=s,document.head.appendChild(c),i)return new Promise((u,f)=>{c.addEventListener("load",u),c.addEventListener("error",()=>f(new Error(`Unable to preload CSS for ${s}`)))})})).then(()=>t()).catch(s=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s})};function fo(e,t){const n=Object.create(null),r=e.split(",");for(let o=0;o!!n[o.toLowerCase()]:o=>!!n[o]}const we={},tn=[],ot=()=>{},Ul=()=>!1,Vl=/^on[^a-z]/,Dn=e=>Vl.test(e),ho=e=>e.startsWith("onUpdate:"),Ae=Object.assign,po=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Wl=Object.prototype.hasOwnProperty,ce=(e,t)=>Wl.call(e,t),J=Array.isArray,nn=e=>br(e)==="[object Map]",li=e=>br(e)==="[object Set]",oe=e=>typeof e=="function",pe=e=>typeof e=="string",mo=e=>typeof e=="symbol",Ee=e=>e!==null&&typeof e=="object",ai=e=>Ee(e)&&oe(e.then)&&oe(e.catch),ci=Object.prototype.toString,br=e=>ci.call(e),ql=e=>br(e).slice(8,-1),ui=e=>br(e)==="[object Object]",go=e=>pe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,xn=fo(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),yr=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Kl=/-(\w)/g,ft=yr(e=>e.replace(Kl,(t,n)=>n?n.toUpperCase():"")),Yl=/\B([A-Z])/g,Kt=yr(e=>e.replace(Yl,"-$1").toLowerCase()),wr=yr(e=>e.charAt(0).toUpperCase()+e.slice(1)),$r=yr(e=>e?`on${wr(e)}`:""),Pn=(e,t)=>!Object.is(e,t),Mr=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Gl=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Jl=e=>{const t=pe(e)?Number(e):NaN;return isNaN(t)?e:t};let Jo;const Gr=()=>Jo||(Jo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Hn(e){if(J(e)){const t={};for(let n=0;n{if(n){const r=n.split(Zl);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function We(e){let t="";if(pe(e))t=e;else if(J(e))for(let n=0;npe(e)?e:e==null?"":J(e)||Ee(e)&&(e.toString===ci||!oe(e.toString))?JSON.stringify(e,di,2):String(e),di=(e,t)=>t&&t.__v_isRef?di(e,t.value):nn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,o])=>(n[`${r} =>`]=o,n),{})}:li(t)?{[`Set(${t.size})`]:[...t.values()]}:Ee(t)&&!J(t)&&!ui(t)?String(t):t;let Ye;class ra{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Ye,!t&&Ye&&(this.index=(Ye.scopes||(Ye.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Ye;try{return Ye=this,t()}finally{Ye=n}}}on(){Ye=this}off(){Ye=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n{const t=new Set(e);return t.w=0,t.n=0,t},pi=e=>(e.w&Rt)>0,mi=e=>(e.n&Rt)>0,ia=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r{(u==="length"||u>=a)&&l.push(c)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":J(e)?go(n)&&l.push(i.get("length")):(l.push(i.get(Ut)),nn(e)&&l.push(i.get(Qr)));break;case"delete":J(e)||(l.push(i.get(Ut)),nn(e)&&l.push(i.get(Qr)));break;case"set":nn(e)&&l.push(i.get(Ut));break}if(l.length===1)l[0]&&Zr(l[0]);else{const a=[];for(const c of l)c&&a.push(...c);Zr(vo(a))}}function Zr(e,t){const n=J(e)?e:[...e];for(const r of n)r.computed&&Zo(r);for(const r of n)r.computed||Zo(r)}function Zo(e,t){(e!==nt||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}function aa(e,t){var n;return(n=lr.get(e))==null?void 0:n.get(t)}const ca=fo("__proto__,__v_isRef,__isVue"),_i=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(mo)),ua=bo(),fa=bo(!1,!0),da=bo(!0),Xo=ha();function ha(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=fe(this);for(let s=0,i=this.length;s{e[t]=function(...n){pn();const r=fe(this)[t].apply(this,n);return mn(),r}}),e}function pa(e){const t=fe(this);return qe(t,"has",e),t.hasOwnProperty(e)}function bo(e=!1,t=!1){return function(r,o,s){if(o==="__v_isReactive")return!e;if(o==="__v_isReadonly")return e;if(o==="__v_isShallow")return t;if(o==="__v_raw"&&s===(e?t?Pa:Ci:t?Ei:wi).get(r))return r;const i=J(r);if(!e){if(i&&ce(Xo,o))return Reflect.get(Xo,o,s);if(o==="hasOwnProperty")return pa}const l=Reflect.get(r,o,s);return(mo(o)?_i.has(o):ca(o))||(e||qe(r,"get",o),t)?l:Ie(l)?i&&go(o)?l:l.value:Ee(l)?e?Bn(l):Fn(l):l}}const ma=bi(),ga=bi(!0);function bi(e=!1){return function(n,r,o,s){let i=n[r];if(ln(i)&&Ie(i)&&!Ie(o))return!1;if(!e&&(!ar(o)&&!ln(o)&&(i=fe(i),o=fe(o)),!J(n)&&Ie(i)&&!Ie(o)))return i.value=o,!0;const l=J(n)&&go(r)?Number(r)e,Er=e=>Reflect.getPrototypeOf(e);function Wn(e,t,n=!1,r=!1){e=e.__v_raw;const o=fe(e),s=fe(t);n||(t!==s&&qe(o,"get",t),qe(o,"get",s));const{has:i}=Er(o),l=r?yo:n?Co:Rn;if(i.call(o,t))return l(e.get(t));if(i.call(o,s))return l(e.get(s));e!==o&&e.get(t)}function qn(e,t=!1){const n=this.__v_raw,r=fe(n),o=fe(e);return t||(e!==o&&qe(r,"has",e),qe(r,"has",o)),e===o?n.has(e):n.has(e)||n.has(o)}function Kn(e,t=!1){return e=e.__v_raw,!t&&qe(fe(e),"iterate",Ut),Reflect.get(e,"size",e)}function es(e){e=fe(e);const t=fe(this);return Er(t).has.call(t,e)||(t.add(e),_t(t,"add",e,e)),this}function ts(e,t){t=fe(t);const n=fe(this),{has:r,get:o}=Er(n);let s=r.call(n,e);s||(e=fe(e),s=r.call(n,e));const i=o.call(n,e);return n.set(e,t),s?Pn(t,i)&&_t(n,"set",e,t):_t(n,"add",e,t),this}function ns(e){const t=fe(this),{has:n,get:r}=Er(t);let o=n.call(t,e);o||(e=fe(e),o=n.call(t,e)),r&&r.call(t,e);const s=t.delete(e);return o&&_t(t,"delete",e,void 0),s}function rs(){const e=fe(this),t=e.size!==0,n=e.clear();return t&&_t(e,"clear",void 0,void 0),n}function Yn(e,t){return function(r,o){const s=this,i=s.__v_raw,l=fe(i),a=t?yo:e?Co:Rn;return!e&&qe(l,"iterate",Ut),i.forEach((c,u)=>r.call(o,a(c),a(u),s))}}function Gn(e,t,n){return function(...r){const o=this.__v_raw,s=fe(o),i=nn(s),l=e==="entries"||e===Symbol.iterator&&i,a=e==="keys"&&i,c=o[e](...r),u=n?yo:t?Co:Rn;return!t&&qe(s,"iterate",a?Qr:Ut),{next(){const{value:f,done:h}=c.next();return h?{value:f,done:h}:{value:l?[u(f[0]),u(f[1])]:u(f),done:h}},[Symbol.iterator](){return this}}}}function Ct(e){return function(...t){return e==="delete"?!1:this}}function Ea(){const e={get(s){return Wn(this,s)},get size(){return Kn(this)},has:qn,add:es,set:ts,delete:ns,clear:rs,forEach:Yn(!1,!1)},t={get(s){return Wn(this,s,!1,!0)},get size(){return Kn(this)},has:qn,add:es,set:ts,delete:ns,clear:rs,forEach:Yn(!1,!0)},n={get(s){return Wn(this,s,!0)},get size(){return Kn(this,!0)},has(s){return qn.call(this,s,!0)},add:Ct("add"),set:Ct("set"),delete:Ct("delete"),clear:Ct("clear"),forEach:Yn(!0,!1)},r={get(s){return Wn(this,s,!0,!0)},get size(){return Kn(this,!0)},has(s){return qn.call(this,s,!0)},add:Ct("add"),set:Ct("set"),delete:Ct("delete"),clear:Ct("clear"),forEach:Yn(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(s=>{e[s]=Gn(s,!1,!1),n[s]=Gn(s,!0,!1),t[s]=Gn(s,!1,!0),r[s]=Gn(s,!0,!0)}),[e,n,t,r]}const[Ca,xa,La,Ta]=Ea();function wo(e,t){const n=t?e?Ta:La:e?xa:Ca;return(r,o,s)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?r:Reflect.get(ce(n,o)&&o in r?n:r,o,s)}const Sa={get:wo(!1,!1)},ka={get:wo(!1,!0)},Aa={get:wo(!0,!1)},wi=new WeakMap,Ei=new WeakMap,Ci=new WeakMap,Pa=new WeakMap;function Ra(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Oa(e){return e.__v_skip||!Object.isExtensible(e)?0:Ra(ql(e))}function Fn(e){return ln(e)?e:Eo(e,!1,yi,Sa,wi)}function xi(e){return Eo(e,!1,wa,ka,Ei)}function Bn(e){return Eo(e,!0,ya,Aa,Ci)}function Eo(e,t,n,r,o){if(!Ee(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const s=o.get(e);if(s)return s;const i=Oa(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return o.set(e,l),l}function rn(e){return ln(e)?rn(e.__v_raw):!!(e&&e.__v_isReactive)}function ln(e){return!!(e&&e.__v_isReadonly)}function ar(e){return!!(e&&e.__v_isShallow)}function Li(e){return rn(e)||ln(e)}function fe(e){const t=e&&e.__v_raw;return t?fe(t):e}function Ti(e){return ir(e,"__v_skip",!0),e}const Rn=e=>Ee(e)?Fn(e):e,Co=e=>Ee(e)?Bn(e):e;function xo(e){At&&nt&&(e=fe(e),vi(e.dep||(e.dep=vo())))}function Lo(e,t){e=fe(e);const n=e.dep;n&&Zr(n)}function Ie(e){return!!(e&&e.__v_isRef===!0)}function Ce(e){return Si(e,!1)}function To(e){return Si(e,!0)}function Si(e,t){return Ie(e)?e:new Ia(e,t)}class Ia{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:fe(t),this._value=n?t:Rn(t)}get value(){return xo(this),this._value}set value(t){const n=this.__v_isShallow||ar(t)||ln(t);t=n?t:fe(t),Pn(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:Rn(t),Lo(this))}}function Z(e){return Ie(e)?e.value:e}const $a={get:(e,t,n)=>Z(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const o=e[t];return Ie(o)&&!Ie(n)?(o.value=n,!0):Reflect.set(e,t,n,r)}};function ki(e){return rn(e)?e:new Proxy(e,$a)}class Ma{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>xo(this),()=>Lo(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function Na(e){return new Ma(e)}function So(e){const t=J(e)?new Array(e.length):{};for(const n in e)t[n]=Ha(e,n);return t}class Da{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return aa(fe(this._object),this._key)}}function Ha(e,t,n){const r=e[t];return Ie(r)?r:new Da(e,t,n)}class Fa{constructor(t,n,r,o){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new _o(t,()=>{this._dirty||(this._dirty=!0,Lo(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!o,this.__v_isReadonly=r}get value(){const t=fe(this);return xo(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function Ba(e,t,n=!1){let r,o;const s=oe(e);return s?(r=e,o=ot):(r=e.get,o=e.set),new Fa(r,o,s||!o,n)}function Pt(e,t,n,r){let o;try{o=r?e(...r):e()}catch(s){zn(s,t,n)}return o}function Ze(e,t,n,r){if(oe(e)){const s=Pt(e,t,n,r);return s&&ai(s)&&s.catch(i=>{zn(i,t,n)}),s}const o=[];for(let s=0;s>>1;In(Fe[r])ut&&Fe.splice(t,1)}function Va(e){J(e)?on.push(...e):(!mt||!mt.includes(e,e.allowRecurse?Ft+1:Ft))&&on.push(e),Pi()}function os(e,t=On?ut+1:0){for(;tIn(n)-In(r)),Ft=0;Fte.id==null?1/0:e.id,Wa=(e,t)=>{const n=In(e)-In(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Ri(e){Xr=!1,On=!0,Fe.sort(Wa);const t=ot;try{for(ut=0;utpe(g)?g.trim():g)),f&&(o=n.map(Gl))}let l,a=r[l=$r(t)]||r[l=$r(ft(t))];!a&&s&&(a=r[l=$r(Kt(t))]),a&&Ze(a,e,6,o);const c=r[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ze(c,e,6,o)}}function Oi(e,t,n=!1){const r=t.emitsCache,o=r.get(e);if(o!==void 0)return o;const s=e.emits;let i={},l=!1;if(!oe(e)){const a=c=>{const u=Oi(c,t,!0);u&&(l=!0,Ae(i,u))};!n&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!s&&!l?(Ee(e)&&r.set(e,null),null):(J(s)?s.forEach(a=>i[a]=null):Ae(i,s),Ee(e)&&r.set(e,i),i)}function Lr(e,t){return!e||!Dn(t)?!1:(t=t.slice(2).replace(/Once$/,""),ce(e,t[0].toLowerCase()+t.slice(1))||ce(e,Kt(t))||ce(e,t))}let Ne=null,Ii=null;function ur(e){const t=Ne;return Ne=e,Ii=e&&e.type.__scopeId||null,t}function Me(e,t=Ne,n){if(!t||e._n)return e;const r=(...o)=>{r._d&&gs(-1);const s=ur(t);let i;try{i=e(...o)}finally{ur(s),r._d&&gs(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Nr(e){const{type:t,vnode:n,proxy:r,withProxy:o,props:s,propsOptions:[i],slots:l,attrs:a,emit:c,render:u,renderCache:f,data:h,setupState:g,ctx:y,inheritAttrs:E}=e;let T,v;const b=ur(e);try{if(n.shapeFlag&4){const A=o||r;T=tt(u.call(A,A,f,s,g,h,y)),v=a}else{const A=t;T=tt(A.length>1?A(s,{attrs:a,slots:l,emit:c}):A(s,null)),v=t.props?a:Ka(a)}}catch(A){Sn.length=0,zn(A,e,1),T=ee(Ge)}let P=T;if(v&&E!==!1){const A=Object.keys(v),{shapeFlag:W}=P;A.length&&W&7&&(i&&A.some(ho)&&(v=Ya(v,i)),P=It(P,v))}return n.dirs&&(P=It(P),P.dirs=P.dirs?P.dirs.concat(n.dirs):n.dirs),n.transition&&(P.transition=n.transition),T=P,ur(b),T}const Ka=e=>{let t;for(const n in e)(n==="class"||n==="style"||Dn(n))&&((t||(t={}))[n]=e[n]);return t},Ya=(e,t)=>{const n={};for(const r in e)(!ho(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Ga(e,t,n){const{props:r,children:o,component:s}=e,{props:i,children:l,patchFlag:a}=t,c=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&a>=0){if(a&1024)return!0;if(a&16)return r?ss(r,i,c):!!i;if(a&8){const u=t.dynamicProps;for(let f=0;fe.__isSuspense;function $i(e,t){t&&t.pendingBranch?J(e)?t.effects.push(...e):t.effects.push(e):Va(e)}function Mi(e,t){return Ao(e,null,t)}const Jn={};function st(e,t,n){return Ao(e,t,n)}function Ao(e,t,{immediate:n,deep:r,flush:o,onTrack:s,onTrigger:i}=we){var l;const a=hi()===((l=Pe)==null?void 0:l.scope)?Pe:null;let c,u=!1,f=!1;if(Ie(e)?(c=()=>e.value,u=ar(e)):rn(e)?(c=()=>e,r=!0):J(e)?(f=!0,u=e.some(A=>rn(A)||ar(A)),c=()=>e.map(A=>{if(Ie(A))return A.value;if(rn(A))return jt(A);if(oe(A))return Pt(A,a,2)})):oe(e)?t?c=()=>Pt(e,a,2):c=()=>{if(!(a&&a.isUnmounted))return h&&h(),Ze(e,a,3,[g])}:c=ot,t&&r){const A=c;c=()=>jt(A())}let h,g=A=>{h=b.onStop=()=>{Pt(A,a,4)}},y;if(un)if(g=ot,t?n&&Ze(t,a,3,[c(),f?[]:void 0,g]):c(),o==="sync"){const A=qc();y=A.__watcherHandles||(A.__watcherHandles=[])}else return ot;let E=f?new Array(e.length).fill(Jn):Jn;const T=()=>{if(b.active)if(t){const A=b.run();(r||u||(f?A.some((W,X)=>Pn(W,E[X])):Pn(A,E)))&&(h&&h(),Ze(t,a,3,[A,E===Jn?void 0:f&&E[0]===Jn?[]:E,g]),E=A)}else b.run()};T.allowRecurse=!!t;let v;o==="sync"?v=T:o==="post"?v=()=>Ve(T,a&&a.suspense):(T.pre=!0,a&&(T.id=a.uid),v=()=>xr(T));const b=new _o(c,v);t?n?T():E=b.run():o==="post"?Ve(b.run.bind(b),a&&a.suspense):b.run();const P=()=>{b.stop(),a&&a.scope&&po(a.scope.effects,b)};return y&&y.push(P),P}function Za(e,t,n){const r=this.proxy,o=pe(e)?e.includes(".")?Ni(r,e):()=>r[e]:e.bind(r,r);let s;oe(t)?s=t:(s=t.handler,n=t);const i=Pe;cn(this);const l=Ao(o,s.bind(r),n);return i?cn(i):Wt(),l}function Ni(e,t){const n=t.split(".");return()=>{let r=e;for(let o=0;o{jt(n,t)});else if(ui(e))for(const n in e)jt(e[n],t);return e}function fr(e,t){const n=Ne;if(n===null)return e;const r=Pr(n)||n.proxy,o=e.dirs||(e.dirs=[]);for(let s=0;s{e.isMounted=!0}),Sr(()=>{e.isUnmounting=!0}),e}const Je=[Function,Array],Di={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Je,onEnter:Je,onAfterEnter:Je,onEnterCancelled:Je,onBeforeLeave:Je,onLeave:Je,onAfterLeave:Je,onLeaveCancelled:Je,onBeforeAppear:Je,onAppear:Je,onAfterAppear:Je,onAppearCancelled:Je},ec={name:"BaseTransition",props:Di,setup(e,{slots:t}){const n=Xi(),r=Xa();let o;return()=>{const s=t.default&&Fi(t.default(),!0);if(!s||!s.length)return;let i=s[0];if(s.length>1){for(const E of s)if(E.type!==Ge){i=E;break}}const l=fe(e),{mode:a}=l;if(r.isLeaving)return Dr(i);const c=is(i);if(!c)return Dr(i);const u=eo(c,l,r,n);to(c,u);const f=n.subTree,h=f&&is(f);let g=!1;const{getTransitionKey:y}=c.type;if(y){const E=y();o===void 0?o=E:E!==o&&(o=E,g=!0)}if(h&&h.type!==Ge&&(!Bt(c,h)||g)){const E=eo(h,l,r,n);if(to(h,E),a==="out-in")return r.isLeaving=!0,E.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},Dr(i);a==="in-out"&&c.type!==Ge&&(E.delayLeave=(T,v,b)=>{const P=Hi(r,h);P[String(h.key)]=h,T._leaveCb=()=>{v(),T._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=b})}return i}}},tc=ec;function Hi(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function eo(e,t,n,r){const{appear:o,mode:s,persisted:i=!1,onBeforeEnter:l,onEnter:a,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:f,onLeave:h,onAfterLeave:g,onLeaveCancelled:y,onBeforeAppear:E,onAppear:T,onAfterAppear:v,onAppearCancelled:b}=t,P=String(e.key),A=Hi(n,e),W=(m,z)=>{m&&Ze(m,r,9,z)},X=(m,z)=>{const D=z[1];W(m,z),J(m)?m.every(K=>K.length<=1)&&D():m.length<=1&&D()},N={mode:s,persisted:i,beforeEnter(m){let z=l;if(!n.isMounted)if(o)z=E||l;else return;m._leaveCb&&m._leaveCb(!0);const D=A[P];D&&Bt(e,D)&&D.el._leaveCb&&D.el._leaveCb(),W(z,[m])},enter(m){let z=a,D=c,K=u;if(!n.isMounted)if(o)z=T||a,D=v||c,K=b||u;else return;let L=!1;const O=m._enterCb=I=>{L||(L=!0,I?W(K,[m]):W(D,[m]),N.delayedLeave&&N.delayedLeave(),m._enterCb=void 0)};z?X(z,[m,O]):O()},leave(m,z){const D=String(e.key);if(m._enterCb&&m._enterCb(!0),n.isUnmounting)return z();W(f,[m]);let K=!1;const L=m._leaveCb=O=>{K||(K=!0,z(),O?W(y,[m]):W(g,[m]),m._leaveCb=void 0,A[D]===e&&delete A[D])};A[D]=e,h?X(h,[m,L]):L()},clone(m){return eo(m,t,n,r)}};return N}function Dr(e){if(jn(e))return e=It(e),e.children=null,e}function is(e){return jn(e)?e.children?e.children[0]:void 0:e}function to(e,t){e.shapeFlag&6&&e.component?to(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Fi(e,t=!1,n){let r=[],o=0;for(let s=0;s1)for(let s=0;sAe({name:e.name},t,{setup:e}))():e}const sn=e=>!!e.type.__asyncLoader;function Be(e){oe(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:o=200,timeout:s,suspensible:i=!0,onError:l}=e;let a=null,c,u=0;const f=()=>(u++,a=null,h()),h=()=>{let g;return a||(g=a=t().catch(y=>{if(y=y instanceof Error?y:new Error(String(y)),l)return new Promise((E,T)=>{l(y,()=>E(f()),()=>T(y),u+1)});throw y}).then(y=>g!==a&&a?a:(y&&(y.__esModule||y[Symbol.toStringTag]==="Module")&&(y=y.default),c=y,y)))};return de({name:"AsyncComponentWrapper",__asyncLoader:h,get __asyncResolved(){return c},setup(){const g=Pe;if(c)return()=>Hr(c,g);const y=b=>{a=null,zn(b,g,13,!r)};if(i&&g.suspense||un)return h().then(b=>()=>Hr(b,g)).catch(b=>(y(b),()=>r?ee(r,{error:b}):null));const E=Ce(!1),T=Ce(),v=Ce(!!o);return o&&setTimeout(()=>{v.value=!1},o),s!=null&&setTimeout(()=>{if(!E.value&&!T.value){const b=new Error(`Async component timed out after ${s}ms.`);y(b),T.value=b}},s),h().then(()=>{E.value=!0,g.parent&&jn(g.parent.vnode)&&xr(g.parent.update)}).catch(b=>{y(b),T.value=b}),()=>{if(E.value&&c)return Hr(c,g);if(T.value&&r)return ee(r,{error:T.value});if(n&&!v.value)return ee(n)}}})}function Hr(e,t){const{ref:n,props:r,children:o,ce:s}=t.vnode,i=ee(e,r,o);return i.ref=n,i.ce=s,delete t.vnode.ce,i}const jn=e=>e.type.__isKeepAlive;function nc(e,t){Bi(e,"a",t)}function rc(e,t){Bi(e,"da",t)}function Bi(e,t,n=Pe){const r=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Tr(t,r,n),n){let o=n.parent;for(;o&&o.parent;)jn(o.parent.vnode)&&oc(r,t,n,o),o=o.parent}}function oc(e,t,n,r){const o=Tr(t,e,r,!0);kr(()=>{po(r[t],o)},n)}function Tr(e,t,n=Pe,r=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...i)=>{if(n.isUnmounted)return;pn(),cn(n);const l=Ze(t,n,e,i);return Wt(),mn(),l});return r?o.unshift(s):o.push(s),s}}const yt=e=>(t,n=Pe)=>(!un||e==="sp")&&Tr(e,(...r)=>t(...r),n),sc=yt("bm"),Xe=yt("m"),ic=yt("bu"),lc=yt("u"),Sr=yt("bum"),kr=yt("um"),ac=yt("sp"),cc=yt("rtg"),uc=yt("rtc");function fc(e,t=Pe){Tr("ec",e,t)}const zi="components";function bt(e,t){return hc(zi,e,!0,t)||e}const dc=Symbol.for("v-ndc");function hc(e,t,n=!0,r=!1){const o=Ne||Pe;if(o){const s=o.type;if(e===zi){const l=Uc(s,!1);if(l&&(l===t||l===ft(t)||l===wr(ft(t))))return s}const i=ls(o[e]||s[e],t)||ls(o.appContext[e],t);return!i&&r?s:i}}function ls(e,t){return e&&(e[t]||e[ft(t)]||e[wr(ft(t))])}function Ot(e,t,n,r){let o;const s=n&&n[r];if(J(e)||pe(e)){o=new Array(e.length);for(let i=0,l=e.length;it(i,l,void 0,s&&s[l]));else{const i=Object.keys(e);o=new Array(i.length);for(let l=0,a=i.length;lmr(t)?!(t.type===Ge||t.type===ye&&!ji(t.children)):!0)?e:null}const no=e=>e?el(e)?Pr(e)||e.proxy:no(e.parent):null,Ln=Ae(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>no(e.parent),$root:e=>no(e.root),$emit:e=>e.emit,$options:e=>Po(e),$forceUpdate:e=>e.f||(e.f=()=>xr(e.update)),$nextTick:e=>e.n||(e.n=Cr.bind(e.proxy)),$watch:e=>Za.bind(e)}),Fr=(e,t)=>e!==we&&!e.__isScriptSetup&&ce(e,t),pc={get({_:e},t){const{ctx:n,setupState:r,data:o,props:s,accessCache:i,type:l,appContext:a}=e;let c;if(t[0]!=="$"){const g=i[t];if(g!==void 0)switch(g){case 1:return r[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(Fr(r,t))return i[t]=1,r[t];if(o!==we&&ce(o,t))return i[t]=2,o[t];if((c=e.propsOptions[0])&&ce(c,t))return i[t]=3,s[t];if(n!==we&&ce(n,t))return i[t]=4,n[t];ro&&(i[t]=0)}}const u=Ln[t];let f,h;if(u)return t==="$attrs"&&qe(e,"get",t),u(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==we&&ce(n,t))return i[t]=4,n[t];if(h=a.config.globalProperties,ce(h,t))return h[t]},set({_:e},t,n){const{data:r,setupState:o,ctx:s}=e;return Fr(o,t)?(o[t]=n,!0):r!==we&&ce(r,t)?(r[t]=n,!0):ce(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:o,propsOptions:s}},i){let l;return!!n[i]||e!==we&&ce(e,i)||Fr(t,i)||(l=s[0])&&ce(l,i)||ce(r,i)||ce(Ln,i)||ce(o.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ce(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function as(e){return J(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ro=!0;function mc(e){const t=Po(e),n=e.proxy,r=e.ctx;ro=!1,t.beforeCreate&&cs(t.beforeCreate,e,"bc");const{data:o,computed:s,methods:i,watch:l,provide:a,inject:c,created:u,beforeMount:f,mounted:h,beforeUpdate:g,updated:y,activated:E,deactivated:T,beforeDestroy:v,beforeUnmount:b,destroyed:P,unmounted:A,render:W,renderTracked:X,renderTriggered:N,errorCaptured:m,serverPrefetch:z,expose:D,inheritAttrs:K,components:L,directives:O,filters:I}=t;if(c&&gc(c,r,null),i)for(const ne in i){const re=i[ne];oe(re)&&(r[ne]=re.bind(n))}if(o){const ne=o.call(n,n);Ee(ne)&&(e.data=Fn(ne))}if(ro=!0,s)for(const ne in s){const re=s[ne],De=oe(re)?re.bind(n,n):oe(re.get)?re.get.bind(n,n):ot,$e=!oe(re)&&oe(re.set)?re.set.bind(n):ot,Ue=j({get:De,set:$e});Object.defineProperty(r,ne,{enumerable:!0,configurable:!0,get:()=>Ue.value,set:He=>Ue.value=He})}if(l)for(const ne in l)Ui(l[ne],r,n,ne);if(a){const ne=oe(a)?a.call(n):a;Reflect.ownKeys(ne).forEach(re=>{Vt(re,ne[re])})}u&&cs(u,e,"c");function U(ne,re){J(re)?re.forEach(De=>ne(De.bind(n))):re&&ne(re.bind(n))}if(U(sc,f),U(Xe,h),U(ic,g),U(lc,y),U(nc,E),U(rc,T),U(fc,m),U(uc,X),U(cc,N),U(Sr,b),U(kr,A),U(ac,z),J(D))if(D.length){const ne=e.exposed||(e.exposed={});D.forEach(re=>{Object.defineProperty(ne,re,{get:()=>n[re],set:De=>n[re]=De})})}else e.exposed||(e.exposed={});W&&e.render===ot&&(e.render=W),K!=null&&(e.inheritAttrs=K),L&&(e.components=L),O&&(e.directives=O)}function gc(e,t,n=ot){J(e)&&(e=oo(e));for(const r in e){const o=e[r];let s;Ee(o)?"default"in o?s=Te(o.from||r,o.default,!0):s=Te(o.from||r):s=Te(o),Ie(s)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>s.value,set:i=>s.value=i}):t[r]=s}}function cs(e,t,n){Ze(J(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ui(e,t,n,r){const o=r.includes(".")?Ni(n,r):()=>n[r];if(pe(e)){const s=t[e];oe(s)&&st(o,s)}else if(oe(e))st(o,e.bind(n));else if(Ee(e))if(J(e))e.forEach(s=>Ui(s,t,n,r));else{const s=oe(e.handler)?e.handler.bind(n):t[e.handler];oe(s)&&st(o,s,e)}}function Po(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:i}}=e.appContext,l=s.get(t);let a;return l?a=l:!o.length&&!n&&!r?a=t:(a={},o.length&&o.forEach(c=>dr(a,c,i,!0)),dr(a,t,i)),Ee(t)&&s.set(t,a),a}function dr(e,t,n,r=!1){const{mixins:o,extends:s}=t;s&&dr(e,s,n,!0),o&&o.forEach(i=>dr(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=vc[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const vc={data:us,props:fs,emits:fs,methods:Cn,computed:Cn,beforeCreate:ze,created:ze,beforeMount:ze,mounted:ze,beforeUpdate:ze,updated:ze,beforeDestroy:ze,beforeUnmount:ze,destroyed:ze,unmounted:ze,activated:ze,deactivated:ze,errorCaptured:ze,serverPrefetch:ze,components:Cn,directives:Cn,watch:bc,provide:us,inject:_c};function us(e,t){return t?e?function(){return Ae(oe(e)?e.call(this,this):e,oe(t)?t.call(this,this):t)}:t:e}function _c(e,t){return Cn(oo(e),oo(t))}function oo(e){if(J(e)){const t={};for(let n=0;n1)return n&&oe(t)?t.call(r&&r.proxy):t}}function Ec(e,t,n,r=!1){const o={},s={};ir(s,Ar,1),e.propsDefaults=Object.create(null),Wi(e,t,o,s);for(const i in e.propsOptions[0])i in o||(o[i]=void 0);n?e.props=r?o:xi(o):e.type.props?e.props=o:e.props=s,e.attrs=s}function Cc(e,t,n,r){const{props:o,attrs:s,vnode:{patchFlag:i}}=e,l=fe(o),[a]=e.propsOptions;let c=!1;if((r||i>0)&&!(i&16)){if(i&8){const u=e.vnode.dynamicProps;for(let f=0;f{a=!0;const[h,g]=qi(f,t,!0);Ae(i,h),g&&l.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!s&&!a)return Ee(e)&&r.set(e,tn),tn;if(J(s))for(let u=0;u-1,g[1]=E<0||y-1||ce(g,"default"))&&l.push(f)}}}const c=[i,l];return Ee(e)&&r.set(e,c),c}function ds(e){return e[0]!=="$"}function hs(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function ps(e,t){return hs(e)===hs(t)}function ms(e,t){return J(t)?t.findIndex(n=>ps(n,e)):oe(t)&&ps(t,e)?0:-1}const Ki=e=>e[0]==="_"||e==="$stable",Ro=e=>J(e)?e.map(tt):[tt(e)],xc=(e,t,n)=>{if(t._n)return t;const r=Me((...o)=>Ro(t(...o)),n);return r._c=!1,r},Yi=(e,t,n)=>{const r=e._ctx;for(const o in e){if(Ki(o))continue;const s=e[o];if(oe(s))t[o]=xc(o,s,r);else if(s!=null){const i=Ro(s);t[o]=()=>i}}},Gi=(e,t)=>{const n=Ro(t);e.slots.default=()=>n},Lc=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=fe(t),ir(t,"_",n)):Yi(t,e.slots={})}else e.slots={},t&&Gi(e,t);ir(e.slots,Ar,1)},Tc=(e,t,n)=>{const{vnode:r,slots:o}=e;let s=!0,i=we;if(r.shapeFlag&32){const l=t._;l?n&&l===1?s=!1:(Ae(o,t),!n&&l===1&&delete o._):(s=!t.$stable,Yi(t,o)),i=t}else t&&(Gi(e,t),i={default:1});if(s)for(const l in o)!Ki(l)&&!(l in i)&&delete o[l]};function pr(e,t,n,r,o=!1){if(J(e)){e.forEach((h,g)=>pr(h,t&&(J(t)?t[g]:t),n,r,o));return}if(sn(r)&&!o)return;const s=r.shapeFlag&4?Pr(r.component)||r.component.proxy:r.el,i=o?null:s,{i:l,r:a}=e,c=t&&t.r,u=l.refs===we?l.refs={}:l.refs,f=l.setupState;if(c!=null&&c!==a&&(pe(c)?(u[c]=null,ce(f,c)&&(f[c]=null)):Ie(c)&&(c.value=null)),oe(a))Pt(a,l,12,[i,u]);else{const h=pe(a),g=Ie(a);if(h||g){const y=()=>{if(e.f){const E=h?ce(f,a)?f[a]:u[a]:a.value;o?J(E)&&po(E,s):J(E)?E.includes(s)||E.push(s):h?(u[a]=[s],ce(f,a)&&(f[a]=u[a])):(a.value=[s],e.k&&(u[e.k]=a.value))}else h?(u[a]=i,ce(f,a)&&(f[a]=i)):g&&(a.value=i,e.k&&(u[e.k]=i))};i?(y.id=-1,Ve(y,n)):y()}}}let xt=!1;const Qn=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Zn=e=>e.nodeType===8;function Sc(e){const{mt:t,p:n,o:{patchProp:r,createText:o,nextSibling:s,parentNode:i,remove:l,insert:a,createComment:c}}=e,u=(v,b)=>{if(!b.hasChildNodes()){n(null,v,b),cr(),b._vnode=v;return}xt=!1,f(b.firstChild,v,null,null,null),cr(),b._vnode=v,xt&&console.error("Hydration completed but contains mismatches.")},f=(v,b,P,A,W,X=!1)=>{const N=Zn(v)&&v.data==="[",m=()=>E(v,b,P,A,W,N),{type:z,ref:D,shapeFlag:K,patchFlag:L}=b;let O=v.nodeType;b.el=v,L===-2&&(X=!1,b.dynamicChildren=null);let I=null;switch(z){case an:O!==3?b.children===""?(a(b.el=o(""),i(v),v),I=v):I=m():(v.data!==b.children&&(xt=!0,v.data=b.children),I=s(v));break;case Ge:O!==8||N?I=m():I=s(v);break;case Tn:if(N&&(v=s(v),O=v.nodeType),O===1||O===3){I=v;const se=!b.children.length;for(let U=0;U{X=X||!!b.dynamicChildren;const{type:N,props:m,patchFlag:z,shapeFlag:D,dirs:K}=b,L=N==="input"&&K||N==="option";if(L||z!==-1){if(K&&ct(b,null,P,"created"),m)if(L||!X||z&48)for(const I in m)(L&&I.endsWith("value")||Dn(I)&&!xn(I))&&r(v,I,null,m[I],!1,void 0,P);else m.onClick&&r(v,"onClick",null,m.onClick,!1,void 0,P);let O;if((O=m&&m.onVnodeBeforeMount)&&Qe(O,P,b),K&&ct(b,null,P,"beforeMount"),((O=m&&m.onVnodeMounted)||K)&&$i(()=>{O&&Qe(O,P,b),K&&ct(b,null,P,"mounted")},A),D&16&&!(m&&(m.innerHTML||m.textContent))){let I=g(v.firstChild,b,v,P,A,W,X);for(;I;){xt=!0;const se=I;I=I.nextSibling,l(se)}}else D&8&&v.textContent!==b.children&&(xt=!0,v.textContent=b.children)}return v.nextSibling},g=(v,b,P,A,W,X,N)=>{N=N||!!b.dynamicChildren;const m=b.children,z=m.length;for(let D=0;D{const{slotScopeIds:N}=b;N&&(W=W?W.concat(N):N);const m=i(v),z=g(s(v),b,m,P,A,W,X);return z&&Zn(z)&&z.data==="]"?s(b.anchor=z):(xt=!0,a(b.anchor=c("]"),m,z),z)},E=(v,b,P,A,W,X)=>{if(xt=!0,b.el=null,X){const z=T(v);for(;;){const D=s(v);if(D&&D!==z)l(D);else break}}const N=s(v),m=i(v);return l(v),n(null,b,m,N,P,A,Qn(m),W),N},T=v=>{let b=0;for(;v;)if(v=s(v),v&&Zn(v)&&(v.data==="["&&b++,v.data==="]")){if(b===0)return s(v);b--}return v};return[u,f]}const Ve=$i;function kc(e){return Ac(e,Sc)}function Ac(e,t){const n=Gr();n.__VUE__=!0;const{insert:r,remove:o,patchProp:s,createElement:i,createText:l,createComment:a,setText:c,setElementText:u,parentNode:f,nextSibling:h,setScopeId:g=ot,insertStaticContent:y}=e,E=(d,p,_,w=null,x=null,S=null,H=!1,R=null,M=!!p.dynamicChildren)=>{if(d===p)return;d&&!Bt(d,p)&&(w=C(d),He(d,x,S,!0),d=null),p.patchFlag===-2&&(M=!1,p.dynamicChildren=null);const{type:k,ref:Y,shapeFlag:V}=p;switch(k){case an:T(d,p,_,w);break;case Ge:v(d,p,_,w);break;case Tn:d==null&&b(p,_,w,H);break;case ye:L(d,p,_,w,x,S,H,R,M);break;default:V&1?W(d,p,_,w,x,S,H,R,M):V&6?O(d,p,_,w,x,S,H,R,M):(V&64||V&128)&&k.process(d,p,_,w,x,S,H,R,M,$)}Y!=null&&x&&pr(Y,d&&d.ref,S,p||d,!p)},T=(d,p,_,w)=>{if(d==null)r(p.el=l(p.children),_,w);else{const x=p.el=d.el;p.children!==d.children&&c(x,p.children)}},v=(d,p,_,w)=>{d==null?r(p.el=a(p.children||""),_,w):p.el=d.el},b=(d,p,_,w)=>{[d.el,d.anchor]=y(d.children,p,_,w,d.el,d.anchor)},P=({el:d,anchor:p},_,w)=>{let x;for(;d&&d!==p;)x=h(d),r(d,_,w),d=x;r(p,_,w)},A=({el:d,anchor:p})=>{let _;for(;d&&d!==p;)_=h(d),o(d),d=_;o(p)},W=(d,p,_,w,x,S,H,R,M)=>{H=H||p.type==="svg",d==null?X(p,_,w,x,S,H,R,M):z(d,p,x,S,H,R,M)},X=(d,p,_,w,x,S,H,R)=>{let M,k;const{type:Y,props:V,shapeFlag:G,transition:te,dirs:ie}=d;if(M=d.el=i(d.type,S,V&&V.is,V),G&8?u(M,d.children):G&16&&m(d.children,M,null,w,x,S&&Y!=="foreignObject",H,R),ie&&ct(d,null,w,"created"),N(M,d,d.scopeId,H,w),V){for(const ge in V)ge!=="value"&&!xn(ge)&&s(M,ge,null,V[ge],S,d.children,w,x,Oe);"value"in V&&s(M,"value",null,V.value),(k=V.onVnodeBeforeMount)&&Qe(k,w,d)}ie&&ct(d,null,w,"beforeMount");const _e=(!x||x&&!x.pendingBranch)&&te&&!te.persisted;_e&&te.beforeEnter(M),r(M,p,_),((k=V&&V.onVnodeMounted)||_e||ie)&&Ve(()=>{k&&Qe(k,w,d),_e&&te.enter(M),ie&&ct(d,null,w,"mounted")},x)},N=(d,p,_,w,x)=>{if(_&&g(d,_),w)for(let S=0;S{for(let k=M;k{const R=p.el=d.el;let{patchFlag:M,dynamicChildren:k,dirs:Y}=p;M|=d.patchFlag&16;const V=d.props||we,G=p.props||we;let te;_&&Mt(_,!1),(te=G.onVnodeBeforeUpdate)&&Qe(te,_,p,d),Y&&ct(p,d,_,"beforeUpdate"),_&&Mt(_,!0);const ie=x&&p.type!=="foreignObject";if(k?D(d.dynamicChildren,k,R,_,w,ie,S):H||re(d,p,R,null,_,w,ie,S,!1),M>0){if(M&16)K(R,p,V,G,_,w,x);else if(M&2&&V.class!==G.class&&s(R,"class",null,G.class,x),M&4&&s(R,"style",V.style,G.style,x),M&8){const _e=p.dynamicProps;for(let ge=0;ge<_e.length;ge++){const Se=_e[ge],et=V[Se],Jt=G[Se];(Jt!==et||Se==="value")&&s(R,Se,et,Jt,x,d.children,_,w,Oe)}}M&1&&d.children!==p.children&&u(R,p.children)}else!H&&k==null&&K(R,p,V,G,_,w,x);((te=G.onVnodeUpdated)||Y)&&Ve(()=>{te&&Qe(te,_,p,d),Y&&ct(p,d,_,"updated")},w)},D=(d,p,_,w,x,S,H)=>{for(let R=0;R{if(_!==w){if(_!==we)for(const R in _)!xn(R)&&!(R in w)&&s(d,R,_[R],null,H,p.children,x,S,Oe);for(const R in w){if(xn(R))continue;const M=w[R],k=_[R];M!==k&&R!=="value"&&s(d,R,k,M,H,p.children,x,S,Oe)}"value"in w&&s(d,"value",_.value,w.value)}},L=(d,p,_,w,x,S,H,R,M)=>{const k=p.el=d?d.el:l(""),Y=p.anchor=d?d.anchor:l("");let{patchFlag:V,dynamicChildren:G,slotScopeIds:te}=p;te&&(R=R?R.concat(te):te),d==null?(r(k,_,w),r(Y,_,w),m(p.children,_,Y,x,S,H,R,M)):V>0&&V&64&&G&&d.dynamicChildren?(D(d.dynamicChildren,G,_,x,S,H,R),(p.key!=null||x&&p===x.subTree)&&Ji(d,p,!0)):re(d,p,_,Y,x,S,H,R,M)},O=(d,p,_,w,x,S,H,R,M)=>{p.slotScopeIds=R,d==null?p.shapeFlag&512?x.ctx.activate(p,_,w,H,M):I(p,_,w,x,S,H,M):se(d,p,M)},I=(d,p,_,w,x,S,H)=>{const R=d.component=Hc(d,w,x);if(jn(d)&&(R.ctx.renderer=$),Fc(R),R.asyncDep){if(x&&x.registerDep(R,U),!d.el){const M=R.subTree=ee(Ge);v(null,M,p,_)}return}U(R,d,p,_,x,S,H)},se=(d,p,_)=>{const w=p.component=d.component;if(Ga(d,p,_))if(w.asyncDep&&!w.asyncResolved){ne(w,p,_);return}else w.next=p,Ua(w.update),w.update();else p.el=d.el,w.vnode=p},U=(d,p,_,w,x,S,H)=>{const R=()=>{if(d.isMounted){let{next:Y,bu:V,u:G,parent:te,vnode:ie}=d,_e=Y,ge;Mt(d,!1),Y?(Y.el=ie.el,ne(d,Y,H)):Y=ie,V&&Mr(V),(ge=Y.props&&Y.props.onVnodeBeforeUpdate)&&Qe(ge,te,Y,ie),Mt(d,!0);const Se=Nr(d),et=d.subTree;d.subTree=Se,E(et,Se,f(et.el),C(et),d,x,S),Y.el=Se.el,_e===null&&Ja(d,Se.el),G&&Ve(G,x),(ge=Y.props&&Y.props.onVnodeUpdated)&&Ve(()=>Qe(ge,te,Y,ie),x)}else{let Y;const{el:V,props:G}=p,{bm:te,m:ie,parent:_e}=d,ge=sn(p);if(Mt(d,!1),te&&Mr(te),!ge&&(Y=G&&G.onVnodeBeforeMount)&&Qe(Y,_e,p),Mt(d,!0),V&&le){const Se=()=>{d.subTree=Nr(d),le(V,d.subTree,d,x,null)};ge?p.type.__asyncLoader().then(()=>!d.isUnmounted&&Se()):Se()}else{const Se=d.subTree=Nr(d);E(null,Se,_,w,d,x,S),p.el=Se.el}if(ie&&Ve(ie,x),!ge&&(Y=G&&G.onVnodeMounted)){const Se=p;Ve(()=>Qe(Y,_e,Se),x)}(p.shapeFlag&256||_e&&sn(_e.vnode)&&_e.vnode.shapeFlag&256)&&d.a&&Ve(d.a,x),d.isMounted=!0,p=_=w=null}},M=d.effect=new _o(R,()=>xr(k),d.scope),k=d.update=()=>M.run();k.id=d.uid,Mt(d,!0),k()},ne=(d,p,_)=>{p.component=d;const w=d.vnode.props;d.vnode=p,d.next=null,Cc(d,p.props,w,_),Tc(d,p.children,_),pn(),os(),mn()},re=(d,p,_,w,x,S,H,R,M=!1)=>{const k=d&&d.children,Y=d?d.shapeFlag:0,V=p.children,{patchFlag:G,shapeFlag:te}=p;if(G>0){if(G&128){$e(k,V,_,w,x,S,H,R,M);return}else if(G&256){De(k,V,_,w,x,S,H,R,M);return}}te&8?(Y&16&&Oe(k,x,S),V!==k&&u(_,V)):Y&16?te&16?$e(k,V,_,w,x,S,H,R,M):Oe(k,x,S,!0):(Y&8&&u(_,""),te&16&&m(V,_,w,x,S,H,R,M))},De=(d,p,_,w,x,S,H,R,M)=>{d=d||tn,p=p||tn;const k=d.length,Y=p.length,V=Math.min(k,Y);let G;for(G=0;GY?Oe(d,x,S,!0,!1,V):m(p,_,w,x,S,H,R,M,V)},$e=(d,p,_,w,x,S,H,R,M)=>{let k=0;const Y=p.length;let V=d.length-1,G=Y-1;for(;k<=V&&k<=G;){const te=d[k],ie=p[k]=M?St(p[k]):tt(p[k]);if(Bt(te,ie))E(te,ie,_,null,x,S,H,R,M);else break;k++}for(;k<=V&&k<=G;){const te=d[V],ie=p[G]=M?St(p[G]):tt(p[G]);if(Bt(te,ie))E(te,ie,_,null,x,S,H,R,M);else break;V--,G--}if(k>V){if(k<=G){const te=G+1,ie=teG)for(;k<=V;)He(d[k],x,S,!0),k++;else{const te=k,ie=k,_e=new Map;for(k=ie;k<=G;k++){const Ke=p[k]=M?St(p[k]):tt(p[k]);Ke.key!=null&&_e.set(Ke.key,k)}let ge,Se=0;const et=G-ie+1;let Jt=!1,qo=0;const vn=new Array(et);for(k=0;k=et){He(Ke,x,S,!0);continue}let at;if(Ke.key!=null)at=_e.get(Ke.key);else for(ge=ie;ge<=G;ge++)if(vn[ge-ie]===0&&Bt(Ke,p[ge])){at=ge;break}at===void 0?He(Ke,x,S,!0):(vn[at-ie]=k+1,at>=qo?qo=at:Jt=!0,E(Ke,p[at],_,null,x,S,H,R,M),Se++)}const Ko=Jt?Pc(vn):tn;for(ge=Ko.length-1,k=et-1;k>=0;k--){const Ke=ie+k,at=p[Ke],Yo=Ke+1{const{el:S,type:H,transition:R,children:M,shapeFlag:k}=d;if(k&6){Ue(d.component.subTree,p,_,w);return}if(k&128){d.suspense.move(p,_,w);return}if(k&64){H.move(d,p,_,$);return}if(H===ye){r(S,p,_);for(let V=0;VR.enter(S),x);else{const{leave:V,delayLeave:G,afterLeave:te}=R,ie=()=>r(S,p,_),_e=()=>{V(S,()=>{ie(),te&&te()})};G?G(S,ie,_e):_e()}else r(S,p,_)},He=(d,p,_,w=!1,x=!1)=>{const{type:S,props:H,ref:R,children:M,dynamicChildren:k,shapeFlag:Y,patchFlag:V,dirs:G}=d;if(R!=null&&pr(R,null,_,d,!0),Y&256){p.ctx.deactivate(d);return}const te=Y&1&&G,ie=!sn(d);let _e;if(ie&&(_e=H&&H.onVnodeBeforeUnmount)&&Qe(_e,p,d),Y&6)lt(d.component,_,w);else{if(Y&128){d.suspense.unmount(_,w);return}te&&ct(d,null,p,"beforeUnmount"),Y&64?d.type.remove(d,p,_,x,$,w):k&&(S!==ye||V>0&&V&64)?Oe(k,p,_,!1,!0):(S===ye&&V&384||!x&&Y&16)&&Oe(M,p,_),w&&wt(d)}(ie&&(_e=H&&H.onVnodeUnmounted)||te)&&Ve(()=>{_e&&Qe(_e,p,d),te&&ct(d,null,p,"unmounted")},_)},wt=d=>{const{type:p,el:_,anchor:w,transition:x}=d;if(p===ye){Et(_,w);return}if(p===Tn){A(d);return}const S=()=>{o(_),x&&!x.persisted&&x.afterLeave&&x.afterLeave()};if(d.shapeFlag&1&&x&&!x.persisted){const{leave:H,delayLeave:R}=x,M=()=>H(_,S);R?R(d.el,S,M):M()}else S()},Et=(d,p)=>{let _;for(;d!==p;)_=h(d),o(d),d=_;o(p)},lt=(d,p,_)=>{const{bum:w,scope:x,update:S,subTree:H,um:R}=d;w&&Mr(w),x.stop(),S&&(S.active=!1,He(H,d,p,_)),R&&Ve(R,p),Ve(()=>{d.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&d.asyncDep&&!d.asyncResolved&&d.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},Oe=(d,p,_,w=!1,x=!1,S=0)=>{for(let H=S;Hd.shapeFlag&6?C(d.component.subTree):d.shapeFlag&128?d.suspense.next():h(d.anchor||d.el),B=(d,p,_)=>{d==null?p._vnode&&He(p._vnode,null,null,!0):E(p._vnode||null,d,p,null,null,null,_),os(),cr(),p._vnode=d},$={p:E,um:He,m:Ue,r:wt,mt:I,mc:m,pc:re,pbc:D,n:C,o:e};let q,le;return t&&([q,le]=t($)),{render:B,hydrate:q,createApp:wc(B,q)}}function Mt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Ji(e,t,n=!1){const r=e.children,o=t.children;if(J(r)&&J(o))for(let s=0;s>1,e[n[l]]0&&(t[r]=n[s-1]),n[s]=r)}}for(s=n.length,i=n[s-1];s-- >0;)n[s]=i,i=t[i];return n}const Rc=e=>e.__isTeleport,ye=Symbol.for("v-fgt"),an=Symbol.for("v-txt"),Ge=Symbol.for("v-cmt"),Tn=Symbol.for("v-stc"),Sn=[];let rt=null;function F(e=!1){Sn.push(rt=e?null:[])}function Oc(){Sn.pop(),rt=Sn[Sn.length-1]||null}let $n=1;function gs(e){$n+=e}function Qi(e){return e.dynamicChildren=$n>0?rt||tn:null,Oc(),$n>0&&rt&&rt.push(e),e}function Q(e,t,n,r,o,s){return Qi(ue(e,t,n,r,o,s,!0))}function ke(e,t,n,r,o){return Qi(ee(e,t,n,r,o,!0))}function mr(e){return e?e.__v_isVNode===!0:!1}function Bt(e,t){return e.type===t.type&&e.key===t.key}const Ar="__vInternal",Zi=({key:e})=>e??null,or=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?pe(e)||Ie(e)||oe(e)?{i:Ne,r:e,k:t,f:!!n}:e:null);function ue(e,t=null,n=null,r=0,o=null,s=e===ye?0:1,i=!1,l=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Zi(t),ref:t&&or(t),scopeId:Ii,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:r,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Ne};return l?(Oo(a,n),s&128&&e.normalize(a)):n&&(a.shapeFlag|=pe(n)?8:16),$n>0&&!i&&rt&&(a.patchFlag>0||s&6)&&a.patchFlag!==32&&rt.push(a),a}const ee=Ic;function Ic(e,t=null,n=null,r=0,o=null,s=!1){if((!e||e===dc)&&(e=Ge),mr(e)){const l=It(e,t,!0);return n&&Oo(l,n),$n>0&&!s&&rt&&(l.shapeFlag&6?rt[rt.indexOf(e)]=l:rt.push(l)),l.patchFlag|=-2,l}if(Vc(e)&&(e=e.__vccOpts),t){t=$c(t);let{class:l,style:a}=t;l&&!pe(l)&&(t.class=We(l)),Ee(a)&&(Li(a)&&!J(a)&&(a=Ae({},a)),t.style=Hn(a))}const i=pe(e)?1:Qa(e)?128:Rc(e)?64:Ee(e)?4:oe(e)?2:0;return ue(e,t,n,r,o,i,s,!0)}function $c(e){return e?Li(e)||Ar in e?Ae({},e):e:null}function It(e,t,n=!1){const{props:r,ref:o,patchFlag:s,children:i}=e,l=t?io(r||{},t):r;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&Zi(l),ref:t&&t.ref?n&&o?J(o)?o.concat(or(t)):[o,or(t)]:or(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ye?s===-1?16:s|16:s,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&It(e.ssContent),ssFallback:e.ssFallback&&It(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function $t(e=" ",t=0){return ee(an,null,e,t)}function Mc(e,t){const n=ee(Tn,null,e);return n.staticCount=t,n}function Le(e="",t=!1){return t?(F(),ke(Ge,null,e)):ee(Ge,null,e)}function tt(e){return e==null||typeof e=="boolean"?ee(Ge):J(e)?ee(ye,null,e.slice()):typeof e=="object"?St(e):ee(an,null,String(e))}function St(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:It(e)}function Oo(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(J(t))n=16;else if(typeof t=="object")if(r&65){const o=t.default;o&&(o._c&&(o._d=!1),Oo(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!(Ar in t)?t._ctx=Ne:o===3&&Ne&&(Ne.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else oe(t)?(t={default:t,_ctx:Ne},n=32):(t=String(t),r&64?(n=16,t=[$t(t)]):n=8);e.children=t,e.shapeFlag|=n}function io(...e){const t={};for(let n=0;nPe||Ne;let Io,Qt,vs="__VUE_INSTANCE_SETTERS__";(Qt=Gr()[vs])||(Qt=Gr()[vs]=[]),Qt.push(e=>Pe=e),Io=e=>{Qt.length>1?Qt.forEach(t=>t(e)):Qt[0](e)};const cn=e=>{Io(e),e.scope.on()},Wt=()=>{Pe&&Pe.scope.off(),Io(null)};function el(e){return e.vnode.shapeFlag&4}let un=!1;function Fc(e,t=!1){un=t;const{props:n,children:r}=e.vnode,o=el(e);Ec(e,n,o,t),Lc(e,r);const s=o?Bc(e,t):void 0;return un=!1,s}function Bc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=Ti(new Proxy(e.ctx,pc));const{setup:r}=n;if(r){const o=e.setupContext=r.length>1?jc(e):null;cn(e),pn();const s=Pt(r,e,0,[e.props,o]);if(mn(),Wt(),ai(s)){if(s.then(Wt,Wt),t)return s.then(i=>{_s(e,i,t)}).catch(i=>{zn(i,e,0)});e.asyncDep=s}else _s(e,s,t)}else tl(e,t)}function _s(e,t,n){oe(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ee(t)&&(e.setupState=ki(t)),tl(e,n)}let bs;function tl(e,t,n){const r=e.type;if(!e.render){if(!t&&bs&&!r.render){const o=r.template||Po(e).template;if(o){const{isCustomElement:s,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:a}=r,c=Ae(Ae({isCustomElement:s,delimiters:l},i),a);r.render=bs(o,c)}}e.render=r.render||ot}cn(e),pn(),mc(e),mn(),Wt()}function zc(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return qe(e,"get","$attrs"),t[n]}}))}function jc(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return zc(e)},slots:e.slots,emit:e.emit,expose:t}}function Pr(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(ki(Ti(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Ln)return Ln[n](e)},has(t,n){return n in t||n in Ln}}))}function Uc(e,t=!0){return oe(e)?e.displayName||e.name:e.name||t&&e.__name}function Vc(e){return oe(e)&&"__vccOpts"in e}const j=(e,t)=>Ba(e,t,un);function ve(e,t,n){const r=arguments.length;return r===2?Ee(t)&&!J(t)?mr(t)?ee(e,null,[t]):ee(e,t):ee(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&mr(n)&&(n=[n]),ee(e,t,n))}const Wc=Symbol.for("v-scx"),qc=()=>Te(Wc),Kc="3.3.4",Yc="http://www.w3.org/2000/svg",zt=typeof document<"u"?document:null,ys=zt&&zt.createElement("template"),Gc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const o=t?zt.createElementNS(Yc,e):zt.createElement(e,n?{is:n}:void 0);return e==="select"&&r&&r.multiple!=null&&o.setAttribute("multiple",r.multiple),o},createText:e=>zt.createTextNode(e),createComment:e=>zt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>zt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,o,s){const i=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{ys.innerHTML=r?`${e}`:e;const l=ys.content;if(r){const a=l.firstChild;for(;a.firstChild;)l.appendChild(a.firstChild);l.removeChild(a)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}};function Jc(e,t,n){const r=e._vtc;r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}function Qc(e,t,n){const r=e.style,o=pe(n);if(n&&!o){if(t&&!pe(t))for(const s in t)n[s]==null&&lo(r,s,"");for(const s in n)lo(r,s,n[s])}else{const s=r.display;o?t!==n&&(r.cssText=n):t&&e.removeAttribute("style"),"_vod"in e&&(r.display=s)}}const ws=/\s*!important$/;function lo(e,t,n){if(J(n))n.forEach(r=>lo(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Zc(e,t);ws.test(n)?e.setProperty(Kt(r),n.replace(ws,""),"important"):e[r]=n}}const Es=["Webkit","Moz","ms"],Br={};function Zc(e,t){const n=Br[t];if(n)return n;let r=ft(t);if(r!=="filter"&&r in e)return Br[t]=r;r=wr(r);for(let o=0;ozr||(su.then(()=>zr=0),zr=Date.now());function lu(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Ze(au(r,n.value),t,5,[r])};return n.value=e,n.attached=iu(),n}function au(e,t){if(J(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>o=>!o._stopped&&r&&r(o))}else return t}const Ls=/^on[a-z]/,cu=(e,t,n,r,o=!1,s,i,l,a)=>{t==="class"?Jc(e,r,o):t==="style"?Qc(e,n,r):Dn(t)?ho(t)||ru(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):uu(e,t,r,o))?eu(e,t,r,s,i,l,a):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Xc(e,t,r,o))};function uu(e,t,n,r){return r?!!(t==="innerHTML"||t==="textContent"||t in e&&Ls.test(t)&&oe(n)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||Ls.test(t)&&pe(n)?!1:t in e}const Lt="transition",_n="animation",Un=(e,{slots:t})=>ve(tc,fu(e),t);Un.displayName="Transition";const nl={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Un.props=Ae({},Di,nl);const Nt=(e,t=[])=>{J(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ts=e=>e?J(e)?e.some(t=>t.length>1):e.length>1:!1;function fu(e){const t={};for(const L in e)L in nl||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:r,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:a=s,appearActiveClass:c=i,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,y=du(o),E=y&&y[0],T=y&&y[1],{onBeforeEnter:v,onEnter:b,onEnterCancelled:P,onLeave:A,onLeaveCancelled:W,onBeforeAppear:X=v,onAppear:N=b,onAppearCancelled:m=P}=t,z=(L,O,I)=>{Dt(L,O?u:l),Dt(L,O?c:i),I&&I()},D=(L,O)=>{L._isLeaving=!1,Dt(L,f),Dt(L,g),Dt(L,h),O&&O()},K=L=>(O,I)=>{const se=L?N:b,U=()=>z(O,L,I);Nt(se,[O,U]),Ss(()=>{Dt(O,L?a:s),Tt(O,L?u:l),Ts(se)||ks(O,r,E,U)})};return Ae(t,{onBeforeEnter(L){Nt(v,[L]),Tt(L,s),Tt(L,i)},onBeforeAppear(L){Nt(X,[L]),Tt(L,a),Tt(L,c)},onEnter:K(!1),onAppear:K(!0),onLeave(L,O){L._isLeaving=!0;const I=()=>D(L,O);Tt(L,f),mu(),Tt(L,h),Ss(()=>{L._isLeaving&&(Dt(L,f),Tt(L,g),Ts(A)||ks(L,r,T,I))}),Nt(A,[L,I])},onEnterCancelled(L){z(L,!1),Nt(P,[L])},onAppearCancelled(L){z(L,!0),Nt(m,[L])},onLeaveCancelled(L){D(L),Nt(W,[L])}})}function du(e){if(e==null)return null;if(Ee(e))return[jr(e.enter),jr(e.leave)];{const t=jr(e);return[t,t]}}function jr(e){return Jl(e)}function Tt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e._vtc||(e._vtc=new Set)).add(t)}function Dt(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const{_vtc:n}=e;n&&(n.delete(t),n.size||(e._vtc=void 0))}function Ss(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let hu=0;function ks(e,t,n,r){const o=e._endId=++hu,s=()=>{o===e._endId&&r()};if(n)return setTimeout(s,n);const{type:i,timeout:l,propCount:a}=pu(e,t);if(!i)return r();const c=i+"end";let u=0;const f=()=>{e.removeEventListener(c,h),s()},h=g=>{g.target===e&&++u>=a&&f()};setTimeout(()=>{u(n[y]||"").split(", "),o=r(`${Lt}Delay`),s=r(`${Lt}Duration`),i=As(o,s),l=r(`${_n}Delay`),a=r(`${_n}Duration`),c=As(l,a);let u=null,f=0,h=0;t===Lt?i>0&&(u=Lt,f=i,h=s.length):t===_n?c>0&&(u=_n,f=c,h=a.length):(f=Math.max(i,c),u=f>0?i>c?Lt:_n:null,h=u?u===Lt?s.length:a.length:0);const g=u===Lt&&/\b(transform|all)(,|$)/.test(r(`${Lt}Property`).toString());return{type:u,timeout:f,propCount:h,hasTransform:g}}function As(e,t){for(;e.lengthPs(n)+Ps(e[r])))}function Ps(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function mu(){return document.body.offsetHeight}const gu={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},vu=(e,t)=>n=>{if(!("key"in n))return;const r=Kt(n.key);if(t.some(o=>o===r||gu[o]===r))return e(n)},gr={beforeMount(e,{value:t},{transition:n}){e._vod=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):bn(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnter(e),bn(e,!0),r.enter(e)):r.leave(e,()=>{bn(e,!1)}):bn(e,t))},beforeUnmount(e,{value:t}){bn(e,t)}};function bn(e,t){e.style.display=t?e._vod:"none"}const _u=Ae({patchProp:cu},Gc);let Ur,Rs=!1;function bu(){return Ur=Rs?Ur:kc(_u),Rs=!0,Ur}const yu=(...e)=>{const t=bu().createApp(...e),{mount:n}=t;return t.mount=r=>{const o=wu(r);if(o)return n(o,!0,o instanceof SVGElement)},t};function wu(e){return pe(e)?document.querySelector(e):e}const Eu={"v-8daa1a0e":()=>he(()=>import("./index.html-5ba6cdc3.js"),[]).then(({data:e})=>e),"v-8daa1a0e":()=>he(()=>import("./index.html-5ba6cdc3.js"),[]).then(({data:e})=>e),"v-f7496066":()=>he(()=>import("./index.html-d95fdf8c.js"),[]).then(({data:e})=>e),"v-095d3fc2":()=>he(()=>import("./index.html-e38d5134.js"),[]).then(({data:e})=>e),"v-6d91ab6a":()=>he(()=>import("./0. TL_DR.html-04cf456a.js"),[]).then(({data:e})=>e),"v-f061bc86":()=>he(()=>import("./1. Indexing is non-trivial.html-de27ef5e.js"),[]).then(({data:e})=>e),"v-6b2d87a8":()=>he(()=>import("./2. Tree indexing.html-c8f97e3e.js"),[]).then(({data:e})=>e),"v-5ebcc181":()=>he(()=>import("./2.1 Method of Loci and sparsity.html-042d72fb.js"),[]).then(({data:e})=>e),"v-416a7838":()=>he(()=>import("./3. Copernicus and indexing.html-9b0fa442.js"),[]).then(({data:e})=>e),"v-43d2144f":()=>he(()=>import("./4. Continuous and discrete knowledge.html-e31de42f.js"),[]).then(({data:e})=>e),"v-49ee2257":()=>he(()=>import("./4.1 Interface of continuous and discrete.html-20711f93.js"),[]).then(({data:e})=>e),"v-98e96e0e":()=>he(()=>import("./4.2 Tyranny of science.html-c043c0d4.js"),[]).then(({data:e})=>e),"v-2e6765f0":()=>he(()=>import("./Comments on previous work.html-e69171fc.js"),[]).then(({data:e})=>e),"v-aa34d5c2":()=>he(()=>import("./index.html-2bf63421.js"),[]).then(({data:e})=>e),"v-3706649a":()=>he(()=>import("./404.html-60b35caa.js"),[]).then(({data:e})=>e)},Cu=JSON.parse('{"base":"/","lang":"en-US","title":"","description":"","head":[["link",{"rel":"icon","href":"/image/favicon.ico"}]],"locales":{}}');var xu=([e,t,n])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,n]),Lu=e=>{const t=new Set,n=[];return e.forEach(r=>{const o=xu(r);t.has(o)||(t.add(o),n.push(r))}),n},Vn=e=>/^(https?:)?\/\//.test(e),Tu=e=>/^mailto:/.test(e),Su=e=>/^tel:/.test(e),$o=e=>Object.prototype.toString.call(e)==="[object Object]",rl=e=>e[e.length-1]==="/"?e.slice(0,-1):e,ol=e=>e[0]==="/"?e.slice(1):e,sl=(e,t)=>{const n=Object.keys(e).sort((r,o)=>{const s=o.split("/").length-r.split("/").length;return s!==0?s:o.length-r.length});for(const r of n)if(t.startsWith(r))return r;return"/"};const il={"v-8daa1a0e":Be(()=>he(()=>import("./index.html-56b9252d.js"),[])),"v-8daa1a0e":Be(()=>he(()=>import("./index.html-56b9252d.js"),[])),"v-f7496066":Be(()=>he(()=>import("./index.html-487815e0.js"),[])),"v-095d3fc2":Be(()=>he(()=>import("./index.html-5374d3c8.js"),[])),"v-6d91ab6a":Be(()=>he(()=>import("./0. TL_DR.html-29b463da.js"),[])),"v-f061bc86":Be(()=>he(()=>import("./1. Indexing is non-trivial.html-c2c2b6c3.js"),[])),"v-6b2d87a8":Be(()=>he(()=>import("./2. Tree indexing.html-3ef81c1b.js"),[])),"v-5ebcc181":Be(()=>he(()=>import("./2.1 Method of Loci and sparsity.html-004732f1.js"),[])),"v-416a7838":Be(()=>he(()=>import("./3. Copernicus and indexing.html-a74d369d.js"),[])),"v-43d2144f":Be(()=>he(()=>import("./4. Continuous and discrete knowledge.html-aedec547.js"),[])),"v-49ee2257":Be(()=>he(()=>import("./4.1 Interface of continuous and discrete.html-98bab576.js"),[])),"v-98e96e0e":Be(()=>he(()=>import("./4.2 Tyranny of science.html-7dafcbed.js"),[])),"v-2e6765f0":Be(()=>he(()=>import("./Comments on previous work.html-92af1631.js"),[])),"v-aa34d5c2":Be(()=>he(()=>import("./index.html-59e966fb.js"),[])),"v-3706649a":Be(()=>he(()=>import("./404.html-3485f7d0.js"),[]))};var ku=Symbol(""),ll=Symbol(""),Au=Bn({key:"",path:"",title:"",lang:"",frontmatter:{},headers:[]}),qt=()=>{const e=Te(ll);if(!e)throw new Error("pageData() is called without provider.");return e},al=Symbol(""),gt=()=>{const e=Te(al);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},cl=Symbol(""),Pu=()=>{const e=Te(cl);if(!e)throw new Error("usePageHead() is called without provider.");return e},Ru=Symbol(""),ul=Symbol(""),Ou=()=>{const e=Te(ul);if(!e)throw new Error("usePageLang() is called without provider.");return e},fl=Symbol(""),Iu=()=>{const e=Te(fl);if(!e)throw new Error("usePageLayout() is called without provider.");return e},$u=Ce(Eu),Mo=Symbol(""),Rr=()=>{const e=Te(Mo);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},en=Ce(Cu),dl=()=>en,hl=Symbol(""),No=()=>{const e=Te(hl);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},Mu=Symbol(""),Nu="Layout",Du="NotFound",ht=Fn({resolveLayouts:e=>e.reduce((t,n)=>({...t,...n.layouts}),{}),resolvePageData:async e=>{const t=$u.value[e];return await(t==null?void 0:t())??Au},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,n)=>{const r=pe(t.description)?t.description:n.description,o=[...J(t.head)?t.head:[],...n.head,["title",{},e],["meta",{name:"description",content:r}]];return Lu(o)},resolvePageHeadTitle:(e,t)=>[e.title,t.title].filter(n=>!!n).join(" | "),resolvePageLang:(e,t)=>e.lang||t.lang||"en-US",resolvePageLayout:(e,t)=>{let n;if(e.path){const r=e.frontmatter.layout;pe(r)?n=r:n=Nu}else n=Du;return t[n]},resolveRouteLocale:(e,t)=>sl(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),Do=de({name:"ClientOnly",setup(e,t){const n=Ce(!1);return Xe(()=>{n.value=!0}),()=>{var r,o;return n.value?(o=(r=t.slots).default)==null?void 0:o.call(r):null}}}),Hu=de({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=qt(),n=j(()=>il[e.pageKey||t.value.key]);return()=>n.value?ve(n.value):ve("div","404 Not Found")}}),Yt=(e={})=>e,Ho=e=>Vn(e)?e:`/${ol(e)}`;function pl(e,t,n){var r,o,s;t===void 0&&(t=50),n===void 0&&(n={});var i=(r=n.isImmediate)!=null&&r,l=(o=n.callback)!=null&&o,a=n.maxWait,c=Date.now(),u=[];function f(){if(a!==void 0){var g=Date.now()-c;if(g+t>=a)return a-g}return t}var h=function(){var g=[].slice.call(arguments),y=this;return new Promise(function(E,T){var v=i&&s===void 0;if(s!==void 0&&clearTimeout(s),s=setTimeout(function(){if(s=void 0,c=Date.now(),!i){var P=e.apply(y,g);l&&l(P),u.forEach(function(A){return(0,A.resolve)(P)}),u=[]}},f()),v){var b=e.apply(y,g);return l&&l(b),E(b)}u.push({resolve:E,reject:T})})};return h.cancel=function(g){s!==void 0&&clearTimeout(s),u.forEach(function(y){return(0,y.reject)(g)}),u=[]},h}/*! + * vue-router v4.2.5 + * (c) 2023 Eduardo San Martin Morote + * @license MIT + */const Xt=typeof window<"u";function Fu(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const me=Object.assign;function Vr(e,t){const n={};for(const r in t){const o=t[r];n[r]=it(o)?o.map(e):e(o)}return n}const kn=()=>{},it=Array.isArray,Bu=/\/$/,zu=e=>e.replace(Bu,"");function Wr(e,t,n="/"){let r,o={},s="",i="";const l=t.indexOf("#");let a=t.indexOf("?");return l=0&&(a=-1),a>-1&&(r=t.slice(0,a),s=t.slice(a+1,l>-1?l:t.length),o=e(s)),l>-1&&(r=r||t.slice(0,l),i=t.slice(l,t.length)),r=Wu(r??t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:i}}function ju(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Os(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Uu(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&fn(t.matched[r],n.matched[o])&&ml(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function fn(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function ml(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Vu(e[n],t[n]))return!1;return!0}function Vu(e,t){return it(e)?Is(e,t):it(t)?Is(t,e):e===t}function Is(e,t){return it(t)?e.length===t.length&&e.every((n,r)=>n===t[r]):e.length===1&&e[0]===t}function Wu(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/"),o=r[r.length-1];(o===".."||o===".")&&r.push("");let s=n.length-1,i,l;for(i=0;i1&&s--;else break;return n.slice(0,s).join("/")+"/"+r.slice(i-(i===r.length?1:0)).join("/")}var Mn;(function(e){e.pop="pop",e.push="push"})(Mn||(Mn={}));var An;(function(e){e.back="back",e.forward="forward",e.unknown=""})(An||(An={}));function qu(e){if(!e)if(Xt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),zu(e)}const Ku=/^[^#]+#/;function Yu(e,t){return e.replace(Ku,"#")+t}function Gu(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const Or=()=>({left:window.pageXOffset,top:window.pageYOffset});function Ju(e){let t;if("el"in e){const n=e.el,r=typeof n=="string"&&n.startsWith("#"),o=typeof n=="string"?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=Gu(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function $s(e,t){return(history.state?history.state.position-t:-1)+e}const ao=new Map;function Qu(e,t){ao.set(e,t)}function Zu(e){const t=ao.get(e);return ao.delete(e),t}let Xu=()=>location.protocol+"//"+location.host;function gl(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let l=o.includes(e.slice(s))?e.slice(s).length:1,a=o.slice(l);return a[0]!=="/"&&(a="/"+a),Os(a,"")}return Os(n,e)+r+o}function ef(e,t,n,r){let o=[],s=[],i=null;const l=({state:h})=>{const g=gl(e,location),y=n.value,E=t.value;let T=0;if(h){if(n.value=g,t.value=h,i&&i===y){i=null;return}T=E?h.position-E.position:0}else r(g);o.forEach(v=>{v(n.value,y,{delta:T,type:Mn.pop,direction:T?T>0?An.forward:An.back:An.unknown})})};function a(){i=n.value}function c(h){o.push(h);const g=()=>{const y=o.indexOf(h);y>-1&&o.splice(y,1)};return s.push(g),g}function u(){const{history:h}=window;h.state&&h.replaceState(me({},h.state,{scroll:Or()}),"")}function f(){for(const h of s)h();s=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:a,listen:c,destroy:f}}function Ms(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?Or():null}}function tf(e){const{history:t,location:n}=window,r={value:gl(e,n)},o={value:t.state};o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function s(a,c,u){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+a:Xu()+e+a;try{t[u?"replaceState":"pushState"](c,"",h),o.value=c}catch(g){console.error(g),n[u?"replace":"assign"](h)}}function i(a,c){const u=me({},t.state,Ms(o.value.back,a,o.value.forward,!0),c,{position:o.value.position});s(a,u,!0),r.value=a}function l(a,c){const u=me({},o.value,t.state,{forward:a,scroll:Or()});s(u.current,u,!0);const f=me({},Ms(r.value,a,null),{position:u.position+1},c);s(a,f,!1),r.value=a}return{location:r,state:o,push:l,replace:i}}function nf(e){e=qu(e);const t=tf(e),n=ef(e,t.state,t.location,t.replace);function r(s,i=!0){i||n.pauseListeners(),history.go(s)}const o=me({location:"",base:e,go:r,createHref:Yu.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function rf(e){return typeof e=="string"||e&&typeof e=="object"}function vl(e){return typeof e=="string"||typeof e=="symbol"}const pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},_l=Symbol("");var Ns;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Ns||(Ns={}));function dn(e,t){return me(new Error,{type:e,[_l]:!0},t)}function dt(e,t){return e instanceof Error&&_l in e&&(t==null||!!(e.type&t))}const Ds="[^/]+?",of={sensitive:!1,strict:!1,start:!0,end:!0},sf=/[.+*?^${}()[\]/\\]/g;function lf(e,t){const n=me({},of,t),r=[];let o=n.start?"^":"";const s=[];for(const c of e){const u=c.length?[]:[90];n.strict&&!c.length&&(o+="/");for(let f=0;ft.length?t.length===1&&t[0]===40+40?1:-1:0}function cf(e,t){let n=0;const r=e.score,o=t.score;for(;n0&&t[t.length-1]<0}const uf={type:0,value:""},ff=/[a-zA-Z0-9_]/;function df(e){if(!e)return[[]];if(e==="/")return[[uf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${c}": ${g}`)}let n=0,r=n;const o=[];let s;function i(){s&&o.push(s),s=[]}let l=0,a,c="",u="";function f(){c&&(n===0?s.push({type:0,value:c}):n===1||n===2||n===3?(s.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),s.push({type:1,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function h(){c+=a}for(;l{i(b)}:kn}function i(u){if(vl(u)){const f=r.get(u);f&&(r.delete(u),n.splice(n.indexOf(f),1),f.children.forEach(i),f.alias.forEach(i))}else{const f=n.indexOf(u);f>-1&&(n.splice(f,1),u.record.name&&r.delete(u.record.name),u.children.forEach(i),u.alias.forEach(i))}}function l(){return n}function a(u){let f=0;for(;f=0&&(u.record.path!==n[f].record.path||!bl(u,n[f]));)f++;n.splice(f,0,u),u.record.name&&!Bs(u)&&r.set(u.record.name,u)}function c(u,f){let h,g={},y,E;if("name"in u&&u.name){if(h=r.get(u.name),!h)throw dn(1,{location:u});E=h.record.name,g=me(Fs(f.params,h.keys.filter(b=>!b.optional).map(b=>b.name)),u.params&&Fs(u.params,h.keys.map(b=>b.name))),y=h.stringify(g)}else if("path"in u)y=u.path,h=n.find(b=>b.re.test(y)),h&&(g=h.parse(y),E=h.record.name);else{if(h=f.name?r.get(f.name):n.find(b=>b.re.test(f.path)),!h)throw dn(1,{location:u,currentLocation:f});E=h.record.name,g=me({},f.params,u.params),y=h.stringify(g)}const T=[];let v=h;for(;v;)T.unshift(v.record),v=v.parent;return{name:E,path:y,params:g,matched:T,meta:vf(T)}}return e.forEach(u=>s(u)),{addRoute:s,resolve:c,removeRoute:i,getRoutes:l,getRecordMatcher:o}}function Fs(e,t){const n={};for(const r of t)r in e&&(n[r]=e[r]);return n}function mf(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:gf(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function gf(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const r in e.components)t[r]=typeof n=="object"?n[r]:n;return t}function Bs(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function vf(e){return e.reduce((t,n)=>me(t,n.meta),{})}function zs(e,t){const n={};for(const r in e)n[r]=r in t?t[r]:e[r];return n}function bl(e,t){return t.children.some(n=>n===e||bl(e,n))}const yl=/#/g,_f=/&/g,bf=/\//g,yf=/=/g,wf=/\?/g,wl=/\+/g,Ef=/%5B/g,Cf=/%5D/g,El=/%5E/g,xf=/%60/g,Cl=/%7B/g,Lf=/%7C/g,xl=/%7D/g,Tf=/%20/g;function Fo(e){return encodeURI(""+e).replace(Lf,"|").replace(Ef,"[").replace(Cf,"]")}function Sf(e){return Fo(e).replace(Cl,"{").replace(xl,"}").replace(El,"^")}function co(e){return Fo(e).replace(wl,"%2B").replace(Tf,"+").replace(yl,"%23").replace(_f,"%26").replace(xf,"`").replace(Cl,"{").replace(xl,"}").replace(El,"^")}function kf(e){return co(e).replace(yf,"%3D")}function Af(e){return Fo(e).replace(yl,"%23").replace(wf,"%3F")}function Pf(e){return e==null?"":Af(e).replace(bf,"%2F")}function vr(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Rf(e){const t={};if(e===""||e==="?")return t;const r=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;os&&co(s)):[r&&co(r)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function Of(e){const t={};for(const n in e){const r=e[n];r!==void 0&&(t[n]=it(r)?r.map(o=>o==null?null:""+o):r==null?r:""+r)}return t}const If=Symbol(""),Us=Symbol(""),Ir=Symbol(""),Bo=Symbol(""),uo=Symbol("");function yn(){let e=[];function t(r){return e.push(r),()=>{const o=e.indexOf(r);o>-1&&e.splice(o,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function kt(e,t,n,r,o){const s=r&&(r.enterCallbacks[o]=r.enterCallbacks[o]||[]);return()=>new Promise((i,l)=>{const a=f=>{f===!1?l(dn(4,{from:n,to:t})):f instanceof Error?l(f):rf(f)?l(dn(2,{from:t,to:f})):(s&&r.enterCallbacks[o]===s&&typeof f=="function"&&s.push(f),i())},c=e.call(r&&r.instances[o],t,n,a);let u=Promise.resolve(c);e.length<3&&(u=u.then(a)),u.catch(f=>l(f))})}function qr(e,t,n,r){const o=[];for(const s of e)for(const i in s.components){let l=s.components[i];if(!(t!=="beforeRouteEnter"&&!s.instances[i]))if($f(l)){const c=(l.__vccOpts||l)[t];c&&o.push(kt(c,n,r,s,i))}else{let a=l();o.push(()=>a.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${i}" at "${s.path}"`));const u=Fu(c)?c.default:c;s.components[i]=u;const h=(u.__vccOpts||u)[t];return h&&kt(h,n,r,s,i)()}))}}return o}function $f(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Vs(e){const t=Te(Ir),n=Te(Bo),r=j(()=>t.resolve(Z(e.to))),o=j(()=>{const{matched:a}=r.value,{length:c}=a,u=a[c-1],f=n.matched;if(!u||!f.length)return-1;const h=f.findIndex(fn.bind(null,u));if(h>-1)return h;const g=Ws(a[c-2]);return c>1&&Ws(u)===g&&f[f.length-1].path!==g?f.findIndex(fn.bind(null,a[c-2])):h}),s=j(()=>o.value>-1&&Hf(n.params,r.value.params)),i=j(()=>o.value>-1&&o.value===n.matched.length-1&&ml(n.params,r.value.params));function l(a={}){return Df(a)?t[Z(e.replace)?"replace":"push"](Z(e.to)).catch(kn):Promise.resolve()}return{route:r,href:j(()=>r.value.href),isActive:s,isExactActive:i,navigate:l}}const Mf=de({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Vs,setup(e,{slots:t}){const n=Fn(Vs(e)),{options:r}=Te(Ir),o=j(()=>({[qs(e.activeClass,r.linkActiveClass,"router-link-active")]:n.isActive,[qs(e.exactActiveClass,r.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const s=t.default&&t.default(n);return e.custom?s:ve("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:o.value},s)}}}),Nf=Mf;function Df(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Hf(e,t){for(const n in t){const r=t[n],o=e[n];if(typeof r=="string"){if(r!==o)return!1}else if(!it(o)||o.length!==r.length||r.some((s,i)=>s!==o[i]))return!1}return!0}function Ws(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const qs=(e,t,n)=>e??t??n,Ff=de({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const r=Te(uo),o=j(()=>e.route||r.value),s=Te(Us,0),i=j(()=>{let c=Z(s);const{matched:u}=o.value;let f;for(;(f=u[c])&&!f.components;)c++;return c}),l=j(()=>o.value.matched[i.value]);Vt(Us,j(()=>i.value+1)),Vt(If,l),Vt(uo,o);const a=Ce();return st(()=>[a.value,l.value,e.name],([c,u,f],[h,g,y])=>{u&&(u.instances[f]=c,g&&g!==u&&c&&c===h&&(u.leaveGuards.size||(u.leaveGuards=g.leaveGuards),u.updateGuards.size||(u.updateGuards=g.updateGuards))),c&&u&&(!g||!fn(u,g)||!h)&&(u.enterCallbacks[f]||[]).forEach(E=>E(c))},{flush:"post"}),()=>{const c=o.value,u=e.name,f=l.value,h=f&&f.components[u];if(!h)return Ks(n.default,{Component:h,route:c});const g=f.props[u],y=g?g===!0?c.params:typeof g=="function"?g(c):g:null,T=ve(h,me({},y,t,{onVnodeUnmounted:v=>{v.component.isUnmounted&&(f.instances[u]=null)},ref:a}));return Ks(n.default,{Component:T,route:c})||T}}});function Ks(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Ll=Ff;function Bf(e){const t=pf(e.routes,e),n=e.parseQuery||Rf,r=e.stringifyQuery||js,o=e.history,s=yn(),i=yn(),l=yn(),a=To(pt);let c=pt;Xt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Vr.bind(null,C=>""+C),f=Vr.bind(null,Pf),h=Vr.bind(null,vr);function g(C,B){let $,q;return vl(C)?($=t.getRecordMatcher(C),q=B):q=C,t.addRoute(q,$)}function y(C){const B=t.getRecordMatcher(C);B&&t.removeRoute(B)}function E(){return t.getRoutes().map(C=>C.record)}function T(C){return!!t.getRecordMatcher(C)}function v(C,B){if(B=me({},B||a.value),typeof C=="string"){const _=Wr(n,C,B.path),w=t.resolve({path:_.path},B),x=o.createHref(_.fullPath);return me(_,w,{params:h(w.params),hash:vr(_.hash),redirectedFrom:void 0,href:x})}let $;if("path"in C)$=me({},C,{path:Wr(n,C.path,B.path).path});else{const _=me({},C.params);for(const w in _)_[w]==null&&delete _[w];$=me({},C,{params:f(_)}),B.params=f(B.params)}const q=t.resolve($,B),le=C.hash||"";q.params=u(h(q.params));const d=ju(r,me({},C,{hash:Sf(le),path:q.path})),p=o.createHref(d);return me({fullPath:d,hash:le,query:r===js?Of(C.query):C.query||{}},q,{redirectedFrom:void 0,href:p})}function b(C){return typeof C=="string"?Wr(n,C,a.value.path):me({},C)}function P(C,B){if(c!==C)return dn(8,{from:B,to:C})}function A(C){return N(C)}function W(C){return A(me(b(C),{replace:!0}))}function X(C){const B=C.matched[C.matched.length-1];if(B&&B.redirect){const{redirect:$}=B;let q=typeof $=="function"?$(C):$;return typeof q=="string"&&(q=q.includes("?")||q.includes("#")?q=b(q):{path:q},q.params={}),me({query:C.query,hash:C.hash,params:"path"in q?{}:C.params},q)}}function N(C,B){const $=c=v(C),q=a.value,le=C.state,d=C.force,p=C.replace===!0,_=X($);if(_)return N(me(b(_),{state:typeof _=="object"?me({},le,_.state):le,force:d,replace:p}),B||$);const w=$;w.redirectedFrom=B;let x;return!d&&Uu(r,q,$)&&(x=dn(16,{to:w,from:q}),Ue(q,q,!0,!1)),(x?Promise.resolve(x):D(w,q)).catch(S=>dt(S)?dt(S,2)?S:$e(S):re(S,w,q)).then(S=>{if(S){if(dt(S,2))return N(me({replace:p},b(S.to),{state:typeof S.to=="object"?me({},le,S.to.state):le,force:d}),B||w)}else S=L(w,q,!0,p,le);return K(w,q,S),S})}function m(C,B){const $=P(C,B);return $?Promise.reject($):Promise.resolve()}function z(C){const B=Et.values().next().value;return B&&typeof B.runWithContext=="function"?B.runWithContext(C):C()}function D(C,B){let $;const[q,le,d]=zf(C,B);$=qr(q.reverse(),"beforeRouteLeave",C,B);for(const _ of q)_.leaveGuards.forEach(w=>{$.push(kt(w,C,B))});const p=m.bind(null,C,B);return $.push(p),Oe($).then(()=>{$=[];for(const _ of s.list())$.push(kt(_,C,B));return $.push(p),Oe($)}).then(()=>{$=qr(le,"beforeRouteUpdate",C,B);for(const _ of le)_.updateGuards.forEach(w=>{$.push(kt(w,C,B))});return $.push(p),Oe($)}).then(()=>{$=[];for(const _ of d)if(_.beforeEnter)if(it(_.beforeEnter))for(const w of _.beforeEnter)$.push(kt(w,C,B));else $.push(kt(_.beforeEnter,C,B));return $.push(p),Oe($)}).then(()=>(C.matched.forEach(_=>_.enterCallbacks={}),$=qr(d,"beforeRouteEnter",C,B),$.push(p),Oe($))).then(()=>{$=[];for(const _ of i.list())$.push(kt(_,C,B));return $.push(p),Oe($)}).catch(_=>dt(_,8)?_:Promise.reject(_))}function K(C,B,$){l.list().forEach(q=>z(()=>q(C,B,$)))}function L(C,B,$,q,le){const d=P(C,B);if(d)return d;const p=B===pt,_=Xt?history.state:{};$&&(q||p?o.replace(C.fullPath,me({scroll:p&&_&&_.scroll},le)):o.push(C.fullPath,le)),a.value=C,Ue(C,B,$,p),$e()}let O;function I(){O||(O=o.listen((C,B,$)=>{if(!lt.listening)return;const q=v(C),le=X(q);if(le){N(me(le,{replace:!0}),q).catch(kn);return}c=q;const d=a.value;Xt&&Qu($s(d.fullPath,$.delta),Or()),D(q,d).catch(p=>dt(p,12)?p:dt(p,2)?(N(p.to,q).then(_=>{dt(_,20)&&!$.delta&&$.type===Mn.pop&&o.go(-1,!1)}).catch(kn),Promise.reject()):($.delta&&o.go(-$.delta,!1),re(p,q,d))).then(p=>{p=p||L(q,d,!1),p&&($.delta&&!dt(p,8)?o.go(-$.delta,!1):$.type===Mn.pop&&dt(p,20)&&o.go(-1,!1)),K(q,d,p)}).catch(kn)}))}let se=yn(),U=yn(),ne;function re(C,B,$){$e(C);const q=U.list();return q.length?q.forEach(le=>le(C,B,$)):console.error(C),Promise.reject(C)}function De(){return ne&&a.value!==pt?Promise.resolve():new Promise((C,B)=>{se.add([C,B])})}function $e(C){return ne||(ne=!C,I(),se.list().forEach(([B,$])=>C?$(C):B()),se.reset()),C}function Ue(C,B,$,q){const{scrollBehavior:le}=e;if(!Xt||!le)return Promise.resolve();const d=!$&&Zu($s(C.fullPath,0))||(q||!$)&&history.state&&history.state.scroll||null;return Cr().then(()=>le(C,B,d)).then(p=>p&&Ju(p)).catch(p=>re(p,C,B))}const He=C=>o.go(C);let wt;const Et=new Set,lt={currentRoute:a,listening:!0,addRoute:g,removeRoute:y,hasRoute:T,getRoutes:E,resolve:v,options:e,push:A,replace:W,go:He,back:()=>He(-1),forward:()=>He(1),beforeEach:s.add,beforeResolve:i.add,afterEach:l.add,onError:U.add,isReady:De,install(C){const B=this;C.component("RouterLink",Nf),C.component("RouterView",Ll),C.config.globalProperties.$router=B,Object.defineProperty(C.config.globalProperties,"$route",{enumerable:!0,get:()=>Z(a)}),Xt&&!wt&&a.value===pt&&(wt=!0,A(o.location).catch(le=>{}));const $={};for(const le in pt)Object.defineProperty($,le,{get:()=>a.value[le],enumerable:!0});C.provide(Ir,B),C.provide(Bo,xi($)),C.provide(uo,a);const q=C.unmount;Et.add(C),C.unmount=function(){Et.delete(C),Et.size<1&&(c=pt,O&&O(),O=null,a.value=pt,wt=!1,ne=!1),q()}}};function Oe(C){return C.reduce((B,$)=>B.then(()=>z($)),Promise.resolve())}return lt}function zf(e,t){const n=[],r=[],o=[],s=Math.max(t.matched.length,e.matched.length);for(let i=0;ifn(c,l))?r.push(l):n.push(l));const a=e.matched[i];a&&(t.matched.find(c=>fn(c,a))||o.push(a))}return[n,r,o]}function gn(){return Te(Ir)}function Gt(){return Te(Bo)}const jf=({headerLinkSelector:e,headerAnchorSelector:t,delay:n,offset:r=5})=>{const o=gn(),i=pl(()=>{var E,T;const l=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(l-0)h.some(b=>b.hash===v.hash));for(let v=0;v=(((E=b.parentElement)==null?void 0:E.offsetTop)??0)-r,W=!P||l<(((T=P.parentElement)==null?void 0:T.offsetTop)??0)-r;if(!(A&&W))continue;const N=decodeURIComponent(o.currentRoute.value.hash),m=decodeURIComponent(b.hash);if(N===m)return;if(f){for(let z=v+1;z{window.addEventListener("scroll",i)}),Sr(()=>{window.removeEventListener("scroll",i)})},Ys=async(e,t)=>{const{scrollBehavior:n}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t}).finally(()=>e.options.scrollBehavior=n)},Uf="a.sidebar-item",Vf=".header-anchor",Wf=300,qf=5,Kf=Yt({setup(){jf({headerLinkSelector:Uf,headerAnchorSelector:Vf,delay:Wf,offset:qf})}}),Gs=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,Yf=()=>window.scrollTo({top:0,behavior:"smooth"});const Gf=de({name:"BackToTop",setup(){const e=Ce(0),t=j(()=>e.value>300),n=pl(()=>{e.value=Gs()},100);Xe(()=>{e.value=Gs(),window.addEventListener("scroll",()=>n())});const r=ve("div",{class:"back-to-top",onClick:Yf});return()=>ve(Un,{name:"back-to-top"},()=>t.value?r:null)}}),Jf=Yt({rootComponents:[Gf]});const Qf=ve("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[ve("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),ve("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),Zf=de({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Rr(),n=j(()=>e.locales[t.value]??{openInNewWindow:"open in new window"});return()=>ve("span",[Qf,ve("span",{class:"external-link-icon-sr-only"},n.value.openInNewWindow)])}}),Xf={"/":{openInNewWindow:"open in new window"}},ed=Yt({enhance({app:e}){e.component("ExternalLinkIcon",ve(Zf,{locales:Xf}))}});/*! medium-zoom 1.0.8 | MIT License | https://github.com/francoischalifour/medium-zoom */var Ht=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},r=window.Promise||function(L){function O(){}L(O,O)},o=function(L){var O=L.target;if(O===z){y();return}P.indexOf(O)!==-1&&E({target:O})},s=function(){if(!(W||!m.original)){var L=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(X-L)>N.scrollOffset&&setTimeout(y,150)}},i=function(L){var O=L.key||L.keyCode;(O==="Escape"||O==="Esc"||O===27)&&y()},l=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},O=L;if(L.background&&(z.style.background=L.background),L.container&&L.container instanceof Object&&(O.container=Ht({},N.container,L.container)),L.template){var I=sr(L.template)?L.template:document.querySelector(L.template);O.template=I}return N=Ht({},N,O),P.forEach(function(se){se.dispatchEvent(Zt("medium-zoom:update",{detail:{zoom:D}}))}),D},a=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Ht({},N,L))},c=function(){for(var L=arguments.length,O=Array(L),I=0;I0?O.reduce(function(U,ne){return[].concat(U,Qs(ne))},[]):P;return se.forEach(function(U){U.classList.remove("medium-zoom-image"),U.dispatchEvent(Zt("medium-zoom:detach",{detail:{zoom:D}}))}),P=P.filter(function(U){return se.indexOf(U)===-1}),D},f=function(L,O){var I=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(se){se.addEventListener("medium-zoom:"+L,O,I)}),A.push({type:"medium-zoom:"+L,listener:O,options:I}),D},h=function(L,O){var I=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return P.forEach(function(se){se.removeEventListener("medium-zoom:"+L,O,I)}),A=A.filter(function(se){return!(se.type==="medium-zoom:"+L&&se.listener.toString()===O.toString())}),D},g=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},O=L.target,I=function(){var U={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},ne=void 0,re=void 0;if(N.container)if(N.container instanceof Object)U=Ht({},U,N.container),ne=U.width-U.left-U.right-N.margin*2,re=U.height-U.top-U.bottom-N.margin*2;else{var De=sr(N.container)?N.container:document.querySelector(N.container),$e=De.getBoundingClientRect(),Ue=$e.width,He=$e.height,wt=$e.left,Et=$e.top;U=Ht({},U,{width:Ue,height:He,left:wt,top:Et})}ne=ne||U.width-N.margin*2,re=re||U.height-N.margin*2;var lt=m.zoomedHd||m.original,Oe=Js(lt)?ne:lt.naturalWidth||ne,C=Js(lt)?re:lt.naturalHeight||re,B=lt.getBoundingClientRect(),$=B.top,q=B.left,le=B.width,d=B.height,p=Math.min(Math.max(le,Oe),ne)/le,_=Math.min(Math.max(d,C),re)/d,w=Math.min(p,_),x=(-q+(ne-le)/2+N.margin+U.left)/w,S=(-$+(re-d)/2+N.margin+U.top)/w,H="scale("+w+") translate3d("+x+"px, "+S+"px, 0)";m.zoomed.style.transform=H,m.zoomedHd&&(m.zoomedHd.style.transform=H)};return new r(function(se){if(O&&P.indexOf(O)===-1){se(D);return}var U=function Ue(){W=!1,m.zoomed.removeEventListener("transitionend",Ue),m.original.dispatchEvent(Zt("medium-zoom:opened",{detail:{zoom:D}})),se(D)};if(m.zoomed){se(D);return}if(O)m.original=O;else if(P.length>0){var ne=P;m.original=ne[0]}else{se(D);return}if(m.original.dispatchEvent(Zt("medium-zoom:open",{detail:{zoom:D}})),X=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,W=!0,m.zoomed=rd(m.original),document.body.appendChild(z),N.template){var re=sr(N.template)?N.template:document.querySelector(N.template);m.template=document.createElement("div"),m.template.appendChild(re.content.cloneNode(!0)),document.body.appendChild(m.template)}if(m.original.parentElement&&m.original.parentElement.tagName==="PICTURE"&&m.original.currentSrc&&(m.zoomed.src=m.original.currentSrc),document.body.appendChild(m.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),m.original.classList.add("medium-zoom-image--hidden"),m.zoomed.classList.add("medium-zoom-image--opened"),m.zoomed.addEventListener("click",y),m.zoomed.addEventListener("transitionend",U),m.original.getAttribute("data-zoom-src")){m.zoomedHd=m.zoomed.cloneNode(),m.zoomedHd.removeAttribute("srcset"),m.zoomedHd.removeAttribute("sizes"),m.zoomedHd.removeAttribute("loading"),m.zoomedHd.src=m.zoomed.getAttribute("data-zoom-src"),m.zoomedHd.onerror=function(){clearInterval(De),console.warn("Unable to reach the zoom image target "+m.zoomedHd.src),m.zoomedHd=null,I()};var De=setInterval(function(){m.zoomedHd.complete&&(clearInterval(De),m.zoomedHd.classList.add("medium-zoom-image--opened"),m.zoomedHd.addEventListener("click",y),document.body.appendChild(m.zoomedHd),I())},10)}else if(m.original.hasAttribute("srcset")){m.zoomedHd=m.zoomed.cloneNode(),m.zoomedHd.removeAttribute("sizes"),m.zoomedHd.removeAttribute("loading");var $e=m.zoomedHd.addEventListener("load",function(){m.zoomedHd.removeEventListener("load",$e),m.zoomedHd.classList.add("medium-zoom-image--opened"),m.zoomedHd.addEventListener("click",y),document.body.appendChild(m.zoomedHd),I()})}else I()})},y=function(){return new r(function(L){if(W||!m.original){L(D);return}var O=function I(){m.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(m.zoomed),m.zoomedHd&&document.body.removeChild(m.zoomedHd),document.body.removeChild(z),m.zoomed.classList.remove("medium-zoom-image--opened"),m.template&&document.body.removeChild(m.template),W=!1,m.zoomed.removeEventListener("transitionend",I),m.original.dispatchEvent(Zt("medium-zoom:closed",{detail:{zoom:D}})),m.original=null,m.zoomed=null,m.zoomedHd=null,m.template=null,L(D)};W=!0,document.body.classList.remove("medium-zoom--opened"),m.zoomed.style.transform="",m.zoomedHd&&(m.zoomedHd.style.transform=""),m.template&&(m.template.style.transition="opacity 150ms",m.template.style.opacity=0),m.original.dispatchEvent(Zt("medium-zoom:close",{detail:{zoom:D}})),m.zoomed.addEventListener("transitionend",O)})},E=function(){var L=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},O=L.target;return m.original?y():g({target:O})},T=function(){return N},v=function(){return P},b=function(){return m.original},P=[],A=[],W=!1,X=0,N=n,m={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?N=t:(t||typeof t=="string")&&c(t),N=Ht({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},N);var z=nd(N.background);document.addEventListener("click",o),document.addEventListener("keyup",i),document.addEventListener("scroll",s),window.addEventListener("resize",y);var D={open:g,close:y,toggle:E,update:l,clone:a,attach:c,detach:u,on:f,off:h,getOptions:T,getImages:v,getZoomedImage:b};return D};function sd(e,t){t===void 0&&(t={});var n=t.insertAt;if(!(!e||typeof document>"u")){var r=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",n==="top"&&r.firstChild?r.insertBefore(o,r.firstChild):r.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}var id=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";sd(id);const ld=od,ad=Symbol("mediumZoom");const cd=".theme-default-content > img, .theme-default-content :not(a) > img",ud={},fd=300,dd=Yt({enhance({app:e,router:t}){const n=ld(ud);n.refresh=(r=cd)=>{n.detach(),n.attach(r)},e.provide(ad,n),t.afterEach(()=>{setTimeout(()=>n.refresh(),fd)})}});/** + * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT + */const ae={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=ae.isStarted();e=Kr(e,ae.settings.minimum,1),ae.status=e===1?null:e;const n=ae.render(!t),r=n.querySelector(ae.settings.barSelector),o=ae.settings.speed,s=ae.settings.easing;return n.offsetWidth,hd(i=>{er(r,{transform:"translate3d("+Zs(e)+"%,0,0)",transition:"all "+o+"ms "+s}),e===1?(er(n,{transition:"none",opacity:"1"}),n.offsetWidth,setTimeout(function(){er(n,{transition:"all "+o+"ms linear",opacity:"0"}),setTimeout(function(){ae.remove(),i()},o)},o)):setTimeout(()=>i(),o)}),ae},isStarted:()=>typeof ae.status=="number",start:()=>{ae.status||ae.set(0);const e=()=>{setTimeout(()=>{ae.status&&(ae.trickle(),e())},ae.settings.trickleSpeed)};return ae.settings.trickle&&e(),ae},done:e=>!e&&!ae.status?ae:ae.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=ae.status;return t?(typeof e!="number"&&(e=(1-t)*Kr(Math.random()*t,.1,.95)),t=Kr(t+e,0,.994),ae.set(t)):ae.start()},trickle:()=>ae.inc(Math.random()*ae.settings.trickleRate),render:e=>{if(ae.isRendered())return document.getElementById("nprogress");Xs(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=ae.settings.template;const n=t.querySelector(ae.settings.barSelector),r=e?"-100":Zs(ae.status||0),o=document.querySelector(ae.settings.parent);return er(n,{transition:"all 0 linear",transform:"translate3d("+r+"%,0,0)"}),o!==document.body&&Xs(o,"nprogress-custom-parent"),o==null||o.appendChild(t),t},remove:()=>{ei(document.documentElement,"nprogress-busy"),ei(document.querySelector(ae.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&pd(e)},isRendered:()=>!!document.getElementById("nprogress")},Kr=(e,t,n)=>en?n:e,Zs=e=>(-1+e)*100,hd=function(){const e=[];function t(){const n=e.shift();n&&n(t)}return function(n){e.push(n),e.length===1&&t()}}(),er=function(){const e=["Webkit","O","Moz","ms"],t={};function n(i){return i.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(l,a){return a.toUpperCase()})}function r(i){const l=document.body.style;if(i in l)return i;let a=e.length;const c=i.charAt(0).toUpperCase()+i.slice(1);let u;for(;a--;)if(u=e[a]+c,u in l)return u;return i}function o(i){return i=n(i),t[i]??(t[i]=r(i))}function s(i,l,a){l=o(l),i.style[l]=a}return function(i,l){for(const a in l){const c=l[a];c!==void 0&&Object.prototype.hasOwnProperty.call(l,a)&&s(i,a,c)}}}(),Tl=(e,t)=>(typeof e=="string"?e:zo(e)).indexOf(" "+t+" ")>=0,Xs=(e,t)=>{const n=zo(e),r=n+t;Tl(n,t)||(e.className=r.substring(1))},ei=(e,t)=>{const n=zo(e);if(!Tl(e,t))return;const r=n.replace(" "+t+" "," ");e.className=r.substring(1,r.length-1)},zo=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),pd=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const md=()=>{Xe(()=>{const e=gn(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(n=>{t.has(n.path)||ae.start()}),e.afterEach(n=>{t.add(n.path),ae.done()})})},gd=Yt({setup(){md()}}),vd=JSON.parse(`{"logo":"/image/logo.png","navbar":[{"text":"Home","link":"/"},{"text":"GitHub","link":"https://github.com/EvoEvolver/EvoNote"}],"sidebar":{"/":[{"text":"EvoNote Docs","children":[{"text":"Home","link":"/"},{"text":"Writings","link":"/writings"},{"text":"Development","link":"/development"},{"text":"DocInPy","link":"/docinpy"},{"text":"Project tree","link":"https://evonote.org/html/project_tree.html"}]}],"/writings":[{"text":"Writings","link":"/writings","children":[{"text":"0. TL;DR","link":"/writings/0. TL;DR.md"},{"text":"1. Indexing is non-trivial","link":"/writings/1. Indexing is non-trivial.md"},{"text":"2. Tree indexing","link":"/writings/2. Tree indexing.md"},{"text":"2.1 Method of Loci and sparsity","link":"/writings/2.1 Method of Loci and sparsity.md"},{"text":"3. Copernicus and indexing","link":"/writings/3. Copernicus and indexing.md"},{"text":"4. Continuous and discrete knowledge","link":"/writings/4. Continuous and discrete knowledge.md"},{"text":"4.1 Interface of continuous and discrete","link":"/writings/4.1 Interface of continuous and discrete.md"},{"text":"4.2 Tyranny of science","link":"/writings/4.2 Tyranny of science.md"},{"text":"Comments on previous work","link":"/writings/Comments on previous work.md"}]}]},"sidebarDepth":2,"locales":{"/":{"selectLanguageName":"English"}},"colorMode":"auto","colorModeSwitch":true,"repo":null,"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),_d=Ce(vd),Sl=()=>_d,kl=Symbol(""),bd=()=>{const e=Te(kl);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},yd=(e,t)=>{const{locales:n,...r}=e;return{...r,...n==null?void 0:n[t]}},wd=Yt({enhance({app:e}){const t=Sl(),n=e._context.provides[Mo],r=j(()=>yd(t.value,n.value));e.provide(kl,r),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return r.value}}})}}),Ed=de({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,n)=>(F(),Q("span",{class:We(["badge",e.type]),style:Hn({verticalAlign:e.vertical})},[be(t.$slots,"default",{},()=>[$t(Re(e.text),1)])],6))}}),xe=(e,t)=>{const n=e.__vccOpts||e;for(const[r,o]of t)n[r]=o;return n},Cd=xe(Ed,[["__file","Badge.vue"]]),xd=de({name:"CodeGroup",slots:Object,setup(e,{slots:t}){const n=Ce(-1),r=Ce([]),o=(l=n.value)=>{l{l>0?n.value=l-1:n.value=r.value.length-1,r.value[n.value].focus()},i=(l,a)=>{l.key===" "||l.key==="Enter"?(l.preventDefault(),n.value=a):l.key==="ArrowRight"?(l.preventDefault(),o(a)):l.key==="ArrowLeft"&&(l.preventDefault(),s(a))};return()=>{var a;const l=(((a=t.default)==null?void 0:a.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return l.length===0?null:(n.value<0||n.value>l.length-1?(n.value=l.findIndex(c=>c.props.active===""||c.props.active===!0),n.value===-1&&(n.value=0)):l.forEach((c,u)=>{c.props.active=u===n.value}),ve("div",{class:"code-group"},[ve("div",{class:"code-group__nav"},ve("ul",{class:"code-group__ul"},l.map((c,u)=>{const f=u===n.value;return ve("li",{class:"code-group__li"},ve("button",{ref:h=>{h&&(r.value[u]=h)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":f},ariaPressed:f,ariaExpanded:f,onClick:()=>n.value=u,onKeydown:h=>i(h,u)},c.props.title))}))),l]))}}}),Ld=["aria-selected"],Td=de({name:"CodeGroupItem"}),Sd=de({...Td,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,n)=>(F(),Q("div",{class:We(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[be(t.$slots,"default")],10,Ld))}}),kd=xe(Sd,[["__file","CodeGroupItem.vue"]]);function ti(e,t){var n;const r=To();return Mi(()=>{r.value=e()},{...t,flush:(n=t==null?void 0:t.flush)!=null?n:"sync"}),Bn(r)}function Ad(e,t){let n,r,o;const s=Ce(!0),i=()=>{s.value=!0,o()};st(e,i,{flush:"sync"});const l=typeof t=="function"?t:t.get,a=typeof t=="function"?void 0:t.set,c=Na((u,f)=>(r=u,o=f,{get(){return s.value&&(n=l(),s.value=!1),r(),n},set(h){a==null||a(h)}}));return Object.isExtensible(c)&&(c.trigger=i),c}function Al(e){return hi()?(sa(e),!0):!1}function hn(e){return typeof e=="function"?e():Z(e)}const Pd=typeof window<"u"&&typeof document<"u",Rd=Object.prototype.toString,Od=e=>Rd.call(e)==="[object Object]",Id=()=>{};function $d(e,t){function n(...r){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(o).catch(s)})}return n}const Pl=e=>e();function Md(e=Pl){const t=Ce(!0);function n(){t.value=!1}function r(){t.value=!0}const o=(...s)=>{t.value&&e(...s)};return{isActive:Bn(t),pause:n,resume:r,eventFilter:o}}function Nd(e,t,n={}){const{eventFilter:r=Pl,...o}=n;return st(e,$d(r,t),o)}function Dd(e,t,n={}){const{eventFilter:r,...o}=n,{eventFilter:s,pause:i,resume:l,isActive:a}=Md(r);return{stop:Nd(e,t,{...o,eventFilter:s}),pause:i,resume:l,isActive:a}}function Hd(e=!1,t={}){const{truthyValue:n=!0,falsyValue:r=!1}=t,o=Ie(e),s=Ce(e);function i(l){if(arguments.length)return s.value=l,s.value;{const a=hn(n);return s.value=s.value===a?hn(r):a,s.value}}return o?i:[s,i]}function Fd(e){var t;const n=hn(e);return(t=n==null?void 0:n.$el)!=null?t:n}const _r=Pd?window:void 0;function ni(...e){let t,n,r,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,o]=e,t=_r):[t,n,r,o]=e,!t)return Id;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const s=[],i=()=>{s.forEach(u=>u()),s.length=0},l=(u,f,h,g)=>(u.addEventListener(f,h,g),()=>u.removeEventListener(f,h,g)),a=st(()=>[Fd(t),hn(o)],([u,f])=>{if(i(),!u)return;const h=Od(f)?{...f}:f;s.push(...n.flatMap(g=>r.map(y=>l(u,g,y,h))))},{immediate:!0,flush:"post"}),c=()=>{a(),i()};return Al(c),c}function Bd(){const e=Ce(!1);return Xi()&&Xe(()=>{e.value=!0}),e}function zd(e){const t=Bd();return j(()=>(t.value,!!e()))}function jd(e,t={}){const{window:n=_r}=t,r=zd(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const s=Ce(!1),i=c=>{s.value=c.matches},l=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",i):o.removeListener(i))},a=Mi(()=>{r.value&&(l(),o=n.matchMedia(hn(e)),"addEventListener"in o?o.addEventListener("change",i):o.addListener(i),s.value=o.matches)});return Al(()=>{a(),l(),o=void 0}),s}const tr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},nr="__vueuse_ssr_handlers__",Ud=Vd();function Vd(){return nr in tr||(tr[nr]=tr[nr]||{}),tr[nr]}function Wd(e,t){return Ud[e]||t}function qd(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Kd={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},ri="vueuse-storage";function Yd(e,t,n,r={}){var o;const{flush:s="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:a=!0,mergeDefaults:c=!1,shallow:u,window:f=_r,eventFilter:h,onError:g=m=>{console.error(m)}}=r,y=(u?To:Ce)(t);if(!n)try{n=Wd("getDefaultStorage",()=>{var m;return(m=_r)==null?void 0:m.localStorage})()}catch(m){g(m)}if(!n)return y;const E=hn(t),T=qd(E),v=(o=r.serializer)!=null?o:Kd[T],{pause:b,resume:P}=Dd(y,()=>A(y.value),{flush:s,deep:i,eventFilter:h});return f&&l&&(ni(f,"storage",N),ni(f,ri,X)),N(),y;function A(m){try{if(m==null)n.removeItem(e);else{const z=v.write(m),D=n.getItem(e);D!==z&&(n.setItem(e,z),f&&f.dispatchEvent(new CustomEvent(ri,{detail:{key:e,oldValue:D,newValue:z,storageArea:n}})))}}catch(z){g(z)}}function W(m){const z=m?m.newValue:n.getItem(e);if(z==null)return a&&E!==null&&n.setItem(e,v.write(E)),E;if(!m&&c){const D=v.read(z);return typeof c=="function"?c(D,E):T==="object"&&!Array.isArray(D)?{...E,...D}:D}else return typeof z!="string"?z:v.read(z)}function X(m){N(m.detail)}function N(m){if(!(m&&m.storageArea!==n)){if(m&&m.key==null){y.value=E;return}if(!(m&&m.key!==e)){b();try{(m==null?void 0:m.newValue)!==v.write(y.value)&&(y.value=W(m))}catch(z){g(z)}finally{m?Cr(P):P()}}}}}function Gd(e){return jd("(prefers-color-scheme: dark)",e)}const Jd=()=>Sl(),je=()=>bd(),Rl=Symbol(""),jo=()=>{const e=Te(Rl);if(!e)throw new Error("useDarkMode() is called without provider.");return e},Qd=()=>{const e=je(),t=Gd(),n=Yd("vuepress-color-scheme",e.value.colorMode),r=j({get(){return e.value.colorModeSwitch?n.value==="auto"?t.value:n.value==="dark":e.value.colorMode==="dark"},set(o){o===t.value?n.value="auto":n.value=o?"dark":"light"}});Vt(Rl,r),Zd(r)},Zd=e=>{const t=(n=e.value)=>{const r=window==null?void 0:window.document.querySelector("html");r==null||r.classList.toggle("dark",n)};Xe(()=>{st(e,t,{immediate:!0})}),kr(()=>t())},Ol=(...e)=>{const n=gn().resolve(...e),r=n.matched[n.matched.length-1];if(!(r!=null&&r.redirect))return n;const{redirect:o}=r,s=oe(o)?o(n):o,i=pe(s)?{path:s}:s;return Ol({hash:n.hash,query:n.query,params:n.params,...i})},Uo=e=>{const t=Ol(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Yr=null,wn=null;const Xd={wait:()=>Yr,pending:()=>{Yr=new Promise(e=>wn=e)},resolve:()=>{wn==null||wn(),Yr=null,wn=null}},Il=()=>Xd,$l=Symbol("sidebarItems"),Vo=()=>{const e=Te($l);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},eh=()=>{const e=je(),t=gt(),n=j(()=>th(t.value,e.value));Vt($l,n)},th=(e,t)=>{const n=e.sidebar??t.sidebar??"auto",r=e.sidebarDepth??t.sidebarDepth??2;return e.home||n===!1?[]:n==="auto"?rh(r):J(n)?Ml(n,r):$o(n)?oh(n,r):[]},nh=(e,t)=>({text:e.title,link:e.link,children:Wo(e.children,t)}),Wo=(e,t)=>t>0?e.map(n=>nh(n,t-1)):[],rh=e=>{const t=qt();return[{text:t.value.title,children:Wo(t.value.headers,e)}]},Ml=(e,t)=>{const n=Gt(),r=qt(),o=s=>{var l;let i;if(pe(s)?i=Uo(s):i=s,i.children)return{...i,children:i.children.map(a=>o(a))};if(i.link===n.path){const a=((l=r.value.headers[0])==null?void 0:l.level)===1?r.value.headers[0].children:r.value.headers;return{...i,children:Wo(a,t)}}return i};return e.map(s=>o(s))},oh=(e,t)=>{const n=Gt(),r=sl(e,n.path),o=e[r]??[];return Ml(o,t)},sh="719px",ih={mobile:sh};var Nn;(function(e){e.MOBILE="mobile"})(Nn||(Nn={}));var ii;const lh={[Nn.MOBILE]:Number.parseInt((ii=ih.mobile)==null?void 0:ii.replace("px",""),10)},Nl=(e,t)=>{const n=lh[e];Number.isInteger(n)&&Xe(()=>{t(n),window.addEventListener("resize",()=>t(n),!1),window.addEventListener("orientationchange",()=>t(n),!1)})},ah={},ch={class:"theme-default-content"};function uh(e,t){const n=bt("Content");return F(),Q("div",ch,[ee(n)])}const fh=xe(ah,[["render",uh],["__file","HomeContent.vue"]]),dh={key:0,class:"features"},hh=de({__name:"HomeFeatures",setup(e){const t=gt(),n=j(()=>J(t.value.features)?t.value.features:[]);return(r,o)=>n.value.length?(F(),Q("div",dh,[(F(!0),Q(ye,null,Ot(n.value,s=>(F(),Q("div",{key:s.title,class:"feature"},[ue("h2",null,Re(s.title),1),ue("p",null,Re(s.details),1)]))),128))])):Le("v-if",!0)}}),ph=xe(hh,[["__file","HomeFeatures.vue"]]),mh=["innerHTML"],gh=["textContent"],vh=de({__name:"HomeFooter",setup(e){const t=gt(),n=j(()=>t.value.footer),r=j(()=>t.value.footerHtml);return(o,s)=>n.value?(F(),Q(ye,{key:0},[Le(" eslint-disable-next-line vue/no-v-html "),r.value?(F(),Q("div",{key:0,class:"footer",innerHTML:n.value},null,8,mh)):(F(),Q("div",{key:1,class:"footer",textContent:Re(n.value)},null,8,gh))],64)):Le("v-if",!0)}}),_h=xe(vh,[["__file","HomeFooter.vue"]]),bh=["href","rel","target","aria-label"],yh=de({inheritAttrs:!1}),wh=de({...yh,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,n=Gt(),r=dl(),{item:o}=So(t),s=j(()=>Vn(o.value.link)),i=j(()=>Tu(o.value.link)||Su(o.value.link)),l=j(()=>{if(!i.value){if(o.value.target)return o.value.target;if(s.value)return"_blank"}}),a=j(()=>l.value==="_blank"),c=j(()=>!s.value&&!i.value&&!a.value),u=j(()=>{if(!i.value){if(o.value.rel)return o.value.rel;if(a.value)return"noopener noreferrer"}}),f=j(()=>o.value.ariaLabel||o.value.text),h=j(()=>{const E=Object.keys(r.value.locales);return E.length?!E.some(T=>T===o.value.link):o.value.link!=="/"}),g=j(()=>h.value?n.path.startsWith(o.value.link):!1),y=j(()=>c.value?o.value.activeMatch?new RegExp(o.value.activeMatch).test(n.path):g.value:!1);return(E,T)=>{const v=bt("RouterLink"),b=bt("AutoLinkExternalIcon");return c.value?(F(),ke(v,io({key:0,class:{"router-link-active":y.value},to:Z(o).link,"aria-label":f.value},E.$attrs),{default:Me(()=>[be(E.$slots,"before"),$t(" "+Re(Z(o).text)+" ",1),be(E.$slots,"after")]),_:3},16,["class","to","aria-label"])):(F(),Q("a",io({key:1,class:"external-link",href:Z(o).link,rel:u.value,target:l.value,"aria-label":f.value},E.$attrs),[be(E.$slots,"before"),$t(" "+Re(Z(o).text)+" ",1),a.value?(F(),ke(b,{key:0})):Le("v-if",!0),be(E.$slots,"after")],16,bh))}}}),vt=xe(wh,[["__file","AutoLink.vue"]]),Eh={class:"hero"},Ch={key:0,id:"main-title"},xh={key:1,class:"description"},Lh={key:2,class:"actions"},Th=de({__name:"HomeHero",setup(e){const t=gt(),n=No(),r=jo(),o=j(()=>r.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),s=j(()=>t.value.heroAlt||l.value||"hero"),i=j(()=>t.value.heroHeight||280),l=j(()=>t.value.heroText===null?null:t.value.heroText||n.value.title||"Hello"),a=j(()=>t.value.tagline===null?null:t.value.tagline||n.value.description||"Welcome to your VuePress site"),c=j(()=>J(t.value.actions)?t.value.actions.map(({text:f,link:h,type:g="primary"})=>({text:f,link:h,type:g})):[]),u=()=>{if(!o.value)return null;const f=ve("img",{src:Ho(o.value),alt:s.value,height:i.value});return t.value.heroImageDark===void 0?f:ve(Do,()=>f)};return(f,h)=>(F(),Q("header",Eh,[ee(u),l.value?(F(),Q("h1",Ch,Re(l.value),1)):Le("v-if",!0),a.value?(F(),Q("p",xh,Re(a.value),1)):Le("v-if",!0),c.value.length?(F(),Q("p",Lh,[(F(!0),Q(ye,null,Ot(c.value,g=>(F(),ke(vt,{key:g.text,class:We(["action-button",[g.type]]),item:g},null,8,["class","item"]))),128))])):Le("v-if",!0)]))}}),Sh=xe(Th,[["__file","HomeHero.vue"]]),kh={class:"home"},Ah=de({__name:"Home",setup(e){return(t,n)=>(F(),Q("main",kh,[ee(Sh),ee(ph),ee(fh),ee(_h)]))}}),Ph=xe(Ah,[["__file","Home.vue"]]),Rh=de({__name:"NavbarBrand",setup(e){const t=Rr(),n=No(),r=je(),o=jo(),s=j(()=>r.value.home||t.value),i=j(()=>n.value.title),l=j(()=>o.value&&r.value.logoDark!==void 0?r.value.logoDark:r.value.logo),a=()=>{if(!l.value)return null;const c=ve("img",{class:"logo",src:Ho(l.value),alt:i.value});return r.value.logoDark===void 0?c:ve(Do,()=>c)};return(c,u)=>{const f=bt("RouterLink");return F(),ke(f,{to:s.value},{default:Me(()=>[ee(a),i.value?(F(),Q("span",{key:0,class:We(["site-name",{"can-hide":l.value}])},Re(i.value),3)):Le("v-if",!0)]),_:1},8,["to"])}}}),Oh=xe(Rh,[["__file","NavbarBrand.vue"]]),Ih=de({__name:"DropdownTransition",setup(e){const t=r=>{r.style.height=r.scrollHeight+"px"},n=r=>{r.style.height=""};return(r,o)=>(F(),ke(Un,{name:"dropdown",onEnter:t,onAfterEnter:n,onBeforeLeave:t},{default:Me(()=>[be(r.$slots,"default")]),_:3}))}}),Dl=xe(Ih,[["__file","DropdownTransition.vue"]]),$h=["aria-label"],Mh={class:"title"},Nh=ue("span",{class:"arrow down"},null,-1),Dh=["aria-label"],Hh={class:"title"},Fh={class:"navbar-dropdown"},Bh={class:"navbar-dropdown-subtitle"},zh={key:1},jh={class:"navbar-dropdown-subitem-wrapper"},Uh=de({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:n}=So(t),r=j(()=>n.value.ariaLabel||n.value.text),o=Ce(!1),s=Gt();st(()=>s.path,()=>{o.value=!1});const i=a=>{a.detail===0?o.value=!o.value:o.value=!1},l=(a,c)=>c[c.length-1]===a;return(a,c)=>(F(),Q("div",{class:We(["navbar-dropdown-wrapper",{open:o.value}])},[ue("button",{class:"navbar-dropdown-title",type:"button","aria-label":r.value,onClick:i},[ue("span",Mh,Re(Z(n).text),1),Nh],8,$h),ue("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":r.value,onClick:c[0]||(c[0]=u=>o.value=!o.value)},[ue("span",Hh,Re(Z(n).text),1),ue("span",{class:We(["arrow",o.value?"down":"right"])},null,2)],8,Dh),ee(Dl,null,{default:Me(()=>[fr(ue("ul",Fh,[(F(!0),Q(ye,null,Ot(Z(n).children,u=>(F(),Q("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(F(),Q(ye,{key:0},[ue("h4",Bh,[u.link?(F(),ke(vt,{key:0,item:u,onFocusout:f=>l(u,Z(n).children)&&u.children.length===0&&(o.value=!1)},null,8,["item","onFocusout"])):(F(),Q("span",zh,Re(u.text),1))]),ue("ul",jh,[(F(!0),Q(ye,null,Ot(u.children,f=>(F(),Q("li",{key:f.link,class:"navbar-dropdown-subitem"},[ee(vt,{item:f,onFocusout:h=>l(f,u.children)&&l(u,Z(n).children)&&(o.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(F(),ke(vt,{key:1,item:u,onFocusout:f=>l(u,Z(n).children)&&(o.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[gr,o.value]])]),_:1})],2))}}),Vh=xe(Uh,[["__file","NavbarDropdown.vue"]]),oi=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Wh=(e,t)=>{if(t.hash===e)return!0;const n=oi(t.path),r=oi(e);return n===r},Hl=(e,t)=>e.link&&Wh(e.link,t)?!0:e.children?e.children.some(n=>Hl(n,t)):!1,Fl=e=>!Vn(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,qh={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},Kh=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const n=Fl(e);return n!==null?qh[n]:null},Yh=({docsRepo:e,docsBranch:t,docsDir:n,filePathRelative:r,editLinkPattern:o})=>{if(!r)return null;const s=Kh({docsRepo:e,editLinkPattern:o});return s?s.replace(/:repo/,Vn(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,ol(`${rl(n)}/${r}`)):null},Gh={key:0,class:"navbar-items"},Jh=de({__name:"NavbarItems",setup(e){const t=()=>{const u=gn(),f=Rr(),h=dl(),g=No(),y=Jd(),E=je();return j(()=>{const T=Object.keys(h.value.locales);if(T.length<2)return[];const v=u.currentRoute.value.path,b=u.currentRoute.value.fullPath;return[{text:`${E.value.selectLanguageText}`,ariaLabel:`${E.value.selectLanguageAriaLabel??E.value.selectLanguageText}`,children:T.map(A=>{var D,K;const W=((D=h.value.locales)==null?void 0:D[A])??{},X=((K=y.value.locales)==null?void 0:K[A])??{},N=`${W.lang}`,m=X.selectLanguageName??N;let z;if(N===g.value.lang)z=b;else{const L=v.replace(f.value,A);u.getRoutes().some(O=>O.path===L)?z=b.replace(v,L):z=X.home??A}return{text:m,link:z}})}]})},n=()=>{const u=je(),f=j(()=>u.value.repo),h=j(()=>f.value?Fl(f.value):null),g=j(()=>f.value&&!Vn(f.value)?`https://github.com/${f.value}`:f.value),y=j(()=>g.value?u.value.repoLabel?u.value.repoLabel:h.value===null?"Source":h.value:null);return j(()=>!g.value||!y.value?[]:[{text:y.value,link:g.value}])},r=u=>pe(u)?Uo(u):u.children?{...u,children:u.children.map(r)}:u,o=()=>{const u=je();return j(()=>(u.value.navbar||[]).map(r))},s=Ce(!1),i=o(),l=t(),a=n(),c=j(()=>[...i.value,...l.value,...a.value]);return Nl(Nn.MOBILE,u=>{window.innerWidthc.value.length?(F(),Q("nav",Gh,[(F(!0),Q(ye,null,Ot(c.value,h=>(F(),Q("div",{key:h.text,class:"navbar-item"},[h.children?(F(),ke(Vh,{key:0,item:h,class:We(s.value?"mobile":"")},null,8,["item","class"])):(F(),ke(vt,{key:1,item:h},null,8,["item"]))]))),128))])):Le("v-if",!0)}}),Bl=xe(Jh,[["__file","NavbarItems.vue"]]),Qh=["title"],Zh={class:"icon",focusable:"false",viewBox:"0 0 32 32"},Xh=Mc('',9),ep=[Xh],tp={class:"icon",focusable:"false",viewBox:"0 0 32 32"},np=ue("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),rp=[np],op=de({__name:"ToggleColorModeButton",setup(e){const t=je(),n=jo(),r=()=>{n.value=!n.value};return(o,s)=>(F(),Q("button",{class:"toggle-color-mode-button",title:Z(t).toggleColorMode,onClick:r},[fr((F(),Q("svg",Zh,ep,512)),[[gr,!Z(n)]]),fr((F(),Q("svg",tp,rp,512)),[[gr,Z(n)]])],8,Qh))}}),sp=xe(op,[["__file","ToggleColorModeButton.vue"]]),ip=["title"],lp=ue("div",{class:"icon","aria-hidden":"true"},[ue("span"),ue("span"),ue("span")],-1),ap=[lp],cp=de({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=je();return(n,r)=>(F(),Q("div",{class:"toggle-sidebar-button",title:Z(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:r[0]||(r[0]=o=>n.$emit("toggle"))},ap,8,ip))}}),up=xe(cp,[["__file","ToggleSidebarButton.vue"]]),fp=de({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=je(),n=Ce(null),r=Ce(null),o=Ce(0),s=j(()=>o.value?{maxWidth:o.value+"px"}:{});Nl(Nn.MOBILE,l=>{var c;const a=i(n.value,"paddingLeft")+i(n.value,"paddingRight");window.innerWidth{const c=bt("NavbarSearch");return F(),Q("header",{ref_key:"navbar",ref:n,class:"navbar"},[ee(up,{onToggle:a[0]||(a[0]=u=>l.$emit("toggle-sidebar"))}),ue("span",{ref_key:"navbarBrand",ref:r},[ee(Oh)],512),ue("div",{class:"navbar-items-wrapper",style:Hn(s.value)},[be(l.$slots,"before"),ee(Bl,{class:"can-hide"}),be(l.$slots,"after"),Z(t).colorModeSwitch?(F(),ke(sp,{key:0})):Le("v-if",!0),ee(c)],4)],512)}}}),dp=xe(fp,[["__file","Navbar.vue"]]),hp={class:"page-meta"},pp={key:0,class:"meta-item edit-link"},mp={key:1,class:"meta-item last-updated"},gp={class:"meta-item-label"},vp={class:"meta-item-info"},_p={key:2,class:"meta-item contributors"},bp={class:"meta-item-label"},yp={class:"meta-item-info"},wp=["title"],Ep=de({__name:"PageMeta",setup(e){const t=()=>{const a=je(),c=qt(),u=gt();return j(()=>{if(!(u.value.editLink??a.value.editLink??!0))return null;const{repo:h,docsRepo:g=h,docsBranch:y="main",docsDir:E="",editLinkText:T}=a.value;if(!g)return null;const v=Yh({docsRepo:g,docsBranch:y,docsDir:E,filePathRelative:c.value.filePathRelative,editLinkPattern:u.value.editLinkPattern??a.value.editLinkPattern});return v?{text:T??"Edit this page",link:v}:null})},n=()=>{const a=je(),c=qt(),u=gt();return j(()=>{var g,y;return!(u.value.lastUpdated??a.value.lastUpdated??!0)||!((g=c.value.git)!=null&&g.updatedTime)?null:new Date((y=c.value.git)==null?void 0:y.updatedTime).toLocaleString()})},r=()=>{const a=je(),c=qt(),u=gt();return j(()=>{var h;return u.value.contributors??a.value.contributors??!0?((h=c.value.git)==null?void 0:h.contributors)??null:null})},o=je(),s=t(),i=n(),l=r();return(a,c)=>{const u=bt("ClientOnly");return F(),Q("footer",hp,[Z(s)?(F(),Q("div",pp,[ee(vt,{class:"meta-item-label",item:Z(s)},null,8,["item"])])):Le("v-if",!0),Z(i)?(F(),Q("div",mp,[ue("span",gp,Re(Z(o).lastUpdatedText)+": ",1),ee(u,null,{default:Me(()=>[ue("span",vp,Re(Z(i)),1)]),_:1})])):Le("v-if",!0),Z(l)&&Z(l).length?(F(),Q("div",_p,[ue("span",bp,Re(Z(o).contributorsText)+": ",1),ue("span",yp,[(F(!0),Q(ye,null,Ot(Z(l),(f,h)=>(F(),Q(ye,{key:h},[ue("span",{class:"contributor",title:`email: ${f.email}`},Re(f.name),9,wp),h!==Z(l).length-1?(F(),Q(ye,{key:0},[$t(", ")],64)):Le("v-if",!0)],64))),128))])])):Le("v-if",!0)])}}}),Cp=xe(Ep,[["__file","PageMeta.vue"]]),xp={key:0,class:"page-nav"},Lp={class:"inner"},Tp={key:0,class:"prev"},Sp={key:1,class:"next"},kp=de({__name:"PageNav",setup(e){const t=a=>a===!1?null:pe(a)?Uo(a):$o(a)?a:!1,n=(a,c,u)=>{const f=a.findIndex(h=>h.link===c);if(f!==-1){const h=a[f+u];return h!=null&&h.link?h:null}for(const h of a)if(h.children){const g=n(h.children,c,u);if(g)return g}return null},r=gt(),o=Vo(),s=Gt(),i=j(()=>{const a=t(r.value.prev);return a!==!1?a:n(o.value,s.path,-1)}),l=j(()=>{const a=t(r.value.next);return a!==!1?a:n(o.value,s.path,1)});return(a,c)=>i.value||l.value?(F(),Q("nav",xp,[ue("p",Lp,[i.value?(F(),Q("span",Tp,[ee(vt,{item:i.value},null,8,["item"])])):Le("v-if",!0),l.value?(F(),Q("span",Sp,[ee(vt,{item:l.value},null,8,["item"])])):Le("v-if",!0)])])):Le("v-if",!0)}}),Ap=xe(kp,[["__file","PageNav.vue"]]),Pp={class:"page"},Rp={class:"theme-default-content"},Op=de({__name:"Page",setup(e){return(t,n)=>{const r=bt("Content");return F(),Q("main",Pp,[be(t.$slots,"top"),ue("div",Rp,[be(t.$slots,"content-top"),ee(r),be(t.$slots,"content-bottom")]),ee(Cp),ee(Ap),be(t.$slots,"bottom")])}}}),Ip=xe(Op,[["__file","Page.vue"]]),$p=["onKeydown"],Mp={class:"sidebar-item-children"},Np=de({__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(e){const t=e,{item:n,depth:r}=So(t),o=Gt(),s=gn(),i=j(()=>Hl(n.value,o)),l=j(()=>({"sidebar-item":!0,"sidebar-heading":r.value===0,active:i.value,collapsible:n.value.collapsible})),a=j(()=>n.value.collapsible?i.value:!0),[c,u]=Hd(a.value),f=g=>{n.value.collapsible&&(g.preventDefault(),u())},h=s.afterEach(g=>{Cr(()=>{c.value=a.value})});return Sr(()=>{h()}),(g,y)=>{var T;const E=bt("SidebarItem",!0);return F(),Q("li",null,[Z(n).link?(F(),ke(vt,{key:0,class:We(l.value),item:Z(n)},null,8,["class","item"])):(F(),Q("p",{key:1,tabindex:"0",class:We(l.value),onClick:f,onKeydown:vu(f,["enter"])},[$t(Re(Z(n).text)+" ",1),Z(n).collapsible?(F(),Q("span",{key:0,class:We(["arrow",Z(c)?"down":"right"])},null,2)):Le("v-if",!0)],42,$p)),(T=Z(n).children)!=null&&T.length?(F(),ke(Dl,{key:2},{default:Me(()=>[fr(ue("ul",Mp,[(F(!0),Q(ye,null,Ot(Z(n).children,v=>(F(),ke(E,{key:`${Z(r)}${v.text}${v.link}`,item:v,depth:Z(r)+1},null,8,["item","depth"]))),128))],512),[[gr,Z(c)]])]),_:1})):Le("v-if",!0)])}}}),Dp=xe(Np,[["__file","SidebarItem.vue"]]),Hp={key:0,class:"sidebar-items"},Fp=de({__name:"SidebarItems",setup(e){const t=Gt(),n=Vo();return Xe(()=>{st(()=>t.hash,r=>{const o=document.querySelector(".sidebar");if(!o)return;const s=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${r}"]`);if(!s)return;const{top:i,height:l}=o.getBoundingClientRect(),{top:a,height:c}=s.getBoundingClientRect();ai+l&&s.scrollIntoView(!1)})}),(r,o)=>Z(n).length?(F(),Q("ul",Hp,[(F(!0),Q(ye,null,Ot(Z(n),s=>(F(),ke(Dp,{key:`${s.text}${s.link}`,item:s},null,8,["item"]))),128))])):Le("v-if",!0)}}),Bp=xe(Fp,[["__file","SidebarItems.vue"]]),zp={class:"sidebar"},jp=de({__name:"Sidebar",setup(e){return(t,n)=>(F(),Q("aside",zp,[ee(Bl),be(t.$slots,"top"),ee(Bp),be(t.$slots,"bottom")]))}}),Up=xe(jp,[["__file","Sidebar.vue"]]),Vp=de({__name:"Layout",setup(e){const t=qt(),n=gt(),r=je(),o=j(()=>n.value.navbar!==!1&&r.value.navbar!==!1),s=Vo(),i=Ce(!1),l=T=>{i.value=typeof T=="boolean"?T:!i.value},a={x:0,y:0},c=T=>{a.x=T.changedTouches[0].clientX,a.y=T.changedTouches[0].clientY},u=T=>{const v=T.changedTouches[0].clientX-a.x,b=T.changedTouches[0].clientY-a.y;Math.abs(v)>Math.abs(b)&&Math.abs(v)>40&&(v>0&&a.x<=80?l(!0):l(!1))},f=j(()=>[{"no-navbar":!o.value,"no-sidebar":!s.value.length,"sidebar-open":i.value},n.value.pageClass]);let h;Xe(()=>{h=gn().afterEach(()=>{l(!1)})}),kr(()=>{h()});const g=Il(),y=g.resolve,E=g.pending;return(T,v)=>(F(),Q("div",{class:We(["theme-container",f.value]),onTouchstart:c,onTouchend:u},[be(T.$slots,"navbar",{},()=>[o.value?(F(),ke(dp,{key:0,onToggleSidebar:l},{before:Me(()=>[be(T.$slots,"navbar-before")]),after:Me(()=>[be(T.$slots,"navbar-after")]),_:3})):Le("v-if",!0)]),ue("div",{class:"sidebar-mask",onClick:v[0]||(v[0]=b=>l(!1))}),be(T.$slots,"sidebar",{},()=>[ee(Up,null,{top:Me(()=>[be(T.$slots,"sidebar-top")]),bottom:Me(()=>[be(T.$slots,"sidebar-bottom")]),_:3})]),be(T.$slots,"page",{},()=>[Z(n).home?(F(),ke(Ph,{key:0})):(F(),ke(Un,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:Z(y),onBeforeLeave:Z(E)},{default:Me(()=>[(F(),ke(Ip,{key:Z(t).path},{top:Me(()=>[be(T.$slots,"page-top")]),"content-top":Me(()=>[be(T.$slots,"page-content-top")]),"content-bottom":Me(()=>[be(T.$slots,"page-content-bottom")]),bottom:Me(()=>[be(T.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),Wp=xe(Vp,[["__file","Layout.vue"]]),qp={class:"theme-container"},Kp={class:"page"},Yp={class:"theme-default-content"},Gp=ue("h1",null,"404",-1),Jp=de({__name:"NotFound",setup(e){const t=Rr(),n=je(),r=n.value.notFound??["Not Found"],o=()=>r[Math.floor(Math.random()*r.length)],s=n.value.home??t.value,i=n.value.backToHome??"Back to home";return(l,a)=>{const c=bt("RouterLink");return F(),Q("div",qp,[ue("main",Kp,[ue("div",Yp,[Gp,ue("blockquote",null,Re(o()),1),ee(c,{to:Z(s)},{default:Me(()=>[$t(Re(Z(i)),1)]),_:1},8,["to"])])])])}}}),Qp=xe(Jp,[["__file","NotFound.vue"]]);const Zp=Yt({enhance({app:e,router:t}){e.component("Badge",Cd),e.component("CodeGroup",xd),e.component("CodeGroupItem",kd),e.component("AutoLinkExternalIcon",()=>{const r=e.component("ExternalLinkIcon");return r?ve(r):null}),e.component("NavbarSearch",()=>{const r=e.component("Docsearch")||e.component("SearchBox");return r?ve(r):null});const n=t.options.scrollBehavior;t.options.scrollBehavior=async(...r)=>(await Il().wait(),n(...r))},setup(){Qd(),eh()},layouts:{Layout:Wp,NotFound:Qp}}),rr=[Kf,Jf,ed,dd,gd,wd,Zp],Xp=[["v-8daa1a0e","/",{title:""},["/README.md"]],["v-8daa1a0e","/",{title:""},["/index.md"]],["v-f7496066","/development/",{title:"Overall"},["/development/index.md"]],["v-095d3fc2","/docinpy/",{title:"DocInPy - Documentation just in your Python code"},["/docinpy/index.md"]],["v-6d91ab6a","/writings/0.%20TL_DR.html",{title:"TL;DR"},["/writings/0. TL_DR.html","/writings/0. TL;DR.html","/writings/0.%20TL;DR.html","/writings/0. TL;DR.md","/writings/0.%20TL;DR.md"]],["v-f061bc86","/writings/1.%20Indexing%20is%20non-trivial.html",{title:"Indexing is understanding"},["/writings/1. Indexing is non-trivial.html","/writings/1. Indexing is non-trivial.md",":md"]],["v-6b2d87a8","/writings/2.%20Tree%20indexing.html",{title:"Tree indexing"},["/writings/2. Tree indexing.html","/writings/2. Tree indexing.md",":md"]],["v-5ebcc181","/writings/2.1%20Method%20of%20Loci%20and%20sparsity.html",{title:"Method of Loci"},["/writings/2.1 Method of Loci and sparsity.html","/writings/2.1 Method of Loci and sparsity.md",":md"]],["v-416a7838","/writings/3.%20Copernicus%20and%20indexing.html",{title:"What are different understandings?"},["/writings/3. Copernicus and indexing.html","/writings/3. Copernicus and indexing.md",":md"]],["v-43d2144f","/writings/4.%20Continuous%20and%20discrete%20knowledge.html",{title:"Continuous and discrete knowledge"},["/writings/4. Continuous and discrete knowledge.html","/writings/4. Continuous and discrete knowledge.md",":md"]],["v-49ee2257","/writings/4.1%20Interface%20of%20continuous%20and%20discrete.html",{title:"Interface of continuous and discrete"},["/writings/4.1 Interface of continuous and discrete.html","/writings/4.1 Interface of continuous and discrete.md",":md"]],["v-98e96e0e","/writings/4.2%20Tyranny%20of%20science.html",{title:"Tyranny of science"},["/writings/4.2 Tyranny of science.html","/writings/4.2 Tyranny of science.md",":md"]],["v-2e6765f0","/writings/Comments%20on%20previous%20work.html",{title:"Comment on previous philosophical works"},["/writings/Comments on previous work.html","/writings/Comments on previous work.md",":md"]],["v-aa34d5c2","/writings/",{title:"Writings"},["/writings/index.md"]],["v-3706649a","/404.html",{title:""},[]]];var si=de({name:"Vuepress",setup(){const e=Iu();return()=>ve(e.value)}}),em=()=>Xp.reduce((e,[t,n,r,o])=>(e.push({name:t,path:n,component:si,meta:r},{path:n.endsWith("/")?n+"index.html":n.substring(0,n.length-5),redirect:n},...o.map(s=>({path:s===":md"?n.substring(0,n.length-5)+".md":s,redirect:n}))),e),[{name:"404",path:"/:catchAll(.*)",component:si}]),tm=nf,nm=()=>{const e=Bf({history:tm(rl("/")),routes:em(),scrollBehavior:(t,n,r)=>r||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,n)=>{var r;(t.path!==n.path||n===pt)&&([t.meta._data]=await Promise.all([ht.resolvePageData(t.name),(r=il[t.name])==null?void 0:r.__asyncLoader()]))}),e},rm=e=>{e.component("ClientOnly",Do),e.component("Content",Hu)},om=(e,t,n)=>{const r=ti(()=>t.currentRoute.value.path),o=ti(()=>ht.resolveRouteLocale(en.value.locales,r.value)),s=Ad(r,()=>t.currentRoute.value.meta._data),i=j(()=>ht.resolveLayouts(n)),l=j(()=>ht.resolveSiteLocaleData(en.value,o.value)),a=j(()=>ht.resolvePageFrontmatter(s.value)),c=j(()=>ht.resolvePageHeadTitle(s.value,l.value)),u=j(()=>ht.resolvePageHead(c.value,a.value,l.value)),f=j(()=>ht.resolvePageLang(s.value,l.value)),h=j(()=>ht.resolvePageLayout(s.value,i.value));return e.provide(ku,i),e.provide(ll,s),e.provide(al,a),e.provide(Ru,c),e.provide(cl,u),e.provide(ul,f),e.provide(fl,h),e.provide(Mo,o),e.provide(hl,l),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>a.value},$head:{get:()=>u.value},$headTitle:{get:()=>c.value},$lang:{get:()=>f.value},$page:{get:()=>s.value},$routeLocale:{get:()=>o.value},$site:{get:()=>en.value},$siteLocale:{get:()=>l.value},$withBase:{get:()=>Ho}}),{layouts:i,pageData:s,pageFrontmatter:a,pageHead:u,pageHeadTitle:c,pageLang:f,pageLayout:h,routeLocale:o,siteData:en,siteLocaleData:l}},sm=()=>{const e=Pu(),t=Ou(),n=Ce([]),r=()=>{e.value.forEach(s=>{const i=im(s);i&&n.value.push(i)})},o=()=>{document.documentElement.lang=t.value,n.value.forEach(s=>{s.parentNode===document.head&&document.head.removeChild(s)}),n.value.splice(0,n.value.length),e.value.forEach(s=>{const i=lm(s);i!==null&&(document.head.appendChild(i),n.value.push(i))})};Vt(Mu,o),Xe(()=>{r(),o(),st(()=>e.value,o)})},im=([e,t,n=""])=>{const r=Object.entries(t).map(([l,a])=>pe(a)?`[${l}=${JSON.stringify(a)}]`:a===!0?`[${l}]`:"").join(""),o=`head > ${e}${r}`;return Array.from(document.querySelectorAll(o)).find(l=>l.innerText===n)||null},lm=([e,t,n])=>{if(!pe(e))return null;const r=document.createElement(e);return $o(t)&&Object.entries(t).forEach(([o,s])=>{pe(s)?r.setAttribute(o,s):s===!0&&r.setAttribute(o,"")}),pe(n)&&r.appendChild(document.createTextNode(n)),r},am=yu,cm=async()=>{var n;const e=am({name:"VuepressApp",setup(){var r;sm();for(const o of rr)(r=o.setup)==null||r.call(o);return()=>[ve(Ll),...rr.flatMap(({rootComponents:o=[]})=>o.map(s=>ve(s)))]}}),t=nm();rm(e),om(e,t,rr);for(const r of rr)await((n=r.enhance)==null?void 0:n.call(r,{app:e,router:t,siteData:en}));return e.use(t),{app:e,router:t}};cm().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{xe as _,ue as a,$t as b,Q as c,cm as createVueApp,ee as d,Mc as e,F as o,bt as r,Me as w}; diff --git a/assets/back-to-top-8efcbe56.svg b/assets/back-to-top-8efcbe56.svg new file mode 100644 index 0000000..8323678 --- /dev/null +++ b/assets/back-to-top-8efcbe56.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/evonote-8fd48474.svg b/assets/evonote-8fd48474.svg new file mode 100644 index 0000000..4765e6f --- /dev/null +++ b/assets/evonote-8fd48474.svg @@ -0,0 +1,19 @@ + + + + + background + + + + + + + Layer 1 + + + + + voNote + + \ No newline at end of file diff --git a/assets/index.html-2bf63421.js b/assets/index.html-2bf63421.js new file mode 100644 index 0000000..1099ecb --- /dev/null +++ b/assets/index.html-2bf63421.js @@ -0,0 +1 @@ +const t=JSON.parse('{"key":"v-aa34d5c2","path":"/writings/","title":"Writings","lang":"en-US","frontmatter":{},"headers":[],"git":{"updatedTime":1696801705000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":1}]},"filePathRelative":"writings/index.md"}');export{t as data}; diff --git a/assets/index.html-487815e0.js b/assets/index.html-487815e0.js new file mode 100644 index 0000000..9c8b091 --- /dev/null +++ b/assets/index.html-487815e0.js @@ -0,0 +1,6 @@ +import{_ as o,r as t,o as s,c,a as e,b as a,d,e as i}from"./app-75398fc7.js";const r={},h=e("h1",{id:"overall",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#overall","aria-hidden":"true"},"#"),a(" Overall")],-1),l=e("p",null,"IDE recommendation: PyCharm",-1),p=e("p",null,"Docstring style: rst",-1),u=e("h2",{id:"docinpy",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#docinpy","aria-hidden":"true"},"#"),a(" DocInPy")],-1),g={href:"https://github.com/EvoEvolver/EvoNote/tree/main/docinpy",target:"_blank",rel:"noopener noreferrer"},b=i(`

Installation

git clone git@github.com:EvoEvolver/EvoNote.git
+pip install -e .
+

Classes

Knowledge storage

Note: The node of knowledge. It only contains the knowledge itself.

Tree: The collection of the references to Note objects. It contains the relationship among knowledge. It includes parents, children and path in the tree structure. It also contains the indexings of the notes.

Indexing

Indexing: The class for storing the data of one indexing. It can return related notes when provided with queries. It must be interpreted by the Indexer class.

Indexer: The factory of Indexing objects. Indexers are stateless and their state are stored in the Indexing object. A Indexer should never be instantiated and all its methods should be static.

Cache

CacheManager: The class for managing the cache of expensive tasks.

cache_manager: The instance of CacheManager for the whole program. You should import it whenever you want to read and write the caches.

cache_manager.read_cache(self, input: any, type: str) -> Cache: input should be a hashable. Cache storage and retrieval is realized by matching both input and type. See https://github.com/EvoEvolver/EvoNote/blob/main/evonote/search/fine_searcher.py for an example of usage.

When you want to discard a certain type of cache. You can use with cache_manager.refresh_cache(cache_type: str): to wrap the code that generates the cache. This will disable the cache of the type cache_type.

Debug

In the debug file, many useful function for revealing the intermediate results are provided. You can use them to debug the program. For example:

from evonote.debug import display_chats
+with display_chats():
+    some_code()
+

All the calling of chat completion will be displayed.

See https://github.com/EvoEvolver/EvoNote/blob/main/playground/debug.py for examples of usage.

Important functionalities

search: The folder includes the codes for searching in the knowledge base.

builder: The folder includes the codes for building the knowledge base.

`,22);function f(m,v){const n=t("ExternalLinkIcon");return s(),c("div",null,[h,l,p,u,e("p",null,[a("Please use the "),e("a",g,[a("DocInPy"),d(n)]),a(" style for adding sections in the codes.")]),b])}const x=o(r,[["render",f],["__file","index.html.vue"]]);export{x as default}; diff --git a/assets/index.html-5374d3c8.js b/assets/index.html-5374d3c8.js new file mode 100644 index 0000000..f19980a --- /dev/null +++ b/assets/index.html-5374d3c8.js @@ -0,0 +1,84 @@ +import{_ as i,r as o,o as d,c,a as n,b as e,d as s,w as l,e as r}from"./app-75398fc7.js";const u={},p=n("h1",{id:"docinpy-documentation-just-in-your-python-code",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#docinpy-documentation-just-in-your-python-code","aria-hidden":"true"},"#"),e(" DocInPy - Documentation just in your Python code")],-1),v=n("p",null,"DocInPy is a standard for putting documentation just in your Python code. It is proposed to provide another option other than the current standard of putting documentation in a separate file. Though it is not new to mix documentation with code, in DocInPy, you can also do",-1),m=n("ul",null,[n("li",null,"Adding sections to your functions and classes"),n("li",null,"Adding examples to your functions and classes")],-1),h=n("p",null,"We believe in this way we can provide much more context information to new contributors who are not familiar with the codebase. It is also important for AI-based agents to understand the codebase and develop it.",-1),b=n("h2",{id:"evonote",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#evonote","aria-hidden":"true"},"#"),e(" EvoNote")],-1),k={href:"https://evonote.org/html/project_tree.html",target:"_blank",rel:"noopener noreferrer"},f=r(`

How to use

Sections

Putting sections in DocInPy is as easy as putting sections in Markdown. You just need to put a # before your section title in a comment environment starting with """. For example,

"""
+# Section 1
+The following is a function.
+"""
+
+
+def foo():
+    pass
+
+
+"""
+# Section 2
+The following is another function.
+"""
+
+
+def bar():
+    pass
+

In this way, foo() and bar() will have sections Section 1 and Section 2 respectively. The sections will also contain the comments under them.

Your section can also contain classes add levels. For example,

"""
+# Top Section
+## Section 1
+"""
+
+
+class Foo:
+    """
+    # Section 1
+    The following is a function.
+    """
+
+    def foo(self):
+        pass
+
+    """
+    # Section 2
+    The following is another function.
+    """
+
+    def bar(self):
+        pass
+
+
+"""
+## Section 2
+"""
+
+
+def baz():
+    pass
+

Section in folder

You add .tree.yml file in a folder to add sections in it. For example, in the following folder

a_folder
+- __init__.py
+- a.py
+- b.py
+- c.py
+- .tree.yml
+

You can put a,b in a section by putting

sections:
+ your section title:
+   - a
+   - b
+default section: you default section title
+

Then a and b will be in the section your section title and c will be in the section you default section title.

Mark examples

You can also add examples to your functions and classes. Just use the @example decorator. For example,

from docinpy.decorator import example
+
+
+@example
+def how_to_use_foo():
+    """
+    # Example
+    The following is an example of using \`foo()\`.
+    """
+    foo()
+

Mark todos

In a similar way, you can also mark todos in your code. Just use the @todo decorator. For example,

from docinpy.decorator import todo
+
+@todo
+def todo_foo():
+    """
+    # Todo
+    The following is a todo.
+    """
+    foo()
+
+@todo("This function is buggy. Fix it.")
+def buggy_foo():
+    foo(a=b)
+

Philosophy behind DocInPy

Literate programming

`,21),g={href:"https://guides.nyu.edu/datascience/literate-prog",target:"_blank",rel:"noopener noreferrer"},y=n("h3",{id:"sparse-tree-structure",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#sparse-tree-structure","aria-hidden":"true"},"#"),e(" Sparse tree structure")],-1),q=n("p",null,"All the programming languages encourage the programmers to put their code in the tree structure. For example, you can put your functions in difference classes, in different files and put the files in different folders. However, it is still very common to put a lot of functions in a single file, in which the codes are arranged in an almost flat structure.",-1);function w(_,x){const a=o("ExternalLinkIcon"),t=o("RouterLink");return d(),c("div",null,[p,v,m,h,b,n("p",null,[e("EvoNote is using DocInPy to document its codebase. You can have a good visualization of EvoNote's codebase by running "),n("a",k,[e("EvoNote visualization"),s(a)]),e(".")]),f,n("p",null,[e("DocInPy can be regarded as an effort toward the idea - "),n("a",g,[e("literate programming"),s(a)]),e(". We think literate programming gets even more important in the era of AI for it provides more context information for AI-based agents to understand the codebase.")]),y,q,n("p",null,[e("DocInPy helps this by adding a zero-cost way to add sections to your functions and classes. It makes another step towards a more tree-like structure of the codebase. We believe this will help the programmers to understand the codebase better. See "),s(t,{to:"/writings/2.1%20Method%20of%20Loci%20and%20sparsity.html"},{default:l(()=>[e("Method of Loci")]),_:1}),e(" for more details.")])])}const S=i(u,[["render",w],["__file","index.html.vue"]]);export{S as default}; diff --git a/assets/index.html-56b9252d.js b/assets/index.html-56b9252d.js new file mode 100644 index 0000000..abdd806 --- /dev/null +++ b/assets/index.html-56b9252d.js @@ -0,0 +1 @@ +import{_ as t,o,c as s,a as e}from"./app-75398fc7.js";const n="/assets/evonote-8fd48474.svg",c={},_=e("p",null,[e("img",{src:n,alt:""})],-1),a=e("p",null,"Welcome to the EvoNote documentation!",-1),l=[_,a];function r(i,d){return o(),s("div",null,l)}const f=t(c,[["render",r],["__file","index.html.vue"]]);export{f as default}; diff --git a/assets/index.html-59e966fb.js b/assets/index.html-59e966fb.js new file mode 100644 index 0000000..998aff7 --- /dev/null +++ b/assets/index.html-59e966fb.js @@ -0,0 +1 @@ +import{_ as t,o as n,c as r,a as e,b as s}from"./app-75398fc7.js";const i={},a=e("h1",{id:"writings",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#writings","aria-hidden":"true"},"#"),s(" Writings")],-1),o=e("p",null,"Here are writings reflecting the ideas of EvoNote.",-1),c=[a,o];function _(d,l){return n(),r("div",null,c)}const f=t(i,[["render",_],["__file","index.html.vue"]]);export{f as default}; diff --git a/assets/index.html-5ba6cdc3.js b/assets/index.html-5ba6cdc3.js new file mode 100644 index 0000000..aa228a6 --- /dev/null +++ b/assets/index.html-5ba6cdc3.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-8daa1a0e","path":"/","title":"","lang":"en-US","frontmatter":{},"headers":[],"git":{"updatedTime":1696877859000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":4}]},"filePathRelative":"index.md"}');export{e as data}; diff --git a/assets/index.html-d95fdf8c.js b/assets/index.html-d95fdf8c.js new file mode 100644 index 0000000..99f5f03 --- /dev/null +++ b/assets/index.html-d95fdf8c.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-f7496066","path":"/development/","title":"Overall","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"DocInPy","slug":"docinpy","link":"#docinpy","children":[]},{"level":2,"title":"Installation","slug":"installation","link":"#installation","children":[]},{"level":2,"title":"Knowledge storage","slug":"knowledge-storage","link":"#knowledge-storage","children":[]},{"level":2,"title":"Indexing","slug":"indexing","link":"#indexing","children":[]},{"level":2,"title":"Cache","slug":"cache","link":"#cache","children":[]},{"level":2,"title":"Debug","slug":"debug","link":"#debug","children":[]}],"git":{"updatedTime":1696901555000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":4}]},"filePathRelative":"development/index.md"}');export{e as data}; diff --git a/assets/index.html-e38d5134.js b/assets/index.html-e38d5134.js new file mode 100644 index 0000000..6cc034d --- /dev/null +++ b/assets/index.html-e38d5134.js @@ -0,0 +1 @@ +const e=JSON.parse('{"key":"v-095d3fc2","path":"/docinpy/","title":"DocInPy - Documentation just in your Python code","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"EvoNote","slug":"evonote","link":"#evonote","children":[]},{"level":2,"title":"How to use","slug":"how-to-use","link":"#how-to-use","children":[{"level":3,"title":"Sections","slug":"sections","link":"#sections","children":[]},{"level":3,"title":"Section in folder","slug":"section-in-folder","link":"#section-in-folder","children":[]},{"level":3,"title":"Mark examples","slug":"mark-examples","link":"#mark-examples","children":[]},{"level":3,"title":"Mark todos","slug":"mark-todos","link":"#mark-todos","children":[]}]},{"level":2,"title":"Philosophy behind DocInPy","slug":"philosophy-behind-docinpy","link":"#philosophy-behind-docinpy","children":[{"level":3,"title":"Literate programming","slug":"literate-programming","link":"#literate-programming","children":[]},{"level":3,"title":"Sparse tree structure","slug":"sparse-tree-structure","link":"#sparse-tree-structure","children":[]}]}],"git":{"updatedTime":1696924050000,"contributors":[{"name":"Zijian Zhang","email":"doomspec@outlook.com","commits":3}]},"filePathRelative":"docinpy/index.md"}');export{e as data}; diff --git a/assets/style-f8de3c48.css b/assets/style-f8de3c48.css new file mode 100644 index 0000000..4c509a6 --- /dev/null +++ b/assets/style-f8de3c48.css @@ -0,0 +1 @@ +:root{--back-to-top-z-index: 5;--back-to-top-color: #3eaf7c;--back-to-top-color-hover: #71cda3}.back-to-top{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;height:1.2rem;background-color:var(--back-to-top-color);-webkit-mask:url(/assets/back-to-top-8efcbe56.svg) no-repeat;mask:url(/assets/back-to-top-8efcbe56.svg) no-repeat;z-index:var(--back-to-top-z-index)}.back-to-top:hover{background-color:var(--back-to-top-color-hover)}@media (max-width: 959px){.back-to-top{display:none}}@media print{.back-to-top{display:none}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--external-link-icon-color: #aaa}.external-link-icon{position:relative;display:inline-block;color:var(--external-link-icon-color);vertical-align:middle;top:-1px}@media print{.external-link-icon{display:none}}.external-link-icon-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}:root{--medium-zoom-z-index: 100;--medium-zoom-bg-color: #ffffff;--medium-zoom-opacity: 1}.medium-zoom-overlay{background-color:var(--medium-zoom-bg-color)!important;z-index:var(--medium-zoom-z-index)}.medium-zoom-overlay~img{z-index:calc(var(--medium-zoom-z-index) + 1)}.medium-zoom--opened .medium-zoom-overlay{opacity:var(--medium-zoom-opacity)}:root{--nprogress-color: #29d;--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}:root{--c-brand: #3eaf7c;--c-brand-light: #4abf8a;--c-bg: #ffffff;--c-bg-light: #f3f4f5;--c-bg-lighter: #eeeeee;--c-bg-dark: #ebebec;--c-bg-darker: #e6e6e6;--c-bg-navbar: var(--c-bg);--c-bg-sidebar: var(--c-bg);--c-bg-arrow: #cccccc;--c-text: #2c3e50;--c-text-accent: var(--c-brand);--c-text-light: #3a5169;--c-text-lighter: #4e6e8e;--c-text-lightest: #6a8bad;--c-text-quote: #999999;--c-border: #eaecef;--c-border-dark: #dfe2e5;--c-tip: #42b983;--c-tip-bg: var(--c-bg-light);--c-tip-title: var(--c-text);--c-tip-text: var(--c-text);--c-tip-text-accent: var(--c-text-accent);--c-warning: #ffc310;--c-warning-bg: #fffae3;--c-warning-bg-light: #fff3ba;--c-warning-bg-lighter: #fff0b0;--c-warning-border-dark: #f7dc91;--c-warning-details-bg: #fff5ca;--c-warning-title: #f1b300;--c-warning-text: #746000;--c-warning-text-accent: #edb100;--c-warning-text-light: #c1971c;--c-warning-text-quote: #ccab49;--c-danger: #f11e37;--c-danger-bg: #ffe0e0;--c-danger-bg-light: #ffcfde;--c-danger-bg-lighter: #ffc9c9;--c-danger-border-dark: #f1abab;--c-danger-details-bg: #ffd4d4;--c-danger-title: #ed1e2c;--c-danger-text: #660000;--c-danger-text-accent: #bd1a1a;--c-danger-text-light: #b5474d;--c-danger-text-quote: #c15b5b;--c-details-bg: #eeeeee;--c-badge-tip: var(--c-tip);--c-badge-warning: #ecc808;--c-badge-warning-text: var(--c-bg);--c-badge-danger: #dc2626;--c-badge-danger-text: var(--c-bg);--t-color: .3s ease;--t-transform: .3s ease;--code-bg-color: #282c34;--code-hl-bg-color: rgba(0, 0, 0, .66);--code-ln-color: #9e9e9e;--code-ln-wrapper-width: 3.5rem;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height: 3.6rem;--navbar-padding-v: .7rem;--navbar-padding-h: 1.5rem;--sidebar-width: 20rem;--sidebar-width-mobile: calc(var(--sidebar-width) * .82);--content-width: 740px;--homepage-width: 960px}html.dark{--c-brand: #3aa675;--c-brand-light: #349469;--c-bg: #22272e;--c-bg-light: #2b313a;--c-bg-lighter: #262c34;--c-bg-dark: #343b44;--c-bg-darker: #37404c;--c-text: #adbac7;--c-text-light: #96a7b7;--c-text-lighter: #8b9eb0;--c-text-lightest: #8094a8;--c-border: #3e4c5a;--c-border-dark: #34404c;--c-tip: #318a62;--c-warning: #e0ad15;--c-warning-bg: #2d2f2d;--c-warning-bg-light: #423e2a;--c-warning-bg-lighter: #44442f;--c-warning-border-dark: #957c35;--c-warning-details-bg: #39392d;--c-warning-title: #fdca31;--c-warning-text: #d8d96d;--c-warning-text-accent: #ffbf00;--c-warning-text-light: #ddb84b;--c-warning-text-quote: #ccab49;--c-danger: #fc1e38;--c-danger-bg: #39232c;--c-danger-bg-light: #4b2b35;--c-danger-bg-lighter: #553040;--c-danger-border-dark: #a25151;--c-danger-details-bg: #482936;--c-danger-title: #fc2d3b;--c-danger-text: #ea9ca0;--c-danger-text-accent: #fd3636;--c-danger-text-light: #d9777c;--c-danger-text-quote: #d56b6b;--c-details-bg: #323843;--c-badge-warning: var(--c-warning);--c-badge-warning-text: #3c2e05;--c-badge-danger: var(--c-danger);--c-badge-danger-text: #401416;--code-hl-bg-color: #363b46}html,body{padding:0;margin:0;background-color:var(--c-bg);transition:background-color var(--t-color)}html.dark{color-scheme:dark}html{font-size:16px}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:1rem;color:var(--c-text)}a{font-weight:500;color:var(--c-text-accent);text-decoration:none;overflow-wrap:break-word}p a code{font-weight:400;color:var(--c-text-accent)}kbd{font-family:var(--font-family-code);color:var(--c-text);background:var(--c-bg-lighter);border:solid .15rem var(--c-border-dark);border-bottom:solid .25rem var(--c-border-dark);border-radius:.15rem;padding:0 .15em}code{font-family:var(--font-family-code);color:var(--c-text-lighter);padding:.25rem .5rem;margin:0;font-size:.85em;background-color:var(--c-bg-light);border-radius:3px;overflow-wrap:break-word;transition:background-color var(--t-color)}blockquote{font-size:1rem;color:var(--c-text-quote);border-left:.2rem solid var(--c-border-dark);margin:1rem 0;padding:.25rem 0 .25rem 1rem;overflow-wrap:break-word}blockquote>p{margin:0}ul,ol{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25;overflow-wrap:break-word}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:none}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media print{a.header-anchor{display:none}}a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}@media print{a[href^="http://"]:after,a[href^="https://"]:after{content:" (" attr(href) ") "}}p,ul,ol{line-height:1.7;overflow-wrap:break-word}hr{border:0;border-top:1px solid var(--c-border)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto;transition:border-color var(--t-color)}tr{border-top:1px solid var(--c-border-dark);transition:border-color var(--t-color)}tr:nth-child(2n){background-color:var(--c-bg-light);transition:background-color var(--t-color)}tr:nth-child(2n) code{background-color:var(--c-bg-dark)}th,td{padding:.6em 1em;border:1px solid var(--c-border-dark);transition:border-color var(--t-color)}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:6px solid var(--c-bg-arrow)}.arrow.down{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid var(--c-bg-arrow)}.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--c-bg-arrow)}.arrow.left{border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:6px solid var(--c-bg-arrow)}.badge{display:inline-block;font-size:14px;font-weight:600;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:var(--c-bg);vertical-align:top;transition:color var(--t-color),background-color var(--t-color)}.badge.tip{background-color:var(--c-badge-tip)}.badge.warning{background-color:var(--c-badge-warning);color:var(--c-badge-warning-text)}.badge.danger{background-color:var(--c-badge-danger);color:var(--c-badge-danger-text)}.badge+.badge{margin-left:5px}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:var(--font-family-code);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.375;padding:1.3rem 1.5rem;margin:.85rem 0;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent!important;border-radius:0;overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-]:before{content:attr(data-ext);position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:var(--code-ln-color)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent!important;position:relative;z-index:1}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.375}div[class*=language-] .highlight-lines .highlight-line{background-color:var(--code-hl-bg-color)}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line:before{content:" ";position:absolute;z-index:2;left:0;top:0;display:block;width:var(--code-ln-wrapper-width);height:100%}div[class*=language-].line-numbers-mode pre{margin-left:var(--code-ln-wrapper-width);padding-left:1rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);text-align:center;color:var(--code-ln-color);padding-top:1.25rem;line-height:1.375;counter-reset:line-number}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;-webkit-user-select:none;-moz-user-select:none;user-select:none;height:1.375em}div[class*=language-].line-numbers-mode .line-numbers .line-number:before{counter-increment:line-number;content:counter(line-number);font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--code-hl-bg-color)}@media (max-width: 419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.code-group__nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-bottom:calc(1.7rem - 6px);padding-left:10px;padding-top:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--code-bg-color)}.code-group__ul{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.code-group__nav-tab{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:#ffffffe6;font-weight:600}.code-group__nav-tab:focus{outline:none}.code-group__nav-tab:focus-visible{outline:1px solid rgba(255,255,255,.9)}.code-group__nav-tab-active{border-bottom:var(--c-brand) 1px solid}@media (max-width: 419px){.code-group__nav{margin-left:-1.5rem;margin-right:-1.5rem;border-radius:0}}.code-group-item{display:none}.code-group-item__active{display:block}.code-group-item>pre{background-color:orange}.custom-container{transition:color var(--t-color),border-color var(--t-color),background-color var(--t-color)}.custom-container .custom-container-title{font-weight:600}.custom-container .custom-container-title:not(:only-child){margin-bottom:-.4rem}.custom-container.tip,.custom-container.warning,.custom-container.danger{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.tip code{background-color:var(--c-bg-dark)}.custom-container.warning{border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.warning blockquote{border-left-color:var(--c-warning-border-dark);color:var(--c-warning-text-quote)}.custom-container.warning code{color:var(--c-warning-text-light);background-color:var(--c-warning-bg-light)}.custom-container.warning details{background-color:var(--c-warning-details-bg)}.custom-container.warning details code{background-color:var(--c-warning-bg-lighter)}.custom-container.warning .external-link-icon{--external-link-icon-color: var(--c-warning-text-quote)}.custom-container.danger{border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.danger blockquote{border-left-color:var(--c-danger-border-dark);color:var(--c-danger-text-quote)}.custom-container.danger code{color:var(--c-danger-text-light);background-color:var(--c-danger-bg-light)}.custom-container.danger details{background-color:var(--c-danger-details-bg)}.custom-container.danger details code{background-color:var(--c-danger-bg-lighter)}.custom-container.danger .external-link-icon{--external-link-icon-color: var(--c-danger-text-quote)}.custom-container.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:var(--c-details-bg)}.custom-container.details code{background-color:var(--c-bg-darker)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:none;cursor:pointer}.home{padding:var(--navbar-height) 2rem 0;max-width:var(--homepage-width);margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.8rem auto}.home .hero .actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:var(--c-text-lightest)}.home .hero .action-button{display:inline-block;font-size:1.2rem;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;transition:background-color var(--t-color);box-sizing:border-box}.home .hero .action-button.primary{color:var(--c-bg);background-color:var(--c-brand);border-color:var(--c-brand)}.home .hero .action-button.primary:hover{background-color:var(--c-brand-light)}.home .hero .action-button.secondary{color:var(--c-brand);background-color:var(--c-bg);border-color:var(--c-brand)}.home .hero .action-button.secondary:hover{color:var(--c-bg);background-color:var(--c-brand-light)}.home .features{border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:var(--c-text-light)}.home .feature p{color:var(--c-text-lighter)}.home .theme-default-content{padding:0;margin:0}.home .footer{padding:2.5rem;border-top:1px solid var(--c-border);text-align:center;color:var(--c-text-lighter);transition:border-color var(--t-color)}@media (max-width: 719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width: 419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.page{padding-top:var(--navbar-height);padding-left:var(--sidebar-width)}.navbar{position:fixed;z-index:20;top:0;left:0;right:0;height:var(--navbar-height);box-sizing:border-box;border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar);transition:background-color var(--t-color),border-color var(--t-color)}.sidebar{font-size:16px;width:var(--sidebar-width);position:fixed;z-index:10;margin:0;top:var(--navbar-height);left:0;bottom:0;box-sizing:border-box;border-right:1px solid var(--c-border);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-brand) var(--c-border);background-color:var(--c-bg-sidebar);transition:transform var(--t-transform),background-color var(--t-color),border-color var(--t-color)}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate3d(5.5px,5.5px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(2){transform:scale3d(0,1,1)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate3d(6px,-6px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1),.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.theme-container.no-navbar .theme-default-content h1,.theme-container.no-navbar .theme-default-content h2,.theme-container.no-navbar .theme-default-content h3,.theme-container.no-navbar .theme-default-content h4,.theme-container.no-navbar .theme-default-content h5,.theme-container.no-navbar .theme-default-content h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .page{padding-top:0}.theme-container.no-navbar .sidebar{top:0}.theme-container.no-sidebar .sidebar{display:none}@media (max-width: 719px){.theme-container.no-sidebar .sidebar{display:block}}.theme-container.no-sidebar .page{padding-left:0}.theme-default-content a:hover{text-decoration:underline}.theme-default-content img{max-width:100%}.theme-default-content h1,.theme-default-content h2,.theme-default-content h3,.theme-default-content h4,.theme-default-content h5,.theme-default-content h6{margin-top:calc(.5rem - var(--navbar-height));padding-top:calc(1rem + var(--navbar-height));margin-bottom:0}.theme-default-content h1:first-child,.theme-default-content h2:first-child,.theme-default-content h3:first-child,.theme-default-content h4:first-child,.theme-default-content h5:first-child,.theme-default-content h6:first-child{margin-bottom:1rem}.theme-default-content h1:first-child+p,.theme-default-content h1:first-child+pre,.theme-default-content h1:first-child+.custom-container,.theme-default-content h2:first-child+p,.theme-default-content h2:first-child+pre,.theme-default-content h2:first-child+.custom-container,.theme-default-content h3:first-child+p,.theme-default-content h3:first-child+pre,.theme-default-content h3:first-child+.custom-container,.theme-default-content h4:first-child+p,.theme-default-content h4:first-child+pre,.theme-default-content h4:first-child+.custom-container,.theme-default-content h5:first-child+p,.theme-default-content h5:first-child+pre,.theme-default-content h5:first-child+.custom-container,.theme-default-content h6:first-child+p,.theme-default-content h6:first-child+pre,.theme-default-content h6:first-child+.custom-container{margin-top:2rem}@media (max-width: 959px){.sidebar{font-size:15px;width:var(--sidebar-width-mobile)}.page{padding-left:var(--sidebar-width-mobile)}}@media (max-width: 719px){.sidebar{top:0;padding-top:var(--navbar-height);transform:translate(-100%)}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translate(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width: 419px){h1{font-size:1.9rem}}.navbar{--navbar-line-height: calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );padding:var(--navbar-padding-v) var(--navbar-padding-h);line-height:var(--navbar-line-height)}.navbar .logo{height:var(--navbar-line-height);margin-right:var(--navbar-padding-v);vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--c-text);position:relative}.navbar .navbar-items-wrapper{display:flex;position:absolute;box-sizing:border-box;top:var(--navbar-padding-v);right:var(--navbar-padding-h);height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);white-space:nowrap;font-size:.9rem}.navbar .navbar-items-wrapper .search-box{flex:0 0 auto;vertical-align:top}@media screen and (max-width: 719px){.navbar{padding-left:4rem}.navbar .site-name{display:block;width:calc(100vw - 11rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.navbar .can-hide{display:none}}.navbar-items{display:inline-block}@media print{.navbar-items{display:none}}.navbar-items a{display:inline-block;line-height:1.4rem;color:inherit}.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text)}.navbar-items .navbar-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}.navbar-items .navbar-item:first-child{margin-left:0}.navbar-items .navbar-item>a:hover,.navbar-items .navbar-item>a.router-link-active{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}@media (max-width: 719px){.navbar-items .navbar-item{margin-left:0}.navbar-items .navbar-item>a:hover,.navbar-items .navbar-item>a.router-link-active{margin-bottom:0;border-bottom:none}.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text-accent)}}.toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}.toggle-sidebar-button .icon{display:flex;flex-direction:column;justify-content:center;align-items:center;width:1.25rem;height:1.25rem;cursor:inherit}.toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--c-text);transition:transform var(--t-transform)}.toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}@media screen and (max-width: 719px){.toggle-sidebar-button{display:block}}.toggle-color-mode-button{display:flex;margin:auto;margin-left:1rem;border:0;background:none;color:var(--c-text);opacity:.8;cursor:pointer}@media print{.toggle-color-mode-button{display:none}}.toggle-color-mode-button:hover{opacity:1}.toggle-color-mode-button .icon{width:1.25rem;height:1.25rem}.DocSearch{transition:background-color var(--t-color)}.navbar-dropdown-wrapper{cursor:pointer}.navbar-dropdown-wrapper .navbar-dropdown-title,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:var(--c-text)}.navbar-dropdown-wrapper .navbar-dropdown-title:hover,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{border-color:transparent}.navbar-dropdown-wrapper .navbar-dropdown-title .arrow,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:none;font-weight:600;font-size:inherit}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item{color:inherit;line-height:1.7rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{margin:.45rem 0 0;border-top:1px solid var(--c-border);padding:1rem 0 .45rem;font-size:.9rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a{font-weight:inherit}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a.router-link-active:after{display:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper{padding:0;list-style:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper .navbar-dropdown-subitem{font-size:.9em}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a:hover,.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid var(--c-text-accent);border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item:first-child .navbar-dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}.navbar-dropdown-wrapper.mobile.open .navbar-dropdown-title,.navbar-dropdown-wrapper.mobile.open .navbar-dropdown-title-mobile{margin-bottom:.5rem}.navbar-dropdown-wrapper.mobile .navbar-dropdown-title,.navbar-dropdown-wrapper.mobile .navbar-dropdown-title-mobile{display:none}.navbar-dropdown-wrapper.mobile .navbar-dropdown-title-mobile{display:block}.navbar-dropdown-wrapper.mobile .navbar-dropdown{transition:height .1s ease-out;overflow:hidden}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{border-top:0;margin-top:0;padding-top:0;padding-bottom:0}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle,.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item>a{font-size:15px;line-height:2rem}.navbar-dropdown-wrapper.mobile .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem{font-size:14px;padding-left:1rem}.navbar-dropdown-wrapper:not(.mobile){height:1.8rem}.navbar-dropdown-wrapper:not(.mobile):hover .navbar-dropdown,.navbar-dropdown-wrapper:not(.mobile).open .navbar-dropdown{display:block!important}.navbar-dropdown-wrapper:not(.mobile).open:blur{display:none}.navbar-dropdown-wrapper:not(.mobile) .navbar-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--c-bg-navbar);padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}.page{padding-bottom:2rem;display:block}.page .theme-default-content{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width: 959px){.page .theme-default-content{padding:2rem}}@media (max-width: 419px){.page .theme-default-content{padding:1.5rem}}.page-meta{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem;overflow:auto}@media (max-width: 959px){.page-meta{padding:2rem}}@media (max-width: 419px){.page-meta{padding:1.5rem}}.page-meta .meta-item{cursor:default;margin-top:.8rem}.page-meta .meta-item .meta-item-label{font-weight:500;color:var(--c-text-lighter)}.page-meta .meta-item .meta-item-info{font-weight:400;color:var(--c-text-quote)}.page-meta .edit-link{display:inline-block;margin-right:.25rem}@media print{.page-meta .edit-link{display:none}}.page-meta .last-updated{float:right}@media (max-width: 719px){.page-meta .last-updated{font-size:.8em;float:none}.page-meta .contributors{font-size:.8em}}.page-nav{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem 2rem;padding-bottom:0}@media (max-width: 959px){.page-nav{padding:2rem}}@media (max-width: 419px){.page-nav{padding:1.5rem}}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding-top:1rem;overflow:auto}.page-nav .prev a:before{content:"←"}.page-nav .next{float:right}.page-nav .next a:after{content:"→"}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .navbar-items{display:none;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color);padding:.5rem 0 .75rem}.sidebar .navbar-items a{font-weight:600}.sidebar .navbar-items .navbar-item{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar .sidebar-items{padding:1.5rem 0}@media (max-width: 719px){.sidebar .navbar-items{display:block}.sidebar .navbar-items .navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar .sidebar-items{padding:1rem 0}}.sidebar-item{cursor:default;border-left:.25rem solid transparent;color:var(--c-text)}.sidebar-item:focus-visible{outline-width:1px;outline-offset:-1px}.sidebar-item.active:not(p.sidebar-heading){font-weight:600;color:var(--c-text-accent);border-left-color:var(--c-text-accent)}.sidebar-item.sidebar-heading{transition:color .15s ease;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0}.sidebar-item.sidebar-heading+.sidebar-item-children{transition:height .1s ease-out;overflow:hidden;margin-bottom:.75rem}.sidebar-item.collapsible{cursor:pointer}.sidebar-item.collapsible .arrow{position:relative;top:-.12em;left:.5em}.sidebar-item:not(.sidebar-heading){font-size:1em;font-weight:400;display:inline-block;margin:0;padding:.35rem 1rem .35rem 2rem;line-height:1.4;width:100%;box-sizing:border-box}.sidebar-item:not(.sidebar-heading)+.sidebar-item-children{padding-left:1rem;font-size:.95em}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading).active{font-weight:500;border-left-color:transparent}a.sidebar-heading+.sidebar-item-children .sidebar-item:not(.sidebar-heading).active{border-left-color:transparent}a.sidebar-item{cursor:pointer}a.sidebar-item:hover{color:var(--c-text-accent)}.table-of-contents .badge{vertical-align:middle}.dropdown-enter-from,.dropdown-leave-to{height:0!important}.fade-slide-y-enter-active{transition:all .2s ease}.fade-slide-y-leave-active{transition:all .2s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{transform:translateY(10px);opacity:0}:root{--c-brand: #2570b4;--c-brand-light: #2e75b6;--c-bg: #ffffff;--c-bg-light: #f3f4f5;--c-bg-lighter: #eeeeee;--c-bg-dark: #ebebec;--c-bg-darker: #e6e6e6;--c-bg-navbar: var(--c-bg);--c-bg-sidebar: var(--c-bg);--c-bg-arrow: #cccccc;--c-text: #2c3e50;--c-text-accent: var(--c-brand);--c-text-light: #3a5169;--c-text-lighter: #4e6e8e;--c-text-lightest: #6a8bad;--c-text-quote: #999999;--c-border: #eaecef;--c-border-dark: #dfe2e5;--c-tip: #5d98e1;--c-tip-bg: var(--c-bg-light);--c-tip-title: var(--c-text);--c-tip-text: var(--c-text);--c-tip-text-accent: var(--c-text-accent);--c-warning: #ffc310;--c-warning-bg: #fffae3;--c-warning-bg-light: #fff3ba;--c-warning-bg-lighter: #fff0b0;--c-warning-border-dark: #f7dc91;--c-warning-details-bg: #fff5ca;--c-warning-title: #f1b300;--c-warning-text: #746000;--c-warning-text-accent: #edb100;--c-warning-text-light: #c1971c;--c-warning-text-quote: #ccab49;--c-danger: #f11e37;--c-danger-bg: #ffe0e0;--c-danger-bg-light: #ffcfde;--c-danger-bg-lighter: #ffc9c9;--c-danger-border-dark: #f1abab;--c-danger-details-bg: #ffd4d4;--c-danger-title: #ed1e2c;--c-danger-text: #660000;--c-danger-text-accent: #bd1a1a;--c-danger-text-light: #b5474d;--c-danger-text-quote: #c15b5b;--c-details-bg: #eeeeee;--c-badge-tip: var(--c-tip);--c-badge-warning: #ecc808;--c-badge-warning-text: var(--c-bg);--c-badge-danger: #dc2626;--c-badge-danger-text: var(--c-bg);--t-color: .3s ease;--t-transform: .3s ease;--code-bg-color: #282c34;--code-hl-bg-color: rgba(0, 0, 0, .66);--code-ln-color: #9e9e9e;--code-ln-wrapper-width: 3.5rem;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height: 3.6rem;--navbar-padding-v: .7rem;--navbar-padding-h: 1.5rem;--sidebar-width: 20rem;--sidebar-width-mobile: calc(var(--sidebar-width) * .82);--content-width: 740px;--homepage-width: 960px}.back-to-top{--back-to-top-color: var(--c-brand);--back-to-top-color-hover: var(--c-brand-light)}.DocSearch{--docsearch-primary-color: var(--c-brand);--docsearch-text-color: var(--c-text);--docsearch-highlight-color: var(--c-brand);--docsearch-muted-color: var(--c-text-quote);--docsearch-container-background: rgba(9, 10, 17, .8);--docsearch-modal-background: var(--c-bg-light);--docsearch-searchbox-background: var(--c-bg-lighter);--docsearch-searchbox-focus-background: var(--c-bg);--docsearch-searchbox-shadow: inset 0 0 0 2px var(--c-brand);--docsearch-hit-color: var(--c-text-light);--docsearch-hit-active-color: var(--c-bg);--docsearch-hit-background: var(--c-bg);--docsearch-hit-shadow: 0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background: var(--c-bg)}.external-link-icon{--external-link-icon-color: var(--c-text-quote)}.medium-zoom-overlay{--medium-zoom-bg-color: var(--c-bg)}#nprogress{--nprogress-color: var(--c-brand)}.pwa-popup{--pwa-popup-text-color: var(--c-text);--pwa-popup-bg-color: var(--c-bg);--pwa-popup-border-color: var(--c-brand);--pwa-popup-shadow: 0 4px 16px var(--c-brand);--pwa-popup-btn-text-color: var(--c-bg);--pwa-popup-btn-bg-color: var(--c-brand);--pwa-popup-btn-hover-bg-color: var(--c-brand-light)}.search-box{--search-bg-color: var(--c-bg);--search-accent-color: var(--c-brand);--search-text-color: var(--c-text);--search-border-color: var(--c-border);--search-item-text-color: var(--c-text-lighter);--search-item-focus-bg-color: var(--c-bg-light)}html.dark{--c-brand: #73a9d9;--c-brand-light: #a8c4e0;--c-bg: #22272e;--c-bg-light: #2b313a;--c-bg-lighter: #262c34;--c-bg-dark: #343b44;--c-bg-darker: #37404c;--c-text: #adbac7;--c-text-light: #96a7b7;--c-text-lighter: #8b9eb0;--c-text-lightest: #8094a8;--c-border: #3e4c5a;--c-border-dark: #34404c;--c-tip: #5d83a8;--c-warning: #e0ad15;--c-warning-bg: #2d2f2d;--c-warning-bg-light: #423e2a;--c-warning-bg-lighter: #44442f;--c-warning-border-dark: #957c35;--c-warning-details-bg: #39392d;--c-warning-title: #fdca31;--c-warning-text: #d8d96d;--c-warning-text-accent: #ffbf00;--c-warning-text-light: #ddb84b;--c-warning-text-quote: #ccab49;--c-danger: #fc1e38;--c-danger-bg: #39232c;--c-danger-bg-light: #4b2b35;--c-danger-bg-lighter: #553040;--c-danger-border-dark: #a25151;--c-danger-details-bg: #482936;--c-danger-title: #fc2d3b;--c-danger-text: #ea9ca0;--c-danger-text-accent: #fd3636;--c-danger-text-light: #d9777c;--c-danger-text-quote: #d56b6b;--c-details-bg: #323843;--c-badge-warning: var(--c-warning);--c-badge-warning-text: #3c2e05;--c-badge-danger: var(--c-danger);--c-badge-danger-text: #401416;--code-hl-bg-color: #363b46}html.dark .DocSearch{--docsearch-logo-color: var(--c-text);--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, .3);--docsearch-key-gradient: linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow: inset 0 1px 0 0 rgba(73, 76, 106, .5), 0 -4px 8px 0 rgba(0, 0, 0, .2)} diff --git a/development/index.html b/development/index.html new file mode 100644 index 0000000..cc76e7e --- /dev/null +++ b/development/index.html @@ -0,0 +1,38 @@ + + + + + + + + + Overall + + + + +

Overall

IDE recommendation: PyCharm

Docstring style: rst

DocInPy

Please use the DocInPyopen in new window style for adding sections in the codes.

Installation

git clone git@github.com:EvoEvolver/EvoNote.git
+pip install -e .
+

Classes

Knowledge storage

Note: The node of knowledge. It only contains the knowledge itself.

Tree: The collection of the references to Note objects. It contains the relationship among knowledge. It includes parents, children and path in the tree structure. It also contains the indexings of the notes.

Indexing

Indexing: The class for storing the data of one indexing. It can return related notes when provided with queries. It must be interpreted by the Indexer class.

Indexer: The factory of Indexing objects. Indexers are stateless and their state are stored in the Indexing object. A Indexer should never be instantiated and all its methods should be static.

Cache

CacheManager: The class for managing the cache of expensive tasks.

cache_manager: The instance of CacheManager for the whole program. You should import it whenever you want to read and write the caches.

cache_manager.read_cache(self, input: any, type: str) -> Cache: input should be a hashable. Cache storage and retrieval is realized by matching both input and type. See https://github.com/EvoEvolver/EvoNote/blob/main/evonote/search/fine_searcher.py for an example of usage.

When you want to discard a certain type of cache. You can use with cache_manager.refresh_cache(cache_type: str): to wrap the code that generates the cache. This will disable the cache of the type cache_type.

Debug

In the debug file, many useful function for revealing the intermediate results are provided. You can use them to debug the program. For example:

from evonote.debug import display_chats
+with display_chats():
+    some_code()
+

All the calling of chat completion will be displayed.

See https://github.com/EvoEvolver/EvoNote/blob/main/playground/debug.py for examples of usage.

Important functionalities

search: The folder includes the codes for searching in the knowledge base.

builder: The folder includes the codes for building the knowledge base.

Last Updated:
Contributors: Zijian Zhang
+ + + diff --git a/docinpy/index.html b/docinpy/index.html new file mode 100644 index 0000000..81c3f97 --- /dev/null +++ b/docinpy/index.html @@ -0,0 +1,116 @@ + + + + + + + + + DocInPy - Documentation just in your Python code + + + + +

DocInPy - Documentation just in your Python code

DocInPy is a standard for putting documentation just in your Python code. It is proposed to provide another option other than the current standard of putting documentation in a separate file. Though it is not new to mix documentation with code, in DocInPy, you can also do

  • Adding sections to your functions and classes
  • Adding examples to your functions and classes

We believe in this way we can provide much more context information to new contributors who are not familiar with the codebase. It is also important for AI-based agents to understand the codebase and develop it.

EvoNote

EvoNote is using DocInPy to document its codebase. You can have a good visualization of EvoNote's codebase by running EvoNote visualizationopen in new window.

How to use

Sections

Putting sections in DocInPy is as easy as putting sections in Markdown. You just need to put a # before your section title in a comment environment starting with """. For example,

"""
+# Section 1
+The following is a function.
+"""
+
+
+def foo():
+    pass
+
+
+"""
+# Section 2
+The following is another function.
+"""
+
+
+def bar():
+    pass
+

In this way, foo() and bar() will have sections Section 1 and Section 2 respectively. The sections will also contain the comments under them.

Your section can also contain classes add levels. For example,

"""
+# Top Section
+## Section 1
+"""
+
+
+class Foo:
+    """
+    # Section 1
+    The following is a function.
+    """
+
+    def foo(self):
+        pass
+
+    """
+    # Section 2
+    The following is another function.
+    """
+
+    def bar(self):
+        pass
+
+
+"""
+## Section 2
+"""
+
+
+def baz():
+    pass
+

Section in folder

You add .tree.yml file in a folder to add sections in it. For example, in the following folder

a_folder
+- __init__.py
+- a.py
+- b.py
+- c.py
+- .tree.yml
+

You can put a,b in a section by putting

sections:
+ your section title:
+   - a
+   - b
+default section: you default section title
+

Then a and b will be in the section your section title and c will be in the section you default section title.

Mark examples

You can also add examples to your functions and classes. Just use the @example decorator. For example,

from docinpy.decorator import example
+
+
+@example
+def how_to_use_foo():
+    """
+    # Example
+    The following is an example of using `foo()`.
+    """
+    foo()
+

Mark todos

In a similar way, you can also mark todos in your code. Just use the @todo decorator. For example,

from docinpy.decorator import todo
+
+@todo
+def todo_foo():
+    """
+    # Todo
+    The following is a todo.
+    """
+    foo()
+
+@todo("This function is buggy. Fix it.")
+def buggy_foo():
+    foo(a=b)
+

Philosophy behind DocInPy

Literate programming

DocInPy can be regarded as an effort toward the idea - literate programmingopen in new window. We think literate programming gets even more important in the era of AI for it provides more context information for AI-based agents to understand the codebase.

Sparse tree structure

All the programming languages encourage the programmers to put their code in the tree structure. For example, you can put your functions in difference classes, in different files and put the files in different folders. However, it is still very common to put a lot of functions in a single file, in which the codes are arranged in an almost flat structure.

DocInPy helps this by adding a zero-cost way to add sections to your functions and classes. It makes another step towards a more tree-like structure of the codebase. We believe this will help the programmers to understand the codebase better. See Method of Loci for more details.

Last Updated:
Contributors: Zijian Zhang
+ + + diff --git a/html/project_tree.html b/html/project_tree.html new file mode 100644 index 0000000..1e3177c --- /dev/null +++ b/html/project_tree.html @@ -0,0 +1,43 @@ + + + + + + + + +
+ \ No newline at end of file diff --git a/image/favicon.ico b/image/favicon.ico new file mode 100644 index 0000000..9ceb642 Binary files /dev/null and b/image/favicon.ico differ diff --git a/image/logo.png b/image/logo.png new file mode 100644 index 0000000..9c561b2 Binary files /dev/null and b/image/logo.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..56d8952 --- /dev/null +++ b/index.html @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + diff --git a/writings/0. TL_DR.html b/writings/0. TL_DR.html new file mode 100644 index 0000000..63f82f5 --- /dev/null +++ b/writings/0. TL_DR.html @@ -0,0 +1,33 @@ + + + + + + + + + TL;DR + + + + +

TL;DR

  • Indexing and understanding have many similarities. They both require adding context to the objective.
  • Therefore, we want to implement better understand by AI with super-fine indexing with a rich structure which allows the AI find the context easily and precisely.
  • Our plan is from two sides. One for the structure of the knowledge (indexing), one for the retrieval of the knowledge (searching).

Indexing

  • We want to use the tree structure to index the knowledge, because the path from the root to the interested node forms a natural context.
  • We want to use LLM (or agent) to generate characterizing strings as the vector indexing of the knowledge, instead of using their embedding directly.
  • We want to construct multiple trees in difference levels, with each level corresponding to a different level of abstraction.

Searching

  • We want to use the tree structure to search the knowledge. An agent travelling on the tree will be developed.
  • We want to use LLM (or agent) to generate characterizing strings for the queries, instead of using their embedding directly.
  • We want to use multiple levels of trees to search the knowledge. The agent should go from the most abstract level to the most concrete level.
Last Updated:
Contributors: Zijian Zhang
+ + + diff --git a/writings/1. Indexing is non-trivial.html b/writings/1. Indexing is non-trivial.html new file mode 100644 index 0000000..452b859 --- /dev/null +++ b/writings/1. Indexing is non-trivial.html @@ -0,0 +1,37 @@ + + + + + + + + + Indexing is understanding + + + + +

Indexing is understanding

What does it mean by understanding? Usually, it is use as the opposite of just memorizing. When you memorize something, you just remember it. But when you understand something, there are a few more magic happening:

  • You know which part of the knowledge is relevant to the context.

This is quite difficult because the context usually doesn't match the knowledge exactly. For example, if the doctor says: "don't drink any water". You may think that you can drink juice, but you can't drink juice either. You can't drink anything.

  • You know how different parts of the knowledge are related.

This is even more difficult. The reason is two-fold:

  • Nearly every knowledge can be related in some way. For example, PNAS sounds like peanuts. Gravity and computer are related to apple by Newton and Turing. All these relations are true, but they are merely dry humor and not useful.
  • Important relations are usually not obvious. For example, the observation of the movement of celestial bodies proves the existence of gravity. But no one notices this relation until Newton.

Ancient approaches

The most important example of the use of indexing is search engine. Search engines collect the keywords in the documents and index them. When you search for a keyword, the search engine will return the documents that contain the keyword. This is the most basic form of indexing.

Search engines provide an efficient way to find a webpage with some keywords. However, you cannot imagine you discover the gravity by searching "apple" in Google. This is because the search engine doesn't understand the relation between the keywords. It only knows that the keywords appear in the same document. This approach is already very powerful, but we obviously want more.

A way to analyze the relation and the context of the keywords is to use a knowledge graph. A knowledge graph is a graph that contains the objects and the relations between them. For example, juice and water can be two nodes linked by an edge has ingrediant. In this way, it might help understanding whether you can drink juice when the doctor says "don't drink any water".

However, obviously, none of these ancient approaches has a chance to draw a relation between celestial bodies and gravity. Ever after decades of development, they still struggle with understanding everything that is a little bit abstract. Certainly we need something new.

In the large language model (LLM) era

I will not introduce the history of the reason why LLMs work. But I believe every one of you who are reading this article must have some feeling that LLM can understand abstract mathematical concepts. If you ask ChatGPT:

When I dress myself, I can put on my shirt and then my pants. 
+I can also put on my pants and then my shirt. It won't make a difference.
+
+What mathematical concept is this?
+

ChatGPT will recognize that the order of the two actions doesn't matter, so it is related to commutativity. The answer won't change a lot if you modify the situation as long as it represents the concept of commutativity. It's quite hard to imagine how a search engine or a knowledge graph can do this. The word "commutativity" doesn't even appear in the question.

However, this good performance of LLM is at a cost. The most important limitation is that LLM the size of its input is limited, and it is completely not at the same scale as the knowledge graph and traditional search engines. You have to decide what is the most important context that the LLM have to know before you ask the question. This, again, requires some understanding of the knowledge. LLM helps you the best when you already have some understanding of the knowledge.

Embedding-based indexing

Good news is that LLM not only helps us by directly giving the answer. It also helps us index existing knowledge. Notice that LLM are built with deep learning technology, in which neural networks are used to process the knowledge. In the intermediate layers of the neural network, the knowledge is represented as vectors called embeddings.

These embeddings carry all the information about the input and have already been processed by the neural network for abstract understanding. Therefore, if two inputs to the LLM have similar embeddings, they are likely to be related, even in an abstract way. This is the key idea of embedding-based indexing.

Giving a few pieces of knowledge, we can use LLM to generate their embeddings as their index. Whenever a context is given, we generate the embedding of the context and find the similar embeddings in the knowledge base. This will have the model to gain essential knowledge before answering a question. Importantly, this embedding similarity-based indexing is totally scalable, meaning that you have the chance to index the knowledge of astronomy and gravity together!

Wrap up

Though there might be still a lot of steps before we let the model rediscover gravity, we have already seen the potential of LLM in indexing. Importantly, we find a good roadmap to solve the two problems we put in the beginning. For the first, by embedding similarity, we have the tool for finding the relevant knowledge to the context and retrieve them. "Don't drink water" will have a high similarity with "don't drink juice". For the second, with the abstract understanding ability of LLM, we can extract relation of two pieces of knowledge. It can discover that "don't drink water" actually means "don't drink any liquid".

With embedding-based search in hand, it seems what left for us to build is simply improve its performance. However, you will find it as a surprisingly tricky task which involves much philosophical effort. Let's discuss it in another article.

Related works

History of retrievalopen in new window

LlamaIndexopen in new window

ACL 2023 Tutorial on Retrieval-based Language Modelsopen in new window

Last Updated:
Contributors: Zijian Zhang
+ + + diff --git a/writings/2. Tree indexing.html b/writings/2. Tree indexing.html new file mode 100644 index 0000000..4f1f129 --- /dev/null +++ b/writings/2. Tree indexing.html @@ -0,0 +1,33 @@ + + + + + + + + + Tree indexing + + + + +

Tree indexing

Tree might be the most common traditional indexing that are adopted by human-being before the advent of computers. People have practiced organizing books in nested section for thousands of year. It has two advantages:

  • Tree structure help the reader locate the knowledge, when the reader has already understood parts of the knowledge.
  • Tree structure help the readers to understand the relation between different knowledge. Similar knowledge are usually put in the same section or subsection.

This is the most obvious reason and this is why we call it indexing. However, there are more subtle reasons:

  • Tree structure help the readers to understand the context of the knowledge.

These reasons are important when the reader is not familiar with the knowledge. It makes it possible to understand the knowledge better without reading the whole book. It works by the following mechanism:

  • The path from the root section to the current section forms a natural context for the knowledge.
  • The readers can choose which section to move to if they find the current section is too trivial, too difficult or too irrelevant to what they want. The tree structure offers a natural path to move.

What does it mean to LLM?

The reason why we underscore the importance of tree indexing is obviously not because we want to make a better book. Our question is whether LLM can benefit from tree indexing. The answer is obviously yes. The reason is from the following points:

  • We only want LLM to read a book when it does not understand it well. Therefore, it is more similar to the case when the reader is not familiar with the knowledge. This means they need more hint of the context. The path can be a good hint.
  • When we want carry out embedding search on the knowledge, it is always more reasonable to include the context. The path can be a good context to make the embedding better.

Further, if we make the LLM into an agent who can actively travel on the book and add new content to the book.

  • The tree structure helps the agent explore related knowledge along the tree and filter out the useful ones. This improves the search result especially when the query is abstract and implicitly related to the knowledge.
  • The existing tree structure offers a good reference to create new ones to keep the book organized and easy to read even when the book is very large.

What is the difference between tree indexing for human and for LLM?

Usually, in human made books, the tree structure is quite coarse. One of the reasons might be this: explicit fine-grained tree structure is hard to make and read. Though human writers might make a lot of list and aside to make the tree structure actually more fine-grained, it is laborious to give a name to every small section. The human readers are also not willing to read a book with too many small sections.

However, the situation does not hold for LLM. This is because

  • The cost of LLM to write or read is much lower than human. It is not a problem to write a lot of small sections or read them.
  • Because LLM does not come with a long-term memory system, it is more important to make the context explicit. The books for human does not assume the readers read each section directly. They can use their long-term memory to make the context. However, LLM does not have such ability.

Wrap up

With the discussion above, we know that

  • Tree indexing is a time-tested way to organize knowledge.
  • Tree indexing is important for LLM to understand the knowledge better.
  • Tree indexing for LLM can be more fine-grained than that for human.

As we discussed in the first article, indexing is closed related to understanding. Surely, we can see that tree indexing can help organizing and retrieve knowledge. However, could it really help LLM to understand abstract things like science?

Last Updated:
Contributors: Zijian Zhang
+ + + diff --git a/writings/2.1 Method of Loci and sparsity.html b/writings/2.1 Method of Loci and sparsity.html new file mode 100644 index 0000000..6d25b12 --- /dev/null +++ b/writings/2.1 Method of Loci and sparsity.html @@ -0,0 +1,33 @@ + + + + + + + + + Method of Loci + + + + +

Method of Loci

Method of Loci, also known as memory palace, is a method to memorize things by associating them with a place. It is a very old method and has been used for thousands of years. It is also a very effective method.

When you try to memorize a list of things, you can just imagine a place you are familiar with and put the things in the place. When you want to recall the things, you can just imagine the place and the things will come to your mind.

Why is the method good?

Why this method is efficient? Here is the claim:

Claim

Method of Loci is efficient because it creates a graph of knowledge with each node has only limited number of edges. That is, it is a sparse graph.

Here, in the graph of knowledge, the nodes are the context (situation) and the edges leads to the memory or another situation. The whole point of method of loci is to turn a list of things, which is densely indexed, into a sparsely connected structure.

Why sparse graph is good?

Here is the claim:

Claim

Sparse graph performs better because it fits in context window of human brain better.

Thinking with a sparse graph limits the number of things you need to think about at one time. In this meantime, because the knowledge are still interconnected, you can still think about the whole knowledge.

What does it mean to LLM?

LLM also has a limited number of token in the context window. Current technology still struggles to make the context window large. When it seems to be large, the performance is usually not good. (See Lost in the Middle: How Language Models Use Long Contextsopen in new window)

Maybe it can be improved in the future, but I strongly don't believe that will happen very fast. We can use the sparsity of the graph to decrease the number of things LLM needs to think about at one time and enhance the performance.

How about EvoNote?

EvoNote uses the tree structure to index the knowledge. It has a natural advantage to make the connection at each node (note) sparse. Compared to the approaches that use a flat list (e.g., chunks) or a dense graph (e.g., knowledge graph) to index the knowledge, it is more efficient.

How about DocInPy

DocInPy provides a way to add sections to your Python codes to separate the functions and classes for arranging them into a tree structure. It makes it possible to make the tree sparse.

There are a lot of Python projects put a tons of functions in one file. This have put a barrier for both human and LLM to understand the code for a long time. DocInPy can help to solve this problem.

Last Updated:
Contributors: Zijian Zhang
+ + + diff --git a/writings/3. Copernicus and indexing.html b/writings/3. Copernicus and indexing.html new file mode 100644 index 0000000..33f51ef --- /dev/null +++ b/writings/3. Copernicus and indexing.html @@ -0,0 +1,33 @@ + + + + + + + + + What are different understandings? + + + + +

What are different understandings?

In the previous article, we found that indexing is deeply related to understanding. However, can we somehow give a definition of understanding? We mentioned in the first article that memorization is different from understanding. So the explicit knowledge must not be the understanding and understanding must be something other than the knowledge itself. Naturally, because the "other" thing must be related to the stand-alone knowledge, we can call it the implicit context of the knowledge. With this definition, I claim that

Claim

To understand a thing, you must know that implicit context of it.

and consequently,

Claim

The way to understand a thing, is the way to assign the implicit context to it.

Let's illustrate this with a few examples.

Example

Modern educated human think they understand earthquake and treat it as a result of the movement of tectonic plates. They think they understand because they can fit the phenomenon of earthquake into his existing knowledge of geology and use it as a context.

Example

Ancient Japanese people think they understand earthquake and treat it as a result of the movement of a giant catfish supporting the Japanese islands. They think they understand because they can fit the phenomenon of earthquake into his existing knowledge of mythology and use it as a context.

In this example, we show that different people have different understanding of the same thing. They assign different implicit context to one thing and both strongly believes so.

Here, I want to emphasize that, we do not care about which context they assign is correct or not. We only care about the fact that they assign different context. Importantly, the context they assign might be both correct, but the context they assign is different.

Example

A person who believes geocentric model thinks he understands the movement planets because they can perfectly fit into his existing knowledge of astronomy and use it as a context, though in the context planets move in a very complicated way.

Example

A person who believes heliocentric model thinks he understands the movement planets because they can perfectly fit into his existing knowledge of astronomy and use it as a context. The context is different from the previous one and the planets move in a very simple way.

Tree indexing as an understanding

As we introduced in the previous article, tree indexing can help assign a context to the knowledge. With a tree indexing, we can find existing knowledge that is similar to the incoming ones. With the help of the paths of the existing knowledge, a new path, namely a new context, can be created. This is the way tree indexing helps LLM to understand the knowledge. Specifically, the understanding can be carried out in the following way

Procedure

  • Search similar knowledge in the knowledge base.
  • Gather the paths of the similar knowledge.
  • Synthesize new paths for the incoming knowledge.
  • Use the new paths as the context of the incoming knowledge for rephrasing them.
  • Put the rephrased knowledge into the knowledge base.

Tree transformation as a transformation of understanding

The generation of implicit context in tree indexing relies on the logic of paths. Therefore, we can say the logic of path generation can be used to characterize understandings. People can change the path logic to achieve a new understanding. For example: TODO.

Understanding inside LLM

LLM can understand sentences. Where is the implicit context? My interpretation is that the layers of the LLM is responsible for adding these implicit contexts, including the grammar, meaning of tokens and world knowledge. After being processed by layers, the hidden state, which is the embedding of the sentence, contains the implicit context. Therefore, we can say that even the simplest embedding based search provides a way to understand the knowledge, even when no tree structure is involved.

Related works

A Contextual Approach to Scientific Understandingopen in new window

Memory is a modeling systemopen in new window

Last Updated:
Contributors: Zijian Zhang
+ + + diff --git a/writings/4. Continuous and discrete knowledge.html b/writings/4. Continuous and discrete knowledge.html new file mode 100644 index 0000000..27dc42b --- /dev/null +++ b/writings/4. Continuous and discrete knowledge.html @@ -0,0 +1,33 @@ + + + + + + + + + Continuous and discrete knowledge + + + + +

Continuous and discrete knowledge

Surely, there are many criteria to classify knowledge. The important thing is how much insight we can get from the classification. In this article, I will introduce how to use the idea of continuous and discrete to classify knowledge.

Discrete knowledge

What is discrete knowledge?

Definition

Discrete knowledge is the ones whose state is defined in a discrete space. Variation on it cannot be infinitesimal.

For example, a coin has two states: head and tail. The state of a coin is discrete knowledge.

More importantly, logic deductions are operating discrete knowledge. All the system with a flavour of logic and have a clear border of what is true and what is wrong, e.g., knowledge graph and symbolic deductions, are mainly operating discrete knowledge.

What is the property of discrete knowledge?

Discrete knowledge is clear and easy to operate with computers. They can ensure 100% correctness given correct assumptions. For fields that have a concrete assumption, e.g., mathematics, discrete knowledge and its deduction will suffice.

Failure of discrete knowledge

However, not all fields have concrete assumptions. In the long debate of rationalism and empiricism, people found that it is absolutely not easy to find reliable and non-trivial assumption to reason from (See Kant and Hume). My claim to the failure is that the world is too complex to be described by a few pieces of discrete knowledge. Even there are a set of such discrete knowledge, they are not affordable to the human brain. For example, I admit that the world might be discrete if you look at it in a very small scale. However, the number of discrete states is too large for human to make any useful deduction except for cosmology or particle physics. Most of the useful knowledge does not change its essence when you vary it a little bit.

Continuous knowledge

What is continuous knowledge?

Definition

Continuous knowledge is the ones whose state is defined in a continuous space. It allows an infinitesimal variation.

For example, the probability that a coin will be head is continuous knowledge. The probability is a real number between 0 and 1.

More importantly, neural networks hold continuous knowledge. The state of a neural network is defined by the weights of the connections between neurons. The weights are real numbers, which is a continuous space.

How to tell whether the knowledge is continuous?

It might be tricky to check whether a piece of knowledge is continuous or not. The key is to imagine whether the knowledge can have a very small variation and still remain mostly true. For example, when you try to recall a voice of someone, you can never ensure that your memory today is the same as your memory yesterday. It also works for smell, visual or kinetic memory.

Most importantly, though also containing discrete knowledge like grammar, a large part of our knowledge about words is also continuous. Your feeling about a certain word is continuous. The most obvious example is brands. You must have a certain feeling about Coca-cola, Pepsi, Tesla and BMW; and they don't have a clear border of correctness, nor you can check your feeling is stable.

What is the property of continuous knowledge?

The representation power of continuous knowledge is much stronger than discrete knowledge. It is very hard to imagine how to represent the feeling of ski or recalling a picture with a discrete format.

Continuous knowledge is more natural for human to process. Most of the physics theory also assume that the space is continuous or its discreteness is negligible for human. The power of continuous knowledge can also be proved by the success of neural network. There was a shift of the paradigm of artificial intelligence in the 1990s from discrete to continuous and then follows the triumph of neural networks in nearly all the field.

Natural language carries continuous knowledge

Admittedly, symbols in a language is discrete. However, they are meaningless without an interpreter. The development of natural language processing has witnessed that all the discrete approaches to understand natural language failed. The history has seen that parsing sentences in to syntax tree is hard and not as useful as using neural networks to directly process the natural language.

Syntax tree can never represent the accurate meaning. For example, I can set a question: "If apple means eat in the next sentence. 'Mike apple an apple.' What did Mike intake?" This question is easy for human to answer but will break any natural language parser.

Failure of continuous knowledge

However, the intrinsic drawbacks of continuous knowledge are still there. Even in 2023, we still cannot handle math, logic and coding satisfactorily with neural networks. This is surely because of the discrete nature of these tasks. How to bridge continuous knowledge with discrete knowledge will be the main challenge of building AI.

Insight

EvoNote is trying to add more discrete structure to the continuous knowledge.

EvoNote uses tree structure to organize the natural languages in a macro scale (Recall the section: Tree indexing). This can assign the continuous knowledge a discrete structure (tree), which we believe can help building a continuous-discrete hybrid knowledge to help making AI capable at discrete tasks.

Last Updated:
Contributors: Zijian Zhang
+ + + diff --git a/writings/4.1 Interface of continuous and discrete.html b/writings/4.1 Interface of continuous and discrete.html new file mode 100644 index 0000000..43e791a --- /dev/null +++ b/writings/4.1 Interface of continuous and discrete.html @@ -0,0 +1,33 @@ + + + + + + + + + Interface of continuous and discrete + + + + +

Interface of continuous and discrete

Heap attack

Paradox of the heap

Story

If you remove one grain of sand from a heap of sand, it is still a heap. If you keep removing grains of sand, eventually you will have only one grain of sand left. Is it still a heap?

The key point of this paradox lies in the continuous nature of the concept - heap. The concept heap, is actually never well-defined when we use it as natural language. It also does not have a formal definition in any way. You knowledge about the heap might vary infinitesimally.

Observation

For a same object, you might think that is a heap this second and not a heap in the next second. However, you do not think your knowledge about the heap is changing even you give different answer. This proves that the concept heap is continuous because infinitesimal variation does not matter.

Attack to any continuous concept

For any continuous concept that does not have a clear definition. You can always attack it by the following way:

Protocol

  • Find an object that is an instance of the concept.
  • Find way to vary the object, so it is still an instance of the concept.
  • Show that along the way, the object will eventually not be an instance of the concept.
  • You know that along the way there must be a "sweet point". However, the sweet point should not exist because infinitesimal variation should not change the concept, even on the sweet point. Therefore, the concept is not well-defined.

For example, you can attack the concept machine learning by the following way:

Example

  • Optimizing neural network on machines is an instance of machine learning.
  • You can adjust the process by replacing some of the learning steps with human-made steps. It is still an instance of machine learning.
  • You can adjust the process by replacing all the learning steps with human-made step except for one machine-made noise step. It is ridiculous if there are 100000 human-made steps and 1 useless machine-made step. However, it is still an instance of machine learning.

Importantly, nearly all the big concepts are continuous, including philosophy, science, understanding, knowledge, freedom, democracy, etc. They are all vulnerable to this attack. Though they are useful concepts, people should keep in mind that they can never have a clear definition. This impossibility of this has been proved by the history.

Mixture of continuous and discrete

There are knowledge that is neither continuous nor discrete. They are mixture of both. For example, though I claimed that neural networks mainly carry continuous knowledge, they also carry discrete knowledge by its network structure. The network structure is discrete and the weights are continuous.

The tree of knowledge in EvoNote is the same. The tree structure is discrete and the knowledge in the nodes are continuous because they are natural language.

Machine learning engineers

Machine learning engineers does a funny job. They design the discrete structure of the neural network and train the continuous weights. In this way, they mix the discrete and continuous knowledge together.

In this process, one interesting point is the roles of human and machine. The discrete structure is designed by human and the continuous weights are trained by machine. Therefore, machine only deals with continuous knowledge and the discrete knowledge are handled by human. This matches the performance of the model as products - they are good at continuous tasks and bad at discrete tasks.

Network Architecture Search (NAS) is a process that tries to automate the design of the discrete structure. However, it failed heavily in the competition with the transformer structure. This proves that machine learning are not good at discrete tasks again.

Math that bridges continuous and discrete

Math provides some concrete bridge between continuous and discrete. This kind of bridge is hard to find from daily life knowledge. This makes math beautiful and holy.

Group theory

The space where the continuous knowledge lives might have a symmetry described by a certain Lie group. Group theory offers a way to analyze these continuous knowledge by analyzing its Lie group. For example, the Lie group might have a countable number of generators, which gives a discrete way to analyze the continuous knowledge. We can also analyze the representation of the Lie group, which will make the representation of it more discrete if we can decompose it into irreducible representations.

Using the discrete knowledge found by group theory have been applied to neural network design. Equivariant neural networkopen in new window is one example.

Topology

Topology is an example where continuous entities can be unambiguously represented by discrete entities.

Condense matter physics loves topology very much. Part of the reason is the topological properties of condensed matter system nearly the only way to describe them in a discrete way.

Last Updated:
Contributors: Zijian Zhang
+ + + diff --git a/writings/4.2 Tyranny of science.html b/writings/4.2 Tyranny of science.html new file mode 100644 index 0000000..9563b4f --- /dev/null +++ b/writings/4.2 Tyranny of science.html @@ -0,0 +1,33 @@ + + + + + + + + + Tyranny of science + + + + +

Tyranny of science

See Nietzsche and Foucault.

Scientific discourse

Science is meant to be accurate, whose cost is ignore the rich context that real-life situation might have. By making science the absolute premium way to think, it put a coercive discretizer to human world, which leads to a deviation from the fact and many tragedies.

Last Updated:
Contributors: Zijian Zhang
+ + + diff --git a/writings/Comments on previous work.html b/writings/Comments on previous work.html new file mode 100644 index 0000000..f6b1314 --- /dev/null +++ b/writings/Comments on previous work.html @@ -0,0 +1,33 @@ + + + + + + + + + Comment on previous philosophical works + + + + +

Comment on previous philosophical works

My comments are mainly made on the following paper:

What is Understanding? An Overview of Recent Debates in Epistemology and Philosophy of Science: https://philpapers.org/rec/BAUWIU

A decisive question

My decisive question to philosophers: Is Pavlov's dog and Russell's chicken understand bell and the coming of the farmer?

My answer: yes! They understand to the extend that they can draw and context. We should not require the context to be always true. Even human believe mythology.

My observation: Most of the philosophers do not agree with me according to the reference.

Chapter-wise comments

4.1 Understanding and the facts

My comment: factivity, to any extend, is not related to understanding. Understanding can easily be totally wrong. Mythology is a good example.

4.2.2. Grasping

My comment: It seems like the philosophers care about knowing the causality and thinks this might be a standard of understanding. In my view, causality is just a piece of knowledge. People usually forming an implicit context with it does not make it a necessary piece of understanding.

Last Updated:
Contributors: Zijian Zhang
+ + + diff --git a/writings/index.html b/writings/index.html new file mode 100644 index 0000000..1dbd109 --- /dev/null +++ b/writings/index.html @@ -0,0 +1,33 @@ + + + + + + + + + Writings + + + + + + + +