You could try splprep
:
In [21]: tck1, u1 = splprep([x, y], s=0, k=1)
In [22]: uu1 = np.linspace(u1[0], u1[-1], 101)
In [23]: plt.plot(*splev(uu1, tck1), '--')
Out[23]: [<matplotlib.lines.Line2D at 0x7fa5b462d4b0>]
This works with a parametric curve, thus sidesteps the fact that y(x) is not single-valued.