def append()

in torcharrow/velox_rt/dataframe_cpu.py [0:0]


    def append(self, values: Iterable[Union[None, dict, tuple]]):
        it = iter(values)

        try:
            value = next(it)
            if value is None:
                if not self.dtype.nullable:
                    raise TypeError(
                        f"a tuple of type {self.dtype} is required, got None"
                    )
                else:
                    df = self.append([{f.name: None for f in self.dtype.fields}])
                    df._data.set_null_at(len(df) - 1)
                    return df

            elif isinstance(value, dict):
                assert self._data.children_size() == len(value)
                res = {}
                for k, v in value.items():
                    idx = self._data.type().get_child_idx(k)
                    child = self._data.child_at(idx)
                    dtype = self.dtype.fields[idx].dtype
                    child_col = ColumnFromVelox._from_velox(
                        self.device, dtype, child, True
                    )
                    child_col = child_col.append([v])
                    res[k] = child_col
                new_data = self._fromdata(res, self._mask + [False])

                return new_data.append(it)

            elif isinstance(value, tuple):
                assert self._data.children_size() == len(value)
                return self.append(
                    [{f.name: v for f, v in zip(self.dtype.fields, value)}]
                ).append(it)

            else:
                raise TypeError(
                    f"Unexpected value type to append to DataFrame: {type(value).__name__}, the value being appended is: {value}"
                )

        except StopIteration:
            return self