howso-visuals 2.5.6__tar.gz → 3.0.0__tar.gz

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 (47) hide show
  1. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/LICENSE-3RD-PARTY.txt +8 -8
  2. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/PKG-INFO +1 -1
  3. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso/visuals/tests/test_plot.py +3 -3
  4. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso/visuals/visuals.py +71 -36
  5. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso_visuals.egg-info/PKG-INFO +1 -1
  6. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/requirements-3.10-dev.txt +6 -6
  7. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/requirements-3.10.txt +5 -5
  8. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/requirements-3.11-dev.txt +6 -6
  9. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/requirements-3.11.txt +5 -5
  10. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/requirements-3.12-dev.txt +6 -6
  11. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/requirements-3.12.txt +5 -5
  12. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/requirements-3.13-dev.txt +6 -6
  13. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/requirements-3.13.txt +5 -5
  14. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/.flake8 +0 -0
  15. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/.github/CODEOWNERS +0 -0
  16. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/.github/templates/version_summary.md +0 -0
  17. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/.github/workflows/build-pr.yml +0 -0
  18. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/.github/workflows/build-release.yml +0 -0
  19. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/.github/workflows/build.yml +0 -0
  20. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/.github/workflows/rebuild-requirements.yml +0 -0
  21. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/.gitignore +0 -0
  22. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/CONTRIBUTING.md +0 -0
  23. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/LICENSE.txt +0 -0
  24. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/README.md +0 -0
  25. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/bin/build.sh +0 -0
  26. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/config/latest-mt-debug-howso.yml +0 -0
  27. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/config/latest-mt-howso.yml +0 -0
  28. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/config/latest-mt-noavx-debug-howso.yml +0 -0
  29. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/config/latest-st-debug-howso.yml +0 -0
  30. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/config/latest-st-howso.yml +0 -0
  31. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/config/powershell/Download-Tzdata.ps1 +0 -0
  32. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/config/powershell/Helper-Functions.ps1 +0 -0
  33. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso/visuals/__init__.py +0 -0
  34. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso/visuals/colors.py +0 -0
  35. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso/visuals/data/iris.csv +0 -0
  36. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso/visuals/graph.py +0 -0
  37. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso/visuals/tests/conftest.py +0 -0
  38. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso/visuals/tests/test_graph.py +0 -0
  39. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso_visuals.egg-info/SOURCES.txt +0 -0
  40. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso_visuals.egg-info/dependency_links.txt +0 -0
  41. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso_visuals.egg-info/requires.txt +0 -0
  42. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/howso_visuals.egg-info/top_level.txt +0 -0
  43. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/pyproject.toml +0 -0
  44. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/requirements-3.9-dev.txt +0 -0
  45. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/requirements-3.9.txt +0 -0
  46. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/ruff.toml +0 -0
  47. {howso_visuals-2.5.6 → howso_visuals-3.0.0}/setup.cfg +0 -0
@@ -1,10 +1,10 @@
1
1
  Faker
2
- 38.0.0
2
+ 38.2.0
3
3
  MIT License
4
4
  joke2k
5
5
  https://github.com/joke2k/faker
6
6
  Faker is a Python package that generates fake data for you.
7
- /home/runner/.pyenv/versions/3.13.9/lib/python3.13/site-packages/faker-38.0.0.dist-info/licenses/LICENSE.txt
7
+ /home/runner/.pyenv/versions/3.13.9/lib/python3.13/site-packages/faker-38.2.0.dist-info/licenses/LICENSE.txt
8
8
  Copyright (c) 2012 Daniele Faraglia
9
9
 
10
10
  Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -297,12 +297,12 @@ OTHER DEALINGS IN THE SOFTWARE.
297
297
 
298
298
 
299
299
  click
300
- 8.3.0
300
+ 8.3.1
301
301
  BSD-3-Clause
302
302
  UNKNOWN
303
303
  https://github.com/pallets/click/
