diff --git a/404.html b/404.html index cae08e17..8df84139 100644 --- a/404.html +++ b/404.html @@ -14,8 +14,8 @@ - - + +
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.

diff --git a/api-reference-docs/_static/documentation_options.js b/api-reference-docs/_static/documentation_options.js index d5dcf857..57aaa2d0 100644 --- a/api-reference-docs/_static/documentation_options.js +++ b/api-reference-docs/_static/documentation_options.js @@ -1,5 +1,5 @@ const DOCUMENTATION_OPTIONS = { - VERSION: '0.16.0', + VERSION: '0.17.0', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/api-reference-docs/genindex.html b/api-reference-docs/genindex.html index 35ffbc4d..cd1a9c8d 100644 --- a/api-reference-docs/genindex.html +++ b/api-reference-docs/genindex.html @@ -3,7 +3,7 @@ - Index — Groundlight Python SDK 0.16.0 documentation + Index — Groundlight Python SDK 0.17.0 documentation @@ -13,7 +13,7 @@ - + @@ -33,7 +33,7 @@ Groundlight Python SDK
- 0.16.0 + 0.17.0
@@ -207,13 +207,23 @@

M

  • (model.ImageQuery attribute)
  • - - +

    N

    diff --git a/api-reference-docs/index.html b/api-reference-docs/index.html index b31fb4bd..8afdc125 100644 --- a/api-reference-docs/index.html +++ b/api-reference-docs/index.html @@ -4,7 +4,7 @@ - Welcome to Groundlight Python SDK’s documentation! — Groundlight Python SDK 0.16.0 documentation + Welcome to Groundlight Python SDK’s documentation! — Groundlight Python SDK 0.17.0 documentation @@ -14,7 +14,7 @@ - + @@ -35,7 +35,7 @@ Groundlight Python SDK
    - 0.16.0 + 0.17.0
    diff --git a/api-reference-docs/models.html b/api-reference-docs/models.html index f358200d..abbedc76 100644 --- a/api-reference-docs/models.html +++ b/api-reference-docs/models.html @@ -4,7 +4,7 @@ - SDK Client — Groundlight Python SDK 0.16.0 documentation + SDK Client — Groundlight Python SDK 0.17.0 documentation @@ -14,7 +14,7 @@ - + @@ -35,7 +35,7 @@ Groundlight Python SDK
    - 0.16.0 + 0.17.0
    @@ -85,6 +85,7 @@
  • Detector.name
  • Detector.query
  • Detector.type
  • +
  • Detector.model_computed_fields
  • ImageQuery
  • PaginatedDetectorList
  • PaginatedImageQueryList
  • @@ -800,7 +804,11 @@

    API Response Objects "$defs": { "DetectorTypeEnum": { "const": "detector", - "title": "DetectorTypeEnum" + "enum": [ + "detector" + ], + "title": "DetectorTypeEnum", + "type": "string" } }, "required": [ @@ -906,6 +914,12 @@

    API Response Objects

    The type of this object.

    +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    +
    @@ -1038,7 +1052,11 @@

    API Response Objects }, "ImageQueryTypeEnum": { "const": "image_query", - "title": "ImageQueryTypeEnum" + "enum": [ + "image_query" + ], + "title": "ImageQueryTypeEnum", + "type": "string" }, "ResultTypeEnum": { "enum": [ @@ -1139,6 +1157,12 @@

    API Response Objects

    The type of this object.

    +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    +
    @@ -1282,7 +1306,11 @@

    API Response Objects }, "DetectorTypeEnum": { "const": "detector", - "title": "DetectorTypeEnum" + "enum": [ + "detector" + ], + "title": "DetectorTypeEnum", + "type": "string" } }, "required": [ @@ -1322,6 +1350,12 @@

    API Response Objectsfield results: List[Detector] [Required]

    +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    +
    @@ -1513,7 +1547,11 @@

    API Response Objects }, "ImageQueryTypeEnum": { "const": "image_query", - "title": "ImageQueryTypeEnum" + "enum": [ + "image_query" + ], + "title": "ImageQueryTypeEnum", + "type": "string" }, "ResultTypeEnum": { "enum": [ @@ -1561,6 +1599,12 @@

    API Response Objectsfield results: List[ImageQuery] [Required]

    +
    +
    +model_computed_fields: ClassVar[dict[str, ComputedFieldInfo]] = {}
    +

    A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

    +
    + diff --git a/api-reference-docs/objects.inv b/api-reference-docs/objects.inv index b722809f..4e363926 100644 Binary files a/api-reference-docs/objects.inv and b/api-reference-docs/objects.inv differ diff --git a/api-reference-docs/search.html b/api-reference-docs/search.html index 0639dd66..d2ed97ce 100644 --- a/api-reference-docs/search.html +++ b/api-reference-docs/search.html @@ -3,7 +3,7 @@ - Search — Groundlight Python SDK 0.16.0 documentation + Search — Groundlight Python SDK 0.17.0 documentation @@ -14,7 +14,7 @@ - + @@ -36,7 +36,7 @@ Groundlight Python SDK
    - 0.16.0 + 0.17.0
    diff --git a/api-reference-docs/searchindex.js b/api-reference-docs/searchindex.js index 10c315d8..11297eb1 100644 --- a/api-reference-docs/searchindex.js +++ b/api-reference-docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["index", "models"], "filenames": ["index.rst", "models.rst"], "titles": ["Welcome to Groundlight Python SDK\u2019s documentation!", "SDK Client"], "terms": {"For": [0, 1], "detail": 0, "view": 0, "sourc": 0, "code": 0, "visit": 0, "github": 0, "repositori": 0, "client": 0, "api": 0, "respons": 0, "object": 0, "detector": [0, 1], "imagequeri": [0, 1], "paginateddetectorlist": [0, 1], "paginatedimagequerylist": [0, 1], "class": 1, "groundlight": 1, "endpoint": 1, "str": 1, "none": 1, "api_token": 1, "disable_tls_verif": 1, "bool": 1, "access": 1, "cloud": 1, "servic": 1, "The": 1, "token": 1, "auth": 1, "i": 1, "specifi": 1, "through": 1, "groundlight_api_token": 1, "environ": 1, "variabl": 1, "default": 1, "exampl": 1, "usag": 1, "gl": 1, "get_or_create_detector": 1, "name": 1, "door": 1, "queri": 1, "lock": 1, "confidence_threshold": 1, "0": 1, "9": 1, "image_queri": 1, "submit_image_queri": 1, "imag": 1, "path": 1, "jpeg": 1, "wait": 1, "human_review": 1, "alwai": 1, "print": 1, "f": 1, "confid": 1, "result": 1, "poll": 1, "backend": 1, "answer": 1, "wait_for_confident_result": 1, "timeout_sec": 1, "60": 1, "examin": 1, "new": 1, "after": 1, "continu": 1, "train": 1, "ml": 1, "model": 1, "ha": 1, "re": 1, "evalu": 1, "paramet": 1, "__init__": 1, "construct": 1, "option": 1, "differ": 1, "us": 1, "thi": 1, "your": 1, "call": 1, "If": 1, "unset": 1, "fallback": 1, "set": 1, "true": 1, "skip": 1, "verifi": 1, "ssl": 1, "tl": 1, "certif": 1, "when": 1, "from": 1, "http": 1, "server": 1, "check": 1, "disable_tls_verifi": 1, "1": 1, "By": 1, "ar": 1, "disabl": 1, "verif": 1, "self": 1, "sign": 1, "edg": 1, "It": 1, "unadvis": 1, "connect": 1, "directli": 1, "return": 1, "type": 1, "add_label": 1, "label": 1, "add": 1, "an": 1, "": 1, "question": 1, "either": 1, "id": 1, "string": 1, "ye": 1, "NO": 1, "ask_async": 1, "byte": 1, "bytesio": 1, "bufferedread": 1, "unavailablemodul": 1, "patience_tim": 1, "float": 1, "metadata": 1, "dict": 1, "inspection_id": 1, "conveni": 1, "method": 1, "submit": 1, "asynchron": 1, "equival": 1, "want_async": 1, "get_image_queri": 1, "retriev": 1, "like": 1, "det_12345": 1, "sever": 1, "possibl": 1, "format": 1, "filenam": 1, "file": 1, "arrai": 1, "numpi": 1, "valu": 1, "255": 1, "dimens": 1, "h": 1, "w": 1, "3": 1, "bgr": 1, "order": 1, "note": 1, "opencv": 1, "rgb": 1, "img": 1, "revers": 1, "channel": 1, "pil": 1, "ani": 1, "binari": 1, "must": 1, "encod": 1, "alreadi": 1, "pixel": 1, "get": 1, "convert": 1, "high": 1, "qualiti": 1, "befor": 1, "send": 1, "how": 1, "long": 1, "second": 1, "longer": 1, "more": 1, "arriv": 1, "within": 1, "updat": 1, "predict": 1, "base": 1, "stronger": 1, "find": 1, "addition": 1, "priorit": 1, "human": 1, "review": 1, "necessari": 1, "soft": 1, "side": 1, "timeout": 1, "threshold": 1, "onli": 1, "never": 1, "most": 1, "user": 1, "omit": 1, "account": 1, "inspect": 1, "report": 1, "enabl": 1, "associ": 1, "A": 1, "dictionari": 1, "json": 1, "custom": 1, "kei": 1, "limit": 1, "1kb": 1, "you": 1, "can": 1, "later": 1, "have": 1, "assert": 1, "do": 1, "attempt": 1, "all": 1, "async": 1, "being": 1, "comput": 1, "avail": 1, "anoth": 1, "machin": 1, "abov": 1, "block": 1, "until": 1, "now": 1, "altern": 1, "without": 1, "ask_confid": 1, "reach": 1, "period": 1, "pass": 1, "ask_ml": 1, "first": 1, "provid": 1, "create_detector": 1, "pipeline_config": 1, "creat": 1, "given": 1, "pipelin": 1, "config": 1, "get_detector": 1, "get_detector_by_nam": 1, "tri": 1, "look": 1, "up": 1, "exist": 1, "otherwis": 1, "list_detector": 1, "page": 1, "int": 1, "page_s": 1, "10": 1, "list": 1, "out": 1, "own": 1, "number": 1, "size": 1, "list_image_queri": 1, "start_inspect": 1, "start": 1, "uniqu": 1, "identifi": 1, "stop_inspect": 1, "stop": 1, "rais": 1, "except": 1, "indic": 1, "wa": 1, "successfulli": 1, "fail": 1, "depend": 1, "fals": 1, "soon": 1, "update_detector_confidence_threshold": 1, "detector_id": 1, "rtype": 1, "update_inspection_metadata": 1, "user_provided_kei": 1, "user_provided_valu": 1, "pair": 1, "30": 1, "level": 1, "current": 1, "done": 1, "exponenti": 1, "back": 1, "off": 1, "maximum": 1, "wait_for_ml_result": 1, "whoami": 1, "usernam": 1, "pydant": 1, "show": 1, "schema": 1, "titl": 1, "properti": 1, "descript": 1, "allof": 1, "ref": 1, "def": 1, "detectortypeenum": 1, "created_at": 1, "date": 1, "time": 1, "At": 1, "short": 1, "maxlength": 1, "200": 1, "about": 1, "group_nam": 1, "which": 1, "group": 1, "should": 1, "part": 1, "below": 1, "minimum": 1, "anyof": 1, "null": 1, "mode": 1, "mode_configur": 1, "configur": 1, "const": 1, "requir": 1, "field": 1, "datetim": 1, "confloat": 1, "ge": 1, "le": 1, "constraint": 1, "constr": 1, "max_length": 1, "imagequerytypeenum": 1, "result_typ": 1, "resulttypeenum": 1, "what": 1, "we": 1, "binaryclassificationresult": 1, "countingresult": 1, "patienc": 1, "5": 1, "min": 1, "need": 1, "accept": 1, "integ": 1, "enum": 1, "binary_classif": 1, "count": 1, "123": 1, "next": 1, "uri": 1, "minlength": 1, "org": 1, "4": 1, "previou": 1, "2": 1, "item": 1, "pydantic_cor": 1, "_pydantic_cor": 1, "url": 1, "anyurl": 1}, "objects": {"groundlight": [[1, 0, 1, "", "Groundlight"]], "groundlight.Groundlight": [[1, 1, 1, "", "__init__"], [1, 1, 1, "", "add_label"], [1, 1, 1, "", "ask_async"], [1, 1, 1, "", "ask_confident"], [1, 1, 1, "", "ask_ml"], [1, 1, 1, "", "create_detector"], [1, 1, 1, "", "get_detector"], [1, 1, 1, "", "get_detector_by_name"], [1, 1, 1, "", "get_image_query"], [1, 1, 1, "", "get_or_create_detector"], [1, 1, 1, "", "list_detectors"], [1, 1, 1, "", "list_image_queries"], [1, 1, 1, "", "start_inspection"], [1, 1, 1, "", "stop_inspection"], [1, 1, 1, "", "submit_image_query"], [1, 1, 1, "", "update_detector_confidence_threshold"], [1, 1, 1, "", "update_inspection_metadata"], [1, 1, 1, "", "wait_for_confident_result"], [1, 1, 1, "", "wait_for_ml_result"], [1, 1, 1, "", "whoami"]], "model": [[1, 2, 1, "", "Detector"], [1, 2, 1, "", "ImageQuery"], [1, 2, 1, "", "PaginatedDetectorList"], [1, 2, 1, "", "PaginatedImageQueryList"]], "model.Detector": [[1, 3, 1, "", "confidence_threshold"], [1, 3, 1, "", "created_at"], [1, 3, 1, "", "group_name"], [1, 3, 1, "", "id"], [1, 3, 1, "", "metadata"], [1, 3, 1, "", "mode"], [1, 3, 1, "", "mode_configuration"], [1, 3, 1, "", "name"], [1, 3, 1, "", "query"], [1, 3, 1, "", "type"]], "model.ImageQuery": [[1, 3, 1, "", "confidence_threshold"], [1, 3, 1, "", "created_at"], [1, 3, 1, "", "detector_id"], [1, 3, 1, "", "id"], [1, 3, 1, "", "metadata"], [1, 3, 1, "", "patience_time"], [1, 3, 1, "", "query"], [1, 3, 1, "", "result"], [1, 3, 1, "", "result_type"], [1, 3, 1, "", "type"]], "model.PaginatedDetectorList": [[1, 3, 1, "", "count"], [1, 3, 1, "", "next"], [1, 3, 1, "", "previous"], [1, 3, 1, "", "results"]], "model.PaginatedImageQueryList": [[1, 3, 1, "", "count"], [1, 3, 1, "", "next"], [1, 3, 1, "", "previous"], [1, 3, 1, "", "results"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:pydantic_model", "3": "py:pydantic_field"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "pydantic_model", "Python model"], "3": ["py", "pydantic_field", "Python field"]}, "titleterms": {"welcom": 0, "groundlight": 0, "python": 0, "sdk": [0, 1], "": 0, "document": 0, "content": 0, "client": 1, "api": 1, "respons": 1, "object": 1}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Welcome to Groundlight Python SDK\u2019s documentation!": [[0, "welcome-to-groundlight-python-sdk-s-documentation"]], "Contents:": [[0, null]], "SDK Client": [[1, "sdk-client"]], "API Response Objects": [[1, "api-response-objects"]]}, "indexentries": {"groundlight (class in groundlight)": [[1, "groundlight.Groundlight"]], "__init__() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.__init__"]], "add_label() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.add_label"]], "ask_async() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.ask_async"]], "ask_confident() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.ask_confident"]], "ask_ml() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.ask_ml"]], "confidence_threshold (model.detector attribute)": [[1, "model.Detector.confidence_threshold"]], "confidence_threshold (model.imagequery attribute)": [[1, "model.ImageQuery.confidence_threshold"]], "count (model.paginateddetectorlist attribute)": [[1, "model.PaginatedDetectorList.count"]], "count (model.paginatedimagequerylist attribute)": [[1, "model.PaginatedImageQueryList.count"]], "create_detector() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.create_detector"]], "created_at (model.detector attribute)": [[1, "model.Detector.created_at"]], "created_at (model.imagequery attribute)": [[1, "model.ImageQuery.created_at"]], "detector_id (model.imagequery attribute)": [[1, "model.ImageQuery.detector_id"]], "get_detector() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.get_detector"]], "get_detector_by_name() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.get_detector_by_name"]], "get_image_query() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.get_image_query"]], "get_or_create_detector() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.get_or_create_detector"]], "group_name (model.detector attribute)": [[1, "model.Detector.group_name"]], "id (model.detector attribute)": [[1, "model.Detector.id"]], "id (model.imagequery attribute)": [[1, "model.ImageQuery.id"]], "list_detectors() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.list_detectors"]], "list_image_queries() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.list_image_queries"]], "metadata (model.detector attribute)": [[1, "model.Detector.metadata"]], "metadata (model.imagequery attribute)": [[1, "model.ImageQuery.metadata"]], "mode (model.detector attribute)": [[1, "model.Detector.mode"]], "mode_configuration (model.detector attribute)": [[1, "model.Detector.mode_configuration"]], "name (model.detector attribute)": [[1, "model.Detector.name"]], "next (model.paginateddetectorlist attribute)": [[1, "model.PaginatedDetectorList.next"]], "next (model.paginatedimagequerylist attribute)": [[1, "model.PaginatedImageQueryList.next"]], "patience_time (model.imagequery attribute)": [[1, "model.ImageQuery.patience_time"]], "previous (model.paginateddetectorlist attribute)": [[1, "model.PaginatedDetectorList.previous"]], "previous (model.paginatedimagequerylist attribute)": [[1, "model.PaginatedImageQueryList.previous"]], "query (model.detector attribute)": [[1, "model.Detector.query"]], "query (model.imagequery attribute)": [[1, "model.ImageQuery.query"]], "result (model.imagequery attribute)": [[1, "model.ImageQuery.result"]], "result_type (model.imagequery attribute)": [[1, "model.ImageQuery.result_type"]], "results (model.paginateddetectorlist attribute)": [[1, "model.PaginatedDetectorList.results"]], "results (model.paginatedimagequerylist attribute)": [[1, "model.PaginatedImageQueryList.results"]], "start_inspection() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.start_inspection"]], "stop_inspection() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.stop_inspection"]], "submit_image_query() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.submit_image_query"]], "type (model.detector attribute)": [[1, "model.Detector.type"]], "type (model.imagequery attribute)": [[1, "model.ImageQuery.type"]], "update_detector_confidence_threshold() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.update_detector_confidence_threshold"]], "update_inspection_metadata() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.update_inspection_metadata"]], "wait_for_confident_result() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.wait_for_confident_result"]], "wait_for_ml_result() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.wait_for_ml_result"]], "whoami() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.whoami"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["index", "models"], "filenames": ["index.rst", "models.rst"], "titles": ["Welcome to Groundlight Python SDK\u2019s documentation!", "SDK Client"], "terms": {"For": [0, 1], "detail": 0, "view": 0, "sourc": 0, "code": 0, "visit": 0, "github": 0, "repositori": 0, "client": 0, "api": 0, "respons": 0, "object": 0, "detector": [0, 1], "imagequeri": [0, 1], "paginateddetectorlist": [0, 1], "paginatedimagequerylist": [0, 1], "class": 1, "groundlight": 1, "endpoint": 1, "str": 1, "none": 1, "api_token": 1, "disable_tls_verif": 1, "bool": 1, "access": 1, "cloud": 1, "servic": 1, "The": 1, "token": 1, "auth": 1, "i": 1, "specifi": 1, "through": 1, "groundlight_api_token": 1, "environ": 1, "variabl": 1, "default": 1, "exampl": 1, "usag": 1, "gl": 1, "get_or_create_detector": 1, "name": 1, "door": 1, "queri": 1, "lock": 1, "confidence_threshold": 1, "0": 1, "9": 1, "image_queri": 1, "submit_image_queri": 1, "imag": 1, "path": 1, "jpeg": 1, "wait": 1, "human_review": 1, "alwai": 1, "print": 1, "f": 1, "confid": 1, "result": 1, "poll": 1, "backend": 1, "answer": 1, "wait_for_confident_result": 1, "timeout_sec": 1, "60": 1, "examin": 1, "new": 1, "after": 1, "continu": 1, "train": 1, "ml": 1, "model": 1, "ha": 1, "re": 1, "evalu": 1, "paramet": 1, "__init__": 1, "construct": 1, "option": 1, "differ": 1, "us": 1, "thi": 1, "your": 1, "call": 1, "If": 1, "unset": 1, "fallback": 1, "set": 1, "true": 1, "skip": 1, "verifi": 1, "ssl": 1, "tl": 1, "certif": 1, "when": 1, "from": 1, "http": 1, "server": 1, "check": 1, "disable_tls_verifi": 1, "1": 1, "By": 1, "ar": 1, "disabl": 1, "verif": 1, "self": 1, "sign": 1, "edg": 1, "It": 1, "unadvis": 1, "connect": 1, "directli": 1, "return": 1, "type": 1, "add_label": 1, "label": 1, "add": 1, "an": 1, "": 1, "question": 1, "either": 1, "id": 1, "string": 1, "ye": 1, "NO": 1, "ask_async": 1, "byte": 1, "bytesio": 1, "bufferedread": 1, "unavailablemodul": 1, "patience_tim": 1, "float": 1, "metadata": 1, "dict": 1, "inspection_id": 1, "conveni": 1, "method": 1, "submit": 1, "asynchron": 1, "equival": 1, "want_async": 1, "get_image_queri": 1, "retriev": 1, "like": 1, "det_12345": 1, "sever": 1, "possibl": 1, "format": 1, "filenam": 1, "file": 1, "arrai": 1, "numpi": 1, "valu": 1, "255": 1, "dimens": 1, "h": 1, "w": 1, "3": 1, "bgr": 1, "order": 1, "note": 1, "opencv": 1, "rgb": 1, "img": 1, "revers": 1, "channel": 1, "pil": 1, "ani": 1, "binari": 1, "must": 1, "encod": 1, "alreadi": 1, "pixel": 1, "get": 1, "convert": 1, "high": 1, "qualiti": 1, "befor": 1, "send": 1, "how": 1, "long": 1, "second": 1, "longer": 1, "more": 1, "arriv": 1, "within": 1, "updat": 1, "predict": 1, "base": 1, "stronger": 1, "find": 1, "addition": 1, "priorit": 1, "human": 1, "review": 1, "necessari": 1, "soft": 1, "side": 1, "timeout": 1, "threshold": 1, "onli": 1, "never": 1, "most": 1, "user": 1, "omit": 1, "account": 1, "inspect": 1, "report": 1, "enabl": 1, "associ": 1, "A": 1, "dictionari": 1, "json": 1, "custom": 1, "kei": 1, "limit": 1, "1kb": 1, "you": 1, "can": 1, "later": 1, "have": 1, "assert": 1, "do": 1, "attempt": 1, "all": 1, "async": 1, "being": 1, "comput": 1, "avail": 1, "anoth": 1, "machin": 1, "abov": 1, "block": 1, "until": 1, "now": 1, "altern": 1, "without": 1, "ask_confid": 1, "reach": 1, "period": 1, "pass": 1, "ask_ml": 1, "first": 1, "provid": 1, "create_detector": 1, "pipeline_config": 1, "creat": 1, "given": 1, "pipelin": 1, "config": 1, "get_detector": 1, "get_detector_by_nam": 1, "tri": 1, "look": 1, "up": 1, "exist": 1, "otherwis": 1, "list_detector": 1, "page": 1, "int": 1, "page_s": 1, "10": 1, "list": 1, "out": 1, "own": 1, "number": 1, "size": 1, "list_image_queri": 1, "start_inspect": 1, "start": 1, "uniqu": 1, "identifi": 1, "stop_inspect": 1, "stop": 1, "rais": 1, "except": 1, "indic": 1, "wa": 1, "successfulli": 1, "fail": 1, "depend": 1, "fals": 1, "soon": 1, "update_detector_confidence_threshold": 1, "detector_id": 1, "rtype": 1, "update_inspection_metadata": 1, "user_provided_kei": 1, "user_provided_valu": 1, "pair": 1, "30": 1, "level": 1, "current": 1, "done": 1, "exponenti": 1, "back": 1, "off": 1, "maximum": 1, "wait_for_ml_result": 1, "whoami": 1, "usernam": 1, "pydant": 1, "show": 1, "schema": 1, "titl": 1, "properti": 1, "descript": 1, "allof": 1, "ref": 1, "def": 1, "detectortypeenum": 1, "created_at": 1, "date": 1, "time": 1, "At": 1, "short": 1, "maxlength": 1, "200": 1, "about": 1, "group_nam": 1, "which": 1, "group": 1, "should": 1, "part": 1, "below": 1, "minimum": 1, "anyof": 1, "null": 1, "mode": 1, "mode_configur": 1, "configur": 1, "const": 1, "enum": 1, "requir": 1, "field": 1, "datetim": 1, "confloat": 1, "ge": 1, "le": 1, "constraint": 1, "constr": 1, "max_length": 1, "model_computed_field": 1, "classvar": 1, "computedfieldinfo": 1, "correspond": 1, "imagequerytypeenum": 1, "result_typ": 1, "resulttypeenum": 1, "what": 1, "we": 1, "binaryclassificationresult": 1, "countingresult": 1, "patienc": 1, "5": 1, "min": 1, "need": 1, "accept": 1, "integ": 1, "binary_classif": 1, "count": 1, "123": 1, "next": 1, "uri": 1, "minlength": 1, "org": 1, "4": 1, "previou": 1, "2": 1, "item": 1, "pydantic_cor": 1, "_pydantic_cor": 1, "url": 1, "anyurl": 1}, "objects": {"groundlight": [[1, 0, 1, "", "Groundlight"]], "groundlight.Groundlight": [[1, 1, 1, "", "__init__"], [1, 1, 1, "", "add_label"], [1, 1, 1, "", "ask_async"], [1, 1, 1, "", "ask_confident"], [1, 1, 1, "", "ask_ml"], [1, 1, 1, "", "create_detector"], [1, 1, 1, "", "get_detector"], [1, 1, 1, "", "get_detector_by_name"], [1, 1, 1, "", "get_image_query"], [1, 1, 1, "", "get_or_create_detector"], [1, 1, 1, "", "list_detectors"], [1, 1, 1, "", "list_image_queries"], [1, 1, 1, "", "start_inspection"], [1, 1, 1, "", "stop_inspection"], [1, 1, 1, "", "submit_image_query"], [1, 1, 1, "", "update_detector_confidence_threshold"], [1, 1, 1, "", "update_inspection_metadata"], [1, 1, 1, "", "wait_for_confident_result"], [1, 1, 1, "", "wait_for_ml_result"], [1, 1, 1, "", "whoami"]], "model": [[1, 2, 1, "", "Detector"], [1, 2, 1, "", "ImageQuery"], [1, 2, 1, "", "PaginatedDetectorList"], [1, 2, 1, "", "PaginatedImageQueryList"]], "model.Detector": [[1, 3, 1, "", "confidence_threshold"], [1, 3, 1, "", "created_at"], [1, 3, 1, "", "group_name"], [1, 3, 1, "", "id"], [1, 3, 1, "", "metadata"], [1, 3, 1, "", "mode"], [1, 3, 1, "", "mode_configuration"], [1, 4, 1, "", "model_computed_fields"], [1, 3, 1, "", "name"], [1, 3, 1, "", "query"], [1, 3, 1, "", "type"]], "model.ImageQuery": [[1, 3, 1, "", "confidence_threshold"], [1, 3, 1, "", "created_at"], [1, 3, 1, "", "detector_id"], [1, 3, 1, "", "id"], [1, 3, 1, "", "metadata"], [1, 4, 1, "", "model_computed_fields"], [1, 3, 1, "", "patience_time"], [1, 3, 1, "", "query"], [1, 3, 1, "", "result"], [1, 3, 1, "", "result_type"], [1, 3, 1, "", "type"]], "model.PaginatedDetectorList": [[1, 3, 1, "", "count"], [1, 4, 1, "", "model_computed_fields"], [1, 3, 1, "", "next"], [1, 3, 1, "", "previous"], [1, 3, 1, "", "results"]], "model.PaginatedImageQueryList": [[1, 3, 1, "", "count"], [1, 4, 1, "", "model_computed_fields"], [1, 3, 1, "", "next"], [1, 3, 1, "", "previous"], [1, 3, 1, "", "results"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:pydantic_model", "3": "py:pydantic_field", "4": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "pydantic_model", "Python model"], "3": ["py", "pydantic_field", "Python field"], "4": ["py", "attribute", "Python attribute"]}, "titleterms": {"welcom": 0, "groundlight": 0, "python": 0, "sdk": [0, 1], "": 0, "document": 0, "content": 0, "client": 1, "api": 1, "respons": 1, "object": 1}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Welcome to Groundlight Python SDK\u2019s documentation!": [[0, "welcome-to-groundlight-python-sdk-s-documentation"]], "Contents:": [[0, null]], "SDK Client": [[1, "sdk-client"]], "API Response Objects": [[1, "api-response-objects"]]}, "indexentries": {"groundlight (class in groundlight)": [[1, "groundlight.Groundlight"]], "__init__() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.__init__"]], "add_label() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.add_label"]], "ask_async() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.ask_async"]], "ask_confident() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.ask_confident"]], "ask_ml() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.ask_ml"]], "confidence_threshold (model.detector attribute)": [[1, "model.Detector.confidence_threshold"]], "confidence_threshold (model.imagequery attribute)": [[1, "model.ImageQuery.confidence_threshold"]], "count (model.paginateddetectorlist attribute)": [[1, "model.PaginatedDetectorList.count"]], "count (model.paginatedimagequerylist attribute)": [[1, "model.PaginatedImageQueryList.count"]], "create_detector() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.create_detector"]], "created_at (model.detector attribute)": [[1, "model.Detector.created_at"]], "created_at (model.imagequery attribute)": [[1, "model.ImageQuery.created_at"]], "detector_id (model.imagequery attribute)": [[1, "model.ImageQuery.detector_id"]], "get_detector() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.get_detector"]], "get_detector_by_name() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.get_detector_by_name"]], "get_image_query() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.get_image_query"]], "get_or_create_detector() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.get_or_create_detector"]], "group_name (model.detector attribute)": [[1, "model.Detector.group_name"]], "id (model.detector attribute)": [[1, "model.Detector.id"]], "id (model.imagequery attribute)": [[1, "model.ImageQuery.id"]], "list_detectors() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.list_detectors"]], "list_image_queries() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.list_image_queries"]], "metadata (model.detector attribute)": [[1, "model.Detector.metadata"]], "metadata (model.imagequery attribute)": [[1, "model.ImageQuery.metadata"]], "mode (model.detector attribute)": [[1, "model.Detector.mode"]], "mode_configuration (model.detector attribute)": [[1, "model.Detector.mode_configuration"]], "model_computed_fields (model.detector attribute)": [[1, "model.Detector.model_computed_fields"]], "model_computed_fields (model.imagequery attribute)": [[1, "model.ImageQuery.model_computed_fields"]], "model_computed_fields (model.paginateddetectorlist attribute)": [[1, "model.PaginatedDetectorList.model_computed_fields"]], "model_computed_fields (model.paginatedimagequerylist attribute)": [[1, "model.PaginatedImageQueryList.model_computed_fields"]], "name (model.detector attribute)": [[1, "model.Detector.name"]], "next (model.paginateddetectorlist attribute)": [[1, "model.PaginatedDetectorList.next"]], "next (model.paginatedimagequerylist attribute)": [[1, "model.PaginatedImageQueryList.next"]], "patience_time (model.imagequery attribute)": [[1, "model.ImageQuery.patience_time"]], "previous (model.paginateddetectorlist attribute)": [[1, "model.PaginatedDetectorList.previous"]], "previous (model.paginatedimagequerylist attribute)": [[1, "model.PaginatedImageQueryList.previous"]], "query (model.detector attribute)": [[1, "model.Detector.query"]], "query (model.imagequery attribute)": [[1, "model.ImageQuery.query"]], "result (model.imagequery attribute)": [[1, "model.ImageQuery.result"]], "result_type (model.imagequery attribute)": [[1, "model.ImageQuery.result_type"]], "results (model.paginateddetectorlist attribute)": [[1, "model.PaginatedDetectorList.results"]], "results (model.paginatedimagequerylist attribute)": [[1, "model.PaginatedImageQueryList.results"]], "start_inspection() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.start_inspection"]], "stop_inspection() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.stop_inspection"]], "submit_image_query() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.submit_image_query"]], "type (model.detector attribute)": [[1, "model.Detector.type"]], "type (model.imagequery attribute)": [[1, "model.ImageQuery.type"]], "update_detector_confidence_threshold() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.update_detector_confidence_threshold"]], "update_inspection_metadata() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.update_inspection_metadata"]], "wait_for_confident_result() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.wait_for_confident_result"]], "wait_for_ml_result() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.wait_for_ml_result"]], "whoami() (groundlight.groundlight method)": [[1, "groundlight.Groundlight.whoami"]]}}) \ No newline at end of file diff --git a/assets/js/0b4c8eac.74e8509e.js b/assets/js/0b4c8eac.bae40049.js similarity index 94% rename from assets/js/0b4c8eac.74e8509e.js rename to assets/js/0b4c8eac.bae40049.js index e05441e9..1de3495f 100644 --- a/assets/js/0b4c8eac.74e8509e.js +++ b/assets/js/0b4c8eac.bae40049.js @@ -1 +1 @@ -"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[4067],{7495:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var t=i(5893),r=i(1151);const s={},l="Installing on Raspberry Pi",o={id:"installation/raspberry-pi",title:"Installing on Raspberry Pi",description:"This guide will help you install the Groundlight SDK on Raspberry Pi. The Groundlight SDK requires Python 3.7 or higher.",source:"@site/docs/installation/4-raspberry-pi.md",sourceDirName:"installation",slug:"/installation/raspberry-pi",permalink:"/python-sdk/docs/installation/raspberry-pi",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/installation/4-raspberry-pi.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Installing on Windows",permalink:"/python-sdk/docs/installation/windows"},next:{title:"Installing on NVIDIA Jetson",permalink:"/python-sdk/docs/installation/nvidia-jetson"}},a={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Basic Installation",id:"basic-installation",level:2},{value:"Installing Groundlight SDK",id:"installing-groundlight-sdk",level:3},{value:"Using RTSP Streams",id:"using-rtsp-streams",level:2},{value:"Sample application",id:"sample-application",level:2},{value:"Ready to go!",id:"ready-to-go",level:2}];function h(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"installing-on-raspberry-pi",children:"Installing on Raspberry Pi"}),"\n",(0,t.jsx)(e.p,{children:"This guide will help you install the Groundlight SDK on Raspberry Pi. The Groundlight SDK requires Python 3.7 or higher."}),"\n",(0,t.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(e.p,{children:"Ensure that you have the following installed on your Raspberry Pi:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Python 3.7 or higher"}),"\n",(0,t.jsx)(e.li,{children:"pip (Python package installer)"}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"basic-installation",children:"Basic Installation"}),"\n",(0,t.jsx)(e.p,{children:"Assuming you have Python 3.7 or higher installed on your Raspberry Pi, you can proceed with the following steps to install or upgrade the Groundlight SDK:"}),"\n",(0,t.jsx)(e.h3,{id:"installing-groundlight-sdk",children:"Installing Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"To install the Groundlight SDK using pip, run the following command in your terminal:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:"An ARM-compatible version will automatically get installed. The Groundlight SDK is now installed and ready for use."}),"\n",(0,t.jsx)(e.h2,{id:"using-rtsp-streams",children:"Using RTSP Streams"}),"\n",(0,t.jsxs)(e.p,{children:["If you have ",(0,t.jsx)(e.code,{children:"docker"})," installed on your Raspberry Pi, you can even just run"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"docker run groundlight/stream\n"})}),"\n",(0,t.jsx)(e.p,{children:"as we publish an ARM version of our streaming application to Docker Hub."}),"\n",(0,t.jsx)(e.h2,{id:"sample-application",children:"Sample application"}),"\n",(0,t.jsxs)(e.p,{children:["For a complete end-to-end example of running on a Raspberry Pi, see ",(0,t.jsx)(e.a,{href:"https://github.com/groundlight/raspberry-pi-door-lock",children:"this GitHub repo"}),"."]}),"\n",(0,t.jsx)(e.h2,{id:"ready-to-go",children:"Ready to go!"}),"\n",(0,t.jsxs)(e.p,{children:["You're now ready to start using the Groundlight SDK in your projects. For more information on using the SDK, refer to the ",(0,t.jsx)(e.a,{href:"/docs/getting-started/api-tokens",children:"API Tokens"})," and ",(0,t.jsx)(e.a,{href:"/docs/building-applications",children:"Building Applications"})," documentation pages."]})]})}function p(n={}){const{wrapper:e}={...(0,r.a)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(h,{...n})}):h(n)}},1151:(n,e,i)=>{i.d(e,{Z:()=>o,a:()=>l});var t=i(7294);const r={},s=t.createContext(r);function l(n){const e=t.useContext(s);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function o(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:l(n.components),t.createElement(s.Provider,{value:e},n.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[4067],{7495:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var t=i(5893),r=i(1151);const s={},l="Installing on Raspberry Pi",o={id:"installation/raspberry-pi",title:"Installing on Raspberry Pi",description:"This guide will help you install the Groundlight SDK on Raspberry Pi. The Groundlight SDK requires Python 3.8 or higher.",source:"@site/docs/installation/4-raspberry-pi.md",sourceDirName:"installation",slug:"/installation/raspberry-pi",permalink:"/python-sdk/docs/installation/raspberry-pi",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/installation/4-raspberry-pi.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Installing on Windows",permalink:"/python-sdk/docs/installation/windows"},next:{title:"Installing on NVIDIA Jetson",permalink:"/python-sdk/docs/installation/nvidia-jetson"}},a={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Basic Installation",id:"basic-installation",level:2},{value:"Installing Groundlight SDK",id:"installing-groundlight-sdk",level:3},{value:"Using RTSP Streams",id:"using-rtsp-streams",level:2},{value:"Sample application",id:"sample-application",level:2},{value:"Ready to go!",id:"ready-to-go",level:2}];function h(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"installing-on-raspberry-pi",children:"Installing on Raspberry Pi"}),"\n",(0,t.jsx)(e.p,{children:"This guide will help you install the Groundlight SDK on Raspberry Pi. The Groundlight SDK requires Python 3.8 or higher."}),"\n",(0,t.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(e.p,{children:"Ensure that you have the following installed on your Raspberry Pi:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Python 3.8 or higher"}),"\n",(0,t.jsx)(e.li,{children:"pip (Python package installer)"}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"basic-installation",children:"Basic Installation"}),"\n",(0,t.jsx)(e.p,{children:"Assuming you have Python 3.8 or higher installed on your Raspberry Pi, you can proceed with the following steps to install or upgrade the Groundlight SDK:"}),"\n",(0,t.jsx)(e.h3,{id:"installing-groundlight-sdk",children:"Installing Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"To install the Groundlight SDK using pip, run the following command in your terminal:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:"An ARM-compatible version will automatically get installed. The Groundlight SDK is now installed and ready for use."}),"\n",(0,t.jsx)(e.h2,{id:"using-rtsp-streams",children:"Using RTSP Streams"}),"\n",(0,t.jsxs)(e.p,{children:["If you have ",(0,t.jsx)(e.code,{children:"docker"})," installed on your Raspberry Pi, you can even just run"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"docker run groundlight/stream\n"})}),"\n",(0,t.jsx)(e.p,{children:"as we publish an ARM version of our streaming application to Docker Hub."}),"\n",(0,t.jsx)(e.h2,{id:"sample-application",children:"Sample application"}),"\n",(0,t.jsxs)(e.p,{children:["For a complete end-to-end example of running on a Raspberry Pi, see ",(0,t.jsx)(e.a,{href:"https://github.com/groundlight/raspberry-pi-door-lock",children:"this GitHub repo"}),"."]}),"\n",(0,t.jsx)(e.h2,{id:"ready-to-go",children:"Ready to go!"}),"\n",(0,t.jsxs)(e.p,{children:["You're now ready to start using the Groundlight SDK in your projects. For more information on using the SDK, refer to the ",(0,t.jsx)(e.a,{href:"/docs/getting-started/api-tokens",children:"API Tokens"})," and ",(0,t.jsx)(e.a,{href:"/docs/building-applications",children:"Building Applications"})," documentation pages."]})]})}function p(n={}){const{wrapper:e}={...(0,r.a)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(h,{...n})}):h(n)}},1151:(n,e,i)=>{i.d(e,{Z:()=>o,a:()=>l});var t=i(7294);const r={},s=t.createContext(r);function l(n){const e=t.useContext(s);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function o(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:l(n.components),t.createElement(s.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/14fdb7e5.43f93067.js b/assets/js/14fdb7e5.a6348250.js similarity index 98% rename from assets/js/14fdb7e5.43f93067.js rename to assets/js/14fdb7e5.a6348250.js index ce2e114c..fee73b5e 100644 --- a/assets/js/14fdb7e5.43f93067.js +++ b/assets/js/14fdb7e5.a6348250.js @@ -1 +1 @@ -"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[1355],{1110:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var i=t(5893),r=t(1151);const a={},s="A Serious Example: Retail Analytics",o={id:"getting-started/retail-analytics",title:"A Serious Example: Retail Analytics",description:"Tracking utilization of a customer service counter",source:"@site/docs/getting-started/3-retail-analytics.md",sourceDirName:"getting-started",slug:"/getting-started/retail-analytics",permalink:"/python-sdk/docs/getting-started/retail-analytics",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/getting-started/3-retail-analytics.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Writing Queries",permalink:"/python-sdk/docs/getting-started/writing-queries"},next:{title:"A Fun Example: Dog-on-Couch Detector",permalink:"/python-sdk/docs/getting-started/dog-on-couch"}},l={},c=[{value:"Tracking utilization of a customer service counter",id:"tracking-utilization-of-a-customer-service-counter",level:2},{value:"Requirements",id:"requirements",level:2},{value:"Installation",id:"installation",level:2},{value:"Creating the Application",id:"creating-the-application",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"a-serious-example-retail-analytics",children:"A Serious Example: Retail Analytics"}),"\n",(0,i.jsx)(n.h2,{id:"tracking-utilization-of-a-customer-service-counter",children:"Tracking utilization of a customer service counter"}),"\n",(0,i.jsx)(n.p,{children:"This example demonstrates the application of Groundlight to a retail analytics solution, which monitors the usage of a service counter by customers throughout the day. The application creates a detector to identify when the service desk is being utilized by a customer. It checks the detector every minute, and once an hour, it prints out a summary of the percentage of time that the service counter is in use. At the end of the day, it emails the daily log."}),"\n",(0,i.jsx)(n.p,{children:"This retail analytics application can be beneficial in various ways:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Staff allocation and scheduling:"})," By analyzing the usage patterns of the service counter, store managers can optimize staff allocation and scheduling, ensuring that enough employees are available during peak hours and reducing wait times for customers."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Identifying trends:"})," The application can help identify trends in customer behavior, such as busier times of the day or specific days of the week with higher traffic. This information can be used to plan targeted marketing campaigns or promotions to increase sales and customer engagement."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Improving store layout:"})," Understanding when and how often customers use the service counter can provide insights into the effectiveness of the store's layout. Retailers can use this information to make data-driven decisions about rearranging the store layout to encourage customers to visit the service counter or explore other areas of the store."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Customer satisfaction:"})," By monitoring the usage of the service counter and proactively addressing long wait times or crowded areas, retailers can improve customer satisfaction and loyalty. A positive customer experience can lead to increased sales and return visits."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"To implement this retail analytics solution, a store would need to install a supported camera near the service counter, ensuring a clear view of the area. The camera would then be connected to a computer running the Groundlight-based application. Store managers would receive hourly summaries of the service counter usage and a daily log via email, enabling them to make informed decisions to improve store operations and customer experience."}),"\n",(0,i.jsx)(n.h2,{id:"requirements",children:"Requirements"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/docs/installation/",children:"Groundlight SDK"})," with Python 3.7 or higher"]}),"\n",(0,i.jsx)(n.li,{children:"A supported USB or network-connected camera"}),"\n",(0,i.jsx)(n.li,{children:"An email account with SMTP access to send the daily log"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,i.jsx)(n.p,{children:"Ensure you have Python 3.7 or higher installed, and then install the Groundlight SDK, OpenCV library, and other required libraries:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"pip install groundlight opencv-python pillow\n"})}),"\n",(0,i.jsx)(n.h2,{id:"creating-the-application",children:"Creating the Application"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["First, log in to the ",(0,i.jsx)(n.a,{href:"https://app.groundlight.ai",children:"Groundlight application"})," and get an ",(0,i.jsx)(n.a,{href:"api-tokens",children:"API Token"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Next, we'll write the Python script for the application. Import the required libraries:"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",metastring:"notest",children:"import time\nimport cv2\nimport smtplib\nfrom groundlight import Groundlight\nfrom PIL import Image\nfrom datetime import datetime, timedelta\nfrom email.mime.multipart import MIMEMultipart\nfrom email.mime.text import MIMEText\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"3",children:["\n",(0,i.jsx)(n.li,{children:"Define a function to capture an image from the camera using OpenCV:"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def capture_image():\n cap = cv2.VideoCapture(0)\n\n ret, frame = cap.read()\n cap.release()\n\n if ret:\n # Convert to PIL image\n return Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))\n else:\n return None\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"4",children:["\n",(0,i.jsx)(n.li,{children:"Define a function to send the daily log via email. You will need to customize this for your particular network environment."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def send_email(sender, receiver, subject, body):\n msg = MIMEMultipart()\n msg['From'] = sender\n msg['To'] = receiver\n msg['Subject'] = subject\n msg.attach(MIMEText(body, 'plain'))\n\n server = smtplib.SMTP('smtp.example.com', 587)\n server.starttls()\n server.login(sender, \"your-password\")\n text = msg.as_string()\n server.sendmail(sender, receiver, text)\n server.quit()\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"5",children:["\n",(0,i.jsx)(n.li,{children:"Define when your business's operating hours are:"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",metastring:"notest",children:"START_OF_BUSINESS = 9 # e.g. 9am\nEND_OF_BUSINESS = 17 # e.g. 5pm\n\ndef is_within_business_hours():\n current_hour = datetime.now().hour\n return START_OF_BUSINESS <= current_hour < END_OF_BUSINESS\n\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"6",children:["\n",(0,i.jsx)(n.li,{children:"Write the main application loop:"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",metastring:"notest",children:'gl = Groundlight()\n\ndetector = gl.get_or_create_detector(\n name="counter-in-use",\n query="Is there a customer at the service counter?",\n # We can get away with relatively low confidence since we\'re aggregating\n confidence_threshold=0.8)\n\nDELAY = 60\n\nlog = []\ndaily_log = []\nnext_hourly_start = datetime.now().replace(minute=0, second=0, microsecond=0) + timedelta(hours=1)\n\nwhile True:\n if not is_within_business_hours():\n time.sleep(DELAY)\n continue\n\n image = capture_image()\n if not image:\n print("Failed to capture image")\n time.sleep(DELAY)\n continue\n\n try:\n iq = gl.submit_image_query(image=image, detector=detector, wait=60)\n except Exception as e:\n print(f"Error submitting image query: {e}")\n time.sleep(DELAY)\n continue\n\n answer = iq.result.label\n log.append(answer)\n\n if datetime.now() >= next_hourly_start:\n next_hourly_start += timedelta(hours=1)\n\n percent_in_use = (log.count("YES") / len(log)) * 100\n current_time = datetime.now().replace(hour=START_OF_BUSINESS, minute=0, second=0)\n formatted_time = current_time.strftime("%I%p") # like 3pm\n msg = f"Hourly summary for {formatted_time}: {percent_in_use:.0f}% counter in use"\n print(msg)\n daily_log.append(msg)\n log = []\n\n current_hour = datetime.now().hour\n if current_hour == END_OF_BUSINESS and not daily_log == []:\n daily_summary = "Daily summary:\\n"\n for msg in daily_log:\n daily_summary += f"{msg}\\n"\n\n print(daily_summary)\n send_email(sender="counterbot@example.com",\n receiver="manager@example.com",\n subject="Daily Service Counter Usage Log",\n body=daily_summary)\n daily_log = []\n\n time.sleep(DELAY)\n'})}),"\n",(0,i.jsxs)(n.p,{children:["This application captures an image using the ",(0,i.jsx)(n.code,{children:"capture_image"})," function, then submits it to the Groundlight API for analysis. If a customer is detected at the counter, it logs the event. Every hour, it prints a summary of the counter's usage percentage, and at the end of the day, it emails the daily log using the ",(0,i.jsx)(n.code,{children:"send_email"})," function."]}),"\n",(0,i.jsxs)(n.p,{children:["Save the script as ",(0,i.jsx)(n.code,{children:"service_counter_monitor.py"})," and run it:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"python service_counter_monitor.py\n"})})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>s});var i=t(7294);const r={},a=i.createContext(r);function s(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[1355],{1110:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var i=t(5893),r=t(1151);const a={},s="A Serious Example: Retail Analytics",o={id:"getting-started/retail-analytics",title:"A Serious Example: Retail Analytics",description:"Tracking utilization of a customer service counter",source:"@site/docs/getting-started/3-retail-analytics.md",sourceDirName:"getting-started",slug:"/getting-started/retail-analytics",permalink:"/python-sdk/docs/getting-started/retail-analytics",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/getting-started/3-retail-analytics.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Writing Queries",permalink:"/python-sdk/docs/getting-started/writing-queries"},next:{title:"A Fun Example: Dog-on-Couch Detector",permalink:"/python-sdk/docs/getting-started/dog-on-couch"}},l={},c=[{value:"Tracking utilization of a customer service counter",id:"tracking-utilization-of-a-customer-service-counter",level:2},{value:"Requirements",id:"requirements",level:2},{value:"Installation",id:"installation",level:2},{value:"Creating the Application",id:"creating-the-application",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"a-serious-example-retail-analytics",children:"A Serious Example: Retail Analytics"}),"\n",(0,i.jsx)(n.h2,{id:"tracking-utilization-of-a-customer-service-counter",children:"Tracking utilization of a customer service counter"}),"\n",(0,i.jsx)(n.p,{children:"This example demonstrates the application of Groundlight to a retail analytics solution, which monitors the usage of a service counter by customers throughout the day. The application creates a detector to identify when the service desk is being utilized by a customer. It checks the detector every minute, and once an hour, it prints out a summary of the percentage of time that the service counter is in use. At the end of the day, it emails the daily log."}),"\n",(0,i.jsx)(n.p,{children:"This retail analytics application can be beneficial in various ways:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Staff allocation and scheduling:"})," By analyzing the usage patterns of the service counter, store managers can optimize staff allocation and scheduling, ensuring that enough employees are available during peak hours and reducing wait times for customers."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Identifying trends:"})," The application can help identify trends in customer behavior, such as busier times of the day or specific days of the week with higher traffic. This information can be used to plan targeted marketing campaigns or promotions to increase sales and customer engagement."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Improving store layout:"})," Understanding when and how often customers use the service counter can provide insights into the effectiveness of the store's layout. Retailers can use this information to make data-driven decisions about rearranging the store layout to encourage customers to visit the service counter or explore other areas of the store."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Customer satisfaction:"})," By monitoring the usage of the service counter and proactively addressing long wait times or crowded areas, retailers can improve customer satisfaction and loyalty. A positive customer experience can lead to increased sales and return visits."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"To implement this retail analytics solution, a store would need to install a supported camera near the service counter, ensuring a clear view of the area. The camera would then be connected to a computer running the Groundlight-based application. Store managers would receive hourly summaries of the service counter usage and a daily log via email, enabling them to make informed decisions to improve store operations and customer experience."}),"\n",(0,i.jsx)(n.h2,{id:"requirements",children:"Requirements"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/docs/installation/",children:"Groundlight SDK"})," with Python 3.8 or higher"]}),"\n",(0,i.jsx)(n.li,{children:"A supported USB or network-connected camera"}),"\n",(0,i.jsx)(n.li,{children:"An email account with SMTP access to send the daily log"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,i.jsx)(n.p,{children:"Ensure you have Python 3.8 or higher installed, and then install the Groundlight SDK, OpenCV library, and other required libraries:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"pip install groundlight opencv-python pillow\n"})}),"\n",(0,i.jsx)(n.h2,{id:"creating-the-application",children:"Creating the Application"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["First, log in to the ",(0,i.jsx)(n.a,{href:"https://app.groundlight.ai",children:"Groundlight application"})," and get an ",(0,i.jsx)(n.a,{href:"api-tokens",children:"API Token"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Next, we'll write the Python script for the application. Import the required libraries:"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",metastring:"notest",children:"import time\nimport cv2\nimport smtplib\nfrom groundlight import Groundlight\nfrom PIL import Image\nfrom datetime import datetime, timedelta\nfrom email.mime.multipart import MIMEMultipart\nfrom email.mime.text import MIMEText\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"3",children:["\n",(0,i.jsx)(n.li,{children:"Define a function to capture an image from the camera using OpenCV:"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def capture_image():\n cap = cv2.VideoCapture(0)\n\n ret, frame = cap.read()\n cap.release()\n\n if ret:\n # Convert to PIL image\n return Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))\n else:\n return None\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"4",children:["\n",(0,i.jsx)(n.li,{children:"Define a function to send the daily log via email. You will need to customize this for your particular network environment."}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",children:"def send_email(sender, receiver, subject, body):\n msg = MIMEMultipart()\n msg['From'] = sender\n msg['To'] = receiver\n msg['Subject'] = subject\n msg.attach(MIMEText(body, 'plain'))\n\n server = smtplib.SMTP('smtp.example.com', 587)\n server.starttls()\n server.login(sender, \"your-password\")\n text = msg.as_string()\n server.sendmail(sender, receiver, text)\n server.quit()\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"5",children:["\n",(0,i.jsx)(n.li,{children:"Define when your business's operating hours are:"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",metastring:"notest",children:"START_OF_BUSINESS = 9 # e.g. 9am\nEND_OF_BUSINESS = 17 # e.g. 5pm\n\ndef is_within_business_hours():\n current_hour = datetime.now().hour\n return START_OF_BUSINESS <= current_hour < END_OF_BUSINESS\n\n"})}),"\n",(0,i.jsxs)(n.ol,{start:"6",children:["\n",(0,i.jsx)(n.li,{children:"Write the main application loop:"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-python",metastring:"notest",children:'gl = Groundlight()\n\ndetector = gl.get_or_create_detector(\n name="counter-in-use",\n query="Is there a customer at the service counter?",\n # We can get away with relatively low confidence since we\'re aggregating\n confidence_threshold=0.8)\n\nDELAY = 60\n\nlog = []\ndaily_log = []\nnext_hourly_start = datetime.now().replace(minute=0, second=0, microsecond=0) + timedelta(hours=1)\n\nwhile True:\n if not is_within_business_hours():\n time.sleep(DELAY)\n continue\n\n image = capture_image()\n if not image:\n print("Failed to capture image")\n time.sleep(DELAY)\n continue\n\n try:\n iq = gl.submit_image_query(image=image, detector=detector, wait=60)\n except Exception as e:\n print(f"Error submitting image query: {e}")\n time.sleep(DELAY)\n continue\n\n answer = iq.result.label\n log.append(answer)\n\n if datetime.now() >= next_hourly_start:\n next_hourly_start += timedelta(hours=1)\n\n percent_in_use = (log.count("YES") / len(log)) * 100\n current_time = datetime.now().replace(hour=START_OF_BUSINESS, minute=0, second=0)\n formatted_time = current_time.strftime("%I%p") # like 3pm\n msg = f"Hourly summary for {formatted_time}: {percent_in_use:.0f}% counter in use"\n print(msg)\n daily_log.append(msg)\n log = []\n\n current_hour = datetime.now().hour\n if current_hour == END_OF_BUSINESS and not daily_log == []:\n daily_summary = "Daily summary:\\n"\n for msg in daily_log:\n daily_summary += f"{msg}\\n"\n\n print(daily_summary)\n send_email(sender="counterbot@example.com",\n receiver="manager@example.com",\n subject="Daily Service Counter Usage Log",\n body=daily_summary)\n daily_log = []\n\n time.sleep(DELAY)\n'})}),"\n",(0,i.jsxs)(n.p,{children:["This application captures an image using the ",(0,i.jsx)(n.code,{children:"capture_image"})," function, then submits it to the Groundlight API for analysis. If a customer is detected at the counter, it logs the event. Every hour, it prints a summary of the counter's usage percentage, and at the end of the day, it emails the daily log using the ",(0,i.jsx)(n.code,{children:"send_email"})," function."]}),"\n",(0,i.jsxs)(n.p,{children:["Save the script as ",(0,i.jsx)(n.code,{children:"service_counter_monitor.py"})," and run it:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"python service_counter_monitor.py\n"})})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>s});var i=t(7294);const r={},a=i.createContext(r);function s(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/325ecf53.c9b476d6.js b/assets/js/325ecf53.d60b1f4e.js similarity index 98% rename from assets/js/325ecf53.c9b476d6.js rename to assets/js/325ecf53.d60b1f4e.js index 36f55bc6..c1c78a99 100644 --- a/assets/js/325ecf53.c9b476d6.js +++ b/assets/js/325ecf53.d60b1f4e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[4045],{9138:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var i=n(5893),a=n(1151);const r={},s="Getting Started",o={id:"getting-started/getting-started",title:"Getting Started",description:"Computer Vision powered by Natural Language",source:"@site/docs/getting-started/getting-started.mdx",sourceDirName:"getting-started",slug:"/getting-started/",permalink:"/python-sdk/docs/getting-started/",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/getting-started/getting-started.mdx",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",next:{title:"API Tokens",permalink:"/python-sdk/docs/getting-started/api-tokens"}},l={},d=[{value:"Computer Vision powered by Natural Language",id:"computer-vision-powered-by-natural-language",level:2},{value:"How does it work?",id:"how-does-it-work",level:3},{value:"Escalation Technology",id:"escalation-technology",level:3},{value:"Building a simple visual application",id:"building-a-simple-visual-application",level:2}];function c(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"getting-started",children:"Getting Started"}),"\n",(0,i.jsx)(t.h2,{id:"computer-vision-powered-by-natural-language",children:"Computer Vision powered by Natural Language"}),"\n",(0,i.jsx)(t.p,{children:"Build a working computer vision system in just a few lines of python:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",children:'from groundlight import Groundlight\n\ngl = Groundlight()\ndet = gl.get_or_create_detector(name="doorway", query="Is the doorway open?")\nimg = "./docs/static/img/doorway.jpg" # Image can be a file or a Python object\nimage_query = gl.submit_image_query(detector=det, image=img)\nprint(f"The answer is {image_query.result}")\n'})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsxs)(t.em,{children:['Note: The SDK is currently in "beta" phase. Interfaces are subject to change in future versions. We will follow ',(0,i.jsx)(t.a,{href:"https://semver.org/",children:"semver"})," semantics for breaking changes."]})}),"\n",(0,i.jsx)(t.h3,{id:"how-does-it-work",children:"How does it work?"}),"\n",(0,i.jsxs)(t.p,{children:["Your images are first analyzed by machine learning (ML) models which are automatically trained on your data. If those models have high enough ",(0,i.jsx)(t.a,{href:"/python-sdk/docs/building-applications/managing-confidence",children:"confidence"}),", that's your answer. But if the models are unsure, then the images are progressively escalated to more resource-intensive analysis methods up to real-time human review. So what you get is a computer vision system that starts working right away without even needing to first gather and label a dataset. At first it will operate with high latency, because people need to review the image queries. But over time, the ML systems will learn and improve so queries come back faster with higher confidence."]}),"\n",(0,i.jsx)(t.h3,{id:"escalation-technology",children:"Escalation Technology"}),"\n",(0,i.jsx)(t.p,{children:"Groundlight's Escalation Technology combines the power of generative AI using our Visual LLM, along with the speed of edge computing, and the reliability of real-time human oversight."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"diagram showing escalation technology",src:n(7354).Z+"",width:"600",height:"338"})}),"\n",(0,i.jsx)(t.h2,{id:"building-a-simple-visual-application",children:"Building a simple visual application"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Install the ",(0,i.jsx)(t.code,{children:"groundlight"})," SDK. Requires python version 3.7 or higher. See ",(0,i.jsx)(t.a,{href:"#Prerequisites",children:"prerequisites"}),"."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-shell",children:"pip3 install groundlight\n"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Head over to the ",(0,i.jsx)(t.a,{href:"https://app.groundlight.ai/reef/my-account/api-tokens",children:"groundlight web\napp"})," to create an ",(0,i.jsx)(t.a,{href:"/docs/getting-started/api-tokens",children:"API token"}),". You will\nneed to set the ",(0,i.jsx)(t.code,{children:"GROUNDLIGHT_API_TOKEN"})," environment variable to access the API."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-shell",children:"export GROUNDLIGHT_API_TOKEN=api_2GdXMflhJi6L_example\n"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Create a python script."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",metastring:'title="ask.py"',children:'from groundlight import Groundlight\n\ngl = Groundlight()\ndet = gl.get_or_create_detector(name="doorway", query="Is the doorway open?")\nimg = "./docs/static/img/doorway.jpg" # Image can be a file or a Python object\nimage_query = gl.submit_image_query(detector=det, image=img)\nprint(f"The answer is {image_query.result}")\n'})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Run it!"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-shell",children:"python ask.py\n"})}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},7354:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/escalation_diagram-05fa7abe4f95261f01a79faf002e0925.jpg"},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>s});var i=n(7294);const a={},r=i.createContext(a);function s(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[4045],{9138:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var i=n(5893),a=n(1151);const r={},s="Getting Started",o={id:"getting-started/getting-started",title:"Getting Started",description:"Computer Vision powered by Natural Language",source:"@site/docs/getting-started/getting-started.mdx",sourceDirName:"getting-started",slug:"/getting-started/",permalink:"/python-sdk/docs/getting-started/",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/getting-started/getting-started.mdx",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",next:{title:"API Tokens",permalink:"/python-sdk/docs/getting-started/api-tokens"}},l={},d=[{value:"Computer Vision powered by Natural Language",id:"computer-vision-powered-by-natural-language",level:2},{value:"How does it work?",id:"how-does-it-work",level:3},{value:"Escalation Technology",id:"escalation-technology",level:3},{value:"Building a simple visual application",id:"building-a-simple-visual-application",level:2}];function c(e){const t={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"getting-started",children:"Getting Started"}),"\n",(0,i.jsx)(t.h2,{id:"computer-vision-powered-by-natural-language",children:"Computer Vision powered by Natural Language"}),"\n",(0,i.jsx)(t.p,{children:"Build a working computer vision system in just a few lines of python:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",children:'from groundlight import Groundlight\n\ngl = Groundlight()\ndet = gl.get_or_create_detector(name="doorway", query="Is the doorway open?")\nimg = "./docs/static/img/doorway.jpg" # Image can be a file or a Python object\nimage_query = gl.submit_image_query(detector=det, image=img)\nprint(f"The answer is {image_query.result}")\n'})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsxs)(t.em,{children:['Note: The SDK is currently in "beta" phase. Interfaces are subject to change in future versions. We will follow ',(0,i.jsx)(t.a,{href:"https://semver.org/",children:"semver"})," semantics for breaking changes."]})}),"\n",(0,i.jsx)(t.h3,{id:"how-does-it-work",children:"How does it work?"}),"\n",(0,i.jsxs)(t.p,{children:["Your images are first analyzed by machine learning (ML) models which are automatically trained on your data. If those models have high enough ",(0,i.jsx)(t.a,{href:"/python-sdk/docs/building-applications/managing-confidence",children:"confidence"}),", that's your answer. But if the models are unsure, then the images are progressively escalated to more resource-intensive analysis methods up to real-time human review. So what you get is a computer vision system that starts working right away without even needing to first gather and label a dataset. At first it will operate with high latency, because people need to review the image queries. But over time, the ML systems will learn and improve so queries come back faster with higher confidence."]}),"\n",(0,i.jsx)(t.h3,{id:"escalation-technology",children:"Escalation Technology"}),"\n",(0,i.jsx)(t.p,{children:"Groundlight's Escalation Technology combines the power of generative AI using our Visual LLM, along with the speed of edge computing, and the reliability of real-time human oversight."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"diagram showing escalation technology",src:n(7354).Z+"",width:"600",height:"338"})}),"\n",(0,i.jsx)(t.h2,{id:"building-a-simple-visual-application",children:"Building a simple visual application"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Install the ",(0,i.jsx)(t.code,{children:"groundlight"})," SDK. Requires python version 3.8 or higher. See ",(0,i.jsx)(t.a,{href:"#Prerequisites",children:"prerequisites"}),"."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-shell",children:"pip3 install groundlight\n"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Head over to the ",(0,i.jsx)(t.a,{href:"https://app.groundlight.ai/reef/my-account/api-tokens",children:"groundlight web\napp"})," to create an ",(0,i.jsx)(t.a,{href:"/docs/getting-started/api-tokens",children:"API token"}),". You will\nneed to set the ",(0,i.jsx)(t.code,{children:"GROUNDLIGHT_API_TOKEN"})," environment variable to access the API."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-shell",children:"export GROUNDLIGHT_API_TOKEN=api_2GdXMflhJi6L_example\n"})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Create a python script."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",metastring:'title="ask.py"',children:'from groundlight import Groundlight\n\ngl = Groundlight()\ndet = gl.get_or_create_detector(name="doorway", query="Is the doorway open?")\nimg = "./docs/static/img/doorway.jpg" # Image can be a file or a Python object\nimage_query = gl.submit_image_query(detector=det, image=img)\nprint(f"The answer is {image_query.result}")\n'})}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Run it!"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-shell",children:"python ask.py\n"})}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},7354:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/escalation_diagram-05fa7abe4f95261f01a79faf002e0925.jpg"},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>s});var i=n(7294);const a={},r=i.createContext(a);function s(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7aefb68d.b086bf7e.js b/assets/js/7aefb68d.27ccedf7.js similarity index 76% rename from assets/js/7aefb68d.b086bf7e.js rename to assets/js/7aefb68d.27ccedf7.js index 2ffe315f..3d2a9ced 100644 --- a/assets/js/7aefb68d.b086bf7e.js +++ b/assets/js/7aefb68d.27ccedf7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[3201],{8523:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var i=n(5893),r=n(1151);const s={},a="A Quick Example: Live Stream Alert",o={id:"getting-started/streaming",title:"A Quick Example: Live Stream Alert",description:"A quick example to get used to setting up detectors and asking good questions: set up a monitor on a live stream.",source:"@site/docs/getting-started/5-streaming.md",sourceDirName:"getting-started",slug:"/getting-started/streaming",permalink:"/python-sdk/docs/getting-started/streaming",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/getting-started/5-streaming.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"A Fun Example: Dog-on-Couch Detector",permalink:"/python-sdk/docs/getting-started/dog-on-couch"},next:{title:"Building Applications",permalink:"/python-sdk/docs/building-applications/"}},l={},d=[{value:"Requirements",id:"requirements",level:2},{value:"Installation",id:"installation",level:2},{value:"Creating the Application",id:"creating-the-application",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"a-quick-example-live-stream-alert",children:"A Quick Example: Live Stream Alert"}),"\n",(0,i.jsx)(t.p,{children:"A quick example to get used to setting up detectors and asking good questions: set up a monitor on a live stream."}),"\n",(0,i.jsx)(t.h2,{id:"requirements",children:"Requirements"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"/docs/installation/",children:"Groundlight SDK"})," with Python 3.7 or higher"]}),"\n",(0,i.jsx)(t.li,{children:"The video ID of a YouTube live stream you'd like to monitor"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,i.jsx)(t.p,{children:"Ensure you have Python 3.7 or higher installed, and then install the Groundlight SDK and OpenCV library:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"# MacOS\nbrew install ffmpeg\n\n# Ubuntu/Fedora linux\nsudo apt install -y ffmpeg\n\npip install groundlight pillow ffmpeg yt-dlp typer\n"})}),"\n",(0,i.jsx)(t.h2,{id:"creating-the-application",children:"Creating the Application"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Save this command as a shell script ",(0,i.jsx)(t.code,{children:"get_latest_frame.sh"}),":"]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:'#!/bin/bash\n\nffmpeg -i "$(yt-dlp -g $1 | head -n 1)" -vframes 1 last.jpg -y\n'})}),"\n",(0,i.jsxs)(t.p,{children:["This will download the most recent frame from a YouTube live stream and save it to a local file ",(0,i.jsx)(t.code,{children:"last.jpg"}),"."]}),"\n",(0,i.jsxs)(t.ol,{start:"2",children:["\n",(0,i.jsx)(t.li,{children:"Ensure that the script has execute permissions. You can add execute permissions using the following command:"}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"chmod +x get_latest_frame.sh\n"})}),"\n",(0,i.jsxs)(t.ol,{start:"3",children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Log in to the ",(0,i.jsx)(t.a,{href:"https://app.groundlight.ai",children:"Groundlight application"})," and get an ",(0,i.jsx)(t.a,{href:"api-tokens",children:"API Token"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Next, we'll write the Python script for the application."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",metastring:"notest",children:'import os\nimport subprocess\nimport typer\nfrom groundlight import Groundlight\nfrom PIL import Image\n\n\ndef main(*, video_id: str = None, detector_name: str = None, query: str = None, confidence: float = 0.75, wait: int = 60):\n """\n Run the script to get the stream\'s last frame as a subprocess, and submit result as an image query to a Groundlight detector\n :param video_id: Video ID of the YouTube live stream (the URLs have the form https://www.youtube.com/watch?v=)\n :param detector_name: Name for your Groundlight detector\n :param query: Question you want to ask of the stream (we will alert on the answer of NO)\n """\n gl = Groundlight()\n detector = gl.get_or_create_detector(name=detector_name, query=query, confidence_threshold=confidence)\n\n while True:\n p = subprocess.run(["./get_latest_frame.sh", video_id])\n if p.returncode != 0:\n raise RuntimeError(f"Could not get image from video ID: {video_id}. Process exited with return code {p.returncode}.")\n \n image = Image.open("last.jpg").convert("RGB")\n response = gl.submit_image_query(detector=detector, image=image, wait=wait)\n\n if response.result.label == "NO":\n os.system("say \'Alert!\'") # this may not work on all operating systems\n\n\nif __name__ == "__main__":\n typer.run(main)\n\n'})}),"\n",(0,i.jsxs)(t.ol,{start:"5",children:["\n",(0,i.jsxs)(t.li,{children:["Save the script as ",(0,i.jsx)(t.code,{children:"streaming_alert.py"})," in the same directory as ",(0,i.jsx)(t.code,{children:"get_latest_frame.sh"})," above and run it:"]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"python streaming_alert.py --video-id= --detector-name= --query=\n"})})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>a});var i=n(7294);const r={},s=i.createContext(r);function a(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[3201],{8523:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var i=n(5893),r=n(1151);const s={},a="A Quick Example: Live Stream Alert",o={id:"getting-started/streaming",title:"A Quick Example: Live Stream Alert",description:"A quick example to get used to setting up detectors and asking good questions: set up a monitor on a live stream.",source:"@site/docs/getting-started/5-streaming.md",sourceDirName:"getting-started",slug:"/getting-started/streaming",permalink:"/python-sdk/docs/getting-started/streaming",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/getting-started/5-streaming.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"A Fun Example: Dog-on-Couch Detector",permalink:"/python-sdk/docs/getting-started/dog-on-couch"},next:{title:"Building Applications",permalink:"/python-sdk/docs/building-applications/"}},l={},d=[{value:"Requirements",id:"requirements",level:2},{value:"Installation",id:"installation",level:2},{value:"Creating the Application",id:"creating-the-application",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"a-quick-example-live-stream-alert",children:"A Quick Example: Live Stream Alert"}),"\n",(0,i.jsx)(t.p,{children:"A quick example to get used to setting up detectors and asking good questions: set up a monitor on a live stream."}),"\n",(0,i.jsx)(t.h2,{id:"requirements",children:"Requirements"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.a,{href:"/docs/installation/",children:"Groundlight SDK"})," with Python 3.8 or higher"]}),"\n",(0,i.jsx)(t.li,{children:"The video ID of a YouTube live stream you'd like to monitor"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"installation",children:"Installation"}),"\n",(0,i.jsx)(t.p,{children:"Ensure you have Python 3.8 or higher installed, and then install the Groundlight SDK and OpenCV library:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"# MacOS\nbrew install ffmpeg\n\n# Ubuntu/Fedora linux\nsudo apt install -y ffmpeg\n\npip install groundlight pillow ffmpeg yt-dlp typer\n"})}),"\n",(0,i.jsx)(t.h2,{id:"creating-the-application",children:"Creating the Application"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:["Save this command as a shell script ",(0,i.jsx)(t.code,{children:"get_latest_frame.sh"}),":"]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:'#!/bin/bash\n\nffmpeg -i "$(yt-dlp -g $1 | head -n 1)" -vframes 1 last.jpg -y\n'})}),"\n",(0,i.jsxs)(t.p,{children:["This will download the most recent frame from a YouTube live stream and save it to a local file ",(0,i.jsx)(t.code,{children:"last.jpg"}),"."]}),"\n",(0,i.jsxs)(t.ol,{start:"2",children:["\n",(0,i.jsx)(t.li,{children:"Ensure that the script has execute permissions. You can add execute permissions using the following command:"}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"chmod +x get_latest_frame.sh\n"})}),"\n",(0,i.jsxs)(t.ol,{start:"3",children:["\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsxs)(t.p,{children:["Log in to the ",(0,i.jsx)(t.a,{href:"https://app.groundlight.ai",children:"Groundlight application"})," and get an ",(0,i.jsx)(t.a,{href:"api-tokens",children:"API Token"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["\n",(0,i.jsx)(t.p,{children:"Next, we'll write the Python script for the application."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-python",metastring:"notest",children:'import os\nimport subprocess\nimport typer\nfrom groundlight import Groundlight\nfrom PIL import Image\n\n\ndef main(*, video_id: str = None, detector_name: str = None, query: str = None, confidence: float = 0.75, wait: int = 60):\n """\n Run the script to get the stream\'s last frame as a subprocess, and submit result as an image query to a Groundlight detector\n :param video_id: Video ID of the YouTube live stream (the URLs have the form https://www.youtube.com/watch?v=)\n :param detector_name: Name for your Groundlight detector\n :param query: Question you want to ask of the stream (we will alert on the answer of NO)\n """\n gl = Groundlight()\n detector = gl.get_or_create_detector(name=detector_name, query=query, confidence_threshold=confidence)\n\n while True:\n p = subprocess.run(["./get_latest_frame.sh", video_id])\n if p.returncode != 0:\n raise RuntimeError(f"Could not get image from video ID: {video_id}. Process exited with return code {p.returncode}.")\n\n image = Image.open("last.jpg").convert("RGB")\n response = gl.submit_image_query(detector=detector, image=image, wait=wait)\n\n if response.result.label == "NO":\n os.system("say \'Alert!\'") # this may not work on all operating systems\n\n\nif __name__ == "__main__":\n typer.run(main)\n\n'})}),"\n",(0,i.jsxs)(t.ol,{start:"5",children:["\n",(0,i.jsxs)(t.li,{children:["Save the script as ",(0,i.jsx)(t.code,{children:"streaming_alert.py"})," in the same directory as ",(0,i.jsx)(t.code,{children:"get_latest_frame.sh"})," above and run it:"]}),"\n"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"python streaming_alert.py --video-id= --detector-name= --query=\n"})})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>a});var i=n(7294);const r={},s=i.createContext(r);function a(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),i.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8091dcef.358130fc.js b/assets/js/8091dcef.78915233.js similarity index 94% rename from assets/js/8091dcef.358130fc.js rename to assets/js/8091dcef.78915233.js index ef29da8e..1ea5d919 100644 --- a/assets/js/8091dcef.358130fc.js +++ b/assets/js/8091dcef.78915233.js @@ -1 +1 @@ -"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[5100],{8636:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>l,default:()=>c,frontMatter:()=>s,metadata:()=>r,toc:()=>h});var t=i(5893),o=i(1151);const s={},l="Installing on macOS",r={id:"installation/macos",title:"Installing on macOS",description:"This guide will help you install the Groundlight SDK on macOS. The Groundlight SDK requires Python 3.7 or higher.",source:"@site/docs/installation/2-macos.md",sourceDirName:"installation",slug:"/installation/macos",permalink:"/python-sdk/docs/installation/macos",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/installation/2-macos.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Installing on Linux",permalink:"/python-sdk/docs/installation/linux"},next:{title:"Installing on Windows",permalink:"/python-sdk/docs/installation/windows"}},a={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Basic Installation",id:"basic-installation",level:2},{value:"Installing Groundlight SDK",id:"installing-groundlight-sdk",level:3},{value:"Checking Groundlight SDK Version",id:"checking-groundlight-sdk-version",level:3},{value:"Upgrading Groundlight SDK",id:"upgrading-groundlight-sdk",level:3},{value:"Getting the right Python Version",id:"getting-the-right-python-version",level:2},{value:"Upgrading Python on MacOS",id:"upgrading-python-on-macos",level:3},{value:"Ready to go!",id:"ready-to-go",level:2}];function d(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"installing-on-macos",children:"Installing on macOS"}),"\n",(0,t.jsx)(e.p,{children:"This guide will help you install the Groundlight SDK on macOS. The Groundlight SDK requires Python 3.7 or higher."}),"\n",(0,t.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(e.p,{children:"Ensure that you have the following installed on your system:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Python 3.7 or higher"}),"\n",(0,t.jsx)(e.li,{children:"pip (Python package installer)"}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"basic-installation",children:"Basic Installation"}),"\n",(0,t.jsx)(e.p,{children:"Assuming you have Python 3.7 or higher installed on your system, you can proceed with the following steps to install or upgrade the Groundlight SDK:"}),"\n",(0,t.jsx)(e.h3,{id:"installing-groundlight-sdk",children:"Installing Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"To install the Groundlight SDK using pip, run the following command in your terminal:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip install groundlight\n"})}),"\n",(0,t.jsxs)(e.p,{children:["If you're also using ",(0,t.jsx)(e.code,{children:"python2"})," on your system, you might need to use ",(0,t.jsx)(e.code,{children:"pip3"})," instead:"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:"The Groundlight SDK is now installed and ready for use."}),"\n",(0,t.jsx)(e.h3,{id:"checking-groundlight-sdk-version",children:"Checking Groundlight SDK Version"}),"\n",(0,t.jsx)(e.p,{children:"To check if the Groundlight SDK is installed and to display its version, you can use the following Python one-liner:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:'python -c "import groundlight; print(groundlight.__version__)"\n'})}),"\n",(0,t.jsx)(e.h3,{id:"upgrading-groundlight-sdk",children:"Upgrading Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"If you need to upgrade the Groundlight SDK to the latest version, use the following pip command:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip install --upgrade groundlight\n"})}),"\n",(0,t.jsxs)(e.p,{children:["Or, if you're using ",(0,t.jsx)(e.code,{children:"pip3"}),":"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install --upgrade groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:'After upgrading, you can use the Python one-liner mentioned in the "Checking Groundlight SDK Version" section to verify that the latest version is now installed.'}),"\n",(0,t.jsx)(e.h2,{id:"getting-the-right-python-version",children:"Getting the right Python Version"}),"\n",(0,t.jsx)(e.p,{children:"To check your installed Python version, open a terminal and run:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"python --version\n"})}),"\n",(0,t.jsx)(e.p,{children:'If you see a version number starting with "3.7" or higher (e.g., "3.7.5" or "3.9.0"), you\'re good to go. If not, you might need to upgrade Python on your system.'}),"\n",(0,t.jsx)(e.h3,{id:"upgrading-python-on-macos",children:"Upgrading Python on MacOS"}),"\n",(0,t.jsxs)(e.p,{children:["Download the latest Python installer from the ",(0,t.jsx)(e.a,{href:"https://www.python.org/downloads/mac-osx/",children:"official Python website"})," and run it, or use ",(0,t.jsx)(e.a,{href:"https://brew.sh/",children:"Homebrew"})," to install Python:"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"brew install python\n"})}),"\n",(0,t.jsxs)(e.p,{children:["After upgrading, verify the Python version by running ",(0,t.jsx)(e.code,{children:"python --version"})," or ",(0,t.jsx)(e.code,{children:"python3 --version"}),", as described earlier."]}),"\n",(0,t.jsx)(e.h2,{id:"ready-to-go",children:"Ready to go!"}),"\n",(0,t.jsxs)(e.p,{children:["You're now ready to start using the Groundlight SDK in your projects. For more information on using the SDK, refer to the ",(0,t.jsx)(e.a,{href:"/docs/getting-started/api-tokens",children:"API Tokens"})," and ",(0,t.jsx)(e.a,{href:"/docs/building-applications",children:"Building Applications"})," documentation pages."]})]})}function c(n={}){const{wrapper:e}={...(0,o.a)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(d,{...n})}):d(n)}},1151:(n,e,i)=>{i.d(e,{Z:()=>r,a:()=>l});var t=i(7294);const o={},s=t.createContext(o);function l(n){const e=t.useContext(s);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function r(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(o):n.components||o:l(n.components),t.createElement(s.Provider,{value:e},n.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[5100],{8636:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>l,default:()=>c,frontMatter:()=>s,metadata:()=>r,toc:()=>h});var t=i(5893),o=i(1151);const s={},l="Installing on macOS",r={id:"installation/macos",title:"Installing on macOS",description:"This guide will help you install the Groundlight SDK on macOS. The Groundlight SDK requires Python 3.8 or higher.",source:"@site/docs/installation/2-macos.md",sourceDirName:"installation",slug:"/installation/macos",permalink:"/python-sdk/docs/installation/macos",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/installation/2-macos.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Installing on Linux",permalink:"/python-sdk/docs/installation/linux"},next:{title:"Installing on Windows",permalink:"/python-sdk/docs/installation/windows"}},a={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Basic Installation",id:"basic-installation",level:2},{value:"Installing Groundlight SDK",id:"installing-groundlight-sdk",level:3},{value:"Checking Groundlight SDK Version",id:"checking-groundlight-sdk-version",level:3},{value:"Upgrading Groundlight SDK",id:"upgrading-groundlight-sdk",level:3},{value:"Getting the right Python Version",id:"getting-the-right-python-version",level:2},{value:"Upgrading Python on MacOS",id:"upgrading-python-on-macos",level:3},{value:"Ready to go!",id:"ready-to-go",level:2}];function d(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"installing-on-macos",children:"Installing on macOS"}),"\n",(0,t.jsx)(e.p,{children:"This guide will help you install the Groundlight SDK on macOS. The Groundlight SDK requires Python 3.8 or higher."}),"\n",(0,t.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(e.p,{children:"Ensure that you have the following installed on your system:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Python 3.8 or higher"}),"\n",(0,t.jsx)(e.li,{children:"pip (Python package installer)"}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"basic-installation",children:"Basic Installation"}),"\n",(0,t.jsx)(e.p,{children:"Assuming you have Python 3.8 or higher installed on your system, you can proceed with the following steps to install or upgrade the Groundlight SDK:"}),"\n",(0,t.jsx)(e.h3,{id:"installing-groundlight-sdk",children:"Installing Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"To install the Groundlight SDK using pip, run the following command in your terminal:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip install groundlight\n"})}),"\n",(0,t.jsxs)(e.p,{children:["If you're also using ",(0,t.jsx)(e.code,{children:"python2"})," on your system, you might need to use ",(0,t.jsx)(e.code,{children:"pip3"})," instead:"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:"The Groundlight SDK is now installed and ready for use."}),"\n",(0,t.jsx)(e.h3,{id:"checking-groundlight-sdk-version",children:"Checking Groundlight SDK Version"}),"\n",(0,t.jsx)(e.p,{children:"To check if the Groundlight SDK is installed and to display its version, you can use the following Python one-liner:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:'python -c "import groundlight; print(groundlight.__version__)"\n'})}),"\n",(0,t.jsx)(e.h3,{id:"upgrading-groundlight-sdk",children:"Upgrading Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"If you need to upgrade the Groundlight SDK to the latest version, use the following pip command:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip install --upgrade groundlight\n"})}),"\n",(0,t.jsxs)(e.p,{children:["Or, if you're using ",(0,t.jsx)(e.code,{children:"pip3"}),":"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install --upgrade groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:'After upgrading, you can use the Python one-liner mentioned in the "Checking Groundlight SDK Version" section to verify that the latest version is now installed.'}),"\n",(0,t.jsx)(e.h2,{id:"getting-the-right-python-version",children:"Getting the right Python Version"}),"\n",(0,t.jsx)(e.p,{children:"To check your installed Python version, open a terminal and run:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"python --version\n"})}),"\n",(0,t.jsx)(e.p,{children:'If you see a version number starting with "3.8" or higher (e.g., "3.8.5" or "3.9.0"), you\'re good to go. If not, you might need to upgrade Python on your system.'}),"\n",(0,t.jsx)(e.h3,{id:"upgrading-python-on-macos",children:"Upgrading Python on MacOS"}),"\n",(0,t.jsxs)(e.p,{children:["Download the latest Python installer from the ",(0,t.jsx)(e.a,{href:"https://www.python.org/downloads/mac-osx/",children:"official Python website"})," and run it, or use ",(0,t.jsx)(e.a,{href:"https://brew.sh/",children:"Homebrew"})," to install Python:"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"brew install python\n"})}),"\n",(0,t.jsxs)(e.p,{children:["After upgrading, verify the Python version by running ",(0,t.jsx)(e.code,{children:"python --version"})," or ",(0,t.jsx)(e.code,{children:"python3 --version"}),", as described earlier."]}),"\n",(0,t.jsx)(e.h2,{id:"ready-to-go",children:"Ready to go!"}),"\n",(0,t.jsxs)(e.p,{children:["You're now ready to start using the Groundlight SDK in your projects. For more information on using the SDK, refer to the ",(0,t.jsx)(e.a,{href:"/docs/getting-started/api-tokens",children:"API Tokens"})," and ",(0,t.jsx)(e.a,{href:"/docs/building-applications",children:"Building Applications"})," documentation pages."]})]})}function c(n={}){const{wrapper:e}={...(0,o.a)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(d,{...n})}):d(n)}},1151:(n,e,i)=>{i.d(e,{Z:()=>r,a:()=>l});var t=i(7294);const o={},s=t.createContext(o);function l(n){const e=t.useContext(s);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function r(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(o):n.components||o:l(n.components),t.createElement(s.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/86aa3e00.2a88b6d0.js b/assets/js/86aa3e00.25ec8c95.js similarity index 95% rename from assets/js/86aa3e00.2a88b6d0.js rename to assets/js/86aa3e00.25ec8c95.js index 261cb060..f2b66311 100644 --- a/assets/js/86aa3e00.2a88b6d0.js +++ b/assets/js/86aa3e00.25ec8c95.js @@ -1 +1 @@ -"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[6605],{9121:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>h});var t=i(5893),s=i(1151);const o={},l="Installing on Linux",r={id:"installation/linux",title:"Installing on Linux",description:"This guide will help you install the Groundlight SDK on Linux. The Groundlight SDK requires Python 3.7 or higher.",source:"@site/docs/installation/1-linux.md",sourceDirName:"installation",slug:"/installation/linux",permalink:"/python-sdk/docs/installation/linux",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/installation/1-linux.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Installation",permalink:"/python-sdk/docs/installation/"},next:{title:"Installing on macOS",permalink:"/python-sdk/docs/installation/macos"}},a={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Basic Installation",id:"basic-installation",level:2},{value:"Installing Groundlight SDK",id:"installing-groundlight-sdk",level:3},{value:"Checking Groundlight SDK Version",id:"checking-groundlight-sdk-version",level:3},{value:"Upgrading Groundlight SDK",id:"upgrading-groundlight-sdk",level:3},{value:"Getting the right Python Version",id:"getting-the-right-python-version",level:2},{value:"Upgrading Python on Linux",id:"upgrading-python-on-linux",level:3},{value:"Special note about Ubuntu 18.04",id:"special-note-about-ubuntu-1804",level:3},{value:"Ready to go!",id:"ready-to-go",level:2}];function d(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"installing-on-linux",children:"Installing on Linux"}),"\n",(0,t.jsx)(e.p,{children:"This guide will help you install the Groundlight SDK on Linux. The Groundlight SDK requires Python 3.7 or higher."}),"\n",(0,t.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(e.p,{children:"Ensure that you have the following installed on your system:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Python 3.7 or higher"}),"\n",(0,t.jsx)(e.li,{children:"pip (Python package installer)"}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"basic-installation",children:"Basic Installation"}),"\n",(0,t.jsx)(e.p,{children:"Assuming you have Python 3.7 or higher installed on your system, you can proceed with the following steps to install or upgrade the Groundlight SDK:"}),"\n",(0,t.jsx)(e.h3,{id:"installing-groundlight-sdk",children:"Installing Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"To install the Groundlight SDK using pip, run the following command in your terminal:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip install groundlight\n"})}),"\n",(0,t.jsxs)(e.p,{children:["If you're also using ",(0,t.jsx)(e.code,{children:"python2"})," on your system, you might need to use ",(0,t.jsx)(e.code,{children:"pip3"})," instead:"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:"The Groundlight SDK is now installed and ready for use."}),"\n",(0,t.jsx)(e.h3,{id:"checking-groundlight-sdk-version",children:"Checking Groundlight SDK Version"}),"\n",(0,t.jsx)(e.p,{children:"To check if the Groundlight SDK is installed and to display its version, you can use the following Python one-liner:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:'python -c "import groundlight; print(groundlight.__version__)"\n'})}),"\n",(0,t.jsx)(e.h3,{id:"upgrading-groundlight-sdk",children:"Upgrading Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"If you need to upgrade the Groundlight SDK to the latest version, use the following pip command:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip install --upgrade groundlight\n"})}),"\n",(0,t.jsxs)(e.p,{children:["Or, if you're using ",(0,t.jsx)(e.code,{children:"pip3"}),":"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install --upgrade groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:'After upgrading, you can use the Python one-liner mentioned in the "Checking Groundlight SDK Version" section to verify that the latest version is now installed.'}),"\n",(0,t.jsx)(e.h2,{id:"getting-the-right-python-version",children:"Getting the right Python Version"}),"\n",(0,t.jsx)(e.p,{children:"To check your installed Python version, open a terminal and run:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"python --version\n"})}),"\n",(0,t.jsx)(e.p,{children:'If you see a version number starting with "3.7" or higher (e.g., "3.7.5" or "3.9.0"), you\'re good to go. If not, you might need to upgrade Python on your system.'}),"\n",(0,t.jsx)(e.h3,{id:"upgrading-python-on-linux",children:"Upgrading Python on Linux"}),"\n",(0,t.jsx)(e.p,{children:"Use your distribution's package manager to install the latest Python version:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:"For Ubuntu or Debian-based systems:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"sudo apt update\nsudo apt install python3\n"})}),"\n",(0,t.jsx)(e.p,{children:"(For Ubuntu 18.04 see note below.)"}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:"For Fedora-based systems:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"sudo dnf install python3\n"})}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:"For Arch Linux:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"sudo pacman -S python\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.p,{children:["After upgrading, verify the Python version by running ",(0,t.jsx)(e.code,{children:"python --version"})," or ",(0,t.jsx)(e.code,{children:"python3 --version"}),", as described earlier."]}),"\n",(0,t.jsx)(e.h3,{id:"special-note-about-ubuntu-1804",children:"Special note about Ubuntu 18.04"}),"\n",(0,t.jsx)(e.p,{children:"Ubuntu 18.04 still uses python 3.6 by default, which is end-of-life. We generally recommend using python 3.10. If you know how to install py3.10, please go ahead. But the easiest version of python 3 to use with Ubuntu 18.04 is python 3.8, which can be installed as follows without adding any extra repositories:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-shell",children:"# Prepare Ubuntu to install things\nsudo apt-get update\n# Install the basics\nsudo apt-get install -y python3.8 python3.8-distutils curl\n# Configure `python3` to run python3.8 by default\nsudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 10\n# Download and install pip3.8\ncurl https://bootstrap.pypa.io/get-pip.py > /tmp/get-pip.py\nsudo python3.8 /tmp/get-pip.py\n# Configure `pip3` to run pip3.8\nsudo update-alternatives --install /usr/bin/pip3 pip3 $(which pip3.8) 10\n# Now we can install Groundlight!\npip3 install groundlight\n"})}),"\n",(0,t.jsx)(e.h2,{id:"ready-to-go",children:"Ready to go!"}),"\n",(0,t.jsxs)(e.p,{children:["You're now ready to start using the Groundlight SDK in your projects. For more information on using the SDK, refer to the ",(0,t.jsx)(e.a,{href:"/docs/getting-started/api-tokens",children:"API Tokens"})," and ",(0,t.jsx)(e.a,{href:"/docs/building-applications",children:"Building Applications"})," documentation pages."]})]})}function u(n={}){const{wrapper:e}={...(0,s.a)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(d,{...n})}):d(n)}},1151:(n,e,i)=>{i.d(e,{Z:()=>r,a:()=>l});var t=i(7294);const s={},o=t.createContext(s);function l(n){const e=t.useContext(o);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function r(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:l(n.components),t.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[6605],{9121:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>h});var t=i(5893),s=i(1151);const o={},l="Installing on Linux",r={id:"installation/linux",title:"Installing on Linux",description:"This guide will help you install the Groundlight SDK on Linux. The Groundlight SDK requires Python 3.8 or higher.",source:"@site/docs/installation/1-linux.md",sourceDirName:"installation",slug:"/installation/linux",permalink:"/python-sdk/docs/installation/linux",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/installation/1-linux.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Installation",permalink:"/python-sdk/docs/installation/"},next:{title:"Installing on macOS",permalink:"/python-sdk/docs/installation/macos"}},a={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Basic Installation",id:"basic-installation",level:2},{value:"Installing Groundlight SDK",id:"installing-groundlight-sdk",level:3},{value:"Checking Groundlight SDK Version",id:"checking-groundlight-sdk-version",level:3},{value:"Upgrading Groundlight SDK",id:"upgrading-groundlight-sdk",level:3},{value:"Getting the right Python Version",id:"getting-the-right-python-version",level:2},{value:"Upgrading Python on Linux",id:"upgrading-python-on-linux",level:3},{value:"Special note about Ubuntu 18.04",id:"special-note-about-ubuntu-1804",level:3},{value:"Ready to go!",id:"ready-to-go",level:2}];function d(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"installing-on-linux",children:"Installing on Linux"}),"\n",(0,t.jsx)(e.p,{children:"This guide will help you install the Groundlight SDK on Linux. The Groundlight SDK requires Python 3.8 or higher."}),"\n",(0,t.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(e.p,{children:"Ensure that you have the following installed on your system:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Python 3.8 or higher"}),"\n",(0,t.jsx)(e.li,{children:"pip (Python package installer)"}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"basic-installation",children:"Basic Installation"}),"\n",(0,t.jsx)(e.p,{children:"Assuming you have Python 3.8 or higher installed on your system, you can proceed with the following steps to install or upgrade the Groundlight SDK:"}),"\n",(0,t.jsx)(e.h3,{id:"installing-groundlight-sdk",children:"Installing Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"To install the Groundlight SDK using pip, run the following command in your terminal:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip install groundlight\n"})}),"\n",(0,t.jsxs)(e.p,{children:["If you're also using ",(0,t.jsx)(e.code,{children:"python2"})," on your system, you might need to use ",(0,t.jsx)(e.code,{children:"pip3"})," instead:"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:"The Groundlight SDK is now installed and ready for use."}),"\n",(0,t.jsx)(e.h3,{id:"checking-groundlight-sdk-version",children:"Checking Groundlight SDK Version"}),"\n",(0,t.jsx)(e.p,{children:"To check if the Groundlight SDK is installed and to display its version, you can use the following Python one-liner:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:'python -c "import groundlight; print(groundlight.__version__)"\n'})}),"\n",(0,t.jsx)(e.h3,{id:"upgrading-groundlight-sdk",children:"Upgrading Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"If you need to upgrade the Groundlight SDK to the latest version, use the following pip command:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip install --upgrade groundlight\n"})}),"\n",(0,t.jsxs)(e.p,{children:["Or, if you're using ",(0,t.jsx)(e.code,{children:"pip3"}),":"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install --upgrade groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:'After upgrading, you can use the Python one-liner mentioned in the "Checking Groundlight SDK Version" section to verify that the latest version is now installed.'}),"\n",(0,t.jsx)(e.h2,{id:"getting-the-right-python-version",children:"Getting the right Python Version"}),"\n",(0,t.jsx)(e.p,{children:"To check your installed Python version, open a terminal and run:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"python --version\n"})}),"\n",(0,t.jsx)(e.p,{children:'If you see a version number starting with "3.8" or higher (e.g., "3.8.5" or "3.9.0"), you\'re good to go. If not, you might need to upgrade Python on your system.'}),"\n",(0,t.jsx)(e.h3,{id:"upgrading-python-on-linux",children:"Upgrading Python on Linux"}),"\n",(0,t.jsx)(e.p,{children:"Use your distribution's package manager to install the latest Python version:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:"For Ubuntu or Debian-based systems:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"sudo apt update\nsudo apt install python3\n"})}),"\n",(0,t.jsx)(e.p,{children:"(For Ubuntu 18.04 see note below.)"}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:"For Fedora-based systems:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"sudo dnf install python3\n"})}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:"For Arch Linux:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"sudo pacman -S python\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.p,{children:["After upgrading, verify the Python version by running ",(0,t.jsx)(e.code,{children:"python --version"})," or ",(0,t.jsx)(e.code,{children:"python3 --version"}),", as described earlier."]}),"\n",(0,t.jsx)(e.h3,{id:"special-note-about-ubuntu-1804",children:"Special note about Ubuntu 18.04"}),"\n",(0,t.jsx)(e.p,{children:"Ubuntu 18.04 still uses python 3.6 by default, which is end-of-life. We generally recommend using python 3.10. If you know how to install py3.10, please go ahead. But the easiest version of python 3 to use with Ubuntu 18.04 is python 3.8, which can be installed as follows without adding any extra repositories:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-shell",children:"# Prepare Ubuntu to install things\nsudo apt-get update\n# Install the basics\nsudo apt-get install -y python3.8 python3.8-distutils curl\n# Configure `python3` to run python3.8 by default\nsudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 10\n# Download and install pip3.8\ncurl https://bootstrap.pypa.io/get-pip.py > /tmp/get-pip.py\nsudo python3.8 /tmp/get-pip.py\n# Configure `pip3` to run pip3.8\nsudo update-alternatives --install /usr/bin/pip3 pip3 $(which pip3.8) 10\n# Now we can install Groundlight!\npip3 install groundlight\n"})}),"\n",(0,t.jsx)(e.h2,{id:"ready-to-go",children:"Ready to go!"}),"\n",(0,t.jsxs)(e.p,{children:["You're now ready to start using the Groundlight SDK in your projects. For more information on using the SDK, refer to the ",(0,t.jsx)(e.a,{href:"/docs/getting-started/api-tokens",children:"API Tokens"})," and ",(0,t.jsx)(e.a,{href:"/docs/building-applications",children:"Building Applications"})," documentation pages."]})]})}function u(n={}){const{wrapper:e}={...(0,s.a)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(d,{...n})}):d(n)}},1151:(n,e,i)=>{i.d(e,{Z:()=>r,a:()=>l});var t=i(7294);const s={},o=t.createContext(s);function l(n){const e=t.useContext(o);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function r(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:l(n.components),t.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.b0089de4.js b/assets/js/935f2afb.25c0e4ed.js similarity index 97% rename from assets/js/935f2afb.b0089de4.js rename to assets/js/935f2afb.25c0e4ed.js index 8fce20f2..cd50de82 100644 --- a/assets/js/935f2afb.b0089de4.js +++ b/assets/js/935f2afb.25c0e4ed.js @@ -1 +1 @@ -"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[53],{1109:i=>{i.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Getting Started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"API Tokens","href":"/python-sdk/docs/getting-started/api-tokens","docId":"getting-started/api-tokens","unlisted":false},{"type":"link","label":"Writing Queries","href":"/python-sdk/docs/getting-started/writing-queries","docId":"getting-started/writing-queries","unlisted":false},{"type":"link","label":"A Serious Example: Retail Analytics","href":"/python-sdk/docs/getting-started/retail-analytics","docId":"getting-started/retail-analytics","unlisted":false},{"type":"link","label":"A Fun Example: Dog-on-Couch Detector","href":"/python-sdk/docs/getting-started/dog-on-couch","docId":"getting-started/dog-on-couch","unlisted":false},{"type":"link","label":"A Quick Example: Live Stream Alert","href":"/python-sdk/docs/getting-started/streaming","docId":"getting-started/streaming","unlisted":false}],"href":"/python-sdk/docs/getting-started/"},{"type":"category","label":"Building Applications","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Sample Applications","href":"/python-sdk/docs/building-applications/sample-applications","docId":"building-applications/sample-applications","unlisted":false},{"type":"link","label":"Grabbing Images","href":"/python-sdk/docs/building-applications/grabbing-images","docId":"building-applications/grabbing-images","unlisted":false},{"type":"link","label":"Working with Detectors","href":"/python-sdk/docs/building-applications/working-with-detectors","docId":"building-applications/working-with-detectors","unlisted":false},{"type":"link","label":"Confidence Levels","href":"/python-sdk/docs/building-applications/managing-confidence","docId":"building-applications/managing-confidence","unlisted":false},{"type":"link","label":"Handling Server Errors","href":"/python-sdk/docs/building-applications/handling-errors","docId":"building-applications/handling-errors","unlisted":false},{"type":"link","label":"Asynchronous Queries","href":"/python-sdk/docs/building-applications/async-queries","docId":"building-applications/async-queries","unlisted":false},{"type":"link","label":"Using Groundlight on the Edge","href":"/python-sdk/docs/building-applications/edge","docId":"building-applications/edge","unlisted":false},{"type":"link","label":"Industrial and Manufacturing Applications","href":"/python-sdk/docs/building-applications/industrial","docId":"building-applications/industrial","unlisted":false}],"href":"/python-sdk/docs/building-applications/"},{"type":"category","label":"Installation","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installing on Linux","href":"/python-sdk/docs/installation/linux","docId":"installation/linux","unlisted":false},{"type":"link","label":"Installing on macOS","href":"/python-sdk/docs/installation/macos","docId":"installation/macos","unlisted":false},{"type":"link","label":"Installing on Windows","href":"/python-sdk/docs/installation/windows","docId":"installation/windows","unlisted":false},{"type":"link","label":"Installing on Raspberry Pi","href":"/python-sdk/docs/installation/raspberry-pi","docId":"installation/raspberry-pi","unlisted":false},{"type":"link","label":"Installing on NVIDIA Jetson","href":"/python-sdk/docs/installation/nvidia-jetson","docId":"installation/nvidia-jetson","unlisted":false},{"type":"link","label":"Optional libraries","href":"/python-sdk/docs/installation/optional-libraries","docId":"installation/optional-libraries","unlisted":false},{"type":"link","label":"Monitoring Notification Server","href":"/python-sdk/docs/installation/monitoring-notification-server","docId":"installation/monitoring-notification-server","unlisted":false}],"href":"/python-sdk/docs/installation/"},{"type":"link","label":"IoT","href":"/python-sdk/docs/iot/","docId":"iot/esp32cam","unlisted":false},{"type":"link","label":"API Reference","href":"/python-sdk/docs/api-reference/","docId":"api-reference/redirect","unlisted":false}]},"docs":{"api-reference/redirect":{"id":"api-reference/redirect","title":"API Reference","description":"","sidebar":"tutorialSidebar"},"building-applications/async-queries":{"id":"building-applications/async-queries","title":"Asynchronous Queries","description":"Groundlight provides a simple interface for submitting asynchronous queries. This is useful for times in which the thread or process or machine submitting image queries is not the same thread or machine that will be retrieving and using the results. For example, you might have a forward deployed robot or camera that submits image queries to Groundlight, and a separate server that retrieves the results and takes action based on them. We will refer to these two machines as the submitting machine and the retrieving machine.","sidebar":"tutorialSidebar"},"building-applications/building-applications":{"id":"building-applications/building-applications","title":"Building Applications","description":"Groundlight provides a powerful \\"computer vision powered by natural language\\" system that enables you to build visual applications with minimal code. With Groundlight, you can quickly create applications for various use cases, from simple object detection to complex visual analysis.","sidebar":"tutorialSidebar"},"building-applications/edge":{"id":"building-applications/edge","title":"Using Groundlight on the Edge","description":"If your account has access to edge models, you can download and install them to your edge devices.","sidebar":"tutorialSidebar"},"building-applications/grabbing-images":{"id":"building-applications/grabbing-images","title":"Grabbing Images","description":"Groundlight\'s SDK accepts images in many popular formats, including PIL, OpenCV, and numpy arrays.","sidebar":"tutorialSidebar"},"building-applications/handling-errors":{"id":"building-applications/handling-errors","title":"Handling Server Errors","description":"When building applications with the Groundlight SDK, you may encounter server errors during API calls. This page covers how to handle such errors and build robust code that can gracefully handle exceptions.","sidebar":"tutorialSidebar"},"building-applications/industrial":{"id":"building-applications/industrial","title":"Industrial and Manufacturing Applications","description":"Modern natural language-based computer vision is transforming industrial and manufacturing applications by enabling more intuitive interaction with automation systems. Groundlight offers cutting-edge computer vision technology that can be seamlessly integrated into various industrial processes, enhancing efficiency, productivity, and quality control.","sidebar":"tutorialSidebar"},"building-applications/managing-confidence":{"id":"building-applications/managing-confidence","title":"Confidence Levels","description":"Groundlight gives you a simple way to control the trade-off of latency against accuracy. The longer you can wait for an answer to your image query, the better accuracy you can get. In particular, if the ML models are unsure of the best response, they will escalate the image query to more intensive analysis with more complex models and real-time human monitors as needed. Your code can easily wait for this delayed response. Either way, these new results are automatically trained into your models so your next queries will get better results faster.","sidebar":"tutorialSidebar"},"building-applications/sample-applications":{"id":"building-applications/sample-applications","title":"Sample Applications","description":"Explore these GitHub repositories to see examples of Groundlight-powered applications:","sidebar":"tutorialSidebar"},"building-applications/working-with-detectors":{"id":"building-applications/working-with-detectors","title":"Working with Detectors","description":"Explicitly create a new detector","sidebar":"tutorialSidebar"},"getting-started/api-tokens":{"id":"getting-started/api-tokens","title":"API Tokens","description":"About API Tokens","sidebar":"tutorialSidebar"},"getting-started/dog-on-couch":{"id":"getting-started/dog-on-couch","title":"A Fun Example: Dog-on-Couch Detector","description":"Here is a whimsical example of how you could use Groundlight in your home to keep your dog off the couch. This document will guide you through creating a complete application. If the dog is detected on the couch, the application will play a pre-recorded sound over the computer\'s speakers, instructing the dog to get off the couch. Be sure to record your own voice so that your dog pays attention to you.","sidebar":"tutorialSidebar"},"getting-started/getting-started":{"id":"getting-started/getting-started","title":"Getting Started","description":"Computer Vision powered by Natural Language","sidebar":"tutorialSidebar"},"getting-started/retail-analytics":{"id":"getting-started/retail-analytics","title":"A Serious Example: Retail Analytics","description":"Tracking utilization of a customer service counter","sidebar":"tutorialSidebar"},"getting-started/streaming":{"id":"getting-started/streaming","title":"A Quick Example: Live Stream Alert","description":"A quick example to get used to setting up detectors and asking good questions: set up a monitor on a live stream.","sidebar":"tutorialSidebar"},"getting-started/writing-queries":{"id":"getting-started/writing-queries","title":"Writing Queries","description":"Introduction","sidebar":"tutorialSidebar"},"installation/installation":{"id":"installation/installation","title":"Installation","description":"Welcome to the Groundlight SDK installation guide. In this guide, you\'ll find step-by-step instructions on how to install and set up the Groundlight SDK on various platforms.","sidebar":"tutorialSidebar"},"installation/linux":{"id":"installation/linux","title":"Installing on Linux","description":"This guide will help you install the Groundlight SDK on Linux. The Groundlight SDK requires Python 3.7 or higher.","sidebar":"tutorialSidebar"},"installation/macos":{"id":"installation/macos","title":"Installing on macOS","description":"This guide will help you install the Groundlight SDK on macOS. The Groundlight SDK requires Python 3.7 or higher.","sidebar":"tutorialSidebar"},"installation/monitoring-notification-server":{"id":"installation/monitoring-notification-server","title":"Monitoring Notification Server","description":"This is the easiest way to deploy your Groundlight detectors on a linux computer. All configuration is done through a web user interface, and no code development is required.","sidebar":"tutorialSidebar"},"installation/nvidia-jetson":{"id":"installation/nvidia-jetson","title":"Installing on NVIDIA Jetson","description":"This guide will help you install the Groundlight SDK on NVIDIA Jetson devices. The Groundlight SDK requires Python 3.7 or higher.","sidebar":"tutorialSidebar"},"installation/optional-libraries":{"id":"installation/optional-libraries","title":"Optional libraries","description":"Smaller is better!","sidebar":"tutorialSidebar"},"installation/raspberry-pi":{"id":"installation/raspberry-pi","title":"Installing on Raspberry Pi","description":"This guide will help you install the Groundlight SDK on Raspberry Pi. The Groundlight SDK requires Python 3.7 or higher.","sidebar":"tutorialSidebar"},"installation/windows":{"id":"installation/windows","title":"Installing on Windows","description":"This guide will help you install the Groundlight SDK on Windows. The Groundlight SDK requires Python 3.7 or higher.","sidebar":"tutorialSidebar"},"iot/esp32cam":{"id":"iot/esp32cam","title":"Setting up an ESP32 Camera Board","description":"Groundlight supplies a tool for no-code deployment of a detector to an ESP32 Camera board. You can find it at https://iot.groundlight.ai/espcam.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[53],{1109:i=>{i.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Getting Started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"API Tokens","href":"/python-sdk/docs/getting-started/api-tokens","docId":"getting-started/api-tokens","unlisted":false},{"type":"link","label":"Writing Queries","href":"/python-sdk/docs/getting-started/writing-queries","docId":"getting-started/writing-queries","unlisted":false},{"type":"link","label":"A Serious Example: Retail Analytics","href":"/python-sdk/docs/getting-started/retail-analytics","docId":"getting-started/retail-analytics","unlisted":false},{"type":"link","label":"A Fun Example: Dog-on-Couch Detector","href":"/python-sdk/docs/getting-started/dog-on-couch","docId":"getting-started/dog-on-couch","unlisted":false},{"type":"link","label":"A Quick Example: Live Stream Alert","href":"/python-sdk/docs/getting-started/streaming","docId":"getting-started/streaming","unlisted":false}],"href":"/python-sdk/docs/getting-started/"},{"type":"category","label":"Building Applications","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Sample Applications","href":"/python-sdk/docs/building-applications/sample-applications","docId":"building-applications/sample-applications","unlisted":false},{"type":"link","label":"Grabbing Images","href":"/python-sdk/docs/building-applications/grabbing-images","docId":"building-applications/grabbing-images","unlisted":false},{"type":"link","label":"Working with Detectors","href":"/python-sdk/docs/building-applications/working-with-detectors","docId":"building-applications/working-with-detectors","unlisted":false},{"type":"link","label":"Confidence Levels","href":"/python-sdk/docs/building-applications/managing-confidence","docId":"building-applications/managing-confidence","unlisted":false},{"type":"link","label":"Handling Server Errors","href":"/python-sdk/docs/building-applications/handling-errors","docId":"building-applications/handling-errors","unlisted":false},{"type":"link","label":"Asynchronous Queries","href":"/python-sdk/docs/building-applications/async-queries","docId":"building-applications/async-queries","unlisted":false},{"type":"link","label":"Using Groundlight on the Edge","href":"/python-sdk/docs/building-applications/edge","docId":"building-applications/edge","unlisted":false},{"type":"link","label":"Industrial and Manufacturing Applications","href":"/python-sdk/docs/building-applications/industrial","docId":"building-applications/industrial","unlisted":false}],"href":"/python-sdk/docs/building-applications/"},{"type":"category","label":"Installation","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installing on Linux","href":"/python-sdk/docs/installation/linux","docId":"installation/linux","unlisted":false},{"type":"link","label":"Installing on macOS","href":"/python-sdk/docs/installation/macos","docId":"installation/macos","unlisted":false},{"type":"link","label":"Installing on Windows","href":"/python-sdk/docs/installation/windows","docId":"installation/windows","unlisted":false},{"type":"link","label":"Installing on Raspberry Pi","href":"/python-sdk/docs/installation/raspberry-pi","docId":"installation/raspberry-pi","unlisted":false},{"type":"link","label":"Installing on NVIDIA Jetson","href":"/python-sdk/docs/installation/nvidia-jetson","docId":"installation/nvidia-jetson","unlisted":false},{"type":"link","label":"Optional libraries","href":"/python-sdk/docs/installation/optional-libraries","docId":"installation/optional-libraries","unlisted":false},{"type":"link","label":"Monitoring Notification Server","href":"/python-sdk/docs/installation/monitoring-notification-server","docId":"installation/monitoring-notification-server","unlisted":false}],"href":"/python-sdk/docs/installation/"},{"type":"link","label":"IoT","href":"/python-sdk/docs/iot/","docId":"iot/esp32cam","unlisted":false},{"type":"link","label":"API Reference","href":"/python-sdk/docs/api-reference/","docId":"api-reference/redirect","unlisted":false}]},"docs":{"api-reference/redirect":{"id":"api-reference/redirect","title":"API Reference","description":"","sidebar":"tutorialSidebar"},"building-applications/async-queries":{"id":"building-applications/async-queries","title":"Asynchronous Queries","description":"Groundlight provides a simple interface for submitting asynchronous queries. This is useful for times in which the thread or process or machine submitting image queries is not the same thread or machine that will be retrieving and using the results. For example, you might have a forward deployed robot or camera that submits image queries to Groundlight, and a separate server that retrieves the results and takes action based on them. We will refer to these two machines as the submitting machine and the retrieving machine.","sidebar":"tutorialSidebar"},"building-applications/building-applications":{"id":"building-applications/building-applications","title":"Building Applications","description":"Groundlight provides a powerful \\"computer vision powered by natural language\\" system that enables you to build visual applications with minimal code. With Groundlight, you can quickly create applications for various use cases, from simple object detection to complex visual analysis.","sidebar":"tutorialSidebar"},"building-applications/edge":{"id":"building-applications/edge","title":"Using Groundlight on the Edge","description":"If your account has access to edge models, you can download and install them to your edge devices.","sidebar":"tutorialSidebar"},"building-applications/grabbing-images":{"id":"building-applications/grabbing-images","title":"Grabbing Images","description":"Groundlight\'s SDK accepts images in many popular formats, including PIL, OpenCV, and numpy arrays.","sidebar":"tutorialSidebar"},"building-applications/handling-errors":{"id":"building-applications/handling-errors","title":"Handling Server Errors","description":"When building applications with the Groundlight SDK, you may encounter server errors during API calls. This page covers how to handle such errors and build robust code that can gracefully handle exceptions.","sidebar":"tutorialSidebar"},"building-applications/industrial":{"id":"building-applications/industrial","title":"Industrial and Manufacturing Applications","description":"Modern natural language-based computer vision is transforming industrial and manufacturing applications by enabling more intuitive interaction with automation systems. Groundlight offers cutting-edge computer vision technology that can be seamlessly integrated into various industrial processes, enhancing efficiency, productivity, and quality control.","sidebar":"tutorialSidebar"},"building-applications/managing-confidence":{"id":"building-applications/managing-confidence","title":"Confidence Levels","description":"Groundlight gives you a simple way to control the trade-off of latency against accuracy. The longer you can wait for an answer to your image query, the better accuracy you can get. In particular, if the ML models are unsure of the best response, they will escalate the image query to more intensive analysis with more complex models and real-time human monitors as needed. Your code can easily wait for this delayed response. Either way, these new results are automatically trained into your models so your next queries will get better results faster.","sidebar":"tutorialSidebar"},"building-applications/sample-applications":{"id":"building-applications/sample-applications","title":"Sample Applications","description":"Explore these GitHub repositories to see examples of Groundlight-powered applications:","sidebar":"tutorialSidebar"},"building-applications/working-with-detectors":{"id":"building-applications/working-with-detectors","title":"Working with Detectors","description":"Explicitly create a new detector","sidebar":"tutorialSidebar"},"getting-started/api-tokens":{"id":"getting-started/api-tokens","title":"API Tokens","description":"About API Tokens","sidebar":"tutorialSidebar"},"getting-started/dog-on-couch":{"id":"getting-started/dog-on-couch","title":"A Fun Example: Dog-on-Couch Detector","description":"Here is a whimsical example of how you could use Groundlight in your home to keep your dog off the couch. This document will guide you through creating a complete application. If the dog is detected on the couch, the application will play a pre-recorded sound over the computer\'s speakers, instructing the dog to get off the couch. Be sure to record your own voice so that your dog pays attention to you.","sidebar":"tutorialSidebar"},"getting-started/getting-started":{"id":"getting-started/getting-started","title":"Getting Started","description":"Computer Vision powered by Natural Language","sidebar":"tutorialSidebar"},"getting-started/retail-analytics":{"id":"getting-started/retail-analytics","title":"A Serious Example: Retail Analytics","description":"Tracking utilization of a customer service counter","sidebar":"tutorialSidebar"},"getting-started/streaming":{"id":"getting-started/streaming","title":"A Quick Example: Live Stream Alert","description":"A quick example to get used to setting up detectors and asking good questions: set up a monitor on a live stream.","sidebar":"tutorialSidebar"},"getting-started/writing-queries":{"id":"getting-started/writing-queries","title":"Writing Queries","description":"Introduction","sidebar":"tutorialSidebar"},"installation/installation":{"id":"installation/installation","title":"Installation","description":"Welcome to the Groundlight SDK installation guide. In this guide, you\'ll find step-by-step instructions on how to install and set up the Groundlight SDK on various platforms.","sidebar":"tutorialSidebar"},"installation/linux":{"id":"installation/linux","title":"Installing on Linux","description":"This guide will help you install the Groundlight SDK on Linux. The Groundlight SDK requires Python 3.8 or higher.","sidebar":"tutorialSidebar"},"installation/macos":{"id":"installation/macos","title":"Installing on macOS","description":"This guide will help you install the Groundlight SDK on macOS. The Groundlight SDK requires Python 3.8 or higher.","sidebar":"tutorialSidebar"},"installation/monitoring-notification-server":{"id":"installation/monitoring-notification-server","title":"Monitoring Notification Server","description":"This is the easiest way to deploy your Groundlight detectors on a linux computer. All configuration is done through a web user interface, and no code development is required.","sidebar":"tutorialSidebar"},"installation/nvidia-jetson":{"id":"installation/nvidia-jetson","title":"Installing on NVIDIA Jetson","description":"This guide will help you install the Groundlight SDK on NVIDIA Jetson devices. The Groundlight SDK requires Python 3.8 or higher.","sidebar":"tutorialSidebar"},"installation/optional-libraries":{"id":"installation/optional-libraries","title":"Optional libraries","description":"Smaller is better!","sidebar":"tutorialSidebar"},"installation/raspberry-pi":{"id":"installation/raspberry-pi","title":"Installing on Raspberry Pi","description":"This guide will help you install the Groundlight SDK on Raspberry Pi. The Groundlight SDK requires Python 3.8 or higher.","sidebar":"tutorialSidebar"},"installation/windows":{"id":"installation/windows","title":"Installing on Windows","description":"This guide will help you install the Groundlight SDK on Windows. The Groundlight SDK requires Python 3.8 or higher.","sidebar":"tutorialSidebar"},"iot/esp32cam":{"id":"iot/esp32cam","title":"Setting up an ESP32 Camera Board","description":"Groundlight supplies a tool for no-code deployment of a detector to an ESP32 Camera board. You can find it at https://iot.groundlight.ai/espcam.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/d5ec6805.03723cbd.js b/assets/js/d5ec6805.620a03ef.js similarity index 95% rename from assets/js/d5ec6805.03723cbd.js rename to assets/js/d5ec6805.620a03ef.js index 4001a551..96b29dc1 100644 --- a/assets/js/d5ec6805.03723cbd.js +++ b/assets/js/d5ec6805.620a03ef.js @@ -1 +1 @@ -"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[6986],{6901:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>g,frontMatter:()=>s,metadata:()=>l,toc:()=>h});var o=i(5893),t=i(1151);const s={},r="Installing on Windows",l={id:"installation/windows",title:"Installing on Windows",description:"This guide will help you install the Groundlight SDK on Windows. The Groundlight SDK requires Python 3.7 or higher.",source:"@site/docs/installation/3-windows.md",sourceDirName:"installation",slug:"/installation/windows",permalink:"/python-sdk/docs/installation/windows",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/installation/3-windows.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Installing on macOS",permalink:"/python-sdk/docs/installation/macos"},next:{title:"Installing on Raspberry Pi",permalink:"/python-sdk/docs/installation/raspberry-pi"}},d={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Basic Installation",id:"basic-installation",level:2},{value:"Installing Groundlight SDK",id:"installing-groundlight-sdk",level:3},{value:"Checking Groundlight SDK Version",id:"checking-groundlight-sdk-version",level:3},{value:"Upgrading Groundlight SDK",id:"upgrading-groundlight-sdk",level:3},{value:"Getting the right Python Version",id:"getting-the-right-python-version",level:2},{value:"Upgrading Python on Windows",id:"upgrading-python-on-windows",level:3},{value:"Ready to go!",id:"ready-to-go",level:2}];function a(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...n.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(e.h1,{id:"installing-on-windows",children:"Installing on Windows"}),"\n",(0,o.jsx)(e.p,{children:"This guide will help you install the Groundlight SDK on Windows. The Groundlight SDK requires Python 3.7 or higher."}),"\n",(0,o.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,o.jsx)(e.p,{children:"Ensure that you have the following installed on your system:"}),"\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"Python 3.7 or higher"}),"\n",(0,o.jsx)(e.li,{children:"pip (Python package installer)"}),"\n"]}),"\n",(0,o.jsx)(e.h2,{id:"basic-installation",children:"Basic Installation"}),"\n",(0,o.jsx)(e.p,{children:"Assuming you have Python 3.7 or higher installed on your system, you can proceed with the following steps to install or upgrade the Groundlight SDK:"}),"\n",(0,o.jsx)(e.h3,{id:"installing-groundlight-sdk",children:"Installing Groundlight SDK"}),"\n",(0,o.jsx)(e.p,{children:"To install the Groundlight SDK using pip, run the following command in your Command Prompt:"}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:"pip install groundlight\n"})}),"\n",(0,o.jsxs)(e.p,{children:["If you're also using ",(0,o.jsx)(e.code,{children:"python2"})," on your system, you might need to use ",(0,o.jsx)(e.code,{children:"pip3"})," instead:"]}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:"pip3 install groundlight\n"})}),"\n",(0,o.jsx)(e.p,{children:"The Groundlight SDK is now installed and ready for use."}),"\n",(0,o.jsx)(e.h3,{id:"checking-groundlight-sdk-version",children:"Checking Groundlight SDK Version"}),"\n",(0,o.jsx)(e.p,{children:"To check if the Groundlight SDK is installed and to display its version, you can use the following Python one-liner:"}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:'python -c "import groundlight; print(groundlight.__version__)"\n'})}),"\n",(0,o.jsx)(e.h3,{id:"upgrading-groundlight-sdk",children:"Upgrading Groundlight SDK"}),"\n",(0,o.jsx)(e.p,{children:"If you need to upgrade the Groundlight SDK to the latest version, use the following pip command:"}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:"pip install --upgrade groundlight\n"})}),"\n",(0,o.jsxs)(e.p,{children:["Or, if you're using ",(0,o.jsx)(e.code,{children:"pip3"}),":"]}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:"pip3 install --upgrade groundlight\n"})}),"\n",(0,o.jsx)(e.p,{children:'After upgrading, you can use the Python one-liner mentioned in the "Checking Groundlight SDK Version" section to verify that the latest version is now installed.'}),"\n",(0,o.jsx)(e.h2,{id:"getting-the-right-python-version",children:"Getting the right Python Version"}),"\n",(0,o.jsx)(e.p,{children:"To check your installed Python version, open a Command Prompt and run:"}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:"python --version\n"})}),"\n",(0,o.jsx)(e.p,{children:'If you see a version number starting with "3.7" or higher (e.g., "3.7.5" or "3.9.0"), you\'re good to go. If not, you might need to upgrade Python on your system.'}),"\n",(0,o.jsx)(e.h3,{id:"upgrading-python-on-windows",children:"Upgrading Python on Windows"}),"\n",(0,o.jsxs)(e.p,{children:["Download the latest Python installer from the ",(0,o.jsx)(e.a,{href:"https://www.python.org/downloads/windows/",children:"official Python website"})," and run it."]}),"\n",(0,o.jsxs)(e.p,{children:["After upgrading, verify the Python version by running ",(0,o.jsx)(e.code,{children:"python --version"})," or ",(0,o.jsx)(e.code,{children:"python3 --version"}),", as described earlier."]}),"\n",(0,o.jsx)(e.h2,{id:"ready-to-go",children:"Ready to go!"}),"\n",(0,o.jsxs)(e.p,{children:["You're now ready to start using the Groundlight SDK in your projects. For more information on using the SDK, refer to the ",(0,o.jsx)(e.a,{href:"/docs/getting-started/api-tokens",children:"API Tokens"})," and ",(0,o.jsx)(e.a,{href:"/docs/building-applications",children:"Building Applications"})," documentation pages."]})]})}function g(n={}){const{wrapper:e}={...(0,t.a)(),...n.components};return e?(0,o.jsx)(e,{...n,children:(0,o.jsx)(a,{...n})}):a(n)}},1151:(n,e,i)=>{i.d(e,{Z:()=>l,a:()=>r});var o=i(7294);const t={},s=o.createContext(t);function r(n){const e=o.useContext(s);return o.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function l(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(t):n.components||t:r(n.components),o.createElement(s.Provider,{value:e},n.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[6986],{6901:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>g,frontMatter:()=>s,metadata:()=>l,toc:()=>h});var o=i(5893),t=i(1151);const s={},r="Installing on Windows",l={id:"installation/windows",title:"Installing on Windows",description:"This guide will help you install the Groundlight SDK on Windows. The Groundlight SDK requires Python 3.8 or higher.",source:"@site/docs/installation/3-windows.md",sourceDirName:"installation",slug:"/installation/windows",permalink:"/python-sdk/docs/installation/windows",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/installation/3-windows.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Installing on macOS",permalink:"/python-sdk/docs/installation/macos"},next:{title:"Installing on Raspberry Pi",permalink:"/python-sdk/docs/installation/raspberry-pi"}},d={},h=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Basic Installation",id:"basic-installation",level:2},{value:"Installing Groundlight SDK",id:"installing-groundlight-sdk",level:3},{value:"Checking Groundlight SDK Version",id:"checking-groundlight-sdk-version",level:3},{value:"Upgrading Groundlight SDK",id:"upgrading-groundlight-sdk",level:3},{value:"Getting the right Python Version",id:"getting-the-right-python-version",level:2},{value:"Upgrading Python on Windows",id:"upgrading-python-on-windows",level:3},{value:"Ready to go!",id:"ready-to-go",level:2}];function a(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...n.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(e.h1,{id:"installing-on-windows",children:"Installing on Windows"}),"\n",(0,o.jsx)(e.p,{children:"This guide will help you install the Groundlight SDK on Windows. The Groundlight SDK requires Python 3.8 or higher."}),"\n",(0,o.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,o.jsx)(e.p,{children:"Ensure that you have the following installed on your system:"}),"\n",(0,o.jsxs)(e.ul,{children:["\n",(0,o.jsx)(e.li,{children:"Python 3.8 or higher"}),"\n",(0,o.jsx)(e.li,{children:"pip (Python package installer)"}),"\n"]}),"\n",(0,o.jsx)(e.h2,{id:"basic-installation",children:"Basic Installation"}),"\n",(0,o.jsx)(e.p,{children:"Assuming you have Python 3.8 or higher installed on your system, you can proceed with the following steps to install or upgrade the Groundlight SDK:"}),"\n",(0,o.jsx)(e.h3,{id:"installing-groundlight-sdk",children:"Installing Groundlight SDK"}),"\n",(0,o.jsx)(e.p,{children:"To install the Groundlight SDK using pip, run the following command in your Command Prompt:"}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:"pip install groundlight\n"})}),"\n",(0,o.jsxs)(e.p,{children:["If you're also using ",(0,o.jsx)(e.code,{children:"python2"})," on your system, you might need to use ",(0,o.jsx)(e.code,{children:"pip3"})," instead:"]}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:"pip3 install groundlight\n"})}),"\n",(0,o.jsx)(e.p,{children:"The Groundlight SDK is now installed and ready for use."}),"\n",(0,o.jsx)(e.h3,{id:"checking-groundlight-sdk-version",children:"Checking Groundlight SDK Version"}),"\n",(0,o.jsx)(e.p,{children:"To check if the Groundlight SDK is installed and to display its version, you can use the following Python one-liner:"}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:'python -c "import groundlight; print(groundlight.__version__)"\n'})}),"\n",(0,o.jsx)(e.h3,{id:"upgrading-groundlight-sdk",children:"Upgrading Groundlight SDK"}),"\n",(0,o.jsx)(e.p,{children:"If you need to upgrade the Groundlight SDK to the latest version, use the following pip command:"}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:"pip install --upgrade groundlight\n"})}),"\n",(0,o.jsxs)(e.p,{children:["Or, if you're using ",(0,o.jsx)(e.code,{children:"pip3"}),":"]}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:"pip3 install --upgrade groundlight\n"})}),"\n",(0,o.jsx)(e.p,{children:'After upgrading, you can use the Python one-liner mentioned in the "Checking Groundlight SDK Version" section to verify that the latest version is now installed.'}),"\n",(0,o.jsx)(e.h2,{id:"getting-the-right-python-version",children:"Getting the right Python Version"}),"\n",(0,o.jsx)(e.p,{children:"To check your installed Python version, open a Command Prompt and run:"}),"\n",(0,o.jsx)(e.pre,{children:(0,o.jsx)(e.code,{className:"language-bash",children:"python --version\n"})}),"\n",(0,o.jsx)(e.p,{children:'If you see a version number starting with "3.8" or higher (e.g., "3.8.5" or "3.9.0"), you\'re good to go. If not, you might need to upgrade Python on your system.'}),"\n",(0,o.jsx)(e.h3,{id:"upgrading-python-on-windows",children:"Upgrading Python on Windows"}),"\n",(0,o.jsxs)(e.p,{children:["Download the latest Python installer from the ",(0,o.jsx)(e.a,{href:"https://www.python.org/downloads/windows/",children:"official Python website"})," and run it."]}),"\n",(0,o.jsxs)(e.p,{children:["After upgrading, verify the Python version by running ",(0,o.jsx)(e.code,{children:"python --version"})," or ",(0,o.jsx)(e.code,{children:"python3 --version"}),", as described earlier."]}),"\n",(0,o.jsx)(e.h2,{id:"ready-to-go",children:"Ready to go!"}),"\n",(0,o.jsxs)(e.p,{children:["You're now ready to start using the Groundlight SDK in your projects. For more information on using the SDK, refer to the ",(0,o.jsx)(e.a,{href:"/docs/getting-started/api-tokens",children:"API Tokens"})," and ",(0,o.jsx)(e.a,{href:"/docs/building-applications",children:"Building Applications"})," documentation pages."]})]})}function g(n={}){const{wrapper:e}={...(0,t.a)(),...n.components};return e?(0,o.jsx)(e,{...n,children:(0,o.jsx)(a,{...n})}):a(n)}},1151:(n,e,i)=>{i.d(e,{Z:()=>l,a:()=>r});var o=i(7294);const t={},s=o.createContext(t);function r(n){const e=o.useContext(s);return o.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function l(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(t):n.components||t:r(n.components),o.createElement(s.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/ddfecd50.128fb40f.js b/assets/js/ddfecd50.96fca63e.js similarity index 98% rename from assets/js/ddfecd50.128fb40f.js rename to assets/js/ddfecd50.96fca63e.js index e7d29d87..470964ce 100644 --- a/assets/js/ddfecd50.128fb40f.js +++ b/assets/js/ddfecd50.96fca63e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[4609],{1178:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var o=t(5893),r=t(1151);const i={},a="A Fun Example: Dog-on-Couch Detector",c={id:"getting-started/dog-on-couch",title:"A Fun Example: Dog-on-Couch Detector",description:"Here is a whimsical example of how you could use Groundlight in your home to keep your dog off the couch. This document will guide you through creating a complete application. If the dog is detected on the couch, the application will play a pre-recorded sound over the computer's speakers, instructing the dog to get off the couch. Be sure to record your own voice so that your dog pays attention to you.",source:"@site/docs/getting-started/4-dog-on-couch.md",sourceDirName:"getting-started",slug:"/getting-started/dog-on-couch",permalink:"/python-sdk/docs/getting-started/dog-on-couch",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/getting-started/4-dog-on-couch.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"A Serious Example: Retail Analytics",permalink:"/python-sdk/docs/getting-started/retail-analytics"},next:{title:"A Quick Example: Live Stream Alert",permalink:"/python-sdk/docs/getting-started/streaming"}},s={},l=[{value:"Requirements",id:"requirements",level:2},{value:"Installation",id:"installation",level:2},{value:"Creating the Application",id:"creating-the-application",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"a-fun-example-dog-on-couch-detector",children:"A Fun Example: Dog-on-Couch Detector"}),"\n",(0,o.jsx)(n.p,{children:"Here is a whimsical example of how you could use Groundlight in your home to keep your dog off the couch. This document will guide you through creating a complete application. If the dog is detected on the couch, the application will play a pre-recorded sound over the computer's speakers, instructing the dog to get off the couch. Be sure to record your own voice so that your dog pays attention to you."}),"\n",(0,o.jsx)(n.h2,{id:"requirements",children:"Requirements"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/docs/installation/",children:"Groundlight SDK"})," with Python 3.7 or higher"]}),"\n",(0,o.jsx)(n.li,{children:"A supported USB or network-connected camera"}),"\n",(0,o.jsxs)(n.li,{children:["A pre-recorded sound file (e.g., ",(0,o.jsx)(n.code,{children:"get_off_couch.mp3"}),")"]}),"\n",(0,o.jsx)(n.li,{children:"A couch and a dog are recommended for proper end-to-end testing."}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,o.jsx)(n.p,{children:"Ensure you have Python 3.7 or higher installed, and then install the Groundlight SDK and OpenCV library:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"pip install groundlight opencv-python pillow pyaudio\n"})}),"\n",(0,o.jsx)(n.h2,{id:"creating-the-application",children:"Creating the Application"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["First, log in to the ",(0,o.jsx)(n.a,{href:"https://app.groundlight.ai",children:"Groundlight application"})," and get an ",(0,o.jsx)(n.a,{href:"api-tokens",children:"API Token"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Next, we'll write the Python script for the application. Import the required libraries:"}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",metastring:"notest",children:"import time\nimport cv2\nfrom groundlight import Groundlight\nfrom PIL import Image\nimport pyaudio\nimport wave\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"3",children:["\n",(0,o.jsx)(n.li,{children:"Define a function to capture an image from the camera using OpenCV:"}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def capture_image():\n cap = cv2.VideoCapture(0)\n\n ret, frame = cap.read()\n cap.release()\n\n if ret:\n # Convert to PIL image\n return Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))\n else:\n return None\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"4",children:["\n",(0,o.jsx)(n.li,{children:"Define a function to play the pre-recorded sound:"}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def play_sound(file_path):\n CHUNK = 1024\n wf = wave.open(file_path, 'rb')\n\n p = pyaudio.PyAudio()\n\n stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),\n channels=wf.getnchannels(),\n rate=wf.getframerate(),\n output=True)\n\n data = wf.readframes(CHUNK)\n\n while data:\n stream.write(data)\n data = wf.readframes(CHUNK)\n\n stream.stop_stream()\n stream.close()\n\n p.terminate()\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"5",children:["\n",(0,o.jsx)(n.li,{children:"Write the main application loop:"}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",metastring:"notest",children:'gl = Groundlight()\n\ndetector = gl.get_or_create_detector("Dog on Couch Detector")\n\nwhile True:\n image = capture_image()\n if image:\n try:\n iq = gl.submit_image_query(image=image, detector=detector, wait=60)\n answer = iq.result.label\n if answer == "YES":\n print("Dog detected on the couch!")\n play_sound("get_off_couch.mp3")\n except Exception as e:\n print(f"Error submitting image query: {e}")\n else:\n print("Failed to capture image")\n\n # Sleep for a minute before checking again\n time.sleep(60)\n'})}),"\n",(0,o.jsxs)(n.p,{children:["This application captures an image using the ",(0,o.jsx)(n.code,{children:"capture_image"})," function, then submits it to the Groundlight API for analysis. If the dog is detected on the couch, it plays the pre-recorded sound using the ",(0,o.jsx)(n.code,{children:"play_sound"})," function."]}),"\n",(0,o.jsxs)(n.p,{children:["Save the script as ",(0,o.jsx)(n.code,{children:"dog_on_couch_detector.py"})," and run it:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"python dog_on_couch_detector.py\n"})})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>a});var o=t(7294);const r={},i=o.createContext(r);function a(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[4609],{1178:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var o=t(5893),r=t(1151);const i={},a="A Fun Example: Dog-on-Couch Detector",c={id:"getting-started/dog-on-couch",title:"A Fun Example: Dog-on-Couch Detector",description:"Here is a whimsical example of how you could use Groundlight in your home to keep your dog off the couch. This document will guide you through creating a complete application. If the dog is detected on the couch, the application will play a pre-recorded sound over the computer's speakers, instructing the dog to get off the couch. Be sure to record your own voice so that your dog pays attention to you.",source:"@site/docs/getting-started/4-dog-on-couch.md",sourceDirName:"getting-started",slug:"/getting-started/dog-on-couch",permalink:"/python-sdk/docs/getting-started/dog-on-couch",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/getting-started/4-dog-on-couch.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"A Serious Example: Retail Analytics",permalink:"/python-sdk/docs/getting-started/retail-analytics"},next:{title:"A Quick Example: Live Stream Alert",permalink:"/python-sdk/docs/getting-started/streaming"}},s={},l=[{value:"Requirements",id:"requirements",level:2},{value:"Installation",id:"installation",level:2},{value:"Creating the Application",id:"creating-the-application",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"a-fun-example-dog-on-couch-detector",children:"A Fun Example: Dog-on-Couch Detector"}),"\n",(0,o.jsx)(n.p,{children:"Here is a whimsical example of how you could use Groundlight in your home to keep your dog off the couch. This document will guide you through creating a complete application. If the dog is detected on the couch, the application will play a pre-recorded sound over the computer's speakers, instructing the dog to get off the couch. Be sure to record your own voice so that your dog pays attention to you."}),"\n",(0,o.jsx)(n.h2,{id:"requirements",children:"Requirements"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/docs/installation/",children:"Groundlight SDK"})," with Python 3.8 or higher"]}),"\n",(0,o.jsx)(n.li,{children:"A supported USB or network-connected camera"}),"\n",(0,o.jsxs)(n.li,{children:["A pre-recorded sound file (e.g., ",(0,o.jsx)(n.code,{children:"get_off_couch.mp3"}),")"]}),"\n",(0,o.jsx)(n.li,{children:"A couch and a dog are recommended for proper end-to-end testing."}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,o.jsx)(n.p,{children:"Ensure you have Python 3.8 or higher installed, and then install the Groundlight SDK and OpenCV library:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"pip install groundlight opencv-python pillow pyaudio\n"})}),"\n",(0,o.jsx)(n.h2,{id:"creating-the-application",children:"Creating the Application"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["First, log in to the ",(0,o.jsx)(n.a,{href:"https://app.groundlight.ai",children:"Groundlight application"})," and get an ",(0,o.jsx)(n.a,{href:"api-tokens",children:"API Token"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Next, we'll write the Python script for the application. Import the required libraries:"}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",metastring:"notest",children:"import time\nimport cv2\nfrom groundlight import Groundlight\nfrom PIL import Image\nimport pyaudio\nimport wave\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"3",children:["\n",(0,o.jsx)(n.li,{children:"Define a function to capture an image from the camera using OpenCV:"}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def capture_image():\n cap = cv2.VideoCapture(0)\n\n ret, frame = cap.read()\n cap.release()\n\n if ret:\n # Convert to PIL image\n return Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))\n else:\n return None\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"4",children:["\n",(0,o.jsx)(n.li,{children:"Define a function to play the pre-recorded sound:"}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",children:"def play_sound(file_path):\n CHUNK = 1024\n wf = wave.open(file_path, 'rb')\n\n p = pyaudio.PyAudio()\n\n stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),\n channels=wf.getnchannels(),\n rate=wf.getframerate(),\n output=True)\n\n data = wf.readframes(CHUNK)\n\n while data:\n stream.write(data)\n data = wf.readframes(CHUNK)\n\n stream.stop_stream()\n stream.close()\n\n p.terminate()\n"})}),"\n",(0,o.jsxs)(n.ol,{start:"5",children:["\n",(0,o.jsx)(n.li,{children:"Write the main application loop:"}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-python",metastring:"notest",children:'gl = Groundlight()\n\ndetector = gl.get_or_create_detector("Dog on Couch Detector")\n\nwhile True:\n image = capture_image()\n if image:\n try:\n iq = gl.submit_image_query(image=image, detector=detector, wait=60)\n answer = iq.result.label\n if answer == "YES":\n print("Dog detected on the couch!")\n play_sound("get_off_couch.mp3")\n except Exception as e:\n print(f"Error submitting image query: {e}")\n else:\n print("Failed to capture image")\n\n # Sleep for a minute before checking again\n time.sleep(60)\n'})}),"\n",(0,o.jsxs)(n.p,{children:["This application captures an image using the ",(0,o.jsx)(n.code,{children:"capture_image"})," function, then submits it to the Groundlight API for analysis. If the dog is detected on the couch, it plays the pre-recorded sound using the ",(0,o.jsx)(n.code,{children:"play_sound"})," function."]}),"\n",(0,o.jsxs)(n.p,{children:["Save the script as ",(0,o.jsx)(n.code,{children:"dog_on_couch_detector.py"})," and run it:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"python dog_on_couch_detector.py\n"})})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>a});var o=t(7294);const r={},i=o.createContext(r);function a(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f705f88e.7799550b.js b/assets/js/f705f88e.1ba90f45.js similarity index 94% rename from assets/js/f705f88e.7799550b.js rename to assets/js/f705f88e.1ba90f45.js index 6f2c30b7..290956be 100644 --- a/assets/js/f705f88e.7799550b.js +++ b/assets/js/f705f88e.1ba90f45.js @@ -1 +1 @@ -"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[537],{4440:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var t=i(5893),s=i(1151);const o={},l="Installing on NVIDIA Jetson",r={id:"installation/nvidia-jetson",title:"Installing on NVIDIA Jetson",description:"This guide will help you install the Groundlight SDK on NVIDIA Jetson devices. The Groundlight SDK requires Python 3.7 or higher.",source:"@site/docs/installation/5-nvidia-jetson.md",sourceDirName:"installation",slug:"/installation/nvidia-jetson",permalink:"/python-sdk/docs/installation/nvidia-jetson",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/installation/5-nvidia-jetson.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Installing on Raspberry Pi",permalink:"/python-sdk/docs/installation/raspberry-pi"},next:{title:"Optional libraries",permalink:"/python-sdk/docs/installation/optional-libraries"}},a={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Basic Installation",id:"basic-installation",level:2},{value:"Installing Groundlight SDK",id:"installing-groundlight-sdk",level:3},{value:"Using RTSP Streams",id:"using-rtsp-streams",level:2},{value:"Sample application",id:"sample-application",level:2},{value:"Ready to go!",id:"ready-to-go",level:2}];function h(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"installing-on-nvidia-jetson",children:"Installing on NVIDIA Jetson"}),"\n",(0,t.jsx)(e.p,{children:"This guide will help you install the Groundlight SDK on NVIDIA Jetson devices. The Groundlight SDK requires Python 3.7 or higher."}),"\n",(0,t.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(e.p,{children:"Ensure that you have the following installed on your NVIDIA Jetson:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Python 3.7 or higher"}),"\n",(0,t.jsx)(e.li,{children:"pip (Python package installer)"}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"basic-installation",children:"Basic Installation"}),"\n",(0,t.jsx)(e.p,{children:"Assuming you have Python 3.7 or higher installed on your NVIDIA Jetson, you can proceed with the following steps to install or upgrade the Groundlight SDK:"}),"\n",(0,t.jsx)(e.h3,{id:"installing-groundlight-sdk",children:"Installing Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"To install the Groundlight SDK using pip, run the following command in your terminal:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:"An ARM-compatible version will automatically get installed. The Groundlight SDK is now installed and ready for use."}),"\n",(0,t.jsx)(e.h2,{id:"using-rtsp-streams",children:"Using RTSP Streams"}),"\n",(0,t.jsxs)(e.p,{children:["If you have ",(0,t.jsx)(e.code,{children:"docker"})," installed on your NVIDIA Jetson, you can even just run"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"docker run groundlight/stream\n"})}),"\n",(0,t.jsx)(e.p,{children:"as we publish an ARM version of our streaming application to Docker Hub."}),"\n",(0,t.jsx)(e.h2,{id:"sample-application",children:"Sample application"}),"\n",(0,t.jsxs)(e.p,{children:["For a complete end-to-end example of running on an NVIDIA Jetson, see ",(0,t.jsx)(e.a,{href:"https://github.com/groundlight/raspberry-pi-door-lock",children:"this GitHub repo"}),"."]}),"\n",(0,t.jsx)(e.h2,{id:"ready-to-go",children:"Ready to go!"}),"\n",(0,t.jsxs)(e.p,{children:["You're now ready to start using the Groundlight SDK in your projects. For more information on using the SDK, refer to the ",(0,t.jsx)(e.a,{href:"/docs/getting-started/api-tokens",children:"API Tokens"})," and [Building Applications"]})]})}function c(n={}){const{wrapper:e}={...(0,s.a)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(h,{...n})}):h(n)}},1151:(n,e,i)=>{i.d(e,{Z:()=>r,a:()=>l});var t=i(7294);const s={},o=t.createContext(s);function l(n){const e=t.useContext(o);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function r(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:l(n.components),t.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkweb=self.webpackChunkweb||[]).push([[537],{4440:(n,e,i)=>{i.r(e),i.d(e,{assets:()=>a,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var t=i(5893),s=i(1151);const o={},l="Installing on NVIDIA Jetson",r={id:"installation/nvidia-jetson",title:"Installing on NVIDIA Jetson",description:"This guide will help you install the Groundlight SDK on NVIDIA Jetson devices. The Groundlight SDK requires Python 3.8 or higher.",source:"@site/docs/installation/5-nvidia-jetson.md",sourceDirName:"installation",slug:"/installation/nvidia-jetson",permalink:"/python-sdk/docs/installation/nvidia-jetson",draft:!1,unlisted:!1,editUrl:"https://github.com/groundlight/python-sdk/tree/main/docs/docs/installation/5-nvidia-jetson.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Installing on Raspberry Pi",permalink:"/python-sdk/docs/installation/raspberry-pi"},next:{title:"Optional libraries",permalink:"/python-sdk/docs/installation/optional-libraries"}},a={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Basic Installation",id:"basic-installation",level:2},{value:"Installing Groundlight SDK",id:"installing-groundlight-sdk",level:3},{value:"Using RTSP Streams",id:"using-rtsp-streams",level:2},{value:"Sample application",id:"sample-application",level:2},{value:"Ready to go!",id:"ready-to-go",level:2}];function h(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"installing-on-nvidia-jetson",children:"Installing on NVIDIA Jetson"}),"\n",(0,t.jsx)(e.p,{children:"This guide will help you install the Groundlight SDK on NVIDIA Jetson devices. The Groundlight SDK requires Python 3.8 or higher."}),"\n",(0,t.jsx)(e.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsx)(e.p,{children:"Ensure that you have the following installed on your NVIDIA Jetson:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Python 3.8 or higher"}),"\n",(0,t.jsx)(e.li,{children:"pip (Python package installer)"}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"basic-installation",children:"Basic Installation"}),"\n",(0,t.jsx)(e.p,{children:"Assuming you have Python 3.8 or higher installed on your NVIDIA Jetson, you can proceed with the following steps to install or upgrade the Groundlight SDK:"}),"\n",(0,t.jsx)(e.h3,{id:"installing-groundlight-sdk",children:"Installing Groundlight SDK"}),"\n",(0,t.jsx)(e.p,{children:"To install the Groundlight SDK using pip, run the following command in your terminal:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"pip3 install groundlight\n"})}),"\n",(0,t.jsx)(e.p,{children:"An ARM-compatible version will automatically get installed. The Groundlight SDK is now installed and ready for use."}),"\n",(0,t.jsx)(e.h2,{id:"using-rtsp-streams",children:"Using RTSP Streams"}),"\n",(0,t.jsxs)(e.p,{children:["If you have ",(0,t.jsx)(e.code,{children:"docker"})," installed on your NVIDIA Jetson, you can even just run"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-bash",children:"docker run groundlight/stream\n"})}),"\n",(0,t.jsx)(e.p,{children:"as we publish an ARM version of our streaming application to Docker Hub."}),"\n",(0,t.jsx)(e.h2,{id:"sample-application",children:"Sample application"}),"\n",(0,t.jsxs)(e.p,{children:["For a complete end-to-end example of running on an NVIDIA Jetson, see ",(0,t.jsx)(e.a,{href:"https://github.com/groundlight/raspberry-pi-door-lock",children:"this GitHub repo"}),"."]}),"\n",(0,t.jsx)(e.h2,{id:"ready-to-go",children:"Ready to go!"}),"\n",(0,t.jsxs)(e.p,{children:["You're now ready to start using the Groundlight SDK in your projects. For more information on using the SDK, refer to the ",(0,t.jsx)(e.a,{href:"/docs/getting-started/api-tokens",children:"API Tokens"})," and [Building Applications"]})]})}function c(n={}){const{wrapper:e}={...(0,s.a)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(h,{...n})}):h(n)}},1151:(n,e,i)=>{i.d(e,{Z:()=>r,a:()=>l});var t=i(7294);const s={},o=t.createContext(s);function l(n){const e=t.useContext(o);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function r(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:l(n.components),t.createElement(o.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.0509e392.js b/assets/js/main.83121fc4.js similarity index 99% rename from assets/js/main.0509e392.js rename to assets/js/main.83121fc4.js index 3de709eb..d89b1821 100644 --- a/assets/js/main.0509e392.js +++ b/assets/js/main.83121fc4.js @@ -1,2 +1,2 @@ -/*! For license information please see main.0509e392.js.LICENSE.txt */ -(self.webpackChunkweb=self.webpackChunkweb||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(7294);var r=n(8356),o=n.n(r),a=n(6887);const i={"004649c5":[()=>n.e(342).then(n.bind(n,7867)),"@site/docs/building-applications/2-grabbing-images.md",7867],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,5405)),"@theme/BlogTagsListPage",5405],"094f20b8":[()=>n.e(9604).then(n.bind(n,7879)),"@site/blog/2024-02-15-getting_started.md",7879],"0b4c8eac":[()=>n.e(4067).then(n.bind(n,7495)),"@site/docs/installation/4-raspberry-pi.md",7495],"0c01bd68":[()=>n.e(6564).then(n.bind(n,6002)),"@site/blog/2023-12-15-best-practices.md",6002],"0cd01ddf":[()=>n.e(8240).then(n.bind(n,4919)),"@site/docs/iot/iot.md",4919],"0fd99c0f":[()=>n.e(3136).then(n.bind(n,5917)),"@site/docs/building-applications/3-working-with-detectors.md",5917],"101db233":[()=>n.e(4573).then(n.t.bind(n,9099,19)),"~blog/default/python-sdk-blog-tags-soc-2-8f3.json",9099],"10c32905":[()=>n.e(6178).then(n.bind(n,9273)),"@site/blog/2024-02-15-getting_started.md?truncated=true",9273],"11dc9a29":[()=>n.e(156).then(n.t.bind(n,94,19)),"~blog/default/python-sdk-blog-tags-how-to-fa4-list.json",94],"14fdb7e5":[()=>n.e(1355).then(n.bind(n,1110)),"@site/docs/getting-started/3-retail-analytics.md",1110],17896441:[()=>Promise.all([n.e(532),n.e(1299),n.e(7918)]).then(n.bind(n,4079)),"@theme/DocItem",4079],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,1473)),"@theme/SearchPage",1473],"1ab3cdad":[()=>n.e(4240).then(n.t.bind(n,1790,19)),"~blog/default/python-sdk-blog-tags-deep-dive-665-list.json",1790],"1b28ffce":[()=>n.e(4518).then(n.bind(n,1235)),"@site/docs/building-applications/8-industrial.md",1235],"1c97ee35":[()=>n.e(3664).then(n.bind(n,6501)),"@site/blog/2024-05-13-soc2-announcement.md?truncated=true",6501],"1cc90fc0":[()=>n.e(5625).then(n.bind(n,3421)),"@site/blog/2024-05-15-active-learning.md?truncated=true",3421],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.bind(n,8391)),"@site/src/pages/index.tsx",8391],"1e924268":[()=>n.e(8614).then(n.bind(n,4953)),"@site/docs/installation/installation.md",4953],"1f391b9e":[()=>Promise.all([n.e(532),n.e(1299),n.e(3085)]).then(n.bind(n,3967)),"@theme/MDXPage",3967],"2492e58a":[()=>n.e(5940).then(n.bind(n,4913)),"@site/blog/2024-05-15-active-learning.md",4913],"2b04acfd":[()=>n.e(8782).then(n.t.bind(n,3389,19)),"~blog/default/python-sdk-blog-tags-best-practices-592-list.json",3389],"2e8ca6d0":[()=>n.e(4877).then(n.t.bind(n,6122,19)),"~blog/default/python-sdk-blog-tags-how-to-fa4.json",6122],"2f7363c0":[()=>n.e(6019).then(n.t.bind(n,5591,19)),"~blog/default/python-sdk-blog-tags-uncertainty-sampling-3f8.json",5591],"325ecf53":[()=>n.e(4045).then(n.bind(n,9138)),"@site/docs/getting-started/getting-started.mdx",9138],"37fce620":[()=>n.e(8871).then(n.bind(n,4134)),"@site/docs/building-applications/1-sample-applications.md",4134],"393be207":[()=>n.e(7414).then(n.bind(n,1181)),"@site/src/pages/markdown-page.md",1181],"3b2fe67c":[()=>n.e(3990).then(n.t.bind(n,3917,19)),"~blog/default/python-sdk-blog-tags-unclears-fa7-list.json",3917],"3ecfc236":[()=>n.e(9400).then(n.bind(n,4459)),"@site/blog/2023-12-06-framegrab.md",4459],"3f00173f":[()=>n.e(9792).then(n.t.bind(n,307,19)),"~blog/default/python-sdk-blog-tags-soc-2-8f3-list.json",307],"4178ee1d":[()=>n.e(3859).then(n.bind(n,5132)),"@site/docs/api-reference/api-reference.md",5132],"46b12933":[()=>n.e(1746).then(n.bind(n,7663)),"@site/blog/2024-01-16-binomial-tails.md",7663],"46f2209c":[()=>n.e(5898).then(n.t.bind(n,9936,19)),"~blog/default/python-sdk-blog-tags-mns-b84.json",9936],"4a1ffe74":[()=>n.e(5955).then(n.t.bind(n,3769,19)),"/home/runner/work/python-sdk/python-sdk/docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"4a56a3a9":[()=>n.e(5276).then(n.bind(n,8232)),"@site/blog/2023-12-15-best-practices.md?truncated=true",8232],"507649fb":[()=>n.e(8978).then(n.t.bind(n,5929,19)),"~blog/default/python-sdk-blog-tags-getting-started-1f5.json",5929],"530c8fc0":[()=>n.e(9642).then(n.bind(n,1441)),"@site/docs/building-applications/building-applications.md",1441],"5747eae1":[()=>n.e(3571).then(n.bind(n,4373)),"@site/docs/building-applications/4-managing-confidence.md",4373],"5c9aa6fb":[()=>n.e(811).then(n.t.bind(n,981,19)),"~blog/default/python-sdk-blog-tags-real-world-ambiguity-c32-list.json",981],"5d7774fa":[()=>n.e(9454).then(n.t.bind(n,7508,19)),"~blog/default/python-sdk-blog-tags-unclears-fa7.json",7508],"5e95c892":[()=>n.e(9661).then(n.bind(n,1388)),"@theme/DocsRoot",1388],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5f7a8e68":[()=>n.e(5906).then(n.t.bind(n,5210,19)),"~blog/default/python-sdk-blog-tags-metrics-2c5-list.json",5210],"633307d6":[()=>n.e(1828).then(n.t.bind(n,6299,19)),"~blog/default/python-sdk-blog-tags-real-world-ambiguity-c32.json",6299],"6662e7aa":[()=>n.e(7352).then(n.t.bind(n,2776,19)),"/home/runner/work/python-sdk/python-sdk/docs/.docusaurus/@easyops-cn/docusaurus-search-local/default/plugin-route-context-module-100.json",2776],"66f3a239":[()=>n.e(9072).then(n.t.bind(n,9522,19)),"~blog/default/python-sdk-blog-tags-math-f24-list.json",9522],"6875c492":[()=>Promise.all([n.e(532),n.e(1299),n.e(8738),n.e(8610)]).then(n.bind(n,8763)),"@theme/BlogTagsPostsPage",8763],"7095c5db":[()=>n.e(658).then(n.t.bind(n,4568,19)),"~blog/default/python-sdk-blog-tags-framegrab-aeb.json",4568],"709e5950":[()=>n.e(371).then(n.bind(n,7894)),"@site/blog/2024-02-01-grime-guardian.md?truncated=true",7894],"7431fb91":[()=>n.e(8476).then(n.t.bind(n,7681,19)),"~blog/default/python-sdk-blog-tags-active-learning-63d.json",7681],"7a4ead91":[()=>n.e(6160).then(n.t.bind(n,6297,19)),"~blog/default/python-sdk-blog-tags-raspberry-pi-585-list.json",6297],"7aefb68d":[()=>n.e(3201).then(n.bind(n,8523)),"@site/docs/getting-started/5-streaming.md",8523],"8091dcef":[()=>n.e(5100).then(n.bind(n,8636)),"@site/docs/installation/2-macos.md",8636],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"8557125a":[()=>n.e(2729).then(n.bind(n,3424)),"@site/docs/installation/6-optional-libraries.md",3424],"86aa3e00":[()=>n.e(6605).then(n.bind(n,9121)),"@site/docs/installation/1-linux.md",9121],"8c3e0b82":[()=>n.e(9555).then(n.bind(n,281)),"@site/blog/2024-03-20-unclear-blog.md?truncated=true",281],"8c4006d9":[()=>n.e(894).then(n.t.bind(n,5745,19)),"/home/runner/work/python-sdk/python-sdk/docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"8c48aa69":[()=>n.e(9502).then(n.bind(n,7724)),"@site/docs/building-applications/7-edge.md",7724],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"98f03e88":[()=>n.e(9675).then(n.bind(n,8586)),"@site/blog/2024-02-01-grime-guardian.md",8586],"9a0e84e4":[()=>n.e(6928).then(n.bind(n,1925)),"@site/blog/2024-03-20-unclear-blog.md",1925],"9b3a19bf":[()=>n.e(2920).then(n.t.bind(n,5750,19)),"~blog/default/python-sdk-blog-tags-groundlight-extensions-32c-list.json",5750],"9e4087bc":[()=>n.e(3608).then(n.bind(n,82)),"@theme/BlogArchivePage",82],"9e739a89":[()=>n.e(6226).then(n.t.bind(n,748,19)),"~blog/default/python-sdk-blog-tags-uncertainty-sampling-3f8-list.json",748],"9f06d934":[()=>n.e(9430).then(n.bind(n,3746)),"@site/blog/2024-01-16-binomial-tails.md?truncated=true",3746],a389b9af:[()=>n.e(6771).then(n.t.bind(n,1189,19)),"~blog/default/python-sdk-blog-tags-getting-started-1f5-list.json",1189],a44ae734:[()=>n.e(1313).then(n.t.bind(n,446,19)),"~blog/default/python-sdk-blog-tags-metrics-2c5.json",446],a46c8672:[()=>n.e(808).then(n.t.bind(n,8198,19)),"~blog/default/python-sdk-blog-tags-multithreading-68b.json",8198],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(1299),n.e(8738),n.e(3089)]).then(n.bind(n,8808)),"@theme/BlogListPage",8808],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,5375)),"@theme/DocVersionRoot",5375],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,499)),"@theme/DocRoot",499],aa262fb8:[()=>n.e(2761).then(n.t.bind(n,7934,19)),"~blog/default/python-sdk-blog-tags-groundlight-python-sdk-e2b-list.json",7934],ad6b0f9d:[()=>n.e(5168).then(n.bind(n,7078)),"@site/docs/installation/7-monitoring-notification-server.md",7078],adb3771c:[()=>n.e(8026).then(n.bind(n,4773)),"@site/blog/2024-01-02-groundlight-pi-gen.md",4773],bae3b01f:[()=>n.e(278).then(n.t.bind(n,6375,19)),"~blog/default/python-sdk-blog-tags-state-management-7f3-list.json",6375],bc325f30:[()=>n.e(5230).then(n.bind(n,1814)),"@site/blog/2023-12-06-framegrab.md?truncated=true",1814],befc02d7:[()=>n.e(5184).then(n.t.bind(n,8980,19)),"~blog/default/python-sdk-blog-tags-best-practices-592.json",8980],c2130437:[()=>n.e(8321).then(n.t.bind(n,7137,19)),"~blog/default/python-sdk-blog-tags-state-management-7f3.json",7137],c2af0348:[()=>n.e(9278).then(n.t.bind(n,7828,19)),"~blog/default/python-sdk-blog-tags-raspberry-pi-585.json",7828],c2c63968:[()=>n.e(8753).then(n.t.bind(n,6057,19)),"~blog/default/python-sdk-blog-tags-math-f24.json",6057],c5b38f9e:[()=>n.e(8863).then(n.bind(n,4725)),"@site/docs/getting-started/1-api-tokens.md",4725],c6e5e1f0:[()=>n.e(3550).then(n.t.bind(n,4469,19)),"/home/runner/work/python-sdk/python-sdk/docs/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],cb33c72e:[()=>n.e(3855).then(n.bind(n,3574)),"@site/docs/building-applications/6-async-queries.md",3574],cbc36a7f:[()=>n.e(4761).then(n.t.bind(n,3600,19)),"~blog/default/python-sdk-blog-tags-deep-dive-665.json",3600],ccc49370:[()=>Promise.all([n.e(532),n.e(1299),n.e(8738),n.e(6103)]).then(n.bind(n,7592)),"@theme/BlogPostPage",7592],d479b662:[()=>n.e(2333).then(n.t.bind(n,5777,19)),"~blog/default/python-sdk-blog-849.json",5777],d5ec6805:[()=>n.e(6986).then(n.bind(n,6901)),"@site/docs/installation/3-windows.md",6901],da3f832d:[()=>n.e(3038).then(n.t.bind(n,6518,19)),"~blog/default/python-sdk-blog-tags-framegrab-aeb-list.json",6518],ddfecd50:[()=>n.e(4609).then(n.bind(n,1178)),"@site/docs/getting-started/4-dog-on-couch.md",1178],df4893a4:[()=>n.e(2254).then(n.bind(n,9618)),"@site/blog/2024-01-02-groundlight-pi-gen.md?truncated=true",9618],e2e56211:[()=>n.e(751).then(n.t.bind(n,5199,19)),"~blog/default/python-sdk-blog-tags-multithreading-68b-list.json",5199],e6718e35:[()=>n.e(4436).then(n.bind(n,3806)),"@site/blog/2024-05-13-soc2-announcement.md",3806],eb989ff0:[()=>n.e(8580).then(n.t.bind(n,9953,19)),"~blog/default/python-sdk-blog-tags-mns-b84-list.json",9953],efd4b15a:[()=>n.e(9891).then(n.bind(n,6556)),"@site/docs/building-applications/5-handling-errors.md",6556],f3c3f17a:[()=>n.e(4935).then(n.t.bind(n,1625,19)),"~blog/default/python-sdk-blog-archive-409.json",1625],f3ef3ea5:[()=>n.e(2422).then(n.t.bind(n,1997,19)),"~blog/default/python-sdk-blog-tags-groundlight-extensions-32c.json",1997],f705f88e:[()=>n.e(537).then(n.bind(n,4440)),"@site/docs/installation/5-nvidia-jetson.md",4440],f928c468:[()=>n.e(2003).then(n.t.bind(n,506,19)),"~blog/default/python-sdk-blog-tags-groundlight-python-sdk-e2b.json",506],fc921a7a:[()=>n.e(2124).then(n.bind(n,7185)),"@site/docs/getting-started/2-writing-queries.md",7185],fd001235:[()=>n.e(4450).then(n.t.bind(n,3998,19)),"~blog/default/python-sdk-blog-tags-active-learning-63d-list.json",3998],fd2acc4e:[()=>n.e(3262).then(n.t.bind(n,1007,19)),"~blog/default/python-sdk-blog-tags-tags-ce4.json",1007]};var s=n(5893);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("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%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("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",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("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),u=n(226);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(5980).then(n.bind(n,5980)),modules:["@theme/NotFound"],webpack:()=>[5980],render(e,t){const n=e.default;return(0,s.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],h=(0,c.Z)(r);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));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 i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,s.jsx)(u.z,{value:i,children:(0,s.jsx)(a,{...o,...n})})}})}const p=[{path:"/python-sdk/blog",component:d("/python-sdk/blog","8d4"),exact:!0},{path:"/python-sdk/blog/active-learning",component:d("/python-sdk/blog/active-learning","4b3"),exact:!0},{path:"/python-sdk/blog/archive",component:d("/python-sdk/blog/archive","bee"),exact:!0},{path:"/python-sdk/blog/best-practices",component:d("/python-sdk/blog/best-practices","ad1"),exact:!0},{path:"/python-sdk/blog/confidence-intervals-for-balanced-accuracy",component:d("/python-sdk/blog/confidence-intervals-for-balanced-accuracy","6d0"),exact:!0},{path:"/python-sdk/blog/dealing-with-unclear-images",component:d("/python-sdk/blog/dealing-with-unclear-images","e49"),exact:!0},{path:"/python-sdk/blog/getting-started",component:d("/python-sdk/blog/getting-started","223"),exact:!0},{path:"/python-sdk/blog/grime-guardian",component:d("/python-sdk/blog/grime-guardian","8a2"),exact:!0},{path:"/python-sdk/blog/groundlight-ai-achieves-soc-2-type-2-compliance",component:d("/python-sdk/blog/groundlight-ai-achieves-soc-2-type-2-compliance","b91"),exact:!0},{path:"/python-sdk/blog/introducing-framegrab",component:d("/python-sdk/blog/introducing-framegrab","06a"),exact:!0},{path:"/python-sdk/blog/raspberry-pi-computer-vision",component:d("/python-sdk/blog/raspberry-pi-computer-vision","a24"),exact:!0},{path:"/python-sdk/blog/tags",component:d("/python-sdk/blog/tags","2ef"),exact:!0},{path:"/python-sdk/blog/tags/active-learning",component:d("/python-sdk/blog/tags/active-learning","3d5"),exact:!0},{path:"/python-sdk/blog/tags/best-practices",component:d("/python-sdk/blog/tags/best-practices","17a"),exact:!0},{path:"/python-sdk/blog/tags/deep-dive",component:d("/python-sdk/blog/tags/deep-dive","571"),exact:!0},{path:"/python-sdk/blog/tags/framegrab",component:d("/python-sdk/blog/tags/framegrab","621"),exact:!0},{path:"/python-sdk/blog/tags/getting-started",component:d("/python-sdk/blog/tags/getting-started","92a"),exact:!0},{path:"/python-sdk/blog/tags/groundlight-extensions",component:d("/python-sdk/blog/tags/groundlight-extensions","bce"),exact:!0},{path:"/python-sdk/blog/tags/groundlight-python-sdk",component:d("/python-sdk/blog/tags/groundlight-python-sdk","4fb"),exact:!0},{path:"/python-sdk/blog/tags/how-to",component:d("/python-sdk/blog/tags/how-to","18d"),exact:!0},{path:"/python-sdk/blog/tags/math",component:d("/python-sdk/blog/tags/math","b1d"),exact:!0},{path:"/python-sdk/blog/tags/metrics",component:d("/python-sdk/blog/tags/metrics","13f"),exact:!0},{path:"/python-sdk/blog/tags/mns",component:d("/python-sdk/blog/tags/mns","8b1"),exact:!0},{path:"/python-sdk/blog/tags/multithreading",component:d("/python-sdk/blog/tags/multithreading","933"),exact:!0},{path:"/python-sdk/blog/tags/raspberry-pi",component:d("/python-sdk/blog/tags/raspberry-pi","3e1"),exact:!0},{path:"/python-sdk/blog/tags/real-world-ambiguity",component:d("/python-sdk/blog/tags/real-world-ambiguity","e66"),exact:!0},{path:"/python-sdk/blog/tags/soc-2",component:d("/python-sdk/blog/tags/soc-2","27d"),exact:!0},{path:"/python-sdk/blog/tags/state-management",component:d("/python-sdk/blog/tags/state-management","fee"),exact:!0},{path:"/python-sdk/blog/tags/uncertainty-sampling",component:d("/python-sdk/blog/tags/uncertainty-sampling","dd3"),exact:!0},{path:"/python-sdk/blog/tags/unclears",component:d("/python-sdk/blog/tags/unclears","3f1"),exact:!0},{path:"/python-sdk/markdown-page",component:d("/python-sdk/markdown-page","6f0"),exact:!0},{path:"/python-sdk/search",component:d("/python-sdk/search","619"),exact:!0},{path:"/python-sdk/docs",component:d("/python-sdk/docs","175"),routes:[{path:"/python-sdk/docs",component:d("/python-sdk/docs","679"),routes:[{path:"/python-sdk/docs",component:d("/python-sdk/docs","cc2"),routes:[{path:"/python-sdk/docs/api-reference",component:d("/python-sdk/docs/api-reference","092"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/building-applications",component:d("/python-sdk/docs/building-applications","753"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/building-applications/async-queries",component:d("/python-sdk/docs/building-applications/async-queries","e2f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/building-applications/edge",component:d("/python-sdk/docs/building-applications/edge","859"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/building-applications/grabbing-images",component:d("/python-sdk/docs/building-applications/grabbing-images","ccc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/building-applications/handling-errors",component:d("/python-sdk/docs/building-applications/handling-errors","b6f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/building-applications/industrial",component:d("/python-sdk/docs/building-applications/industrial","39d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/building-applications/managing-confidence",component:d("/python-sdk/docs/building-applications/managing-confidence","c5f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/building-applications/sample-applications",component:d("/python-sdk/docs/building-applications/sample-applications","aef"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/building-applications/working-with-detectors",component:d("/python-sdk/docs/building-applications/working-with-detectors","711"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/getting-started",component:d("/python-sdk/docs/getting-started","23b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/getting-started/api-tokens",component:d("/python-sdk/docs/getting-started/api-tokens","48d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/getting-started/dog-on-couch",component:d("/python-sdk/docs/getting-started/dog-on-couch","7b3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/getting-started/retail-analytics",component:d("/python-sdk/docs/getting-started/retail-analytics","4ae"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/getting-started/streaming",component:d("/python-sdk/docs/getting-started/streaming","23e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/getting-started/writing-queries",component:d("/python-sdk/docs/getting-started/writing-queries","35e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/installation",component:d("/python-sdk/docs/installation","905"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/installation/linux",component:d("/python-sdk/docs/installation/linux","027"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/installation/macos",component:d("/python-sdk/docs/installation/macos","ce1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/installation/monitoring-notification-server",component:d("/python-sdk/docs/installation/monitoring-notification-server","1fb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/installation/nvidia-jetson",component:d("/python-sdk/docs/installation/nvidia-jetson","c38"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/installation/optional-libraries",component:d("/python-sdk/docs/installation/optional-libraries","82b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/installation/raspberry-pi",component:d("/python-sdk/docs/installation/raspberry-pi","4e4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/installation/windows",component:d("/python-sdk/docs/installation/windows","9e5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/python-sdk/docs/iot",component:d("/python-sdk/docs/iot","9e2"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/python-sdk/",component:d("/python-sdk/","978"),exact:!0},{path:"*",component:d("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>i});var r=n(7294),o=n(5893);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},2712:(e,t,n)=>{"use strict";var r=n(7294),o=n(745),a=n(3727),i=n(405),s=n(412);const l=[n(6200),n(2497),n(8423),n(703),n(2295)];var c=n(723),u=n(6550),d=n(8790),p=n(5893);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var h=n(5742),g=n(2263),m=n(4996),y=n(6668),b=n(1944),v=n(4711),w=n(9727),k=n(3320),x=n(8780),S=n(3510);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.Z)(),r=(0,v.l)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(h.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.Z)(),{pathname:r}=(0,u.TH)();return e+(0,x.applyTrailingSlash)((0,m.Z)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,p.jsxs)(h.Z,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function C(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,y.L)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(h.Z,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.h})]}),n&&(0,p.jsx)(b.d,{image:n}),(0,p.jsx)(_,{}),(0,p.jsx)(E,{}),(0,p.jsx)(S.Z,{tag:k.HX,locale:e}),(0,p.jsx)(h.Z,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;function j(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var L=n(8934),R=n(8940),N=n(469);function P(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()=>o.forEach((e=>e?.()))}const A=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,N.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)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:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.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=s.Z.canUseDOM?P("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=P("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(0,p.jsx)(A,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(u.AW,{location:t,render:()=>e})})}}const D=I,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\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(/{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 o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.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 K=n(9670);const Y=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Y.has(e))(e))return!1;Y.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),O(e))},te=Object.freeze(ee),ne=Boolean(!0);if(s.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.B6,{children:(0,p.jsx)(a.VK,{children:(0,p.jsx)(V,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},s=()=>{if(ne)r.startTransition((()=>{o.hydrateRoot(e,t,{onRecoverableError:n})}));else{const a=o.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{a.render(t)}))}};O(window.location.pathname).then(s)}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n(7294),o=n(6809);const a=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-G0XW52NM2K"],"anonymizeIP":false,"id":"default"}},"docusaurus-plugin-content-docs":{"default":{"path":"/python-sdk/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/python-sdk/docs","mainDocId":"getting-started/getting-started","docs":[{"id":"api-reference/redirect","path":"/python-sdk/docs/api-reference/","sidebar":"tutorialSidebar"},{"id":"building-applications/async-queries","path":"/python-sdk/docs/building-applications/async-queries","sidebar":"tutorialSidebar"},{"id":"building-applications/building-applications","path":"/python-sdk/docs/building-applications/","sidebar":"tutorialSidebar"},{"id":"building-applications/edge","path":"/python-sdk/docs/building-applications/edge","sidebar":"tutorialSidebar"},{"id":"building-applications/grabbing-images","path":"/python-sdk/docs/building-applications/grabbing-images","sidebar":"tutorialSidebar"},{"id":"building-applications/handling-errors","path":"/python-sdk/docs/building-applications/handling-errors","sidebar":"tutorialSidebar"},{"id":"building-applications/industrial","path":"/python-sdk/docs/building-applications/industrial","sidebar":"tutorialSidebar"},{"id":"building-applications/managing-confidence","path":"/python-sdk/docs/building-applications/managing-confidence","sidebar":"tutorialSidebar"},{"id":"building-applications/sample-applications","path":"/python-sdk/docs/building-applications/sample-applications","sidebar":"tutorialSidebar"},{"id":"building-applications/working-with-detectors","path":"/python-sdk/docs/building-applications/working-with-detectors","sidebar":"tutorialSidebar"},{"id":"getting-started/api-tokens","path":"/python-sdk/docs/getting-started/api-tokens","sidebar":"tutorialSidebar"},{"id":"getting-started/dog-on-couch","path":"/python-sdk/docs/getting-started/dog-on-couch","sidebar":"tutorialSidebar"},{"id":"getting-started/getting-started","path":"/python-sdk/docs/getting-started/","sidebar":"tutorialSidebar"},{"id":"getting-started/retail-analytics","path":"/python-sdk/docs/getting-started/retail-analytics","sidebar":"tutorialSidebar"},{"id":"getting-started/streaming","path":"/python-sdk/docs/getting-started/streaming","sidebar":"tutorialSidebar"},{"id":"getting-started/writing-queries","path":"/python-sdk/docs/getting-started/writing-queries","sidebar":"tutorialSidebar"},{"id":"installation/installation","path":"/python-sdk/docs/installation/","sidebar":"tutorialSidebar"},{"id":"installation/linux","path":"/python-sdk/docs/installation/linux","sidebar":"tutorialSidebar"},{"id":"installation/macos","path":"/python-sdk/docs/installation/macos","sidebar":"tutorialSidebar"},{"id":"installation/monitoring-notification-server","path":"/python-sdk/docs/installation/monitoring-notification-server","sidebar":"tutorialSidebar"},{"id":"installation/nvidia-jetson","path":"/python-sdk/docs/installation/nvidia-jetson","sidebar":"tutorialSidebar"},{"id":"installation/optional-libraries","path":"/python-sdk/docs/installation/optional-libraries","sidebar":"tutorialSidebar"},{"id":"installation/raspberry-pi","path":"/python-sdk/docs/installation/raspberry-pi","sidebar":"tutorialSidebar"},{"id":"installation/windows","path":"/python-sdk/docs/installation/windows","sidebar":"tutorialSidebar"},{"id":"iot/esp32cam","path":"/python-sdk/docs/iot/","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/python-sdk/docs/getting-started/","label":"Getting Started"}}}}],"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 s=n(7529);const l=JSON.parse('{"docusaurusVersion":"3.0.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.0.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.0.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.0.0"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"3.0.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.0.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.0.0"},"@easyops-cn/docusaurus-search-local":{"type":"package","name":"@easyops-cn/docusaurus-search-local","version":"0.38.0"}}}');var c=n(5893);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(412),a=n(5742),i=n(8780),s=n(4282),l=n(5893);function c(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(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(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)(f,{fallback:()=>(0,l.jsx)(c,{error:t,tryAgain:n}),children:[(0,l.jsx)(a.Z,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(s.Z,{children:(0,l.jsx)(c,{error:t,tryAgain:n})})]})}const p=e=>(0,l.jsx)(d,{...e});class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.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??p)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={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:()=>a});n(7294);var r=n(405),o=n(5893);function a(e){return(0,o.jsx)(r.ql,{...e})}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(3727),a=n(8780),i=n(2263),s=n(3919),l=n(412),c=n(5893);const u=r.createContext({collectLink:()=>{}});var d=n(4996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:h,isActive:g,"data-noBrokenLinkCheck":m,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.Z)(),{withBaseUrl:k}=(0,d.C)(),x=(0,r.useContext)(u),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=p||f;const _=(0,s.Z)(E),C=E?.replace("pathname://","");let T=void 0!==C?(j=C,y&&(e=>e.startsWith("/"))(j)?k(j):j):void 0;var j;T&&_&&(T=(0,a.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:w}));const L=(0,r.useRef)(!1),R=n?o.OL:o.rU,N=l.Z.canUseIntersectionObserver,P=(0,r.useRef)(),A=()=>{L.current||null==T||(window.docusaurus.preload(T),L.current=!0)};(0,r.useEffect)((()=>(!N&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{N&&P.current&&P.current.disconnect()})),[P,T,N,_]);const O=T?.startsWith("#")??!1,I=!T||!_||O;return I||m||x.collectLink(T),I?(0,c.jsx)("a",{ref:S,href:T,...E&&!_&&{target:"_blank",rel:"noopener noreferrer"},...b}):(0,c.jsx)(R,{...b,onMouseEnter:A,onTouchStart:A,innerRef:e=>{S.current=e,N&&e&&_&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),P.current.observe(e))},to:T,...n&&{isActive:g,activeClassName:h}})}const f=r.forwardRef(p)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(7294),o=n(5893);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 i=n(7529);function s(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 i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},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 o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(7294),o=n(2263),a=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8940);function a(){return(0,r.useContext)(o._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8934);function a(){return(0,r.useContext)(o._)}},469:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const o=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>i});var r=n(7294),o=n(5893);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(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:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>p,_r:()=>u,Jo:()=>m,zh:()=>d,yW:()=>h,gB:()=>f});var r=n(6550),o=n(2263),a=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=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})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&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 a}(t,n,e)}function f(e){return d(e).versions}function h(e){const t=d(e);return s(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return l(t,n)}function m(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6200:(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("set","page_path",t.pathname+t.search+t.hash),window.gtag("event","page_view")}))}}},703:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},8423:(e,t,n)=>{"use strict";n.r(t);var r=n(4965),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(6854),n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},2757:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var r=n(6010),o=n(5999),a=n(6668),i=n(9960);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_FNw8",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_JmiO"};var l=n(5893);function c(e){let{as:t,id:n,...c}=e;const{navbar:{hideOnScroll:u}}=(0,a.L)();if("h1"===t||!n)return(0,l.jsx)(t,{...c,id:void 0});const d=(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,l.jsxs)(t,{...c,className:(0,r.Z)("anchor",u?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,l.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d,children:"\u200b"})]})}},2339:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);const r={iconExternalLink:"iconExternalLink_T11m"};var o=n(5893);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("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"})})}},5012:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(7294);var r=n(9960),o=n(4996),a=n(2263),i=n(6668),s=n(7030),l=n(5893);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Z)(t.src),dark:(0,o.Z)(t.srcDark||t.src)},i=(0,l.jsx)(s.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.Z)(),{navbar:{title:n,logo:s}}=(0,i.L)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.Z)(s?.href||"/"),h=n?"":t,g=s?.alt??h;return(0,l.jsxs)(r.Z,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:g,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},3510:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);var r=n(5742),o=n(5893);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.Z,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},7030:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7294),o=n(6010),a=n(2389),i=n(2949);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(5893);function c(e){let{className:t,children:n}=e;const c=(0,a.Z)(),{colorMode:u}=(0,i.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.Z)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>y});var r=n(7294),o=n(412),a=n(469),i=n(1442),s=n(5893);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.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 ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.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,o])}function h(e){if(!o.Z.canUseDOM)return e?u:d}function g(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:h(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:o})}function m(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.Z)((()=>{t||i(!0)}),[t]),(0,a.Z)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(g,{...n,collapsed:l}):null}function y(e){let{lazy:t,...n}=e;const r=t?m:g;return(0,s.jsx)(r,{...n})}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>g,pl:()=>h});var r=n(7294),o=n(2389),a=n(12),i=n(902),s=n(6668),l=n(5893);const c=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function h(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!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&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function g(){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:()=>y,S:()=>m});var r=n(7294),o=n(412),a=n(902),i=n(12),s=n(6668),l=n(5893);const c=r.createContext(void 0),u="theme",d=(0,i.WA)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,h=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),g=e=>{d.set(f(e))};function m(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[o,a]=(0,r.useState)(h(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&g(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(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||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(c);if(null==e)throw new a.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:()=>y});var r=n(7294),o=n(143),a=n(9935),i=n(6668),s=n(2802),l=n(902),c=n(12),u=n(5893);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const h=r.createContext(null);function g(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=g();return(0,u.jsx)(h.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return s.cE?(0,u.jsx)(m,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function b(){const e=(0,r.useContext)(h);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=b(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(7294),o=n(902),a=n(5893);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>s});var r=n(7294),o=n(902),a=n(5893);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.i6("DocsVersionProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>h});var r=n(7294),o=n(3102),a=n(7524),i=n(6550),s=n(902);function l(e){!function(e){const t=(0,i.k6)(),n=(0,s.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(6668),u=n(5893);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const u=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function f(e){let{children:t}=e;const n=p();return(0,u.jsx)(d.Provider,{value:n,children:t})}function h(){const e=r.useContext(d);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>s});var r=n(7294),o=n(902),a=n(5893);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>s});var r=n(7294),o=n(412);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){const[e,t]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){t(function(){if(!o.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>i?a.desktop:a.mobile}())}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]),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",unlistedBanner:"theme-unlisted-banner",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,{LM:()=>f,_F:()=>m,cE:()=>p,SN:()=>E,lO:()=>k,vY:()=>S,oz:()=>x,s1:()=>w,f:()=>b});var r=n(7294),o=n(6550),a=n(8790),i=n(143),s=n(373),l=n(4477),c=n(1116);function u(e){return Array.from(new Set(e))}var d=n(8596);const p=!!i._r;function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),g=(e,t)=>e.some((e=>m(e,t)));function m(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||g(e.items,t))}function y(e,t){switch(e.type){case"category":return m(e,t)||e.items.some((e=>y(e,t)));case"link":return!e.unlisted||m(e,t);default:return!1}}function b(e,t){return(0,r.useMemo)((()=>e.filter((e=>y(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function w(){const e=(0,c.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,o].filter(Boolean))),[t,n,o])}function x(e,t){const n=k(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 S(e,t){const n=k(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}=e;const n=(0,o.TH)(),r=(0,l.E)(),i=t.routes,s=i.find((e=>(0,o.LX)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,a.H)(i),sidebarName:c,sidebarItems:u}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>d,VC:()=>h});var r=n(7294),o=n(6010),a=n(5742),i=n(226);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(4996),c=n(2263);var u=n(5893);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const s=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.C)(),p=o?d(o,{absolute:!0}):void 0;return(0,u.jsxs)(a.Z,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),s=(0,o.Z)(i,t);return(0,u.jsxs)(p.Provider,{value:s,children:[(0,u.jsx)(a.Z,{children:(0,u.jsx)("html",{className:s})}),n]})}function h(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,o.Z)(r,a),children:t})}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>s,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>i});var r=n(7294),o=n(469),a=n(5893);function i(e){const t=(0,r.useRef)(e);return(0,o.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.Z)((()=>{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 c(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(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(7294),o=n(723),a=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.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 o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>c,RF:()=>p});var r=n(7294),o=n(412),a=n(2389),i=(n(469),n(902)),s=n(5893);const l=r.createContext(void 0);function c(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(0,s.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const d=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.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 o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>o});n(2263);const r="default";function o(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>l});n(7294);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(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 s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function l(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=a(t?.persistence);return null===n?s:{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),o({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),o({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:()=>i});var r=n(2263),o=n(6550),a=n(8780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,o.TH)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(902);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.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:()=>o});var r=n(2263);function o(){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[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,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(o,a)}},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 o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},311:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});n(7294);var r=n(6010);const o={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};var a=n(5893);function i(e){let{className:t}=e;return(0,a.jsxs)("div",{className:(0,r.Z)(o.loadingRing,t),children:[(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{})]})}},22:(e,t,n)=>{"use strict";n.d(t,{w:()=>s});var r=n(1336),o=n.n(r),a=n(1029);const i=new Map;function s(e,t){const n=`${e}${t}`;let r=i.get(n);return r||(r=async function(e,t){{const n=`${e}${a.J.replace("{dir}",t?`-${t.replace(/\//g,"-")}`:"")}`;if(new URL(n,location.origin).origin!==location.origin)throw new Error("Unexpected version url");const r=await(await fetch(n)).json(),i=r.map(((e,t)=>{let{documents:n,index:r}=e;return{type:t,documents:n,index:o().Index.load(r)}})),s=r.reduce(((e,t)=>{for(const n of t.index.invertedIndex)/\p{Unified_Ideograph}/u.test(n[0][0])&&e.add(n[0]);return e}),new Set);return{wrappedIndexes:i,zhDictionary:Array.from(s)}}return{wrappedIndexes:[],zhDictionary:[]}}(e,t),i.set(n,r)),r}},8202:(e,t,n)=>{"use strict";n.d(t,{v:()=>l});var r=n(1336),o=n.n(r);var a=n(1029);function i(e){return s(e).concat(s(e.filter((e=>{const t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function s(e,t){return e.map((e=>({tokens:e.map((e=>e.value)),term:e.map((e=>({value:e.value,presence:o().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?o().Query.wildcard.TRAILING:o().Query.wildcard.NONE})))})))}function l(e,t,n){return function(r,s){const l=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return o()[t[0]].tokenizer(e).map((e=>e.toString()));let n=/[^-\s]+/g;return t.includes("zh")&&(n=/\w+|\p{Unified_Ideograph}+/gu),e.toLowerCase().match(n)||[]}(r,a.dK);if(0===l.length)return void s([]);const c=function(e,t){const n=function(e,t){const n=[];return function e(r,o){if(0===r.length)return void n.push(o);const a=r[0];if(/\p{Unified_Ideograph}/u.test(a)){const n=function(e,t){const n=[];return function e(r,o){let a=0,i=!1;for(const s of t)if(r.substr(0,s.length)===s){const t={missed:o.missed,term:o.term.concat({value:s})};r.length>s.length?e(r.substr(s.length),t):n.push(t),i=!0}else for(let t=s.length-1;t>a;t-=1){const l=s.substr(0,t);if(r.substr(0,t)===l){a=t;const s={missed:o.missed,term:o.term.concat({value:l,trailing:!0})};r.length>t?e(r.substr(t),s):n.push(s),i=!0;break}}i||(r.length>0?e(r.substr(1),{missed:o.missed+1,term:o.term}):o.term.length>0&&n.push(o))}(e,{missed:0,term:[]}),n.sort(((e,t)=>{const n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((e=>e.term))}(a,t);for(const t of n){const n=o.concat(...t);e(r.slice(1),n)}}else{const t=o.concat({value:a});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:o().Query.presence.REQUIRED,wildcard:o().Query.wildcard.LEADING|o().Query.wildcard.TRAILING})))}];for(const o of n)o[o.length-1].maybeTyping=!0;const r=[];for(const i of a.dK)if("en"===i)a._k||r.unshift(o().stopWordFilter);else{const e=o()[i];e.stopWordFilter&&r.unshift(e.stopWordFilter)}let s;if(r.length>0){const e=e=>r.reduce(((e,t)=>e.filter((e=>t(e.value)))),e);s=[];const t=[];for(const r of n){const n=e(r);s.push(n),n.length0&&t.push(n)}n.push(...t)}else s=n.slice();const l=[];for(const o of s)if(o.length>2)for(let e=o.length-1;e>=0;e-=1)l.push(o.slice(0,e).concat(o.slice(e+1)));return i(n).concat(i(l))}(l,t),u=[];e:for(const{term:t,tokens:o}of c)for(const{documents:r,index:a,type:i}of e)if(u.push(...a.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!u.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-u.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:i,page:0!==i&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:o,score:t.score}}))),u.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type>0&&t.page?e.findIndex((e=>e.document===t.page)):t.index,o=n.type>0&&n.page?e.findIndex((e=>e.document===n.page)):n.index;return-1===r&&(r=t.index),-1===o&&(o=n.index),r===o?0===t.type?-1:0===n.type?1:t.index-n.index:r-o}))}(u),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.some((e=>e.document===t.page))&&(n{"use strict";function r(e){return e.join(" \u203a ")}n.d(t,{e:()=>r})},1690:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}n.d(t,{X:()=>r})},1073:(e,t,n)=>{"use strict";function r(e,t){const n=[];for(const r of Object.values(e))r[t]&&n.push(...r[t].position);return n.sort(((e,t)=>e[0]-t[0]||t[1]-e[1]))}n.d(t,{m:()=>r})},2539:(e,t,n)=>{"use strict";n.d(t,{C:()=>o});var r=n(1690);function o(e,t,n){const a=[];for(const i of t){const n=e.toLowerCase().indexOf(i);if(n>=0){n>0&&a.push(o(e.substr(0,n),t)),a.push(`${(0,r.X)(e.substr(n,i.length))}`);const s=n+i.length;s${(0,r.X)(e)}`:(0,r.X)(e):a.join("")}},726:(e,t,n)=>{"use strict";n.d(t,{o:()=>l});var r=n(1690),o=n(2539);const a=/\w+|\p{Unified_Ideograph}/u;function i(e){const t=[];let n=0,r=e;for(;r.length>0;){const o=r.match(a);if(!o){t.push(r);break}o.index>0&&t.push(r.substring(0,o.index)),t.push(o[0]),n+=o.index+o[0].length,r=e.substring(n)}return t}var s=n(1029);function l(e,t,n,a){void 0===a&&(a=s.Hk);const{chunkIndex:l,chunks:c}=function(e,t,n){const a=[];let s=0,l=0,c=-1;for(;sl){const t=i(e.substring(l,u)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}-1===c&&(c=a.length),l=u+d,a.push({html:(0,o.C)(e.substring(u,l),n,!0),textLength:d})}}if(l({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}return{chunkIndex:c,chunks:a}}(e,t,n),u=c.slice(0,l),d=c[l],p=[d.html],f=c.slice(l+1);let h=d.textLength,g=0,m=0,y=!1,b=!1;for(;h0){const e=u.pop();h+e.textLength<=a?(p.unshift(e.html),g+=e.textLength,h+=e.textLength):(y=!0,u.length=0)}else{if(!(f.length>0))break;{const e=f.shift();h+e.textLength<=a?(p.push(e.html),m+=e.textLength,h+=e.textLength):(b=!0,f.length=0)}}return(y||u.length>0)&&p.unshift("\u2026"),(b||f.length>0)&&p.push("\u2026"),p.join("")}},1029:(e,t,n)=>{"use strict";n.d(t,{vc:()=>o(),gQ:()=>h,H6:()=>u,hG:()=>y,l9:()=>g,dK:()=>a,_k:()=>i,pu:()=>f,AY:()=>d,t_:()=>p,Kc:()=>m,J:()=>s,Hk:()=>c,qo:()=>l,pQ:()=>b});n(1336);var r=n(813),o=n.n(r);const a=["en"],i=!1,s="search-index{dir}.json?_=4cace902",l=8,c=50,u=!0,d=!0,p=!0,f="right",h=void 0,g=!0,m=null,y=!1,b=!1},4282:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Ot});var r=n(7294),o=n(6010),a=n(4763),i=n(1944),s=n(6550),l=n(5999),c=n(5936),u=n(5893);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){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&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const h=(0,l.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??h,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":h,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var m=n(5281),y=n(9727);const b={skipToContent:"skipToContent_gu5v"};function v(){return(0,u.jsx)(g,{className:b.skipToContent})}var w=n(6668),k=n(9689);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_VBLd"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.Z)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_M4QP"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_w47h",announcementBarPlaceholder:"announcementBarPlaceholder_VCrL",announcementBarClose:"announcementBarClose_X3y7",announcementBarContent:"announcementBarContent_JsD6"};function j(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:T.announcementBarPlaceholder}),(0,u.jsx)(C,{className:T.announcementBarContent}),a&&(0,u.jsx)(E,{onClick:n,className:T.announcementBarClose})]})}var L=n(2961),R=n(2466);var N=n(902),P=n(3102);const A=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,L.e)(),t=(0,P.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,N.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(A.Provider,{value:n,children:t})}function I(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function D(){const e=(0,r.useContext)(A);if(!e)throw new N.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,P.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:I(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=D();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(2949),z=n(2389);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("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 $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("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 U={toggle:"toggle_kWbt",toggleButton:"toggleButton_fOL9",darkToggleIcon:"darkToggleIcon_DFgp",lightToggleIcon:"lightToggleIcon_DCeJ",toggleButtonDisabled:"toggleButtonDisabled_STpu"};function q(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.Z)(),s=(0,l.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"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.Z)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})]})})}const H=r.memo(q),Q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_e68Z"};function Z(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,M.I)();return r?null:(0,u.jsx)(H,{className:t,buttonClassName:"dark"===n?Q.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var V=n(5012);function W(){return(0,u.jsx)(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,L.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.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(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function K(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(W,{}),(0,u.jsx)(Z,{className:"margin-right--md"}),(0,u.jsx)(G,{})]})}var Y=n(9960),X=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(2339);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Z)(r),p=(0,X.Z)(t),f=(0,X.Z)(o,{forcePrependBaseUrl:!0}),h=a&&o&&!(0,J.Z)(o),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,h&&(0,u.jsx)(te.Z,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(Y.Z,{href:l?f:o,...c,...g}):(0,u.jsx)(Y.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...g})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.Z)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(6043),se=n(8596),le=n(2263);function ce(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.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)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(He,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function de(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ce(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:h}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&h(!d)}),[c,d,h]),(0,u.jsxs)("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(He,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function pe(e){let{mobile:t=!1,...n}=e;const r=t?de:ue;return(0,u.jsx)(r,{...n})}var fe=n(4711);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("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_Ax7J";var me=n(1029),ye=n(373),be=n(143),ve=n(22),we=n(8202),ke=n(3926),xe=n(1073),Se=n(2539),Ee=n(726);const _e='',Ce='',Te='',je='',Le='',Re='',Ne='',Pe={searchBar:"searchBar_RVTs",dropdownMenu:"dropdownMenu_qbY6",searchBarLeft:"searchBarLeft_MXDe",suggestion:"suggestion_fB_2",cursor:"cursor_eG29",hitTree:"hitTree_kk6K",hitIcon:"hitIcon_a7Zy",hitPath:"hitPath_ieM4",noResultsIcon:"noResultsIcon_EBY5",hitFooter:"hitFooter_E9YW",hitWrapper:"hitWrapper_sAK8",hitTitle:"hitTitle_vyVt",hitAction:"hitAction_NqkB",hideAction:"hideAction_vcyE",noResults:"noResults_l6Q3",searchBarContainer:"searchBarContainer_NW3z",searchBarLoadingRing:"searchBarLoadingRing_YnHq",searchClearButton:"searchClearButton_qk4g",searchIndexLoading:"searchIndexLoading_EJ1f",searchHintContainer:"searchHintContainer_Pkmr",searchHint:"searchHint_iIMx",focused:"focused_OWtg",input:"input_FOTf",hint:"hint_URu1",suggestions:"suggestions_X8XU",dataset:"dataset_QiCy",empty:"empty_eITn"};function Ae(e){let{document:t,type:n,page:r,metadata:o,tokens:a,isInterOfTree:i,isLastOfTree:s}=e;const l=0===n,c=1===n,u=[];i?u.push(Re):s&&u.push(Ne);const d=u.map((e=>`${e}`)),p=`${l?_e:c?Ce:Te}`,f=[`${(0,Ee.o)(t.t,(0,xe.m)(o,"t"),a)}`];if(!i&&!s&&me.H6){const e=r?(r.b??[]).concat(r.t).concat(t.s&&t.s!==r.t?t.s:[]):t.b;f.push(`${(0,ke.e)(e??[])}`)}else l||f.push(`${(0,Se.C)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),a)}`);const h=`${je}`;return[...d,p,``,...f,"",h].join("")}function Oe(){return`${Le}${(0,l.I)({id:"theme.SearchBar.noResultsText",message:"No results"})}`}var Ie=n(311);async function De(){const e=await Promise.all([n.e(8443),n.e(5525)]).then(n.t.bind(n,8443,23)),t=e.default;return t.noConflict?t.noConflict():e.noConflict&&e.noConflict(),t}const Fe="_highlight";const Me=function(e){let{handleSearchBarToggle:t}=e;const n=(0,z.Z)(),{siteConfig:{baseUrl:a}}=(0,le.Z)(),i=(0,be.gA)();let c=a;try{const{preferredVersion:e}=(0,ye.J)(i?.pluginId??me.gQ);e&&!e.isLast&&(c=e.path+"/")}catch(F){if(me.l9&&!(F instanceof N.i6))throw F}const d=(0,s.k6)(),p=(0,s.TH)(),f=(0,r.useRef)(null),h=(0,r.useRef)(new Map),g=(0,r.useRef)(!1),[m,y]=(0,r.useState)(!1),[b,v]=(0,r.useState)(!1),[w,k]=(0,r.useState)(""),x=(0,r.useRef)(null),S=(0,r.useRef)(""),[E,_]=(0,r.useState)("");(0,r.useEffect)((()=>{if(!Array.isArray(me.Kc))return;let e="";if(p.pathname.startsWith(c)){const t=p.pathname.substring(c.length),n=me.Kc.find((e=>t===e||t.startsWith(`${e}/`)));n&&(e=n)}S.current!==e&&(h.current.delete(e),S.current=e),_(e)}),[p.pathname,c]);const C=!!me.hG&&Array.isArray(me.Kc)&&""===E,T=(0,r.useCallback)((async()=>{if(C||h.current.get(E))return;h.current.set(E,"loading"),x.current?.autocomplete.destroy(),y(!0);const[{wrappedIndexes:e,zhDictionary:t},n]=await Promise.all([(0,ve.w)(c,E),De()]);if(x.current=n(f.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:(0,o.Z)(Pe.searchBar,{[Pe.searchBarLeft]:"left"===me.pu}),noPrefix:!0,dropdownMenu:Pe.dropdownMenu,input:Pe.input,hint:Pe.hint,suggestions:Pe.suggestions,suggestion:Pe.suggestion,cursor:Pe.cursor,dataset:Pe.dataset,empty:Pe.empty}},[{source:(0,we.v)(e,t,me.qo),templates:{suggestion:Ae,empty:Oe,footer:e=>{let{query:t,isEmpty:n}=e;if(n&&!E)return;const r=(e=>{let{query:t,isEmpty:n}=e;const r=document.createElement("a"),o=new URLSearchParams,i=(0,l.I)({id:"theme.SearchBar.seeAll",message:"See all results"}),s=(0,l.I)({id:"theme.SearchBar.seeAllOutsideContext",message:"See results outside {context}"},{context:E}),u=(0,l.I)({id:"theme.SearchBar.searchInContext",message:"See all results in {context}"},{context:E});let p;if(o.set("q",t),p=E&&n?s:E?u:i,Array.isArray(me.Kc)&&!n&&o.set("ctx",E),c!==a){if(!c.startsWith(a))throw new Error(`Version url '${c}' does not start with base url '${a}', this is a bug of \`@easyops-cn/docusaurus-search-local\`, please report it.`);o.set("version",c.substring(a.length))}const f=`${a}search?${o.toString()}`;return r.href=f,r.textContent=p,r.addEventListener("click",(e=>{e.ctrlKey||e.metaKey||(e.preventDefault(),x.current?.autocomplete.close(),d.push(f))})),r})({query:t,isEmpty:n}),o=document.createElement("div");return o.className=Pe.hitFooter,o.appendChild(r),o}}}]).on("autocomplete:selected",(function(e,t){let{document:{u:n,h:r},tokens:o}=t;f.current?.blur();let a=n;if(me.vc&&o.length>0){const e=new URLSearchParams;for(const t of o)e.append(Fe,t);a+=`?${e.toString()}`}r&&(a+=r),d.push(a)})).on("autocomplete:closed",(()=>{f.current?.blur()})),h.current.set(E,"done"),y(!1),g.current){const e=f.current;e.value&&x.current?.autocomplete.open(),e.focus()}}),[C,E,c,a,d]);(0,r.useEffect)((()=>{if(!me.vc)return;const e=n?new URLSearchParams(p.search).getAll(Fe):[];setTimeout((()=>{const t=document.querySelector("article");if(!t)return;const n=new me.vc(t);n.unmark(),0!==e.length&&n.mark(e),k(e.join(" ")),x.current?.autocomplete.setVal(e.join(" "))}))}),[n,p.search,p.pathname]);const[j,L]=(0,r.useState)(!1),R=(0,r.useCallback)((()=>{g.current=!0,T(),L(!0),t?.(!0)}),[t,T]),P=(0,r.useCallback)((()=>{L(!1),t?.(!1)}),[t]),A=(0,r.useCallback)((()=>{T()}),[T]),O=(0,r.useCallback)((e=>{k(e.target.value),e.target.value&&v(!0)}),[]),I=!!n&&/mac/i.test(navigator.userAgentData?.platform??navigator.platform);(0,r.useEffect)((()=>{if(!me.AY)return;const e=e=>{!(I?e.metaKey:e.ctrlKey)||"k"!==e.key&&"K"!==e.key||(e.preventDefault(),f.current?.focus(),R())};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[I,R]);const D=(0,r.useCallback)((()=>{const e=new URLSearchParams(p.search);e.delete(Fe);const t=e.toString(),n=p.pathname+(""!=t?`?${t}`:"")+p.hash;n!=p.pathname+p.search+p.hash&&d.push(n),k(""),x.current?.autocomplete.setVal("")}),[p.pathname,p.search,p.hash,d]);return(0,u.jsxs)("div",{className:(0,o.Z)("navbar__search",Pe.searchBarContainer,{[Pe.searchIndexLoading]:m&&b,[Pe.focused]:j}),hidden:C,children:[(0,u.jsx)("input",{placeholder:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),"aria-label":"Search",className:"navbar__search-input",onMouseEnter:A,onFocus:R,onBlur:P,onChange:O,ref:f,value:w}),(0,u.jsx)(Ie.Z,{className:Pe.searchBarLoadingRing}),me.AY&&me.t_&&(""!==w?(0,u.jsx)("button",{className:Pe.searchClearButton,onClick:D,children:"\u2715"}):n&&(0,u.jsxs)("div",{className:Pe.searchHintContainer,children:[(0,u.jsx)("kbd",{className:Pe.searchHint,children:I?"\u2318":"ctrl"}),(0,u.jsx)("kbd",{className:Pe.searchHint,children:"K"})]}))]})},ze={navbarSearchContainer:"navbarSearchContainer_IP3a"};function Be(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.Z)(n,ze.navbarSearchContainer),children:t})}var $e=n(2802);const Ue=e=>e.docs.find((t=>t.id===e.mainDocId));const qe={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,fe.l)(),{search:f,hash:h}=(0,s.TH)(),g=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${h}${o}`;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":""}})),...r],m=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(pe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(he,{className:ge}),m]}),items:g})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(Be,{className:n,children:(0,u.jsx)(Me,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.Z)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,be.Iw)(r),i=(0,$e.vY)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,be.Iw)(r),i=(0,$e.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,$e.lO)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.TH)(),p=(0,be.Iw)(n),f=(0,be.gB)(n),{savePreferredVersionName:h}=(0,ye.J)(n),g=[...o,...f.map((e=>{const t=p.alternateDocVersions[e.name]??Ue(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),...a],m=(0,$e.lO)(n)[0],y=t&&g.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):m.label,b=t&&g.length>1?void 0:Ue(m).path;return g.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,u.jsx)(pe,{...i,mobile:t,label:y,to:b,items:g,isActive:r?()=>!1:void 0})}};function He(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=qe[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function Qe(){const e=(0,L.e)(),t=(0,w.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(He,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ze(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.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)",children:"\u2190 Back to main menu"})})}function Ve(){const e=0===(0,w.L)().navbar.items.length,t=D();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(Ze,{onClick:()=>t.hide()}),t.content]})}function We(){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?(0,u.jsx)(F,{header:(0,u.jsx)(K,{}),primaryMenu:(0,u.jsx)(Qe,{}),secondaryMenu:(0,u.jsx)(Ve,{})}):null}const Ge={navbarHideable:"navbarHideable_GXDz",navbarHidden:"navbarHidden_WAp3"};function Ke(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.Z)("navbar-sidebar__backdrop",e.className)})}function Ye(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,L.e)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,R.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Ge.navbarHideable,!d&&Ge.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Ke,{onClick:i.toggle}),(0,u.jsx)(We,{})]})}var Xe=n(8780);const Je={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function et(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function tt(e){let{error:t}=e;const n=(0,Xe.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:Je.errorBoundaryError,children:n})}class nt extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const rt="right";function ot(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function at(){const{toggle:e,shown:t}=(0,L.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.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",children:(0,u.jsx)(ot,{})})}const it={colorModeToggle:"colorModeToggle_GwZs"};function st(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(nt,{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}),children:(0,u.jsx)(He,{...e})},t)))})}function lt(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function ct(){const e=(0,L.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??rt)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(lt,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(at,{}),(0,u.jsx)(W,{}),(0,u.jsx)(st,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(st,{items:r}),(0,u.jsx)(Z,{className:it.colorModeToggle}),!o&&(0,u.jsx)(Be,{children:(0,u.jsx)(Me,{})})]})})}function ut(){return(0,u.jsx)(Ye,{children:(0,u.jsx)(ct,{})})}function dt(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,X.Z)(n),l=(0,X.Z)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Y.Z,{className:"footer__link-item",...r?{href:a?l:r}:{to:s},...i,children:[o,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function pt(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(dt,{item:t})},t.href??t.to)}function ft(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(pt,{item:e},t)))})]})}function ht(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(ft,{column:e},t)))})}function gt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function mt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(dt,{item:t})}function yt(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(mt,{item:e}),t.length!==n+1&&(0,u.jsx)(gt,{})]},n)))})})}function bt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(ht,{columns:t}):(0,u.jsx)(yt,{links:t})}var vt=n(7030);const wt={footerLogoLink:"footerLogoLink_uIzf"};function kt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(vt.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function xt(e){let{logo:t}=e;return t.href?(0,u.jsx)(Y.Z,{href:t.href,className:wt.footerLogoLink,target:t.target,children:(0,u.jsx)(kt,{logo:t})}):(0,u.jsx)(kt,{logo:t})}function St(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Et(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function _t(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(Et,{style:o,links:n&&n.length>0&&(0,u.jsx)(bt,{links:n}),logo:r&&(0,u.jsx)(xt,{logo:r}),copyright:t&&(0,u.jsx)(St,{copyright:t})})}const Ct=r.memo(_t),Tt=(0,N.Qc)([M.S,k.pl,R.OC,ye.L5,i.VC,function(e){let{children:t}=e;return(0,u.jsx)(P.n2,{children:(0,u.jsx)(L.M,{children:(0,u.jsx)(O,{children:t})})})}]);function jt(e){let{children:t}=e;return(0,u.jsx)(Tt,{children:t})}var Lt=n(2757);function Rt(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Lt.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(et,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(tt,{error:t})})]})})})}const Nt={mainWrapper:"mainWrapper_IbdI"};function Pt(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,y.t)(),(0,u.jsxs)(jt,{children:[(0,u.jsx)(i.d,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(j,{}),(0,u.jsx)(ut,{}),(0,u.jsx)("div",{id:d,className:(0,o.Z)(m.k.wrapper.main,Nt.mainWrapper,r),children:(0,u.jsx)(a.Z,{fallback:e=>(0,u.jsx)(Rt,{...e}),children:t})}),!n&&(0,u.jsx)(Ct,{})]})}const At=()=>{(0,r.useEffect)((()=>{const e=()=>{const e=window,t=e.Intercom;if("function"==typeof t)t("reattach_activator"),t("update",e.intercomSettings);else{const t=function(){t.c(arguments)};t.q=[],t.c=function(e){t.q.push(e)},e.Intercom=t;const n=document.createElement("script");n.type="text/javascript",n.async=!0,n.src="https://widget.intercom.io/widget/fu9pkks5",document.body.appendChild(n)}};return"complete"===document.readyState?e():window.addEventListener("load",e),()=>window.removeEventListener("load",e)}),[]),(0,r.useEffect)((()=>{"function"==typeof window.Intercom&&window.Intercom("boot",{api_base:"https://api-iam.intercom.io",app_id:"fu9pkks5"}),"function"==typeof window.Intercom&&window.Intercom("update",window.intercomSettings)}),[])};const Ot=function(e){return At(),(0,u.jsx)(Pt,{...e})}},6010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;to});const o=function(){for(var e,t,n=0,o="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>f,PP:()=>j,Ep:()=>p});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};var s=n(8776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(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 p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function h(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!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,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,g(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={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},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=f(n);o&&o!==h&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),g=l(n),m=0;m{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1336:(e,t,n)=>{var r,o;!function(){var a,i,s,l,c,u,d,p,f,h,g,m,y,b,v,w,k,x,S,E,_,C,T,j,L,R,N,P,A,O,I=function(e){var t=new I.Builder;return t.pipeline.add(I.trimmer,I.stopWordFilter,I.stemmer),t.searchPipeline.add(I.stemmer),e.call(t,t),t.build()};I.version="2.3.9",I.utils={},I.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),I.utils.asString=function(e){return null==e?"":e.toString()},I.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r0){var l=I.utils.clone(t)||{};l.position=[i,s],l.index=o.length,o.push(new I.Token(n.slice(i,a),l))}i=a+1}}return o},I.tokenizer.separator=/[\s\-]+/,I.Pipeline=function(){this._stack=[]},I.Pipeline.registeredFunctions=Object.create(null),I.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&I.utils.warn("Overwriting existing registered function: "+t),e.label=t,I.Pipeline.registeredFunctions[e.label]=e},I.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||I.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},I.Pipeline.load=function(e){var t=new I.Pipeline;return e.forEach((function(e){var n=I.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},I.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){I.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},I.Pipeline.prototype.after=function(e,t){I.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},I.Pipeline.prototype.before=function(e,t){I.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},I.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},I.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n1&&(ae&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:as?c+=2:i==s&&(t+=n[l+1]*r[c+1],l+=2,c+=2);return t},I.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},I.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new I.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new I.TokenSet;o.node.edges["*"]=s}if(0==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new I.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var c,u=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?c=o.node.edges[d]:(c=new I.TokenSet,o.node.edges[d]=c),1==o.str.length&&(c.final=!0),r.push({node:c,editsRemaining:o.editsRemaining-1,str:u+o.str.slice(2)})}}}return n},I.TokenSet.fromString=function(e){for(var t=new I.TokenSet,n=t,r=0,o=e.length;r=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},I.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},I.Index.prototype.search=function(e){return this.query((function(t){new I.QueryParser(e,t).parse()}))},I.Index.prototype.query=function(e){for(var t=new I.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),s=0;s1?1:e},I.Builder.prototype.k1=function(e){this._k1=e},I.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o=this.length)return I.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},I.QueryLexer.prototype.width=function(){return this.pos-this.start},I.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},I.QueryLexer.prototype.backup=function(){this.pos-=1},I.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=I.QueryLexer.EOS&&this.backup()},I.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(I.QueryLexer.TERM)),e.ignore(),e.more())return I.QueryLexer.lexText},I.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(I.QueryLexer.EDIT_DISTANCE),I.QueryLexer.lexText},I.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(I.QueryLexer.BOOST),I.QueryLexer.lexText},I.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(I.QueryLexer.TERM)},I.QueryLexer.termSeparator=I.tokenizer.separator,I.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==I.QueryLexer.EOS)return I.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return I.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(I.QueryLexer.TERM),I.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(I.QueryLexer.TERM),I.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(I.QueryLexer.PRESENCE),I.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(I.QueryLexer.PRESENCE),I.QueryLexer.lexText;if(t.match(I.QueryLexer.termSeparator))return I.QueryLexer.lexTerm}else e.escapeCharacter()}},I.QueryParser=function(e,t){this.lexer=new I.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},I.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=I.QueryParser.parseClause;e;)e=e(this);return this.query},I.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},I.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},I.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},I.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case I.QueryLexer.PRESENCE:return I.QueryParser.parsePresence;case I.QueryLexer.FIELD:return I.QueryParser.parseField;case I.QueryLexer.TERM:return I.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new I.QueryParseError(n,t.start,t.end)}},I.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=I.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=I.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new I.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new I.QueryParseError(n,t.start,t.end)}switch(r.type){case I.QueryLexer.FIELD:return I.QueryParser.parseField;case I.QueryLexer.TERM:return I.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new I.QueryParseError(n,r.start,r.end)}}},I.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new I.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new I.QueryParseError(r,t.start,t.end)}if(o.type===I.QueryLexer.TERM)return I.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new I.QueryParseError(r,o.start,o.end)}},I.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case I.QueryLexer.TERM:return e.nextClause(),I.QueryParser.parseTerm;case I.QueryLexer.FIELD:return e.nextClause(),I.QueryParser.parseField;case I.QueryLexer.EDIT_DISTANCE:return I.QueryParser.parseEditDistance;case I.QueryLexer.BOOST:return I.QueryParser.parseBoost;case I.QueryLexer.PRESENCE:return e.nextClause(),I.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new I.QueryParseError(r,n.start,n.end)}else e.nextClause()}},I.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new I.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case I.QueryLexer.TERM:return e.nextClause(),I.QueryParser.parseTerm;case I.QueryLexer.FIELD:return e.nextClause(),I.QueryParser.parseField;case I.QueryLexer.EDIT_DISTANCE:return I.QueryParser.parseEditDistance;case I.QueryLexer.BOOST:return I.QueryParser.parseBoost;case I.QueryLexer.PRESENCE:return e.nextClause(),I.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new I.QueryParseError(r,o.start,o.end)}else e.nextClause()}},I.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new I.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case I.QueryLexer.TERM:return e.nextClause(),I.QueryParser.parseTerm;case I.QueryLexer.FIELD:return e.nextClause(),I.QueryParser.parseField;case I.QueryLexer.EDIT_DISTANCE:return I.QueryParser.parseEditDistance;case I.QueryLexer.BOOST:return I.QueryParser.parseBoost;case I.QueryLexer.PRESENCE:return e.nextClause(),I.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new I.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return I})?r.call(t,n,t,e):r)||(e.exports=o)}()},813:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(s){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),s=i.length,l=0;i=Array.prototype.slice.call(i);var c=function(){--s<=0&&a(l)};s||c(),i.forEach((function(t){e.matches(t,o.exclude)?c():o.onIframeReady(t,(function(e){n(t)&&(l++,r(e)),c()}),c)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),s=[],l=[],c=void 0,u=void 0,d=function(){var e=a.getIteratorNode(i);return u=e.prevNode,c=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(c,u,e,s)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return l.push(e)}),r)})),l.push(c);l.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(s,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var s=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,s):s()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(s)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,s=parseInt(e.start,10)-i;return(r=(s=s>a?a:s)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),s<0||r-s<0||s>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,s){var l=e.nodes[s+1];if(void 0===l||l.start>t){if(!r(i.node))return!1;var c=t-i.start,u=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),p=e.value.substr(u+i.start);if(i.node=a.wrapRangeInTextNode(i.node,c,u),e.value=d+p,e.nodes.forEach((function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=u),e.nodes[n].end-=u)})),n-=u,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var s=o.index;if(0!==i)for(var l=1;l{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;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 o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}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=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),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)*o(Math.random()*t,.1,.95)),t=o(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");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.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&&f(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 s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=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,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},4779:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var h=e[i],g=n[2],m=n[3],y=n[4],b=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=g&&null!=h&&h!==g,x="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||u,_=y||b;r.push({name:m||a++,prefix:g||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:_?c(_):w?".*":"[^"+l(E)+"]+?"})}}return i{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l=a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),h=p.indexOf(f);if(h>-1){++o;var g=p.substring(0,h),m=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=p.substring(h+f.length),b=[];g&&b.push.apply(b,i([g])),b.push(m),y&&b.push.apply(b,i([y])),"string"==typeof c?s.splice.apply(s,[l,1].concat(b)):c.content=b}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},6500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var s={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in o(t,a),s[t]=!0,n[t])s[i]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=s,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(l);i=i.map(c),s=(s||[]).map(c);var u=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),h=u;o(h);){for(var g in p={},h){var m=l[g];t(m&&m.modify,(function(e){e in d&&(p[e]=!0)}))}for(var y in d)if(!(y in u))for(var b in f(y))if(b in u){p[y]=!0;break}for(var v in h=p)u[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=i(u.map((function(e){var t=c(e);return delete l[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return s[e]=o}for(var u in n)c(u);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=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 s.name="Invariant Violation",s}}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:a,resetWarningCache:o};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),o=n(3840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n