dara-components 1.17.6__py3-none-any.whl → 1.18.1__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.
- dara/components/__init__.py +2 -0
- dara/components/common/__init__.py +1 -0
- dara/components/common/base_component.py +6 -6
- dara/components/common/button.py +2 -2
- dara/components/common/dropzone.py +1 -1
- dara/components/common/heading.py +2 -0
- dara/components/common/if_cmp.py +3 -1
- dara/components/common/label.py +0 -1
- dara/components/common/slider.py +1 -4
- dara/components/common/stack.py +1 -1
- dara/components/common/table.py +7 -8
- dara/components/common/text.py +1 -1
- dara/components/common/time_utils.py +1 -3
- dara/components/common/tooltip.py +1 -1
- dara/components/common/utils.py +4 -5
- dara/components/graphs/__init__.py +1 -0
- dara/components/graphs/components/base_graph_component.py +1 -1
- dara/components/graphs/components/causal_graph_viewer.py +1 -1
- dara/components/graphs/components/edge_encoder.py +2 -2
- dara/components/graphs/definitions.py +3 -3
- dara/components/plotting/__init__.py +2 -1
- dara/components/plotting/bokeh/bokeh.py +0 -1
- dara/components/plotting/bokeh/utils.py +7 -3
- dara/components/plotting/plotly/plotly.py +1 -2
- dara/components/plotting/plotly/themes.py +6 -4
- dara/components/smart/__init__.py +1 -0
- dara/components/smart/code_editor/util.py +9 -9
- dara/components/smart/data_slicer/data_slicer.py +1 -1
- dara/components/smart/data_slicer/data_slicer_modal.py +2 -2
- dara/components/smart/data_slicer/utils/core.py +13 -13
- dara/components/smart/data_slicer/utils/plotting.py +8 -6
- {dara_components-1.17.6.dist-info → dara_components-1.18.1.dist-info}/METADATA +3 -3
- {dara_components-1.17.6.dist-info → dara_components-1.18.1.dist-info}/RECORD +35 -35
- {dara_components-1.17.6.dist-info → dara_components-1.18.1.dist-info}/LICENSE +0 -0
- {dara_components-1.17.6.dist-info → dara_components-1.18.1.dist-info}/WHEEL +0 -0
dara/components/__init__.py
CHANGED
|
@@ -14,6 +14,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
14
14
|
See the License for the specific language governing permissions and
|
|
15
15
|
limitations under the License.
|
|
16
16
|
"""
|
|
17
|
+
# ruff: noqa: F401, F403
|
|
18
|
+
|
|
17
19
|
from importlib.metadata import version
|
|
18
20
|
|
|
19
21
|
from pydantic import BaseModel
|
|
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
14
14
|
See the License for the specific language governing permissions and
|
|
15
15
|
limitations under the License.
|
|
16
16
|
"""
|
|
17
|
+
# ruff: noqa: F401, F403
|
|
17
18
|
|
|
18
19
|
from dara.components.common.accordion import Accordion, AccordionItem
|
|
19
20
|
from dara.components.common.anchor import Anchor
|
|
@@ -78,7 +78,7 @@ class LayoutComponent(BaseDashboardComponent):
|
|
|
78
78
|
:param align: the align-items value to be passed to the component
|
|
79
79
|
"""
|
|
80
80
|
|
|
81
|
-
position: str = 'relative'
|
|
81
|
+
position: Union[str, None] = 'relative'
|
|
82
82
|
|
|
83
83
|
justify: Optional[JustifyContent] = None
|
|
84
84
|
|
|
@@ -92,15 +92,15 @@ class LayoutComponent(BaseDashboardComponent):
|
|
|
92
92
|
if ComponentInstance.isinstance(component) is False:
|
|
93
93
|
name = self.__class__.__name__
|
|
94
94
|
raise TypeError(f'You may only append other components to a {name} component. Not: {component}')
|
|
95
|
-
self.children.append(component)
|
|
95
|
+
self.children.append(component) # type: ignore
|
|
96
96
|
|
|
97
97
|
def pop(self):
|
|
98
98
|
"""
|
|
99
99
|
Pops the last child from the list of children and returns it. Raises an IndexError if the parent is empty
|
|
100
100
|
"""
|
|
101
|
-
if len(self.children) == 0:
|
|
101
|
+
if len(self.children) == 0: # type: ignore
|
|
102
102
|
raise IndexError(f'{self.__class__.__name__} is empty')
|
|
103
|
-
return self.children.pop()
|
|
103
|
+
return self.children.pop() # type: ignore
|
|
104
104
|
|
|
105
105
|
|
|
106
106
|
class ContentComponent(BaseDashboardComponent):
|
|
@@ -114,8 +114,8 @@ class ContentComponent(BaseDashboardComponent):
|
|
|
114
114
|
super().__init__(*args, **kwargs)
|
|
115
115
|
|
|
116
116
|
cmp_name = self.__class__.__name__
|
|
117
|
-
if len(self.children) != 0:
|
|
118
|
-
for child in self.children:
|
|
117
|
+
if len(self.children) != 0: # type: ignore
|
|
118
|
+
for child in self.children: # type: ignore
|
|
119
119
|
if isinstance(child, LayoutComponent):
|
|
120
120
|
raise LayoutError(f'A {child.__class__.__name__} component cannot be nested inside a {cmp_name}')
|
|
121
121
|
|
dara/components/common/button.py
CHANGED
|
@@ -16,7 +16,7 @@ limitations under the License.
|
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
from enum import Enum
|
|
19
|
-
from typing import Optional, Union
|
|
19
|
+
from typing import Optional, Union, cast
|
|
20
20
|
|
|
21
21
|
from dara.components.common.base_component import LayoutComponent
|
|
22
22
|
from dara.components.common.text import Text
|
|
@@ -134,4 +134,4 @@ class Button(LayoutComponent):
|
|
|
134
134
|
if not styling and isinstance(children, ComponentInstance) and not isinstance(children, Text):
|
|
135
135
|
style = ButtonStyle.PLAIN
|
|
136
136
|
|
|
137
|
-
super().__init__(child, styling=style, **kwargs)
|
|
137
|
+
super().__init__(cast(ComponentInstance, child), styling=style, **kwargs)
|
|
@@ -81,7 +81,7 @@ class UploadDropzone(StyledComponentInstance):
|
|
|
81
81
|
on_drop: Optional[Action] = None,
|
|
82
82
|
accept: Optional[str] = None,
|
|
83
83
|
enable_paste: Optional[bool] = False,
|
|
84
|
-
**kwargs
|
|
84
|
+
**kwargs,
|
|
85
85
|
):
|
|
86
86
|
from dara.core.interactivity.any_data_variable import upload
|
|
87
87
|
from dara.core.internal.registries import upload_resolver_registry
|
|
@@ -74,6 +74,8 @@ class Heading(ContentComponent):
|
|
|
74
74
|
|
|
75
75
|
@property
|
|
76
76
|
def anchor_name(self):
|
|
77
|
+
if isinstance(self.heading, NonDataVariable):
|
|
78
|
+
raise ValueError('Heading anchor name cannot be accessed directly from a variable')
|
|
77
79
|
return re.sub(r'\s+', '-', self.heading.lower())
|
|
78
80
|
|
|
79
81
|
def __init__(self, heading: Union[str, NonDataVariable], **kwargs):
|
dara/components/common/if_cmp.py
CHANGED
|
@@ -95,5 +95,7 @@ class If(ModifierComponent):
|
|
|
95
95
|
condition = Condition(operator=Operator.TRUTHY, other=None, variable=condition)
|
|
96
96
|
|
|
97
97
|
super().__init__(
|
|
98
|
-
condition=condition,
|
|
98
|
+
condition=condition,
|
|
99
|
+
true_children=cast_list(true_children),
|
|
100
|
+
false_children=cast_list(false_children), # type: ignore
|
|
99
101
|
)
|
dara/components/common/label.py
CHANGED
|
@@ -72,7 +72,6 @@ class Label(ContentComponent):
|
|
|
72
72
|
@field_validator('children')
|
|
73
73
|
@classmethod
|
|
74
74
|
def validate_only_one_child(cls, children: List[ComponentInstance]) -> List[ComponentInstance]:
|
|
75
|
-
|
|
76
75
|
if len(children) > 1:
|
|
77
76
|
raise TypeError(
|
|
78
77
|
'More than one component was passed to the Label component. Label accepts only one child component'
|
dara/components/common/slider.py
CHANGED
|
@@ -168,10 +168,7 @@ class Slider(FormComponent):
|
|
|
168
168
|
# If step is not provided, run inference to check if the
|
|
169
169
|
# client-side computed step is compatible with the domain range.
|
|
170
170
|
# The actual step is computed in the client-side but we check it here to fail early.
|
|
171
|
-
if v is None
|
|
172
|
-
step = compute_step(domain_range)
|
|
173
|
-
else:
|
|
174
|
-
step = Decimal(str(v))
|
|
171
|
+
step = compute_step(domain_range) if v is None else Decimal(str(v))
|
|
175
172
|
|
|
176
173
|
# Not divisible
|
|
177
174
|
if domain_range % step != 0:
|
dara/components/common/stack.py
CHANGED
|
@@ -137,7 +137,7 @@ class Stack(LayoutComponent):
|
|
|
137
137
|
|
|
138
138
|
collapsed: Union[Variable[bool], bool] = False
|
|
139
139
|
direction: Direction = Direction.VERTICAL
|
|
140
|
-
hug: bool = False
|
|
140
|
+
hug: Union[bool, None] = False
|
|
141
141
|
scroll: bool = False
|
|
142
142
|
|
|
143
143
|
# Dummy init that just passes through arguments to superclass, fixes Pylance complaining about types
|
dara/components/common/table.py
CHANGED
|
@@ -376,7 +376,7 @@ class Column(BaseModel):
|
|
|
376
376
|
unique_items: Optional[List[str]] = None
|
|
377
377
|
filter: Optional[TableFilter] = None
|
|
378
378
|
formatter: Optional[dict] = None
|
|
379
|
-
label: Optional[str] = Field(default=None, validate_default=True)
|
|
379
|
+
label: Optional[str] = Field(default=None, validate_default=True) # mimics always=True in pydantic v1
|
|
380
380
|
sticky: Optional[str] = None
|
|
381
381
|
tooltip: Optional[str] = None
|
|
382
382
|
width: Optional[Union[int, str]] = None
|
|
@@ -402,13 +402,12 @@ class Column(BaseModel):
|
|
|
402
402
|
formatter_type = formatter.get('type')
|
|
403
403
|
if formatter_type not in TableFormatterType:
|
|
404
404
|
raise ValueError(
|
|
405
|
-
f
|
|
405
|
+
f'Invalid formatter type: {formatter.get("type")}, accepted values {list(TableFormatterType)}'
|
|
406
406
|
)
|
|
407
407
|
if formatter_type in (TableFormatterType.NUMBER, TableFormatterType.PERCENT):
|
|
408
408
|
precision = formatter.get('precision')
|
|
409
|
-
if precision is not None:
|
|
410
|
-
|
|
411
|
-
raise ValueError(f'Invalid precision value: {precision}, must be positive integer')
|
|
409
|
+
if precision is not None and (not isinstance(precision, int) or precision <= 0):
|
|
410
|
+
raise ValueError(f'Invalid precision value: {precision}, must be positive integer')
|
|
412
411
|
elif formatter_type == TableFormatterType.NUMBER_INTL:
|
|
413
412
|
locales = formatter.get('locales')
|
|
414
413
|
if not isinstance(locales, str) or not (
|
|
@@ -442,9 +441,9 @@ class Column(BaseModel):
|
|
|
442
441
|
)
|
|
443
442
|
lower_bound = threshold.get('bounds')[0]
|
|
444
443
|
upper_bound = threshold.get('bounds')[1]
|
|
445
|
-
if not (isinstance(lower_bound, int
|
|
444
|
+
if not (isinstance(lower_bound, (int, float))):
|
|
446
445
|
raise ValueError(f'Invalid bound type: {lower_bound}, must be int or float')
|
|
447
|
-
if not (isinstance(upper_bound, int
|
|
446
|
+
if not (isinstance(upper_bound, (int, float))):
|
|
448
447
|
raise ValueError(f'Invalid bound type: {upper_bound}, must be int or float')
|
|
449
448
|
elif formatter_type == TableFormatterType.BADGE:
|
|
450
449
|
badges = formatter.get('badges')
|
|
@@ -461,7 +460,7 @@ class Column(BaseModel):
|
|
|
461
460
|
)
|
|
462
461
|
if not isinstance(badges[badge].get('color'), str):
|
|
463
462
|
raise ValueError(
|
|
464
|
-
f
|
|
463
|
+
f'Invalid color: {badges[badge].get("color")} for badge: {badges[badge]}, must be a string'
|
|
465
464
|
)
|
|
466
465
|
return formatter
|
|
467
466
|
|
dara/components/common/text.py
CHANGED
|
@@ -39,9 +39,7 @@ def date_to_datetime(d: datetime.date, hh=23, mm=59, ss=59) -> datetime.datetime
|
|
|
39
39
|
|
|
40
40
|
def coerce_to_timemilli(t: Union[int, float, datetime.date, datetime.datetime]) -> float:
|
|
41
41
|
"""Convert any of int/float/date/datetime into a timemilli."""
|
|
42
|
-
if isinstance(t, int
|
|
43
|
-
return float(t)
|
|
44
|
-
elif isinstance(t, float) or isinstance(t, numpy.floating):
|
|
42
|
+
if isinstance(t, (int, numpy.signedinteger, float, numpy.floating)):
|
|
45
43
|
return float(t)
|
|
46
44
|
# The order matters - datetime.datetime is a subclass of the datetime.date
|
|
47
45
|
elif isinstance(t, datetime.datetime):
|
|
@@ -84,7 +84,7 @@ class Tooltip(ModifierComponent):
|
|
|
84
84
|
content: Union[str, ComponentInstance, Variable[str], DerivedVariable[str]],
|
|
85
85
|
placement: str = 'auto',
|
|
86
86
|
styling: str = 'default',
|
|
87
|
-
**kwargs
|
|
87
|
+
**kwargs,
|
|
88
88
|
):
|
|
89
89
|
# Unless there's one component and it's Stack, wrap components in Stack
|
|
90
90
|
if not (len(components) == 1 and isinstance(components[0], Stack)):
|
dara/components/common/utils.py
CHANGED
|
@@ -78,11 +78,11 @@ class Item(BaseModel):
|
|
|
78
78
|
try:
|
|
79
79
|
label = str(item)
|
|
80
80
|
return Item(label=label, value=item)
|
|
81
|
-
except Exception:
|
|
81
|
+
except Exception as e:
|
|
82
82
|
raise ValueError(
|
|
83
83
|
f'Item: {item} could not be parsed correctly. If your item is a complex structure please pass in an '
|
|
84
84
|
f'Item class, with a string label defined'
|
|
85
|
-
)
|
|
85
|
+
) from e
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
class CarouselItem(BaseModel):
|
|
@@ -116,7 +116,6 @@ class CarouselItem(BaseModel):
|
|
|
116
116
|
image_height: Optional[str] = None,
|
|
117
117
|
image_width: Optional[str] = None,
|
|
118
118
|
):
|
|
119
|
-
|
|
120
119
|
super().__init__(
|
|
121
120
|
title=title,
|
|
122
121
|
subtitle=subtitle,
|
|
@@ -149,8 +148,8 @@ class CarouselItem(BaseModel):
|
|
|
149
148
|
try:
|
|
150
149
|
title = str(item)
|
|
151
150
|
return CarouselItem(title=title)
|
|
152
|
-
except Exception:
|
|
151
|
+
except Exception as e:
|
|
153
152
|
raise ValueError(
|
|
154
153
|
f'CarouselItem: {item} could not be parsed correctly. If your item is a complex structure please pass in an '
|
|
155
154
|
f'CarouselItem class'
|
|
156
|
-
)
|
|
155
|
+
) from e
|
|
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
14
14
|
See the License for the specific language governing permissions and
|
|
15
15
|
limitations under the License.
|
|
16
16
|
"""
|
|
17
|
+
# ruff: noqa: F401, F403
|
|
17
18
|
|
|
18
19
|
from dara.components.graphs.components import *
|
|
19
20
|
from dara.components.graphs.definitions import *
|
|
@@ -17,9 +17,9 @@ limitations under the License.
|
|
|
17
17
|
|
|
18
18
|
from typing import Any, Dict, List, Optional, Union
|
|
19
19
|
|
|
20
|
-
from cai_causal_graph import CausalGraph, Skeleton
|
|
21
20
|
from pydantic import ConfigDict, SerializerFunctionWrapHandler, field_serializer
|
|
22
21
|
|
|
22
|
+
from cai_causal_graph import CausalGraph, Skeleton
|
|
23
23
|
from dara.components.graphs.definitions import (
|
|
24
24
|
DEFAULT_LEGENDS,
|
|
25
25
|
EditorMode,
|
|
@@ -17,9 +17,9 @@ limitations under the License.
|
|
|
17
17
|
|
|
18
18
|
from typing import Optional, Union
|
|
19
19
|
|
|
20
|
-
from cai_causal_graph import CausalGraph, Skeleton
|
|
21
20
|
from pydantic import field_validator, model_validator
|
|
22
21
|
|
|
22
|
+
from cai_causal_graph import CausalGraph, Skeleton
|
|
23
23
|
from dara.components.graphs.components.base_graph_component import BaseGraphComponent
|
|
24
24
|
from dara.components.graphs.definitions import EditorMode
|
|
25
25
|
from dara.components.graphs.graph_layout import PlanarLayout
|
|
@@ -17,8 +17,6 @@ limitations under the License.
|
|
|
17
17
|
|
|
18
18
|
from typing import Any, Dict, List, Optional, Union
|
|
19
19
|
|
|
20
|
-
from cai_causal_graph.graph_components import Node
|
|
21
|
-
from cai_causal_graph.type_definitions import EdgeConstraint as EdgeConstraintType
|
|
22
20
|
from fastapi.encoders import jsonable_encoder
|
|
23
21
|
from pydantic import (
|
|
24
22
|
ConfigDict,
|
|
@@ -28,6 +26,8 @@ from pydantic import (
|
|
|
28
26
|
)
|
|
29
27
|
from typing_extensions import TypedDict
|
|
30
28
|
|
|
29
|
+
from cai_causal_graph.graph_components import Node
|
|
30
|
+
from cai_causal_graph.type_definitions import EdgeConstraint as EdgeConstraintType
|
|
31
31
|
from dara.components.graphs.definitions import DEFAULT_LEGENDS, EditorMode, GraphLegend
|
|
32
32
|
from dara.components.graphs.graph_layout import (
|
|
33
33
|
GraphLayout,
|
|
@@ -64,7 +64,7 @@ class SpacerLegend(Legend):
|
|
|
64
64
|
:param label: Optional label to show in the legend
|
|
65
65
|
"""
|
|
66
66
|
|
|
67
|
-
type: Literal['spacer'] = Field(default='spacer', frozen=True)
|
|
67
|
+
type: Literal['spacer'] = Field(default='spacer', frozen=True) # type: ignore
|
|
68
68
|
label: Optional[str] = None
|
|
69
69
|
|
|
70
70
|
|
|
@@ -79,7 +79,7 @@ class EdgeLegend(Legend):
|
|
|
79
79
|
:param dash_array: Optional [stroke-dasharray](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray) SVG path property - line will be dashed if specified
|
|
80
80
|
"""
|
|
81
81
|
|
|
82
|
-
type: Literal['edge'] = Field(default='edge', frozen=True)
|
|
82
|
+
type: Literal['edge'] = Field(default='edge', frozen=True) # type: ignore
|
|
83
83
|
label: Optional[str] = None
|
|
84
84
|
arrow_type: Optional[ArrowType] = ArrowType.NORMAL
|
|
85
85
|
center_symbol: Optional[CenterSymbol] = CenterSymbol.NONE
|
|
@@ -96,7 +96,7 @@ class NodeLegend(Legend):
|
|
|
96
96
|
:param highlight_color: Optional color for the node symbol rim in the legend
|
|
97
97
|
"""
|
|
98
98
|
|
|
99
|
-
type: Literal['node'] = Field(default='node', frozen=True)
|
|
99
|
+
type: Literal['node'] = Field(default='node', frozen=True) # type: ignore
|
|
100
100
|
label: Optional[str] = None
|
|
101
101
|
color: Optional[str] = 'theme.blue4'
|
|
102
102
|
highlight_color: Optional[str] = 'theme.primary'
|
|
@@ -14,8 +14,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
14
14
|
See the License for the specific language governing permissions and
|
|
15
15
|
limitations under the License.
|
|
16
16
|
"""
|
|
17
|
+
# ruff: noqa: F401, F403
|
|
17
18
|
|
|
18
|
-
import dara.components.plotting.palettes as PALETTES
|
|
19
|
+
import dara.components.plotting.palettes as PALETTES
|
|
19
20
|
from dara.components.plotting.bokeh import *
|
|
20
21
|
from dara.components.plotting.matplotlib import *
|
|
21
22
|
from dara.components.plotting.plotly import *
|
|
@@ -15,6 +15,8 @@ See the License for the specific language governing permissions and
|
|
|
15
15
|
limitations under the License.
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
|
+
from typing import Union
|
|
19
|
+
|
|
18
20
|
from bokeh.models import CustomJS
|
|
19
21
|
from bokeh.plotting import figure
|
|
20
22
|
|
|
@@ -35,21 +37,23 @@ def figure_events(fig: figure):
|
|
|
35
37
|
:param
|
|
36
38
|
"""
|
|
37
39
|
|
|
38
|
-
def generate_event(args: dict =
|
|
40
|
+
def generate_event(args: Union[dict, None] = None):
|
|
39
41
|
"""
|
|
40
42
|
Generate a CustomJS event with the code, event name and arguments provided
|
|
41
43
|
|
|
42
44
|
:param args: The arguments to provide to the JS code
|
|
43
45
|
"""
|
|
46
|
+
if args is None:
|
|
47
|
+
args = {}
|
|
44
48
|
return CustomJS(
|
|
45
49
|
args=args,
|
|
46
50
|
code=f"""
|
|
47
|
-
function {event_name.replace(' ','')+'__'+fig.id}(cb_obj, args) {{
|
|
51
|
+
function {event_name.replace(' ', '') + '__' + fig.id}(cb_obj, args) {{
|
|
48
52
|
{code}
|
|
49
53
|
}}
|
|
50
54
|
|
|
51
55
|
document.dispatchEvent(
|
|
52
|
-
new CustomEvent("BOKEH_FIGURE_{event_name}_{fig.id}", {{ detail: {event_name.replace(' ','')+'__'+fig.id}(cb_obj, {{{','.join(args.keys())}}}) }})
|
|
56
|
+
new CustomEvent("BOKEH_FIGURE_{event_name}_{fig.id}", {{ detail: {event_name.replace(' ', '') + '__' + fig.id}(cb_obj, {{{','.join(args.keys())}}}) }})
|
|
53
57
|
)
|
|
54
58
|
""",
|
|
55
59
|
)
|
|
@@ -31,7 +31,7 @@ SETTINGS = {'THEME': light_theme}
|
|
|
31
31
|
|
|
32
32
|
# We need to set the default theme for plotly so that plotly express when setting traces is able to pick up dara theme colors
|
|
33
33
|
base_template = pio.templates['plotly']
|
|
34
|
-
dara_theme = base_template.layout.update(SETTINGS['THEME']['layout'])
|
|
34
|
+
dara_theme = base_template.layout.update(SETTINGS['THEME']['layout']) # type: ignore
|
|
35
35
|
dara_template = go.layout.Template(layout=dara_theme)
|
|
36
36
|
# Set the default theme for plotly
|
|
37
37
|
pio.templates['dara_theme'] = dara_template
|
|
@@ -133,7 +133,6 @@ class Plotly(StyledComponentInstance):
|
|
|
133
133
|
events: Optional[List[PlotlyEvent]] = None,
|
|
134
134
|
**kwargs,
|
|
135
135
|
):
|
|
136
|
-
|
|
137
136
|
if theme is None and figure is not None:
|
|
138
137
|
figure.update_layout(template=theme if theme is not None else SETTINGS['THEME'])
|
|
139
138
|
|
|
@@ -21,9 +21,11 @@ from dara.components.plotting.palettes import CategoricalDark10, CategoricalLigh
|
|
|
21
21
|
from dara.core.visual.themes import dark, light
|
|
22
22
|
|
|
23
23
|
light_colors = light.Light.colors
|
|
24
|
+
assert light_colors is not None
|
|
24
25
|
dark_colors = dark.Dark.colors
|
|
26
|
+
assert dark_colors is not None
|
|
25
27
|
|
|
26
|
-
light_theme = {
|
|
28
|
+
light_theme: Dict[str, Dict[str, Any]] = {
|
|
27
29
|
'layout': {
|
|
28
30
|
'paper_bgcolor': 'rgba(255,255,255,0)', # Set the background color of the plot
|
|
29
31
|
'plot_bgcolor': 'rgba(255,255,255,0)', # Set the background color of the plot area
|
|
@@ -81,9 +83,9 @@ light_theme = {
|
|
|
81
83
|
},
|
|
82
84
|
},
|
|
83
85
|
},
|
|
84
|
-
}
|
|
86
|
+
}
|
|
85
87
|
|
|
86
|
-
dark_theme = {
|
|
88
|
+
dark_theme: Dict[str, Dict[str, Any]] = {
|
|
87
89
|
'layout': {
|
|
88
90
|
'paper_bgcolor': 'rgba(255,255,255,0)', # Set the background color of the plot
|
|
89
91
|
'plot_bgcolor': 'rgba(255,255,255,0)', # Set the background color of the plot area
|
|
@@ -141,4 +143,4 @@ dark_theme = {
|
|
|
141
143
|
},
|
|
142
144
|
},
|
|
143
145
|
},
|
|
144
|
-
}
|
|
146
|
+
}
|
|
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
14
14
|
See the License for the specific language governing permissions and
|
|
15
15
|
limitations under the License.
|
|
16
16
|
"""
|
|
17
|
+
# ruff: noqa: F401, F403
|
|
17
18
|
|
|
18
19
|
from dara.components.smart.chat import Chat
|
|
19
20
|
from dara.components.smart.code_editor import CodeEditor, run_script
|
|
@@ -16,7 +16,7 @@ limitations under the License.
|
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
import ast
|
|
19
|
-
from typing import Any, List, Optional
|
|
19
|
+
from typing import Any, List, Optional, Union
|
|
20
20
|
|
|
21
21
|
DEFAULT_WHITELIST = [
|
|
22
22
|
# Inbuilts
|
|
@@ -63,9 +63,9 @@ class ScriptVisitor(ast.NodeVisitor):
|
|
|
63
63
|
self.declared_vars.append(target.id)
|
|
64
64
|
self.generic_visit(node)
|
|
65
65
|
|
|
66
|
-
def visit_Attribute(self,
|
|
67
|
-
self._check_dunder(
|
|
68
|
-
self.generic_visit(
|
|
66
|
+
def visit_Attribute(self, node):
|
|
67
|
+
self._check_dunder(node, node.attr)
|
|
68
|
+
self.generic_visit(node)
|
|
69
69
|
|
|
70
70
|
def visit_FunctionDef(self, node):
|
|
71
71
|
self._check_dunder(node, node.name)
|
|
@@ -106,7 +106,7 @@ class ScriptVisitor(ast.NodeVisitor):
|
|
|
106
106
|
raise SyntaxError(f'Imports are not allowed: {node.names}')
|
|
107
107
|
|
|
108
108
|
|
|
109
|
-
def run_script(script: str, injections: dict =
|
|
109
|
+
def run_script(script: str, injections: Union[dict, None] = None, whitelist: List[str] = DEFAULT_WHITELIST) -> Any:
|
|
110
110
|
"""
|
|
111
111
|
Run a given script in a "sandbox".
|
|
112
112
|
Disallows imports, most globals except whitelisted ones.
|
|
@@ -131,13 +131,13 @@ def run_script(script: str, injections: dict = {}, whitelist: List[str] = DEFAUL
|
|
|
131
131
|
|
|
132
132
|
"""
|
|
133
133
|
# Validate that the script is safe
|
|
134
|
+
if injections is None:
|
|
135
|
+
injections = {}
|
|
134
136
|
module: ast.Module = ast.parse(script)
|
|
135
137
|
visitor = ScriptVisitor([*whitelist, *injections.keys()])
|
|
136
138
|
visitor.visit(module)
|
|
137
139
|
|
|
138
140
|
# Run the script
|
|
139
141
|
loc: dict = {}
|
|
140
|
-
exec(
|
|
141
|
-
|
|
142
|
-
) # nosec B102 # this is unsafe but we make best effort with the above to make it as safe as possible
|
|
143
|
-
return loc.get('return_val', None)
|
|
142
|
+
exec(script, injections, loc) # nosec B102 # this is unsafe but we make best effort with the above to make it as safe as possible
|
|
143
|
+
return loc.get('return_val')
|
|
@@ -30,11 +30,11 @@ from dara.core.definitions import ComponentInstance, discover
|
|
|
30
30
|
from dara.core.interactivity import AnyDataVariable, DerivedVariable, Variable
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
def toggle_variable(ctx: UpdateVariable.Ctx):
|
|
33
|
+
def toggle_variable(ctx: UpdateVariable.Ctx): # type: ignore
|
|
34
34
|
return not ctx.inputs.old
|
|
35
35
|
|
|
36
36
|
|
|
37
|
-
def increment(ctx: UpdateVariable.Ctx):
|
|
37
|
+
def increment(ctx: UpdateVariable.Ctx): # type: ignore
|
|
38
38
|
return ctx.inputs.old + 1
|
|
39
39
|
|
|
40
40
|
|
|
@@ -17,7 +17,7 @@ limitations under the License.
|
|
|
17
17
|
|
|
18
18
|
import re
|
|
19
19
|
from datetime import datetime, timezone
|
|
20
|
-
from typing import Any, List, Optional, Union
|
|
20
|
+
from typing import Any, List, Optional, Union, cast
|
|
21
21
|
|
|
22
22
|
import numpy
|
|
23
23
|
from pandas import DataFrame, Series
|
|
@@ -83,7 +83,7 @@ def isnumber(*values: Union[str, float]):
|
|
|
83
83
|
return True
|
|
84
84
|
|
|
85
85
|
|
|
86
|
-
def apply_range_filter(range_filter: str, column: Series) -> Optional['Series
|
|
86
|
+
def apply_range_filter(range_filter: str, column: Series) -> Optional['Series']:
|
|
87
87
|
"""
|
|
88
88
|
Apply a 'range' filter on a column
|
|
89
89
|
|
|
@@ -126,7 +126,7 @@ def apply_range_filter(range_filter: str, column: Series) -> Optional['Series[bo
|
|
|
126
126
|
return final_range_filter
|
|
127
127
|
|
|
128
128
|
|
|
129
|
-
def apply_values_filter(values_filter: str, column: Series, col_type: ColumnType) -> Optional['Series
|
|
129
|
+
def apply_values_filter(values_filter: str, column: Series, col_type: ColumnType) -> Optional['Series']:
|
|
130
130
|
"""
|
|
131
131
|
Apply a 'values' filter on a column
|
|
132
132
|
|
|
@@ -177,7 +177,7 @@ def parseISO(date: str) -> numpy.datetime64:
|
|
|
177
177
|
return numpy.datetime64(d)
|
|
178
178
|
|
|
179
179
|
|
|
180
|
-
def apply_date_filter(from_date: str, to_date: str, column: 'Series
|
|
180
|
+
def apply_date_filter(from_date: str, to_date: str, column: 'Series') -> Optional['Series']:
|
|
181
181
|
"""
|
|
182
182
|
Apply a 'from_date' and 'to_date' filters to a column
|
|
183
183
|
|
|
@@ -189,12 +189,12 @@ def apply_date_filter(from_date: str, to_date: str, column: 'Series[numpy.dateti
|
|
|
189
189
|
|
|
190
190
|
if from_date != '':
|
|
191
191
|
from_timestamp = parseISO(from_date)
|
|
192
|
-
from_date_filter = column.gt(from_timestamp)
|
|
192
|
+
from_date_filter = column.gt(from_timestamp) # type: ignore
|
|
193
193
|
final_date_filter = from_date_filter
|
|
194
194
|
|
|
195
195
|
if to_date != '':
|
|
196
196
|
to_timestamp = parseISO(to_date)
|
|
197
|
-
to_date_filter = column.lt(to_timestamp)
|
|
197
|
+
to_date_filter = column.lt(to_timestamp) # type: ignore
|
|
198
198
|
final_date_filter = final_date_filter & to_date_filter if final_date_filter is not None else to_date_filter
|
|
199
199
|
|
|
200
200
|
return final_date_filter
|
|
@@ -212,9 +212,9 @@ def apply_filters(variable_filters: List[FilterInstance], data: DataFrame) -> Da
|
|
|
212
212
|
for fil in variable_filters:
|
|
213
213
|
var = fil['column']
|
|
214
214
|
|
|
215
|
-
values_filter: Optional['Series
|
|
216
|
-
range_filter: Optional['Series
|
|
217
|
-
date_filter: Optional['Series
|
|
215
|
+
values_filter: Optional['Series'] = None
|
|
216
|
+
range_filter: Optional['Series'] = None
|
|
217
|
+
date_filter: Optional['Series'] = None
|
|
218
218
|
|
|
219
219
|
if var is None or var.strip() == '':
|
|
220
220
|
continue
|
|
@@ -223,14 +223,14 @@ def apply_filters(variable_filters: List[FilterInstance], data: DataFrame) -> Da
|
|
|
223
223
|
|
|
224
224
|
# Range filter
|
|
225
225
|
if fil['range'] != '' and 'range' in ALLOWED_FILTERS[column_type]:
|
|
226
|
-
range_filter = apply_range_filter(fil['range'], data[var])
|
|
226
|
+
range_filter = apply_range_filter(fil['range'], cast(Series, data[var]))
|
|
227
227
|
|
|
228
228
|
# Values filter
|
|
229
229
|
if fil['values'] != '' and 'values' in ALLOWED_FILTERS[column_type]:
|
|
230
|
-
values_filter = apply_values_filter(fil['values'], data[var], column_type)
|
|
230
|
+
values_filter = apply_values_filter(fil['values'], cast(Series, data[var]), column_type)
|
|
231
231
|
|
|
232
232
|
if (fil['from_date'] != '' or fil['to_date'] != '') and ('from_date' in ALLOWED_FILTERS[column_type]):
|
|
233
|
-
date_filter = apply_date_filter(fil['from_date'], fil['to_date'], data[var])
|
|
233
|
+
date_filter = apply_date_filter(fil['from_date'], fil['to_date'], cast(Series, data[var]))
|
|
234
234
|
|
|
235
235
|
# OR all of the defined filters together
|
|
236
236
|
final_filter = None
|
|
@@ -242,7 +242,7 @@ def apply_filters(variable_filters: List[FilterInstance], data: DataFrame) -> Da
|
|
|
242
242
|
if final_filter is not None:
|
|
243
243
|
output = output[final_filter]
|
|
244
244
|
|
|
245
|
-
return output
|
|
245
|
+
return cast(DataFrame, output)
|
|
246
246
|
|
|
247
247
|
|
|
248
248
|
def get_filter_stats(input_data: DataFrame, output_data: DataFrame, filters: List[FilterInstance]) -> FilterStats:
|
|
@@ -15,9 +15,11 @@ See the License for the specific language governing permissions and
|
|
|
15
15
|
limitations under the License.
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
|
+
from typing import cast
|
|
19
|
+
|
|
18
20
|
import numpy
|
|
19
21
|
from bokeh.plotting import figure
|
|
20
|
-
from pandas import DataFrame
|
|
22
|
+
from pandas import DataFrame, Series
|
|
21
23
|
from scipy.stats import gaussian_kde
|
|
22
24
|
|
|
23
25
|
from dara.components.common import Stack, Text
|
|
@@ -43,9 +45,9 @@ def _plot_x_numerical(dataset: DataFrame, x: str, **kwargs):
|
|
|
43
45
|
sizing_mode='stretch_both',
|
|
44
46
|
**kwargs,
|
|
45
47
|
)
|
|
46
|
-
p.toolbar.logo = None
|
|
48
|
+
p.toolbar.logo = None # type: ignore
|
|
47
49
|
|
|
48
|
-
pdf = gaussian_kde(df[x].dropna())
|
|
50
|
+
pdf = gaussian_kde(cast(DataFrame, df[x]).dropna())
|
|
49
51
|
y = pdf(lin)
|
|
50
52
|
p.line(
|
|
51
53
|
lin,
|
|
@@ -63,10 +65,10 @@ def _plot_x_categorical(dataset: DataFrame, x: str, **kwargs):
|
|
|
63
65
|
df = dataset.copy()
|
|
64
66
|
df = df[[x]].dropna().astype(str)
|
|
65
67
|
|
|
66
|
-
values_counts = df[x].value_counts()
|
|
68
|
+
values_counts = cast(Series, df[x]).value_counts()
|
|
67
69
|
|
|
68
70
|
p = figure(
|
|
69
|
-
x_range=sorted(list(df[x].unique())),
|
|
71
|
+
x_range=sorted(list(cast(Series, df[x]).unique())),
|
|
70
72
|
title=f'Histogram - {x}',
|
|
71
73
|
toolbar_location=None,
|
|
72
74
|
tools='',
|
|
@@ -76,7 +78,7 @@ def _plot_x_categorical(dataset: DataFrame, x: str, **kwargs):
|
|
|
76
78
|
|
|
77
79
|
p.vbar(x=values_counts.index, top=values_counts.values, width=0.5, color=BLUE)
|
|
78
80
|
|
|
79
|
-
p.toolbar.logo = None
|
|
81
|
+
p.toolbar.logo = None # type: ignore
|
|
80
82
|
|
|
81
83
|
p.xgrid.grid_line_color = None
|
|
82
84
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dara-components
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.18.1
|
|
4
4
|
Summary: Components for the Dara Framework
|
|
5
5
|
Home-page: https://dara.causalens.com/
|
|
6
6
|
License: Apache-2.0
|
|
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
16
16
|
Requires-Dist: bokeh (>=3.1.0,<3.2.0)
|
|
17
17
|
Requires-Dist: cai-causal-graph (>=0.3.6)
|
|
18
18
|
Requires-Dist: certifi (>=2024.7.4)
|
|
19
|
-
Requires-Dist: dara-core (==1.
|
|
19
|
+
Requires-Dist: dara-core (==1.18.1)
|
|
20
20
|
Requires-Dist: dill (>=0.3.0,<0.4.0)
|
|
21
21
|
Requires-Dist: matplotlib (>=2.0.0)
|
|
22
22
|
Requires-Dist: pandas (>=1.1.0,<3.0.0)
|
|
@@ -28,7 +28,7 @@ Description-Content-Type: text/markdown
|
|
|
28
28
|
|
|
29
29
|
# Dara Components
|
|
30
30
|
|
|
31
|
-
<img src="https://github.com/causalens/dara/blob/v1.
|
|
31
|
+
<img src="https://github.com/causalens/dara/blob/v1.18.1/img/dara_light.svg?raw=true">
|
|
32
32
|
|
|
33
33
|

|
|
34
34
|
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
dara/components/__init__.py,sha256=
|
|
2
|
-
dara/components/common/__init__.py,sha256=
|
|
1
|
+
dara/components/__init__.py,sha256=JjN7EAGU-tM7I7YHyKRAuZlcbpJFcVcFaGit5StehDs,1372
|
|
2
|
+
dara/components/common/__init__.py,sha256=mQMUawBq-bLnj08bSfaPdtUd_kQoHmQ651IAMfXbSbk,3968
|
|
3
3
|
dara/components/common/accordion.py,sha256=dDOTktGpy4lp16OfXWBK8Gr2gD6Njdipke7Ycqk6Hho,9584
|
|
4
4
|
dara/components/common/anchor.py,sha256=pcQNFG7xnf12jQnGROgyLlvwmvlsVGo8olxQVu3fXMI,2791
|
|
5
|
-
dara/components/common/base_component.py,sha256=
|
|
5
|
+
dara/components/common/base_component.py,sha256=rUFmLbe8DHL8S_ey5h93zuIP62cK26zknWwUF5eqp9I,4619
|
|
6
6
|
dara/components/common/bullet_list.py,sha256=yk4lFAn6Bzx9UByp27P7ioVidAfsTPl5d4hIkG7MRkQ,1433
|
|
7
|
-
dara/components/common/button.py,sha256=
|
|
7
|
+
dara/components/common/button.py,sha256=Qe1gy5aCfZRrk6GzRSPfPsoT9BbB3-HliksK8vv6yo0,4747
|
|
8
8
|
dara/components/common/button_bar.py,sha256=pQhcNusM5tlYZVDOTxPqyX5__XUZb7qtNBNHmaIGdlI,3842
|
|
9
9
|
dara/components/common/card.py,sha256=ojH4eoej7ZhhmqWv0CZtSeh5IhU94eakoMdPoIB5IoA,2105
|
|
10
10
|
dara/components/common/carousel.py,sha256=ef0Dyqmwg1C4nPCvqb5P2jksAp8a7_492YvLl8duApg,5386
|
|
@@ -12,17 +12,17 @@ dara/components/common/checkbox_group.py,sha256=7FrAKMfR5FM7HkeexO16q3aL3RlBEIHt
|
|
|
12
12
|
dara/components/common/code.py,sha256=SwdZMU-vKvGNfOZPxFSkeHxsMLNkI5Oh1XTA2J0ItGw,2326
|
|
13
13
|
dara/components/common/component_select_list.py,sha256=1Qf1odxsG7r1x_DURbtOjIHLoHi40LL4xH8pYpzQevw,2652
|
|
14
14
|
dara/components/common/datepicker.py,sha256=YGPm_EOrYb6ofWHgya0-DkYRWiD2V1Ln2l7N-ZNgyzM,3683
|
|
15
|
-
dara/components/common/dropzone.py,sha256=
|
|
15
|
+
dara/components/common/dropzone.py,sha256=t2iceH3eun7JzQ9rtoU-L4qi1-NbZ6CO4X23c8aVlnk,4202
|
|
16
16
|
dara/components/common/form.py,sha256=Cczl5BlOIlLPvHvS_g98RxBvJx9jH17HaCo4DhAEvc8,3882
|
|
17
17
|
dara/components/common/form_page.py,sha256=6O5JvkxDeEWzzoIhB9xMvSLIiIWsBJvcaT5RSOAKIB0,1890
|
|
18
18
|
dara/components/common/grid.py,sha256=2x-yDCze8BgGI4FRp6HX5WR7ytK2KWKckBs8W7VhjrM,10243
|
|
19
|
-
dara/components/common/heading.py,sha256=
|
|
19
|
+
dara/components/common/heading.py,sha256=U0x9SDd-sg0bS0wVpe7dBI-qScnxQuxqyX-WaBE6PAY,2525
|
|
20
20
|
dara/components/common/html_raw.py,sha256=-Atn6TejBCDkNQIa89KBOB2h2ntnjolU3HphPuFE6t4,1103
|
|
21
21
|
dara/components/common/icon.py,sha256=RRKrq63Lp4eADKM4Axl4MpTwjwUTUdfluX3-gULMDkw,1948
|
|
22
|
-
dara/components/common/if_cmp.py,sha256
|
|
22
|
+
dara/components/common/if_cmp.py,sha256=--N3rTOyuDgmtL82Y6-WFbEaYXBCiUR7sGHxu0uZGfs,3939
|
|
23
23
|
dara/components/common/image.py,sha256=ErDZ4Fv0_OzjbuqhNDDL_Nz1Q9Dq4wM7Q5aYJslCghY,2272
|
|
24
24
|
dara/components/common/input.py,sha256=kfa3RIMmpzcmZuDgRQySGXzdr7LHm-aQfLHLHPFYKCU,2057
|
|
25
|
-
dara/components/common/label.py,sha256=
|
|
25
|
+
dara/components/common/label.py,sha256=1r58lBZVEudLybaEY-GQ4TNVtQrEyy_rzJhDQva29Pc,2528
|
|
26
26
|
dara/components/common/markdown.py,sha256=4-M_lyj820gzxRisVTA7cCG-91NzWPW2vZbC7qwRmkQ,1706
|
|
27
27
|
dara/components/common/modal.py,sha256=x47WgB-n2Zq-C_0UhewL4KaAkTnQDT8TW2bSRm6gN2U,1526
|
|
28
28
|
dara/components/common/overlay.py,sha256=TNf4a77f0FxiOC4sj4HPM8tjLp0r046EDS-jVAtgEFw,1836
|
|
@@ -30,37 +30,37 @@ dara/components/common/paragraph.py,sha256=nOw-ocgjVwPj_QP8CmSHs2y3ghStTmOPGlqWx
|
|
|
30
30
|
dara/components/common/progress_bar.py,sha256=5hkf63t4__KaN85AlbYrzKQpBzRlvjZ3VmGXRFWQRBY,1921
|
|
31
31
|
dara/components/common/radio_group.py,sha256=xePEflS_A2svCrpU25OBMMsyeC4nZCn_1y83GJT5Sfc,3761
|
|
32
32
|
dara/components/common/select.py,sha256=wgRt3TjTi53X2HqlGlsf-yMuvU7aD9r5BcNHddieDr8,6823
|
|
33
|
-
dara/components/common/slider.py,sha256=
|
|
33
|
+
dara/components/common/slider.py,sha256=VMneJKQMr02dn2Z-_aud2-NcPDxAv9VWLUgdgwr09m4,6527
|
|
34
34
|
dara/components/common/spacer.py,sha256=ZRSl_fLntnumalaL41FYpBKDxOUgWgndkkLdDLl8KvI,2702
|
|
35
|
-
dara/components/common/stack.py,sha256=
|
|
35
|
+
dara/components/common/stack.py,sha256=FLw0IbQpW7l9A6LDS_KPCeQP0J7QKGYhVZ1RhAjBjpE,5562
|
|
36
36
|
dara/components/common/switch.py,sha256=KjFUFT-1XHyJoJYkJLeEBgUb0fTArsFuWfowniTgl3E,1594
|
|
37
37
|
dara/components/common/tabbed_card.py,sha256=zftir9hSj_l_dx2dPYis0NWy5q290sdg3Q1Nx8RvFbg,2344
|
|
38
|
-
dara/components/common/table.py,sha256=
|
|
39
|
-
dara/components/common/text.py,sha256=
|
|
38
|
+
dara/components/common/table.py,sha256=P-qXaoFHMM69FiMH9T2Yeg0y0ZTx-89_JGj1Ls2_KbQ,24571
|
|
39
|
+
dara/components/common/text.py,sha256=bYgX_IhSLPa-KuWbcCSdrNgAL6MhYQRpCNtV5octUbQ,1990
|
|
40
40
|
dara/components/common/textarea.py,sha256=F8dmyinylAjjXMhNwfiWInrCFuAnWuCPTsKKiEUkmOw,2106
|
|
41
|
-
dara/components/common/time_utils.py,sha256=
|
|
42
|
-
dara/components/common/tooltip.py,sha256=
|
|
43
|
-
dara/components/common/utils.py,sha256=
|
|
44
|
-
dara/components/graphs/__init__.py,sha256=
|
|
41
|
+
dara/components/common/time_utils.py,sha256=UbAws5HBptJ-xH-m4QRDDET-9leOQu9WdywmExBuqIc,1746
|
|
42
|
+
dara/components/common/tooltip.py,sha256=asAuario9NHdK_Whry9A2nzy9vZDf4UFwOTG6XIfA50,3284
|
|
43
|
+
dara/components/common/utils.py,sha256=grhO9Mw2y0F57cRg-rTIlMGYAaVmPtfJNXJjBYSj924,5512
|
|
44
|
+
dara/components/graphs/__init__.py,sha256=xN6ibodsLvO_ATXASRgwfzCLraoWqdKuaGovWRaGxtk,750
|
|
45
45
|
dara/components/graphs/components/__init__.py,sha256=GdWwL5spSsATOU57EmMqOf6t7az1rP5S3Djd0eyL9As,1007
|
|
46
|
-
dara/components/graphs/components/base_graph_component.py,sha256
|
|
47
|
-
dara/components/graphs/components/causal_graph_viewer.py,sha256=
|
|
48
|
-
dara/components/graphs/components/edge_encoder.py,sha256=
|
|
46
|
+
dara/components/graphs/components/base_graph_component.py,sha256=-joDvAQ0Ybvj6fiDevGlGNysMlbKpOJlHLbX7iWDbFs,4430
|
|
47
|
+
dara/components/graphs/components/causal_graph_viewer.py,sha256=oQpvW_Vb9xE-gAF7JFOpPU_4kukXSPcZZ7BBLqX3y0Y,12439
|
|
48
|
+
dara/components/graphs/components/edge_encoder.py,sha256=kS5gl7FDy7HAn0pclFGqRifjmr2uUDMaBq-kxy86kYM,6929
|
|
49
49
|
dara/components/graphs/components/node_hierarchy_builder.py,sha256=OSA0OpEiTlnMDmte5bVq-o4l8iZoH_ADY9fuyHnLMZY,4366
|
|
50
|
-
dara/components/graphs/definitions.py,sha256=
|
|
50
|
+
dara/components/graphs/definitions.py,sha256=M46KV4VSNDnwAcfYoJnx71B_EZIuDAIRG2_mD9LtwOA,5316
|
|
51
51
|
dara/components/graphs/graph_layout.py,sha256=Qb3zdcpolDQi_hFHAc2wGELUCvyeVfOqTOiVK-8uvW8,13852
|
|
52
|
-
dara/components/plotting/__init__.py,sha256=
|
|
52
|
+
dara/components/plotting/__init__.py,sha256=u-wb5iAJBzDLEiXjaMuFy1rLAP_QzfnOvm1ZqMXsgac,797
|
|
53
53
|
dara/components/plotting/bokeh/__init__.py,sha256=GpnbgTI-2XWqBDqLbkHQ73eAEth-h_k0nKqP1ixgJ8I,889
|
|
54
|
-
dara/components/plotting/bokeh/bokeh.py,sha256=
|
|
54
|
+
dara/components/plotting/bokeh/bokeh.py,sha256=jNfXkorF3SNJx40RA1MGpJ2Kypx8SEPV6wpF5NDjGP8,3107
|
|
55
55
|
dara/components/plotting/bokeh/themes.py,sha256=ulL5GfyJ5WXCErMfraBgskyu7GJf-zZxw9WQQDlmsrE,3746
|
|
56
|
-
dara/components/plotting/bokeh/utils.py,sha256=
|
|
56
|
+
dara/components/plotting/bokeh/utils.py,sha256=eQ4l3LYY8c2SlbkT6PUbUrjWoj_xwa3iq7O4bIPbEpI,2035
|
|
57
57
|
dara/components/plotting/matplotlib/__init__.py,sha256=XNvSBKg8ML2IhMm9fJ5-OOHAIX3sGs_q10MaaK2v0EI,681
|
|
58
58
|
dara/components/plotting/matplotlib/matplotlib.py,sha256=VUeOJZ6bTVrsJezmGqUJdezi6Vp53voB9BBWAGfTtrQ,1851
|
|
59
59
|
dara/components/plotting/palettes.py,sha256=dAFOLzDsb5Cq-ffhegLsElaJueGzCJ7Px6J7frMe_YY,8001
|
|
60
60
|
dara/components/plotting/plotly/__init__.py,sha256=vbFmz0BhPw6LktZxtVc4iv5eXRlc-5OqhBKOleUVaBw,835
|
|
61
|
-
dara/components/plotting/plotly/plotly.py,sha256=
|
|
62
|
-
dara/components/plotting/plotly/themes.py,sha256=
|
|
63
|
-
dara/components/smart/__init__.py,sha256=
|
|
61
|
+
dara/components/plotting/plotly/plotly.py,sha256=q2xe2RmxDhtQZdmUgfFkIGYiSFj-eIzGFigDwukTHkw,4832
|
|
62
|
+
dara/components/plotting/plotly/themes.py,sha256=i7jpJOfhHVdyJAzTTcDoukUgZNPpH6atXrsZ8s3_dUw,4459
|
|
63
|
+
dara/components/smart/__init__.py,sha256=PzggApMAClCo62aexuZ60MXWJclYfeuXwyZUrYVHOeM,1171
|
|
64
64
|
dara/components/smart/chat/__init__.py,sha256=1J6s1YYBuDYg7Vft5vhMzkGHp2vjqUWy3BZQB4Es6mM,796
|
|
65
65
|
dara/components/smart/chat/chat.py,sha256=PecZyXzKTBrnIGGuJNyCdWVu--Ig68CFFIrkbaNciiE,3117
|
|
66
66
|
dara/components/smart/chat/config.py,sha256=kXm_EkfE7mL-8sseZMGSqbXBTWwdIXozv37v-k-B8fg,590
|
|
@@ -68,19 +68,19 @@ dara/components/smart/chat/endpoints.py,sha256=knILdBHrb2zEtL2r6-3OumSPZKdQ_FJLk
|
|
|
68
68
|
dara/components/smart/chat/types.py,sha256=hSV6Va-8gueYJpXxbQ2UQeFMP1RBKW4bUcNupXJkYss,1351
|
|
69
69
|
dara/components/smart/code_editor/__init__.py,sha256=U568YcqDyS8lC2qzf_9TrB62er-UibnbT6IeAiDSaME,749
|
|
70
70
|
dara/components/smart/code_editor/code_editor.py,sha256=TK8_k1ydWTnXPALujNsG5Eh_xrfWXWyYKq5MVquxpYQ,1281
|
|
71
|
-
dara/components/smart/code_editor/util.py,sha256=
|
|
71
|
+
dara/components/smart/code_editor/util.py,sha256=0Qu5AJVcCzaMaPblsw6BqOopA8DeWn2YPDPOf9CKmDc,4528
|
|
72
72
|
dara/components/smart/data_slicer/__init__.py,sha256=_lIrZEKjZXxGDxZJ9t5kfeahMB_VbeOJYZxus1TKOyQ,914
|
|
73
|
-
dara/components/smart/data_slicer/data_slicer.py,sha256=
|
|
74
|
-
dara/components/smart/data_slicer/data_slicer_modal.py,sha256=
|
|
73
|
+
dara/components/smart/data_slicer/data_slicer.py,sha256=quLO0_VglaaT7p4VmK5-M-j2Q7mJcek2IrnwPSN7Fsw,7506
|
|
74
|
+
dara/components/smart/data_slicer/data_slicer_modal.py,sha256=Zr8bCVqT5xp9AQS7VBSWRTPGYIkAuOjMuSmQIOnimoo,4152
|
|
75
75
|
dara/components/smart/data_slicer/extension/data_slicer_filter.py,sha256=JfTzJ1HqS9u1RdmkwBGvoDB6wPKYVMfPAXUlUmysK48,1651
|
|
76
76
|
dara/components/smart/data_slicer/extension/filter_status_button.py,sha256=02CgqHEBgkZg1E9v9HGrnRYvEiMNhYpajyOwGuPNV1M,1345
|
|
77
|
-
dara/components/smart/data_slicer/utils/core.py,sha256=
|
|
77
|
+
dara/components/smart/data_slicer/utils/core.py,sha256=4M_HA8oBzAkHklHgmaJ-qiKA3if37hUe6dB5gse2j1E,8665
|
|
78
78
|
dara/components/smart/data_slicer/utils/data_preview.py,sha256=OAphjMrm3F76XmJ09X7sZSeOeKqGJFwN5ooo3qcyrG4,1722
|
|
79
|
-
dara/components/smart/data_slicer/utils/plotting.py,sha256=
|
|
79
|
+
dara/components/smart/data_slicer/utils/plotting.py,sha256=TB00576kbA6y1eRuZBe09UAcZmluY4iJsKmYnXZ3hWQ,3389
|
|
80
80
|
dara/components/smart/hierarchy.py,sha256=9-QzEtbvP-arejhjsgl4Y5o5KHHzg6H1IGmwrX63450,2905
|
|
81
81
|
dara/components/umd/dara.components.umd.js,sha256=9jY7pRiap8EWKwkx1j--H-3QAagmTuEEqIPZSHXikQM,18325165
|
|
82
82
|
dara/components/umd/style.css,sha256=Qm0_kcxXBDoXvvPTc7YCttkl1zMFifdcp-KufTunPNY,162729
|
|
83
|
-
dara_components-1.
|
|
84
|
-
dara_components-1.
|
|
85
|
-
dara_components-1.
|
|
86
|
-
dara_components-1.
|
|
83
|
+
dara_components-1.18.1.dist-info/LICENSE,sha256=r9u1w2RvpLMV6YjuXHIKXRBKzia3fx_roPwboGcLqCc,10944
|
|
84
|
+
dara_components-1.18.1.dist-info/METADATA,sha256=9k8ZQgdWL8Y94tNglMhQXirLjyNCz0-KvnscgcZD-tc,2743
|
|
85
|
+
dara_components-1.18.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
86
|
+
dara_components-1.18.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|