Exemplo n.º 1
0
 def extension_functions(self,left,*args):
     #Only works for r_base construction or equivelent procedure.
     base = left.fix()
     self._group.change_base(base)
     orbits = self._group.orbits(len(base), key = self._key_single)
     orbits.sort(key = self._key_orbit)
     #should be left.height if we can gaureentee complete part. stack.
     for i in range(left.degree):
         for orbit in orbits:
             if left.can_extend(i, orbit):
                 base_stack = PartitionStack.deep_copy(left)
                 func = lambda stack: self._full_extension(stack,base,i,orbit)
                 func._info = [self.__class__,base, i,orbit]
                 return func, func
     return None
Exemplo n.º 2
0
 def extension_functions(self,left):
     base = left.fix()
     self._group.change_base(base)
     orbits = self._group.orbits(len(base), key = self._key_single)
     orbits.sort(key = self._key_orbit)
     left_copy = PartitionStack.deep_copy(left)
     for i in range(left.base_size):
         for orbit in orbits:
             before = len(stack)
             self.full_extention(left, right,base_stack,i,orbit)
             if len(stack) > before:
                 func = lambda l=None, r=None : self.full_extention(l,r,base_stack,i,orbit)
                 func._info = [self.__class__,base, i,orbit ]
                 return left, right, func
     return left, right, None   
Exemplo n.º 3
0
    def test_non_trivial_modifiers(self):
        cf = lambda x: Permutation.read_cycle_form(x,13)
        a = cf([[2,3],[4,6],[5,8],[9,11]])
        b = cf([[1,2,4,7,9,3,5,6,8,10,11,12,13]])
        G = PermGroup([a,b])
        part_stab = Partition([[3,2],[6,4],[5,1,7,8,9,10,11,12,13]])
        
        fam = RefinementUnion([PartitionStabaliserFamily(part_stab), SubgroupFamily(G)])
        
        prop = CosetPropertyUnion([PartitionStabaliserProperty(part_stab), SubgroupProperty(G)])
        
        log = LeonLoggerUnion([LeonCounter()])
        
        cons = ModifierUnion([PartitionStackConstraint()])
        
        union = ModifierUnion([fam,prop,log,cons])
        
        left = PartitionStack([0]*13,[-1]*13)         
        right = PartitionStack.deep_copy(left)
        
        funcs = union.extension_functions(left)
        self.assertFalse(funcs is None)
        funcs[0](left)
        funcs[1](right)
        
        index = union.exclude_backtrack_index(left,right, None, 1)
        self.assertEqual(index,None)

        index = union.exclude_backtrack_index(left,right, None, 2)
        self.assertEqual(index,1)
        
        self.assertTrue(union.property_check(a))
        self.assertFalse(union.property_check(b))
        
        pos_leaf = union.leaf_fail_backtrack_index(a,b,None)
        neg_leaf = union.leaf_pass_backtrack_index(a,b,None)
        self.assertEqual(pos_leaf, None)
        self.assertEqual(neg_leaf, None)