def testSubgraph(self):
        with Multigraph('sub') as sg:
            source1 = GeneratorSource('s1')
            source2 = GeneratorSource('s2', )
            p = components.Product('prod')
            p << InputPort('IN1')
            p << InputPort('IN2')
            source1.outputs.OUT >> p.inputs.IN1
            source2.outputs.OUT >> p.inputs.IN2
            source1.inputs.gen.set_initial_packet(range(5))
            source2.inputs.gen.set_initial_packet(range(5))
            sg.outputs.export(p.outputs.OUT, "OUT")

        with Multigraph('b') as g:
            g.add_node(sg)
            printer = components.ShowInputs('show')
            printer << InputPort('IN')
            print(sg.outputs.OUT == p.outputs.OUT)
            sg.outputs.OUT >> printer.inputs.IN
        print(p.outputs.OUT.component)
        print(sg.outputs.OUT.component)
        print(list(g.iterarcs()))
        print(list(g.iternodes()))
        g()
        with open('/tmp/graph.dot', 'w+') as of:
            of.write(g.dot())
 def testConnectingToNonExisting(self):
     source1 = GeneratorSource('s1', (i for i in range(5)))
     source2 = GeneratorSource('s2', (i for i in range(5)))
     p = components.Product('prod')
     p << InputPort('i')
     p >> OutputPort('OUT')
     p.inputs.j
     source1.outputs.OUT >> p.inputs.i
     source2.outputs.OUT >> p.inputs.j
 def testSplit(self):
     source1 = components.Product(
         's1',
         (i for i in range(3)),
         (i for i in range(3)),
     )
     splitter = components.Split('split in two')
     splitter.outputs.add(OutputPort('a'))
     splitter.outputs.add(OutputPort('b'))
     shower = ShowInputs('printer')
     shower.inputs.add(InputPort('a'))
     shower.inputs.add(InputPort('b'))
     graph = Multigraph()
     graph.connect(source1.outputs.OUT, splitter.inputs.IN)
     graph.connect(splitter.outputs.a, shower.inputs.a)
     graph.connect(splitter.outputs.b, shower.inputs.b)
     graph()
 def testProduct(self):
     source1 = GeneratorSource('s1')
     source2 = GeneratorSource('s2')
     range(5) >> source1.inputs.gen
     range(5) >> source2.inputs.gen
     p = components.Product('prod')
     printer = ShowInputs('printer')
     printer.inputs.add(InputPort('IN'))
     p.inputs.add(InputPort('i'))
     p.inputs.add(InputPort('j'))
     p.outputs.add(OutputPort('OUT'))
     g = Multigraph('cul')
     g.connect(source1.outputs.OUT, p.inputs.i)
     g.connect(source2.outputs.OUT, p.inputs.j)
     g.connect(p.outputs.OUT, printer.inputs.IN)
     print(list(g.iterarcs()))
     print(g.dot())
     g()
 def testNiceConnection(self):
     with Multigraph() as g:
         source1 = GeneratorSource('s1', (i for i in range(5)))
         source2 = GeneratorSource('s2', (i for i in range(5)))
         p = components.Product('prod')
         printer = components.ShowInputs('print')
         # #Add ports
         p << InputPort('i')
         p << InputPort('j')
         p >> OutputPort('OUT')
         printer << InputPort('IN')
         #Connect ports
         source1.outputs.OUT >> p.inputs.i
         source2.outputs.OUT >> p.inputs.j
         p.outputs.OUT >> printer.inputs.IN
         # # #Add components
         # g = g + source1 + source2 + p + printer
         print(g.dot())
     g()
 def testCountWithReset(self):
     with Multigraph('test') as g:
         source1 = GeneratorSource('s1')
         source2 = GeneratorSource('s2')
         range(5) >> source1.inputs.gen
         range(5) >> source2.inputs.gen
         reset = components.WaitRandom('s3')
         p = components.Product('prod')
         c = components.Count('count')
         printer = ShowInputs('printer')
         printer.inputs.add(InputPort('IN'))
         p.inputs.add(InputPort('i'))
         p.inputs.add(InputPort('j'))
         g.connect(reset.outputs.OUT, c.inputs.reset)
         g.connect(source1.outputs.OUT, p.inputs.i)
         g.connect(source2.outputs.OUT, p.inputs.j)
         g.connect(p.outputs.OUT, c.inputs.IN)
         g.connect(c.outputs.count, printer.inputs.IN)
     print(list(g.iterarcs()))
     print(g.dot())
     g()
    def testSubnet(self):
        with Multigraph('sub') as sg:
            source1 = GeneratorSource('s1')
            source2 = GeneratorSource('s2', )
            p = components.Product('prod')
            p << InputPort('IN1')
            p << InputPort('IN2')
            source1.outputs.OUT >> p.inputs.IN1
            source2.outputs.OUT >> p.inputs.IN2
            source1.inputs.gen.set_initial_packet(range(5))
            source2.inputs.gen.set_initial_packet(range(5))
            sg.outputs.export(p.outputs.OUT, "OUT")

        with Multigraph('b') as g:
            sg = pyperator.subnet.Subnet.from_graph(sg)
            print(sg.outputs)
            printer = components.ShowInputs('show')
            printer << InputPort('IN')
            sg.outputs.OUT >> printer.inputs.IN
        g()
        with open('/tmp/graph.dot', 'w+') as of:
            of.write(g.dot())