def draw_1D_positive_roots(self, ax, function, p_vals, slice_variable, 
                           range_slice, resolution=100, ylim=None,
                           line_dict=None, **kwargs):
    lines = self.line_1D_positive_roots(function, p_vals, slice_variable,
                                        range_slice, resolution=int(resolution))
    line_styles = ['-', '--', '..']
    colors = ['k', 'r', 'y']
    unique_R = {i[2] for i in lines}
    if line_dict == None:
        line_dict = {0:{'ls':'-','c':'k','lw':2.},
                     1:{'ls':':','c':'r','lw':2.},
                     2:{'ls':'--','c':'y','lw':2.}
                     }
        j = 0
        for i in unique_R:
            if i in line_dict:
                continue
            line_dict[i] = {'c':mt.cm.Spectral_r(j/len(unique_R)),
                            'ls':'--'}
    for i in lines:
        x = i[0]
        y = i[1]
        r = i[2]
        ax.plot(x, y, **line_dict[r])
    if slice_variable in self._latex:
        slice_variable = '$'+self._latex[slice_variable]+'$'
    if ylim is not None:
        ax.set_ylim(ylim)
    ax.set_xlabel(r'$\log_{10}$(' + slice_variable + ')')
    if isinstance(function, Expression):
        expr = function
    else:
        expr = Expression(function)
    ax.set_ylabel('$'+expr.latex(self._latex)+'$')
    return lines
def draw_1D_ss_function(self, ax, function, p_vals, 
                        slice_variable, range_slice, 
                        resolution=100, colors=None, included_cases=None, ylim = None, **kwargs):
    p_bounds = dict(p_vals)
    p_bounds[slice_variable] = range_slice
    if included_cases is not None:
        included_cases = [i.case_number for i in self(included_cases)]
        if self.number_of_cases < 1e5:
            valid_cases = self.valid_cases(p_bounds=p_bounds)
            valid_nonstrict = self.valid_cases(p_bounds=p_bounds, strict=False)
            hatched_cases = [i for i in valid_cases if i not in included_cases]
            valid_nonstrict = [i for i in valid_cases if i in included_cases]
            valid_cases = [i for i in valid_cases if i in included_cases]
            valid_nonstrict = [i for i in valid_cases if i not in valid_cases]
        else:
            valid_cases = [i for i in included_cases if self(i).is_valid(p_bounds=p_bounds)]
            valid_nonstrict = []
    else:
        valid_cases = self.valid_cases(p_bounds=p_bounds)
        valid_nonstrict = self.valid_cases(p_bounds=p_bounds, strict=False)
        valid_nonstrict = [i for i in valid_nonstrict if i not in valid_cases]
    if len(valid_cases)+len(valid_nonstrict) == 0:
        # fill black
        return
    valid_cases = valid_cases + valid_nonstrict#self.valid_cases(p_bounds=p_bounds)
    lines = list()
    ylim_t = None
    if 'color' not in kwargs:
        kwargs['color'] = 'k'
    for case in valid_cases:
        if colors is not None:
            if case in colors:
                kwargs['color'] = colors[case]
            else:
                kwargs.pop('color')
        pt = self(case).draw_1D_ss_function(ax, 
                                            function,
                                            p_vals,
                                            slice_variable, 
                                            range_slice,
                                            resolution=resolution,
                                            **kwargs)
        if pt is None:
            continue
        lines.append(pt)
        ydata = pt[0].get_ydata()
        miny = min(ydata)
        maxy = max(ydata)
        if ylim is None:
            if ylim_t is None:
                ylim_t = [min(ydata), max(ydata)]
            else:
                ylim_t = [min((ylim_t[0], miny)), max((ylim_t[1], maxy))]
    if ylim is None:
        ylim = ylim_t
    ax.set_ylim([ylim[0]-(ylim[1]-ylim[0])*0.1, ylim[1]+(ylim[1]-ylim[0])*0.1])
    ax.set_xlim(np.log10(range_slice))
    if slice_variable in self._latex:
        slice_variable = '$'+self._latex[slice_variable]+'$'
    ax.set_xlabel(r'$\log_{10}$(' + slice_variable + ')')
    if isinstance(function, Expression):
        expr = function
    else:
        expr = Expression(function)
    ax.set_ylabel('$'+expr.latex(self._latex)+'$')    
    return lines