304
304
  Composable command line interface toolkit
305
- /home/runner/.pyenv/versions/3.13.9/lib/python3.13/site-packages/click-8.3.0.dist-info/licenses/LICENSE.txt
305
+ /home/runner/.pyenv/versions/3.13.9/lib/python3.13/site-packages/click-8.3.1.dist-info/licenses/LICENSE.txt
306
306
  Copyright 2014 Pallets
307
307
 
308
308
  Redistribution and use in source and binary forms, with or without
@@ -1232,12 +1232,12 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1232
1232
  SOFTWARE.
1233
1233
 
1234
1234
  narwhals
1235
- 2.11.0
1235
+ 2.12.0
1236
1236
  MIT License
1237
1237
  Marco Gorelli <hello_narwhals@proton.me>
1238
1238
  https://github.com/narwhals-dev/narwhals
1239
1239
  Extremely lightweight compatibility layer between dataframe libraries
1240
- /home/runner/.pyenv/versions/3.13.9/lib/python3.13/site-packages/narwhals-2.11.0.dist-info/licenses/LICENSE.md
1240
+ /home/runner/.pyenv/versions/3.13.9/lib/python3.13/site-packages/narwhals-2.12.0.dist-info/licenses/LICENSE.md
1241
1241
  MIT License
1242
1242
 
1243
1243
  Copyright (c) 2024, Marco Gorelli
@@ -5370,12 +5370,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5370
5370
 
5371
5371
 
5372
5372
  plotly
5373
- 6.4.0
5373
+ 6.5.0
5374
5374
  MIT License
5375
5375
  Chris P <chris@plot.ly>
5376
5376
  https://plotly.com/python/
5377
5377
  An open-source interactive data visualization library for Python
5378
- /home/runner/.pyenv/versions/3.13.9/lib/python3.13/site-packages/plotly-6.4.0.dist-info/licenses/LICENSE.txt
5378
+ /home/runner/.pyenv/versions/3.13.9/lib/python3.13/site-packages/plotly-6.5.0.dist-info/licenses/LICENSE.txt
5379
5379
  MIT License
5380
5380
 
5381
5381
  Copyright (c) 2016-2024 Plotly Technologies Inc.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: howso-visuals
3
- Version: 2.5.6
3
+ Version: 3.0.0
4
4
  Summary: Visualization utilities for use with Howso Engine.
5
5
  License: GNU AFFERO GENERAL PUBLIC LICENSE
6
6
  Version 3, 19 November 2007
@@ -53,9 +53,9 @@ def test_plot_interpretable_prediction_react(
53
53
  desired_conviction=5_000,
54
54
  num_cases_to_generate=20,
55
55
  )
56
- generative_reacts = result["action"].loc[:, action_feature].values.tolist()
57
- generative_reacts[0] = generative_reacts[0] + 0.2
58
- generative_reacts[-1] = generative_reacts[-1] - 0.2
56
+ generative_reacts = result["action"]
57
+ generative_reacts.loc[0, action_feature] = generative_reacts.loc[0, action_feature] + 0.2
58
+ generative_reacts.loc[19, action_feature] = generative_reacts.loc[19, action_feature] - 0.2
59
59
  else:
60
60
  generative_reacts = None
61
61
 
