Hello all:
Today I decided to try out the new VirtualBox/PuppyLinux virtual
machine for Windows users. It seems much nicer than the prior version
and I want to update my tutorial to make reference to it.
Also I wanted to see if I experienced the same issue I've been
experiencing with 4.1.2 running (or not running) my existing 4.1.1
worksheets, e.g. a message saying "NameError: name 'sagenb' is not
defined" on execution of a rather complex cell.
Imagine my surprise when I ran the new VM using VirtualBox under
Windows, uploaded my worksheets into it, and got the same result as on
my usual Fedora 11 platform: "NameError: name 'sagenb' is not
defined". This is true for any worksheet cell above a certain
complexity level (or a series of such cells).
So I tried a few different ways to transfer the worksheets. I used the
4.1.2 "download all" feature to create a zip file of all my worksheets
and uploaded them all into the PuppyLinux/VirtualBox Sage VM runnin
gunder Windows, but with the same result.
Then I ran Sage 4.1.1 and created a zip archive of the old (4.1.1)
versions of the worksheets and tried uploading them into the
VirtualBox/PuppyLinux Sage 4.1.2 version, but that caused Sage to lock
up with a message saying "Searching for Sage Server ...". Things went
downhill from there and I finally had to reinstall the Sage VM under
VirtualBox. Which leads me to offer this warning -- don't try to
transfer pre-4.1.2 worksheets using the browser-based download/upload
cycle, as this may well disable the VM under Windows and require
reinstallation.
Summary of the problem: basically, for any invocation of Sage 4.1.2,
it seems some worksheets, above a certain complexity level, will /
always/ cause the error described above.
Here is a simple duplication procedure for anyone running Sage 4.1.2
-- it involves creating a new, empty worksheet, pasting the two cell
contents below into it, and executing them.
1. Create a new, empty worksheet under Sage 4.1.2.
2. Copy the content shown below between the asterisk lines into two
separate Sage worksheet cells.
3. Execute the first cell -- sometimes this causes the error message,
sometimes not.
4. Execute the second cell -- this always creates the error message
(in my experience).
******************* BEGIN Cell 1 content
********************************
%auto
reset()
forget()
# special equation rendering
def render(x,name = "temp.png",size = "normal"):
if(type(x) != type("")): x = latex(x)
latex.eval("\\" + size + " $" + x + "$",{},"",name)
var('a b c d e f g h j k l x y z')
class Pair:
def __init__(self,d):
self.x = d[0]
self.y = d[1]
def __repr__(self):
return "%e,%e" % (self.x,self.y)
def show_mat(data):
yt = len(data)
xt = len(data[0])
for y in range(yt):
for x in range(xt):
sys.stdout.write("%12g " % data[y][x])
print("")
print("****")
def show_mat_latex(data,fn):
yt = len(data)
xt = len(data[0])
ya = []
for y in range(yt):
xa = []
for x in range(xt):
xa.append("%12g " % data[y][x])
ya.append(join(xa," & "))
ys = join(ya,"\\\\")
# specify right justification
cstr = "r" * xt
mat = "$\\left( \\begin{array}{%s}" % cstr
mat += ys
mat += "\\end{array}\\right)$"
render(mat,fn)
print ""
# example data
data1 = [
[-1,-1],
[0,3],
[1,2.5],
[2,5],
[3,4],
[5,2],
[7,5],
[9,4]
]
def set_data(x):
return [Pair(n) for n in x]
# polynomial regression of order "p"
def polyregress(data,p,debug = False):
# matrix rows and columns = p+1
p += 1
n = len(data)
# precalculate matrix cell data array
mda = [n] + [sum(data[a].x^b for a in range(n)) for b in range
(1,2*p-1)]
# create/populate square matrix with appended column
m = [[mda[r+c] for c in range(p)] + [0.0] for r in range(p)]
if debug: show_mat_latex(m,"nmat2.png")
# populate RH appended column
for v in data: m[0][p] += v.y
for r in range(1,p):
m[r][p] = sum(v.x^r*v.y for v in data)
if debug: show_mat_latex(m,"nmat3.png")
# reduce matrix
mm=Matrix(RR,m)
mm.echelonize()
if debug: show_mat_latex(mm.rows(),"nmat4.png")
# extract result column
a = mm.column(p).list()
# build term list
y = 0
for j in range(p):
y += a[j]*x^j
return y
# correlation coefficient (r^2)
def corr_coeff(data,fy):
r = 0
sx = sx2 = sy = sy2 = sxy = 0
n = len(data)
for v in data:
x = fy(x=v.x)
y = v.y
sx += x
sy += y
sxy += x * y
sx2 += x * x
sy2 += y * y
divisor = sqrt((sx2 - (sx*sx)/n) * (sy2 - (sy*sy)/n))
if(divisor != 0):
r = ((sxy-(sx*sy)/n)/divisor)^2
return r
# standard error
def std_error(data,fy):
r = 0
n = len(data);
if(n > 2):
a = 0
for v in data:
a += (fy(x=v.x) - v.y)^2
r = sqrt(a/(n-2))
return r
# data range
def list_minmax(data):
max = -1e6
min = 1e6
for v in data:
if(max < v.x): max = v.x
if(min > v.x): min = v.x
return(min,max)
******************* END Cell 1 content
**********************************
******************* BEGIN Cell 2 content
********************************
# interactive version
data = set_data(data1)
mp = len(data)-1
@interact
def _(p = (0..mp)):
y = polyregress(data,p)
dp = list_plot([[data[n].x,data[n].y] for n in range(len
(data))],rgbcolor='red')
lp = plot(y,x,list_minmax(data))
cc = corr_coeff(data,y)
se = std_error(data,y)
lbl = text("correlation coefficient (r^2): %f\nStandard error: %f"
% (cc,se),(5,-2),rgbcolor='black',fontsize=10)
show(dp+lp+lbl,ymin=-5,ymax=7)
******************* END Cell 2 content
**********************************
After copying, pasting and running the two cells, you should see the
error message "NameError: name 'sagenb' is not defined" after either
running the first or second cell. And once the message has appeared,
it will appear on an attempt to run any subsequent cell, like this
one:
2^32
I think this is an actual bug, not a transient artifact of a
particular installation.
Other notes:
1. The file README.txt bundled with the new Sage/Puppy Linux/
VirtualBox virtual machine has Linux line endings, needs to be
converted using "unix2dos" for Windows users. The file is an important
rundown on how to install the VM, and the default Windows text editor
is too dumb to sort out line endings.
2. Under Windows and while using MSIE 8, on creating a new worksheet,
the popup dialog to enter a name is suppressed by default and this
cannot be overridden for some reason. But the worksheet can be renamed
later using the File menu.
3. Moving to Puppy Linux and VirtualBox was a smart move. They are
both better choices that the previous arrangement.
Thanks for reading!
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send an email to [email protected]
To unsubscribe from this group, send an email to
[email protected]
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---