diff --git a/404.html b/404.html index 089095c..50f09e2 100644 --- a/404.html +++ b/404.html @@ -13,15 +13,15 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/about/index.html b/about/index.html index 31c8dc2..b76446f 100644 --- a/about/index.html +++ b/about/index.html @@ -13,15 +13,15 @@ - - + +
Skip to main content

About Us

Zeno is designed, built, and maintained by a team of interdisciplinary researchers at Carnegie Mellon University. We span research groups in Machine Learning, Human-Computer Interaction, and Language Technologies. We are passionate about empowering people to understand the complexities of AI systems in order to design the future of responsible AI.

Team

Alex Cabrera

PhD Candidate

Alex Bäuerle

Research Scientist

Erica Fu

Undergraduate Student

Ankitha Vasudev

Masters Student

Kathy Yu

Masters Student

Josh Zhou

Undergraduate Student

Donald Bertucci

Undergraduate Student

Ameet Talwalkar

Associate Professor

Graham Neubig

Associate Professor

Jason Hong

Professor

Adam Perer

Assistant Professor

Past Members

Tianqi Wu

Masters Student

Yi-Cheng Huang

Research Associate

Sponsors & Organizations

We are thankful to our sponsors and affiliated organizations. Zeno is part of the Mozilla Technology Fund and developed partly with the support of multiple NSF grants and fellowships.

Mozilla logoMozilla logoCMU logo

Contact

If you have any questions or issues with Zeno please send an email to hello@zenoml.com, ask in our Discord, or open an issue on GitHub

Cite

Please reference our CHI 2023 paper if you would like to cite Zeno:


