Skip to content
Snippets Groups Projects
Select Git revision
  • 2438bf9059bbb4663fb0b9b258b070136fbac349
  • master default protected
2 results

test_cycle.py

Blame
  • analyze-cycle.py 1.25 KiB
    from graph_tools.base import *
    from graph_tools.parameters import *
    from sage.all import *
    from collections import namedtuple
    from itertools import *
    
    
    def calc(s):
      b = list(CircuitDoubleCover.enumerate_boundaries(s))
      m = dict()
    
      _bmap = { x: i for i, x in enumerate(b) }
      def eval_(g):
        ret = set()
        g_ = FakeGadget(g.size(), g.eval(CircuitDoubleCover))
        for c, cb in enumerate(b):
          cg = FakeGadget(g.size(), [ Boundary(cb, 1) ])
          v = Gadget.join(
            [ cg, g_ ],
            [ ((1, i), (2, i)) for i in range(1, s+1) ],
            []
          ).eval(CircuitDoubleCover)
          if v > 0: ret.add(c)
    
        return ret
    
      ret = namedtuple("calc_ret", ["boundaries", "eval", "map"])
      ret.boundaries = b
      ret.eval = eval_
      ret.map = lambda x: _bmap[x]
    
      return ret
    
    
    def C_k(k):  
      return Gadget.join(
        [CUBIC_VERTEX]*k,
        [ ((i+1, 2), (((i+1) % k) + 1, 1)) for i in range(k) ],
        [ (i+1, 3) for i in range(k) ]
      )
    
    def G_k(k):
      return Gadget.join(
        [CUBIC_VERTEX]*k,
        [ ((i+1, 2), (((i+1) % (k-1)) + 1, 1)) for i in range(k-1) ] + [ ((1,3), (k,1)) ],
        [ (i+2, 3) for i in range(k-2) ] + [ (k, 2), (k, 3) ]
      )
    
    k = 6
    c = calc(k)
    e = c.eval(C_k(k))
    f = c.eval(G_k(k))
    
    print(len(e))
    print(len(f))
    print(len(set(f).intersection(set(e))))