def test_sort(): random.seed(42) rvals = pgf.var_int() rkeys = pgf.var_int() rsorted = pgf.sort(rvals, rkeys) lvals = [] lkeys = [] for _ in range(10): nItems = random.randint(75, 155) vals = list(range(nItems)) keys = list(range(nItems)) random.shuffle(vals) random.shuffle(keys) lvals.append(vals) lkeys.append(keys) expected = [ x for x, _ in sorted(zip(vals, keys), key=lambda pair: pair[1]) ] pgf.assign(rvals, vals) pgf.assign(rkeys, keys) assert tu.equal(expected, pgf.read(rsorted)) # Test the same with tree combinatorics. expected = [[x for x, _ in sorted(zip(v, k), key=lambda pair: pair[1])] for v, k in zip(lvals, lkeys)] pgf.assign(rvals, lvals) pgf.assign(rkeys, lkeys) assert tu.equal(expected, pgf.read(rsorted))
def test_heterogenousTrees(): random.seed(42) vals1 = [[2], [3]] vals2 = [4, 5] expected = [[8, 10], [12, 15]] rvals1 = pgf.var_int(vals1) rvals2 = pgf.var_int(vals2) prod = pgf.mul(rvals1, rvals2) assert tu.equal(expected, pgf.read(prod))
def test_itemListMapping(): random.seed(42) singleval = 42 single = pgf.var_int(singleval) lst = pgf.var_int() out = pgf.add(single, lst) for _ in range(10): vals = list(range(12)) random.shuffle(vals) expected = [singleval + v for v in vals] pgf.assign(lst, vals) assert tu.equal(expected, pgf.read(out))
def test_seriesInt(): random.seed(42) valrange = (23, 256) steprange = (2, 9) valstart = random.randint(valrange[0], valrange[1]) valstep = random.randint(steprange[0], steprange[1]) valcount = random.randint(valrange[0], valrange[1]) valstop = valstart + valstep * valcount start = pgf.var_int(valstart) step = pgf.var_int(valstep) count = pgf.var_int(valcount) series = pgf.series(start, step, count) assert tu.equal(range(valstart, valstop, valstep), pgf.read(series))
def test_combinations(): random.seed(42) valrange = (23, 345) rvals = pgf.var_int() rnumc = pgf.var_int() rcombs = pgf.combinations(rvals, rnumc) for _ in range(5): nItems = random.randint(23, 29) numc = random.randint(3, 5) vals = [ random.randint(valrange[0], valrange[1]) for _ in range(nItems) ] combs = list(itertools.combinations(vals, numc)) pgf.assign(rvals, vals) pgf.assign(rnumc, numc) assert tu.equal(combs, pgf.read(rcombs))
def repeatGenericTest(val, pgvarfn, comparefn): random.seed(42) count = random.randint(23, 345) vals = [val for _ in range(count)] rval = pgvarfn(val) result = pgf.repeat(rval, pgf.var_int(count)) assert comparefn(vals, pgf.read(result))
def test_listSumInt(): random.seed(42) valrange = (23, 345) vals = [random.randint(valrange[0], valrange[1]) for _ in range(25)] lst = pgf.var_int(vals) result = pgf.listSum(lst) assert tu.equal(sum(vals), pgf.read(result))
def test_treeInputs(): random.seed(42) vals = [[random.randint(23, 345) for _ in range(10)] for _ in range(10)] rvals = pgf.var_int() rsum = pgf.treeSum(rvals) expected = sum([sum(v) for v in vals]) pgf.assign(rvals, vals) assert tu.equal(expected, pgf.read(rsum))
def listItemGenericTest(vals, pgvarfn, comparefn): rvals = pgvarfn(vals) rindex = pgf.var_int() result = pgf.listItem(rvals, rindex) random.seed(42) for _ in range(25): index = random.randint(0, len(vals) - 1) pgf.assign(rindex, index) assert comparefn(vals[index], pgf.read(result))
def test_listLength(): random.seed(42) valrange = (23, 345) rvals = pgf.var_int() rstart = pgf.var_int() rstop = pgf.var_int() slist = pgf.subList(rvals, rstart, rstop) for _ in range(20): vals = [random.randint(valrange[0], valrange[1]) for _ in range(25)] irange = (random.randint(0, len(vals) - 1), random.randint(0, len(vals) - 1)) irange = sorted(irange) expected = vals[irange[0]:irange[1]] # print(len(vals), irange[0], irange[1]) pgf.assign(rvals, vals) pgf.assign(rstart, irange[0]) pgf.assign(rstop, irange[1]) tu.assertEqual(expected, pgf.read(slist))
def binaryIntOpTest(expFn, pgfn, minval=2, maxval=124): random.seed(42) a = pgf.var_int() b = pgf.var_int() r = pgfn(a, b) for _ in range(20): va = random.randint(minval, maxval) vb = random.randint(minval, maxval) expected = expFn(va, vb) pgf.assign(a, va) pgf.assign(b, vb) assert tu.equal(expected, pgf.read(r)) vas = [random.randint(minval, maxval) for _ in range(20)] vbs = [random.randint(minval, maxval) for _ in range(20)] expectedVals = [expFn(va, vb) for va, vb in zip(vas, vbs)] pgf.assign(a, vas) pgf.assign(b, vbs) assert tu.equal(expectedVals, pgf.read(r))
def test_flatten(): random.seed(42) intree = pgf.var_int() outtree = pgf.flatten(intree) for _ in range(5): vals = [[random.randint(23, 234)] for __ in range(10)] pgf.assign(intree, vals) expected = [item for subl in vals for item in subl] assert tu.equal(expected, pgf.read(outtree)) vals = [[[random.randint(23, 234) for __ in range(5)] for ___ in range(5)] for _____ in range(5)] pgf.assign(intree, vals) expected = [item for l0 in vals for l1 in l0 for item in l1] assert tu.equal(expected, pgf.read(outtree))
def test_graft(): random.seed(42) intree = pgf.var_int() out = pgf.graft(intree) for _ in range(5): vals = [random.randint(23, 345) for __ in range(10)] expected = [[v] for v in vals] pgf.assign(intree, vals) assert tu.equal(expected, pgf.read(out)) for _ in range(5): vals = [[random.randint(23, 345) for __ in range(5)] for ___ in range(5)] expected = [[[v] for v in vl] for vl in vals] pgf.assign(intree, vals) assert tu.equal(expected, pgf.read(out))
def test_seriesFloat(): random.seed(42) valrange = (22.345, 223.66) steprange = (1.778, 9.56) valstart = random.uniform(valrange[0], valrange[1]) valstep = random.uniform(steprange[0], steprange[1]) valcount = random.randint(25, 98) valstop = valstart + valstep * valcount start = pgf.var_float(valstart) step = pgf.var_float(valstep) count = pgf.var_int(valcount) series = pgf.series(start, step, count) expected = [(valstart + i * valstep) for i in range(valcount)] tu.assertEqualf(expected, pgf.read(series), 1e-3)
def test_cachedOffsetDataRegression(): # This tests for a regression (lack of) happened while working on PR # 53. pt = pgf.var_vec3((0., 0., 0.)) norm = pgf.var_vec3((0., 0., 1.)) plane = pgf.plane(pt, norm) minpt = pgf.var_vec3((-.5, -.5, 0.)) maxpt = pgf.var_vec3((.5, .5, 0.)) box2 = pgf.box2(pgf.var_vec2((-.5, -.5)), pgf.var_vec2((.5, .5))) box3 = pgf.box3(minpt, maxpt) npts = pgf.var_int(4) cloud = pgf.randomPointsInBox(box3, npts) edgeLen = pgf.var_float(1) rect = pgf.rectangleMesh(plane, box2, edgeLen) distances = pgf.distance(pgf.graft(pgf.vertices(rect)), cloud) pdists = pgf.read(pgf.flatten(distances)) assert len(pdists) == 16
def test_dispatch(): random.seed(42) valrange = (23, 345) rvals = pgf.var_int() rpattern = pgf.var_bool() rtvals, rfvals = pgf.dispatch(rvals, rpattern) for _ in range(20): nItems = 25 vals = [ random.randint(valrange[0], valrange[1]) for _ in range(nItems) ] pattern = [ random.randint(valrange[0], valrange[1]) % 2 == 0 for _ in range(nItems) ] tvals = [v for v, p in zip(vals, pattern) if p] fvals = [v for v, p in zip(vals, pattern) if not p] pgf.assign(rvals, vals) pgf.assign(rpattern, pattern) assert tu.equal(tvals, pgf.read(rtvals)) assert tu.equal(fvals, pgf.read(rfvals))
pt = pgf.var_vec3((0., 0., 0.)) norm = pgf.var_vec3((0., 0., 1.)) plane = pgf.plane(pt, norm) minpt = pgf.var_vec3((-.5, -.5, 0.)) maxpt = pgf.var_vec3((.5, .5, 0.)) box2 = pgf.box2(pgf.var_vec2((-.5, -.5)), pgf.var_vec2((.5, .5))) box3 = pgf.box3(minpt, maxpt) npts = pgv.slideri32("Point count", 5, 50, 25) cloud = pgf.randomPointsInBox(box3, npts) edgeLen = pgf.var_float(.01) rect = pgf.rectangleMesh(plane, box2, edgeLen) distances = pgf.distance(pgf.graft(pgf.vertices(rect)), cloud) sortedDists = pgf.sort(distances, distances) maxDist = pgf.listItem(sortedDists, pgf.sub(pgf.listLength(sortedDists), pgf.var_int(1))) scheme = pgf.var_vec3([(0., 0., 1.), (0., 1., 0.), (1., 1., 0.), (1., 0., 0.)]) colors = pgf.mapValueToColor(maxDist, pgf.var_vec2((.5, 1.2)), scheme) colored = pgf.meshWithVertexColors(rect, colors) circ, *_ = pgf.boundingCircle(cloud) # pgv.show("rectangle", rect) pgv.show("cloud", cloud) pgv.show("colored", colored) pgv.show("circle", circ) pgv.runCommands("2d")
(1, 1, 0), (-.3, 1, 0), (0, -1, 0), ] GLYPHDATA = [ "/home/rnjth94/works/YouTube/GAL_BoundingCircle/receiverDishGlyph.png", "/home/rnjth94/works/YouTube/GAL_BoundingCircle/transmitterGlyph.png" ] def initGlyphs(): return pgv.loadGlyphs(GLYPHDATA) if __name__ == "__main__": glyphs = initGlyphs() pts = pgf.var_vec3(POINTS) cloudGlyphs = pgf.var_int([glyphs[0] for _ in range(len(POINTS))]) idxPt = pgf.listItem(pts, pgv.slideri32("Index", 0, len(POINTS) - 1, 0)) circ, center, radius = pgf.boundingCircle(pts) center3 = pgf.vec3FromVec2(center) centerGlyph = pgf.var_int(glyphs[1]) pgv.show("glyph1", pgv.glyphs(cloudGlyphs, pts)) pgv.show("glyph2", pgv.glyphs(centerGlyph, center3)) pgv.show("circle", circ) pgv.show("points", pts) pgv.show("center", center3) pgv.print("Point at index", idxPt)
pt = pgf.var_vec3((0., 0., 0.)) norm = pgf.var_vec3((0., 0., 1.)) plane = pgf.plane(pt, norm) minpt = pgf.var_vec3((-.5, -.5, 0.)) maxpt = pgf.var_vec3((.5, .5, 0.)) box2 = pgf.box2(pgf.var_vec2((-.5, -.5)), pgf.var_vec2((.5, .5))) box3 = pgf.box3(minpt, maxpt) npts = pgv.slideri32("Point count", 5, 50, 25) cloud = pgf.randomPointsInBox(box3, npts) edgeLen = pgf.var_float(.01) rect = pgf.rectangleMesh(plane, box2, edgeLen) distances = pgf.distance(pgf.graft(pgf.vertices(rect)), cloud) sortedDists = pgf.sort(distances, distances) maxDist = pgf.listItem(sortedDists, pgf.sub(pgf.listLength(sortedDists), pgf.var_int(1))) scheme = pgf.var_vec3([ (0., 0., 1.), (0., 1., 0.), (1., 1., 0.), (1., 0., 0.) ]) colors = pgf.mapValueToColor(maxDist, pgf.var_vec2((.5, 1.2)), scheme) colored = pgf.meshWithVertexColors(rect, colors) circ, *_ = pgf.boundingCircle(cloud) # pgv.show("rectangle", rect) pgv.show("cloud", cloud) pgv.show("colored", colored)
import pygalfunc as pgf import pygalview as pgv POINTS = [ (0, 0, 0), (1, 0, 0), (1, 1, 0), (-.3, 1, 0), (0, -1, 0), ] pts = pgf.var_vec3(POINTS) nums = pgf.toString(pgf.series(pgf.var_int(0), pgf.var_int(1), pgf.listLength(pts))) idxPt = pgf.listItem(pts, pgv.slideri32("Index", 0, len(POINTS) - 1, 0)) circ, *_ = pgf.boundingCircle(pts) pgv.show("indices", pgv.tags(nums, pts)) pgv.show("circle", circ) pgv.show("points", pts) pgv.print("Point at index", idxPt)