@inproceedings{cabrera23zeno,
author = {Cabrera, Ángel Alexander and Fu, Erica and Bertucci, Donald and Holstein, Kenneth and Talwalkar, Ameet and Hong, Jason I. and Perer, Adam},
title = {Zeno: An Interactive Framework for Behavioral Evaluation of Machine Learning},
year = {2023},
isbn = {978-1-4503-9421-5/23/04},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3544548.3581268},
doi = {10.1145/3544548.3581268},
booktitle = {CHI Conference on Human Factors in Computing Systems},
location = {Hamburg, Germany},
series = {CHI '23}
}
- - + + \ No newline at end of file diff --git a/assets/js/2831b18a.cde6ce11.js b/assets/js/2831b18a.cde6ce11.js new file mode 100644 index 0000000..7325fc6 --- /dev/null +++ b/assets/js/2831b18a.cde6ce11.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[640],{4597:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var n=a(7462),l=(a(7294),a(3905)),i=a(614);const r={},p="View Elements",o={unversionedId:"views/spec/other",id:"views/spec/other",title:"View Elements",description:"A View Element defines how to interpret and display data in your Zeno Project.",source:"@site/docs/views/spec/other.mdx",sourceDirName:"views/spec",slug:"/views/spec/other",permalink:"/docs/views/spec/other",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"View Specification",permalink:"/docs/views/spec/"},next:{title:"Table Elements",permalink:"/docs/views/spec/table"}},s={},d=[{value:"Text",id:"text",level:2},{value:"Properties",id:"properties",level:4},{value:"Image",id:"image",level:2},{value:"Audio",id:"audio",level:2},{value:"Code",id:"code",level:2},{value:"Markdown",id:"markdown",level:2},{value:"Message",id:"message",level:2},{value:"Properties",id:"properties-1",level:4},{value:"List",id:"list",level:2},{value:"Properties",id:"properties-2",level:4},{value:"VStack",id:"vstack",level:2},{value:"Properties",id:"properties-3",level:4}],m={toc:d},k="wrapper";function u(e){let{components:t,...a}=e;return(0,l.kt)(k,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"view-elements"},"View Elements"),(0,l.kt)("p",null,"A View Element defines how to interpret and display data in your Zeno Project.\nThe following view elements can be used in your Zeno Projects."),(0,l.kt)("h2",{id:"text"},"Text"),(0,l.kt)("p",null,"A plaintext view to display raw text data. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJ0ZXh0LWNsYXNzaWZpY2F0aW9uIn0="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "text",\n "label": ...\n}\n'),(0,l.kt)("h4",{id:"properties"},"Properties"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"label"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[String]"),(0,l.kt)("td",{parentName:"tr",align:null},"Label to be added in front of the text data.")))),(0,l.kt)("h2",{id:"image"},"Image"),(0,l.kt)("p",null,"A view to display image data. Expects a URL to fetch the image from as its data input. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJpbWFnZS1jbGFzc2lmaWNhdGlvbiJ9"},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "image"\n}\n'),(0,l.kt)("h2",{id:"audio"},"Audio"),(0,l.kt)("p",null,"A view to display audio data. Expects a URL to fetch the audio data from as its input. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJhdWRpby10cmFuc2NyaXB0aW9uIn0="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "audio"\n}\n'),(0,l.kt)("h2",{id:"code"},"Code"),(0,l.kt)("p",null,"A code-display with syntax highlighting. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJjb2RlLWdlbmVyYXRpb24ifQ=="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "code"\n}\n'),(0,l.kt)("h2",{id:"markdown"},"Markdown"),(0,l.kt)("p",null,"Markdown visualization for a more flexible text display. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJjaGF0Ym90LW1hcmtkb3duIn0="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "markdown"\n}\n'),(0,l.kt)("h2",{id:"message"},"Message"),(0,l.kt)("p",null,"Visualization of data in message bubbles akin to a chat view. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJjaGF0Ym90In0="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "message"\n "content": ...,\n "plain": ...,\n "ownMessage": ...,\n "highlight": ...\n}\n'),(0,l.kt)("h4",{id:"properties-1"},"Properties"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"content"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement")," ","|"," String"),(0,l.kt)("td",{parentName:"tr",align:null},"Element to use to render the message content. If ",(0,l.kt)("inlineCode",{parentName:"td"},"plain == true"),", this is interpreted as a String and displayed as plain text instead.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"plain"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional[",(0,l.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement"),"]"),(0,l.kt)("td",{parentName:"tr",align:null},"Element to use to render the message content. Only applicable if ",(0,l.kt)("inlineCode",{parentName:"td"},"plain == false"),".")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ownMessage"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[boolean]"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether this message should be displayed as incoming or outgoing. Can also be specified in the data if ",(0,l.kt)("inlineCode",{parentName:"td"},"plain == false"),". True for outgoing.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"highlight"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[boolean]"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether this message should be highlighted.")))),(0,l.kt)("h2",{id:"list"},"List"),(0,l.kt)("p",null,"A list of ViewElements. Can be used to render multiple view elements at once. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJjaGF0Ym90In0="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "list"\n "elements": ...,\n "collapsible": ...,\n "border": ...,\n "pad": ...\n}\n'),(0,l.kt)("h4",{id:"properties-2"},"Properties"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elements"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement")),(0,l.kt)("td",{parentName:"tr",align:null},"Element used to render all the elements of the list.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"collapsible"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[String]"),(0,l.kt)("td",{parentName:"tr",align:null},"If specified, only renders four elements of the list per default but adds a ",(0,l.kt)("em",{parentName:"td"},"show more")," button to expand. Can specify either ",(0,l.kt)("inlineCode",{parentName:"td"},'"top"')," or ",(0,l.kt)("inlineCode",{parentName:"td"},'"bottom"'),".")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"border"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[boolean]"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether to add a border around each list element.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pad"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[boolean]"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether to add padding to each list element.")))),(0,l.kt)("h2",{id:"vstack"},"VStack"),(0,l.kt)("p",null,"A vertical stack of keyed elements. Can be used to combine different element types. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJyYWcifQ=="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "vstack"\n "keys": ...\n}\n'),(0,l.kt)("h4",{id:"properties-3"},"Properties"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"keys"),(0,l.kt)("td",{parentName:"tr",align:null},"List[{","[String]",":",(0,l.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement")," }]"),(0,l.kt)("td",{parentName:"tr",align:null},"List of objects mapping from a String key to a ViewElement used to render the content of the data behind the key.")))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2831b18a.dc49b292.js b/assets/js/2831b18a.dc49b292.js deleted file mode 100644 index 35fe191..0000000 --- a/assets/js/2831b18a.dc49b292.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[640],{4597:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var n=a(7462),l=(a(7294),a(3905)),i=a(614);const r={},p="View Elements",o={unversionedId:"views/spec/other",id:"views/spec/other",title:"View Elements",description:"A View Element defines how to interpret and display data in your Zeno Project.",source:"@site/docs/views/spec/other.mdx",sourceDirName:"views/spec",slug:"/views/spec/other",permalink:"/docs/views/spec/other",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"View Specification",permalink:"/docs/views/spec/"},next:{title:"TableElements",permalink:"/docs/views/spec/table"}},s={},d=[{value:"Text",id:"text",level:2},{value:"Properties",id:"properties",level:4},{value:"Image",id:"image",level:2},{value:"Audio",id:"audio",level:2},{value:"Code",id:"code",level:2},{value:"Markdown",id:"markdown",level:2},{value:"Message",id:"message",level:2},{value:"Properties",id:"properties-1",level:4},{value:"List",id:"list",level:2},{value:"Properties",id:"properties-2",level:4},{value:"VStack",id:"vstack",level:2},{value:"Properties",id:"properties-3",level:4}],m={toc:d},k="wrapper";function u(e){let{components:t,...a}=e;return(0,l.kt)(k,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"view-elements"},"View Elements"),(0,l.kt)("p",null,"A View Element defines how to interpret and display data in your Zeno Project.\nThe following view elements can be used in your Zeno Projects."),(0,l.kt)("h2",{id:"text"},"Text"),(0,l.kt)("p",null,"A plaintext view to display raw text data. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJ0ZXh0LWNsYXNzaWZpY2F0aW9uIn0="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "text",\n "label": ...\n}\n'),(0,l.kt)("h4",{id:"properties"},"Properties"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"label"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[String]"),(0,l.kt)("td",{parentName:"tr",align:null},"Label to be added in front of the text data.")))),(0,l.kt)("h2",{id:"image"},"Image"),(0,l.kt)("p",null,"A view to display image data. Expects a URL to fetch the image from as its data input. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJpbWFnZS1jbGFzc2lmaWNhdGlvbiJ9"},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "image"\n}\n'),(0,l.kt)("h2",{id:"audio"},"Audio"),(0,l.kt)("p",null,"A view to display audio data. Expects a URL to fetch the audio data from as its input. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJhdWRpby10cmFuc2NyaXB0aW9uIn0="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "audio"\n}\n'),(0,l.kt)("h2",{id:"code"},"Code"),(0,l.kt)("p",null,"A code-display with syntax highlighting. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJjb2RlLWdlbmVyYXRpb24ifQ=="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "code"\n}\n'),(0,l.kt)("h2",{id:"markdown"},"Markdown"),(0,l.kt)("p",null,"Markdown visualization for a more flexible text display. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJjaGF0Ym90LW1hcmtkb3duIn0="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "markdown"\n}\n'),(0,l.kt)("h2",{id:"message"},"Message"),(0,l.kt)("p",null,"Visualization of data in message bubbles akin to a chat view. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJjaGF0Ym90In0="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "message"\n "content": ...,\n "plain": ...,\n "ownMessage": ...,\n "highlight": ...\n}\n'),(0,l.kt)("h4",{id:"properties-1"},"Properties"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"content"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement")," ","|"," String"),(0,l.kt)("td",{parentName:"tr",align:null},"Element to use to render the message content. If ",(0,l.kt)("inlineCode",{parentName:"td"},"plain == true"),", this is interpreted as a String and displayed as plain text instead.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"plain"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional[",(0,l.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement"),"]"),(0,l.kt)("td",{parentName:"tr",align:null},"Element to use to render the message content. Only applicable if ",(0,l.kt)("inlineCode",{parentName:"td"},"plain == false"),".")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ownMessage"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[boolean]"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether this message should be displayed as incoming or outgoing. Can also be specified in the data if ",(0,l.kt)("inlineCode",{parentName:"td"},"plain == false"),". True for outgoing.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"highlight"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[boolean]"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether this message should be highlighted.")))),(0,l.kt)("h2",{id:"list"},"List"),(0,l.kt)("p",null,"A list of ViewElements. Can be used to render multiple view elements at once. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJjaGF0Ym90In0="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "list"\n "elements": ...,\n "collapsible": ...,\n "border": ...,\n "pad": ...\n}\n'),(0,l.kt)("h4",{id:"properties-2"},"Properties"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"elements"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement")),(0,l.kt)("td",{parentName:"tr",align:null},"Element used to render all the elements of the list.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"collapsible"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[String]"),(0,l.kt)("td",{parentName:"tr",align:null},"If specified, only renders four elements of the list per default but adds a ",(0,l.kt)("em",{parentName:"td"},"show more")," button to expand. Can specify either ",(0,l.kt)("inlineCode",{parentName:"td"},'"top"')," or ",(0,l.kt)("inlineCode",{parentName:"td"},'"bottom"'),".")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"border"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[boolean]"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether to add a border around each list element.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pad"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[boolean]"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether to add padding to each list element.")))),(0,l.kt)("h2",{id:"vstack"},"VStack"),(0,l.kt)("p",null,"A vertical stack of keyed elements. Can be used to combine different elemnt types. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJyYWcifQ=="},"this example"),"."),(0,l.kt)(i.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "vstack"\n "keys": ...\n}\n'),(0,l.kt)("h4",{id:"properties-3"},"Properties"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"keys"),(0,l.kt)("td",{parentName:"tr",align:null},"List[{","[String]",":",(0,l.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement")," }]"),(0,l.kt)("td",{parentName:"tr",align:null},"List of objects mapping from a String key to a ViewElement used to render the content of the data behind the key.")))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/52737aa4.4370a06f.js b/assets/js/52737aa4.4370a06f.js new file mode 100644 index 0000000..7adb575 --- /dev/null +++ b/assets/js/52737aa4.4370a06f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[521],{7174:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>m,frontMatter:()=>s,metadata:()=>p,toc:()=>d});var n=a(7462),l=(a(7294),a(3905)),r=a(614);const s={},i="Table Elements",p={unversionedId:"views/spec/table",id:"views/spec/table",title:"Table Elements",description:"TableElements can only be used as direct decentants of the Toplevel specification.",source:"@site/docs/views/spec/table.mdx",sourceDirName:"views/spec",slug:"/views/spec/table",permalink:"/docs/views/spec/table",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"View Elements",permalink:"/docs/views/spec/other"}},o={},d=[{value:"Separated Values",id:"separated-values",level:2},{value:"Properties",id:"properties",level:4}],u={toc:d},c="wrapper";function m(e){let{components:t,...a}=e;return(0,l.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"table-elements"},"Table Elements"),(0,l.kt)("p",null,"TableElements can only be used as direct decentants of the Toplevel specification.\nThe following elements can be used in tabular displays:"),(0,l.kt)("h2",{id:"separated-values"},"Separated Values"),(0,l.kt)("p",null,"Splitting the data into columns using a specified separator. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJzcGFjZS1zZXBhcmF0ZWQtdmFsdWVzIn0="},"this example"),"."),(0,l.kt)(r.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "separated-values",\n "separator": ...,\n "header": ...,\n "highlight": ...\n}\n'),(0,l.kt)("h4",{id:"properties"},"Properties"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"separator"),(0,l.kt)("td",{parentName:"tr",align:null},"String"),(0,l.kt)("td",{parentName:"tr",align:null},"Character or sequence to separate the data with.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"header"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[String]"),(0,l.kt)("td",{parentName:"tr",align:null},"The heading of the row of data. Ignored if not specified.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"highlight"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[boolean]"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether or not to highlight the data that is being separated. Can be used to create an alternating pattern of rows in a table. ",(0,l.kt)("strong",{parentName:"td"},"Default: false"))))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/52737aa4.72351a5f.js b/assets/js/52737aa4.72351a5f.js deleted file mode 100644 index f95f94d..0000000 --- a/assets/js/52737aa4.72351a5f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[521],{7174:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>m,frontMatter:()=>s,metadata:()=>p,toc:()=>d});var n=a(7462),l=(a(7294),a(3905)),r=a(614);const s={},i="TableElements",p={unversionedId:"views/spec/table",id:"views/spec/table",title:"TableElements",description:"TableElements can only be used as direct decentants of the Toplevel specification.",source:"@site/docs/views/spec/table.mdx",sourceDirName:"views/spec",slug:"/views/spec/table",permalink:"/docs/views/spec/table",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"View Elements",permalink:"/docs/views/spec/other"}},o={},d=[{value:"Separated Values",id:"separated-values",level:2},{value:"Properties",id:"properties",level:4}],u={toc:d},c="wrapper";function m(e){let{components:t,...a}=e;return(0,l.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"tableelements"},"TableElements"),(0,l.kt)("p",null,"TableElements can only be used as direct decentants of the Toplevel specification.\nThe following elements can be used in tabular displays:"),(0,l.kt)("h2",{id:"separated-values"},"Separated Values"),(0,l.kt)("p",null,"Splitting the data into columns using a specified separator. See in ",(0,l.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/?params=eyJzYW1wbGUiOiJzcGFjZS1zZXBhcmF0ZWQtdmFsdWVzIn0="},"this example"),"."),(0,l.kt)(r.Z,{language:"json",title:"Separated Values",mdxType:"CodeBlock"},'{\n "type": "separated-values",\n "separator": ...,\n "header": ...,\n "highlight": ...\n}\n'),(0,l.kt)("h4",{id:"properties"},"Properties"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"separator"),(0,l.kt)("td",{parentName:"tr",align:null},"String"),(0,l.kt)("td",{parentName:"tr",align:null},"Character or sequence to separate the data with.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"header"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[String]"),(0,l.kt)("td",{parentName:"tr",align:null},"The heading of the row of data. Ignored if not specified.")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"highlight"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional","[boolean]"),(0,l.kt)("td",{parentName:"tr",align:null},"Whether or not to highlight the data that is being separated. Can be used to create an alternating pattern of rows in a table. ",(0,l.kt)("strong",{parentName:"td"},"Default: false"))))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5c1fb99f.5d64a40b.js b/assets/js/5c1fb99f.5d64a40b.js new file mode 100644 index 0000000..17a55af --- /dev/null +++ b/assets/js/5c1fb99f.5d64a40b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[539],{7094:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>s});var a=n(7462),l=(n(7294),n(3905));const o={sidebar_position:3},i="Python Client API",r={unversionedId:"python-client",id:"python-client",title:"Python Client API",description:"The Python client is used to create projects and upload data.",source:"@site/docs/python-client.mdx",sourceDirName:".",slug:"/python-client",permalink:"/docs/python-client",draft:!1,tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Using Zeno",permalink:"/docs/using-zeno"},next:{title:"Instance Views",permalink:"/docs/views/"}},p={},s=[{value:"ZenoMetric Objects",id:"zenometric-objects",level:2},{value:"ZenoProject Objects",id:"zenoproject-objects",level:2},{value:"upload_dataset",id:"upload_dataset",level:4},{value:"upload_system",id:"upload_system",level:4},{value:"delete_system",id:"delete_system",level:4},{value:"delete_all_systems",id:"delete_all_systems",level:4},{value:"ZenoClient Objects",id:"zenoclient-objects",level:2},{value:"__init__",id:"__init__",level:4},{value:"create_project",id:"create_project",level:4},{value:"get_project",id:"get_project",level:4}],m={toc:s},c="wrapper";function u(e){let{components:t,...n}=e;return(0,l.kt)(c,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"python-client-api"},"Python Client API"),(0,l.kt)("p",null,"The Python client is used to create projects and upload data."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pip install zeno-client\n")),(0,l.kt)("p",null,"Please see ",(0,l.kt)("a",{parentName:"p",href:"/docs/intro#creating-a-project"},"Creating a Project")," to learn how to use the client."),(0,l.kt)("a",{id:"client.ZenoMetric"}),(0,l.kt)("h2",{id:"zenometric-objects"},"ZenoMetric Objects"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"class ZenoMetric(BaseModel)\n")),(0,l.kt)("p",null,"A metric to calculate for a Zeno project."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Attributes"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"id")," ",(0,l.kt)("em",{parentName:"li"},"int")," - The ID of the metric. -1 if not set."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"name")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The name of the metric."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"type")," ",(0,l.kt)("em",{parentName:"li"},"str"),' - The type of metric to calculate. Currently only "mean".'),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"columns")," ",(0,l.kt)("em",{parentName:"li"},"list","[str]")," - The columns to calculate the metric on.\nEmpty list if not set.")),(0,l.kt)("a",{id:"client.ZenoProject"}),(0,l.kt)("h2",{id:"zenoproject-objects"},"ZenoProject Objects"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"class ZenoProject()\n")),(0,l.kt)("p",null,"Provides data upload functionality for a Zeno project."),(0,l.kt)("p",null,"Should NOT be initialized directly, but rather through the ZenoClient."),(0,l.kt)("a",{id:"client.ZenoProject.upload_dataset"}),(0,l.kt)("h4",{id:"upload_dataset"},"upload_dataset"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"def upload_dataset(df: pd.DataFrame,\n *,\n id_column: str,\n data_column: Optional[str] = None,\n label_column: Optional[str] = None)\n")),(0,l.kt)("p",null,"Upload a dataset to a Zeno project."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"df")," ",(0,l.kt)("em",{parentName:"li"},"pd.DataFrame")," - The dataset to upload as a Pandas DataFrame."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"id_column")," ",(0,l.kt)("em",{parentName:"li"},"str")," - Column name containing unique instance IDs."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"data_column")," ",(0,l.kt)("em",{parentName:"li"},"str | None, optional")," - Column containing the\ninstance data. This can be raw data for data types such as\ntext, or URLs for large media data such as images and videos.\nDefaults to None."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"label_column")," ",(0,l.kt)("em",{parentName:"li"},"str | None, optional")," - Column containing the\ninstance labels. Defaults to None.")),(0,l.kt)("a",{id:"client.ZenoProject.upload_system"}),(0,l.kt)("h4",{id:"upload_system"},"upload_system"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"def upload_system(df: pd.DataFrame, *, name: str, id_column: str,\n output_column: str)\n")),(0,l.kt)("p",null,"Upload a system to a Zeno project."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"df")," ",(0,l.kt)("em",{parentName:"li"},"pd.DataFrame")," - The dataset to upload."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"name")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The name of the system to upload."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"id_column")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The name of the column containing the instance IDs."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"output_column")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The name of the column containing the system output.")),(0,l.kt)("a",{id:"client.ZenoProject.delete_system"}),(0,l.kt)("h4",{id:"delete_system"},"delete_system"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"def delete_system(name: str)\n")),(0,l.kt)("p",null,"Delete a system from a Zeno project."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"name")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The name of the system to delete.")),(0,l.kt)("a",{id:"client.ZenoProject.delete_all_systems"}),(0,l.kt)("h4",{id:"delete_all_systems"},"delete_all_systems"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"def delete_all_systems()\n")),(0,l.kt)("p",null,"Delete all systems from a Zeno project."),(0,l.kt)("a",{id:"client.ZenoClient"}),(0,l.kt)("h2",{id:"zenoclient-objects"},"ZenoClient Objects"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"class ZenoClient()\n")),(0,l.kt)("p",null,"Client class for data upload functionality to Zeno."),(0,l.kt)("a",{id:"client.ZenoClient.__init__"}),(0,l.kt)("h4",{id:"__init__"},"_","_","init","_","_"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"def __init__(api_key: str, *, endpoint: str = DEFAULT_BACKEND) -> None\n")),(0,l.kt)("p",null,"Initialize the ZenoClient object for API upload calls."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"api_key")," ",(0,l.kt)("em",{parentName:"li"},"str")," - the API key to authenticate uploads with."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"endpoint")," ",(0,l.kt)("em",{parentName:"li"},"str, optional")," - the base URL of the Zeno backend.\nDefaults to DEFAULT_BACKEND.")),(0,l.kt)("a",{id:"client.ZenoClient.create_project"}),(0,l.kt)("h4",{id:"create_project"},"create_project"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},'def create_project(*,\n name: str,\n view: Union[str, Dict] = "",\n description: str = "",\n metrics: List[ZenoMetric] = [],\n samples_per_page: int = 10,\n public: bool = False) -> ZenoProject\n')),(0,l.kt)("p",null,"Creates an empty project in Zeno's backend."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"name")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The name of the project to be created. The project will be\ncreated under the current user, e.g. username/name."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"view")," ",(0,l.kt)("em",{parentName:"li"},"Union","[str, Dict]",", optional"),' - The view to use for the project.\nDefaults to "".'),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"description")," ",(0,l.kt)("em",{parentName:"li"},"str, optional"),' - The description of the project. Defaults to "".'),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"metrics")," ",(0,l.kt)("em",{parentName:"li"},"list","[ZenoMetric]",", optional")," - The metrics to calculate for the\nproject. Defaults to []."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"samples_per_page")," ",(0,l.kt)("em",{parentName:"li"},"int, optional")," - The number of samples to show per page.\nDefaults to 10."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"public")," ",(0,l.kt)("em",{parentName:"li"},"bool, optional")," - Whether the project is public. Defaults to False.")),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Returns"),":"),(0,l.kt)("p",null,"ZenoProject | None: The created project object or None if the project could\nnot be created."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Raises"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ValidationError")," - If the config does not match the ProjectConfig schema."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"APIError")," - If the project could not be created.")),(0,l.kt)("a",{id:"client.ZenoClient.get_project"}),(0,l.kt)("h4",{id:"get_project"},"get_project"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"def get_project(project_name: str) -> ZenoProject\n")),(0,l.kt)("p",null,"Get a project object by its name. Names are split into owner/project_name."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"project_name")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The owner/project_name of the project to get.")),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Returns"),":"),(0,l.kt)("p",null,"Project | None: The project object or None if the project could not be\nfound."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Raises"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"APIError")," - If the project could not be found.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5c1fb99f.6cbab119.js b/assets/js/5c1fb99f.6cbab119.js deleted file mode 100644 index aa8d16a..0000000 --- a/assets/js/5c1fb99f.6cbab119.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[539],{7094:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>s});var a=n(7462),l=(n(7294),n(3905));const o={sidebar_position:2},i="Python Client API",r={unversionedId:"python-client",id:"python-client",title:"Python Client API",description:"The Python client is used to create projects and upload data.",source:"@site/docs/python-client.mdx",sourceDirName:".",slug:"/python-client",permalink:"/docs/python-client",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Getting Started",permalink:"/docs/intro"},next:{title:"Using Zeno",permalink:"/docs/using-zeno"}},p={},s=[{value:"ZenoMetric Objects",id:"zenometric-objects",level:2},{value:"ZenoProject Objects",id:"zenoproject-objects",level:2},{value:"__init__",id:"__init__",level:3},{value:"upload_dataset",id:"upload_dataset",level:3},{value:"upload_system",id:"upload_system",level:3},{value:"ZenoClient Objects",id:"zenoclient-objects",level:2},{value:"__init__",id:"__init__-1",level:3},{value:"create_project",id:"create_project",level:3},{value:"get_project",id:"get_project",level:3}],c={toc:s},m="wrapper";function u(e){let{components:t,...n}=e;return(0,l.kt)(m,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"python-client-api"},"Python Client API"),(0,l.kt)("p",null,"The Python client is used to create projects and upload data."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"pip install zeno-client\n")),(0,l.kt)("p",null,"Please see ",(0,l.kt)("a",{parentName:"p",href:"/docs/intro#creating-a-project"},"Creating a Project")," to learn how to use the client."),(0,l.kt)("a",{id:"client.ZenoMetric"}),(0,l.kt)("h2",{id:"zenometric-objects"},"ZenoMetric Objects"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"class ZenoMetric(BaseModel)\n")),(0,l.kt)("p",null,"A metric to calculate for a Zeno project."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Attributes"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"id")," ",(0,l.kt)("em",{parentName:"li"},"int")," - The ID of the metric. -1 if not set."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"name")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The name of the metric."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"type")," ",(0,l.kt)("em",{parentName:"li"},"str"),' - The type of metric to calculate. Currently only "mean".'),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"columns")," ",(0,l.kt)("em",{parentName:"li"},"list","[str]")," - The columns to calculate the metric on.\nEmpty list if not set.")),(0,l.kt)("a",{id:"client.ZenoProject"}),(0,l.kt)("h2",{id:"zenoproject-objects"},"ZenoProject Objects"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"class ZenoProject()\n")),(0,l.kt)("p",null,"Provides data upload functionality for a Zeno project."),(0,l.kt)("p",null,"Should NOT be initialized directly, but rather through the ZenoClient."),(0,l.kt)("a",{id:"client.ZenoProject.__init__"}),(0,l.kt)("h3",{id:"__init__"},"_","_","init","_","_"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"def __init__(api_key: str, project_uuid: str, endpoint: str = DEFAULT_BACKEND)\n")),(0,l.kt)("p",null,"Initialize the Project object for API upload calls."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"api_key")," ",(0,l.kt)("em",{parentName:"li"},"str")," - the API key to authenticate uploads with."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"project_uuid")," ",(0,l.kt)("em",{parentName:"li"},"str")," - the ID of the project to add data to."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"endpoint")," ",(0,l.kt)("em",{parentName:"li"},"str, optional")," - the base URL of the Zeno backend.")),(0,l.kt)("a",{id:"client.ZenoProject.upload_dataset"}),(0,l.kt)("h3",{id:"upload_dataset"},"upload_dataset"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"def upload_dataset(df: pd.DataFrame,\n *,\n id_column: str,\n data_column: str,\n label_column: Optional[str] = None)\n")),(0,l.kt)("p",null,"Upload a dataset to a Zeno project."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"df")," ",(0,l.kt)("em",{parentName:"li"},"pd.DataFrame")," - The dataset to upload as a Pandas DataFrame."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"id_column")," ",(0,l.kt)("em",{parentName:"li"},"str")," - Column name containing unique instance IDs."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"data_column")," ",(0,l.kt)("em",{parentName:"li"},"str")," - Column containing the\ninstance data. This can be raw data for data types such as\ntext, or URLs for large media data such as images and videos."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"label_column")," ",(0,l.kt)("em",{parentName:"li"},"str | None, optional")," - Column containing the\ninstance labels. Defaults to None.")),(0,l.kt)("a",{id:"client.ZenoProject.upload_system"}),(0,l.kt)("h3",{id:"upload_system"},"upload_system"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"def upload_system(df: pd.DataFrame, *, name: str, id_column: str,\n output_column: str)\n")),(0,l.kt)("p",null,"Upload a system to a Zeno project."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"df")," ",(0,l.kt)("em",{parentName:"li"},"pd.DataFrame")," - The dataset to upload."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"name")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The name of the system to upload."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"id_column")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The name of the column containing the instance IDs."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"output_column")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The name of the column containing the system output.")),(0,l.kt)("a",{id:"client.ZenoClient"}),(0,l.kt)("h2",{id:"zenoclient-objects"},"ZenoClient Objects"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"class ZenoClient()\n")),(0,l.kt)("p",null,"Client class for data upload functionality to Zeno."),(0,l.kt)("a",{id:"client.ZenoClient.__init__"}),(0,l.kt)("h3",{id:"__init__-1"},"_","_","init","_","_"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"def __init__(api_key: str, *, endpoint: str = DEFAULT_BACKEND) -> None\n")),(0,l.kt)("p",null,"Initialize the ZenoClient object for API upload calls."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"api_key")," ",(0,l.kt)("em",{parentName:"li"},"str")," - the API key to authenticate uploads with."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"endpoint")," ",(0,l.kt)("em",{parentName:"li"},"str, optional")," - the base URL of the Zeno backend.\nDefaults to DEFAULT_BACKEND.")),(0,l.kt)("a",{id:"client.ZenoClient.create_project"}),(0,l.kt)("h3",{id:"create_project"},"create_project"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},'def create_project(*,\n name: str,\n view: str,\n metrics: List[ZenoMetric] = [],\n data_url: str = "",\n calculate_histogram_metrics: bool = True,\n samples_per_page: int = 10,\n public: bool = False,\n description: str = "") -> ZenoProject\n')),(0,l.kt)("p",null,"Creates an empty project in Zeno's backend."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"name")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The name of the project to be created. The project will be\ncreated under the current user, e.g. username/name."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"project")," - str,"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"view")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The view to use for the project."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"metrics")," ",(0,l.kt)("em",{parentName:"li"},"list","[ZenoMetric]",", optional")," - The metrics to calculate for the\nproject. Defaults to []."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"data_url")," ",(0,l.kt)("em",{parentName:"li"},"str, optional"),' - The base URL to load datapoints from.\nDefaults to "".'),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"calculate_histogram_metrics")," ",(0,l.kt)("em",{parentName:"li"},"bool, optional")," - Whether to calculate histogram\nmetrics. Defaults to True."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"samples_per_page")," ",(0,l.kt)("em",{parentName:"li"},"int, optional")," - The number of samples to show per page.\nDefaults to 10."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"public")," ",(0,l.kt)("em",{parentName:"li"},"bool, optional")," - Whether the project is public. Defaults to False."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"description")," ",(0,l.kt)("em",{parentName:"li"},"str, optional"),' - The description of the project. Defaults to "".')),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Returns"),":"),(0,l.kt)("p",null,"ZenoProject | None: The created project object or None if the project could\nnot be created."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Raises"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ValidationError")," - If the config does not match the ProjectConfig schema."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"APIError")," - If the project could not be created.")),(0,l.kt)("a",{id:"client.ZenoClient.get_project"}),(0,l.kt)("h3",{id:"get_project"},"get_project"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-python"},"def get_project(project_name: str) -> ZenoProject\n")),(0,l.kt)("p",null,"Get a project object by its name. Names are split into owner/project_name."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Arguments"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"project_name")," ",(0,l.kt)("em",{parentName:"li"},"str")," - The owner/project_name of the project to get.")),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Returns"),":"),(0,l.kt)("p",null,"Project | None: The project object or None if the project could not be\nfound."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Raises"),":"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"APIError")," - If the project could not be found.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5cd43755.8b70d7fb.js b/assets/js/5cd43755.8b70d7fb.js new file mode 100644 index 0000000..b3f7272 --- /dev/null +++ b/assets/js/5cd43755.8b70d7fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[517],{5120:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>w,frontMatter:()=>a,metadata:()=>r,toc:()=>p});var i=n(7462),o=(n(7294),n(3905));const a={},s="Instance Views",r={unversionedId:"views/views",id:"views/views",title:"Instance Views",description:"Instance Views let you specify how Zeno should render your data.",source:"@site/docs/views/views.mdx",sourceDirName:"views",slug:"/views/",permalink:"/docs/views/",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Python Client API",permalink:"/docs/python-client"},next:{title:"Standard Views",permalink:"/docs/views/existing"}},c={},p=[],l={toc:p},d="wrapper";function w(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,i.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"instance-views"},"Instance Views"),(0,o.kt)("p",null,"Instance Views let you specify how Zeno should render your data.\nThere are two ways to define instance views:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Standard Views")," - Use the string identifier for one of the ",(0,o.kt)("a",{parentName:"li",href:"/docs/views/existing"},"Standard Views"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Custom Views")," - Use the ",(0,o.kt)("a",{parentName:"li",href:"/docs/views/spec"},"View Specification")," to create your own view.")),(0,o.kt)("p",null,"You can either pass in a standard view string, custom view JSON, or custom view ",(0,o.kt)("inlineCode",{parentName:"p"},"dict")," object to the view option of the ",(0,o.kt)("inlineCode",{parentName:"p"},"create_project")," function."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from zeno-client import ZenoClient\nclient = ZenoClient("/** API KEY **/")\n\n# Standard View\nproject = client.create_project(\n name="My Project",\n view="text-classification"\n)\n\n# Custom View (JSON)\nproject = client.create_project(\n name="My Project",\n view=\'{"data": {"type": "image"},"label": {"type": "text"},"output": {"type": "text"}}\'\n)\n\n# Custom View (dict)\nproject = client.create_project(\n name="My Project",\n view={\n "data": {\n "type": "image"\n },\n "label": {\n "type": "text"\n },\n "output": {\n "type": "text"\n }\n }\n)\n')))}w.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5cd43755.a44ff411.js b/assets/js/5cd43755.a44ff411.js deleted file mode 100644 index 9db76af..0000000 --- a/assets/js/5cd43755.a44ff411.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[517],{5120:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var i=s(7462),n=(s(7294),s(3905));const o={},a="Instance Views",r={unversionedId:"views/views",id:"views/views",title:"Instance Views",description:"Instance Views let you specify how Zeno should render your data.",source:"@site/docs/views/views.mdx",sourceDirName:"views",slug:"/views/",permalink:"/docs/views/",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Using Zeno",permalink:"/docs/using-zeno"},next:{title:"Standard Views",permalink:"/docs/views/existing"}},c={},d=[],w={toc:d},l="wrapper";function u(e){let{components:t,...s}=e;return(0,n.kt)(l,(0,i.Z)({},w,s,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"instance-views"},"Instance Views"),(0,n.kt)("p",null,"Instance Views let you specify how Zeno should render your data.\nThere are two ways to define instance views:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Standard Views")," - Use the string identifier for one of the ",(0,n.kt)("a",{parentName:"li",href:"/docs/views/existing"},"Standard Views"),"."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Custom Views")," - Use the ",(0,n.kt)("a",{parentName:"li",href:"/docs/views/spec"},"View Specification")," to create your own view.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/842e05e7.bb490659.js b/assets/js/842e05e7.bb490659.js deleted file mode 100644 index a2055d5..0000000 --- a/assets/js/842e05e7.bb490659.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[954],{36:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>u});var o=a(7462),n=(a(7294),a(3905));const i={},l="Using Zeno",r={unversionedId:"using-zeno",id:"using-zeno",title:"Using Zeno",description:"Explore Zeno's interface and features.",source:"@site/docs/using-zeno.mdx",sourceDirName:".",slug:"/using-zeno",permalink:"/docs/using-zeno",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Python Client API",permalink:"/docs/python-client"},next:{title:"Instance Views",permalink:"/docs/views/"}},s={},u=[{value:"Quickstart Video",id:"quickstart-video",level:3},{value:"Data and Model Output Exploration",id:"data-and-model-output-exploration",level:2},{value:"Chart Building",id:"chart-building",level:2},{value:"Qualitative Comparison",id:"qualitative-comparison",level:2}],c={toc:u},p="wrapper";function h(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,o.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"using-zeno"},"Using Zeno"),(0,n.kt)("p",null,"Explore Zeno's interface and features."),(0,n.kt)("h3",{id:"quickstart-video"},"Quickstart Video"),(0,n.kt)("p",null,"We recommend you watch the following video for a quick overview of Zeno's features."),(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/28eLbSSUZOA?si=8VVSzaV-LIv6CJ4H",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowfullscreen:!0}),(0,n.kt)("p",null,"The following is a written walkthrough of Zeno's features using Zeno to explore a dataset of customer service emails."),(0,n.kt)("h2",{id:"data-and-model-output-exploration"},"Data and Model Output Exploration"),(0,n.kt)("p",null,"When you first open Zeno you will see your data instances on the right hand side and metadata distributions on the left hand side."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/blob/main/docs/images/zeno-walkthrough-initial-page.png?raw=true",alt:"Zeno Screenshot"})),(0,n.kt)("p",null,"The metadata distributions on the left show summary visualizations of columns in your dataset:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-feature-display.png",alt:"Metadata view"})),(0,n.kt)("p",null,"If you want to filter down your data to only include examples that have a particular value for a feature:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Textual Features:"),' Type in a value in the text box and click "set". You can also use regexes or adjust case-sensitivity by pressing the buttons.'),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Numerical Features:")," Dragging the slider to select a range of values."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Categorical Features:")," Clicking on a specific value in the bar chart (not displayed above).")),(0,n.kt)("p",null,'For instance, if we want to find all examples that have a length of 100 or fewer characters that contain the string "sorry", you can filter the "label and "label_length" features, and see that the displayed examples on the right are updated.'),(0,n.kt)("p",null,"Once you've found a subset of the data that you're interested in, you can save it for future analysis and monitoring by clicking the \"Create a new Slice\" button:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-create-slice.png",alt:"Slice Creation"})),(0,n.kt)("p",null,"You can also arrange slices into folders for easier browsing."),(0,n.kt)("p",null,"This slicing is very powerful functionality if you get creative with the features and patterns that you use! If you want to try to add new features, you can implement them and add them to the config.py file in the examples that you're using, some examples below:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/zeno-ml/zeno-build/blob/6ab05c7083ef556aa12a626c0771814c74f030aa/examples/chatbot/config.py#L187-L201"},"Features for Chatbots")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/zeno-ml/zeno-build/blob/6ab05c7083ef556aa12a626c0771814c74f030aa/examples/analysis_gpt_mt/config.py#L117-L134"},"Features for Translation"))),(0,n.kt)("h2",{id:"chart-building"},"Chart Building"),(0,n.kt)("p",null,'Once you have some models to compare and some slices to compare them on, you can start building interactive charts to summarize model performance. To do this, click on the "Charts" button on the left of the page:'),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-reports-button.png",alt:"Chart tab"})),(0,n.kt)("p",null,"This will take you to a page that shows all of your created charts:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-reports-page.png",alt:"Charts"})),(0,n.kt)("p",null,"You can create new charts by interactively selecting slices, metrics, and models. For example, you can create a chart comparing model performance across instances with short, medium, or long ground truth labels:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-report-slices.png",alt:"Chart example"})),(0,n.kt)("h2",{id:"qualitative-comparison"},"Qualitative Comparison"),(0,n.kt)("p",null,"One final handy feature of Zeno is the ability to compare the outputs of two models on the same examples. You can do this by clicking on the qualitative comparison button:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-button.png",alt:"Qualitative comparison"})),(0,n.kt)("p",null,"On the page, you can then select the two models you want to compare side-by-side, and select the metric you'd like to compare them by. Here we choose ",(0,n.kt)("inlineCode",{parentName:"p"},"gpt-3.5-turbo")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"vicuna")," and compare them according to the ",(0,n.kt)("inlineCode",{parentName:"p"},"bert_score")," metric."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-standard.png",alt:"Comparison"})),(0,n.kt)("p",null,'You can also sort the outputs by the difference between the scores between the two systems by clicking on the header of the "difference" column. This allows you to find examples where one of the two systems produces much better outputs than the other, such as the one below where one model suddenly went off track and produced an incomprehensible output.'),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-sorted.png",alt:"Example find"})))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/842e05e7.bff70688.js b/assets/js/842e05e7.bff70688.js new file mode 100644 index 0000000..70d7c5c --- /dev/null +++ b/assets/js/842e05e7.bff70688.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[954],{36:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>h,frontMatter:()=>i,metadata:()=>r,toc:()=>u});var o=a(7462),n=(a(7294),a(3905));const i={sidebar_position:2},l="Using Zeno",r={unversionedId:"using-zeno",id:"using-zeno",title:"Using Zeno",description:"We recommend you watch the following video for a quick overview of Zeno's features.",source:"@site/docs/using-zeno.mdx",sourceDirName:".",slug:"/using-zeno",permalink:"/docs/using-zeno",draft:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Getting Started",permalink:"/docs/intro"},next:{title:"Python Client API",permalink:"/docs/python-client"}},s={},u=[{value:"Data and Model Output Exploration",id:"data-and-model-output-exploration",level:2},{value:"Chart Building",id:"chart-building",level:2},{value:"Qualitative Comparison",id:"qualitative-comparison",level:2}],c={toc:u},p="wrapper";function h(e){let{components:t,...a}=e;return(0,n.kt)(p,(0,o.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"using-zeno"},"Using Zeno"),(0,n.kt)("p",null,"We recommend you watch the following video for a quick overview of Zeno's features."),(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/28eLbSSUZOA?si=8VVSzaV-LIv6CJ4H",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowfullscreen:!0}),(0,n.kt)("hr",null),(0,n.kt)("p",null,"The following is a written walkthrough of Zeno's features using Zeno to explore a dataset of customer service emails."),(0,n.kt)("h2",{id:"data-and-model-output-exploration"},"Data and Model Output Exploration"),(0,n.kt)("p",null,"When you first open Zeno you will see your data instances on the right hand side and metadata distributions on the left hand side."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/blob/main/docs/images/zeno-walkthrough-initial-page.png?raw=true",alt:"Zeno Screenshot"})),(0,n.kt)("p",null,"The metadata distributions on the left show summary visualizations of columns in your dataset:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-feature-display.png",alt:"Metadata view"})),(0,n.kt)("p",null,"If you want to filter down your data to only include examples that have a particular value for a feature:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Textual Features:"),' Type in a value in the text box and click "set". You can also use regexes or adjust case-sensitivity by pressing the buttons.'),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Numerical Features:")," Dragging the slider to select a range of values."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Categorical Features:")," Clicking on a specific value in the bar chart (not displayed above).")),(0,n.kt)("p",null,'For instance, if we want to find all examples that have a length of 100 or fewer characters that contain the string "sorry", you can filter the "label and "label_length" features, and see that the displayed examples on the right are updated.'),(0,n.kt)("p",null,"Once you've found a subset of the data that you're interested in, you can save it for future analysis and monitoring by clicking the \"Create a new Slice\" button:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-create-slice.png",alt:"Slice Creation"})),(0,n.kt)("p",null,"You can also arrange slices into folders for easier browsing."),(0,n.kt)("p",null,"This slicing is very powerful functionality if you get creative with the features and patterns that you use! If you want to try to add new features, you can implement them and add them to the config.py file in the examples that you're using, some examples below:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/zeno-ml/zeno-build/blob/6ab05c7083ef556aa12a626c0771814c74f030aa/examples/chatbot/config.py#L187-L201"},"Features for Chatbots")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/zeno-ml/zeno-build/blob/6ab05c7083ef556aa12a626c0771814c74f030aa/examples/analysis_gpt_mt/config.py#L117-L134"},"Features for Translation"))),(0,n.kt)("h2",{id:"chart-building"},"Chart Building"),(0,n.kt)("p",null,'Once you have some models to compare and some slices to compare them on, you can start building interactive charts to summarize model performance. To do this, click on the "Charts" button on the left of the page:'),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-reports-button.png",alt:"Chart tab"})),(0,n.kt)("p",null,"This will take you to a page that shows all of your created charts:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-reports-page.png",alt:"Charts"})),(0,n.kt)("p",null,"You can create new charts by interactively selecting slices, metrics, and models. For example, you can create a chart comparing model performance across instances with short, medium, or long ground truth labels:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-report-slices.png",alt:"Chart example"})),(0,n.kt)("h2",{id:"qualitative-comparison"},"Qualitative Comparison"),(0,n.kt)("p",null,"One final handy feature of Zeno is the ability to compare the outputs of two models on the same examples. You can do this by clicking on the qualitative comparison button:"),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-button.png",alt:"Qualitative comparison"})),(0,n.kt)("p",null,"On the page, you can then select the two models you want to compare side-by-side, and select the metric you'd like to compare them by. Here we choose ",(0,n.kt)("inlineCode",{parentName:"p"},"gpt-3.5-turbo")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"vicuna")," and compare them according to the ",(0,n.kt)("inlineCode",{parentName:"p"},"bert_score")," metric."),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-standard.png",alt:"Comparison"})),(0,n.kt)("p",null,'You can also sort the outputs by the difference between the scores between the two systems by clicking on the header of the "difference" column. This allows you to find examples where one of the two systems produces much better outputs than the other, such as the one below where one model suddenly went off track and produced an incomprehensible output.'),(0,n.kt)("p",null,(0,n.kt)("img",{parentName:"p",src:"https://github.com/zeno-ml/zeno-build/raw/main/docs/images/zeno-walkthrough-qualitative-sorted.png",alt:"Example find"})))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.482b1f37.js b/assets/js/935f2afb.482b1f37.js new file mode 100644 index 0000000..da4c774 --- /dev/null +++ b/assets/js/935f2afb.482b1f37.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Getting Started","href":"/docs/intro","docId":"intro"},{"type":"link","label":"Using Zeno","href":"/docs/using-zeno","docId":"using-zeno"},{"type":"link","label":"Python Client API","href":"/docs/python-client","docId":"python-client"},{"type":"category","label":"Instance Views","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Standard Views","href":"/docs/views/existing","docId":"views/existing"},{"type":"category","label":"View Specification","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"View Elements","href":"/docs/views/spec/other","docId":"views/spec/other"},{"type":"link","label":"Table Elements","href":"/docs/views/spec/table","docId":"views/spec/table"}],"href":"/docs/views/spec/"}],"href":"/docs/views/"}]},"docs":{"intro":{"id":"intro","title":"Getting Started","description":"Zeno is an interactive AI evaluation platform for exploring, discovering and reporting the performance of your models.","sidebar":"tutorialSidebar"},"python-client":{"id":"python-client","title":"Python Client API","description":"The Python client is used to create projects and upload data.","sidebar":"tutorialSidebar"},"using-zeno":{"id":"using-zeno","title":"Using Zeno","description":"We recommend you watch the following video for a quick overview of Zeno\'s features.","sidebar":"tutorialSidebar"},"views/existing":{"id":"views/existing","title":"Standard Views","description":"Zeno has a number of preconfigured views that can be referenced by name.","sidebar":"tutorialSidebar"},"views/spec/other":{"id":"views/spec/other","title":"View Elements","description":"A View Element defines how to interpret and display data in your Zeno Project.","sidebar":"tutorialSidebar"},"views/spec/spec":{"id":"views/spec/spec","title":"View Specification","description":"With the View Specifications, you can create a custom Instance View for your specific data.","sidebar":"tutorialSidebar"},"views/spec/table":{"id":"views/spec/table","title":"Table Elements","description":"TableElements can only be used as direct decentants of the Toplevel specification.","sidebar":"tutorialSidebar"},"views/views":{"id":"views/views","title":"Instance Views","description":"Instance Views let you specify how Zeno should render your data.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.dc96e9f7.js b/assets/js/935f2afb.dc96e9f7.js deleted file mode 100644 index ebf9c76..0000000 --- a/assets/js/935f2afb.dc96e9f7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Getting Started","href":"/docs/intro","docId":"intro"},{"type":"link","label":"Python Client API","href":"/docs/python-client","docId":"python-client"},{"type":"link","label":"Using Zeno","href":"/docs/using-zeno","docId":"using-zeno"},{"type":"category","label":"Instance Views","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Standard Views","href":"/docs/views/existing","docId":"views/existing"},{"type":"category","label":"View Specification","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"View Elements","href":"/docs/views/spec/other","docId":"views/spec/other"},{"type":"link","label":"TableElements","href":"/docs/views/spec/table","docId":"views/spec/table"}],"href":"/docs/views/spec/"}],"href":"/docs/views/"}]},"docs":{"intro":{"id":"intro","title":"Getting Started","description":"Zeno is an interactive platform for AI evaluation for exploring, discovering and reporting the performance of your models.","sidebar":"tutorialSidebar"},"python-client":{"id":"python-client","title":"Python Client API","description":"The Python client is used to create projects and upload data.","sidebar":"tutorialSidebar"},"using-zeno":{"id":"using-zeno","title":"Using Zeno","description":"Explore Zeno\'s interface and features.","sidebar":"tutorialSidebar"},"views/existing":{"id":"views/existing","title":"Standard Views","description":"Zeno has a number of preconfigured views that can be referenced by name.","sidebar":"tutorialSidebar"},"views/spec/other":{"id":"views/spec/other","title":"View Elements","description":"A View Element defines how to interpret and display data in your Zeno Project.","sidebar":"tutorialSidebar"},"views/spec/spec":{"id":"views/spec/spec","title":"View Specification","description":"With the View Specifications, you can create a custom Instance View that is just right for your Zeno project.","sidebar":"tutorialSidebar"},"views/spec/table":{"id":"views/spec/table","title":"TableElements","description":"TableElements can only be used as direct decentants of the Toplevel specification.","sidebar":"tutorialSidebar"},"views/views":{"id":"views/views","title":"Instance Views","description":"Instance Views let you specify how Zeno should render your data.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/9375f4e3.241bbf3f.js b/assets/js/9375f4e3.241bbf3f.js new file mode 100644 index 0000000..c728594 --- /dev/null +++ b/assets/js/9375f4e3.241bbf3f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[333],{1942:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>u,contentTitle:()=>r,default:()=>k,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var a=n(7462),s=(n(7294),n(3905)),i=n(614);const o={},r="Standard Views",l={unversionedId:"views/existing",id:"views/existing",title:"Standard Views",description:"Zeno has a number of preconfigured views that can be referenced by name.",source:"@site/docs/views/existing.mdx",sourceDirName:"views",slug:"/views/existing",permalink:"/docs/views/existing",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Instance Views",permalink:"/docs/views/"},next:{title:"View Specification",permalink:"/docs/views/spec/"}},u={},d=[],c={toc:d},p="wrapper";function k(t){let{components:e,...n}=t;return(0,s.kt)(p,(0,a.Z)({},c,n,{components:e,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"standard-views"},"Standard Views"),(0,s.kt)("p",null,"Zeno has a number of preconfigured views that can be referenced by name.\nThe following view names can be passed as the ",(0,s.kt)("inlineCode",{parentName:"p"},"view")," option for a Zeno project."),(0,s.kt)("table",null,(0,s.kt)("tr",null,(0,s.kt)("th",null,"View Name"),(0,s.kt)("th",null,"Description")),(0,s.kt)("tr",null,(0,s.kt)("td",null,"image-classification"),(0,s.kt)("td",null,"Display images with ground truth and predicted class labels. Works for both binary and multiclass classification. Requires image inputs and text or numeric outputs.")),(0,s.kt)("tr",null,(0,s.kt)("td",null,"text-classification"),(0,s.kt)("td",null,"Display text with ground truth and predicted class labels. Requires text inputs and text or numeric outputs.")),(0,s.kt)("tr",null,(0,s.kt)("td",null,"audio-transcription"),(0,s.kt)("td",null,"Display audio file along with outputed text, e.g. transcription. Requires audio inputs and text outputs.")),(0,s.kt)("tr",null,(0,s.kt)("td",null,"image-segmentation"),(0,s.kt)("td",null,"Display image with overlayed ground truth and predicted segmentation masks. Works for both binary segmentation. Requires image inputs and binary image outputs.")),(0,s.kt)("tr",null,(0,s.kt)("td",null,"code-generation"),(0,s.kt)("td",null,"Show formatted code input and code predictions. Use for evaluating code generation models such as Codex.")),(0,s.kt)("tr",null,(0,s.kt)("td",null,"chatbot"),(0,s.kt)("td",null,"Show input-output pairs from chatbot models using the OpenAI API. See the"," ",(0,s.kt)("a",{href:"https://platform.openai.com/docs/guides/chat"},"API documentation")," ","for details on the required Chat data format.")),(0,s.kt)("tr",null,(0,s.kt)("td",null,"chatbot-markdown"),(0,s.kt)("td",null,"Same as `chatbot` but renders each cell block as markdown. Useful for rendering complex interactions with external agents, etc.")),(0,s.kt)("tr",null,(0,s.kt)("td",null,"chatbot"),(0,s.kt)("td",null,"Show a single input-output pair from chatbot models.")),(0,s.kt)("tr",null,(0,s.kt)("td",null,"space-separated-values"),(0,s.kt)("td",null,"Table view of inputs, outputs, and labels which are space-separated words. Useful for tasks such as part-of-speech tagging.")),(0,s.kt)("tr",null,(0,s.kt)("td",null,"rag"),(0,s.kt)("td",null,"Show the input to a generator that can access information from other documents (retrieval augmented generation). The documents that are used and the system's answer can also be displayed.",(0,s.kt)("br",null),(0,s.kt)("br",null),"Input and label are just plain text whereas ouptut has to be JSON in the form:",(0,s.kt)(i.Z,{language:"json",mdxType:"CodeBlock"},'{\n "retrieved": [\n {\n "reference": [YOUR_DOCUMENT],\n "text": [TEXT_IN_YOUR_DOC],\n "score": [RANKING_OF_DOC]\n },\n ...\n ],\n "answer": [SYSTEM_ANSWER],\n}\n')))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9375f4e3.eb0edd7d.js b/assets/js/9375f4e3.eb0edd7d.js deleted file mode 100644 index 06b15b4..0000000 --- a/assets/js/9375f4e3.eb0edd7d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[333],{1942:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>u,contentTitle:()=>r,default:()=>k,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var a=n(7462),i=(n(7294),n(3905)),s=n(614);const o={},r="Standard Views",l={unversionedId:"views/existing",id:"views/existing",title:"Standard Views",description:"Zeno has a number of preconfigured views that can be referenced by name.",source:"@site/docs/views/existing.mdx",sourceDirName:"views",slug:"/views/existing",permalink:"/docs/views/existing",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Instance Views",permalink:"/docs/views/"},next:{title:"View Specification",permalink:"/docs/views/spec/"}},u={},d=[],c={toc:d},p="wrapper";function k(t){let{components:e,...n}=t;return(0,i.kt)(p,(0,a.Z)({},c,n,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"standard-views"},"Standard Views"),(0,i.kt)("p",null,"Zeno has a number of preconfigured views that can be referenced by name.\nThe following view names can be passed as the ",(0,i.kt)("inlineCode",{parentName:"p"},"view")," option for a Zeno project."),(0,i.kt)("table",null,(0,i.kt)("tr",null,(0,i.kt)("th",null,"View Name"),(0,i.kt)("th",null,"Description")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"image-classification"),(0,i.kt)("td",null,"Display images with ground truth and predicted class labels. Works for both binary and multiclass classification. Requires image inputs and text or numeric outputs.")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"text-classification"),(0,i.kt)("td",null,"Display text with ground truth and predicted class labels. Requires text inputs and text or numeric outputs.")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"audio-transcription"),(0,i.kt)("td",null,"Display audio file along with outputed text, e.g. transcription. Requires audio inputs and text outputs.")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"image-segmentation"),(0,i.kt)("td",null,"Display image with overlayed ground truth and predicted segmentation masks. Works for both binary segmentation. Requires image inputs and binary image outputs.")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"code-generation"),(0,i.kt)("td",null,"Show formatted code input and code predictions. Use for evaluating code generation models such as Codex.")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"openai-chat"),(0,i.kt)("td",null,"Show input-output pairs from chatbot models using the OpenAI API. See the"," ",(0,i.kt)("a",{href:"https://platform.openai.com/docs/guides/chat"},"API documentation")," ","for details on the required Chat data format.")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"openai-chat-markdown"),(0,i.kt)("td",null,"Same as `openai-chat` but renders each cell block as markdown. Useful for rendering complex interactions with external agents, etc.")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"chatbot"),(0,i.kt)("td",null,"Show a single input-output pair from chatbot models.")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"space-separated-values"),(0,i.kt)("td",null,"Table view of inputs, outputs, and labels which are space-separated words. Useful for tasks such as part-of-speech tagging.")),(0,i.kt)("tr",null,(0,i.kt)("td",null,"rag"),(0,i.kt)("td",null,"Show the input to a generator that can access information from other documents (retrieval augmented generation). The documents that are used and the system's answer can also be displayed.",(0,i.kt)("br",null),(0,i.kt)("br",null),"Input and label are just plain text whereas ouptut has to be JSON in the form:",(0,i.kt)(s.Z,{language:"json",mdxType:"CodeBlock"},'{\n "retrieved": [\n {\n "reference": [YOUR_DOCUMENT],\n "text": [TEXT_IN_YOUR_DOC],\n "score": [RANKING_OF_DOC]\n },\n ...\n ],\n "answer": [SYSTEM_ANSWER],\n}\n')))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b245f42a.5073260c.js b/assets/js/b245f42a.5073260c.js deleted file mode 100644 index b1d9a88..0000000 --- a/assets/js/b245f42a.5073260c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[250],{4889:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>p,toc:()=>c});var n=a(7462),i=(a(7294),a(3905)),o=a(614);const r={},l="View Specification",p={unversionedId:"views/spec/spec",id:"views/spec/spec",title:"View Specification",description:"With the View Specifications, you can create a custom Instance View that is just right for your Zeno project.",source:"@site/docs/views/spec/spec.mdx",sourceDirName:"views/spec",slug:"/views/spec/",permalink:"/docs/views/spec/",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Standard Views",permalink:"/docs/views/existing"},next:{title:"View Elements",permalink:"/docs/views/spec/other"}},s={},c=[{value:"Specification",id:"specification",level:2},{value:"Properties",id:"properties",level:4}],d={toc:c},u="wrapper";function m(e){let{components:t,...a}=e;return(0,i.kt)(u,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"view-specification"},"View Specification"),(0,i.kt)("p",null,"With the View Specifications, you can create a custom Instance View that is just right for your Zeno project.\nIn fact, under the hood, Zeno converts all the ",(0,i.kt)("a",{parentName:"p",href:"/docs/views/existing"},"Standard Views")," into such a specification.\nFor example, the ",(0,i.kt)("strong",{parentName:"p"},"image-classification")," view is converted into:"),(0,i.kt)(o.Z,{language:"json",mdxType:"CodeBlock"},'{\n "data": {\n "type": "image"\n },\n "label": {\n "type": "text"\n },\n "output": {\n "type": "text"\n }\n}\n'),(0,i.kt)("p",null,"You can explore all the available preconfigured view specifications and experiment with your own specification on our ",(0,i.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/"},"Instance View Playground"),".\nIf you want to learn how to write your own view specification, the following should help you get started."),(0,i.kt)("h2",{id:"specification"},"Specification"),(0,i.kt)("p",null,"Each Instance View starts with the definition of a Specification.\nThe Specification is defined as follows:"),(0,i.kt)(o.Z,{language:"json",title:"Toplevel",mdxType:"CodeBlock"},'{\n "data": ...,\n "label": ...,\n "output": ...,\n "displayType": ...\n}\n'),(0,i.kt)("h4",{id:"properties"},"Properties"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Property"),(0,i.kt)("th",{parentName:"tr",align:null},"Type"),(0,i.kt)("th",{parentName:"tr",align:null},"Description"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"data"),(0,i.kt)("td",{parentName:"tr",align:null},"Optional[",(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement"),"]"),(0,i.kt)("td",{parentName:"tr",align:null},"Specifying how to interpret and display the data column of your Zeno Project.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"label"),(0,i.kt)("td",{parentName:"tr",align:null},"Optional[",(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement"),"]"),(0,i.kt)("td",{parentName:"tr",align:null},"Specifying how to interpret and display the label column of your Zeno Project.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"output"),(0,i.kt)("td",{parentName:"tr",align:null},"Optional[",(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement"),"]"),(0,i.kt)("td",{parentName:"tr",align:null},"Specifying how to interpret and display the ouptut column of your Zeno Project.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"displayType"),(0,i.kt)("td",{parentName:"tr",align:null},"Optional","[String]"),(0,i.kt)("td",{parentName:"tr",align:null},"The type of display this view uses. If this parameter is omitted, the default view with three sections for data, label, and output will be used. If set as ",(0,i.kt)("inlineCode",{parentName:"td"},'"table"'),", data, label, and output must be a ",(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/table"},"TableElement")," instead of a ",(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement"),".")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b245f42a.9e77cbb4.js b/assets/js/b245f42a.9e77cbb4.js new file mode 100644 index 0000000..c926676 --- /dev/null +++ b/assets/js/b245f42a.9e77cbb4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[250],{4889:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var n=a(7462),i=(a(7294),a(3905)),p=a(614);const o={},r="View Specification",l={unversionedId:"views/spec/spec",id:"views/spec/spec",title:"View Specification",description:"With the View Specifications, you can create a custom Instance View for your specific data.",source:"@site/docs/views/spec/spec.mdx",sourceDirName:"views/spec",slug:"/views/spec/",permalink:"/docs/views/spec/",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Standard Views",permalink:"/docs/views/existing"},next:{title:"View Elements",permalink:"/docs/views/spec/other"}},s={},d=[{value:"View Specification",id:"view-specification-1",level:2},{value:"Properties",id:"properties",level:4}],c={toc:d},m="wrapper";function u(e){let{components:t,...a}=e;return(0,i.kt)(m,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"view-specification"},"View Specification"),(0,i.kt)("p",null,"With the View Specifications, you can create a custom Instance View for your specific data.\nUnder the hood, Zeno converts all the ",(0,i.kt)("a",{parentName:"p",href:"/docs/views/existing"},"Standard Views")," into these View Specifications.\nFor example, the ",(0,i.kt)("strong",{parentName:"p"},"image-classification")," view turns into:"),(0,i.kt)(p.Z,{language:"json",mdxType:"CodeBlock"},'{\n "data": {\n "type": "image"\n },\n "label": {\n "type": "text"\n },\n "output": {\n "type": "text"\n }\n}\n'),(0,i.kt)("p",null,"Where ",(0,i.kt)("inlineCode",{parentName:"p"},"type")," is one of the ",(0,i.kt)("a",{parentName:"p",href:"/docs/views/spec/other"},"View Element")," types. You can explore all the available preconfigured view specifications and experiment with your own specification using the ",(0,i.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/"},"Instance View Playground"),".\nIf you want to learn how to write your own view specification, the following should help you get started."),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Check out the ",(0,i.kt)("a",{parentName:"p",href:"https://zeno-ml.github.io/zeno-instance-views/"},"Instance View Playground")," to test out existing views and prototype new custom views.")),(0,i.kt)("h2",{id:"view-specification-1"},"View Specification"),(0,i.kt)("p",null,"The top level of the View Specification contains keys for the three main inputs, ",(0,i.kt)("inlineCode",{parentName:"p"},"data"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"label"),", and ",(0,i.kt)("inlineCode",{parentName:"p"},"output"),", and an optional ",(0,i.kt)("inlineCode",{parentName:"p"},"displayType"),":"),(0,i.kt)(p.Z,{language:"json",title:"View Specification",mdxType:"CodeBlock"},'{\n "data": ...,\n "label": ...,\n "output": ...,\n "displayType": ...\n}\n'),(0,i.kt)("p",null,"When ",(0,i.kt)("inlineCode",{parentName:"p"},"displayType")," is omitted (default), each of ",(0,i.kt)("inlineCode",{parentName:"p"},"data"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"label"),", and ",(0,i.kt)("inlineCode",{parentName:"p"},"output"),"is a ",(0,i.kt)("a",{parentName:"p",href:"/docs/views/spec/other"},"ViewElement"),". If using the",(0,i.kt)("inlineCode",{parentName:"p"},"table")," ",(0,i.kt)("inlineCode",{parentName:"p"},"displayType"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"data"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"label"),", and ",(0,i.kt)("inlineCode",{parentName:"p"},"output")," should be ",(0,i.kt)("a",{parentName:"p",href:"/docs/views/spec/other"},"TableElement")," entries."),(0,i.kt)("h4",{id:"properties"},"Properties"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Property"),(0,i.kt)("th",{parentName:"tr",align:null},"Type"),(0,i.kt)("th",{parentName:"tr",align:null},"Description"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"data"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement")," ","|"," ",(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/table"},"TableElement")),(0,i.kt)("td",{parentName:"tr",align:null},"How to render data entries.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"label"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement")," ","|"," ",(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/table"},"TableElement")),(0,i.kt)("td",{parentName:"tr",align:null},"How to render label entries.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"output"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement")," ","|"," ",(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/table"},"TableElement")),(0,i.kt)("td",{parentName:"tr",align:null},"How to render output entries.")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"displayType"),(0,i.kt)("td",{parentName:"tr",align:null},"Optional","[String]"),(0,i.kt)("td",{parentName:"tr",align:null},"How to display data, label, and output entries. The default view is a vertical list and each of ",(0,i.kt)("inlineCode",{parentName:"td"},"data"),", ",(0,i.kt)("inlineCode",{parentName:"td"},"label")," and ",(0,i.kt)("inlineCode",{parentName:"td"},"output")," must be ",(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/other"},"ViewElement"),"s. If set to ",(0,i.kt)("inlineCode",{parentName:"td"},'"table"'),", ",(0,i.kt)("inlineCode",{parentName:"td"},"data"),", ",(0,i.kt)("inlineCode",{parentName:"td"},"label"),", and ",(0,i.kt)("inlineCode",{parentName:"td"},"output")," must ",(0,i.kt)("a",{parentName:"td",href:"/docs/views/spec/table"},"TableElement"),"s.")))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f8409a7e.cb894f46.js b/assets/js/f8409a7e.cb894f46.js deleted file mode 100644 index add4245..0000000 --- a/assets/js/f8409a7e.cb894f46.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[206],{9568:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var a=n(7462),o=(n(7294),n(3905));n(614);const i={sidebar_position:1},r="Getting Started",s={unversionedId:"intro",id:"intro",title:"Getting Started",description:"Zeno is an interactive platform for AI evaluation for exploring, discovering and reporting the performance of your models.",source:"@site/docs/intro.mdx",sourceDirName:".",slug:"/intro",permalink:"/docs/intro",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Python Client API",permalink:"/docs/python-client"}},l={},c=[{value:"Creating a Project",id:"creating-a-project",level:2},{value:"Complete Example",id:"complete-example",level:4},{value:"Quickstart with Zeno Build",id:"quickstart-with-zeno-build",level:2}],p={toc:c},d="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"getting-started"},"Getting Started"),(0,o.kt)("p",null,"Zeno is an ",(0,o.kt)("strong",{parentName:"p"},"interactive platform for AI evaluation")," for exploring, discovering and reporting the performance of your models.\nUse it for any data type or task with Zeno's ",(0,o.kt)("a",{parentName:"p",href:"/docs/views/"},"modular views")," for everything from object detection to audio transcription and chatbot conversations.\nZeno helps you move beyond aggregate metrics and spot-checking model outputs to develop a deep and quantitative understanding of how your model behaves."),(0,o.kt)("p",null,"To get an idea of Zeno's features, you can explore public projects and reports in ",(0,o.kt)("a",{parentName:"p",href:"https://hub.zenoml.com"},"Zeno Hub"),".\nFor example, take a look at a ",(0,o.kt)("a",{parentName:"p",href:"https://hub.zenoml.com/report/cabreraalex/GPT%20MT%20Benchmark%20Report"},"report evaluating how well LLMs like GPT-4 do on language translation"),", along with the ",(0,o.kt)("a",{parentName:"p",href:"https://hub.zenoml.com/project/cabreraalex/GPT%20MT%20Benchmark/explore"},"underlying data used to create the report."),"."),(0,o.kt)("p",null,"Check out the ",(0,o.kt)("a",{parentName:"p",href:"/docs/using-zeno/"},"Using Zeno")," section for more information on how to use Zeno to evaluate your models."),(0,o.kt)("h2",{id:"creating-a-project"},"Creating a Project"),(0,o.kt)("p",null,"To create your own projects and reports, first create an account on ",(0,o.kt)("a",{parentName:"p",href:"https://hub.zenoml.com/signup"},"Zeno Hub"),".\nAfter logging in to Zeno Hub, generate your API key by clicking on your profile at the bottom left to navigate to your ",(0,o.kt)("a",{parentName:"p",href:"https://hub.zenoml.com/account"},"account page"),"."),(0,o.kt)("p",null,"Next, install the ",(0,o.kt)("inlineCode",{parentName:"p"},"zeno-client")," Python package, which is used to upload new datasets and AI system outputs:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"pip install zeno-client\n")),(0,o.kt)("p",null,"In a Python script or notebook we can now create a new project:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from zeno_client import ZenoClient\n\nclient = ZenoClient("YOUR API KEY HERE")\n')),(0,o.kt)("p",null,"Now lets load some text data to analyze. The client API works with Pandas DataFrames, so we can create a sample DataFrame looking at text sentiment classification:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from zeno_client import ZenoClient\n# highlight-next-line\nimport pandas as pd\n\nclient = ZenoClient("YOUR API KEY HERE")\n\n# highlight-start\ndf = pd.DataFrame(\n {\n "text": [\n "I love this movie!",\n "I hate this movie!",\n "This movie is ok.",\n ],\n "label": ["positive", "negative", "neutral"],\n }\n)\n\n# Explicitly save the index as a column to upload.\ndf["id"] = df.index\n\n# Add any additional columns you want to do analysis across.\ndf["input length"] = df["text"].str.len()\n\n# highlight-end\n')),(0,o.kt)("p",null,"Let's create a project for this task. ",(0,o.kt)("strong",{parentName:"p"},"Projects")," in Zeno are a base dataset and any number of AI system outputs, and are used to evaluate and compare AI system performance. Here we create a project and upload our base dataset."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from zeno_client import ZenoClient, ZenoMetric\n\n...\n\nproject = client.create_project(\n name="Sentiment Classification",\n view="text-classification",\n metrics=[\n ZenoMetric(name="accuracy", type="mean", columns=["correct"]),\n ]\n)\n\nproject.upload_dataset(df, id_column="id", data_column=\'text\', label_column="label")\n')),(0,o.kt)("p",null,'We named our project "Sentiment Classification" and specified that it is a text classification task.\nCheck out all supported data types and tasks ',(0,o.kt)("a",{parentName:"p",href:"https://zenoml.com/docs/views/"},"here"),".\nWe also added an initial accuracy metric which takes the mean of the ",(0,o.kt)("inlineCode",{parentName:"p"},"correct")," column, which will be present in the system outputs we upload later."),(0,o.kt)("p",null,"Next, we can upload some system outputs to evaluate. Here we'll upload some fake predictions from a model:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'\n...\n\ndf_system = pd.DataFrame(\n {\n "output": ["positive", "negative", "negative"],\n }\n)\n\n# Create an id column to match the base dataset.\ndf_system["id"] = df_system.index\n\n# Measure accuracy for each instance, which is averaged by the ZenoMetric above.\ndf_system["correct"] = (df_system["output"] == df["label"]).astype(int)\n\nproj.upload_system(df_system, name="System A", id_column="id", output_column="output")\n')),(0,o.kt)("p",null,"You can now navigate to the project URL in Zeno Hub to see the uploaded data and metrics and start exploring your AI system's performance!"),(0,o.kt)("h4",{id:"complete-example"},"Complete Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from zeno_client import ZenoClient, ZenoMetric\nimport pandas as pd\n\nclient = ZenoClient("YOUR API KEY HERE")\n\ndf = pd.DataFrame(\n {\n "text": [\n "I love this movie!",\n "I hate this movie!",\n "This movie is ok.",\n ],\n "label": ["positive", "negative", "neutral"],\n }\n)\n\n# Explicitly save the index as a column to upload.\ndf["id"] = df.index\n\n# Add any additional columns you want to do analysis across.\ndf["input length"] = df["text"].str.len()\n\nproject = client.create_project(\n name="Sentiment Classification",\n view="text-classification",\n metrics=[\n ZenoMetric(name="accuracy", type="mean", columns=["correct"]),\n ]\n)\n\nproject.upload_dataset(df, id_column="id", data_column=\'text\', label_column="label")\n\ndf_system = pd.DataFrame(\n {\n "output": ["positive", "negative", "negative"],\n }\n)\n\n# Create an id column to match the base dataset.\ndf_system["id"] = df_system.index\n\n# Measure accuracy for each instance, which is averaged by the ZenoMetric above.\ndf_system["correct"] = (df_system["output"] == df["label"]).astype(int)\n\nproject.upload_system(df_system, name="System A", id_column="id", output_column="output")\n')),(0,o.kt)("h2",{id:"quickstart-with-zeno-build"},"Quickstart with Zeno Build"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://github.com/zeno-ml/zeno-build"},"Zeno Build")," is a Python library that makes it easy to set up Zeno projects for common AI and ML tasks."),(0,o.kt)("p",null,"Follow the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/zeno-ml/zeno-build/tree/main/docs/tutorial"},"Zeno Build Tutorial")," to learn the basic Zeno concepts on an example LLM task."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f8409a7e.eb5c48d4.js b/assets/js/f8409a7e.eb5c48d4.js new file mode 100644 index 0000000..53a9f1e --- /dev/null +++ b/assets/js/f8409a7e.eb5c48d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[206],{9568:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=n(7462),o=(n(7294),n(3905));n(614);const i={sidebar_position:1},r="Getting Started",s={unversionedId:"intro",id:"intro",title:"Getting Started",description:"Zeno is an interactive AI evaluation platform for exploring, discovering and reporting the performance of your models.",source:"@site/docs/intro.mdx",sourceDirName:".",slug:"/intro",permalink:"/docs/intro",draft:!1,tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Using Zeno",permalink:"/docs/using-zeno"}},l={},p=[{value:"Creating a Project",id:"creating-a-project",level:2},{value:"Complete Example",id:"complete-example",level:4},{value:"Quickstart with Zeno Build",id:"quickstart-with-zeno-build",level:2}],c={toc:p},d="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"getting-started"},"Getting Started"),(0,o.kt)("p",null,"Zeno is an ",(0,o.kt)("strong",{parentName:"p"},"interactive AI evaluation platform")," for exploring, discovering and reporting the performance of your models.\nUse it for any task and data type with Zeno's ",(0,o.kt)("a",{parentName:"p",href:"/docs/views/"},"modular views")," for everything from object detection to audio transcription and chatbot conversations.\nZeno helps you move beyond aggregate metrics and spot-checking model outputs to develop a deep and quantitative understanding of how your model behaves."),(0,o.kt)("p",null,"To get an idea of Zeno's features, you can explore public projects and reports in ",(0,o.kt)("a",{parentName:"p",href:"https://hub.zenoml.com"},"Zeno Hub"),".\nFor example, take a look at a ",(0,o.kt)("a",{parentName:"p",href:"https://hub.zenoml.com/report/cabreraalex/GPT%20MT%20Benchmark%20Report"},"report evaluating how well LLMs like GPT-4 do on language translation"),", along with the ",(0,o.kt)("a",{parentName:"p",href:"https://hub.zenoml.com/project/cabreraalex/GPT%20MT%20Benchmark/explore"},"underlying data used to create the report."),"."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Head over to ",(0,o.kt)("a",{parentName:"p",href:"https://hub.zenoml.com"},"Zeno Hub")," to explore public Zeno projects and reports.\nCheck out the ",(0,o.kt)("a",{parentName:"p",href:"/docs/using-zeno/"},"Using Zeno")," docs for more information on how to use the Zeno interface.")),(0,o.kt)("h2",{id:"creating-a-project"},"Creating a Project"),(0,o.kt)("p",null,"To create your own projects and reports, first create an account on ",(0,o.kt)("a",{parentName:"p",href:"https://hub.zenoml.com/signup"},"Zeno Hub"),".\nAfter logging in to Zeno Hub, generate your API key by clicking on your profile at the bottom left to navigate to your ",(0,o.kt)("a",{parentName:"p",href:"https://hub.zenoml.com/account"},"account page"),"."),(0,o.kt)("p",null,"Next, install the ",(0,o.kt)("inlineCode",{parentName:"p"},"zeno-client")," Python package, which is used to upload new datasets and AI system outputs:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"pip install zeno-client\n")),(0,o.kt)("p",null,"We can now create a client with out API key, and use it to create a project and upload data. The client API works with Pandas DataFrames, so we can create a sample DataFrame looking at text sentiment classification:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from zeno_client import ZenoClient\nimport pandas as pd\n\nclient = ZenoClient("YOUR API KEY HERE")\n\ndf = pd.DataFrame(\n {\n "text": [\n "I love this movie!",\n "I hate this movie!",\n "This movie is ok.",\n ],\n "label": ["positive", "negative", "neutral"],\n }\n)\n\n# Explicitly save the index as a column to upload.\ndf["id"] = df.index\n\n# Add any additional columns you want to do analysis across.\ndf["input length"] = df["text"].str.len()\n')),(0,o.kt)("p",null,"Let's create a project for this task. ",(0,o.kt)("strong",{parentName:"p"},"Projects")," in Zeno are a base dataset and any number of AI system outputs, and are used to evaluate and compare model performance. Here we create a project and upload our base dataset."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"If you are working with tabular data you do not have to pass in a ",(0,o.kt)("inlineCode",{parentName:"p"},"view")," option to ",(0,o.kt)("inlineCode",{parentName:"p"},"create_project")," or a ",(0,o.kt)("inlineCode",{parentName:"p"},"data_column")," option to ",(0,o.kt)("inlineCode",{parentName:"p"},"upload_dataset"),".")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from zeno_client import ZenoClient, ZenoMetric\n\n...\n\nproject = client.create_project(\n name="Sentiment Classification",\n view="text-classification",\n metrics=[\n ZenoMetric(name="accuracy", type="mean", columns=["correct"]),\n ]\n)\n\nproject.upload_dataset(df, id_column="id", data_column=\'text\', label_column="label")\n')),(0,o.kt)("p",null,'We named our project "Sentiment Classification" and specified that it is a text classification task.\nCheck out all supported data types and tasks ',(0,o.kt)("a",{parentName:"p",href:"https://zenoml.com/docs/views/"},"here"),".\nWe also added an initial accuracy metric which takes the mean of the ",(0,o.kt)("inlineCode",{parentName:"p"},"correct")," column, which will be present in the system outputs we upload later."),(0,o.kt)("p",null,"Next, we can upload some system outputs to evaluate. Here we'll upload some fake predictions from a model:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'\n...\n\ndf_system = pd.DataFrame(\n {\n "output": ["positive", "negative", "negative"],\n }\n)\n\n# Create an id column to match the base dataset.\ndf_system["id"] = df_system.index\n\n# Measure accuracy for each instance, which is averaged by the ZenoMetric above.\ndf_system["correct"] = (df_system["output"] == df["label"]).astype(int)\n\nproj.upload_system(df_system, name="System A", id_column="id", output_column="output")\n')),(0,o.kt)("p",null,"You can now navigate to the project URL in Zeno Hub to see the uploaded data and metrics and start exploring your AI system's performance!"),(0,o.kt)("h4",{id:"complete-example"},"Complete Example"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-python"},'from zeno_client import ZenoClient, ZenoMetric\nimport pandas as pd\n\nclient = ZenoClient("YOUR API KEY HERE")\n\ndf = pd.DataFrame(\n {\n "text": [\n "I love this movie!",\n "I hate this movie!",\n "This movie is ok.",\n ],\n "label": ["positive", "negative", "neutral"],\n }\n)\n\n# Explicitly save the index as a column to upload.\ndf["id"] = df.index\n\n# Add any additional columns you want to do analysis across.\ndf["input length"] = df["text"].str.len()\n\nproject = client.create_project(\n name="Sentiment Classification",\n view="text-classification",\n metrics=[\n ZenoMetric(name="accuracy", type="mean", columns=["correct"]),\n ]\n)\n\nproject.upload_dataset(df, id_column="id", data_column=\'text\', label_column="label")\n\ndf_system = pd.DataFrame(\n {\n "output": ["positive", "negative", "negative"],\n }\n)\n\n# Create an id column to match the base dataset.\ndf_system["id"] = df_system.index\n\n# Measure accuracy for each instance, which is averaged by the ZenoMetric above.\ndf_system["correct"] = (df_system["output"] == df["label"]).astype(int)\n\nproject.upload_system(df_system, name="System A", id_column="id", output_column="output")\n')),(0,o.kt)("h2",{id:"quickstart-with-zeno-build"},"Quickstart with Zeno Build"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://github.com/zeno-ml/zeno-build"},"Zeno Build")," is a Python library that makes it easy to set up Zeno projects for common AI and ML tasks."),(0,o.kt)("p",null,"Follow the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/zeno-ml/zeno-build/tree/main/docs/tutorial"},"Zeno Build Tutorial")," to learn the basic Zeno concepts on an example LLM task."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.6e6e9e96.js b/assets/js/main.440c8cbc.js similarity index 99% rename from assets/js/main.6e6e9e96.js rename to assets/js/main.440c8cbc.js index 9f6df4d..eee8c0c 100644 --- a/assets/js/main.6e6e9e96.js +++ b/assets/js/main.440c8cbc.js @@ -1,2 +1,2 @@ -/*! For license information please see main.6e6e9e96.js.LICENSE.txt */ -(self.webpackChunkzeno_docs=self.webpackChunkzeno_docs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(13)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],17896441:[()=>Promise.all([n.e(532),n.e(592),n.e(490),n.e(918)]).then(n.bind(n,8945)),"@theme/DocItem",8945],"1be78505":[()=>Promise.all([n.e(532),n.e(514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1df93b7f":[()=>Promise.all([n.e(532),n.e(237)]).then(n.bind(n,4145)),"@site/src/pages/index.tsx",4145],"20417f73":[()=>n.e(743).then(n.t.bind(n,7456,19)),"~blog/default/blog-tags-introduction-60a.json",7456],"2831b18a":[()=>Promise.all([n.e(532),n.e(592),n.e(640)]).then(n.bind(n,4597)),"@site/docs/views/spec/other.mdx",4597],"28df1be2":[()=>n.e(934).then(n.t.bind(n,4469,19)),"/home/runner/work/zenoml.com/zenoml.com/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"4d0932fd":[()=>n.e(194).then(n.t.bind(n,5745,19)),"/home/runner/work/zenoml.com/zenoml.com/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"52737aa4":[()=>Promise.all([n.e(532),n.e(592),n.e(521)]).then(n.bind(n,7174)),"@site/docs/views/spec/table.mdx",7174],"5ad2500b":[()=>n.e(979).then(n.t.bind(n,3599,19)),"~blog/default/blog-tags-introduction-60a-list.json",3599],"5c1fb99f":[()=>Promise.all([n.e(592),n.e(539)]).then(n.bind(n,7094)),"@site/docs/python-client.mdx",7094],"5cd43755":[()=>Promise.all([n.e(592),n.e(517)]).then(n.bind(n,5120)),"@site/docs/views/views.mdx",5120],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6875c492":[()=>Promise.all([n.e(532),n.e(592),n.e(490),n.e(48),n.e(610)]).then(n.bind(n,1714)),"@theme/BlogTagsPostsPage",1714],"814f3328":[()=>n.e(535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"842e05e7":[()=>Promise.all([n.e(592),n.e(954)]).then(n.bind(n,36)),"@site/docs/using-zeno.mdx",36],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9375f4e3":[()=>Promise.all([n.e(532),n.e(592),n.e(333)]).then(n.bind(n,1942)),"@site/docs/views/existing.mdx",1942],"989c4899":[()=>Promise.all([n.e(532),n.e(592),n.e(346)]).then(n.bind(n,2028)),"@site/src/pages/about.jsx",2028],"9e4087bc":[()=>n.e(608).then(n.bind(n,3169)),"@theme/BlogArchivePage",3169],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(592),n.e(490),n.e(48),n.e(89)]).then(n.bind(n,46)),"@theme/BlogListPage",46],a7023ddc:[()=>n.e(713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],ae6c4130:[()=>n.e(60).then(n.t.bind(n,3769,19)),"/home/runner/work/zenoml.com/zenoml.com/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],b245f42a:[()=>Promise.all([n.e(532),n.e(592),n.e(250)]).then(n.bind(n,4889)),"@site/docs/views/spec/spec.mdx",4889],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],c339cc82:[()=>Promise.all([n.e(592),n.e(566)]).then(n.bind(n,9413)),"@site/blog/2022-08-26-welcome.md",9413],ccc49370:[()=>Promise.all([n.e(532),n.e(592),n.e(490),n.e(48),n.e(103)]).then(n.bind(n,9178)),"@theme/BlogPostPage",9178],f8409a7e:[()=>Promise.all([n.e(532),n.e(592),n.e(206)]).then(n.bind(n,9568)),"@site/docs/intro.mdx",9568],fda116a3:[()=>Promise.all([n.e(592),n.e(831)]).then(n.bind(n,2985)),"@site/blog/2022-08-26-welcome.md?truncated=true",2985]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,c.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/about",component:f("/about","b73"),exact:!0},{path:"/blog",component:f("/blog","4e1"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","49c"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","63c"),exact:!0},{path:"/blog/tags/introduction",component:f("/blog/tags/introduction","243"),exact:!0},{path:"/blog/welcome-post",component:f("/blog/welcome-post","7f9"),exact:!0},{path:"/docs",component:f("/docs","4e1"),routes:[{path:"/docs/intro",component:f("/docs/intro","99a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/python-client",component:f("/docs/python-client","710"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/using-zeno",component:f("/docs/using-zeno","46c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/views/",component:f("/docs/views/","48e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/views/existing",component:f("/docs/views/existing","c29"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/views/spec/",component:f("/docs/views/spec/","ea9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/views/spec/other",component:f("/docs/views/spec/other","d3f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/views/spec/table",component:f("/docs/views/spec/table","ec8"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/",component:f("/","348"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(6657),n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),E=n(3320),k=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,c.TH)();return e+(0,h.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function x(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(_,null),r.createElement(S,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),L=n(8940);function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const P=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),N("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?N("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=N("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(P,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const R=I,M="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",F="__docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${M}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,z(e))),r.createElement("div",{id:M}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement($,null):null}function j(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var Z=n(4763);function H(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(Z.Z,null,r.createElement(L.M,null,r.createElement(A.t,null,r.createElement(f,null,r.createElement(j,null),r.createElement(x,null),r.createElement(U,null),r.createElement(R,{location:T(t)},e)))))}var V=n(6887);const W=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var G=n(9670);const q=new Set,Y=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,X={prefetch(e){if(!(e=>!K()&&!Y.has(e)&&!q.has(e))(e))return!1;q.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,G.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?W(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!Y.has(e))(e)&&(Y.add(e),O(e))},Q=Object.freeze(X);if(l.Z.canUseDOM){window.docusaurus=Q;const e=a.hydrate;O(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-google-tag-manager":{"default":{"containerId":"GTM-WWXQ3HNL","id":"default"}},"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-ZL2PD9TQNF"],"anonymizeIP":true,"id":"default"}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"intro","docs":[{"id":"intro","path":"/docs/intro","sidebar":"tutorialSidebar"},{"id":"python-client","path":"/docs/python-client","sidebar":"tutorialSidebar"},{"id":"using-zeno","path":"/docs/using-zeno","sidebar":"tutorialSidebar"},{"id":"views/existing","path":"/docs/views/existing","sidebar":"tutorialSidebar"},{"id":"views/spec/other","path":"/docs/views/spec/other","sidebar":"tutorialSidebar"},{"id":"views/spec/spec","path":"/docs/views/spec/","sidebar":"tutorialSidebar"},{"id":"views/spec/table","path":"/docs/views/spec/table","sidebar":"tutorialSidebar"},{"id":"views/views","path":"/docs/views/","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/intro","label":"intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.1","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.4.1"},"docusaurus-plugin-google-tag-manager":{"type":"package","name":"@docusaurus/plugin-google-tag-manager","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"}}}'),u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(412),o=n(5742),i=n(8780),l=n(7961);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),u=n(412);const c=a.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:E}=(0,d.C)(),k=(0,a.useContext)(c),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const _=f||p;const x=(0,s.Z)(_),C=_?.replace("pathname://","");let T=void 0!==C?(A=C,b&&(e=>e.startsWith("/"))(A)?E(A):A):void 0;var A;T&&x&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const L=(0,a.useRef)(!1),N=n?o.OL:o.rU,P=u.Z.canUseIntersectionObserver,O=(0,a.useRef)(),I=()=>{L.current||null==T||(window.docusaurus.preload(T),L.current=!0)};(0,a.useEffect)((()=>(!P&&x&&null!=T&&window.docusaurus.prefetch(T),()=>{P&&O.current&&O.current.disconnect()})),[O,T,P,x]);const R=T?.startsWith("#")??!1,M=!T||!x||R;return M||h||k.collectLink(T),M?a.createElement("a",(0,r.Z)({ref:S,href:T},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(N,(0,r.Z)({},v,{onMouseEnter:I,onTouchStart:I,innerRef:e=>{S.current=e,P&&e&&x&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),O.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const p=a.forwardRef(f)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>f,_r:()=>c,Jo:()=>h,zh:()=>d,yW:()=>m,gB:()=>p});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6657:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(9510)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},7961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(7462),s=n(6550),u=n(5999),c=n(5936);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var h=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(g,{className:v.skipToContent})}var w=n(6668),E=n(9689);function k(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(k,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(C,{className:T.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:T.announcementBarClose}))}var L=n(2961),N=n(2466);var P=n(902),O=n(3102);const I=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,L.e)(),t=(0,O.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,P.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(I.Provider,{value:n},t)}function M(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(I);if(!e)throw new P.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,O.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:M(o)})),[a,o,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var B=n(2949),z=n(2389);function $(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const j={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const l=(0,z.Z)(),s=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(j.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",j.toggleButton,!l&&j.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement($,{className:(0,a.Z)(j.toggleIcon,j.lightToggleIcon)}),r.createElement(U,{className:(0,a.Z)(j.toggleIcon,j.darkToggleIcon)})))}const H=r.memo(Z),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,B.I)();return a?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var G=n(1327);function q(){return r.createElement(G.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,L.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(k,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(q,null),r.createElement(W,{className:"margin-right--md"}),r.createElement(Y,null))}var X=n(9960),Q=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,Q.Z)(a),p=(0,Q.Z)(t),m=(0,Q.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,J.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(te.Z,u&&{width:12,height:12}))};return o?r.createElement(X.Z,(0,l.Z)({href:c?m:o},d,h)):r.createElement(X.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,h))}function re(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ae(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function oe(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ae:re;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),le=n(8596),se=n(2263);function ue(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(_e,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:o,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(_e,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const a=t?de:ce;return r.createElement(a,n)}var pe=n(4711);function me(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ge="iconLanguage_nlXk";var he=n(1875);const be={searchBox:"searchBox_ZlJk"};function ve(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,be.searchBox)},t)}var ye=n(143),we=n(2802);var Ee=n(373);const ke=e=>e.docs.find((t=>t.id===e.mainDocId));const Se={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),g=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:ge}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ve,{className:n},r.createElement(he.Z,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.vY)(t,a);return null===s?null:r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,we.lO)(a)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(oe,(0,l.Z)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,ye.Iw)(n),m=(0,ye.gB)(n),{savePreferredVersionName:g}=(0,Ee.J)(n),h=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??ke(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...i],b=(0,we.lO)(n)[0],v=t&&h.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:ke(b).path;return h.length<=1?r.createElement(oe,(0,l.Z)({},c,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},c,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function _e(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Se[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function xe(){const e=(0,L.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(_e,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ce(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Te(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(Ce,{onClick:()=>t.hide()}),t.content)}function Ae(){const e=(0,L.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(F,{header:r.createElement(K,null),primaryMenu:r.createElement(xe,null),secondaryMenu:r.createElement(Te,null)}):null}const Le={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ne(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Pe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,L.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,N.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Le.navbarHideable,!s&&Le.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Ne,{onClick:i.toggle}),r.createElement(Ae,null))}var Oe=n(8780);const Ie={errorBoundaryError:"errorBoundaryError_a6uf"};function Re(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Me(e){let{error:t}=e;const n=(0,Oe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Ie.errorBoundaryError},n)}class De extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Fe="right";function Be(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function ze(){const{toggle:e,shown:t}=(0,L.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Be,null))}const $e={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(De,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(_e,e)))))}function je(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Ze(){const e=(0,L.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??Fe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(je,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(ze,null),r.createElement(q,null),r.createElement(Ue,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ue,{items:a}),r.createElement(W,{className:$e.colorModeToggle}),!o&&r.createElement(ve,null,r.createElement(he.Z,null)))})}function He(){return r.createElement(Pe,null,r.createElement(Ze,null))}function Ve(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,u=(0,Q.Z)(n),c=(0,Q.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(X.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?c:a}:{to:u},s),o,a&&!(0,J.Z)(a)&&r.createElement(te.Z,null))}function We(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ve,{item:t}))}function Ge(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(We,{key:t,item:e})))))}function qe(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Ge,{key:t,column:e}))))}function Ye(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ke(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ve,{item:t})}function Xe(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ke,{item:e}),t.length!==n+1&&r.createElement(Ye,null))))))}function Qe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(qe,{columns:t}):r.createElement(Xe,{links:t})}var Je=n(941);const et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Q.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Je.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?r.createElement(X.Z,{href:t.href,className:et.footerLogoLink,target:t.target},r.createElement(tt,{logo:t})):r.createElement(tt,{logo:t})}function rt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function ot(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(at,{style:o,links:n&&n.length>0&&r.createElement(Qe,{links:n}),logo:a&&r.createElement(nt,{logo:a}),copyright:t&&r.createElement(rt,{copyright:t})})}const it=r.memo(ot),lt=(0,P.Qc)([B.S,E.pl,N.OC,Ee.L5,i.VC,function(e){let{children:t}=e;return r.createElement(O.n2,null,r.createElement(L.M,null,r.createElement(R,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ut(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Re,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Me,{error:t})))))}const ct={mainWrapper:"mainWrapper_z2l0"};function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,b.t)(),r.createElement(st,null,r.createElement(i.d,{title:s,description:u}),r.createElement(y,null),r.createElement(A,null),r.createElement(He,null),r.createElement("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,ct.mainWrapper,l)},r.createElement(o.Z,{fallback:e=>r.createElement(ut,e)},t)),!n&&r.createElement(it,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),u=n(941);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(u.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(u?.href||"/"),g=n?"":t,h=u?.alt??g;return a.createElement(o.Z,(0,r.Z)({to:m},p,u?.target&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>h});var r=n(7462),a=n(7294),o=n(412),i=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return d(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!o.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,a.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:o}),a.createElement(t,{ref:u,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:l},r)}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function h(e){let{lazy:t,...n}=e;const r=t?g:m;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>h});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(2802),s=n(902),u=n(12);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function h(e){let{children:t}=e;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(7294),a=n(3102),o=n(7524),i=n(6550),l=(n(1688),n(902));function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6668);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>g,cE:()=>d,hI:()=>E,lO:()=>v,vY:()=>w,oz:()=>y,s1:()=>b});var r=n(7294),a=n(6550),o=n(8790),i=n(143),l=n(373),s=n(1116);function u(e){return Array.from(new Set(e))}var c=n(8596);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||m(e.items,t))}function h(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,c.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,c.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function b(){const e=(0,s.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?h({sidebarItems:e.items,pathname:t}):null}function v(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,a].filter(Boolean))),[t,n,a])}function y(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=v(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:u}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294),n(1688);const r="localStorage";function a(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>A,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],g=n[2],h=n[3],b=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=g&&null!=m&&m!==g,k="+"===y||"*"===y,S="?"===y||"*"===y,_=n[2]||c,x=b||v;r.push({name:h||o++,prefix:g||"",delimiter:_,optional:S,repeat:k,partial:E,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+s(_)+"]+?"})}}return i{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=k.value.length,k=k.next){var _=k.value;if(t.length>e.length)return;if(!(_ instanceof a)){var x,C=1;if(v){if(!(x=o(E,S,e,b))||x.index>=e.length)break;var T=x.index,A=x.index+x[0].length,L=S;for(L+=k.value.length;T>=L;)L+=(k=k.next).value.length;if(S=L-=k.value.length,k.value instanceof a)continue;for(var N=k;N!==t.tail&&(Ld.reach&&(d.reach=R);var M=k.prev;if(O&&(M=s(t,M,O),S+=O.length),u(t,M,C),k=s(t,M,new a(f,h?r.tokenize(P,h):P,y,P)),I&&s(t,k,I),C>1){var D={cause:f+","+m,reach:R};i(e,t,n,k.prev,S,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},4277:()=>{Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json},9930:()=>{!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},9510:(e,t,n)=>{var r={"./prism-json":4277,"./prism-toml":9930};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=9510},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n