コード例 #1
0
def test_yang_baxter():

    from huygens.box import Box, HBox
    from huygens.diagram import VWire, Braid
    Box.DEBUG = False

    Id = VWire

    scale = 2.0
    w = 1.5 * scale
    h = 0.5 * scale
    s12 = lambda: Braid(min_width=w, min_height=h) @ Id(min_height=h,
                                                        min_width=h)
    s23 = lambda: Id(min_height=h, min_width=h) @ Braid(min_width=w,
                                                        min_height=h)

    lhs = s12() * s23() * s12()
    #lhs = lhs @ Braid()
    rhs = s23() * s12() * s23()
    box = HBox([lhs, "$=$", rhs], align="center")

    yield box, "yang-baxter"
コード例 #2
0
def test_braid_3():
    from huygens.box import Box, HBox
    from huygens.diagram import VWire, Braid
    Box.DEBUG = False

    Id = VWire

    scale = 1.0
    w = 0.8 * scale
    h = 0.5 * scale
    s1 = lambda: Braid(min_width=w, min_height=h) @ Id(min_height=h,
                                                       min_width=h)
    s2 = lambda: Id(min_height=h, min_width=h) @ Braid(min_width=w,
                                                       min_height=h)

    from operator import mul
    from functools import reduce

    word = [[s1, s2][i % 2]() for i in range(6)]
    box = reduce(mul, word)

    box = HBox(["$Z =$", box], align="center")

    yield box, "braid-Z"
コード例 #3
0
def XXXtest_braid():
    from random import shuffle, seed, randint
    from operator import matmul
    from functools import reduce

    seed(1)

    scale = 0.5
    w = 1.4 * scale
    h = 1.8 * scale
    Id = lambda: VWire(min_height=0.5, min_width=0.5)
    Swap = lambda inverse: Braid(
        inverse=inverse, min_width=w, min_height=h, space=0.7)

    box = None
    m, n = 4, 4
    k = 2 * m + n
    for count in range(6):
        items = [Swap(randint(0, 1))
                 for k in range(m)] + [Id() for k in range(n)]
        shuffle(items)
        row = reduce(matmul, items)
        if box is None:
            box = row
        else:
            box = box * row

    #box = Id() @ box
    lhs = reduce(matmul, [Id() for i in range(k)])
    box = lhs @ box
    rels = [(i, 2 * k - i - 1) for i in range(k)]
    #rels = [(i, i+k) for i in range(k)]
    rel = Relation(0, 2 * k, botbot=rels, weight=200.0)
    box = rel * box
    rels = [(i, 2 * k - i - 1) for i in range(k)]
    rel = Relation(2 * k, 0, toptop=rels, weight=200.0)
    box = box * rel

    #rect = RectBox(box, bg=color.rgb(0.9, 0.9, 0.3, 0.6))

    Box.DEBUG = False

    cvs = canvas.canvas()
    #cvs.append(trafo.rotate(pi/2))

    system = box.layout(cvs)

    def rectbox(box):
        x = system[box.llx]
        y = system[box.lly]
        width = system[box.width]
        height = system[box.height]
        return x, y, width, height

    def fillbox(box, st):
        rect = rectbox(box)
        p = path.rect(*rect)
        cvs.fill(p, st)

    #fillbox(box, [color.rgb(0.9, 0.8, 0.5)])

    sub = box[0][1][1]
    x = 0.5 * (system[box.llx] + system[box.urx])
    y = system[sub.lly]
    width = system[box.urx] - x
    height = system[sub.ury] - y
    p = path.rect(x, y, width, height)
    cvs.fill(p, [color.rgb(0.9, 0.9, 0.6)])
    cvs.stroke(p, [style.linewidth.thick])

    cvs.append(style.linewidth.THICk)
    #cvs.append(color.rgb(0.2,0.5,0.2))
    box.render(cvs)

    cvs.append(style.linewidth.thick)
    cvs.append(color.rgb(0.9, 0.9, 0.9))
    box.render(cvs)

    #cvs.writePDFfile("test_diagram.pdf")

    yield cvs
コード例 #4
0
def test_braid():

    from random import shuffle, seed, randint
    from operator import matmul
    from functools import reduce

    from huygens import canvas, color, style, path
    from huygens.box import Box, HBox
    from huygens.diagram import VWire, Braid, Relation

    seed(1)

    scale = 0.3
    w = 1.4 * scale
    h = 1.8 * scale
    Id = lambda: VWire(min_height=scale, min_width=scale)
    Swap = lambda inverse: Braid(
        inverse=inverse, min_width=w, min_height=h, space=0.5)

    box = None
    m, n = 3, 3
    k = 2 * m + n
    for count in range(3):
        items = [Swap(randint(0, 1))
                 for k in range(m)] + [Id() for k in range(n)]
        shuffle(items)
        row = reduce(matmul, items)
        if box is None:
            box = row
        else:
            box = box * row

    # This is what the `box` looks like now:

    yield box, "braid-strands"

    # Now we take the closure of this braid:

    #box = Id() @ box
    lhs = reduce(matmul, [Id() for i in range(k)])
    box = lhs @ box
    rels = [(i, 2 * k - i - 1) for i in range(k)]
    #rels = [(i, i+k) for i in range(k)]
    rel = Relation(0, 2 * k, botbot=rels, weight=200.0)
    box = rel * box
    rels = [(i, 2 * k - i - 1) for i in range(k)]
    rel = Relation(2 * k, 0, toptop=rels, weight=200.0)
    box = box * rel

    yield box

    # Draw this now with some more fancy tricks.

    cvs = canvas.canvas()

    system = box.layout(cvs)

    sub = box[0][1][1]
    x = 0.5 * (box.llx + box.urx)
    y = sub.lly
    width = box.urx - x
    height = sub.ury - y
    p = path.rect(x, y, width, height)
    cvs.fill(p, [color.rgb(0.9, 0.9, 0.6)])
    cvs.stroke(p, [style.linewidth.thick])

    system.refresh()  # refresh for a new render

    cvs.append(style.linewidth.THICk)
    #cvs.append(color.rgb(0.2,0.5,0.2))
    box.render(cvs)

    cvs.append(style.linewidth.thick)
    cvs.append(color.rgb(0.9, 0.0, 0.0))
    box.render(cvs)

    #cvs.writePDFfile("test_diagram.pdf")

    yield cvs