From fbecff07adaa1c96b99bc8968328fa492cf6468d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20Wobst?= Date: Mon, 26 Jun 2006 05:52:26 +0000 Subject: [PATCH] bring back some first preliminary graphxyz code git-svn-id: https://pyx.svn.sourceforge.net/svnroot/pyx/trunk/pyx@2831 069f4177-920e-0410-937b-c2a4a81bcd90 --- pyx/graph/__init__.py | 2 +- pyx/graph/graph.py | 517 +++++++++--------- pyx/graph/style.py | 217 ++++++-- test/functional/data/husimi_small.dat | 961 ++++++++++++++++++++++++++++++++++ test/functional/test_graph3d.py | 33 ++ 5 files changed, 1437 insertions(+), 293 deletions(-) create mode 100644 test/functional/data/husimi_small.dat create mode 100755 test/functional/test_graph3d.py diff --git a/pyx/graph/__init__.py b/pyx/graph/__init__.py index 28ca31b0..5e2c65ce 100644 --- a/pyx/graph/__init__.py +++ b/pyx/graph/__init__.py @@ -25,7 +25,7 @@ for module in __allmodules__: __import__(module, globals(), locals(), []) import graph -__allgraph__ = ["graphxy"] +__allgraph__ = ["graphxy", "graphxyz"] for importfromgraph in __allgraph__: locals()[importfromgraph] = getattr(graph, importfromgraph) diff --git a/pyx/graph/graph.py b/pyx/graph/graph.py index 76eaebdd..780bdbc6 100644 --- a/pyx/graph/graph.py +++ b/pyx/graph/graph.py @@ -204,11 +204,17 @@ class graph(canvas.canvas): plotitem.adjustaxesdynamic(self) self.didranges = 1 + def doaxiscreate(self, axisname): + if self.did(self.doaxiscreate, axisname): + return + self.doaxispositioner(axisname) + self.axes[axisname].create() + def dolayout(self): raise NotImplementedError def dobackground(self): - raise NotImplementedError + pass def doaxes(self): raise NotImplementedError @@ -443,12 +449,6 @@ class graphxy(graph): x_pt, self.ypos_pt + self.height_pt, (sign, 0), self.yvgridpath)) - def doaxiscreate(self, axisname): - if self.did(self.doaxiscreate, axisname): - return - self.doaxispositioner(axisname) - self.axes[axisname].create() - def dolayout(self): if self.did(self.dolayout): return @@ -496,245 +496,264 @@ class graphxy(graph): self.insert(c, [trafo.translate_pt(x, y)]) -# some thoughts, but deferred right now -# -# class graphxyz(graphxy): -# -# axisnames = "x", "y", "z" -# -# def _vxtickpoint(self, axis, v): -# return self._vpos(v, axis.vypos, axis.vzpos) -# -# def _vytickpoint(self, axis, v): -# return self._vpos(axis.vxpos, v, axis.vzpos) -# -# def _vztickpoint(self, axis, v): -# return self._vpos(axis.vxpos, axis.vypos, v) -# -# def vxtickdirection(self, axis, v): -# x1, y1 = self._vpos(v, axis.vypos, axis.vzpos) -# x2, y2 = self._vpos(v, 0.5, 0) -# dx, dy = x1 - x2, y1 - y2 -# norm = math.hypot(dx, dy) -# return dx/norm, dy/norm -# -# def vytickdirection(self, axis, v): -# x1, y1 = self._vpos(axis.vxpos, v, axis.vzpos) -# x2, y2 = self._vpos(0.5, v, 0) -# dx, dy = x1 - x2, y1 - y2 -# norm = math.hypot(dx, dy) -# return dx/norm, dy/norm -# -# def vztickdirection(self, axis, v): -# return -1, 0 -# x1, y1 = self._vpos(axis.vxpos, axis.vypos, v) -# x2, y2 = self._vpos(0.5, 0.5, v) -# dx, dy = x1 - x2, y1 - y2 -# norm = math.hypot(dx, dy) -# return dx/norm, dy/norm -# -# def _pos(self, x, y, z, xaxis=None, yaxis=None, zaxis=None): -# if xaxis is None: xaxis = self.axes["x"] -# if yaxis is None: yaxis = self.axes["y"] -# if zaxis is None: zaxis = self.axes["z"] -# return self._vpos(xaxis.convert(x), yaxis.convert(y), zaxis.convert(z)) -# -# def pos(self, x, y, z, xaxis=None, yaxis=None, zaxis=None): -# if xaxis is None: xaxis = self.axes["x"] -# if yaxis is None: yaxis = self.axes["y"] -# if zaxis is None: zaxis = self.axes["z"] -# return self.vpos(xaxis.convert(x), yaxis.convert(y), zaxis.convert(z)) -# -# def _vpos(self, vx, vy, vz): -# x, y, z = (vx - 0.5)*self._depth, (vy - 0.5)*self._width, (vz - 0.5)*self._height -# d0 = float(self.a[0]*self.b[1]*(z-self.eye[2]) -# + self.a[2]*self.b[0]*(y-self.eye[1]) -# + self.a[1]*self.b[2]*(x-self.eye[0]) -# - self.a[2]*self.b[1]*(x-self.eye[0]) -# - self.a[0]*self.b[2]*(y-self.eye[1]) -# - self.a[1]*self.b[0]*(z-self.eye[2])) -# da = (self.eye[0]*self.b[1]*(z-self.eye[2]) -# + self.eye[2]*self.b[0]*(y-self.eye[1]) -# + self.eye[1]*self.b[2]*(x-self.eye[0]) -# - self.eye[2]*self.b[1]*(x-self.eye[0]) -# - self.eye[0]*self.b[2]*(y-self.eye[1]) -# - self.eye[1]*self.b[0]*(z-self.eye[2])) -# db = (self.a[0]*self.eye[1]*(z-self.eye[2]) -# + self.a[2]*self.eye[0]*(y-self.eye[1]) -# + self.a[1]*self.eye[2]*(x-self.eye[0]) -# - self.a[2]*self.eye[1]*(x-self.eye[0]) -# - self.a[0]*self.eye[2]*(y-self.eye[1]) -# - self.a[1]*self.eye[0]*(z-self.eye[2])) -# return da/d0 + self._xpos, db/d0 + self._ypos -# -# def vpos(self, vx, vy, vz): -# tx, ty = self._vpos(vx, vy, vz) -# return unit.t_pt(tx), unit.t_pt(ty) -# -# def xbaseline(self, axis, x1, x2, xaxis=None): -# if xaxis is None: xaxis = self.axes["x"] -# return self.vxbaseline(axis, xaxis.convert(x1), xaxis.convert(x2)) -# -# def ybaseline(self, axis, y1, y2, yaxis=None): -# if yaxis is None: yaxis = self.axes["y"] -# return self.vybaseline(axis, yaxis.convert(y1), yaxis.convert(y2)) -# -# def zbaseline(self, axis, z1, z2, zaxis=None): -# if zaxis is None: zaxis = self.axes["z"] -# return self.vzbaseline(axis, zaxis.convert(z1), zaxis.convert(z2)) -# -# def vxbaseline(self, axis, v1, v2): -# return (path._line(*(self._vpos(v1, 0, 0) + self._vpos(v2, 0, 0))) + -# path._line(*(self._vpos(v1, 0, 1) + self._vpos(v2, 0, 1))) + -# path._line(*(self._vpos(v1, 1, 1) + self._vpos(v2, 1, 1))) + -# path._line(*(self._vpos(v1, 1, 0) + self._vpos(v2, 1, 0)))) -# -# def vybaseline(self, axis, v1, v2): -# return (path._line(*(self._vpos(0, v1, 0) + self._vpos(0, v2, 0))) + -# path._line(*(self._vpos(0, v1, 1) + self._vpos(0, v2, 1))) + -# path._line(*(self._vpos(1, v1, 1) + self._vpos(1, v2, 1))) + -# path._line(*(self._vpos(1, v1, 0) + self._vpos(1, v2, 0)))) -# -# def vzbaseline(self, axis, v1, v2): -# return (path._line(*(self._vpos(0, 0, v1) + self._vpos(0, 0, v2))) + -# path._line(*(self._vpos(0, 1, v1) + self._vpos(0, 1, v2))) + -# path._line(*(self._vpos(1, 1, v1) + self._vpos(1, 1, v2))) + -# path._line(*(self._vpos(1, 0, v1) + self._vpos(1, 0, v2)))) -# -# def xgridpath(self, x, xaxis=None): -# assert 0 -# if xaxis is None: xaxis = self.axes["x"] -# v = xaxis.convert(x) -# return path._line(self._xpos+v*self._width, self._ypos, -# self._xpos+v*self._width, self._ypos+self._height) -# -# def ygridpath(self, y, yaxis=None): -# assert 0 -# if yaxis is None: yaxis = self.axes["y"] -# v = yaxis.convert(y) -# return path._line(self._xpos, self._ypos+v*self._height, -# self._xpos+self._width, self._ypos+v*self._height) -# -# def zgridpath(self, z, zaxis=None): -# assert 0 -# if zaxis is None: zaxis = self.axes["z"] -# v = zaxis.convert(z) -# return path._line(self._xpos, self._zpos+v*self._height, -# self._xpos+self._width, self._zpos+v*self._height) -# -# def vxgridpath(self, v): -# return path.path(path._moveto(*self._vpos(v, 0, 0)), -# path._lineto(*self._vpos(v, 0, 1)), -# path._lineto(*self._vpos(v, 1, 1)), -# path._lineto(*self._vpos(v, 1, 0)), -# path.closepath()) -# -# def vygridpath(self, v): -# return path.path(path._moveto(*self._vpos(0, v, 0)), -# path._lineto(*self._vpos(0, v, 1)), -# path._lineto(*self._vpos(1, v, 1)), -# path._lineto(*self._vpos(1, v, 0)), -# path.closepath()) -# -# def vzgridpath(self, v): -# return path.path(path._moveto(*self._vpos(0, 0, v)), -# path._lineto(*self._vpos(0, 1, v)), -# path._lineto(*self._vpos(1, 1, v)), -# path._lineto(*self._vpos(1, 0, v)), -# path.closepath()) -# -# def _addpos(self, x, y, dx, dy): -# assert 0 -# return x+dx, y+dy -# -# def _connect(self, x1, y1, x2, y2): -# assert 0 -# return path._lineto(x2, y2) -# -# def doaxes(self): -# self.dolayout() -# if not self.removedomethod(self.doaxes): return -# axesdist_pt = unit.topt(self.axesdist) -# XPattern = re.compile(r"%s([2-9]|[1-9][0-9]+)?$" % self.axisnames[0]) -# YPattern = re.compile(r"%s([2-9]|[1-9][0-9]+)?$" % self.axisnames[1]) -# ZPattern = re.compile(r"%s([2-9]|[1-9][0-9]+)?$" % self.axisnames[2]) -# items = list(self.axes.items()) -# items.sort() #TODO: alphabetical sorting breaks for axis numbers bigger than 9 -# for key, axis in items: -# num = self.keynum(key) -# num2 = 1 - num % 2 # x1 -> 0, x2 -> 1, x3 -> 0, x4 -> 1, ... -# num3 = 1 - 2 * (num % 2) # x1 -> -1, x2 -> 1, x3 -> -1, x4 -> 1, ... -# if XPattern.match(key): -# axis.vypos = 0 -# axis.vzpos = 0 -# axis._vtickpoint = self._vxtickpoint -# axis.vgridpath = self.vxgridpath -# axis.vbaseline = self.vxbaseline -# axis.vtickdirection = self.vxtickdirection -# elif YPattern.match(key): -# axis.vxpos = 0 -# axis.vzpos = 0 -# axis._vtickpoint = self._vytickpoint -# axis.vgridpath = self.vygridpath -# axis.vbaseline = self.vybaseline -# axis.vtickdirection = self.vytickdirection -# elif ZPattern.match(key): -# axis.vxpos = 0 -# axis.vypos = 0 -# axis._vtickpoint = self._vztickpoint -# axis.vgridpath = self.vzgridpath -# axis.vbaseline = self.vzbaseline -# axis.vtickdirection = self.vztickdirection -# else: -# raise ValueError("Axis key '%s' not allowed" % key) -# if axis.painter is not None: -# axis.dopaint(self) -# # if XPattern.match(key): -# # self._xaxisextents[num2] += axis._extent -# # needxaxisdist[num2] = 1 -# # if YPattern.match(key): -# # self._yaxisextents[num2] += axis._extent -# # needyaxisdist[num2] = 1 -# -# def __init__(self, tex, xpos=0, ypos=0, width=None, height=None, depth=None, -# phi=30, theta=30, distance=1, -# backgroundattrs=None, axesdist=0.8*unit.v_cm, **axes): -# canvas.canvas.__init__(self) -# self.tex = tex -# self.xpos = xpos -# self.ypos = ypos -# self._xpos = unit.topt(xpos) -# self._ypos = unit.topt(ypos) -# self._width = unit.topt(width) -# self._height = unit.topt(height) -# self._depth = unit.topt(depth) -# self.width = width -# self.height = height -# self.depth = depth -# if self._width <= 0: raise ValueError("width < 0") -# if self._height <= 0: raise ValueError("height < 0") -# if self._depth <= 0: raise ValueError("height < 0") -# self._distance = distance*math.sqrt(self._width*self._width+ -# self._height*self._height+ -# self._depth*self._depth) -# phi *= -math.pi/180 -# theta *= math.pi/180 -# self.a = (-math.sin(phi), math.cos(phi), 0) -# self.b = (-math.cos(phi)*math.sin(theta), -# -math.sin(phi)*math.sin(theta), -# math.cos(theta)) -# self.eye = (self._distance*math.cos(phi)*math.cos(theta), -# self._distance*math.sin(phi)*math.cos(theta), -# self._distance*math.sin(theta)) -# self.initaxes(axes) -# self.axesdist = axesdist -# self.backgroundattrs = backgroundattrs -# -# self.data = [] -# self.domethods = [self.dolayout, self.dobackground, self.doaxes, self.dodata] -# self.haslayout = 0 -# self.defaultstyle = {} -# -# def bbox(self): -# self.finish() -# return bbox._bbox(self._xpos - 200, self._ypos - 200, self._xpos + 200, self._ypos + 200) +class graphxyz(graphxy): + + def __init__(self, xpos=0, ypos=0, width=None, height=None, depth=None, + phi=30, theta=30, distance=1, + key=None, backgroundattrs=None, **axes): + graph.__init__(self) + + self.xpos = xpos + self.ypos = ypos + self.xpos_pt = unit.topt(xpos) + self.ypos_pt = unit.topt(ypos) + self.width = width + self.height = height + self.depth = depth + self.width_pt = unit.topt(width) + self.height_pt = unit.topt(height) + self.depth_pt = unit.topt(depth) + self.key = key + self.backgroundattrs = backgroundattrs + + if self.width_pt <= 0: raise ValueError("width < 0") + if self.height_pt <= 0: raise ValueError("height < 0") + if self.depth_pt <= 0: raise ValueError("height < 0") + self.distance_pt = distance*math.sqrt(self.width_pt*self.width_pt+ + self.height_pt*self.height_pt+ + self.depth_pt*self.depth_pt) + phi *= -math.pi/180 + theta *= math.pi/180 + self.a = (-math.sin(phi), math.cos(phi), 0) + self.b = (-math.cos(phi)*math.sin(theta), + -math.sin(phi)*math.sin(theta), + math.cos(theta)) + self.eye = (self.distance_pt*math.cos(phi)*math.cos(theta), + self.distance_pt*math.sin(phi)*math.cos(theta), + self.distance_pt*math.sin(theta)) + + for axisname, aaxis in axes.items(): + if aaxis is not None: + if not isinstance(aaxis, axis.linkedaxis): + self.axes[axisname] = axis.anchoredaxis(aaxis, self.texrunner, axisname) + else: + self.axes[axisname] = aaxis + + for axisname in ["x", "y", "z"]: + if not axes.has_key(axisname): + self.axes[axisname] = axis.anchoredaxis(axis.linear(), self.texrunner, axisname) + + if self.axes.has_key("x"): + self.xbasepath = self.axes["x"].basepath + self.xvbasepath = self.axes["x"].vbasepath + self.xgridpath = self.axes["x"].gridpath + self.xtickpoint_pt = self.axes["x"].tickpoint_pt + self.xtickpoint = self.axes["x"].tickpoint + self.xvtickpoint_pt = self.axes["x"].vtickpoint_pt + self.xvtickpoint = self.axes["x"].tickpoint + self.xtickdirection = self.axes["x"].tickdirection + self.xvtickdirection = self.axes["x"].vtickdirection + + if self.axes.has_key("y"): + self.ybasepath = self.axes["y"].basepath + self.yvbasepath = self.axes["y"].vbasepath + self.ygridpath = self.axes["y"].gridpath + self.ytickpoint_pt = self.axes["y"].tickpoint_pt + self.ytickpoint = self.axes["y"].tickpoint + self.yvtickpoint_pt = self.axes["y"].vtickpoint_pt + self.yvtickpoint = self.axes["y"].tickpoint + self.ytickdirection = self.axes["y"].tickdirection + self.yvtickdirection = self.axes["y"].vtickdirection + + if self.axes.has_key("z"): + self.zbasepath = self.axes["z"].basepath + self.zvbasepath = self.axes["z"].vbasepath + self.zgridpath = self.axes["z"].gridpath + self.ztickpoint_pt = self.axes["z"].tickpoint_pt + self.ztickpoint = self.axes["z"].tickpoint + self.zvtickpoint_pt = self.axes["z"].vtickpoint_pt + self.zvtickpoint = self.axes["z"].tickpoint + self.ztickdirection = self.axes["z"].tickdirection + self.zvtickdirection = self.axes["z"].vtickdirection + + self.axesnames = ([], [], []) + for axisname, aaxis in self.axes.items(): + if axisname[0] not in "xyz" or (len(axisname) != 1 and (not axisname[1:].isdigit() or + axisname[1:] == "1")): + raise ValueError("invalid axis name") + if axisname[0] == "x": + self.axesnames[0].append(axisname) + elif axisname[0] == "y": + self.axesnames[1].append(axisname) + else: + self.axesnames[2].append(axisname) + aaxis.setcreatecall(self.doaxiscreate, axisname) + + def pos_pt(self, x, y, z, xaxis=None, yaxis=None, zaxis=None): + if xaxis is None: + xaxis = self.axes["x"] + if yaxis is None: + yaxis = self.axes["y"] + if zaxis is None: + zaxis = self.axes["z"] + return self.vpos_pt(xaxis.convert(x), yaxis.convert(y), zaxis.convert(y)) + + def pos(self, x, y, z, xaxis=None, yaxis=None, zaxis=None): + if xaxis is None: + xaxis = self.axes["x"] + if yaxis is None: + yaxis = self.axes["y"] + if zaxis is None: + zaxis = self.axes["z"] + return self.vpos(xaxis.convert(x), yaxis.convert(y), zaxis.convert(y)) + + def vpos_pt(self, vx, vy, vz): + x, y, z = (vx - 0.5)*self.depth_pt, (vy - 0.5)*self.width_pt, (vz - 0.5)*self.height_pt + d0 = float(self.a[0]*self.b[1]*(z-self.eye[2]) + + self.a[2]*self.b[0]*(y-self.eye[1]) + + self.a[1]*self.b[2]*(x-self.eye[0]) + - self.a[2]*self.b[1]*(x-self.eye[0]) + - self.a[0]*self.b[2]*(y-self.eye[1]) + - self.a[1]*self.b[0]*(z-self.eye[2])) + da = (self.eye[0]*self.b[1]*(z-self.eye[2]) + + self.eye[2]*self.b[0]*(y-self.eye[1]) + + self.eye[1]*self.b[2]*(x-self.eye[0]) + - self.eye[2]*self.b[1]*(x-self.eye[0]) + - self.eye[0]*self.b[2]*(y-self.eye[1]) + - self.eye[1]*self.b[0]*(z-self.eye[2])) + db = (self.a[0]*self.eye[1]*(z-self.eye[2]) + + self.a[2]*self.eye[0]*(y-self.eye[1]) + + self.a[1]*self.eye[2]*(x-self.eye[0]) + - self.a[2]*self.eye[1]*(x-self.eye[0]) + - self.a[0]*self.eye[2]*(y-self.eye[1]) + - self.a[1]*self.eye[0]*(z-self.eye[2])) + return da/d0 + self.xpos_pt, db/d0 + self.ypos_pt + + def vpos(self, vx, vy, vz): + x_pt, y_pt = self.vpos_pt(vx, vy, vz) + return unit.t_pt(x_pt), unit.t_pt(y_pt) + + def xbaseline(self, axis, x1, x2, xaxis=None): + if xaxis is None: xaxis = self.axes["x"] + return self.vxbaseline(axis, xaxis.convert(x1), xaxis.convert(x2)) + + def ybaseline(self, axis, y1, y2, yaxis=None): + if yaxis is None: yaxis = self.axes["y"] + return self.vybaseline(axis, yaxis.convert(y1), yaxis.convert(y2)) + + def zbaseline(self, axis, z1, z2, zaxis=None): + if zaxis is None: zaxis = self.axes["z"] + return self.vzbaseline(axis, zaxis.convert(z1), zaxis.convert(z2)) + + def vxbaseline(self, axis, v1, v2): + return (path.line_pt(*(self.vpos_pt(v1, 0, 0) + self.vpos_pt(v2, 0, 0))) + + path.line_pt(*(self.vpos_pt(v1, 0, 1) + self.vpos_pt(v2, 0, 1))) + + path.line_pt(*(self.vpos_pt(v1, 1, 1) + self.vpos_pt(v2, 1, 1))) + + path.line_pt(*(self.vpos_pt(v1, 1, 0) + self.vpos_pt(v2, 1, 0)))) + + def vybaseline(self, axis, v1, v2): + return (path.line_pt(*(self.vpos_pt(0, v1, 0) + self.vpos_pt(0, v2, 0))) + + path.line_pt(*(self.vpos_pt(0, v1, 1) + self.vpos_pt(0, v2, 1))) + + path.line_pt(*(self.vpos_pt(1, v1, 1) + self.vpos_pt(1, v2, 1))) + + path.line_pt(*(self.vpos_pt(1, v1, 0) + self.vpos_pt(1, v2, 0)))) + + def vzbaseline(self, axis, v1, v2): + return (path.line_pt(*(self.vpos_pt(0, 0, v1) + self.vpos_pt(0, 0, v2))) + + path.line_pt(*(self.vpos_pt(0, 1, v1) + self.vpos_pt(0, 1, v2))) + + path.line_pt(*(self.vpos_pt(1, 1, v1) + self.vpos_pt(1, 1, v2))) + + path.line_pt(*(self.vpos_pt(1, 0, v1) + self.vpos_pt(1, 0, v2)))) + + def vgeodesic(self, vx1, vy1, vz1, vx2, vy2, vz2): + """returns a geodesic path between two points in graph coordinates""" + return path.line_pt(*(self.vpos_pt(vx1, vy1, vz1) + self.vpos_pt(vx2, vy2, vz2))) + + def vgeodesic_el(self, vx1, vy1, vz1, vx2, vy2, vz2): + """returns a geodesic path element between two points in graph coordinates""" + return path.lineto_pt(*(self.vpos_pt(vx1, vy1, vz1) + self.vpos_pt(vx2, vy2, vz2))) + + def vcap_pt(self, coordinate, length_pt, vx, vy, vz): + """returns an error cap path for a given coordinate, lengths and + point in graph coordinates""" + raise NotImplementedError + if coordinate == 0: + return path.line_pt(self.xpos_pt + vx*self.width_pt - 0.5*length_pt, + self.ypos_pt + vy*self.height_pt, + self.xpos_pt + vx*self.width_pt + 0.5*length_pt, + self.ypos_pt + vy*self.height_pt) + elif coordinate == 1: + return path.line_pt(self.xpos_pt + vx*self.width_pt, + self.ypos_pt + vy*self.height_pt - 0.5*length_pt, + self.xpos_pt + vx*self.width_pt, + self.ypos_pt + vy*self.height_pt + 0.5*length_pt) + else: + raise ValueError("direction invalid") + + def xvgridpath(self, vx): + raise NotImplementedError + + def yvgridpath(self, vy): + raise NotImplementedError + + def zvgridpath(self, vz): + raise NotImplementedError + + def doaxispositioner(self, axisname): + if self.did(self.doaxispositioner, axisname): + return + self.doranges() + if axisname == "x": + x1_pt, y1_pt = self.vpos_pt(0, 0, 0) + x2_pt, y2_pt = self.vpos_pt(1, 0, 0) + self.axes["x"].setpositioner(positioner.lineaxispos_pt(x1_pt, y1_pt, x2_pt, y2_pt, + (0, 1), self.xvgridpath)) + elif axisname == "y": + x1_pt, y1_pt = self.vpos_pt(0, 0, 0) + x2_pt, y2_pt = self.vpos_pt(0, 1, 0) + self.axes["y"].setpositioner(positioner.lineaxispos_pt(x1_pt, y1_pt, x2_pt, y2_pt, + (0, 1), self.yvgridpath)) + elif axisname == "z": + x1_pt, y1_pt = self.vpos_pt(0, 0, 0) + x2_pt, y2_pt = self.vpos_pt(0, 0, 1) + self.axes["z"].setpositioner(positioner.lineaxispos_pt(x1_pt, y1_pt, x2_pt, y2_pt, + (1, 0), self.yvgridpath)) + else: + raise NotImplementedError + + def dolayout(self): + if self.did(self.dolayout): + return + for axisname in self.axes.keys(): + self.doaxiscreate(axisname) + + def dobackground(self): + if self.did(self.dobackground): + return + + def doaxes(self): + if self.did(self.doaxes): + return + self.dolayout() + self.dobackground() + for axis in self.axes.values(): + self.insert(axis.canvas) + + def dokey(self): + if self.did(self.dokey): + return + self.dobackground() + self.dodata() + if self.key is not None: + c = self.key.paint(self.plotitems) + bbox = c.bbox() + def parentchildalign(pmin, pmax, cmin, cmax, pos, dist, inside): + ppos = pmin+0.5*(cmax-cmin)+dist+pos*(pmax-pmin-cmax+cmin-2*dist) + cpos = 0.5*(cmin+cmax)+(1-inside)*(1-2*pos)*(cmax-cmin+2*dist) + return ppos-cpos + if bbox: + x = parentchildalign(self.xpos_pt, self.xpos_pt+self.width_pt, + bbox.llx_pt, bbox.urx_pt, + self.key.hpos, unit.topt(self.key.hdist), self.key.hinside) + y = parentchildalign(self.ypos_pt, self.ypos_pt+self.height_pt, + bbox.lly_pt, bbox.ury_pt, + self.key.vpos, unit.topt(self.key.vdist), self.key.vinside) + self.insert(c, [trafo.translate_pt(x, y)]) diff --git a/pyx/graph/style.py b/pyx/graph/style.py index 1a38de19..c0068e69 100644 --- a/pyx/graph/style.py +++ b/pyx/graph/style.py @@ -463,32 +463,19 @@ class symbol(_styleneedingpointpos): privatedata.symbol(graph, x_pt+0.5*width_pt, y_pt+0.5*height_pt, privatedata.size_pt, privatedata.symbolattrs) -class line(_styleneedingpointpos): +class _line(_styleneedingpointpos): - needsdata = ["vpos", "vposmissing", "vposavailable", "vposvalid"] - - changelinestyle = attr.changelist([style.linestyle.solid, - style.linestyle.dashed, - style.linestyle.dotted, - style.linestyle.dashdotted]) - - defaultlineattrs = [changelinestyle] - - def __init__(self, lineattrs=[]): - self.lineattrs = lineattrs + # this style is not a complete style, but it provides the basic functionality to + # create a line, which is cut at the graph boundaries (or at otherwise invalid points) - def selectstyle(self, privatedata, sharedata, graph, selectindex, selecttotal): - if self.lineattrs is not None: - privatedata.lineattrs = attr.selectattrs(self.defaultlineattrs + self.lineattrs, selectindex, selecttotal) - else: - privatedata.lineattrs = None + needsdata = ["vposmissing"] - def initdrawpoints(self, privatedata, sharedata, graph): + def initpointstopath(self, privatedata): privatedata.path = path.path() privatedata.linebasepoints = [] privatedata.lastvpos = None - def addpointstopath(self, privatedata, sharedata): + def addpointstopath(self, privatedata): # add baselinepoints to privatedata.path if len(privatedata.linebasepoints) > 1: privatedata.path.append(path.moveto_pt(*privatedata.linebasepoints[0])) @@ -498,17 +485,17 @@ class line(_styleneedingpointpos): privatedata.path.append(path.lineto_pt(*privatedata.linebasepoints[1])) privatedata.linebasepoints = [] - def drawpoint(self, privatedata, sharedata, graph, point): + def addpoint(self, privatedata, graphvpos_pt, vposavailable, vposvalid, vpos): # append linebasepoints - if sharedata.vposavailable: + if vposavailable: if len(privatedata.linebasepoints): # the last point was inside the graph - if sharedata.vposvalid: # shortcut for the common case - privatedata.linebasepoints.append(graph.vpos_pt(*sharedata.vpos)) + if vposvalid: # shortcut for the common case + privatedata.linebasepoints.append(graphvpos_pt(*vpos)) else: # cut end cut = 1 - for vstart, vend in zip(privatedata.lastvpos, sharedata.vpos): + for vstart, vend in zip(privatedata.lastvpos, vpos): newcut = None if vend > 1: # 1 = vstart + (vend - vstart) * cut @@ -526,17 +513,17 @@ class line(_styleneedingpointpos): cut = newcut else: cutvpos = [] - for vstart, vend in zip(privatedata.lastvpos, sharedata.vpos): + for vstart, vend in zip(privatedata.lastvpos, vpos): cutvpos.append(vstart + (vend - vstart) * cut) - privatedata.linebasepoints.append(graph.vpos_pt(*cutvpos)) - self.addpointstopath(privatedata, sharedata) + privatedata.linebasepoints.append(graphvpos_pt(*cutvpos)) + self.addpointstopath(privatedata) else: # the last point was outside the graph if privatedata.lastvpos is not None: - if sharedata.vposvalid: + if vposvalid: # cut beginning cut = 0 - for vstart, vend in zip(privatedata.lastvpos, sharedata.vpos): + for vstart, vend in zip(privatedata.lastvpos, vpos): newcut = None if vstart > 1: # 1 = vstart + (vend - vstart) * cut @@ -554,15 +541,15 @@ class line(_styleneedingpointpos): cut = newcut else: cutvpos = [] - for vstart, vend in zip(privatedata.lastvpos, sharedata.vpos): + for vstart, vend in zip(privatedata.lastvpos, vpos): cutvpos.append(vstart + (vend - vstart) * cut) - privatedata.linebasepoints.append(graph.vpos_pt(*cutvpos)) - privatedata.linebasepoints.append(graph.vpos_pt(*sharedata.vpos)) + privatedata.linebasepoints.append(graphvpos_pt(*cutvpos)) + privatedata.linebasepoints.append(graphvpos_pt(*vpos)) else: # sometimes cut beginning and end cutfrom = 0 cutto = 1 - for vstart, vend in zip(privatedata.lastvpos, sharedata.vpos): + for vstart, vend in zip(privatedata.lastvpos, vpos): newcutfrom = None if vstart > 1: if vend > 1: @@ -601,23 +588,59 @@ class line(_styleneedingpointpos): if cutfrom < cutto: cutfromvpos = [] cuttovpos = [] - for vstart, vend in zip(privatedata.lastvpos, sharedata.vpos): + for vstart, vend in zip(privatedata.lastvpos, vpos): cutfromvpos.append(vstart + (vend - vstart) * cutfrom) cuttovpos.append(vstart + (vend - vstart) * cutto) - privatedata.linebasepoints.append(graph.vpos_pt(*cutfromvpos)) - privatedata.linebasepoints.append(graph.vpos_pt(*cuttovpos)) - self.addpointstopath(privatedata, sharedata) - privatedata.lastvpos = sharedata.vpos[:] + privatedata.linebasepoints.append(graphvpos_pt(*cutfromvpos)) + privatedata.linebasepoints.append(graphvpos_pt(*cuttovpos)) + self.addpointstopath(privatedata) + privatedata.lastvpos = vpos[:] else: if len(privatedata.linebasepoints) > 1: - self.addpointstopath(privatedata, sharedata) + self.addpointstopath(privatedata) privatedata.lastvpos = None - def donedrawpoints(self, privatedata, sharedata, graph): + def addinvalid(self, privatedata): if len(privatedata.linebasepoints) > 1: - self.addpointstopath(privatedata, sharedata) - if privatedata.lineattrs is not None and len(privatedata.path): - graph.stroke(privatedata.path, privatedata.lineattrs) + self.addpointstopath(privatedata) + privatedata.lastvpos = None + + def donepointstopath(self, privatedata): + if len(privatedata.linebasepoints) > 1: + self.addpointstopath(privatedata) + return privatedata.path + + +class line(_line): + + needsdata = ["vpos", "vposmissing", "vposavailable", "vposvalid"] + + changelinestyle = attr.changelist([style.linestyle.solid, + style.linestyle.dashed, + style.linestyle.dotted, + style.linestyle.dashdotted]) + + defaultlineattrs = [changelinestyle] + + def __init__(self, lineattrs=[]): + self.lineattrs = lineattrs + + def selectstyle(self, privatedata, sharedata, graph, selectindex, selecttotal): + if self.lineattrs is not None: + privatedata.lineattrs = attr.selectattrs(self.defaultlineattrs + self.lineattrs, selectindex, selecttotal) + else: + privatedata.lineattrs = None + + def initdrawpoints(self, privatedata, sharedata, graph): + self.initpointstopath(privatedata) + + def drawpoint(self, privatedata, sharedata, graph, point): + self.addpoint(privatedata, graph.vpos_pt, sharedata.vposavailable, sharedata.vposvalid, sharedata.vpos) + + def donedrawpoints(self, privatedata, sharedata, graph): + path = self.donepointstopath(privatedata) + if privatedata.lineattrs is not None and len(path): + graph.stroke(path, privatedata.lineattrs) def key_pt(self, privatedata, sharedata, graph, x_pt, y_pt, width_pt, height_pt): if privatedata.lineattrs is not None: @@ -1435,3 +1458,111 @@ class changebar(bar): def key_pt(self, privatedata, sharedata, graph, x_pt, y_pt, width_pt, height_pt): raise RuntimeError("Style currently doesn't provide a graph key") + + +class surface(_line): + + needsdata = ["vpos", "vposmissing", "vposavailable", "vposvalid"] + + def __init__(self, colorname="color", palette=color.palette.Rainbow, + mincolor=None, maxcolor=None, index1=0, index2=1, epsilon=1e-10): + self.colorname = colorname + self.palette = palette + self.mincolor = mincolor + self.maxcolor = maxcolor + self.index1 = index1 + self.index2 = index2 + self.epsilon = epsilon + + def columnnames(self, privatedata, sharedata, graph, columnnames): + privatedata.colorize = self.colorname in columnnames + return privatedata.colorize and [self.colorname] or [] + _line.columnnames(self, privatedata, sharedata, graph, columnnames) + + def selectstyle(self, privatedata, sharedata, graph, selectindex, selecttotal): + if selecttotal != 1: + raise RuntimeError("Surface can't change its appearance.") + + def initdrawpoints(self, privatedata, sharedata, graph): + privatedata.values1 = {} + privatedata.values2 = {} + privatedata.data12 = {} + privatedata.data21 = {} + privatedata.colors = {} + privatedata.mincolor = privatedata.maxcolor = None + + def drawpoint(self, privatedata, sharedata, graph, point): + if sharedata.vposavailable: + value1 = sharedata.vpos[self.index1] + value2 = sharedata.vpos[self.index2] + privatedata.values1.setdefault(value1, 1) + privatedata.values2.setdefault(value2, 1) + data = sharedata.vposavailable, sharedata.vposvalid, sharedata.vpos[:] + privatedata.data12.setdefault(value1, {})[value2] = data + privatedata.data21.setdefault(value2, {})[value1] = data + if privatedata.colorize: + try: + color = point[self.colorname] + 0 + except: + pass + else: + privatedata.colors.setdefault(value1, {})[value2] = color + if privatedata.mincolor is None or color < privatedata.mincolor: + privatedata.mincolor = color + if privatedata.mincolor is None or privatedata.maxcolor < color: + privatedata.maxcolor = color + + def donedrawpoints(self, privatedata, sharedata, graph): + values1 = privatedata.values1.keys() + values1.sort() + values2 = privatedata.values2.keys() + values2.sort() + if self.mincolor is not None: + mincolor = self.mincolor + if self.maxcolor is not None: + maxcolor = self.maxcolor + for value1 in values1: + data2 = privatedata.data12[value1] + self.initpointstopath(privatedata) + for value2 in values2: + try: + data = data2[value2] + except KeyError: + self.addinvalid(privatedata) + else: + self.addpoint(privatedata, graph.vpos_pt, *data) + p = self.donepointstopath(privatedata) + if len(p): + graph.stroke(p) + for value2 in values2: + data1 = privatedata.data21[value2] + self.initpointstopath(privatedata) + for value1 in values1: + try: + data = data1[value1] + except KeyError: + self.addinvalid(privatedata) + else: + self.addpoint(privatedata, graph.vpos_pt, *data) + p = self.donepointstopath(privatedata) + if len(p): + graph.stroke(p) + if privatedata.colorize: + for value1 in values1: + data2 = privatedata.data12[value1] + self.initpointstopath(privatedata) + for value2 in values2: + try: + x_pt, y_pt = graph.vpos_pt(*data2[value2][2]) + except KeyError: + pass + else: + try: + color = privatedata.colors[value1][value2] + except KeyError: + pass + else: + color = (color - privatedata.mincolor) / float(privatedata.maxcolor - privatedata.mincolor) + graph.fill(path.circle_pt(x_pt, y_pt, 1), [self.palette.getcolor(color)]) + + def key_pt(self, privatedata, sharedata, graph, x_pt, y_pt, width_pt, height_pt): + raise NotImplementedError diff --git a/test/functional/data/husimi_small.dat b/test/functional/data/husimi_small.dat new file mode 100644 index 00000000..a970cf68 --- /dev/null +++ b/test/functional/data/husimi_small.dat @@ -0,0 +1,961 @@ +0 0 +2.744434246094877e-06 -3.063353147175393e+00 +0 1 +2.518061584101027e-06 -2.958192360754608e+00 +0 2 +1.759486087349929e-06 -3.002168101392316e+00 +0 3 +9.970876191013776e-07 +2.769539048265116e+00 +0 4 +3.824133190986796e-06 +1.965014044615903e+00 +0 5 +2.975115378597332e-05 +1.865734703449269e+00 +0 6 +1.699285851675448e-04 +1.920278127793557e+00 +0 7 +6.720788024534639e-04 +1.960331249116983e+00 +0 8 +1.792832060948163e-03 +1.975868537347578e+00 +0 9 +3.200655253796644e-03 +1.976736552168478e+00 +0 10 +3.816618683189747e-03 +1.968501042213780e+00 +0 11 +3.032150111960852e-03 +1.949043740091797e+00 +0 12 +1.590229109988915e-03 +1.903773933498413e+00 +0 13 +5.326214926640671e-04 +1.789971440046750e+00 +0 14 +9.904354320939544e-05 +1.479337108801101e+00 +0 15 +9.357929797648389e-06 +0.000000000000000e+00 +0 16 +9.904354320939544e-05 -1.479337108801101e+00 +0 17 +5.326214926640671e-04 -1.789971440046750e+00 +0 18 +1.590229109988915e-03 -1.903773933498413e+00 +0 19 +3.032150111960852e-03 -1.949043740091797e+00 +0 20 +3.816618683189747e-03 -1.968501042213780e+00 +0 21 +3.200655253796644e-03 -1.976736552168478e+00 +0 22 +1.792832060948163e-03 -1.975868537347578e+00 +0 23 +6.720788024534639e-04 -1.960331249116983e+00 +0 24 +1.699285851675448e-04 -1.920278127793557e+00 +0 25 +2.975115378597332e-05 -1.865734703449269e+00 +0 26 +3.824133190986796e-06 -1.965014044615903e+00 +0 27 +9.970876191013776e-07 -2.769539048265116e+00 +0 28 +1.759486087349929e-06 +3.002168101392316e+00 +0 29 +2.518061584101027e-06 +2.958192360754608e+00 +0 30 +2.744434246094877e-06 +3.063353147175393e+00 +1 0 +1.653567652207974e-06 -3.032605130092971e+00 +1 1 +2.080019415431434e-06 -2.964413953370648e+00 +1 2 +2.256392327443844e-06 -3.122865140933960e+00 +1 3 +2.353042222660531e-06 +2.877723608842732e+00 +1 4 +4.658691276947686e-06 +2.752151811948373e+00 +1 5 +2.435782462200616e-05 +2.793435206715440e+00 +1 6 +1.490972431055931e-04 +2.722039682055138e+00 +1 7 +6.377284017517769e-04 +2.564351284050846e+00 +1 8 +1.771582235157512e-03 +2.373309503421293e+00 +1 9 +3.225933640796166e-03 +2.169773873595198e+00 +1 10 +3.906803557194595e-03 +1.960328542458787e+00 +1 11 +3.197308254883010e-03 +1.743476801615367e+00 +1 12 +1.817291725241250e-03 +1.506589096445452e+00 +1 13 +7.630389801230493e-04 +1.210704799244670e+00 +1 14 +2.807603469492349e-04 +7.534942842791266e-01 +1 15 +1.608446672699473e-04 +0.000000000000000e+00 +1 16 +2.807603469492349e-04 -7.534942842791266e-01 +1 17 +7.630389801230493e-04 -1.210704799244670e+00 +1 18 +1.817291725241250e-03 -1.506589096445452e+00 +1 19 +3.197308254883010e-03 -1.743476801615367e+00 +1 20 +3.906803557194595e-03 -1.960328542458787e+00 +1 21 +3.225933640796166e-03 -2.169773873595198e+00 +1 22 +1.771582235157512e-03 -2.373309503421293e+00 +1 23 +6.377284017517769e-04 -2.564351284050846e+00 +1 24 +1.490972431055931e-04 -2.722039682055138e+00 +1 25 +2.435782462200616e-05 -2.793435206715440e+00 +1 26 +4.658691276947686e-06 -2.752151811948373e+00 +1 27 +2.353042222660531e-06 -2.877723608842732e+00 +1 28 +2.256392327443844e-06 +3.122865140933960e+00 +1 29 +2.080019415431434e-06 +2.964413953370648e+00 +1 30 +1.653567652207974e-06 +3.032605130092971e+00 +2 0 +4.903222446513287e-07 -2.753707329565879e+00 +2 1 +1.470523991761591e-06 -2.734273298584187e+00 +2 2 +2.270477656555739e-06 -3.083150312467379e+00 +2 3 +1.893286577894258e-06 +2.824392915916750e+00 +2 4 +8.875040369628528e-07 -3.022970759005168e+00 +2 5 +1.382699095923903e-05 -2.374869328454050e+00 +2 6 +1.323259508158545e-04 -2.681985804479132e+00 +2 7 +6.252257214541712e-04 -3.086680995192897e+00 +2 8 +1.780184015590029e-03 +2.781257615697196e+00 +2 9 +3.259559977840245e-03 +2.367584991699156e+00 +2 10 +3.952100806252818e-03 +1.957994890527628e+00 +2 11 +3.252471803511440e-03 +1.554200526615479e+00 +2 12 +1.899491987795393e-03 +1.158587847318709e+00 +2 13 +8.762282695816127e-04 +7.726086215271875e-01 +2 14 +4.087748017613867e-04 +3.904159045575257e-01 +2 15 +2.912636182938809e-04 +0.000000000000000e+00 +2 16 +4.087748017613867e-04 -3.904159045575257e-01 +2 17 +8.762282695816127e-04 -7.726086215271875e-01 +2 18 +1.899491987795393e-03 -1.158587847318709e+00 +2 19 +3.252471803511440e-03 -1.554200526615479e+00 +2 20 +3.952100806252818e-03 -1.957994890527628e+00 +2 21 +3.259559977840245e-03 -2.367584991699156e+00 +2 22 +1.780184015590029e-03 -2.781257615697196e+00 +2 23 +6.252257214541712e-04 +3.086680995192897e+00 +2 24 +1.323259508158545e-04 +2.681985804479132e+00 +2 25 +1.382699095923903e-05 +2.374869328454050e+00 +2 26 +8.875040369628528e-07 +3.022970759005168e+00 +2 27 +1.893286577894258e-06 -2.824392915916750e+00 +2 28 +2.270477656555739e-06 +3.083150312467379e+00 +2 29 +1.470523991761591e-06 +2.734273298584187e+00 +2 30 +4.903222446513287e-07 +2.753707329565879e+00 +3 0 +2.525077324128639e-07 -1.304446316696425e+00 +3 1 +1.411976960236152e-06 -2.257743844540112e+00 +3 2 +2.585027402357342e-06 -2.984260486711650e+00 +3 3 +2.455329005085701e-06 +2.468697018755823e+00 +3 4 +1.524299827202244e-06 +8.553984376838808e-01 +3 5 +1.730855351620528e-05 -9.001350783620592e-01 +3 6 +1.485538901683144e-04 -1.756301293845132e+00 +3 7 +6.672169413806638e-04 -2.450087062130442e+00 +3 8 +1.845851704536038e-03 -3.096459439334716e+00 +3 9 +3.314019707590146e-03 +2.561293797090638e+00 +3 10 +3.938097395997995e-03 +1.950034668685766e+00 +3 11 +3.137337133297499e-03 +1.356748292378373e+00 +3 12 +1.714725940474006e-03 +7.998187140451167e-01 +3 13 +6.894032775764756e-04 +3.281048715777534e-01 +3 14 +2.562722332523367e-04 +4.099316506230097e-02 +3 15 +1.572414788470460e-04 +0.000000000000000e+00 +3 16 +2.562722332523367e-04 -4.099316506230097e-02 +3 17 +6.894032775764756e-04 -3.281048715777534e-01 +3 18 +1.714725940474006e-03 -7.998187140451167e-01 +3 19 +3.137337133297499e-03 -1.356748292378373e+00 +3 20 +3.938097395997995e-03 -1.950034668685766e+00 +3 21 +3.314019707590146e-03 -2.561293797090638e+00 +3 22 +1.845851704536038e-03 +3.096459439334716e+00 +3 23 +6.672169413806638e-04 +2.450087062130442e+00 +3 24 +1.485538901683144e-04 +1.756301293845132e+00 +3 25 +1.730855351620528e-05 +9.001350783620592e-01 +3 26 +1.524299827202244e-06 -8.553984376838808e-01 +3 27 +2.455329005085701e-06 -2.468697018755823e+00 +3 28 +2.585027402357342e-06 +2.984260486711650e+00 +3 29 +1.411976960236152e-06 +2.257743844540112e+00 +3 30 +2.525077324128639e-07 +1.304446316696425e+00 +4 0 +1.226989384095427e-06 -6.989374677091572e-01 +4 1 +2.143934503008343e-06 -1.864115815013879e+00 +4 2 +3.419052137664231e-06 -2.811894087983946e+00 +4 3 +5.044497070280032e-06 +2.507989446512523e+00 +4 4 +1.019883325351201e-05 +1.333600706683120e+00 +4 5 +4.134677767967157e-05 +1.027934113948210e-01 +4 6 +2.024165951452637e-04 -9.392040381763751e-01 +4 7 +7.595561633249549e-04 -1.852478900588256e+00 +4 8 +1.957907998196094e-03 -2.709451952386319e+00 +4 9 +3.390836776047649e-03 +2.742328690799486e+00 +4 10 +3.907691866900613e-03 +1.926219078244228e+00 +4 11 +2.958824680334640e-03 +1.127569020045748e+00 +4 12 +1.433416637054468e-03 +3.656236416672929e-01 +4 13 +4.183160198044826e-04 -2.950038922594555e-01 +4 14 +6.825032672642671e-05 -6.271338197191428e-01 +4 15 +1.565122491813854e-05 +0.000000000000000e+00 +4 16 +6.825032672642671e-05 +6.271338197191428e-01 +4 17 +4.183160198044826e-04 +2.950038922594555e-01 +4 18 +1.433416637054468e-03 -3.656236416672929e-01 +4 19 +2.958824680334640e-03 -1.127569020045748e+00 +4 20 +3.907691866900613e-03 -1.926219078244228e+00 +4 21 +3.390836776047649e-03 -2.742328690799486e+00 +4 22 +1.957907998196094e-03 +2.709451952386319e+00 +4 23 +7.595561633249549e-04 +1.852478900588256e+00 +4 24 +2.024165951452637e-04 +9.392040381763751e-01 +4 25 +4.134677767967157e-05 -1.027934113948210e-01 +4 26 +1.019883325351201e-05 -1.333600706683120e+00 +4 27 +5.044497070280032e-06 -2.507989446512523e+00 +4 28 +3.419052137664231e-06 +2.811894087983946e+00 +4 29 +2.143934503008343e-06 +1.864115815013879e+00 +4 30 +1.226989384095427e-06 +6.989374677091572e-01 +5 0 +2.307317576927403e-06 -5.841568218836731e-01 +5 1 +2.716699175289595e-06 -1.682171413795269e+00 +5 2 +3.392503181823541e-06 -2.630643781979054e+00 +5 3 +5.499844452398325e-06 +2.819026391582716e+00 +5 4 +1.535221942328690e-05 +1.906902323436481e+00 +5 5 +6.146497948927013e-05 +8.490163975136203e-01 +5 6 +2.527173255797678e-04 -2.401212680240403e-01 +5 7 +8.466746072201876e-04 -1.304263728317965e+00 +5 8 +2.063200871238251e-03 -2.345065853885298e+00 +5 9 +3.474385548526664e-03 +2.909856085297119e+00 +5 10 +3.926889486415615e-03 +1.887307759235993e+00 +5 11 +2.892497988275950e-03 +8.675709297187658e-01 +5 12 +1.312540781600459e-03 -1.502074092126509e-01 +5 13 +3.136255923160151e-04 -1.167448504375755e+00 +5 14 +2.172446734687579e-05 -2.196178304280425e+00 +5 15 +7.019738683128956e-09 +3.141592653589793e+00 +5 16 +2.172446734687579e-05 +2.196178304280425e+00 +5 17 +3.136255923160151e-04 +1.167448504375755e+00 +5 18 +1.312540781600459e-03 +1.502074092126509e-01 +5 19 +2.892497988275950e-03 -8.675709297187658e-01 +5 20 +3.926889486415615e-03 -1.887307759235993e+00 +5 21 +3.474385548526664e-03 -2.909856085297119e+00 +5 22 +2.063200871238251e-03 +2.345065853885298e+00 +5 23 +8.466746072201876e-04 +1.304263728317965e+00 +5 24 +2.527173255797678e-04 +2.401212680240403e-01 +5 25 +6.146497948927013e-05 -8.490163975136203e-01 +5 26 +1.535221942328690e-05 -1.906902323436481e+00 +5 27 +5.499844452398325e-06 -2.819026391582716e+00 +5 28 +3.392503181823541e-06 +2.630643781979054e+00 +5 29 +2.716699175289595e-06 +1.682171413795269e+00 +5 30 +2.307317576927403e-06 +5.841568218836731e-01 +6 0 +2.373332825254899e-06 -5.596765337636125e-01 +6 1 +2.321653560233388e-06 -1.661026530699345e+00 +6 2 +1.822958685202512e-06 -2.609860054167410e+00 +6 3 +1.998034295855592e-06 -3.034729455557380e+00 +6 4 +1.070244688479249e-05 +2.662931086924162e+00 +6 5 +6.062668963464542e-05 +1.604865223403336e+00 +6 6 +2.637758074029551e-04 +4.252657241105879e-01 +6 7 +8.732926224204041e-04 -7.797493567346813e-01 +6 8 +2.104254493353289e-03 -1.992312487762356e+00 +6 9 +3.536589556516121e-03 +3.072332816473035e+00 +6 10 +4.022793689595565e-03 +1.845930256591953e+00 +6 11 +3.021560454986797e-03 +6.056150297672359e-01 +6 12 +1.452268740872702e-03 -6.675067706620957e-01 +6 13 +4.229684890191378e-04 -2.035472137421153e+00 +6 14 +7.183483566560646e-05 +2.564773215027116e+00 +6 15 +1.825194993036989e-05 +0.000000000000000e+00 +6 16 +7.183483566560646e-05 -2.564773215027116e+00 +6 17 +4.229684890191378e-04 +2.035472137421153e+00 +6 18 +1.452268740872702e-03 +6.675067706620957e-01 +6 19 +3.021560454986797e-03 -6.056150297672359e-01 +6 20 +4.022793689595565e-03 -1.845930256591953e+00 +6 21 +3.536589556516121e-03 -3.072332816473035e+00 +6 22 +2.104254493353289e-03 +1.992312487762356e+00 +6 23 +8.732926224204041e-04 +7.797493567346813e-01 +6 24 +2.637758074029551e-04 -4.252657241105879e-01 +6 25 +6.062668963464542e-05 -1.604865223403336e+00 +6 26 +1.070244688479249e-05 -2.662931086924162e+00 +6 27 +1.998034295855592e-06 +3.034729455557380e+00 +6 28 +1.822958685202512e-06 +2.609860054167410e+00 +6 29 +2.321653560233388e-06 +1.661026530699345e+00 +6 30 +2.373332825254899e-06 +5.596765337636125e-01 +7 0 +1.587195130150310e-06 -5.377368128834096e-01 +7 1 +1.713658780206171e-06 -1.737145824711105e+00 +7 2 +9.411594223291881e-07 -3.122025819399736e+00 +7 3 +6.776789721331578e-08 -5.065366291187205e-01 +7 4 +6.860825504386979e-06 -2.478176410019394e+00 +7 5 +5.146201467104523e-05 +2.442353614829797e+00 +7 6 +2.396166831456199e-04 +1.106781638041802e+00 +7 7 +8.264643309087650e-04 -2.493845932307494e-01 +7 8 +2.056438818405584e-03 -1.633896983665512e+00 +7 9 +3.549963363240440e-03 -3.041053754927800e+00 +7 10 +4.156944303260867e-03 +1.816757559194381e+00 +7 11 +3.275907813144717e-03 +3.709464743447967e-01 +7 12 +1.756915148324869e-03 -1.109532303547783e+00 +7 13 +6.844759133332523e-04 -2.663773181135115e+00 +7 14 +2.464153674380294e-04 +1.911184679291673e+00 +7 15 +1.495346760772398e-04 +0.000000000000000e+00 +7 16 +2.464153674380294e-04 -1.911184679291673e+00 +7 17 +6.844759133332523e-04 +2.663773181135115e+00 +7 18 +1.756915148324869e-03 +1.109532303547783e+00 +7 19 +3.275907813144717e-03 -3.709464743447967e-01 +7 20 +4.156944303260867e-03 -1.816757559194381e+00 +7 21 +3.549963363240440e-03 +3.041053754927800e+00 +7 22 +2.056438818405584e-03 +1.633896983665512e+00 +7 23 +8.264643309087650e-04 +2.493845932307494e-01 +7 24 +2.396166831456199e-04 -1.106781638041802e+00 +7 25 +5.146201467104523e-05 -2.442353614829797e+00 +7 26 +6.860825504386979e-06 +2.478176410019394e+00 +7 27 +6.776789721331578e-08 +5.065366291187205e-01 +7 28 +9.411594223291881e-07 +3.122025819399736e+00 +7 29 +1.713658780206171e-06 +1.737145824711105e+00 +7 30 +1.587195130150310e-06 +5.377368128834096e-01 +8 0 +5.842895768532483e-07 -3.016881841463414e-01 +8 1 +1.514582924947651e-06 -1.638530606247581e+00 +8 2 +1.918239459944766e-06 +2.817977161442624e+00 +8 3 +2.478661441644039e-06 +5.825080634016888e-01 +8 4 +8.932418369414274e-06 -1.455759186239650e+00 +8 5 +4.159804448997610e-05 -3.018649505946598e+00 +8 6 +1.917917504088143e-04 +1.815555061792692e+00 +8 7 +7.237846411730068e-04 +3.111138146495241e-01 +8 8 +1.937637574805104e-03 -1.253326827164703e+00 +8 9 +3.510202961653063e-03 -2.854128225656337e+00 +8 10 +4.266350475238421e-03 +1.806234658575024e+00 +8 11 +3.503586015126449e-03 +1.671690008667109e-01 +8 12 +1.998570138710667e-03 -1.485730339000375e+00 +8 13 +8.585196678491770e-04 +3.140108451606422e+00 +8 14 +3.479814933876024e-04 +1.520399016715249e+00 +8 15 +2.236338486521513e-04 +0.000000000000000e+00 +8 16 +3.479814933876024e-04 -1.520399016715249e+00 +8 17 +8.585196678491770e-04 -3.140108451606422e+00 +8 18 +1.998570138710667e-03 +1.485730339000375e+00 +8 19 +3.503586015126449e-03 -1.671690008667109e-01 +8 20 +4.266350475238421e-03 -1.806234658575024e+00 +8 21 +3.510202961653063e-03 +2.854128225656337e+00 +8 22 +1.937637574805104e-03 +1.253326827164703e+00 +8 23 +7.237846411730068e-04 -3.111138146495241e-01 +8 24 +1.917917504088143e-04 -1.815555061792692e+00 +8 25 +4.159804448997610e-05 +3.018649505946598e+00 +8 26 +8.932418369414274e-06 +1.455759186239650e+00 +8 27 +2.478661441644039e-06 -5.825080634016888e-01 +8 28 +1.918239459944766e-06 -2.817977161442624e+00 +8 29 +1.514582924947651e-06 +1.638530606247581e+00 +8 30 +5.842895768532483e-07 +3.016881841463414e-01 +9 0 +3.642883870758245e-07 +1.107533322912552e+00 +9 1 +2.053202999470949e-06 -1.208247650493892e+00 +9 2 +3.837166158545995e-06 +2.956496920291495e+00 +9 3 +5.348894469071784e-06 +8.676861625533372e-01 +9 4 +7.858828200887174e-06 -9.410511963129869e-01 +9 5 +2.145531964264211e-05 -2.258578835038096e+00 +9 6 +1.278998893281748e-04 +2.606538685989678e+00 +9 7 +6.057443575635683e-04 +9.325906513024589e-01 +9 8 +1.807819709990386e-03 -8.385622658892627e-01 +9 9 +3.456094204549144e-03 -2.646611917938468e+00 +9 10 +4.332932758161096e-03 +1.811308531556510e+00 +9 11 +3.623389816823501e-03 -2.210678516248264e-02 +9 12 +2.054991941718712e-03 -1.852494054615384e+00 +9 13 +8.036014751161785e-04 +2.634847783830392e+00 +9 14 +2.166177170601839e-04 +9.952279113346615e-01 +9 15 +6.915211547501020e-05 +0.000000000000000e+00 +9 16 +2.166177170601839e-04 -9.952279113346615e-01 +9 17 +8.036014751161785e-04 -2.634847783830392e+00 +9 18 +2.054991941718712e-03 +1.852494054615384e+00 +9 19 +3.623389816823501e-03 +2.210678516248264e-02 +9 20 +4.332932758161096e-03 -1.811308531556510e+00 +9 21 +3.456094204549144e-03 +2.646611917938468e+00 +9 22 +1.807819709990386e-03 +8.385622658892627e-01 +9 23 +6.057443575635683e-04 -9.325906513024589e-01 +9 24 +1.278998893281748e-04 -2.606538685989678e+00 +9 25 +2.145531964264211e-05 +2.258578835038096e+00 +9 26 +7.858828200887174e-06 +9.410511963129869e-01 +9 27 +5.348894469071784e-06 -8.676861625533372e-01 +9 28 +3.837166158545995e-06 -2.956496920291495e+00 +9 29 +2.053202999470949e-06 +1.208247650493892e+00 +9 30 +3.642883870758245e-07 -1.107533322912552e+00 +10 0 +2.512490246878957e-06 +1.740540983199852e+00 +10 1 +4.396610854841844e-06 -8.229914318834187e-01 +10 2 +6.575545000503195e-06 +3.126939959142825e+00 +10 3 +7.083439501810090e-06 +8.974638511617669e-01 +10 4 +3.470894493160968e-06 -1.161206954615527e+00 +10 5 +2.622883261358829e-06 -9.314443256239862e-01 +10 6 +8.709326319537562e-05 -2.646575528871847e+00 +10 7 +5.447133938049011e-04 +1.632839920017664e+00 +10 8 +1.752837291237968e-03 -3.921380033789357e-01 +10 9 +3.455315221404786e-03 -2.423297623635466e+00 +10 10 +4.398958252080046e-03 +1.824777167788847e+00 +10 11 +3.686186997488258e-03 -2.118471873997191e-01 +10 12 +2.037578409116048e-03 -2.243845516654770e+00 +10 13 +7.234336912109821e-04 +2.022235026239172e+00 +10 14 +1.396226098258371e-04 -4.414283457067352e-03 +10 15 +7.543732908067557e-06 +3.141592653589793e+00 +10 16 +1.396226098258371e-04 +4.414283457067352e-03 +10 17 +7.234336912109821e-04 -2.022235026239172e+00 +10 18 +2.037578409116048e-03 +2.243845516654770e+00 +10 19 +3.686186997488258e-03 +2.118471873997191e-01 +10 20 +4.398958252080046e-03 -1.824777167788847e+00 +10 21 +3.455315221404786e-03 +2.423297623635466e+00 +10 22 +1.752837291237968e-03 +3.921380033789357e-01 +10 23 +5.447133938049011e-04 -1.632839920017664e+00 +10 24 +8.709326319537562e-05 +2.646575528871847e+00 +10 25 +2.622883261358829e-06 +9.314443256239862e-01 +10 26 +3.470894493160968e-06 +1.161206954615527e+00 +10 27 +7.083439501810090e-06 -8.974638511617669e-01 +10 28 +6.575545000503195e-06 -3.126939959142825e+00 +10 29 +4.396610854841844e-06 +8.229914318834187e-01 +10 30 +2.512490246878957e-06 -1.740540983199852e+00 +11 0 +6.815671315359540e-06 +1.861061470172034e+00 +11 1 +8.264538431099037e-06 -6.437650550445522e-01 +11 2 +1.005401247062773e-05 -3.061949678367081e+00 +11 3 +1.059684653758765e-05 +8.161183645009484e-01 +11 4 +8.755895107819839e-06 -1.797709157570085e+00 +11 5 +1.555038478500510e-05 +1.258487129747056e+00 +11 6 +1.170561839376850e-04 -1.547964846691664e+00 +11 7 +5.962253896499082e-04 +2.344907217320733e+00 +11 8 +1.824100571423304e-03 +5.951457940207448e-02 +11 9 +3.550529315318575e-03 -2.195903617122770e+00 +11 10 +4.513631727635005e-03 +1.840376863246385e+00 +11 11 +3.777400017948165e-03 -4.051257304410525e-01 +11 12 +2.069898556039909e-03 -2.651051332924354e+00 +11 13 +7.321944395611375e-04 +1.386097387412421e+00 +11 14 +1.800591890588128e-04 -8.636898741057327e-01 +11 15 +7.252664246864497e-05 +3.141592653589793e+00 +11 16 +1.800591890588128e-04 +8.636898741057327e-01 +11 17 +7.321944395611375e-04 -1.386097387412421e+00 +11 18 +2.069898556039909e-03 +2.651051332924354e+00 +11 19 +3.777400017948165e-03 +4.051257304410525e-01 +11 20 +4.513631727635005e-03 -1.840376863246385e+00 +11 21 +3.550529315318575e-03 +2.195903617122770e+00 +11 22 +1.824100571423304e-03 -5.951457940207448e-02 +11 23 +5.962253896499082e-04 -2.344907217320733e+00 +11 24 +1.170561839376850e-04 +1.547964846691664e+00 +11 25 +1.555038478500510e-05 -1.258487129747056e+00 +11 26 +8.755895107819839e-06 +1.797709157570085e+00 +11 27 +1.059684653758765e-05 -8.161183645009484e-01 +11 28 +1.005401247062773e-05 +3.061949678367081e+00 +11 29 +8.264538431099037e-06 +6.437650550445522e-01 +11 30 +6.815671315359540e-06 -1.861061470172034e+00 +12 0 +9.749610156771229e-06 +1.899501613910234e+00 +12 1 +1.055180001296198e-05 -5.663511193620162e-01 +12 2 +1.180987001645569e-05 -2.995088307780634e+00 +12 3 +1.395571025914737e-05 +8.659489136294674e-01 +12 4 +2.057271886339045e-05 -1.658011675859393e+00 +12 5 +5.026620068793996e-05 +1.935302456025966e+00 +12 6 +1.931212798890028e-04 -7.415719727157921e-01 +12 7 +7.199830460496915e-04 +2.979427782095623e+00 +12 8 +1.978312822663844e-03 +4.873781814734178e-01 +12 9 +3.714503821754403e-03 -1.975153821834614e+00 +12 10 +4.680865749503483e-03 +1.855334128364682e+00 +12 11 +3.932112021941086e-03 -5.975922410088531e-01 +12 12 +2.178726369038801e-03 -3.058334631137071e+00 +12 13 +7.706810332112831e-04 +7.500091549620136e-01 +12 14 +1.501137773096962e-04 -1.699660405604777e+00 +12 15 +1.261640298775073e-05 +3.141592653589793e+00 +12 16 +1.501137773096962e-04 +1.699660405604777e+00 +12 17 +7.706810332112831e-04 -7.500091549620136e-01 +12 18 +2.178726369038801e-03 +3.058334631137071e+00 +12 19 +3.932112021941086e-03 +5.975922410088531e-01 +12 20 +4.680865749503483e-03 -1.855334128364682e+00 +12 21 +3.714503821754403e-03 +1.975153821834614e+00 +12 22 +1.978312822663844e-03 -4.873781814734178e-01 +12 23 +7.199830460496915e-04 -2.979427782095623e+00 +12 24 +1.931212798890028e-04 +7.415719727157921e-01 +12 25 +5.026620068793996e-05 -1.935302456025966e+00 +12 26 +2.057271886339045e-05 +1.658011675859393e+00 +12 27 +1.395571025914737e-05 -8.659489136294674e-01 +12 28 +1.180987001645569e-05 +2.995088307780634e+00 +12 29 +1.055180001296198e-05 +5.663511193620162e-01 +12 30 +9.749610156771229e-06 -1.899501613910234e+00 +13 0 +8.490623059819040e-06 +1.915939241468559e+00 +13 1 +8.799846154170221e-06 -5.334773244564758e-01 +13 2 +8.994677966752248e-06 -2.950454091773350e+00 +13 3 +1.010871017786102e-05 +1.011357468648082e+00 +13 4 +1.870330300271311e-05 -1.272380784789855e+00 +13 5 +6.084068161357250e-05 +2.549375512246812e+00 +13 6 +2.356274475978317e-04 -7.133626284867836e-02 +13 7 +8.098356562680192e-04 -2.734268468276089e+00 +13 8 +2.107865874310841e-03 +8.892817206636321e-01 +13 9 +3.865318650390775e-03 -1.762804914829039e+00 +13 10 +4.852291507897281e-03 +1.870847143298243e+00 +13 11 +4.126295330348602e-03 -7.824896135652568e-01 +13 12 +2.369155320117100e-03 +2.833764232620001e+00 +13 13 +9.147697022767272e-04 +1.275002826845424e-01 +13 14 +2.308142003576141e-04 -2.727369253382558e+00 +13 15 +6.328836926190641e-05 +0.000000000000000e+00 +13 16 +2.308142003576141e-04 +2.727369253382558e+00 +13 17 +9.147697022767272e-04 -1.275002826845424e-01 +13 18 +2.369155320117100e-03 -2.833764232620001e+00 +13 19 +4.126295330348602e-03 +7.824896135652568e-01 +13 20 +4.852291507897281e-03 -1.870847143298243e+00 +13 21 +3.865318650390775e-03 +1.762804914829039e+00 +13 22 +2.107865874310841e-03 -8.892817206636321e-01 +13 23 +8.098356562680192e-04 +2.734268468276089e+00 +13 24 +2.356274475978317e-04 +7.133626284867836e-02 +13 25 +6.084068161357250e-05 -2.549375512246812e+00 +13 26 +1.870330300271311e-05 +1.272380784789855e+00 +13 27 +1.010871017786102e-05 -1.011357468648082e+00 +13 28 +8.994677966752248e-06 +2.950454091773350e+00 +13 29 +8.799846154170221e-06 +5.334773244564758e-01 +13 30 +8.490623059819040e-06 -1.915939241468559e+00 +14 0 +4.687403389656196e-06 +1.936567417803040e+00 +14 1 +5.079153114463964e-06 -5.238383142181323e-01 +14 2 +4.497918246229313e-06 -3.013163028115734e+00 +14 3 +2.774071303358379e-06 +1.044144482558294e+00 +14 4 +5.904632068328592e-06 -6.176733460036111e-01 +14 5 +4.270413859622926e-05 -2.956753125877910e+00 +14 6 +2.207746257698169e-04 +6.241618063283547e-01 +14 7 +8.135918874377782e-04 -2.173855643984172e+00 +14 8 +2.139508173337537e-03 +1.282764032709730e+00 +14 9 +3.927780870116436e-03 -1.553040589718268e+00 +14 10 +4.956023042244558e-03 +1.889770283814365e+00 +14 11 +4.277097097416137e-03 -9.556489805500363e-01 +14 12 +2.546496865618815e-03 +2.473742390987577e+00 +14 13 +1.093698356447127e-03 -3.962547166394231e-01 +14 14 +4.092148715898557e-04 +2.978873351153034e+00 +14 15 +2.440103587145870e-04 +0.000000000000000e+00 +14 16 +4.092148715898557e-04 -2.978873351153034e+00 +14 17 +1.093698356447127e-03 +3.962547166394231e-01 +14 18 +2.546496865618815e-03 -2.473742390987577e+00 +14 19 +4.277097097416137e-03 +9.556489805500363e-01 +14 20 +4.956023042244558e-03 -1.889770283814365e+00 +14 21 +3.927780870116436e-03 +1.553040589718268e+00 +14 22 +2.139508173337537e-03 -1.282764032709730e+00 +14 23 +8.135918874377782e-04 +2.173855643984172e+00 +14 24 +2.207746257698169e-04 -6.241618063283547e-01 +14 25 +4.270413859622926e-05 +2.956753125877910e+00 +14 26 +5.904632068328592e-06 +6.176733460036111e-01 +14 27 +2.774071303358379e-06 -1.044144482558294e+00 +14 28 +4.497918246229313e-06 +3.013163028115734e+00 +14 29 +5.079153114463964e-06 +5.238383142181323e-01 +14 30 +4.687403389656196e-06 -1.936567417803040e+00 +15 0 +1.501257749887276e-06 +2.043199712770760e+00 +15 1 +2.435756825174617e-06 -4.540227289403051e-01 +15 2 +2.411966242960009e-06 +3.052900145366933e+00 +15 3 +7.157054724050202e-07 -1.108878935865808e-02 +15 4 +1.716069852294603e-06 +1.185680909590233e+00 +15 5 +3.013705168409485e-05 -1.926612473377235e+00 +15 6 +1.904842036316344e-04 +1.393601903869019e+00 +15 7 +7.619892865676402e-04 -1.591001194637603e+00 +15 8 +2.077488033630016e-03 +1.683516489656359e+00 +15 9 +3.878674705777598e-03 -1.339403745046817e+00 +15 10 +4.943717078853101e-03 +1.913339619672653e+00 +15 11 +4.303065526353173e-03 -1.121006006529734e+00 +15 12 +2.573644579802008e-03 +2.128081026963944e+00 +15 13 +1.075135802949144e-03 -8.880004818463271e-01 +15 14 +3.350972364282421e-04 +2.491080471436099e+00 +15 15 +1.464398667425757e-04 +0.000000000000000e+00 +15 16 +3.350972364282421e-04 -2.491080471436099e+00 +15 17 +1.075135802949144e-03 +8.880004818463271e-01 +15 18 +2.573644579802008e-03 -2.128081026963944e+00 +15 19 +4.303065526353173e-03 +1.121006006529734e+00 +15 20 +4.943717078853101e-03 -1.913339619672653e+00 +15 21 +3.878674705777598e-03 +1.339403745046817e+00 +15 22 +2.077488033630016e-03 -1.683516489656359e+00 +15 23 +7.619892865676402e-04 +1.591001194637603e+00 +15 24 +1.904842036316344e-04 -1.393601903869019e+00 +15 25 +3.013705168409485e-05 +1.926612473377235e+00 +15 26 +1.716069852294603e-06 -1.185680909590233e+00 +15 27 +7.157054724050202e-07 +1.108878935865808e-02 +15 28 +2.411966242960009e-06 -3.052900145366933e+00 +15 29 +2.435756825174617e-06 +4.540227289403051e-01 +15 30 +1.501257749887276e-06 -2.043199712770760e+00 +16 0 +2.323571591220434e-07 +2.811735348371966e+00 +16 1 +1.393475802039957e-06 -1.506713607058786e-01 +16 2 +2.091541786468290e-06 +2.971306017056170e+00 +16 3 +2.126752993258124e-06 -3.728732604132264e-01 +16 4 +4.835644738161436e-06 +2.379370908798890e+00 +16 5 +2.852474621669622e-05 -9.174421992060882e-01 +16 6 +1.659548141126014e-04 +2.195465070260356e+00 +16 7 +6.933826714206772e-04 -9.834748686100350e-01 +16 8 +1.963201825373199e-03 +2.097752299783800e+00 +16 9 +3.743280998425761e-03 -1.118811447155409e+00 +16 10 +4.819314315173870e-03 +1.940749666140792e+00 +16 11 +4.206415709376830e-03 -1.285230306516503e+00 +16 12 +2.492191540160578e-03 +1.772712471143939e+00 +16 13 +9.778007064550418e-04 -1.449473733432297e+00 +16 14 +2.051669934845689e-04 +1.612610839115060e+00 +16 15 +7.791777078841276e-08 +3.141592653589793e+00 +16 16 +2.051669934845689e-04 -1.612610839115060e+00 +16 17 +9.778007064550418e-04 +1.449473733432297e+00 +16 18 +2.492191540160578e-03 -1.772712471143939e+00 +16 19 +4.206415709376830e-03 +1.285230306516503e+00 +16 20 +4.819314315173870e-03 -1.940749666140792e+00 +16 21 +3.743280998425761e-03 +1.118811447155409e+00 +16 22 +1.963201825373199e-03 -2.097752299783800e+00 +16 23 +6.933826714206772e-04 +9.834748686100350e-01 +16 24 +1.659548141126014e-04 -2.195465070260356e+00 +16 25 +2.852474621669622e-05 +9.174421992060882e-01 +16 26 +4.835644738161436e-06 -2.379370908798890e+00 +16 27 +2.126752993258124e-06 +3.728732604132264e-01 +16 28 +2.091541786468290e-06 -2.971306017056170e+00 +16 29 +1.393475802039957e-06 +1.506713607058786e-01 +16 30 +2.323571591220434e-07 -2.811735348371966e+00 +17 0 +6.534106903077690e-07 -2.201302107155600e+00 +17 1 +1.487306123431552e-06 +2.384601841894610e-01 +17 2 +1.979172297174789e-06 +3.034710102657074e+00 +17 3 +1.976234205687681e-06 -2.593156681447208e-01 +17 4 +3.531951296812328e-06 +3.041551224802667e+00 +17 5 +2.095624840708503e-05 +1.654729205113191e-02 +17 6 +1.382476024308607e-04 +3.022571341792594e+00 +17 7 +6.241889811214583e-04 -3.511746850847109e-01 +17 8 +1.838277343110348e-03 +2.526084225108844e+00 +17 9 +3.567829091690213e-03 -8.916739962226757e-01 +17 10 +4.619649049288467e-03 +1.970258030983814e+00 +17 11 +4.029180994811406e-03 -1.450258295670681e+00 +17 12 +2.389692813180007e-03 +1.414023835226747e+00 +17 13 +9.801953064551853e-04 -2.015282110426567e+00 +17 14 +3.010360683959697e-04 +7.456547795937115e-01 +17 15 +1.339147984653232e-04 +3.141592653589793e+00 +17 16 +3.010360683959697e-04 -7.456547795937115e-01 +17 17 +9.801953064551853e-04 +2.015282110426567e+00 +17 18 +2.389692813180007e-03 -1.414023835226747e+00 +17 19 +4.029180994811406e-03 +1.450258295670681e+00 +17 20 +4.619649049288467e-03 -1.970258030983814e+00 +17 21 +3.567829091690213e-03 +8.916739962226757e-01 +17 22 +1.838277343110348e-03 -2.526084225108844e+00 +17 23 +6.241889811214583e-04 +3.511746850847109e-01 +17 24 +1.382476024308607e-04 -3.022571341792594e+00 +17 25 +2.095624840708503e-05 -1.654729205113191e-02 +17 26 +3.531951296812328e-06 -3.041551224802667e+00 +17 27 +1.976234205687681e-06 +2.593156681447208e-01 +17 28 +1.979172297174789e-06 -3.034710102657074e+00 +17 29 +1.487306123431552e-06 -2.384601841894610e-01 +17 30 +6.534106903077690e-07 +2.201302107155600e+00 +18 0 +1.876059361241538e-06 -2.011148664993613e+00 +18 1 +2.057784840208347e-06 +3.744774360317244e-01 +18 2 +1.777613271338336e-06 +2.964246414037008e+00 +18 3 +8.699234969159874e-07 -5.340200317616368e-01 +18 4 +1.968652577303025e-07 -2.238085283356369e+00 +18 5 +1.208171122223021e-05 +1.207030039480447e+00 +18 6 +1.171139379151092e-04 -2.357999045043575e+00 +18 7 +5.767959563594669e-04 +3.078856026504168e-01 +18 8 +1.740740070141123e-03 +2.964720363281099e+00 +18 9 +3.396802527464631e-03 -6.615941457758723e-01 +18 10 +4.382735284334756e-03 +1.998645120690977e+00 +18 11 +3.786662133385478e-03 -1.618193640641173e+00 +18 12 +2.219758764675431e-03 +1.058256489673292e+00 +18 13 +9.142867897053784e-04 -2.528122472692822e+00 +18 14 +3.110029558942641e-04 +2.306023892565730e-01 +18 15 +1.692446500089834e-04 +3.141592653589793e+00 +18 16 +3.110029558942641e-04 -2.306023892565730e-01 +18 17 +9.142867897053784e-04 +2.528122472692822e+00 +18 18 +2.219758764675431e-03 -1.058256489673292e+00 +18 19 +3.786662133385478e-03 +1.618193640641173e+00 +18 20 +4.382735284334756e-03 -1.998645120690977e+00 +18 21 +3.396802527464631e-03 +6.615941457758723e-01 +18 22 +1.740740070141123e-03 -2.964720363281099e+00 +18 23 +5.767959563594669e-04 -3.078856026504168e-01 +18 24 +1.171139379151092e-04 +2.357999045043575e+00 +18 25 +1.208171122223021e-05 -1.207030039480447e+00 +18 26 +1.968652577303025e-07 +2.238085283356369e+00 +18 27 +8.699234969159874e-07 +5.340200317616368e-01 +18 28 +1.777613271338336e-06 -2.964246414037008e+00 +18 29 +2.057784840208347e-06 -3.744774360317244e-01 +18 30 +1.876059361241538e-06 +2.011148664993613e+00 +19 0 +3.062840789809967e-06 -2.014620959279681e+00 +19 1 +2.527808076843036e-06 +2.947052322589380e-01 +19 2 +1.633271973488836e-06 +2.735344592945858e+00 +19 3 +9.736235185669393e-07 -1.087794466835809e+00 +19 4 +1.380503967706013e-06 +7.104880582137566e-01 +19 5 +1.469419689216322e-05 +2.566186602879802e+00 +19 6 +1.207048147882760e-04 -1.424027965104101e+00 +19 7 +5.719123589096748e-04 +9.727205479419120e-01 +19 8 +1.692871022540258e-03 -2.880488120806578e+00 +19 9 +3.256428719310688e-03 -4.349185005652723e-01 +19 10 +4.139632891211538e-03 +2.021089899010358e+00 +19 11 +3.504909208546127e-03 -1.795588466645752e+00 +19 12 +1.982724381278589e-03 +6.857238083448136e-01 +19 13 +7.402920491410022e-04 -3.086459630044613e+00 +19 14 +1.617462685140096e-04 -4.653661885478642e-01 +19 15 +2.053330572468854e-05 +3.141592653589793e+00 +19 16 +1.617462685140096e-04 +4.653661885478642e-01 +19 17 +7.402920491410022e-04 +3.086459630044613e+00 +19 18 +1.982724381278589e-03 -6.857238083448136e-01 +19 19 +3.504909208546127e-03 +1.795588466645752e+00 +19 20 +4.139632891211538e-03 -2.021089899010358e+00 +19 21 +3.256428719310688e-03 +4.349185005652723e-01 +19 22 +1.692871022540258e-03 +2.880488120806578e+00 +19 23 +5.719123589096748e-04 -9.727205479419120e-01 +19 24 +1.207048147882760e-04 +1.424027965104101e+00 +19 25 +1.469419689216322e-05 -2.566186602879802e+00 +19 26 +1.380503967706013e-06 -7.104880582137566e-01 +19 27 +9.736235185669393e-07 +1.087794466835809e+00 +19 28 +1.633271973488836e-06 -2.735344592945858e+00 +19 29 +2.527808076843036e-06 -2.947052322589380e-01 +19 30 +3.062840789809967e-06 +2.014620959279681e+00 +20 0 +3.965288889790357e-06 -2.081008681259280e+00 +20 1 +2.752129060676672e-06 +6.867471464604066e-02 +20 2 +1.161841016756794e-06 +2.363303621247902e+00 +20 3 +5.701545853936663e-07 -1.011964061971870e+00 +20 4 +3.098355792788597e-06 +1.584743070564394e+00 +20 5 +2.353023458085338e-05 -2.653883821481612e+00 +20 6 +1.431860973840122e-04 -5.633629733303706e-01 +20 7 +6.003781224686864e-04 +1.609730279147082e+00 +20 8 +1.683390907031591e-03 -2.456502243105343e+00 +20 9 +3.145644377756497e-03 -2.179220619553214e-01 +20 10 +3.912068929840578e-03 +2.033624263437915e+00 +20 11 +3.233033884460954e-03 -1.986635202126267e+00 +20 12 +1.771385768497788e-03 +2.889966916874568e-01 +20 13 +6.375462234056684e-04 +2.571924323569104e+00 +20 14 +1.434980619272460e-04 -1.501380316299196e+00 +20 15 +3.195125662258565e-05 +0.000000000000000e+00 +20 16 +1.434980619272460e-04 +1.501380316299196e+00 +20 17 +6.375462234056684e-04 -2.571924323569104e+00 +20 18 +1.771385768497788e-03 -2.889966916874568e-01 +20 19 +3.233033884460954e-03 +1.986635202126267e+00 +20 20 +3.912068929840578e-03 -2.033624263437915e+00 +20 21 +3.145644377756497e-03 +2.179220619553214e-01 +20 22 +1.683390907031591e-03 +2.456502243105343e+00 +20 23 +6.003781224686864e-04 -1.609730279147082e+00 +20 24 +1.431860973840122e-04 +5.633629733303706e-01 +20 25 +2.353023458085338e-05 +2.653883821481612e+00 +20 26 +3.098355792788597e-06 -1.584743070564394e+00 +20 27 +5.701545853936663e-07 +1.011964061971870e+00 +20 28 +1.161841016756794e-06 -2.363303621247902e+00 +20 29 +2.752129060676672e-06 -6.867471464604066e-02 +20 30 +3.965288889790357e-06 +2.081008681259280e+00 +21 0 +4.809474577021396e-06 -2.171980911376203e+00 +21 1 +3.265902127647575e-06 -2.535455029393719e-01 +21 2 +1.153290298311127e-06 +1.543814731907929e+00 +21 3 +1.734187798996243e-07 +1.879765095011150e+00 +21 4 +4.307226170255345e-06 +2.774940500262441e+00 +21 5 +3.268845994111086e-05 -1.713766442714405e+00 +21 6 +1.673952798494322e-04 +2.135075974759551e-01 +21 7 +6.297509875229867e-04 +2.206664848092117e+00 +21 8 +1.674683627968040e-03 -2.051977244238223e+00 +21 9 +3.043996694190472e-03 -1.280017408737436e-02 +21 10 +3.709176492544443e-03 +2.035318463482763e+00 +21 11 +2.997312013828311e-03 -2.190744399962801e+00 +21 12 +1.599019952667030e-03 -1.210423259653079e-01 +21 13 +5.728662937094130e-04 +1.968206649058871e+00 +21 14 +1.609992934304200e-04 -2.190600359447642e+00 +21 15 +7.737655471200314e-05 +0.000000000000000e+00 +21 16 +1.609992934304200e-04 +2.190600359447642e+00 +21 17 +5.728662937094130e-04 -1.968206649058871e+00 +21 18 +1.599019952667030e-03 +1.210423259653079e-01 +21 19 +2.997312013828311e-03 +2.190744399962801e+00 +21 20 +3.709176492544443e-03 -2.035318463482763e+00 +21 21 +3.043996694190472e-03 +1.280017408737436e-02 +21 22 +1.674683627968040e-03 +2.051977244238223e+00 +21 23 +6.297509875229867e-04 -2.206664848092117e+00 +21 24 +1.673952798494322e-04 -2.135075974759551e-01 +21 25 +3.268845994111086e-05 +1.713766442714405e+00 +21 26 +4.307226170255345e-06 -2.774940500262441e+00 +21 27 +1.734187798996243e-07 -1.879765095011150e+00 +21 28 +1.153290298311127e-06 -1.543814731907929e+00 +21 29 +3.265902127647575e-06 +2.535455029393719e-01 +21 30 +4.809474577021396e-06 +2.171980911376203e+00 +22 0 +5.555042869803733e-06 -2.247386890301071e+00 +22 1 +4.420635368354199e-06 -4.989357143477955e-01 +22 2 +3.028730507567648e-06 +1.085365339979036e+00 +22 3 +3.100707295620601e-06 +2.363016064990055e+00 +22 4 +9.243914480592160e-06 -2.568377855653946e+00 +22 5 +4.087587045427118e-05 -8.896328874522640e-01 +22 6 +1.760607022307088e-04 +9.278975482125567e-01 +22 7 +6.247370338825327e-04 +2.775355111627979e+00 +22 8 +1.629230426377810e-03 -1.660328515305058e+00 +22 9 +2.933474132420932e-03 +1.842445203660077e-01 +22 10 +3.538408480595143e-03 +2.028547045507269e+00 +22 11 +2.811983434809747e-03 -2.406934648502438e+00 +22 12 +1.451910099681378e-03 -5.497464037892821e-01 +22 13 +4.768548007400953e-04 +1.334094476143916e+00 +22 14 +9.099433778678653e-05 -2.953385638500595e+00 +22 15 +1.171746709542609e-05 +0.000000000000000e+00 +22 16 +9.099433778678653e-05 +2.953385638500595e+00 +22 17 +4.768548007400953e-04 -1.334094476143916e+00 +22 18 +1.451910099681378e-03 +5.497464037892821e-01 +22 19 +2.811983434809747e-03 +2.406934648502438e+00 +22 20 +3.538408480595143e-03 -2.028547045507269e+00 +22 21 +2.933474132420932e-03 -1.842445203660077e-01 +22 22 +1.629230426377810e-03 +1.660328515305058e+00 +22 23 +6.247370338825327e-04 -2.775355111627979e+00 +22 24 +1.760607022307088e-04 -9.278975482125567e-01 +22 25 +4.087587045427118e-05 +8.896328874522640e-01 +22 26 +9.243914480592160e-06 +2.568377855653946e+00 +22 27 +3.100707295620601e-06 -2.363016064990055e+00 +22 28 +3.028730507567648e-06 -1.085365339979036e+00 +22 29 +4.420635368354199e-06 +4.989357143477955e-01 +22 30 +5.555042869803733e-06 +2.247386890301071e+00 +23 0 +5.404189672356805e-06 -2.289862408085583e+00 +23 1 +4.892870830299098e-06 -6.031713602290744e-01 +23 2 +4.557607934560358e-06 +1.027638520798098e+00 +23 3 +5.537092541242136e-06 +2.611848083345418e+00 +23 4 +1.083855203679700e-05 -1.996112044067439e+00 +23 5 +3.547085934154473e-05 -1.789859226821584e-01 +23 6 +1.510775020427121e-04 +1.624860484602519e+00 +23 7 +5.676546615136151e-04 -2.935725765591235e+00 +23 8 +1.538572432507774e-03 -1.265211444905808e+00 +23 9 +2.819067621052516e-03 +3.816120411392252e-01 +23 10 +3.417150766148686e-03 +2.018655977720567e+00 +23 11 +2.705429500718680e-03 -2.631357509526925e+00 +23 12 +1.374749562040417e-03 -9.991935414664769e-01 +23 13 +4.333463453912217e-04 +6.325645254269204e-01 +23 14 +7.941771000134053e-05 +2.216307409398315e+00 +23 15 +1.479566369747944e-05 +3.141592653589793e+00 +23 16 +7.941771000134053e-05 -2.216307409398315e+00 +23 17 +4.333463453912217e-04 -6.325645254269204e-01 +23 18 +1.374749562040417e-03 +9.991935414664769e-01 +23 19 +2.705429500718680e-03 +2.631357509526925e+00 +23 20 +3.417150766148686e-03 -2.018655977720567e+00 +23 21 +2.819067621052516e-03 -3.816120411392252e-01 +23 22 +1.538572432507774e-03 +1.265211444905808e+00 +23 23 +5.676546615136151e-04 +2.935725765591235e+00 +23 24 +1.510775020427121e-04 -1.624860484602519e+00 +23 25 +3.547085934154473e-05 +1.789859226821584e-01 +23 26 +1.083855203679700e-05 +1.996112044067439e+00 +23 27 +5.537092541242136e-06 -2.611848083345418e+00 +23 28 +4.557607934560358e-06 -1.027638520798098e+00 +23 29 +4.892870830299098e-06 +6.031713602290744e-01 +23 30 +5.404189672356805e-06 +2.289862408085583e+00 +24 0 +3.955165536724783e-06 -2.318576083044935e+00 +24 1 +3.584741991399201e-06 -6.478589163671482e-01 +24 2 +3.508885372422360e-06 +1.051467605268970e+00 +24 3 +3.939399145842972e-06 +2.755653555572619e+00 +24 4 +4.822757117855054e-06 -1.629194079160083e+00 +24 5 +1.528945559383431e-05 +5.848487341918704e-01 +24 6 +1.028440676156929e-04 +2.416682766979947e+00 +24 7 +4.865196638755525e-04 -2.314341101411908e+00 +24 8 +1.440956718322974e-03 -8.489839322348290e-01 +24 9 +2.733108955173010e-03 +5.875194318292357e-01 +24 10 +3.366008382925306e-03 +2.012180468810431e+00 +24 11 +2.697020398631471e-03 -2.854759561746401e+00 +24 12 +1.391340841413025e-03 -1.450227743636615e+00 +24 13 +4.489266759395228e-04 -6.294202351928353e-02 +24 14 +8.931113109195366e-05 +1.343688147494668e+00 +24 15 +2.423720573557286e-05 +3.141592653589793e+00 +24 16 +8.931113109195366e-05 -1.343688147494668e+00 +24 17 +4.489266759395228e-04 +6.294202351928353e-02 +24 18 +1.391340841413025e-03 +1.450227743636615e+00 +24 19 +2.697020398631471e-03 +2.854759561746401e+00 +24 20 +3.366008382925306e-03 -2.012180468810431e+00 +24 21 +2.733108955173010e-03 -5.875194318292357e-01 +24 22 +1.440956718322974e-03 +8.489839322348290e-01 +24 23 +4.865196638755525e-04 +2.314341101411908e+00 +24 24 +1.028440676156929e-04 -2.416682766979947e+00 +24 25 +1.528945559383431e-05 -5.848487341918704e-01 +24 26 +4.822757117855054e-06 +1.629194079160083e+00 +24 27 +3.939399145842972e-06 -2.755653555572619e+00 +24 28 +3.508885372422360e-06 -1.051467605268970e+00 +24 29 +3.584741991399201e-06 +6.478589163671482e-01 +24 30 +3.955165536724783e-06 +2.318576083044935e+00 +25 0 +2.214633245267957e-06 -2.380654832344175e+00 +25 1 +1.585525169790331e-06 -7.382129302982456e-01 +25 2 +1.483434350126737e-06 +1.113118438649884e+00 +25 3 +1.972238971450125e-06 +2.773376970222584e+00 +25 4 +8.239998404110594e-07 -2.062520022323398e+00 +25 5 +3.274470653067594e-06 +2.145529107261866e+00 +25 6 +7.580088249132948e-05 -2.850581964585982e+00 +25 7 +4.457366278418717e-04 -1.624711481823877e+00 +25 8 +1.401383271659800e-03 -4.090909002866214e-01 +25 9 +2.715854393917418e-03 +8.034151949336114e-01 +25 10 +3.391604051034845e-03 +2.013094414121256e+00 +25 11 +2.775387360033505e-03 -3.067212418606424e+00 +25 12 +1.495302570719864e-03 -1.882051967139865e+00 +25 13 +5.208990796590071e-04 -7.413389996907479e-01 +25 14 +9.956297062102457e-05 +2.780709280116937e-01 +25 15 +4.074204269152465e-06 +0.000000000000000e+00 +25 16 +9.956297062102457e-05 -2.780709280116937e-01 +25 17 +5.208990796590071e-04 +7.413389996907479e-01 +25 18 +1.495302570719864e-03 +1.882051967139865e+00 +25 19 +2.775387360033505e-03 +3.067212418606424e+00 +25 20 +3.391604051034845e-03 -2.013094414121256e+00 +25 21 +2.715854393917418e-03 -8.034151949336114e-01 +25 22 +1.401383271659800e-03 +4.090909002866214e-01 +25 23 +4.457366278418717e-04 +1.624711481823877e+00 +25 24 +7.580088249132948e-05 +2.850581964585982e+00 +25 25 +3.274470653067594e-06 -2.145529107261866e+00 +25 26 +8.239998404110594e-07 +2.062520022323398e+00 +25 27 +1.972238971450125e-06 -2.773376970222584e+00 +25 28 +1.483434350126737e-06 -1.113118438649884e+00 +25 29 +1.585525169790331e-06 +7.382129302982456e-01 +25 30 +2.214633245267957e-06 +2.380654832344175e+00 +26 0 +1.270433760442372e-06 -2.558040804690938e+00 +26 1 +3.916387056204372e-07 -1.223378071854823e+00 +26 2 +2.231233391960010e-07 +1.614121389191418e+00 +26 3 +1.503250077270970e-06 +3.038198643803694e+00 +26 4 +3.125235105917701e-06 -2.566554539861158e+00 +26 5 +1.232580616064923e-05 -2.396295662452039e+00 +26 6 +9.755857943602422e-05 -1.805619806310435e+00 +26 7 +4.851055857767528e-04 -9.277618704018017e-01 +26 8 +1.457115907850736e-03 +3.307502262911184e-02 +26 9 +2.782087863624691e-03 +1.021533744723601e+00 +26 10 +3.471885190847275e-03 +2.019796193017092e+00 +26 11 +2.885556868129979e-03 +3.018943294207879e+00 +26 12 +1.636626067410123e-03 -2.275076295555957e+00 +26 13 +6.667717289764138e-04 -1.324357097815117e+00 +26 14 +2.263997570460314e-04 -5.058517534261832e-01 +26 15 +1.189280941020137e-04 +0.000000000000000e+00 +26 16 +2.263997570460314e-04 +5.058517534261832e-01 +26 17 +6.667717289764138e-04 +1.324357097815117e+00 +26 18 +1.636626067410123e-03 +2.275076295555957e+00 +26 19 +2.885556868129979e-03 -3.018943294207879e+00 +26 20 +3.471885190847275e-03 -2.019796193017092e+00 +26 21 +2.782087863624691e-03 -1.021533744723601e+00 +26 22 +1.457115907850736e-03 -3.307502262911184e-02 +26 23 +4.851055857767528e-04 +9.277618704018017e-01 +26 24 +9.755857943602422e-05 +1.805619806310435e+00 +26 25 +1.232580616064923e-05 +2.396295662452039e+00 +26 26 +3.125235105917701e-06 +2.566554539861158e+00 +26 27 +1.503250077270970e-06 -3.038198643803694e+00 +26 28 +2.231233391960010e-07 -1.614121389191418e+00 +26 29 +3.916387056204372e-07 +1.223378071854823e+00 +26 30 +1.270433760442372e-06 +2.558040804690938e+00 +27 0 +1.299354594308245e-06 -2.810450327725316e+00 +27 1 +5.522911269684502e-07 -2.357429005347343e+00 +27 2 +4.619462725569895e-07 -2.774883791371455e+00 +27 3 +2.265200690627976e-06 -2.555970467086023e+00 +27 4 +8.097778286089136e-06 -2.033722659704630e+00 +27 5 +3.240334951419666e-05 -1.543507016642530e+00 +27 6 +1.498979407853844e-04 -9.764958232758859e-01 +27 7 +5.803392722650569e-04 -2.952934901306981e-01 +27 8 +1.582282591448272e-03 +4.521582388689634e-01 +27 9 +2.903121917018245e-03 +1.231006299380221e+00 +27 10 +3.560888391768400e-03 +2.025385270552738e+00 +27 11 +2.942173666034896e-03 +2.829690532819357e+00 +27 12 +1.681218578604672e-03 -2.638296222481109e+00 +27 13 +7.183020985079531e-04 -1.803770051261125e+00 +27 14 +2.890668649459803e-04 -9.298498948151969e-01 +27 15 +1.861637286406668e-04 +0.000000000000000e+00 +27 16 +2.890668649459803e-04 +9.298498948151969e-01 +27 17 +7.183020985079531e-04 +1.803770051261125e+00 +27 18 +1.681218578604672e-03 +2.638296222481109e+00 +27 19 +2.942173666034896e-03 -2.829690532819357e+00 +27 20 +3.560888391768400e-03 -2.025385270552738e+00 +27 21 +2.903121917018245e-03 -1.231006299380221e+00 +27 22 +1.582282591448272e-03 -4.521582388689634e-01 +27 23 +5.803392722650569e-04 +2.952934901306981e-01 +27 24 +1.498979407853844e-04 +9.764958232758859e-01 +27 25 +3.240334951419666e-05 +1.543507016642530e+00 +27 26 +8.097778286089136e-06 +2.033722659704630e+00 +27 27 +2.265200690627976e-06 +2.555970467086023e+00 +27 28 +4.619462725569895e-07 +2.774883791371455e+00 +27 29 +5.522911269684502e-07 +2.357429005347343e+00 +27 30 +1.299354594308245e-06 +2.810450327725316e+00 +28 0 +2.040365887620211e-06 -2.944362417907449e+00 +28 1 +1.650917666586412e-06 -2.624269349310392e+00 +28 2 +1.774875725028040e-06 -2.390515565325964e+00 +28 3 +3.556606295780957e-06 -1.974726010945476e+00 +#28 4 +1.121238171560661e-05 -1.385465366809091e+00 +28 5 +4.596797846319543e-05 -8.113605617432245e-01 +28 6 +1.924256950599667e-04 -2.715389616018079e-01 +28 7 +6.695452279961972e-04 +2.757092230944649e-01 +28 8 +1.710357891797661e-03 +8.429865273668179e-01 +28 9 +3.026685345607163e-03 +1.426483070512609e+00 +28 10 +3.623902514336288e-03 +2.022026886313071e+00 +28 11 +2.912274546185048e-03 +2.630670844368721e+00 +28 12 +1.573517463148064e-03 -3.018854515822935e+00 +28 13 +5.814421846018108e-04 -2.320144401091338e+00 +28 14 +1.585057189477723e-04 -1.426033652831210e+00 +28 15 +6.269150114528087e-05 +0.000000000000000e+00 +28 16 +1.585057189477723e-04 +1.426033652831210e+00 +28 17 +5.814421846018108e-04 +2.320144401091338e+00 +28 18 +1.573517463148064e-03 +3.018854515822935e+00 +28 19 +2.912274546185048e-03 -2.630670844368721e+00 +28 20 +3.623902514336288e-03 -2.022026886313071e+00 +28 21 +3.026685345607163e-03 -1.426483070512609e+00 +28 22 +1.710357891797661e-03 -8.429865273668179e-01 +28 23 +6.695452279961972e-04 -2.757092230944649e-01 +28 24 +1.924256950599667e-04 +2.715389616018079e-01 +28 25 +4.596797846319543e-05 +8.113605617432245e-01 +28 26 +1.121238171560661e-05 +1.385465366809091e+00 +28 27 +3.556606295780957e-06 +1.974726010945476e+00 +28 28 +1.774875725028040e-06 +2.390515565325964e+00 +28 29 +1.650917666586412e-06 +2.624269349310392e+00 +28 30 +2.040365887620211e-06 +2.944362417907449e+00 +29 0 +2.889936412548378e-06 -2.994531899933974e+00 +29 1 +2.523107656067143e-06 -2.697373995460027e+00 +29 2 +2.137256869716177e-06 -2.310870643295036e+00 +29 3 +2.408742209727751e-06 -1.591493690217421e+00 +29 4 +7.837863399645522e-06 -6.734539442742699e-01 +29 5 +4.293412664154757e-05 -4.085097259672863e-02 +29 6 +2.012737823483604e-04 +4.184329079576307e-01 +29 7 +7.094420933272181e-04 +8.244542662951017e-01 +29 8 +1.788723143733490e-03 +1.217842640968962e+00 +29 9 +3.116507360268357e-03 +1.610766717678405e+00 +29 10 +3.668485365947303e-03 +2.007121907373675e+00 +29 11 +2.864609577951840e-03 +2.410448402824716e+00 +29 12 +1.444029026933867e-03 +2.830130953363799e+00 +29 13 +4.403845160530417e-04 -2.990429978521223e+00 +29 14 +6.521201643211877e-05 -2.429438007852455e+00 +29 15 +2.389980714464935e-07 +3.141592653589793e+00 +29 16 +6.521201643211877e-05 +2.429438007852455e+00 +29 17 +4.403845160530417e-04 +2.990429978521223e+00 +29 18 +1.444029026933867e-03 -2.830130953363799e+00 +29 19 +2.864609577951840e-03 -2.410448402824716e+00 +29 20 +3.668485365947303e-03 -2.007121907373675e+00 +29 21 +3.116507360268357e-03 -1.610766717678405e+00 +29 22 +1.788723143733490e-03 -1.217842640968962e+00 +29 23 +7.094420933272181e-04 -8.244542662951017e-01 +29 24 +2.012737823483604e-04 -4.184329079576307e-01 +29 25 +4.293412664154757e-05 +4.085097259672863e-02 +29 26 +7.837863399645522e-06 +6.734539442742699e-01 +29 27 +2.408742209727751e-06 +1.591493690217421e+00 +29 28 +2.137256869716177e-06 +2.310870643295036e+00 +29 29 +2.523107656067143e-06 +2.697373995460027e+00 +29 30 +2.889936412548378e-06 +2.994531899933974e+00 +30 0 +3.189540008095353e-06 -3.034008545707213e+00 +30 1 +2.665276215102024e-06 -2.821803608911669e+00 +30 2 +1.538390887473923e-06 -2.573955674704338e+00 +30 3 +2.126393704049059e-07 -1.781899820468252e+00 +30 4 +2.872410902877456e-06 +4.770303271098219e-01 +30 5 +3.332700529158972e-05 +8.752713807062190e-01 +30 6 +1.874186897482456e-04 +1.149761099579249e+00 +30 7 +7.023315789295831e-04 +1.381950774724242e+00 +30 8 +1.808842702438711e-03 +1.592066070224819e+00 +30 9 +3.169450767598823e-03 +1.791595851091539e+00 +30 10 +3.727981450772813e-03 +1.986077106293711e+00 +30 11 +2.895425157778220e-03 +2.176417940045305e+00 +30 12 +1.436817970496205e-03 +2.359146064855967e+00 +30 13 +4.198892675035715e-04 +2.525069617213427e+00 +30 14 +6.131415667355502e-05 +2.673473035543106e+00 +30 15 +9.736971670136333e-06 +3.141592653589793e+00 +30 16 +6.131415667355502e-05 -2.673473035543106e+00 +30 17 +4.198892675035715e-04 -2.525069617213427e+00 +30 18 +1.436817970496205e-03 -2.359146064855967e+00 +30 19 +2.895425157778220e-03 -2.176417940045305e+00 +30 20 +3.727981450772813e-03 -1.986077106293711e+00 +30 21 +3.169450767598823e-03 -1.791595851091539e+00 +30 22 +1.808842702438711e-03 -1.592066070224819e+00 +30 23 +7.023315789295831e-04 -1.381950774724242e+00 +30 24 +1.874186897482456e-04 -1.149761099579249e+00 +30 25 +3.332700529158972e-05 -8.752713807062190e-01 +30 26 +2.872410902877456e-06 -4.770303271098219e-01 +30 27 +2.126393704049059e-07 +1.781899820468252e+00 +30 28 +1.538390887473923e-06 +2.573955674704338e+00 +30 29 +2.665276215102024e-06 +2.821803608911669e+00 +30 30 +3.189540008095353e-06 +3.034008545707213e+00 diff --git a/test/functional/test_graph3d.py b/test/functional/test_graph3d.py new file mode 100755 index 00000000..3aba9bf6 --- /dev/null +++ b/test/functional/test_graph3d.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python +import sys; sys.path[:0] = ["../.."] + +import math +from pyx import * + +text.set(mode="latex") + +def test_minimal(c, x, y): + g = c.insert(graph.graphxyz(x, y, width=5, height=5, depth=5)) + g.plot(graph.data.file("data/husimi_small.dat", x=1, y=2, z=3)) + +def test_line(c, x, y): + g = c.insert(graph.graphxyz(x, y, width=5, height=5, depth=5)) + g.plot(graph.data.file("data/husimi_small.dat", x=1, y=2, z=3), [graph.style.line()]) + +def test_surface(c, x, y): + g = c.insert(graph.graphxyz(x, y, width=5, height=5, depth=5)) + g.plot(graph.data.file("data/husimi_small.dat", x=1, y=2, z=3, color=3), [graph.style.surface()]) + +def test_surface2d(c, x, y): + g = c.insert(graph.graphxy(x, y, width=5, height=5)) + g.plot(graph.data.file("data/husimi_small.dat", x=1, y=2, color=3), [graph.style.surface()]) + +c = canvas.canvas() +test_minimal(c, 0, 0) +test_line(c, 0, -8) +test_surface(c, 0, -16) +test_surface2d(c, -3, -28) + +c.writeEPSfile("test_graph3d", paperformat=document.paperformat.A4) +c.writePDFfile("test_graph3d", paperformat=document.paperformat.A4) + -- 2.11.4.GIT