diffract-core 0.2.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.
Files changed (193) hide show
  1. diffract/__init__.py +52 -0
  2. diffract/configs/fast_speed_without_disk.ini +48 -0
  3. diffract/configs/hybrid.ini +74 -0
  4. diffract/configs/sqlite.ini +62 -0
  5. diffract/containers.py +405 -0
  6. diffract/core/__init__.py +23 -0
  7. diffract/core/cache/__init__.py +24 -0
  8. diffract/core/cache/containers.py +93 -0
  9. diffract/core/cache/interface.py +117 -0
  10. diffract/core/cache/redis_manager.py +464 -0
  11. diffract/core/cache/simple_manager.py +478 -0
  12. diffract/core/compute/__init__.py +46 -0
  13. diffract/core/compute/config.py +48 -0
  14. diffract/core/compute/containers.py +81 -0
  15. diffract/core/compute/decorator.py +125 -0
  16. diffract/core/compute/exceptions.py +31 -0
  17. diffract/core/compute/execution/__init__.py +14 -0
  18. diffract/core/compute/execution/_types.py +70 -0
  19. diffract/core/compute/execution/aggregation.py +74 -0
  20. diffract/core/compute/execution/aggregation_runner.py +362 -0
  21. diffract/core/compute/execution/enums.py +38 -0
  22. diffract/core/compute/execution/executor.py +125 -0
  23. diffract/core/compute/execution/parameter_runner.py +125 -0
  24. diffract/core/compute/execution/restrictions.py +61 -0
  25. diffract/core/compute/execution/strategy.py +118 -0
  26. diffract/core/compute/execution/utils.py +112 -0
  27. diffract/core/compute/extensions/__init__.py +0 -0
  28. diffract/core/compute/extensions/power_law.py +1051 -0
  29. diffract/core/compute/extensions/rmt.py +150 -0
  30. diffract/core/compute/extensions/utils.py +36 -0
  31. diffract/core/compute/field_signature.py +183 -0
  32. diffract/core/compute/kernels/__init__.py +48 -0
  33. diffract/core/compute/kernels/alignment.py +106 -0
  34. diffract/core/compute/kernels/heavy_tailed.py +394 -0
  35. diffract/core/compute/kernels/marchenko_pastur.py +99 -0
  36. diffract/core/compute/kernels/mat_decomposition.py +101 -0
  37. diffract/core/compute/kernels/mat_properties.py +53 -0
  38. diffract/core/compute/kernels/model_quality.py +27 -0
  39. diffract/core/compute/kernels/norms.py +88 -0
  40. diffract/core/compute/kernels/ranks.py +35 -0
  41. diffract/core/compute/kernels/tracy_widom.py +36 -0
  42. diffract/core/compute/metadata.py +67 -0
  43. diffract/core/compute/registry.py +485 -0
  44. diffract/core/constants.py +147 -0
  45. diffract/core/data/__init__.py +32 -0
  46. diffract/core/data/interface.py +304 -0
  47. diffract/core/data/metadata/__init__.py +15 -0
  48. diffract/core/data/metadata/containers.py +60 -0
  49. diffract/core/data/metadata/interface.py +208 -0
  50. diffract/core/data/metadata/sqlite_index.py +604 -0
  51. diffract/core/data/nn/__init__.py +43 -0
  52. diffract/core/data/nn/aggregates/__init__.py +35 -0
  53. diffract/core/data/nn/aggregates/metadata.py +96 -0
  54. diffract/core/data/nn/aggregates/proxy.py +57 -0
  55. diffract/core/data/nn/aggregates/repository.py +87 -0
  56. diffract/core/data/nn/aggregates/view.py +307 -0
  57. diffract/core/data/nn/containers.py +86 -0
  58. diffract/core/data/nn/extractors/__init__.py +49 -0
  59. diffract/core/data/nn/extractors/base.py +300 -0
  60. diffract/core/data/nn/extractors/factory.py +234 -0
  61. diffract/core/data/nn/extractors/flax.py +112 -0
  62. diffract/core/data/nn/extractors/handlers/__init__.py +39 -0
  63. diffract/core/data/nn/extractors/handlers/base.py +110 -0
  64. diffract/core/data/nn/extractors/handlers/flax_handlers.py +71 -0
  65. diffract/core/data/nn/extractors/handlers/numpy_handlers.py +63 -0
  66. diffract/core/data/nn/extractors/handlers/onnx_handlers.py +67 -0
  67. diffract/core/data/nn/extractors/handlers/tensorflow_handlers.py +82 -0
  68. diffract/core/data/nn/extractors/handlers/torch_handlers.py +124 -0
  69. diffract/core/data/nn/extractors/interface.py +56 -0
  70. diffract/core/data/nn/extractors/numpy.py +94 -0
  71. diffract/core/data/nn/extractors/onnx.py +108 -0
  72. diffract/core/data/nn/extractors/tensorflow.py +99 -0
  73. diffract/core/data/nn/extractors/torch.py +204 -0
  74. diffract/core/data/nn/params/__init__.py +27 -0
  75. diffract/core/data/nn/params/interface.py +402 -0
  76. diffract/core/data/nn/params/metadata.py +110 -0
  77. diffract/core/data/nn/params/proxy.py +93 -0
  78. diffract/core/data/nn/params/repository.py +45 -0
  79. diffract/core/data/nn/params/schema.py +82 -0
  80. diffract/core/data/nn/params/view.py +393 -0
  81. diffract/core/data/proxy.py +246 -0
  82. diffract/core/data/repository.py +227 -0
  83. diffract/core/data/utils.py +33 -0
  84. diffract/core/data/view.py +389 -0
  85. diffract/core/export/__init__.py +27 -0
  86. diffract/core/export/containers.py +47 -0
  87. diffract/core/export/exporters.py +191 -0
  88. diffract/core/export/formatters/__init__.py +23 -0
  89. diffract/core/export/formatters/base.py +68 -0
  90. diffract/core/export/formatters/dict_formatter.py +38 -0
  91. diffract/core/export/formatters/json_formatter.py +58 -0
  92. diffract/core/export/formatters/list_formatter.py +41 -0
  93. diffract/core/export/formatters/pandas_formatter.py +86 -0
  94. diffract/core/export/formatters/polars_formatter.py +86 -0
  95. diffract/core/export/formatters/registry.py +84 -0
  96. diffract/core/export/interface.py +105 -0
  97. diffract/core/parallel/__init__.py +21 -0
  98. diffract/core/parallel/containers.py +57 -0
  99. diffract/core/parallel/execution.py +91 -0
  100. diffract/core/parallel/runtime.py +91 -0
  101. diffract/core/storage/__init__.py +35 -0
  102. diffract/core/storage/base_manager.py +330 -0
  103. diffract/core/storage/containers.py +122 -0
  104. diffract/core/storage/hdf5_manager.py +856 -0
  105. diffract/core/storage/hybrid_manager.py +218 -0
  106. diffract/core/storage/interface.py +222 -0
  107. diffract/core/storage/metadata.py +89 -0
  108. diffract/core/storage/ram_manager.py +159 -0
  109. diffract/core/storage/sqlite_manager.py +1062 -0
  110. diffract/core/storage/zarr_manager.py +992 -0
  111. diffract/core/utils/__init__.py +45 -0
  112. diffract/core/utils/build.py +46 -0
  113. diffract/core/utils/exceptions.py +11 -0
  114. diffract/core/utils/hashing.py +90 -0
  115. diffract/core/utils/imports.py +292 -0
  116. diffract/core/utils/math.py +15 -0
  117. diffract/py.typed +0 -0
  118. diffract/session/__init__.py +24 -0
  119. diffract/session/errors.py +17 -0
  120. diffract/session/field_cache.py +216 -0
  121. diffract/session/namespaces/__init__.py +15 -0
  122. diffract/session/namespaces/compute/__init__.py +219 -0
  123. diffract/session/namespaces/models/__init__.py +282 -0
  124. diffract/session/namespaces/models/parameters/__init__.py +133 -0
  125. diffract/session/namespaces/models/parameters/meta_patcher.py +167 -0
  126. diffract/session/namespaces/results/__init__.py +378 -0
  127. diffract/session/namespaces/results/eraser.py +129 -0
  128. diffract/session/namespaces/results/injester.py +249 -0
  129. diffract/session/namespaces/utils/__init__.py +141 -0
  130. diffract/session/namespaces/utils/merger.py +295 -0
  131. diffract/session/namespaces/viz/__init__.py +91 -0
  132. diffract/session/namespaces/viz/_utils.py +14 -0
  133. diffract/session/namespaces/viz/box.py +207 -0
  134. diffract/session/namespaces/viz/grid.py +160 -0
  135. diffract/session/namespaces/viz/heatmap.py +164 -0
  136. diffract/session/namespaces/viz/scatter.py +202 -0
  137. diffract/session/namespaces/viz/sparkline.py +270 -0
  138. diffract/session/namespaces/viz/violin.py +212 -0
  139. diffract/session/session.py +260 -0
  140. diffract/session/utils.py +81 -0
  141. diffract/viz/__init__.py +42 -0
  142. diffract/viz/data/__init__.py +34 -0
  143. diffract/viz/data/detection.py +57 -0
  144. diffract/viz/data/extraction.py +117 -0
  145. diffract/viz/data/filtering.py +57 -0
  146. diffract/viz/data/ordering.py +129 -0
  147. diffract/viz/data/provider.py +99 -0
  148. diffract/viz/data/types.py +98 -0
  149. diffract/viz/plots/__init__.py +37 -0
  150. diffract/viz/plots/base/__init__.py +20 -0
  151. diffract/viz/plots/base/axis.py +219 -0
  152. diffract/viz/plots/base/coloraxis.py +133 -0
  153. diffract/viz/plots/base/configurator.py +18 -0
  154. diffract/viz/plots/base/jitter.py +368 -0
  155. diffract/viz/plots/base/line.py +197 -0
  156. diffract/viz/plots/base/marker.py +278 -0
  157. diffract/viz/plots/base/overlay.py +14 -0
  158. diffract/viz/plots/base/plot.py +110 -0
  159. diffract/viz/plots/base/update.py +50 -0
  160. diffract/viz/plots/boxplot.py +283 -0
  161. diffract/viz/plots/cluster.py +374 -0
  162. diffract/viz/plots/heatmap.py +168 -0
  163. diffract/viz/plots/scatter.py +233 -0
  164. diffract/viz/plots/sparkline.py +405 -0
  165. diffract/viz/plots/subplots/__init__.py +32 -0
  166. diffract/viz/plots/subplots/coloraxis.py +339 -0
  167. diffract/viz/plots/subplots/factory.py +713 -0
  168. diffract/viz/plots/subplots/grid.py +214 -0
  169. diffract/viz/plots/subplots/layout.py +370 -0
  170. diffract/viz/plots/subplots/spec.py +39 -0
  171. diffract/viz/plots/violin.py +298 -0
  172. diffract/viz/renderer.py +513 -0
  173. diffract/viz/styling/__init__.py +78 -0
  174. diffract/viz/styling/palettes/__init__.py +20 -0
  175. diffract/viz/styling/palettes/bundle.py +16 -0
  176. diffract/viz/styling/palettes/color.py +83 -0
  177. diffract/viz/styling/palettes/dashes.py +27 -0
  178. diffract/viz/styling/palettes/symbols.py +42 -0
  179. diffract/viz/styling/resolvers/__init__.py +11 -0
  180. diffract/viz/styling/resolvers/categorical.py +68 -0
  181. diffract/viz/styling/resolvers/color.py +77 -0
  182. diffract/viz/styling/resolvers/numeric.py +108 -0
  183. diffract/viz/styling/sources.py +27 -0
  184. diffract/viz/styling/theme/__init__.py +29 -0
  185. diffract/viz/styling/theme/applier.py +114 -0
  186. diffract/viz/styling/theme/components.py +66 -0
  187. diffract/viz/styling/theme/presets.py +58 -0
  188. diffract/viz/styling/theme/theme.py +36 -0
  189. diffract_core-0.2.1.dist-info/METADATA +530 -0
  190. diffract_core-0.2.1.dist-info/RECORD +193 -0
  191. diffract_core-0.2.1.dist-info/WHEEL +4 -0
  192. diffract_core-0.2.1.dist-info/licenses/LICENSE +201 -0
  193. diffract_core-0.2.1.dist-info/licenses/NOTICE +2 -0
