import numpy
import scipy
from scipy.interpolate import UnivariateSpline, splrep

class PeriodicUnivariateSpline(UnivariateSpline):
    def __init__(self, x, y, w=None, bbox=[None]*2, k=3, s=0):
        #_data == x,y,w,xb,xe,k,s,n,t,c,fp,fpint,nrdata,ier
        tck, fp, ier, msg = splrep(x, y, k=k, w=w, xb=bbox[0], xe=bbox[1],
                                   s=0, per=1, full_output=1)
        self._data = (x,y,w,bbox[0],bbox[1],k,s,len(tck[0]),tck[0],tck[1],
                      fp,None,None,ier)
        self._reset_class()

x = array([ 0.003     ,  0.006     ,  0.008     ,  0.00800001,  0.012     ,
        0.014     ,  0.016     ,  0.02      ,  0.02000001,  0.024     ,
        0.026     ,  0.028     ,  0.032     ,  0.037     ,  0.039     ,
        0.03900001,  0.042     ,  0.044     ,  0.046     ,  0.04600001,
        0.052     ,  0.05200001,  0.055     ,  0.056     ,  0.061     ,
        0.06100001,  0.062     ,  0.067     ,  0.073     ,  0.075     ,
        0.081     ,  0.084     ,  0.086     ,  0.08600001,  0.092     ,
        0.093     ,  0.094     ,  0.09400001,  0.095     ,  0.097     ,
        0.098     ,  0.099     ,  0.101     ,  0.10100001,  0.102     ,
        0.103     ,  0.104     ,  0.107     ,  0.10700001,  0.10700002,
        0.112     ,  0.117     ,  0.118     ,  0.119     ,  0.12      ,
        0.126     ,  0.127     ,  0.12700001,  0.128     ,  0.129     ,
        0.131     ,  0.133     ,  0.134     ,  0.136     ,  0.14      ,
        0.149     ,  0.151     ,  0.153     ,  0.157     ,  0.158     ,
        0.16      ,  0.163     ,  0.166     ,  0.169     ,  0.173     ,
        0.174     ,  0.179     ,  0.181     ,  0.186     ,  0.189     ,
        0.192     ,  0.19200001,  0.193     ,  0.199     ,  0.204     ,
        0.207     ,  0.208     ,  0.21      ,  0.211     ,  0.214     ,
        0.21400001,  0.215     ,  0.217     ,  0.21700001,  0.221     ,
        0.222     ,  0.225     ,  0.226     ,  0.228     ,  0.24      ,
        0.242     ,  0.24200001,  0.243     ,  0.246     ,  0.249     ,
        0.252     ,  0.257     ,  0.25700001,  0.25700002,  0.258     ,
        0.261     ,  0.272     ,  0.279     ,  0.289     ,  0.28900001,
        0.29      ,  0.292     ,  0.299     ,  0.304     ,  0.308     ,
        0.30800001,  0.311     ,  0.316     ,  0.318     ,  0.319     ,
        0.326     ,  0.328     ,  0.335     ,  0.33500001,  0.346     ,
        0.348     ,  0.349     ,  0.353     ,  0.354     ,  0.356     ,
        0.35600001,  0.357     ,  0.361     ,  0.365     ,  0.366     ,
        0.373     ,  0.37300001,  0.377     ,  0.382     ,  0.383     ,
        0.38300001,  0.389     ,  0.39      ,  0.391     ,  0.394     ,
        0.396     ,  0.402     ,  0.40200001,  0.406     ,  0.413     ,
        0.417     ,  0.425     ,  0.433     ,  0.435     ,  0.439     ,
        0.43900001,  0.43900002,  0.441     ,  0.444     ,  0.453     ,
        0.46      ,  0.46000001,  0.467     ,  0.469     ,  0.474     ,
        0.476     ,  0.478     ,  0.48      ,  0.481     ,  0.482     ,
        0.486     ,  0.487     ,  0.488     ,  0.48800001,  0.491     ,
        0.49100001,  0.497     ,  0.5       ,  0.501     ,  0.50100001,
        0.50100002,  0.508     ,  0.514     ,  0.51400001,  0.515     ,
        0.517     ,  0.519     ,  0.531     ,  0.535     ,  0.538     ,
        0.546     ,  0.547     ,  0.548     ,  0.55      ,  0.55000001,
        0.55000002,  0.552     ,  0.555     ,  0.558     ,  0.562     ,
        0.56200001,  0.566     ,  0.56600001,  0.571     ,  0.579     ,
        0.584     ,  0.6       ,  0.602     ,  0.608     ,  0.612     ,
        0.614     ,  0.616     ,  0.61600001,  0.618     ,  0.62      ,
        0.625     ,  0.626     ,  0.63      ,  0.631     ,  0.635     ,
        0.637     ,  0.64      ,  0.643     ,  0.647     ,  0.649     ,
        0.654     ,  0.656     ,  0.659     ,  0.65900001,  0.663     ,
        0.666     ,  0.669     ,  0.67      ,  0.67000001,  0.672     ,
        0.673     ,  0.675     ,  0.67500001,  0.679     ,  0.681     ,
        0.689     ,  0.691     ,  0.697     ,  0.69700001,  0.7       ,
        0.70000001,  0.703     ,  0.705     ,  0.708     ,  0.70800001,
        0.71      ,  0.712     ,  0.713     ,  0.716     ,  0.71600001,
        0.718     ,  0.733     ,  0.735     ,  0.736     ,  0.738     ,
        0.747     ,  0.75      ,  0.75000001,  0.755     ,  0.76      ,
        0.761     ,  0.763     ,  0.766     ,  0.776     ,  0.777     ,
        0.778     ,  0.783     ,  0.784     ,  0.78400001,  0.786     ,
        0.788     ,  0.791     ,  0.793     ,  0.794     ,  0.798     ,
        0.8       ,  0.802     ,  0.806     ,  0.809     ,  0.813     ,
        0.819     ,  0.82      ,  0.824     ,  0.828     ,  0.829     ,
        0.831     ,  0.83100001,  0.834     ,  0.844     ,  0.846     ,
        0.847     ,  0.85      ,  0.852     ,  0.854     ,  0.857     ,
        0.861     ,  0.862     ,  0.863     ,  0.865     ,  0.866     ,
        0.871     ,  0.876     ,  0.87600001,  0.879     ,  0.897     ,
        0.899     ,  0.902     ,  0.903     ,  0.90300001,  0.906     ,
        0.909     ,  0.911     ,  0.91100001,  0.914     ,  0.92      ,
        0.929     ,  0.931     ,  0.934     ,  0.94      ,  0.942     ,
        0.944     ,  0.946     ,  0.948     ,  0.953     ,  0.955     ,
        0.95500001,  0.959     ,  0.96      ,  0.965     ,  0.967     ,
        0.968     ,  0.971     ,  0.978     ,  0.983     ,  0.985     ,
        0.988     ,  0.99      ,  0.993     ,  0.99300001,  0.994     ,
        0.99400001,  0.996     ,  1.        ])