@@ -479,10 +479,11 @@ def plot_interpretable_prediction(
479
479
  react: "Reaction",
480
480
  *,
481
481
  actual_value: float | None = None,
482
- generative_reacts: list[float] | None = None,
482
+ generative_reacts: pd.DataFrame | None = None,
483
483
  residual: float | None = None,
484
484
  secondary_yaxis_title: str = "Influence Weight",
485
- title: str | None = None,
485
+ subplot_titles: list[str] | None = None,
486
+ title: str = "Interpretable Predictions",
486
487
  tooltip_features: Collection[str] | None = None,
487
488
  xaxis_title: str | None = None,
488
489
  yaxis_title: str = "Density",
@@ -495,10 +496,10 @@ def plot_interpretable_prediction(
495
496
  react : Reaction
496
497
  The reaction predicting the action feature(s) to visualize. If this contains more than one action feature,
497
498
  each will be given its own plot.
498
- generative_reacts : list of float, optional
499
- An optional list of values for the action feature to visualize. This will be used to visualize a
500
- KDE plot to characterize the distribution of values around the predicted and actual values. If this is None,
501
- the distribution of influential cases in the react will be used instead, if present.
499
+ generative_reacts : DataFrame, optional
500
+ Ann optional `DataFrame` of generative reactions which will be used to visualize a KDE around
501
+ the predicted value. If this is None, the distribution of influential cases in the react will
502
+ be used instead, if present.
502
503
  actual_value : float, optional
503
504
  The actual value for the point that was predicted. If this is None, only the predicted value will be
504
505
  visualized.
@@ -507,7 +508,9 @@ def plot_interpretable_prediction(
507
508
  predicted value. If this is None, no error bar will be displayed
508
509
  secondary_yaxis_title : str, default "Influence Weight"
509
510
  The title for the figure's secondary y axis.
510
- title : str, optional
511
+ subplot_titles : list[str], optional
512
+ A list of titles to use for subplots. If this is None, titles will be auto-generated.
513
+ title : str, default "Interpretable Prediction"
511
514
  The title for the figure.
512
515
  tooltip_features : Collection[str], optional
513
516
  Additional features to include in the tooltip when hovering over an influential case in the plot.
@@ -521,31 +524,52 @@ def plot_interpretable_prediction(
521
524
  Figure or list of Figure
522
525
  The resultant `Plotly` figure(s).
523
526
  """
524
- figures = []
525
527
  tooltip_features = list(tooltip_features) if tooltip_features is not None else []
528
+ action_features = react["action"].columns
529
+ num_rows = len(action_features)
530
+ subplot_titles = subplot_titles or [f"Interpretable Prediction for: {af}" for af in action_features]
531
+ case_hover_template = "<b>Value:</b> %{x}<br><b>Influence:</b> N/A"
532
+ fig = make_subplots(
533
+ rows=num_rows,
534
+ specs=[[{"secondary_y": True}]] * num_rows,
535
+ subplot_titles=subplot_titles,
536
+ )
526
537
 
527
- for action_feature in react["action"].columns:
538
+ for row, action_feature in enumerate(action_features):
528
539
  predicted_value = react["action"][action_feature].iloc[0]
540
+ legend = "legend" if row == 0 else f"legend{row + 1}"
529
541
 
530
542
  influential_cases = react.get("details", {}).get("influential_cases")
531
543
  influential_cases = influential_cases[0] if influential_cases else None
532
544
 
533
545
  if generative_reacts is not None:
534
- action_distribution = generative_reacts
535
- else:
546
+ action_distribution = generative_reacts[action_feature]
547
+ elif influential_cases is not None:
536
548
  action_distribution = [c[action_feature] for c in influential_cases]
537
- action_kde = gaussian_kde(action_distribution)
538
- density_x = np.linspace(
539
- min(action_distribution) * 0.6,
540
- max(action_distribution) * 1.4,
541
- len(action_distribution),
542
- )
543
- density_y = action_kde(density_x)
544
- fig = make_subplots(specs=[[{"secondary_y": True}]])
545
- fig.add_trace(
546
- go.Scattergl(x=density_x, y=density_y, fill="tonexty", name="Distribution", hoverinfo="skip", mode="lines")
547
- )
548
- case_hover_template = "<b>Value:</b> %{x}<br><b>Influence:</b> N/A"
549
+ else:
550
+ action_distribution = None
551
+
552
+ if action_distribution is not None:
553
+ action_kde = gaussian_kde(action_distribution)
554
+ density_x = np.linspace(
555
+ min(action_distribution) * 0.6,
556
+ max(action_distribution) * 1.4,
557
+ len(action_distribution),
558
+ )
559
+ density_y = action_kde(density_x)
560
+ fig.add_trace(
561
+ go.Scattergl(
562
+ x=density_x,
563
+ y=density_y,
564
+ fill="tonexty",
565
+ name="Distribution",
566
+ hoverinfo="skip",
567
+ mode="lines",
568
+ legend=legend,
569
+ ),
570
+ row=row + 1,
571
+ col=1,
572
+ )
549
573
  predicted_case_hover_template = case_hover_template
550
574
 
551
575
  if influential_cases is not None:
@@ -561,14 +585,17 @@ def plot_interpretable_prediction(
561
585
  fig.add_trace(
562
586
  go.Scattergl(
563
587
  x=[predicted_value],
564
- y=[max_inf_weight * 1.05],
588
+ y=[max_inf_weight * 1.05] if max_inf_weight else 1,
565
589
  name="Predicted Value",
566
590
  mode="markers",
567
591
  marker={"size": 15, "color": "purple"},
568
592
  hovertemplate=predicted_case_hover_template,
569
593
  error_x=error_x,
594
+ legend=legend,
570
595
  ),
571
596
  secondary_y=True,
597
+ row=row + 1,
598
+ col=1,
572
599
  )
573
600
 
574
601
  if actual_value is not None:
@@ -576,19 +603,22 @@ def plot_interpretable_prediction(
576
603
  fig.add_trace(
577
604
  go.Scattergl(
578
605
  x=[actual_value],
579
- y=[max_inf_weight * 1.05],
606
+ y=[max_inf_weight * 1.05] if max_inf_weight else 1,
580
607
  name="Actual Value",
581
608
  mode="markers",
582
609
  marker=dict(size=15, color="orange"),
583
610
  hovertemplate=case_hover_template,
611
+ legend=legend,
584
612
  ),
585
613
  secondary_y=True,
614
+ row=row + 1,
615
+ col=1,
586
616
  )
587
617
 
588
618
  # Update axes, hover mode
589
- fig.update_xaxes(title_text=xaxis_title or action_feature, autorange=True)
590
- fig.update_yaxes(title_text=yaxis_title, color="blue", secondary_y=False)
591
- fig.update_yaxes(title_text=secondary_yaxis_title, color="green", secondary_y=True)
619
+ fig.update_xaxes(title_text=xaxis_title or action_feature, autorange=True, row=row + 1, col=1)
620
+ fig.update_yaxes(title_text=yaxis_title, color="blue", secondary_y=False, row=row + 1, col=1)
621
+ fig.update_yaxes(title_text=secondary_yaxis_title, color="green", secondary_y=True, row=row + 1, col=1)
592
622
 
593
623
  if influential_cases is not None and len(influential_cases):
594
624
  inf_case_hover_template = (
@@ -621,19 +651,24 @@ def plot_interpretable_prediction(
621
651
  customdata=inf_case_labels,
622
652
  mode="markers",
623
653
  marker=dict(color="green"),
654
+ legend=legend,
624
655
  ),
625
656
  secondary_y=True,
657
+ row=row + 1,
658
+ col=1,
626
659
  )
627
660
 
628
- if title is None:
629
- title = f"Interpretable Prediction for: {action_feature}"
630
- fig.update_layout(title=dict(text=title))
631
-
632
- figures.append(fig)
661
+ # Increase height based on the number of rows
662
+ fig.update_layout(height=300 * num_rows)
663
+ # Place a legend to the right of each subplot.
664
+ for i, yaxis in enumerate(fig.select_yaxes(secondary_y=False), 1):
665
+ legend_name = f"legend{i}"
666
+ fig.update_layout({legend_name: dict(y=yaxis.domain[1], yanchor="top")}, showlegend=True)
667
+ fig.update_traces(row=i, legend=legend_name)
633
668
 
634
- if len(figures) == 1:
635
- return figures[0]
636
- return figures
669
+ title = title or "Interpretable Predictions"
670
+ fig.update_layout(title=title)
671
+ return fig
637
672
 
638
673
 
639
674
  def plot_fairness_disparity(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: howso-visuals
3
- Version: 2.5.6
3
+ Version: 3.0.0
4
4
  Summary: Visualization utilities for use with Howso Engine.
5
5
  License: GNU AFFERO GENERAL PUBLIC LICENSE
6
6
  Version 3, 19 November 2007
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # pip-compile --allow-unsafe --cert=None --client-cert=None --extra=dev --index-url=None --no-emit-index-url --output-file=requirements-3.10-dev.txt --pip-args=None
6
6
  #
7
- amalgam-lang==25.0.2
7
+ amalgam-lang==25.1.0
8
8
  # via howso-engine
9
9
  certifi==2025.11.12
10
10
  # via
@@ -18,7 +18,7 @@ choreographer==1.2.1
18
18
  # via kaleido
19
19
  contourpy==1.3.2
20
20
  # via matplotlib
21
- coverage[toml]==7.11.3
21
+ coverage[toml]==7.12.0
22
22
  # via pytest-cov
23
23
  cryptography==46.0.3
24
24
  # via howso-engine
@@ -30,13 +30,13 @@ exceptiongroup==1.3.0
30
30
  # via pytest
31
31
  execnet==2.1.2
32
32
  # via pytest-xdist
33
- faker==38.0.0
33
+ faker==38.2.0
34
34
  # via howso-engine
35
35
  flake8==7.3.0
36
36
  # via howso-visuals (pyproject.toml)
37
37
  fonttools==4.60.1
38
38
  # via matplotlib
39
- howso-engine==50.1.0
39
+ howso-engine==50.2.1
40
40
  # via howso-visuals (pyproject.toml)
41
41
  humanize==4.14.0
42
42
  # via howso-engine
@@ -72,7 +72,7 @@ mdurl==0.1.2
72
72
  # via markdown-it-py
73
73
  mmh3==5.2.0
74
74
  # via howso-engine
75
- narwhals==2.11.0
75
+ narwhals==2.12.0
76
76
  # via plotly
77
77
  networkx==3.4.2
78
78
  # via howso-visuals (pyproject.toml)
@@ -109,7 +109,7 @@ pillow==12.0.0
109
109
  # via matplotlib
110
110
  platformdirs==4.5.0
111
111
  # via yapf
112
- plotly[kaleido]==6.4.0
112
+ plotly[kaleido]==6.5.0
113
113
  # via howso-visuals (pyproject.toml)
114
114
  pluggy==1.6.0
115
115
  # via
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-emit-index-url --output-file=requirements-3.10.txt --pip-args=None
6
6
  #
7
- amalgam-lang==25.0.2
7
+ amalgam-lang==25.1.0
8
8
  # via howso-engine
9
9
  certifi==2025.11.12
10
10
  # via
@@ -26,11 +26,11 @@ deprecation==2.1.0
26
26
  # via howso-engine
27
27
  exceptiongroup==1.3.0
28
28
  # via pytest
29
- faker==38.0.0
29
+ faker==38.2.0
30
30
  # via howso-engine
31
31
  fonttools==4.60.1
32
32
  # via matplotlib
33
- howso-engine==50.1.0
33
+ howso-engine==50.2.1
34
34
  # via howso-visuals (pyproject.toml)
35
35
  humanize==4.14.0
36
36
  # via howso-engine
@@ -62,7 +62,7 @@ mdurl==0.1.2
62
62
  # via markdown-it-py
63
63
  mmh3==5.2.0
64
64
  # via howso-engine
65
- narwhals==2.11.0
65
+ narwhals==2.12.0
66
66
  # via plotly
67
67
  networkx==3.4.2
68
68
  # via howso-visuals (pyproject.toml)
@@ -96,7 +96,7 @@ pandas==2.3.3
96
96
  # seaborn
97
97
  pillow==12.0.0
98
98
  # via matplotlib
99
- plotly[kaleido]==6.4.0
99
+ plotly[kaleido]==6.5.0
100
100
  # via howso-visuals (pyproject.toml)
101
101
  pluggy==1.6.0
102
102
  # via pytest
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # pip-compile --allow-unsafe --cert=None --client-cert=None --extra=dev --index-url=None --no-emit-index-url --output-file=requirements-3.11-dev.txt --pip-args=None
6
6
  #
7
- amalgam-lang==25.0.2
7
+ amalgam-lang==25.1.0
8
8
  # via howso-engine
9
9
  certifi==2025.11.12
10
10
  # via
@@ -18,7 +18,7 @@ choreographer==1.2.1
18
18
  # via kaleido
19
19
  contourpy==1.3.3
20
20
  # via matplotlib
21
- coverage[toml]==7.11.3
21
+ coverage[toml]==7.12.0
22
22
  # via pytest-cov
23
23
  cryptography==46.0.3
24
24
  # via howso-engine
@@ -28,13 +28,13 @@ deprecation==2.1.0
28
28
  # via howso-engine
29
29
  execnet==2.1.2
30
30
  # via pytest-xdist
31
- faker==38.0.0
31
+ faker==38.2.0
32
32
  # via howso-engine
33
33
  flake8==7.3.0
34
34
  # via howso-visuals (pyproject.toml)
35
35
  fonttools==4.60.1
36
36
  # via matplotlib
37
- howso-engine==50.1.0
37
+ howso-engine==50.2.1
38
38
  # via howso-visuals (pyproject.toml)
39
39
  humanize==4.14.0
40
40
  # via howso-engine
@@ -70,7 +70,7 @@ mdurl==0.1.2
70
70
  # via markdown-it-py
71
71
  mmh3==5.2.0
72
72
  # via howso-engine
73
- narwhals==2.11.0
73
+ narwhals==2.12.0
74
74
  # via plotly
75
75
  networkx==3.5
76
76
  # via howso-visuals (pyproject.toml)
@@ -107,7 +107,7 @@ pillow==12.0.0
107
107
  # via matplotlib
108
108
  platformdirs==4.5.0
109
109
  # via yapf
110
- plotly[kaleido]==6.4.0
110
+ plotly[kaleido]==6.5.0
111
111
  # via howso-visuals (pyproject.toml)
112
112
  pluggy==1.6.0
113
113
  # via
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-emit-index-url --output-file=requirements-3.11.txt --pip-args=None
6
6
  #
7
- amalgam-lang==25.0.2
7
+ amalgam-lang==25.1.0
8
8
  # via howso-engine
9
9
  certifi==2025.11.12
10
10
  # via
@@ -24,11 +24,11 @@ cycler==0.12.1
24
24
  # via matplotlib
25
25
  deprecation==2.1.0
26
26
  # via howso-engine
27
- faker==38.0.0
27
+ faker==38.2.0
28
28
  # via howso-engine
29
29
  fonttools==4.60.1
30
30
  # via matplotlib
31
- howso-engine==50.1.0
31
+ howso-engine==50.2.1
32
32
  # via howso-visuals (pyproject.toml)
33
33
  humanize==4.14.0
34
34
  # via howso-engine
@@ -60,7 +60,7 @@ mdurl==0.1.2
60
60
  # via markdown-it-py
61
61
  mmh3==5.2.0
62
62
  # via howso-engine
63
- narwhals==2.11.0
63
+ narwhals==2.12.0
64
64
  # via plotly
65
65
  networkx==3.5
66
66
  # via howso-visuals (pyproject.toml)
@@ -94,7 +94,7 @@ pandas==2.3.3
94
94
  # seaborn
95
95
  pillow==12.0.0
96
96
  # via matplotlib
97
- plotly[kaleido]==6.4.0
97
+ plotly[kaleido]==6.5.0
98
98
  # via howso-visuals (pyproject.toml)
99
99
  pluggy==1.6.0
100
100
  # via pytest
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # pip-compile --allow-unsafe --cert=None --client-cert=None --extra=dev --index-url=None --no-emit-index-url --output-file=requirements-3.12-dev.txt --pip-args=None
6
6
  #
7
- amalgam-lang==25.0.2
7
+ amalgam-lang==25.1.0
8
8
  # via howso-engine
9
9
  certifi==2025.11.12
10
10
  # via
@@ -18,7 +18,7 @@ choreographer==1.2.1
18
18
  # via kaleido
19
19
  contourpy==1.3.3
20
20
  # via matplotlib
21
- coverage[toml]==7.11.3
21
+ coverage[toml]==7.12.0
22
22
  # via pytest-cov
23
23
  cryptography==46.0.3
24
24
  # via howso-engine
@@ -28,13 +28,13 @@ deprecation==2.1.0
28
28
  # via howso-engine
29
29
  execnet==2.1.2
30
30
  # via pytest-xdist
31
- faker==38.0.0
31
+ faker==38.2.0
32
32
  # via howso-engine
33
33
  flake8==7.3.0
34
34
  # via howso-visuals (pyproject.toml)
35
35
  fonttools==4.60.1
36
36
  # via matplotlib
37
- howso-engine==50.1.0
37
+ howso-engine==50.2.1
38
38
  # via howso-visuals (pyproject.toml)
39
39
  humanize==4.14.0
40
40
  # via howso-engine
@@ -70,7 +70,7 @@ mdurl==0.1.2
70
70
  # via markdown-it-py
71
71
  mmh3==5.2.0
72
72
  # via howso-engine
73
- narwhals==2.11.0
73
+ narwhals==2.12.0
74
74
  # via plotly
75
75
  networkx==3.5
76
76
  # via howso-visuals (pyproject.toml)
@@ -107,7 +107,7 @@ pillow==12.0.0
107
107
  # via matplotlib
108
108
  platformdirs==4.5.0
109
109
  # via yapf
110
- plotly[kaleido]==6.4.0
110
+ plotly[kaleido]==6.5.0
111
111
  # via howso-visuals (pyproject.toml)
112
112
  pluggy==1.6.0
113
113
  # via
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-emit-index-url --output-file=requirements-3.12.txt --pip-args=None
6
6
  #
7
- amalgam-lang==25.0.2
7
+ amalgam-lang==25.1.0
8
8
  # via howso-engine
9
9
  certifi==2025.11.12
10
10
  # via
@@ -24,11 +24,11 @@ cycler==0.12.1
24
24
  # via matplotlib
25
25
  deprecation==2.1.0
26
26
  # via howso-engine
27
- faker==38.0.0
27
+ faker==38.2.0
28
28
  # via howso-engine
29
29
  fonttools==4.60.1
30
30
  # via matplotlib
31
- howso-engine==50.1.0
31
+ howso-engine==50.2.1
32
32
  # via howso-visuals (pyproject.toml)
33
33
  humanize==4.14.0
34
34
  # via howso-engine
@@ -60,7 +60,7 @@ mdurl==0.1.2
60
60
  # via markdown-it-py
61
61
  mmh3==5.2.0
62
62
  # via howso-engine
63
- narwhals==2.11.0
63
+ narwhals==2.12.0
64
64
  # via plotly
65
65
  networkx==3.5
66
66
  # via howso-visuals (pyproject.toml)
@@ -94,7 +94,7 @@ pandas==2.3.3
94
94
  # seaborn
95
95
  pillow==12.0.0
96
96
  # via matplotlib
97
- plotly[kaleido]==6.4.0
97
+ plotly[kaleido]==6.5.0
98
98
  # via howso-visuals (pyproject.toml)
99
99
  pluggy==1.6.0
100
100
  # via pytest
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # pip-compile --allow-unsafe --cert=None --client-cert=None --extra=dev --index-url=None --no-emit-index-url --output-file=requirements-3.13-dev.txt --pip-args=None
6
6
  #
7
- amalgam-lang==25.0.2
7
+ amalgam-lang==25.1.0
8
8
  # via howso-engine
9
9
  certifi==2025.11.12
10
10
  # via
@@ -18,7 +18,7 @@ choreographer==1.2.1
18
18
  # via kaleido
19
19
  contourpy==1.3.3
20
20
  # via matplotlib
21
- coverage[toml]==7.11.3
21
+ coverage[toml]==7.12.0
22
22
  # via pytest-cov
23
23
  cryptography==46.0.3
24
24
  # via howso-engine
@@ -28,13 +28,13 @@ deprecation==2.1.0
28
28
  # via howso-engine
29
29
  execnet==2.1.2
30
30
  # via pytest-xdist
31
- faker==38.0.0
31
+ faker==38.2.0
32
32
  # via howso-engine
33
33
  flake8==7.3.0
34
34
  # via howso-visuals (pyproject.toml)
35
35
  fonttools==4.60.1
36
36
  # via matplotlib
37
- howso-engine==50.1.0
37
+ howso-engine==50.2.1
38
38
  # via howso-visuals (pyproject.toml)
39
39
  humanize==4.14.0
40
40
  # via howso-engine
@@ -70,7 +70,7 @@ mdurl==0.1.2
70
70
  # via markdown-it-py
71
71
  mmh3==5.2.0
72
72
  # via howso-engine
73
- narwhals==2.11.0
73
+ narwhals==2.12.0
74
74
  # via plotly
75
75
  networkx==3.5
76
76
  # via howso-visuals (pyproject.toml)
@@ -107,7 +107,7 @@ pillow==12.0.0
107
107
  # via matplotlib
108
108
  platformdirs==4.5.0
109
109
  # via yapf
110
- plotly[kaleido]==6.4.0
110
+ plotly[kaleido]==6.5.0
111
111
  # via howso-visuals (pyproject.toml)
112
112
  pluggy==1.6.0
113
113
  # via
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # pip-compile --allow-unsafe --cert=None --client-cert=None --index-url=None --no-emit-index-url --output-file=requirements-3.13.txt --pip-args=None
6
6
  #
7
- amalgam-lang==25.0.2
7
+ amalgam-lang==25.1.0
8
8
  # via howso-engine
9
9
  certifi==2025.11.12
10
10
  # via
@@ -24,11 +24,11 @@ cycler==0.12.1
24
24
  # via matplotlib
25
25
  deprecation==2.1.0
26
26
  # via howso-engine
27
- faker==38.0.0
27
+ faker==38.2.0
28
28
  # via howso-engine
29
29
  fonttools==4.60.1
30
30
  # via matplotlib
31
- howso-engine==50.1.0
31
+ howso-engine==50.2.1
32
32
  # via howso-visuals (pyproject.toml)
33
33
  humanize==4.14.0
34
34
  # via howso-engine
@@ -60,7 +60,7 @@ mdurl==0.1.2
60
60
  # via markdown-it-py
61
61
  mmh3==5.2.0
62
62
  # via howso-engine
63
- narwhals==2.11.0
63
+ narwhals==2.12.0
64
64
  # via plotly
65
65
  networkx==3.5
66
66
  # via howso-visuals (pyproject.toml)
@@ -94,7 +94,7 @@ pandas==2.3.3
94
94
  # seaborn
95
95
  pillow==12.0.0
96
96
  # via matplotlib
97
- plotly[kaleido]==6.4.0
97
+ plotly[kaleido]==6.5.0
98
98
  # via howso-visuals (pyproject.toml)
99
99
  pluggy==1.6.0
100
100
  # via pytest
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes