Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "validmind"
version = "2.13.13"
version = "2.13.14"
description = "ValidMind Library"
readme = "README.pypi.md"
requires-python = ">=3.9,<3.15"
Expand Down
2 changes: 1 addition & 1 deletion r/validmind/DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Package: validmind
Type: Package
Title: Interface to the 'ValidMind' Platform
Version: 2.13.13
Version: 2.13.14
Authors@R: c(person("Andres", "Rodriguez", role = c("aut", "cre","cph"),
email = "andres@validmind.ai"))
Maintainer: Andres Rodriguez <andres@validmind.ai>
Expand Down
Empty file.
45 changes: 45 additions & 0 deletions tests/unit_tests/plots/test_BoxPlot.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import unittest

import pandas as pd
import validmind as vm
from plotly.graph_objects import Figure

from validmind.errors import SkipTestError
from validmind.tests.plots.BoxPlot import BoxPlot


class TestBoxPlot(unittest.TestCase):
def setUp(self):
df = pd.DataFrame(
{
"num1": [1.0, 2.0, 3.0, 4.0],
"num2": [10, 20, 30, 40],
"cat": ["a", "b", "a", "b"],
"target": [0, 1, 0, 1],
}
)
self.vm_dataset = vm.init_dataset(
input_id="dataset", dataset=df, target_column="target", __log=False
)

def test_default_columns_uses_numeric_features(self):
# Regression: columns=None used to raise KeyError("None of [Index([None]...")
fig = BoxPlot(self.vm_dataset)
self.assertIsInstance(fig, Figure)
self.assertEqual(sorted(t.name for t in fig.data), ["num1", "num2"])

def test_explicit_columns_filtered_to_numeric(self):
fig = BoxPlot(self.vm_dataset, columns=["num1", "cat", "missing"])
self.assertEqual([t.name for t in fig.data], ["num1"])

def test_group_by(self):
fig = BoxPlot(self.vm_dataset, columns=["num1"], group_by="cat")
self.assertEqual(len(fig.data), 2)

def test_no_numeric_columns_skips(self):
with self.assertRaises(SkipTestError):
BoxPlot(self.vm_dataset, columns=["cat"])


if __name__ == "__main__":
unittest.main()
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion validmind/__version__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "2.13.13"
__version__ = "2.13.14"
18 changes: 4 additions & 14 deletions validmind/tests/plots/BoxPlot.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

from typing import List, Optional

import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots

Expand All @@ -18,21 +17,12 @@ def _validate_inputs(
):
"""Validate inputs and return validated columns."""

# Get dtypes without loading data into memory
if not isinstance(columns, list):
columns = [columns]

columns_dtypes = dataset._df[columns].dtypes

columns_numeric = []
columns_numeric = columns_dtypes[
columns_dtypes.apply(lambda x: pd.api.types.is_numeric_dtype(x))
].index.tolist()

if columns is None:
columns = columns_numeric
columns = list(dataset.feature_columns_numeric)
else:
available_columns = set(columns_numeric)
if not isinstance(columns, list):
columns = [columns]
available_columns = set(dataset.feature_columns_numeric)
columns = [col for col in columns if col in available_columns]

if not columns:
Expand Down
Loading