streamlit-nightly 1.32.3.dev20240324__py2.py3-none-any.whl → 1.32.3.dev20240326__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. streamlit/elements/media.py +52 -4
  2. streamlit/external/langchain/streamlit_callback_handler.py +3 -1
  3. streamlit/runtime/caching/cache_data_api.py +3 -3
  4. streamlit/runtime/caching/cache_errors.py +0 -11
  5. streamlit/runtime/caching/cache_resource_api.py +2 -2
  6. streamlit/runtime/caching/cache_utils.py +1 -43
  7. streamlit/runtime/runtime_util.py +54 -2
  8. streamlit/static/asset-manifest.json +5 -5
  9. streamlit/static/index.html +1 -1
  10. streamlit/static/static/css/main.bf304093.css +1 -0
  11. streamlit/static/static/js/8427.44d27448.chunk.js +1 -0
  12. streamlit/static/static/js/{main.0b30ec74.js → main.7fde7092.js} +2 -2
  13. streamlit/watcher/local_sources_watcher.py +2 -1
  14. {streamlit_nightly-1.32.3.dev20240324.dist-info → streamlit_nightly-1.32.3.dev20240326.dist-info}/METADATA +1 -1
  15. {streamlit_nightly-1.32.3.dev20240324.dist-info → streamlit_nightly-1.32.3.dev20240326.dist-info}/RECORD +20 -20
  16. streamlit/static/static/css/main.77d1c464.css +0 -1
  17. streamlit/static/static/js/8427.5c2cf22b.chunk.js +0 -1
  18. /streamlit/static/static/js/{main.0b30ec74.js.LICENSE.txt → main.7fde7092.js.LICENSE.txt} +0 -0
  19. {streamlit_nightly-1.32.3.dev20240324.data → streamlit_nightly-1.32.3.dev20240326.data}/scripts/streamlit.cmd +0 -0
  20. {streamlit_nightly-1.32.3.dev20240324.dist-info → streamlit_nightly-1.32.3.dev20240326.dist-info}/WHEEL +0 -0
  21. {streamlit_nightly-1.32.3.dev20240324.dist-info → streamlit_nightly-1.32.3.dev20240326.dist-info}/entry_points.txt +0 -0
  22. {streamlit_nightly-1.32.3.dev20240324.dist-info → streamlit_nightly-1.32.3.dev20240326.dist-info}/top_level.txt +0 -0
@@ -16,6 +16,7 @@ from __future__ import annotations
16
16
 
17
17
  import io
18
18
  import re
19
+ from datetime import timedelta
19
20
  from pathlib import Path
20
21
  from typing import TYPE_CHECKING, Dict, Final, Union, cast
21
22
 
@@ -29,6 +30,7 @@ from streamlit.proto.Audio_pb2 import Audio as AudioProto
29
30
  from streamlit.proto.Video_pb2 import Video as VideoProto
30
31
  from streamlit.runtime import caching
31
32
  from streamlit.runtime.metrics_util import gather_metrics
33
+ from streamlit.runtime.runtime_util import duration_to_seconds
32
34
 
33
35
  if TYPE_CHECKING:
34
36
  from typing import Any
@@ -45,6 +47,16 @@ SubtitleData: TypeAlias = Union[
45
47
  str, Path, bytes, io.BytesIO, Dict[str, Union[str, Path, bytes, io.BytesIO]], None
46
48
  ]
47
49
 
50
+ MediaTime: TypeAlias = Union[int, float, timedelta, str]
51
+
52
+ TIMEDELTA_PARSE_ERROR_MESSAGE: Final = (
53
+ "Failed to convert '{param_name}' to a timedelta. "
54
+ "Please use a string in a format supported by "
55
+ "[Pandas Timedelta constructor]"
56
+ "(https://pandas.pydata.org/docs/reference/api/pandas.Timedelta.html), "
57
+ 'e.g. `"10s"`, `"15 seconds"`, or `"1h23s"`. Got: {param_value}'
58
+ )
59
+
48
60
 
49
61
  class MediaMixin:
50
62
  @gather_metrics("audio")
@@ -52,10 +64,10 @@ class MediaMixin:
52
64
  self,
53
65
  data: MediaData,
54
66
  format: str = "audio/wav",
55
- start_time: int = 0,
67
+ start_time: MediaTime = 0,
56
68
  *,
57
69
  sample_rate: int | None = None,
58
- end_time: int | None = None,
70
+ end_time: MediaTime | None = None,
59
71
  loop: bool = False,
60
72
  ) -> DeltaGenerator:
61
73
  """Display an audio player.
@@ -111,6 +123,8 @@ class MediaMixin:
111
123
  height: 865px
112
124
 
113
125
  """
126
+ start_time, end_time = _parse_start_time_end_time(start_time, end_time)
127
+
114
128
  audio_proto = AudioProto()
115
129
  coordinates = self.dg._get_delta_path_str()
116
130
 
@@ -143,10 +157,10 @@ class MediaMixin:
143
157
  self,
144
158
  data: MediaData,
145
159
  format: str = "video/mp4",
146
- start_time: int = 0,
160
+ start_time: MediaTime = 0,
147
161
  *, # keyword-only arguments:
148
162
  subtitles: SubtitleData = None,
149
- end_time: int | None = None,
163
+ end_time: MediaTime | None = None,
150
164
  loop: bool = False,
151
165
  ) -> DeltaGenerator:
152
166
  """Display a video player.
@@ -246,6 +260,9 @@ class MediaMixin:
246
260
  for more information.
247
261
 
248
262
  """
263
+
264
+ start_time, end_time = _parse_start_time_end_time(start_time, end_time)
265
+
249
266
  video_proto = VideoProto()
250
267
  coordinates = self.dg._get_delta_path_str()
251
268
  marshall_video(
@@ -461,6 +478,37 @@ def marshall_video(
461
478
  ) from original_err
462
479
 
463
480
 
481
+ def _parse_start_time_end_time(
482
+ start_time: MediaTime, end_time: MediaTime | None
483
+ ) -> tuple[int, int | None]:
484
+ """Parse start_time and end_time and return them as int."""
485
+
486
+ try:
487
+ maybe_start_time = duration_to_seconds(start_time, coerce_none_to_inf=False)
488
+ if maybe_start_time is None:
489
+ raise ValueError
490
+ start_time = int(maybe_start_time)
491
+ except (StreamlitAPIException, ValueError):
492
+ error_msg = TIMEDELTA_PARSE_ERROR_MESSAGE.format(
493
+ param_name="start_time", param_value=start_time
494
+ )
495
+ raise StreamlitAPIException(error_msg) from None
496
+
497
+ try:
498
+ # TODO[kajarenc]: Replace `duration_to_seconds` with `time_to_seconds`
499
+ # when PR #8343 is merged.
500
+ end_time = duration_to_seconds(end_time, coerce_none_to_inf=False)
501
+ if end_time is not None:
502
+ end_time = int(end_time)
503
+ except StreamlitAPIException:
504
+ error_msg = TIMEDELTA_PARSE_ERROR_MESSAGE.format(
505
+ param_name="end_time", param_value=end_time
506
+ )
507
+ raise StreamlitAPIException(error_msg) from None
508
+
509
+ return start_time, end_time
510
+
511
+
464
512
  def _validate_and_normalize(data: npt.NDArray[Any]) -> tuple[bytes, int]:
465
513
  """Validates and normalizes numpy array data.
466
514
  We validate numpy array shape (should be 1d or 2d)
@@ -189,11 +189,13 @@ class LLMThought:
189
189
  # If we're receiving streaming tokens from `on_llm_new_token`, this response
190
190
  # data is redundant
191
191
  self._reset_llm_token_stream()
192
+ # set the container status to complete
193
+ self.complete(self._labeler.get_final_agent_thought_label())
192
194
 
193
195
  def on_llm_error(self, error: BaseException, *args: Any, **kwargs: Any) -> None:
194
- self._container.markdown("**LLM encountered an error...**")
195
196
  self._container.exception(error)
196
197
  self._state = LLMThoughtState.ERROR
198
+ self.complete("LLM encountered an error...")
197
199
 
198
200
  def on_tool_start(
199
201
  self, serialized: dict[str, Any], input_str: str, **kwargs: Any
@@ -35,7 +35,6 @@ from streamlit.runtime.caching.cache_utils import (
35
35
  Cache,
36
36
  CachedFuncInfo,
37
37
  make_cached_func_wrapper,
38
- ttl_to_seconds,
39
38
  )
40
39
  from streamlit.runtime.caching.cached_message_replay import (
41
40
  CachedMessageReplayContext,
@@ -59,6 +58,7 @@ from streamlit.runtime.caching.storage.dummy_cache_storage import (
59
58
  MemoryCacheStorageManager,
60
59
  )
61
60
  from streamlit.runtime.metrics_util import gather_metrics
61
+ from streamlit.runtime.runtime_util import duration_to_seconds
62
62
  from streamlit.runtime.scriptrunner.script_run_context import get_script_run_ctx
63
63
  from streamlit.runtime.stats import CacheStat, CacheStatsProvider, group_stats
64
64
 
@@ -154,7 +154,7 @@ class DataCaches(CacheStatsProvider):
154
154
  If it doesn't exist, create a new one with the given params.
155
155
  """
156
156
 
157
- ttl_seconds = ttl_to_seconds(ttl, coerce_none_to_inf=False)
157
+ ttl_seconds = duration_to_seconds(ttl, coerce_none_to_inf=False)
158
158
 
159
159
  # Get the existing cache, if it exists, and validate that its params
160
160
  # haven't changed.
@@ -254,7 +254,7 @@ class DataCaches(CacheStatsProvider):
254
254
  CacheStorageContext.
255
255
  """
256
256
 
257
- ttl_seconds = ttl_to_seconds(ttl, coerce_none_to_inf=False)
257
+ ttl_seconds = duration_to_seconds(ttl, coerce_none_to_inf=False)
258
258
 
259
259
  cache_context = self.create_cache_storage_context(
260
260
  function_key="DUMMY_KEY",
@@ -176,14 +176,3 @@ class UnevaluatedDataFrameError(StreamlitAPIException):
176
176
  """Used to display a message about uncollected dataframe being used"""
177
177
 
178
178
  pass
179
-
180
-
181
- class BadTTLStringError(StreamlitAPIException):
182
- """Raised when a bad ttl= argument string is passed."""
183
-
184
- def __init__(self, ttl: str):
185
- MarkdownFormattedException.__init__(
186
- self,
187
- "TTL string doesn't look right. It should be formatted as"
188
- f"`'1d2h34m'` or `2 days`, for example. Got: {ttl}",
189
- )
@@ -35,7 +35,6 @@ from streamlit.runtime.caching.cache_utils import (
35
35
  Cache,
36
36
  CachedFuncInfo,
37
37
  make_cached_func_wrapper,
38
- ttl_to_seconds,
39
38
  )
40
39
  from streamlit.runtime.caching.cached_message_replay import (
41
40
  CachedMessageReplayContext,
@@ -46,6 +45,7 @@ from streamlit.runtime.caching.cached_message_replay import (
46
45
  )
47
46
  from streamlit.runtime.caching.hashing import HashFuncsDict
48
47
  from streamlit.runtime.metrics_util import gather_metrics
48
+ from streamlit.runtime.runtime_util import duration_to_seconds
49
49
  from streamlit.runtime.scriptrunner.script_run_context import get_script_run_ctx
50
50
  from streamlit.runtime.stats import CacheStat, CacheStatsProvider, group_stats
51
51
 
@@ -89,7 +89,7 @@ class ResourceCaches(CacheStatsProvider):
89
89
  if max_entries is None:
90
90
  max_entries = math.inf
91
91
 
92
- ttl_seconds = ttl_to_seconds(ttl)
92
+ ttl_seconds = duration_to_seconds(ttl)
93
93
 
94
94
  # Get the existing cache, if it exists, and validate that its params
95
95
  # haven't changed.
@@ -19,20 +19,17 @@ from __future__ import annotations
19
19
  import functools
20
20
  import hashlib
21
21
  import inspect
22
- import math
23
22
  import threading
24
23
  import time
25
24
  import types
26
25
  from abc import abstractmethod
27
26
  from collections import defaultdict
28
- from datetime import timedelta
29
- from typing import Any, Callable, Final, Literal, overload
27
+ from typing import Any, Callable, Final
30
28
 
31
29
  from streamlit import type_util
32
30
  from streamlit.elements.spinner import spinner
33
31
  from streamlit.logger import get_logger
34
32
  from streamlit.runtime.caching.cache_errors import (
35
- BadTTLStringError,
36
33
  CacheError,
37
34
  CacheKeyNotFoundError,
38
35
  UnevaluatedDataFrameError,
@@ -58,45 +55,6 @@ _LOGGER: Final = get_logger(__name__)
58
55
  TTLCACHE_TIMER = time.monotonic
59
56
 
60
57
 
61
- @overload
62
- def ttl_to_seconds(
63
- ttl: float | timedelta | str | None, *, coerce_none_to_inf: Literal[False]
64
- ) -> float | None:
65
- ...
66
-
67
-
68
- @overload
69
- def ttl_to_seconds(ttl: float | timedelta | str | None) -> float:
70
- ...
71
-
72
-
73
- def ttl_to_seconds(
74
- ttl: float | timedelta | str | None, *, coerce_none_to_inf: bool = True
75
- ) -> float | None:
76
- """
77
- Convert a ttl value to a float representing "number of seconds".
78
- """
79
- if coerce_none_to_inf and ttl is None:
80
- return math.inf
81
- if isinstance(ttl, timedelta):
82
- return ttl.total_seconds()
83
- if isinstance(ttl, str):
84
- import numpy as np
85
- import pandas as pd
86
-
87
- try:
88
- out: float = pd.Timedelta(ttl).total_seconds()
89
- except ValueError as ex:
90
- raise BadTTLStringError(ttl) from ex
91
-
92
- if np.isnan(out):
93
- raise BadTTLStringError(ttl)
94
-
95
- return out
96
-
97
- return ttl
98
-
99
-
100
58
  # We show a special "UnevaluatedDataFrame" warning for cached funcs
101
59
  # that attempt to return one of these unserializable types:
102
60
  UNEVALUATED_DATAFRAME_TYPES = (
@@ -16,10 +16,12 @@
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
- from typing import Any
19
+ import math
20
+ from datetime import timedelta
21
+ from typing import Any, Literal, overload
20
22
 
21
23
  from streamlit import config
22
- from streamlit.errors import MarkdownFormattedException
24
+ from streamlit.errors import MarkdownFormattedException, StreamlitAPIException
23
25
  from streamlit.proto.ForwardMsg_pb2 import ForwardMsg
24
26
  from streamlit.runtime.forward_msg_cache import populate_hash_if_needed
25
27
 
@@ -54,6 +56,17 @@ of the client's browser and the Streamlit server._
54
56
  )
55
57
 
56
58
 
59
+ class BadDurationStringError(StreamlitAPIException):
60
+ """Raised when a bad duration argument string is passed."""
61
+
62
+ def __init__(self, duration: str):
63
+ MarkdownFormattedException.__init__(
64
+ self,
65
+ "TTL string doesn't look right. It should be formatted as"
66
+ f"`'1d2h34m'` or `2 days`, for example. Got: {duration}",
67
+ )
68
+
69
+
57
70
  def is_cacheable_msg(msg: ForwardMsg) -> bool:
58
71
  """True if the given message qualifies for caching."""
59
72
  if msg.WhichOneof("type") in {"ref_hash", "initialize"}:
@@ -62,6 +75,45 @@ def is_cacheable_msg(msg: ForwardMsg) -> bool:
62
75
  return msg.ByteSize() >= int(config.get_option("global.minCachedMessageSize"))
63
76
 
64
77
 
78
+ @overload
79
+ def duration_to_seconds(
80
+ ttl: float | timedelta | str | None, *, coerce_none_to_inf: Literal[False]
81
+ ) -> float | None:
82
+ ...
83
+
84
+
85
+ @overload
86
+ def duration_to_seconds(ttl: float | timedelta | str | None) -> float:
87
+ ...
88
+
89
+
90
+ def duration_to_seconds(
91
+ ttl: float | timedelta | str | None, *, coerce_none_to_inf: bool = True
92
+ ) -> float | None:
93
+ """
94
+ Convert a ttl value to a float representing "number of seconds".
95
+ """
96
+ if coerce_none_to_inf and ttl is None:
97
+ return math.inf
98
+ if isinstance(ttl, timedelta):
99
+ return ttl.total_seconds()
100
+ if isinstance(ttl, str):
101
+ import numpy as np
102
+ import pandas as pd
103
+
104
+ try:
105
+ out: float = pd.Timedelta(ttl).total_seconds()
106
+ except ValueError as ex:
107
+ raise BadDurationStringError(ttl) from ex
108
+
109
+ if np.isnan(out):
110
+ raise BadDurationStringError(ttl)
111
+
112
+ return out
113
+
114
+ return ttl
115
+
116
+
65
117
  def serialize_forward_msg(msg: ForwardMsg) -> bytes:
66
118
  """Serialize a ForwardMsg to send to a client.
67
119
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
- "main.css": "./static/css/main.77d1c464.css",
4
- "main.js": "./static/js/main.0b30ec74.js",
3
+ "main.css": "./static/css/main.bf304093.css",
4
+ "main.js": "./static/js/main.7fde7092.js",
5
5
  "static/js/9336.2d95d840.chunk.js": "./static/js/9336.2d95d840.chunk.js",
6
6
  "static/js/9330.d29313d4.chunk.js": "./static/js/9330.d29313d4.chunk.js",
7
7
  "static/js/7217.d970c074.chunk.js": "./static/js/7217.d970c074.chunk.js",
@@ -10,7 +10,7 @@
10
10
  "static/js/3092.3d4df25e.chunk.js": "./static/js/3092.3d4df25e.chunk.js",
11
11
  "static/css/43.c24b25fa.chunk.css": "./static/css/43.c24b25fa.chunk.css",
12
12
  "static/js/43.76c54963.chunk.js": "./static/js/43.76c54963.chunk.js",
13
- "static/js/8427.5c2cf22b.chunk.js": "./static/js/8427.5c2cf22b.chunk.js",
13
+ "static/js/8427.44d27448.chunk.js": "./static/js/8427.44d27448.chunk.js",
14
14
  "static/js/7323.2808d029.chunk.js": "./static/js/7323.2808d029.chunk.js",
15
15
  "static/js/4185.78230b2a.chunk.js": "./static/js/4185.78230b2a.chunk.js",
16
16
  "static/js/7805.51638fbc.chunk.js": "./static/js/7805.51638fbc.chunk.js",
@@ -149,7 +149,7 @@
149
149
  "static/media/checkmark.svg": "./static/media/checkmark.29851c8e9e6ef0c3d6c1e4efe3c1bb9e.svg"
150
150
  },
151
151
  "entrypoints": [
152
- "static/css/main.77d1c464.css",
153
- "static/js/main.0b30ec74.js"
152
+ "static/css/main.bf304093.css",
153
+ "static/js/main.7fde7092.js"
154
154
  ]
155
155
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><link rel="shortcut icon" href="./favicon.png"/><link rel="preload" href="./static/media/SourceSansPro-Regular.0d69e5ff5e92ac64a0c9.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="./static/media/SourceSansPro-SemiBold.abed79cd0df1827e18cf.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="./static/media/SourceSansPro-Bold.118dea98980e20a81ced.woff2" as="font" type="font/woff2" crossorigin><title>Streamlit</title><script>window.prerenderReady=!1</script><script defer="defer" src="./static/js/main.0b30ec74.js"></script><link href="./static/css/main.77d1c464.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><link rel="shortcut icon" href="./favicon.png"/><link rel="preload" href="./static/media/SourceSansPro-Regular.0d69e5ff5e92ac64a0c9.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="./static/media/SourceSansPro-SemiBold.abed79cd0df1827e18cf.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="./static/media/SourceSansPro-Bold.118dea98980e20a81ced.woff2" as="font" type="font/woff2" crossorigin><title>Streamlit</title><script>window.prerenderReady=!1</script><script defer="defer" src="./static/js/main.7fde7092.js"></script><link href="./static/css/main.bf304093.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
@@ -0,0 +1 @@
1
+ @font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(../../static/media/KaTeX_AMS-Regular.73ea273a72f4aca30ca5.woff2) format("woff2"),url(../../static/media/KaTeX_AMS-Regular.d562e886c52f12660a41.woff) format("woff"),url(../../static/media/KaTeX_AMS-Regular.853be92419a6c3766b9a.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(../../static/media/KaTeX_Caligraphic-Bold.a1abf90dfd72792a577a.woff2) format("woff2"),url(../../static/media/KaTeX_Caligraphic-Bold.d757c535a2e5902f1325.woff) format("woff"),url(../../static/media/KaTeX_Caligraphic-Bold.7489a2fbfb9bfe704420.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(../../static/media/KaTeX_Caligraphic-Regular.d6484fce1ef428d5bd94.woff2) format("woff2"),url(../../static/media/KaTeX_Caligraphic-Regular.db074fa22cf224af93d7.woff) format("woff"),url(../../static/media/KaTeX_Caligraphic-Regular.7e873d3833eb108a0758.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(../../static/media/KaTeX_Fraktur-Bold.931d67ea207ab37ee693.woff2) format("woff2"),url(../../static/media/KaTeX_Fraktur-Bold.354501bac435c3264834.woff) format("woff"),url(../../static/media/KaTeX_Fraktur-Bold.4c761b3711973ab04edf.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(../../static/media/KaTeX_Fraktur-Regular.172d3529b26f8cedef6b.woff2) format("woff2"),url(../../static/media/KaTeX_Fraktur-Regular.6fdf0ac577be0ba82a4c.woff) format("woff"),url(../../static/media/KaTeX_Fraktur-Regular.ed305b5434865e06ffde.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(../../static/media/KaTeX_Main-Bold.39890742bc957b368704.woff2) format("woff2"),url(../../static/media/KaTeX_Main-Bold.0c3b8929d377c0e9b2f3.woff) format("woff"),url(../../static/media/KaTeX_Main-Bold.8169508bf58f8bd92ad8.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(../../static/media/KaTeX_Main-BoldItalic.20f389c4120be058d80a.woff2) format("woff2"),url(../../static/media/KaTeX_Main-BoldItalic.428978dc7837d46de091.woff) format("woff"),url(../../static/media/KaTeX_Main-BoldItalic.828abcb200061cffbaae.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(../../static/media/KaTeX_Main-Italic.fe2176f79edaa716e621.woff2) format("woff2"),url(../../static/media/KaTeX_Main-Italic.fd947498bc16392e76c2.woff) format("woff"),url(../../static/media/KaTeX_Main-Italic.fa675e5e4bec9eb250b6.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(../../static/media/KaTeX_Main-Regular.f650f111a3b890d116f1.woff2) format("woff2"),url(../../static/media/KaTeX_Main-Regular.4f35fbcc9ee8614c2bcc.woff) format("woff"),url(../../static/media/KaTeX_Main-Regular.9eba1d77abcf2aa6e94e.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(../../static/media/KaTeX_Math-BoldItalic.dcbcbd93bac0470b462d.woff2) format("woff2"),url(../../static/media/KaTeX_Math-BoldItalic.3f07ed67f06c720120ce.woff) format("woff"),url(../../static/media/KaTeX_Math-BoldItalic.bf2d440b3a42ea78a998.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(../../static/media/KaTeX_Math-Italic.6d3d25f4820d0da8f01f.woff2) format("woff2"),url(../../static/media/KaTeX_Math-Italic.96759856b4e70f3a8338.woff) format("woff"),url(../../static/media/KaTeX_Math-Italic.8a5f936332e8028c7278.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(../../static/media/KaTeX_SansSerif-Bold.95591a929f0d32aa282a.woff2) format("woff2"),url(../../static/media/KaTeX_SansSerif-Bold.b9cd458ac6d5889ff9c3.woff) format("woff"),url(../../static/media/KaTeX_SansSerif-Bold.5b49f4993ae22d7975b4.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(../../static/media/KaTeX_SansSerif-Italic.7d393d382f3e7fb1c637.woff2) format("woff2"),url(../../static/media/KaTeX_SansSerif-Italic.8d593cfaa96238d5e2f8.woff) format("woff"),url(../../static/media/KaTeX_SansSerif-Italic.b257a18c016f37ee4543.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(../../static/media/KaTeX_SansSerif-Regular.cd5e231e0cc53b2cb2c0.woff2) format("woff2"),url(../../static/media/KaTeX_SansSerif-Regular.02271ec5cb9f5b4588ac.woff) format("woff"),url(../../static/media/KaTeX_SansSerif-Regular.2f7bc363fc5424ebda59.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(../../static/media/KaTeX_Script-Regular.c81d1b2a4b75d3eded60.woff2) format("woff2"),url(../../static/media/KaTeX_Script-Regular.073b3402d036714b4370.woff) format("woff"),url(../../static/media/KaTeX_Script-Regular.fc9ba5249878cd8f8d88.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(../../static/media/KaTeX_Size1-Regular.6eec866c69313624be60.woff2) format("woff2"),url(../../static/media/KaTeX_Size1-Regular.0108e89c9003e8c14ea3.woff) format("woff"),url(../../static/media/KaTeX_Size1-Regular.6de7d4b539221a49e9e2.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(../../static/media/KaTeX_Size2-Regular.2960900c4f271311eb36.woff2) format("woff2"),url(../../static/media/KaTeX_Size2-Regular.3a99e70aee4076660d38.woff) format("woff"),url(../../static/media/KaTeX_Size2-Regular.57f5c1837853986ea1db.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(../../static/media/KaTeX_Size3-Regular.e1951519f6f0596f7356.woff2) format("woff2"),url(../../static/media/KaTeX_Size3-Regular.7947224e8a9914fa332b.woff) format("woff"),url(../../static/media/KaTeX_Size3-Regular.8d6b6822586eea3d3b20.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(../../static/media/KaTeX_Size4-Regular.e418bf257af1052628d8.woff2) format("woff2"),url(../../static/media/KaTeX_Size4-Regular.aeffd8025cba3647f1a6.woff) format("woff"),url(../../static/media/KaTeX_Size4-Regular.4ad7c7e8bb8d10a34bb7.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(../../static/media/KaTeX_Typewriter-Regular.c295e7f71970f03c0549.woff2) format("woff2"),url(../../static/media/KaTeX_Typewriter-Regular.4c6b94fd1d07f8beff7c.woff) format("woff"),url(../../static/media/KaTeX_Typewriter-Regular.c5c02d763c89380dcb4e.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.10"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}@font-face{font-family:Source Code Pro;font-style:regular;font-weight:400;src:url(../../static/media/SourceCodePro-Regular.84b900b88d09398d86b0.woff2) format("woff2")}@font-face{font-family:Source Code Pro;font-style:regular;font-weight:600;src:url(../../static/media/SourceCodePro-SemiBold.17291d1c493cb25eb2c3.woff2) format("woff2")}@font-face{font-family:Source Code Pro;font-style:regular;font-weight:700;src:url(../../static/media/SourceCodePro-Bold.17a68a0751a813474a0e.woff2) format("woff2")}@font-face{font-family:Source Code Pro;font-style:italic;font-weight:400;src:url(../../static/media/SourceCodePro-Italic.ec122a420df4175e74f2.woff2) format("woff2")}@font-face{font-family:Source Code Pro;font-style:italic;font-weight:600;src:url(../../static/media/SourceCodePro-SemiBoldItalic.f879ae27307c3926522b.woff2) format("woff2")}@font-face{font-family:Source Code Pro;font-style:italic;font-weight:700;src:url(../../static/media/SourceCodePro-BoldItalic.d45b7a3df103d441d78b.woff2) format("woff2")}@font-face{font-family:Source Sans Pro;font-style:regular;font-weight:400;src:url(../../static/media/SourceSansPro-Regular.0d69e5ff5e92ac64a0c9.woff2) format("woff2")}@font-face{font-family:Source Sans Pro;font-style:regular;font-weight:600;src:url(../../static/media/SourceSansPro-SemiBold.abed79cd0df1827e18cf.woff2) format("woff2")}@font-face{font-family:Source Sans Pro;font-style:regular;font-weight:700;src:url(../../static/media/SourceSansPro-Bold.118dea98980e20a81ced.woff2) format("woff2")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:400;src:url(../../static/media/SourceSansPro-Italic.8a9bfea74d43927d6eec.woff2) format("woff2")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:600;src:url(../../static/media/SourceSansPro-SemiBoldItalic.befb0a2824eabc5ce36b.woff2) format("woff2")}@font-face{font-family:Source Sans Pro;font-style:italic;font-weight:700;src:url(../../static/media/SourceSansPro-BoldItalic.1d664be59d2eb5fef029.woff2) format("woff2")}@font-face{font-family:"Source Serif Pro";font-style:regular;font-weight:400;src:url(../../static/media/SourceSerifPro-Regular.e6c37aa3926474cc93e1.woff2) format("woff2")}@font-face{font-family:"Source Serif Pro";font-style:regular;font-weight:600;src:url(../../static/media/SourceSerifPro-SemiBold.5c1d378dd5990ef334ca.woff2) format("woff2")}@font-face{font-family:"Source Serif Pro";font-style:regular;font-weight:700;src:url(../../static/media/SourceSerifPro-Bold.d7975b56594770699ae0.woff2) format("woff2")}@font-face{font-family:"Source Serif Pro";font-style:italic;font-weight:400;src:url(../../static/media/SourceSerifPro-Italic.d3529cb5797663ac5d88.woff2) format("woff2")}@font-face{font-family:"Source Serif Pro";font-style:italic;font-weight:600;src:url(../../static/media/SourceSerifPro-SemiBoldItalic.249e948b885d0c7d30a8.woff2) format("woff2")}@font-face{font-family:"Source Serif Pro";font-style:italic;font-weight:700;src:url(../../static/media/SourceSerifPro-BoldItalic.913697a7178b128caa4c.woff2) format("woff2")}html{font-size:1rem}h1{font-size:calc(1.4rem + 1.8vw)}@media(min-width:1200px){h1{font-size:2.75rem}}h2{font-size:calc(1.35rem + 1.2vw)}@media(min-width:1200px){h2{font-size:2.25rem}}h3{font-size:calc(1.3rem + .6vw)}@media(min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media(min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}small{font-size:.875rem}sub,sup{font-size:.75rem}code,kbd,pre{font-size:1em}pre{font-size:.75em}pre code{font-size:inherit}code{font-size:.75em}kbd{border-radius:.25rem;font-size:.875rem}kbd kbd{font-size:1em}button,input,optgroup,select,textarea{font-size:inherit}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}legend{font-size:1rem}
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_streamlit_app=self.webpackChunk_streamlit_app||[]).push([[8427],{18427:(e,t,o)=>{o.r(t),o.d(t,{default:()=>b});var r=o(66845),i=o(25621),n=o(69021),s=o(92627),a=o(21e3),d=o(59033),l=o(36989),c=o(1515);const u=(0,c.Z)("button",{target:"elibz2u1"})((e=>{let{theme:t}=e;return{fontSize:t.fontSizes.sm,lineHeight:"1.4rem",color:t.colors.gray60,backgroundColor:t.colors.transparent,border:"none",boxShadow:"none",padding:"0px","&:hover, &:active, &:focus":{border:"none",outline:"none",boxShadow:"none"},"&:hover":{color:t.colors.primary}}}),""),h=(0,c.Z)("div",{target:"elibz2u0"})((e=>{let{theme:t,expanded:o}=e;return{maxHeight:o?"none":t.breakpoints.toast}}),"");var p=o(40864);const b=(0,i.b)((function(e){let{theme:t,body:o,icon:i,width:c}=e;const b=i?"".concat(i,"&ensp;").concat(o):o,g=function(e){if(e.length>114){let t=e.replace(/^(.{114}[^\s]*).*/,"$1");return t.length>114&&(t=t.substring(0,114).split(" ").slice(0,-1).join(" ")),t.trim()}return e}(b),m=b!==g,[x,f]=(0,r.useState)(!m),[y,w]=(0,r.useState)(0),S=(0,r.useCallback)((()=>{f(!x)}),[x]),v=(0,r.useMemo)((()=>function(e,t){const o=(0,s.Iy)(t);return{Body:{props:{"data-testid":"stToast"},style:{width:"288px",marginTop:"8px",borderTopLeftRadius:t.radii.lg,borderTopRightRadius:t.radii.lg,borderBottomLeftRadius:t.radii.lg,borderBottomRightRadius:t.radii.lg,backgroundColor:o?t.colors.gray10:t.colors.gray90,color:t.colors.bodyText,boxShadow:o?"0px 4px 16px rgba(0, 0, 0, 0.16)":"0px 4px 16px rgba(0, 0, 0, 0.7)"}},InnerContainer:{style:{maxHeight:e?"none":"88px",overflow:"hidden",fontSize:t.fontSizes.sm,lineHeight:"1.4rem"}},CloseIcon:{style:{color:t.colors.bodyText,marginRight:"-5px",width:"1.2rem",height:"1.2rem"}}}}(x,t)),[x,t]),k=(0,r.useMemo)((()=>(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(h,{expanded:x,children:(0,p.jsx)(a.ZP,{source:x?b:g,allowHTML:!1,isToast:!0})}),m&&(0,p.jsx)(u,{"data-testid":"toastViewButton",className:"toastViewButton",onClick:S,children:x?"view less":"view more"})]})),[m,x,b,g,S]);(0,r.useEffect)((()=>{if(t.inSidebar)return;const e=n.Z.info(k,{overrides:{...v}});return w(e),()=>{n.Z.update(e,{overrides:{Body:{style:{transitionDuration:0}}}}),n.Z.clear(e)}}),[]),(0,r.useEffect)((()=>{n.Z.update(y,{children:k,overrides:{...v}})}),[y,k,v]);const R=(0,p.jsx)(l.Z,{kind:d.h.ERROR,body:"Streamlit API Error: `st.toast` cannot be called directly on the sidebar with `st.sidebar.toast`. See our `st.toast` API [docs](https://docs.streamlit.io/library/api-reference/status/st.toast) for more information.",width:c});return(0,p.jsx)(p.Fragment,{children:t.inSidebar&&R})}))}}]);