import pandas as pd

class Csv(object):
    """The core CSV input / output class.

    Args:
        path (str): The path of the input / output csv.

    Returns:
        A pandas dataframe representing the csv data.
    """

    def __init__(self, path, header=None):
        self._path = path
        self._header = header

        self._df = None
        self._t_set_size = None
        self._f_set_size = None
        self._features_matrix = None

    @property
    def df(self):
        if self._df is None:
            self._df = pd.read_csv(self._path, self._header)
        return self._df
    
    @property
    def t_set_size(self):
        if self._t_set_size is None:
            self._t_set_size = len(self.df.index)
        return self._t_set_size
    
    @property
    def f_set_size(self):
        if self._f_set_size is None:
            self._f_set_size = len(self.df.columns) - 1
        return self._f_set_size

    @property
    def features_matrix(self):
        if self._features_matrix is None:
            self._features_matrix = 
        return self._features_matrix
    