def __init__(self, n_assets, tickers=None, weight_bounds=(<NUM_LIT:0>, <NUM_LIT:1>)):
super().__init__(n_assets, tickers)<EOL>self.bounds = self._make_valid_bounds(weight_bounds)<EOL>self.initial_guess = np.array([<NUM_LIT:1> / self.n_assets] * self.n_assets)<EOL>self.constraints = [{"<STR_LIT:type>": "<STR_LIT>", "<STR_LIT>": lambda x: np.sum(x) - <NUM_LIT:1>}]<EOL>
:param weight_bounds: minimum and maximum weight of an asset, defaults to (0, 1).
                      Must be changed to (-1, 1) for portfolios with shorting.
:type weight_bounds: tuple, optional