def test_list_prompting_error_concatenate_same_type(self): context = self._render_context( input_table=arrow_table({"A": ["1"], "B": ["2"]}) ) schema = ParamDType.List( inner_dtype=ParamDType.Column(column_types=frozenset({"number"})) ) with self.assertRaises(PromptingError) as cm: clean_value(schema, ["A", "B"], context) self.assertEqual( cm.exception.errors, [PromptingError.WrongColumnType(["A", "B"], "text", frozenset({"number"}))], )
def test_list_prompting_error_concatenate_different_type_to_text(self): context = self._render_context( input_table=arrow_table( {"A": [1], "B": pa.array([datetime.now()], pa.timestamp("ns"))} ) ) schema = ParamDType.List( inner_dtype=ParamDType.Column(column_types=frozenset({"text"})) ) with self.assertRaises(PromptingError) as cm: clean_value(schema, ["A", "B"], context) self.assertEqual( cm.exception.errors, [PromptingError.WrongColumnType(["A", "B"], None, frozenset({"text"}))], )
def test_list_dtype(self): # Check that ParamSpec's with List type produce correct nested DTypes param_spec = ParamSpec.from_dict( dict( id_name="p", type="list", child_parameters=[ { "id_name": "intparam", "type": "integer", "name": "my number" }, { "id_name": "colparam", "type": "column", "name": "my column" }, ], )) self.assertEqual( param_spec, ParamSpec.List( id_name="p", child_parameters=[ ParamSpec.Integer(id_name="intparam", name="my number"), ParamSpec.Column(id_name="colparam", name="my column"), ], ), ) dtype = param_spec.dtype expected_dtype = DT.List( DT.Dict({ "intparam": DT.Integer(), "colparam": DT.Column() })) # effectively do a deep compare with repr self.assertEqual(repr(dtype), repr(expected_dtype))
def dtype(self) -> Optional[ParamDType]: child_dtypes = { cp.id_name: cp.dtype for cp in self.child_parameters if cp.dtype } return ParamDType.List(ParamDType.Dict(child_dtypes))