Source code for meerkat.columns.scalar.abstract

from typing import List, Tuple, Union

import numpy as np
import pandas as pd
import pyarrow as pa
import torch

from meerkat.block.abstract import BlockView
from meerkat.block.arrow_block import ArrowBlock
from meerkat.block.pandas_block import PandasBlock

from ..abstract import Column

ScalarColumnTypes = Union[np.ndarray, torch.TensorType, pd.Series, List]


[docs]class ScalarColumn(Column): def __new__(cls, data: ScalarColumnTypes = None, backend: str = None): from .arrow import ArrowScalarColumn from .pandas import PandasScalarColumn if (cls is not ScalarColumn) or (data is None): return super().__new__(cls) backends = {"arrow": ArrowScalarColumn, "pandas": PandasScalarColumn} if backend is not None: if backend not in backends: raise ValueError( f"Cannot create `ScalarColumn` with backend '{backend}'. " f"Expected one of {list(backends.keys())}" ) else: return super().__new__(backends[backend]) if isinstance(data, BlockView): if isinstance(data.block, PandasBlock): return super().__new__(PandasScalarColumn) elif isinstance(data.block, ArrowBlock): return super().__new__(ArrowScalarColumn) if isinstance(data, (np.ndarray, torch.TensorType, pd.Series, List, Tuple)): return super().__new__(PandasScalarColumn) elif isinstance(data, pa.Array): return super().__new__(ArrowScalarColumn) else: raise ValueError( f"Cannot create `ScalarColumn` from object of type {type(data)}." )