def summarize_paths(samples, cone_std=(<NUM_LIT:1.>, <NUM_LIT>, <NUM_LIT>), starting_value=<NUM_LIT:1.>):
cum_samples = ep.cum_returns(samples.T,<EOL>starting_value=starting_value).T<EOL>cum_mean = cum_samples.mean(axis=<NUM_LIT:0>)<EOL>cum_std = cum_samples.std(axis=<NUM_LIT:0>)<EOL>if isinstance(cone_std, (float, int)):<EOL><INDENT>cone_std = [cone_std]<EOL><DEDENT>cone_bounds = pd.DataFrame(columns=pd.Float64Index([]))<EOL>for num_std in cone_std:<EOL><INDENT>cone_bounds.loc[:, float(num_std)] = cum_mean + cum_std * num_std<EOL>cone_bounds.loc[:, float(-num_std)] = cum_mean - cum_std * num_std<EOL><DEDENT>return cone_bounds<EOL>
Gnerate the upper and lower bounds of an n standard deviation
cone of forecasted cumulative returns.

Parameters
----------
samples : numpy.ndarray
    Alternative paths, or series of possible outcomes.
cone_std : list of int/float
    Number of standard devations to use in the boundaries of
    the cone. If multiple values are passed, cone bounds will
    be generated for each value.

Returns
-------
samples : pandas.core.frame.DataFrame