@@ -0,0 +1,202 @@
1
+ """Scatter plot wrapper for Session.viz."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from diffract.session.namespaces.viz._utils import _to_field_ref
8
+ from diffract.viz.data import FieldRef
9
+
10
+ if TYPE_CHECKING:
11
+ from pathlib import Path
12
+
13
+ import plotly.graph_objects as go # type: ignore[import-not-found]
14
+
15
+ from diffract.viz.styling import Theme
16
+
17
+
18
+ def scatter(
19
+ self: Any,
20
+ *,
21
+ x: str | FieldRef,
22
+ y: str | FieldRef,
23
+ group_by: str | FieldRef | None = None,
24
+ title: str | None = None,
25
+ value_filter: dict[str, tuple[str, Any]] | None = None,
26
+ x_title: str | None = None,
27
+ x_showticklabels: bool = True,
28
+ x_tickangle: int | None = None,
29
+ x_tickfont_size: int | None = None,
30
+ x_tickfont_family: str | None = None,
31
+ x_tickfont_color: str | None = None,
32
+ x_showgrid: bool = True,
33
+ x_gridcolor: str | None = None,
34
+ x_showline: bool = True,
35
+ x_linecolor: str | None = None,
36
+ x_range: tuple[float, float] | None = None,
37
+ x_dtick: float | str | None = None,
38
+ x_tick0: float | None = None,
39
+ x_tickformat: str | None = None,
40
+ x_zeroline: bool = False,
41
+ x_zerolinecolor: str | None = None,
42
+ y_title: str | None = None,
43
+ y_showticklabels: bool = True,
44
+ y_tickangle: int | None = None,
45
+ y_tickfont_size: int | None = None,
46
+ y_tickfont_family: str | None = None,
47
+ y_tickfont_color: str | None = None,
48
+ y_showgrid: bool = True,
49
+ y_gridcolor: str | None = None,
50
+ y_showline: bool = True,
51
+ y_linecolor: str | None = None,
52
+ y_range: tuple[float, float] | None = None,
53
+ y_dtick: float | str | None = None,
54
+ y_tick0: float | None = None,
55
+ y_tickformat: str | None = None,
56
+ y_zeroline: bool = False,
57
+ y_zerolinecolor: str | None = None,
58
+ marker_coloraxis_id: int | None = None,
59
+ marker_colorscale: str = "Viridis",
60
+ marker_showscale: bool = True,
61
+ marker_cmin: float | None = None,
62
+ marker_cmax: float | None = None,
63
+ marker_colorbar_title: str | None = None,
64
+ marker_coloraxis_override: bool = False,
65
+ marker_size: str | float | None = 6,
66
+ marker_size_range: tuple[float, float] | None = None,
67
+ marker_opacity: str | float | None = 0.7,
68
+ marker_opacity_range: tuple[float, float] | None = None,
69
+ marker_color: str | FieldRef | None = None,
70
+ marker_symbol: str | FieldRef | None = None,
71
+ theme: Theme | None = None,
72
+ theme_path: str | Path | None = None,
73
+ ) -> go.Figure:
74
+ """Create a scatter plot.
75
+
76
+ Each entry becomes a point. group_by splits entries into separate traces.
77
+
78
+ Args:
79
+ self: The bound viz namespace providing the draw() method.
80
+ x: Field for horizontal values (field name or FieldRef).
81
+ y: Field for vertical values (field name or FieldRef).
82
+ title: Figure title.
83
+ value_filter: Filter entries by field values.
84
+ group_by: Field to group points into traces (field name or FieldRef or None).
85
+ x_title: X-axis title.
86
+ x_showticklabels: Show x-axis tick labels.
87
+ x_tickangle: Angle of x-axis tick labels.
88
+ x_tickfont_size: Font size of x-axis tick labels.
89
+ x_tickfont_family: Font family of x-axis tick labels.
90
+ x_tickfont_color: Font color of x-axis tick labels.
91
+ x_showgrid: Show x-axis grid lines.
92
+ x_gridcolor: Color of x-axis grid lines.
93
+ x_showline: Show the x-axis line.
94
+ x_linecolor: Color of the x-axis line.
95
+ x_range: X-axis value range.
96
+ x_dtick: X-axis tick step.
97
+ x_tick0: X-axis starting tick.
98
+ x_tickformat: X-axis tick format string.
99
+ x_zeroline: Show the x-axis zero line.
100
+ x_zerolinecolor: Color of the x-axis zero line.
101
+ y_title: Y-axis title.
102
+ y_showticklabels: Show y-axis tick labels.
103
+ y_tickangle: Angle of y-axis tick labels.
104
+ y_tickfont_size: Font size of y-axis tick labels.
105
+ y_tickfont_family: Font family of y-axis tick labels.
106
+ y_tickfont_color: Font color of y-axis tick labels.
107
+ y_showgrid: Show y-axis grid lines.
108
+ y_gridcolor: Color of y-axis grid lines.
109
+ y_showline: Show the y-axis line.
110
+ y_linecolor: Color of the y-axis line.
111
+ y_range: Y-axis value range.
112
+ y_dtick: Y-axis tick step.
113
+ y_tick0: Y-axis starting tick.
114
+ y_tickformat: Y-axis tick format string.
115
+ y_zeroline: Show the y-axis zero line.
116
+ y_zerolinecolor: Color of the y-axis zero line.
117
+ marker_coloraxis_id: Shared color axis id for markers.
118
+ marker_colorscale: Colorscale for markers.
119
+ marker_showscale: Show the marker colorbar.
120
+ marker_cmin: Minimum value for marker color mapping.
121
+ marker_cmax: Maximum value for marker color mapping.
122
+ marker_colorbar_title: Title of the marker colorbar.
123
+ marker_coloraxis_override: Override the shared marker color axis.
124
+ marker_size: Field or fixed size for markers.
125
+ marker_size_range: Range to scale marker sizes into.
126
+ marker_opacity: Field or fixed opacity for markers.
127
+ marker_opacity_range: Range to scale marker opacity into.
128
+ marker_color: Field or color for markers.
129
+ marker_symbol: Field or symbol for markers.
130
+ theme: Theme to apply to the figure.
131
+ theme_path: Path to a theme file to apply to the figure.
132
+
133
+ Returns:
134
+ Plotly Figure.
135
+
136
+ Example:
137
+ >>> session.viz.scatter(
138
+ ... x="frob_norm",
139
+ ... y="stable_rank",
140
+ ... marker_color="model_id",
141
+ ... marker_size="layer_id",
142
+ ... )
143
+ """
144
+ from diffract.viz.plots.scatter import ScatterPlot
145
+
146
+ plot = ScatterPlot(
147
+ x=_to_field_ref(x),
148
+ y=_to_field_ref(y),
149
+ group_by=_to_field_ref(group_by) if isinstance(group_by, str) else group_by,
150
+ title=title,
151
+ value_filter=value_filter,
152
+ x_title=x_title,
153
+ x_showticklabels=x_showticklabels,
154
+ x_tickangle=x_tickangle,
155
+ x_tickfont_size=x_tickfont_size,
156
+ x_tickfont_family=x_tickfont_family,
157
+ x_tickfont_color=x_tickfont_color,
158
+ x_showgrid=x_showgrid,
159
+ x_gridcolor=x_gridcolor,
160
+ x_showline=x_showline,
161
+ x_linecolor=x_linecolor,
162
+ x_range=x_range,
163
+ x_dtick=x_dtick,
164
+ x_tick0=x_tick0,
165
+ x_tickformat=x_tickformat,
166
+ x_zeroline=x_zeroline,
167
+ x_zerolinecolor=x_zerolinecolor,
168
+ y_title=y_title,
169
+ y_showticklabels=y_showticklabels,
170
+ y_tickangle=y_tickangle,
171
+ y_tickfont_size=y_tickfont_size,
172
+ y_tickfont_family=y_tickfont_family,
173
+ y_tickfont_color=y_tickfont_color,
174
+ y_showgrid=y_showgrid,
175
+ y_gridcolor=y_gridcolor,
176
+ y_showline=y_showline,
177
+ y_linecolor=y_linecolor,
178
+ y_range=y_range,
179
+ y_dtick=y_dtick,
180
+ y_tick0=y_tick0,
181
+ y_tickformat=y_tickformat,
182
+ y_zeroline=y_zeroline,
183
+ y_zerolinecolor=y_zerolinecolor,
184
+ marker_coloraxis_id=marker_coloraxis_id,
185
+ marker_colorscale=marker_colorscale,
186
+ marker_showscale=marker_showscale,
187
+ marker_cmin=marker_cmin,
188
+ marker_cmax=marker_cmax,
189
+ marker_colorbar_title=marker_colorbar_title,
190
+ marker_coloraxis_override=marker_coloraxis_override,
191
+ marker_size=_to_field_ref(marker_size)
192
+ if isinstance(marker_size, str)
193
+ else marker_size,
194
+ marker_size_range=marker_size_range,
195
+ marker_opacity=_to_field_ref(marker_opacity)
196
+ if isinstance(marker_opacity, str)
197
+ else marker_opacity,
198
+ marker_opacity_range=marker_opacity_range,
199
+ marker_color=marker_color,
200
+ marker_symbol=marker_symbol,
201
+ )
202
+ return self.draw(plot=plot, theme=theme, theme_path=theme_path)
@@ -0,0 +1,270 @@
1
+ """Line/sparkline plot wrapper for Session.viz."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any, Literal
6
+
7
+ from diffract.session.namespaces.viz._utils import _to_field_ref
8
+ from diffract.viz.data import FieldRef
9
+
10
+ if TYPE_CHECKING:
11
+ from pathlib import Path
12
+
13
+ import plotly.graph_objects as go # type: ignore[import-not-found]
14
+
15
+ from diffract.viz.styling import Theme
16
+
17
+
18
+ def sparkline(
19
+ self: Any,
20
+ *,
21
+ y: str | FieldRef,
22
+ x: str | FieldRef,
23
+ group_by: str | FieldRef | None = None,
24
+ title: str | None = None,
25
+ value_filter: dict[str, tuple[str, Any]] | None = None,
26
+ mode: Literal["lines", "markers", "lines+markers"] = "lines",
27
+ show_bands: bool = True,
28
+ band_opacity: float = 0.3,
29
+ band_line_width: float = 0.5,
30
+ x_title: str | None = None,
31
+ x_showticklabels: bool = True,
32
+ x_tickangle: int | None = None,
33
+ x_tickfont_size: int | None = None,
34
+ x_tickfont_family: str | None = None,
35
+ x_tickfont_color: str | None = None,
36
+ x_showgrid: bool = True,
37
+ x_gridcolor: str | None = None,
38
+ x_showline: bool = True,
39
+ x_linecolor: str | None = None,
40
+ x_categoryorder: str | None = None,
41
+ x_categoryarray: list[str] | None = None,
42
+ x_range: tuple[float, float] | None = None,
43
+ x_dtick: float | str | None = None,
44
+ x_tick0: float | None = None,
45
+ x_tickformat: str | None = None,
46
+ x_zeroline: bool = False,
47
+ x_zerolinecolor: str | None = None,
48
+ x_axis_mode: Literal["numeric", "categorical"] | None = None,
49
+ y_title: str | None = None,
50
+ y_showticklabels: bool = True,
51
+ y_tickangle: int | None = None,
52
+ y_tickfont_size: int | None = None,
53
+ y_tickfont_family: str | None = None,
54
+ y_tickfont_color: str | None = None,
55
+ y_showgrid: bool = True,
56
+ y_gridcolor: str | None = None,
57
+ y_showline: bool = True,
58
+ y_linecolor: str | None = None,
59
+ y_range: tuple[float, float] | None = None,
60
+ y_dtick: float | str | None = None,
61
+ y_tick0: float | None = None,
62
+ y_tickformat: str | None = None,
63
+ y_zeroline: bool = False,
64
+ y_zerolinecolor: str | None = None,
65
+ line_coloraxis_id: int | None = None,
66
+ line_colorscale: str = "Viridis",
67
+ line_showscale: bool = True,
68
+ line_cmin: float | None = None,
69
+ line_cmax: float | None = None,
70
+ line_colorbar_title: str | None = None,
71
+ line_coloraxis_override: bool = False,
72
+ line_width: str | float | None = 2,
73
+ line_width_range: tuple[float, float] | None = None,
74
+ line_color: str | FieldRef | None = None,
75
+ line_dash: str | FieldRef | None = None,
76
+ line_shape: str | None = None,
77
+ line_smoothing: float | None = None,
78
+ marker_coloraxis_id: int | None = None,
79
+ marker_colorscale: str = "Viridis",
80
+ marker_showscale: bool = True,
81
+ marker_cmin: float | None = None,
82
+ marker_cmax: float | None = None,
83
+ marker_colorbar_title: str | None = None,
84
+ marker_coloraxis_override: bool = False,
85
+ marker_size: str | float | None = 6,
86
+ marker_size_range: tuple[float, float] | None = None,
87
+ marker_opacity: str | float | None = 0.7,
88
+ marker_opacity_range: tuple[float, float] | None = None,
89
+ marker_color: str | FieldRef | None = None,
90
+ marker_symbol: str | FieldRef | None = None,
91
+ theme: Theme | None = None,
92
+ theme_path: str | Path | None = None,
93
+ ) -> go.Figure:
94
+ """Create a line plot of a field vs a metadata key.
95
+
96
+ Automatically computes mean and std for duplicate x values.
97
+ Each group (group_by) becomes a separate line trace.
98
+
99
+ Args:
100
+ y: Field for vertical values (field name or FieldRef).
101
+ x: Field for horizontal axis (field name or FieldRef).
102
+ title: Figure title.
103
+ value_filter: Filter entries by field values.
104
+ group_by: Field to group series by (field name or FieldRef or None).
105
+ mode: "lines", "markers", or "lines+markers".
106
+ show_bands: Show mean ± std bands.
107
+ band_opacity: Opacity of std band fill.
108
+ band_line_width: Line width for band edges.
109
+ self: The bound viz namespace providing the draw() method.
110
+ x_title: X-axis title.
111
+ x_showticklabels: Show x-axis tick labels.
112
+ x_tickangle: Angle of x-axis tick labels.
113
+ x_tickfont_size: Font size of x-axis tick labels.
114
+ x_tickfont_family: Font family of x-axis tick labels.
115
+ x_tickfont_color: Font color of x-axis tick labels.
116
+ x_showgrid: Show x-axis grid lines.
117
+ x_gridcolor: Color of x-axis grid lines.
118
+ x_showline: Show the x-axis line.
119
+ x_linecolor: Color of the x-axis line.
120
+ x_categoryorder: Ordering strategy for x-axis categories.
121
+ x_categoryarray: Explicit ordering of x-axis categories.
122
+ x_range: X-axis value range.
123
+ x_dtick: X-axis tick step.
124
+ x_tick0: X-axis starting tick.
125
+ x_tickformat: X-axis tick format string.
126
+ x_zeroline: Show the x-axis zero line.
127
+ x_zerolinecolor: Color of the x-axis zero line.
128
+ x_axis_mode: Force the x-axis data type ("numeric" or "categorical");
129
+ inferred from the data when None.
130
+ y_title: Y-axis title.
131
+ y_showticklabels: Show y-axis tick labels.
132
+ y_tickangle: Angle of y-axis tick labels.
133
+ y_tickfont_size: Font size of y-axis tick labels.
134
+ y_tickfont_family: Font family of y-axis tick labels.
135
+ y_tickfont_color: Font color of y-axis tick labels.
136
+ y_showgrid: Show y-axis grid lines.
137
+ y_gridcolor: Color of y-axis grid lines.
138
+ y_showline: Show the y-axis line.
139
+ y_linecolor: Color of the y-axis line.
140
+ y_range: Y-axis value range.
141
+ y_dtick: Y-axis tick step.
142
+ y_tick0: Y-axis starting tick.
143
+ y_tickformat: Y-axis tick format string.
144
+ y_zeroline: Show the y-axis zero line.
145
+ y_zerolinecolor: Color of the y-axis zero line.
146
+ line_coloraxis_id: Shared color axis id for lines.
147
+ line_colorscale: Colorscale for lines.
148
+ line_showscale: Show the line colorbar.
149
+ line_cmin: Minimum value for line color mapping.
150
+ line_cmax: Maximum value for line color mapping.
151
+ line_colorbar_title: Title of the line colorbar.
152
+ line_coloraxis_override: Override the shared line color axis.
153
+ line_width: Field or fixed width for lines.
154
+ line_width_range: Range to scale line widths into.
155
+ line_color: Field or color for lines.
156
+ line_dash: Field or dash style for lines.
157
+ line_shape: Line interpolation shape.
158
+ line_smoothing: Line smoothing factor.
159
+ marker_coloraxis_id: Shared color axis id for markers.
160
+ marker_colorscale: Colorscale for markers.
161
+ marker_showscale: Show the marker colorbar.
162
+ marker_cmin: Minimum value for marker color mapping.
163
+ marker_cmax: Maximum value for marker color mapping.
164
+ marker_colorbar_title: Title of the marker colorbar.
165
+ marker_coloraxis_override: Override the shared marker color axis.
166
+ marker_size: Field or fixed size for markers.
167
+ marker_size_range: Range to scale marker sizes into.
168
+ marker_opacity: Field or fixed opacity for markers.
169
+ marker_opacity_range: Range to scale marker opacity into.
170
+ marker_color: Field or color for markers.
171
+ marker_symbol: Field or symbol for markers.
172
+ theme: Theme to apply to the figure.
173
+ theme_path: Path to a theme file to apply to the figure.
174
+
175
+ Returns:
176
+ Plotly Figure.
177
+
178
+ Example:
179
+ >>> session.viz.line(y="stable_rank", x="in_model_idx", group_by="model_id")
180
+ """
181
+ from diffract.viz.plots.sparkline import SparklinePlot
182
+ from diffract.viz.styling import LINE_DASHES
183
+
184
+ line_dash_value: str | FieldRef | None
185
+ if isinstance(line_dash, str) and line_dash not in LINE_DASHES:
186
+ line_dash_value = _to_field_ref(line_dash)
187
+ else:
188
+ line_dash_value = line_dash
189
+
190
+ plot = SparklinePlot(
191
+ y=_to_field_ref(y),
192
+ x=_to_field_ref(x),
193
+ group_by=_to_field_ref(group_by) if isinstance(group_by, str) else group_by,
194
+ title=title,
195
+ value_filter=value_filter,
196
+ mode=mode,
197
+ show_bands=show_bands,
198
+ band_opacity=band_opacity,
199
+ band_line_width=band_line_width,
200
+ x_title=x_title,
201
+ x_showticklabels=x_showticklabels,
202
+ x_tickangle=x_tickangle,
203
+ x_tickfont_size=x_tickfont_size,
204
+ x_tickfont_family=x_tickfont_family,
205
+ x_tickfont_color=x_tickfont_color,
206
+ x_showgrid=x_showgrid,
207
+ x_gridcolor=x_gridcolor,
208
+ x_showline=x_showline,
209
+ x_linecolor=x_linecolor,
210
+ x_range=x_range,
211
+ x_dtick=x_dtick,
212
+ x_tick0=x_tick0,
213
+ x_tickformat=x_tickformat,
214
+ x_zeroline=x_zeroline,
215
+ x_zerolinecolor=x_zerolinecolor,
216
+ x_categoryorder=x_categoryorder,
217
+ x_categoryarray=x_categoryarray,
218
+ x_axis_mode=x_axis_mode,
219
+ y_title=y_title,
220
+ y_showticklabels=y_showticklabels,
221
+ y_tickangle=y_tickangle,
222
+ y_tickfont_size=y_tickfont_size,
223
+ y_tickfont_family=y_tickfont_family,
224
+ y_tickfont_color=y_tickfont_color,
225
+ y_showgrid=y_showgrid,
226
+ y_gridcolor=y_gridcolor,
227
+ y_showline=y_showline,
228
+ y_linecolor=y_linecolor,
229
+ y_range=y_range,
230
+ y_dtick=y_dtick,
231
+ y_tick0=y_tick0,
232
+ y_tickformat=y_tickformat,
233
+ y_zeroline=y_zeroline,
234
+ y_zerolinecolor=y_zerolinecolor,
235
+ line_coloraxis_id=line_coloraxis_id,
236
+ line_colorscale=line_colorscale,
237
+ line_showscale=line_showscale,
238
+ line_cmin=line_cmin,
239
+ line_cmax=line_cmax,
240
+ line_colorbar_title=line_colorbar_title,
241
+ line_coloraxis_override=line_coloraxis_override,
242
+ line_width=_to_field_ref(line_width)
243
+ if isinstance(line_width, str)
244
+ else line_width,
245
+ line_width_range=line_width_range,
246
+ line_color=_to_field_ref(line_color)
247
+ if isinstance(line_color, str)
248
+ else line_color,
249
+ line_dash=line_dash_value,
250
+ line_shape=line_shape,
251
+ line_smoothing=line_smoothing,
252
+ marker_coloraxis_id=marker_coloraxis_id,
253
+ marker_colorscale=marker_colorscale,
254
+ marker_showscale=marker_showscale,
255
+ marker_cmin=marker_cmin,
256
+ marker_cmax=marker_cmax,
257
+ marker_colorbar_title=marker_colorbar_title,
258
+ marker_coloraxis_override=marker_coloraxis_override,
259
+ marker_size=_to_field_ref(marker_size)
260
+ if isinstance(marker_size, str)
261
+ else marker_size,
262
+ marker_size_range=marker_size_range,
263
+ marker_opacity=_to_field_ref(marker_opacity)
264
+ if isinstance(marker_opacity, str)
265
+ else marker_opacity,
266
+ marker_opacity_range=marker_opacity_range,
267
+ marker_color=marker_color,
268
+ marker_symbol=marker_symbol,
269
+ )
270
+ return self.draw(plot=plot, theme=theme, theme_path=theme_path)
@@ -0,0 +1,212 @@
1
+ """Violin plot wrapper for Session.viz."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any, Literal
6
+
7
+ from diffract.session.namespaces.viz._utils import _to_field_ref
8
+ from diffract.viz.data import FieldRef
9
+
10
+ if TYPE_CHECKING:
11
+ from pathlib import Path
12
+
13
+ import plotly.graph_objects as go # type: ignore[import-not-found]
14
+
15
+ from diffract.viz.styling import Theme
16
+
17
+
18
+ def violin(
19
+ self: Any,
20
+ *,
21
+ y: str | FieldRef,
22
+ x: str | FieldRef,
23
+ title: str | None = None,
24
+ value_filter: dict[str, tuple[str, Any]] | None = None,
25
+ points: Literal["all", "outliers", False] = "outliers",
26
+ box_visible: bool = True,
27
+ meanline_visible: bool = True,
28
+ side: Literal["positive", "negative", "both"] = "positive",
29
+ bandwidth: float | None = None,
30
+ jitter_enabled: bool = False,
31
+ jitter_width: float = 0.12,
32
+ jitter_offset: float = -0.35,
33
+ jitter_seed: int = 42,
34
+ jitter_density_scale: bool = True,
35
+ jitter_color: str | FieldRef | None = None,
36
+ jitter_colorscale: str = "Viridis",
37
+ x_title: str | None = None,
38
+ x_showticklabels: bool = True,
39
+ x_tickangle: int | None = None,
40
+ x_tickfont_size: int | None = None,
41
+ x_tickfont_family: str | None = None,
42
+ x_tickfont_color: str | None = None,
43
+ x_showgrid: bool = True,
44
+ x_gridcolor: str | None = None,
45
+ x_showline: bool = True,
46
+ x_linecolor: str | None = None,
47
+ y_title: str | None = None,
48
+ y_showticklabels: bool = True,
49
+ y_tickangle: int | None = None,
50
+ y_tickfont_size: int | None = None,
51
+ y_tickfont_family: str | None = None,
52
+ y_tickfont_color: str | None = None,
53
+ y_showgrid: bool = True,
54
+ y_gridcolor: str | None = None,
55
+ y_showline: bool = True,
56
+ y_linecolor: str | None = None,
57
+ y_range: tuple[float, float] | None = None,
58
+ y_dtick: float | str | None = None,
59
+ y_tick0: float | None = None,
60
+ y_tickformat: str | None = None,
61
+ y_zeroline: bool = False,
62
+ y_zerolinecolor: str | None = None,
63
+ marker_coloraxis_id: int | None = None,
64
+ marker_colorscale: str = "Viridis",
65
+ marker_showscale: bool = True,
66
+ marker_cmin: float | None = None,
67
+ marker_cmax: float | None = None,
68
+ marker_colorbar_title: str | None = None,
69
+ marker_coloraxis_override: bool = False,
70
+ marker_size: str | FieldRef | float | None = 6,
71
+ marker_size_range: tuple[float, float] | None = None,
72
+ marker_opacity: str | FieldRef | float | None = 0.7,
73
+ marker_opacity_range: tuple[float, float] | None = None,
74
+ marker_color: str | FieldRef | None = None,
75
+ marker_symbol: str | FieldRef | None = None,
76
+ theme: Theme | None = None,
77
+ theme_path: str | Path | None = None,
78
+ ) -> go.Figure:
79
+ """Create a violin plot.
80
+
81
+ Args:
82
+ self: The bound viz namespace providing the draw() method.
83
+ y: Field for vertical values (field name or FieldRef).
84
+ x: Field for categories (field name or FieldRef).
85
+ title: Figure title.
86
+ value_filter: Filter entries by field values.
87
+ points: Show points: "all", "outliers", or False.
88
+ box_visible: Show inner box.
89
+ meanline_visible: Show mean line.
90
+ side: Which side to draw: "positive", "negative", or "both".
91
+ bandwidth: Violin kernel bandwidth (None = auto).
92
+ jitter_enabled: Enable the jitter overlay of individual points.
93
+ jitter_width: Horizontal spread of the jitter overlay.
94
+ jitter_offset: Horizontal offset of the jitter overlay from the violin.
95
+ jitter_seed: Random seed for the jitter overlay.
96
+ jitter_density_scale: Scale jitter spread by local point density.
97
+ jitter_color: Field or color for jitter points.
98
+ jitter_colorscale: Colorscale for jitter points.
99
+ x_title: X-axis title.
100
+ x_showticklabels: Show x-axis tick labels.
101
+ x_tickangle: Angle of x-axis tick labels.
102
+ x_tickfont_size: Font size of x-axis tick labels.
103
+ x_tickfont_family: Font family of x-axis tick labels.
104
+ x_tickfont_color: Font color of x-axis tick labels.
105
+ x_showgrid: Show x-axis grid lines.
106
+ x_gridcolor: Color of x-axis grid lines.
107
+ x_showline: Show the x-axis line.
108
+ x_linecolor: Color of the x-axis line.
109
+ y_title: Y-axis title.
110
+ y_showticklabels: Show y-axis tick labels.
111
+ y_tickangle: Angle of y-axis tick labels.
112
+ y_tickfont_size: Font size of y-axis tick labels.
113
+ y_tickfont_family: Font family of y-axis tick labels.
114
+ y_tickfont_color: Font color of y-axis tick labels.
115
+ y_showgrid: Show y-axis grid lines.
116
+ y_gridcolor: Color of y-axis grid lines.
117
+ y_showline: Show the y-axis line.
118
+ y_linecolor: Color of the y-axis line.
119
+ y_range: Y-axis value range.
120
+ y_dtick: Y-axis tick step.
121
+ y_tick0: Y-axis starting tick.
122
+ y_tickformat: Y-axis tick format string.
123
+ y_zeroline: Show the y-axis zero line.
124
+ y_zerolinecolor: Color of the y-axis zero line.
125
+ marker_coloraxis_id: Shared color axis id for markers.
126
+ marker_colorscale: Colorscale for markers.
127
+ marker_showscale: Show the marker colorbar.
128
+ marker_cmin: Minimum value for marker color mapping.
129
+ marker_cmax: Maximum value for marker color mapping.
130
+ marker_colorbar_title: Title of the marker colorbar.
131
+ marker_coloraxis_override: Override the shared marker color axis.
132
+ marker_size: Field or fixed size for markers.
133
+ marker_size_range: Range to scale marker sizes into.
134
+ marker_opacity: Field or fixed opacity for markers.
135
+ marker_opacity_range: Range to scale marker opacity into.
136
+ marker_color: Field or color for markers.
137
+ marker_symbol: Field or symbol for markers.
138
+ theme: Theme to apply to the figure.
139
+ theme_path: Path to a theme file to apply to the figure.
140
+
141
+ Returns:
142
+ Plotly Figure.
143
+
144
+ Example:
145
+ >>> session.viz.violin(y="weights_svals", x="model_id", jitter_enabled=True)
146
+ """
147
+ from diffract.viz.plots.violin import ViolinPlot
148
+
149
+ plot = ViolinPlot(
150
+ y=_to_field_ref(y) if isinstance(y, str) else y,
151
+ x=_to_field_ref(x) if isinstance(x, str) else x,
152
+ title=title,
153
+ value_filter=value_filter,
154
+ points=points,
155
+ box_visible=box_visible,
156
+ meanline_visible=meanline_visible,
157
+ side=side,
158
+ bandwidth=bandwidth,
159
+ jitter_enabled=jitter_enabled,
160
+ jitter_width=jitter_width,
161
+ jitter_offset=jitter_offset,
162
+ jitter_seed=jitter_seed,
163
+ jitter_density_scale=jitter_density_scale,
164
+ jitter_color=_to_field_ref(jitter_color)
165
+ if isinstance(jitter_color, str)
166
+ else jitter_color,
167
+ jitter_colorscale=jitter_colorscale,
168
+ x_title=x_title,
169
+ x_showticklabels=x_showticklabels,
170
+ x_tickangle=x_tickangle,
171
+ x_tickfont_size=x_tickfont_size,
172
+ x_tickfont_family=x_tickfont_family,
173
+ x_tickfont_color=x_tickfont_color,
174
+ x_showgrid=x_showgrid,
175
+ x_gridcolor=x_gridcolor,
176
+ x_showline=x_showline,
177
+ x_linecolor=x_linecolor,
178
+ y_title=y_title,
179
+ y_showticklabels=y_showticklabels,
180
+ y_tickangle=y_tickangle,
181
+ y_tickfont_size=y_tickfont_size,
182
+ y_tickfont_family=y_tickfont_family,
183
+ y_tickfont_color=y_tickfont_color,
184
+ y_showgrid=y_showgrid,
185
+ y_gridcolor=y_gridcolor,
186
+ y_showline=y_showline,
187
+ y_linecolor=y_linecolor,
188
+ y_range=y_range,
189
+ y_dtick=y_dtick,
190
+ y_tick0=y_tick0,
191
+ y_tickformat=y_tickformat,
192
+ y_zeroline=y_zeroline,
193
+ y_zerolinecolor=y_zerolinecolor,
194
+ marker_coloraxis_id=marker_coloraxis_id,
195
+ marker_colorscale=marker_colorscale,
196
+ marker_showscale=marker_showscale,
197
+ marker_cmin=marker_cmin,
198
+ marker_cmax=marker_cmax,
199
+ marker_colorbar_title=marker_colorbar_title,
200
+ marker_coloraxis_override=marker_coloraxis_override,
201
+ marker_size=_to_field_ref(marker_size)
202
+ if isinstance(marker_size, str)
203
+ else marker_size,
204
+ marker_size_range=marker_size_range,
205
+ marker_opacity=_to_field_ref(marker_opacity)
206
+ if isinstance(marker_opacity, str)
207
+ else marker_opacity,
208
+ marker_opacity_range=marker_opacity_range,
209
+ marker_color=marker_color,
210
+ marker_symbol=marker_symbol,
211
+ )
212
+ return self.draw(plot=plot, theme=theme, theme_path=theme_path)