def __init__(self, returns, weight_bounds=(<NUM_LIT:0>, <NUM_LIT:1>)):
if not isinstance(returns, pd.DataFrame):<EOL><INDENT>raise TypeError("<STR_LIT>")<EOL><DEDENT>self.returns = returns<EOL>tickers = returns.columns<EOL>super().__init__(len(tickers), tickers, weight_bounds)<EOL>
:param returns: asset historical returns
:type returns: pd.DataFrame
:param weight_bounds: minimum and maximum weight of an asset, defaults to (0, 1).
                      Must be changed to (-1, 1) for portfolios with shorting.
                      For CVaR opt, this is not a hard boundary.
:type weight_bounds: tuple, optional
:raises TypeError: if ``returns`` is not a dataframe