Skip to content

Select operator

SelectOperator

Bases: Operator

Select operator filters records based on a single condition (record-wise filtering). Supports basic comparison operators with type-aware comparison logic.

Attributes:

Name Type Required Default Description
operand_key str - The key to check in each record
operand str - Comparison operator: =, !=, >, >=, <, <=
operand_val Any - Value to compare with
approximate_match bool False Use epsilon tolerance for numeric comparison
eps float 1e-9 Epsilon tolerance for approximate numeric comparison
Source code in blue/operators/select_operator.py
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
class SelectOperator(Operator):
    """
    Select operator filters records based on a single condition (record-wise filtering).
    Supports basic comparison operators with type-aware comparison logic.

    Attributes:
    ----------
    | Name               | Type  | Required | Default | Description                                           |
    |-------------------|-------|---------|--------|-------------------------------------------------------|
    | `operand_key`        | str   | :fontawesome-solid-circle-check: {.green-check}    | -      | The key to check in each record                       |
    | `operand`            | str   | :fontawesome-solid-circle-check: {.green-check}    | -      | Comparison operator: =, !=, >, >=, <, <=             |
    | `operand_val`        | Any   | :fontawesome-solid-circle-check: {.green-check}    | -      | Value to compare with                                  |
    | `approximate_match`  | bool  |    | False  | Use epsilon tolerance for numeric comparison          |
    | `eps`                | float |    | 1e-9   | Epsilon tolerance for approximate numeric comparison  |

    """

    PROPERTIES = {}

    name = "select"
    description = "Given an input data, filter data elements based on a specified condition by type-aware comparison (record-wise)"
    default_attributes = {
        "operand_key": {"type": "str", "description": "The key to check in each record", "required": True},
        "operand": {"type": "str", "description": "Comparison operator: =, !=, >, >=, <, <=", "required": True},
        "operand_val": {"type": "Any", "description": "Value to compare with", "required": True},
        "approximate_match": {"type": "bool", "description": "Use epsilon tolerance for numeric comparison", "required": False, "default": False},
        "eps": {"type": "float", "description": "Epsilon tolerance for approximate numeric comparison", "required": False, "default": 1e-9},
    }

    def __init__(self, description: str = None, properties: Dict[str, Any] = None):
        super().__init__(
            self.name,
            function=select_operator_function,
            description=description or self.description,
            properties=properties,
            validator=select_operator_validator,
            explainer=select_operator_explainer,
        )

    def _initialize_properties(self):
        super()._initialize_properties()

        # attribute definitions
        self.properties["attributes"] = self.default_attributes

select_operator_explainer(output, input_data, attributes)

Generate explanation for select operator execution.

Parameters:

Name Type Description Default
output Any

The output result from the operator execution.

required
input_data List[List[Dict[str, Any]]]

The input data that was processed.

required
attributes Dict[str, Any]

The attributes used for the operation.

required

Returns:

Type Description
Dict[str, Any]

Dictionary containing explanation of the operation.

Source code in blue/operators/select_operator.py
75
76
77
78
79
80
81
82
83
84
85
86
def select_operator_explainer(output: Any, input_data: List[List[Dict[str, Any]]], attributes: Dict[str, Any]) -> Dict[str, Any]:
    """Generate explanation for select operator execution.

    Parameters:
        output: The output result from the operator execution.
        input_data: The input data that was processed.
        attributes: The attributes used for the operation.

    Returns:
        Dictionary containing explanation of the operation.
    """
    return default_operator_explainer(output, input_data, attributes)

select_operator_function(input_data, attributes, properties=None)

Filter records based on a single condition (record-wise filtering).

Parameters:

Name Type Description Default
input_data List[List[Dict[str, Any]]]

List of JSON arrays (List[List[Dict[str, Any]]]), uses the first data source for filtering.

required
attributes Dict[str, Any]

Dictionary containing filtering parameters including operand_key, operand, operand_val, approximate_match, and eps.

required
properties Dict[str, Any]

Optional properties dictionary. Defaults to None.

None

Returns:

Type Description
List[List[Dict[str, Any]]]

List containing filtered records from the first data source.

Source code in blue/operators/select_operator.py
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def select_operator_function(input_data: List[List[Dict[str, Any]]], attributes: Dict[str, Any], properties: Dict[str, Any] = None) -> List[List[Dict[str, Any]]]:
    """Filter records based on a single condition (record-wise filtering).

    Parameters:
        input_data: List of JSON arrays (List[List[Dict[str, Any]]]), uses the first data source for filtering.
        attributes: Dictionary containing filtering parameters including operand_key, operand, operand_val, approximate_match, and eps.
        properties: Optional properties dictionary. Defaults to None.

    Returns:
        List containing filtered records from the first data source.
    """
    # Extract attributes
    operand_key = attributes.get('operand_key')
    operand = attributes.get('operand')
    operand_val = attributes.get('operand_val')
    approximate_match = attributes.get('approximate_match', False)
    eps = attributes.get('eps', 1e-9)

    # Validate input
    if not input_data or not input_data[0]:
        return []

    data = input_data[0]  # Use first data source

    # Filter records based on condition
    result = []
    for record in data:
        if operand_key not in record:
            continue
        record_value = record[operand_key]
        if _evaluate_condition(record_value, operand, operand_val, approximate_match, eps):
            result.append(record)
    return [result]

select_operator_validator(input_data, attributes, properties=None)

Validate select operator attributes.

Parameters:

Name Type Description Default
input_data List[List[Dict[str, Any]]]

List of JSON arrays (List[List[Dict[str, Any]]]) to validate.

required
attributes Dict[str, Any]

Dictionary containing operator attributes to validate.

required
properties Dict[str, Any]

Optional properties dictionary. Defaults to None.

None

Returns:

Type Description
bool

True if attributes are valid, False otherwise.

Source code in blue/operators/select_operator.py
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
def select_operator_validator(input_data: List[List[Dict[str, Any]]], attributes: Dict[str, Any], properties: Dict[str, Any] = None) -> bool:
    """Validate select operator attributes.

    Parameters:
        input_data: List of JSON arrays (List[List[Dict[str, Any]]]) to validate.
        attributes: Dictionary containing operator attributes to validate.
        properties: Optional properties dictionary. Defaults to None.

    Returns:
        True if attributes are valid, False otherwise.
    """
    try:
        if not default_operator_validator(input_data, attributes, properties):
            return False
    except Exception:
        return False

    # Business logic validation (types already checked by default validator)
    operand = attributes.get('operand')
    if operand and operand not in ['=', '!=', '>', '>=', '<', '<=']:
        return False

    eps = attributes.get('eps', 1e-9)
    if eps < 0:
        return False

    return True
Last update: 2025-10-08