Source code for ewoksxas.converters.tests.test_orange

"""Tests for the Converter class."""

import numpy as np
import pytest
from Orange.data import StringVariable

from ewoksxas.converters.orange import Converter


[docs] def test_empty_initialization(): """Test that Converter can be initialized empty.""" converter = Converter() assert converter._features is None assert len(converter.metas) == 0 assert len(converter.targets) == 0
[docs] def test_add_features_first_call(): """Test adding features for the first time.""" x = np.array([1.0, 2.0, 3.0]) y = np.array([[0.1, 0.2, 0.3]]) converter = Converter().add_features(x, y) names, data = converter.features assert np.array_equal(names, x) assert np.array_equal(data, y)
[docs] def test_add_features_1d_data(): """Test that 1D feature_data is reshaped to 2D.""" x = np.array([1.0, 2.0, 3.0]) y = np.array([0.1, 0.2, 0.3]) # 1D converter = Converter().add_features(x, y) _, data = converter.features assert data.shape == (1, 3) assert np.array_equal(data[0], y)
[docs] def test_add_features_shape_mismatch(): """Test that shape mismatch raises ValueError.""" x = np.array([1.0, 2.0, 3.0]) y = np.array([[0.1, 0.2]]) # Wrong shape with pytest.raises(ValueError, match="Shape mismatch between names"): Converter().add_features(x, y)
[docs] def test_add_features_append(): """Test appending rows to existing features.""" x = np.array([1.0, 2.0, 3.0]) y1 = np.array([[0.1, 0.2, 0.3]]) y2 = np.array([[0.4, 0.5, 0.6]]) converter = Converter().add_features(x, y1) converter.add_features(x, y2, replace=False) _, data = converter.features assert data.shape == (2, 3) assert np.array_equal(data[0], y1[0]) assert np.array_equal(data[1], y2[0])
[docs] def test_add_features_append_mismatch(): """Test that appending with mismatched feature_names raises error.""" x1 = np.array([1.0, 2.0, 3.0]) x2 = np.array([1.5, 2.5, 3.5]) # Different y1 = np.array([[0.1, 0.2, 0.3]]) y2 = np.array([[0.4, 0.5, 0.6]]) converter = Converter().add_features(x1, y1) with pytest.raises( ValueError, match="Cannot append features because names do not match" ): converter.add_features(x2, y2, replace=False)
[docs] def test_add_features_replace(): """Test replacing existing features.""" x1 = np.array([1.0, 2.0, 3.0]) x2 = np.array([4.0, 5.0, 6.0]) y1 = np.array([[0.1, 0.2, 0.3]]) y2 = np.array([[0.7, 0.8, 0.9]]) converter = Converter().add_features(x1, y1) converter.add_features(x2, y2, replace=True) names, data = converter.features assert np.array_equal(names, x2) assert np.array_equal(data, y2)
[docs] def test_add_features_then_metas(): """Test adding features then metas.""" x = np.array([1.0, 2.0, 3.0]) y = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]) labels = np.array(["A", "B"]) converter = ( Converter() .add_features(x, y) .add_meta("Label", labels, var_type=StringVariable) ) table = converter.to_table() assert len(table) == 2 assert len(table.domain.attributes) == 3 assert len(table.domain.metas) == 1
[docs] def test_add_metas_then_features(): """Test adding metas then features.""" x = np.array([1.0, 2.0, 3.0]) y = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]) labels = np.array(["A", "B"]) converter = ( Converter() .add_meta("Label", labels, var_type=StringVariable) .add_features(x, y) ) table = converter.to_table() assert len(table) == 2 assert len(table.domain.attributes) == 3 assert len(table.domain.metas) == 1
[docs] def test_to_table_empty(): """Test creating an empty table.""" converter = Converter() table = converter.to_table() assert len(table) == 0 assert len(table.domain.attributes) == 0
[docs] def test_to_table_features_only(): """Test creating a table with features only.""" x = np.array([1.0, 2.0, 3.0]) y = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]) converter = Converter().add_features(x, y) table = converter.to_table() assert len(table) == 2 assert len(table.domain.attributes) == 3 assert len(table.domain.metas) == 0
[docs] def test_to_table_metas_only(): """Test creating a table with metas only.""" labels = np.array(["A", "B", "C"]) converter = Converter().add_meta("Label", labels, var_type=StringVariable) table = converter.to_table() assert len(table) == 3 assert len(table.domain.attributes) == 0 assert len(table.domain.metas) == 1
[docs] def test_round_trip(): """Test round-trip conversion: Converter -> Table -> Converter.""" x = np.array([1.0, 2.0, 3.0]) y = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]]) labels = np.array(["A", "B"]) # Create table table = ( Converter() .add_features(x, y) .add_meta("Label", labels, var_type=StringVariable) .to_table() ) # Convert back converter = Converter.from_table(table) names, data = converter.features # Verify assert np.allclose(names, x) assert np.allclose(data, y) assert len(converter.metas) == 1
[docs] def test_features_property(): """Test the features property returns correct tuple.""" x = np.array([1.0, 2.0, 3.0]) y = np.array([[0.1, 0.2, 0.3]]) converter = Converter().add_features(x, y) names, data = converter.features assert np.array_equal(names, x) assert np.array_equal(data, y)
[docs] def test_features_property_empty(): """Test that features property raises error when no features set.""" converter = Converter() with pytest.raises(ValueError, match="no features data"): _ = converter.features