def write_robberies(writer, row):
    print row
    writer.writerow(["year", "income0", "income1", "coeff0", "coeff1", "coeff2"])
    incomes = np.linspace(0, 1e6, 20)
    for year in range(2010, 2100+1):
        crime_fraction = np.sin(np.pi*incomes / 1e6) + random.uniform(.5, 1.5) * (1 + (year - 2010) / 200.0)
        crime = 200 * crime_fraction
        spline = UnivariateSpline(incomes, crime, s=10, k=2)
        conditional = SplineModelConditional.make_conditional_from_spline(spline, [0, 1e6])
        for jj in range(conditional.size()):
            row = [year, conditional.y0s[jj], conditional.y1s[jj]]
            row.extend(conditional.coeffs[jj])
            writer.writerow(row)
    def skew_gaussian_construct(ys, lps, low_segment, high_segment):
        mid_segment = SplineModelConditional.make_conditional_from_spline(InterpolatedUnivariateSpline(ys, lps, k=2), (low_segment.y1s[0], high_segment.y0s[0]))
        conditional = SplineModelConditional()
        conditional.add_segment(low_segment.y0s[0], low_segment.y1s[0], copy.copy(low_segment.coeffs[0]))
        for ii in range(mid_segment.size()):
            conditional.add_segment(mid_segment.y0s[ii], mid_segment.y1s[ii], mid_segment.coeffs[ii])
        conditional.add_segment(high_segment.y0s[0], high_segment.y1s[0], copy.copy(high_segment.coeffs[0]))

        try:
            conditional.rescale()
        except:
            return None

        return conditional
    def make_conditional(header, row, limits):
        # Look for a special case
        conditional = FeaturesInterpreter.features_to_gaussian(header, row, limits)
        if conditional is not None:
            return conditional

        conditional = FeaturesInterpreter.features_to_exponential(header, row, limits)
        if conditional is not None:
            return conditional

        conditional = FeaturesInterpreter.features_to_uniform(header, row, limits)
        if conditional is not None:
            return conditional

        spline = FeaturesInterpreter.best_spline(header, row, limits)
        conditional = SplineModelConditional.make_conditional_from_spline(spline, limits)
        return conditional.rescale()
    def skew_gaussian_construct(ys, lps, low_segment, high_segment):
        mid_segment = SplineModelConditional.make_conditional_from_spline(
            InterpolatedUnivariateSpline(ys, lps, k=2),
            (low_segment.y1s[0], high_segment.y0s[0]))
        conditional = SplineModelConditional()
        conditional.add_segment(low_segment.y0s[0], low_segment.y1s[0],
                                copy.copy(low_segment.coeffs[0]))
        for ii in range(mid_segment.size()):
            conditional.add_segment(mid_segment.y0s[ii], mid_segment.y1s[ii],
                                    mid_segment.coeffs[ii])
        conditional.add_segment(high_segment.y0s[0], high_segment.y1s[0],
                                copy.copy(high_segment.coeffs[0]))

        try:
            conditional.rescale()
        except:
            return None

        return conditional
    def make_conditional(header, row, limits):
        # Look for a special case
        conditional = FeaturesInterpreter.features_to_gaussian(
            header, row, limits)
        if conditional is not None:
            return conditional

        conditional = FeaturesInterpreter.features_to_exponential(
            header, row, limits)
        if conditional is not None:
            return conditional

        conditional = FeaturesInterpreter.features_to_uniform(
            header, row, limits)
        if conditional is not None:
            return conditional

        spline = FeaturesInterpreter.best_spline(header, row, limits)
        conditional = SplineModelConditional.make_conditional_from_spline(
            spline, limits)
        return conditional.rescale()