y = numpy.array([ 14.878,  14.864,  14.853,  14.857,  14.896,  14.855,  14.847,
        14.874,  14.837,  14.874,  14.879,  14.875,  14.86 ,  14.873,
        14.873,  14.871,  14.853,  14.878,  14.853,  14.857,  14.849,
        14.837,  14.841,  14.869,  14.883,  14.864,  14.86 ,  14.844,
        14.871,  14.826,  14.836,  14.811,  14.873,  14.8  ,  14.849,
        14.877,  14.831,  14.817,  14.829,  14.836,  14.872,  14.802,
        14.849,  14.828,  14.827,  14.848,  14.842,  14.855,  14.823,
        14.773,  14.791,  14.866,  14.804,  14.833,  14.822,  14.793,
        14.81 ,  14.777,  14.783,  14.795,  14.822,  14.77 ,  14.811,
        14.83 ,  14.852,  14.835,  14.799,  14.751,  14.78 ,  14.757,
        14.759,  14.736,  14.685,  14.74 ,  14.766,  14.688,  14.793,
        14.68 ,  14.798,  14.717,  14.758,  14.726,  14.694,  14.739,
        14.768,  14.697,  14.646,  14.674,  14.756,  14.774,  14.733,
        14.614,  14.66 ,  14.7  ,  14.64 ,  14.669,  14.638,  14.647,
        14.629,  14.645,  14.639,  14.609,  14.609,  14.589,  14.615,
        14.703,  14.599,  14.646,  14.637,  14.594,  14.595,  14.622,
        14.585,  14.583,  14.612,  14.602,  14.584,  14.597,  14.588,
        14.58 ,  14.6  ,  14.595,  14.589,  14.578,  14.561,  14.578,
        14.603,  14.584,  14.593,  14.573,  14.593,  14.588,  14.598,
        14.583,  14.581,  14.593,  14.573,  14.591,  14.593,  14.583,
        14.602,  14.578,  14.601,  14.574,  14.564,  14.607,  14.592,
        14.595,  14.587,  14.58 ,  14.584,  14.585,  14.606,  14.594,
        14.596,  14.608,  14.609,  14.603,  14.596,  14.616,  14.582,
        14.626,  14.626,  14.617,  14.624,  14.626,  14.618,  14.618,
        14.632,  14.634,  14.631,  14.615,  14.634,  14.617,  14.622,
        14.621,  14.645,  14.638,  14.626,  14.636,  14.661,  14.637,
        14.625,  14.613,  14.628,  14.641,  14.632,  14.658,  14.649,
        14.623,  14.632,  14.633,  14.637,  14.675,  14.646,  14.633,
        14.656,  14.652,  14.662,  14.688,  14.668,  14.64 ,  14.685,
        14.644,  14.671,  14.678,  14.675,  14.676,  14.665,  14.7  ,
        14.668,  14.696,  14.705,  14.671,  14.692,  14.696,  14.712,
        14.705,  14.716,  14.734,  14.696,  14.727,  14.715,  14.716,
        14.719,  14.727,  14.736,  14.716,  14.732,  14.692,  14.721,
        14.784,  14.737,  14.724,  14.739,  14.739,  14.714,  14.76 ,
        14.747,  14.735,  14.71 ,  14.766,  14.715,  14.734,  14.737,
        14.764,  14.75 ,  14.753,  14.751,  14.734,  14.775,  14.738,
        14.77 ,  14.759,  14.775,  14.79 ,  14.756,  14.758,  14.787,
        14.786,  14.758,  14.763,  14.76 ,  14.784,  14.759,  14.783,
        14.755,  14.783,  14.781,  14.797,  14.767,  14.79 ,  14.807,
        14.803,  14.834,  14.762,  14.819,  14.797,  14.809,  14.816,
        14.824,  14.836,  14.821,  14.775,  14.827,  14.802,  14.799,
        14.804,  14.837,  14.847,  14.797,  14.812,  14.834,  14.848,
        14.825,  14.826,  14.849,  14.844,  14.825,  14.827,  14.852,
        14.827,  14.843,  14.852,  14.854,  14.863,  14.859,  14.855,
        14.875,  14.849,  14.836,  14.86 ,  14.858,  14.853,  14.851,
        14.873,  14.886,  14.882,  14.881,  14.869,  14.868,  14.876,
        14.87 ,  14.869,  14.872,  14.874,  14.871,  14.876,  14.888,
        14.873,  14.881,  14.873,  14.881,  14.877,  14.875,  14.9  ,
        14.882,  14.883,  14.88 ,  14.863,  14.892,  14.89 ,  14.871,
        14.873,  14.857,  14.881,  14.875,  14.873,  14.875,  14.856,
        14.843,  14.87 ,  14.901])

pus = PeriodicUnivariateSpline(x,y)
pus_points = pus(numpy.linspace(0, 0.99, 100)) # Gives a bizarre answer