Q:

Linear Regression using scipy. ODR fails (Not full rank at solution)

so was trying a linear regression with scipy.odr.  However, it failed miserably.  scipy.odr has worked for me before, and I don't see any errors in my code.  The only reason I can think of is that the slope may be too small but I don't see how that could bother scipy. 
Thank you for your help. 
The Code:
#! /usr/bin/env python3 -i
# -*- coding: iso-8859-1 -*-

import matplotlib.pyplot as plt
import numpy as np
from scipy.odr import *

fig = plt.figure()
ax1 = fig.add_subplot(111)

x   = np.linspace(0,1E15,10)
y   = 1E-15*x-2

ax1.set_xlim(-0.05E15,1.1E15)
ax1.set_ylim(-2.1, -0.7)

ax1.plot(x, y, 'o')

# Fit using odr
def f(B, x):
    return B[0]*x + B[1]    

linear = Model(f)
mydata = RealData(x, y)
myodr = ODR(mydata, linear, beta0=[1.,  2.]) 
myoutput = myodr.run()
myoutput.pprint()

a, b = myoutput.beta
sa, sb = myoutput.sd_beta

xp = np.linspace(ax1.get_xlim()[0], ax1.get_xlim()[1], 1000)
yp = a*xp+b

ax1.plot(xp,yp)

plt.show()

This is the resulting terminal output:
Beta: [ -4.84615388e-15   2.00000000e+00]
Beta Std Error: [  8.14077323e-16   0.00000000e+00]
Beta Covariance: [[  1.46153845e-31   0.00000000e+00]
 [  0.00000000e+00   0.00000000e+00]]
Residual Variance: 4.534412955465587
Inverse Condition #: 1.0
Reason(s) for Halting:
  Problem is not full rank at solution
  Parameter convergence

And this the resulting graphic:

edit: My code for the odr-regression comes from http://docs.scipy.org/doc/scipy/reference/odr.html 

A:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(111)
x   = np.linspace(0,1E15,10)
y   = 1E-15*x-2    
ax1.set_xlim(-0.05E15,1.1E15)
ax1.set_ylim(-2.1, -0.7)    
ax1.plot(x, y, 'o')
# Fit using odr

def f(B, x):
    return B[0]*x + B[1]

sx = np.std(x)
sy = np.std(y)
linear = Model(f)
mydata = RealData(x=x,y=y, sx=sx, sy=sy)
myodr = ODR(mydata, linear, beta0=[1.00000000e-15, 2.]) 
myoutput = myodr.run()
myoutput.pprint()

a, b = myoutput.beta
sa, sb = myoutput.sd_beta

xp = np.linspace(min(x), max(x), 1000)
yp = a*xp+b
ax1.plot(xp,yp)
plt.show()

