<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://drorbn.net/index.php?action=history&amp;feed=atom&amp;title=NCGE_Python_Code</id>
	<title>NCGE Python Code - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://drorbn.net/index.php?action=history&amp;feed=atom&amp;title=NCGE_Python_Code"/>
	<link rel="alternate" type="text/html" href="https://drorbn.net/index.php?title=NCGE_Python_Code&amp;action=history"/>
	<updated>2026-08-07T03:41:56Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://drorbn.net/index.php?title=NCGE_Python_Code&amp;diff=10873&amp;oldid=prev</id>
		<title>Josh.seaton at 03:46, 11 October 2011</title>
		<link rel="alternate" type="text/html" href="https://drorbn.net/index.php?title=NCGE_Python_Code&amp;diff=10873&amp;oldid=prev"/>
		<updated>2011-10-11T03:46:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;class Perm(object):&lt;br /&gt;
    &lt;br /&gt;
    def __init__(self, L):&lt;br /&gt;
        if set(range(1,len(L) + 1)) == set(L):&lt;br /&gt;
            self.n = len(L)&lt;br /&gt;
            self.mapping = {}&lt;br /&gt;
            pivot_called = False&lt;br /&gt;
            for i in range(self.n):&lt;br /&gt;
                if not pivot_called:&lt;br /&gt;
                    if L[i] != i+1:&lt;br /&gt;
                        self.pivot = i+1&lt;br /&gt;
                        pivot_called = True&lt;br /&gt;
                if not pivot_called:&lt;br /&gt;
                    self.pivot = self.n&lt;br /&gt;
                self.mapping[i+1] = L[i]&lt;br /&gt;
    &lt;br /&gt;
    def __nonzero__(self):&lt;br /&gt;
        return self.pivot != self.n&lt;br /&gt;
            &lt;br /&gt;
    def __mul__(self,other):&lt;br /&gt;
&lt;br /&gt;
        if self.n == other.n:&lt;br /&gt;
            L = []&lt;br /&gt;
            for i in range(1,self.n+1):&lt;br /&gt;
                L += [self.mapping[other.mapping[i]]]&lt;br /&gt;
            return Perm(L)&lt;br /&gt;
   &lt;br /&gt;
    def inv(self):&lt;br /&gt;
        &lt;br /&gt;
        L = []&lt;br /&gt;
        inverted = {}&lt;br /&gt;
        for i in range(1,self.n + 1):&lt;br /&gt;
            inverted[self.mapping[i]] = i&lt;br /&gt;
        for j in range(1,self.n + 1):&lt;br /&gt;
            L += [inverted[j]]&lt;br /&gt;
        return Perm(L)&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
def e(n):&lt;br /&gt;
    &lt;br /&gt;
    return Perm(range(1,n+1))&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
def gen_subgroup_order(L):&lt;br /&gt;
&lt;br /&gt;
    homogenous_n = True&lt;br /&gt;
    perm1 = L[0]&lt;br /&gt;
    for perm in L:&lt;br /&gt;
        if perm.n != perm1.n:&lt;br /&gt;
            homogenous_n = False&lt;br /&gt;
            break&lt;br /&gt;
    &lt;br /&gt;
    if homogenous_n:&lt;br /&gt;
        X = L[:]&lt;br /&gt;
        n = perm1.n&lt;br /&gt;
        occupied = {}&lt;br /&gt;
        for k in range(1,n+1):&lt;br /&gt;
            occupied[(k,k)] = e(n)&lt;br /&gt;
            &lt;br /&gt;
        def feed(perm,Y,table):&lt;br /&gt;
            if bool(perm):&lt;br /&gt;
                i = perm.pivot&lt;br /&gt;
                j = perm.mapping[perm.pivot]&lt;br /&gt;
                &lt;br /&gt;
                if (i,j) not in occupied.keys():&lt;br /&gt;
                    table[(i,j)] = perm&lt;br /&gt;
                    &lt;br /&gt;
                else:&lt;br /&gt;
                    sigma = table[(i,j)]&lt;br /&gt;
                    Y += [(sigma.inv())*perm]&lt;br /&gt;
        &lt;br /&gt;
        for perm in X:&lt;br /&gt;
            feed(perm,X,occupied)&lt;br /&gt;
        &lt;br /&gt;
        old = 0&lt;br /&gt;
        new = len(occupied.keys())&lt;br /&gt;
        while old != new:&lt;br /&gt;
            X = []&lt;br /&gt;
            perms = occupied.values()&lt;br /&gt;
            for p1 in perms:&lt;br /&gt;
                for p2 in perms:&lt;br /&gt;
                    if bool(p1) and bool(p2):&lt;br /&gt;
                        X += [p1*p2]&lt;br /&gt;
            for perm in X:&lt;br /&gt;
                feed(perm,X,occupied)&lt;br /&gt;
            old, new = new, len(occupied.keys())&lt;br /&gt;
                &lt;br /&gt;
        order = 1&lt;br /&gt;
        for i in range(1,n+1):&lt;br /&gt;
            order *= len([pair for pair in occupied.keys() if pair[0] == i])&lt;br /&gt;
        return order&lt;br /&gt;
    &lt;br /&gt;
g1 = Perm([1,2,3,4,12,22,7,8,6,11,21,28,13,14,15,16,17,18,5,10,20,27,23,24,25,26,9,19,29,30,31,32])&lt;br /&gt;
&lt;br /&gt;
g2 = Perm([1,2,13,23,5,6,7,4,9,10,11,12,30,14,15,16,17,3,19,20,21,22,29,24,25,26,27,28,8,18,31,32])&lt;br /&gt;
&lt;br /&gt;
g3 = Perm([14,24,3,4,5,6,2,8,9,10,11,12,13,32,16,26,1,18,19,20,21,22,23,31,15,25,27,28,29,30,7,17])&lt;br /&gt;
&lt;br /&gt;
g4 = Perm([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,22,23,24,25,26,17,18,19,20,21,32,31,30,29,28,27])&lt;br /&gt;
&lt;br /&gt;
print gen_subgroup_order([g1,g2,g3,g4])&lt;/div&gt;</summary>
		<author><name>Josh.seaton</name></author>
	</entry>
</feed>