Skip to content

Commit eadd563

Browse files
Final form after refactoring with cycle based blockwise test
1 parent 47304d5 commit eadd563

25 files changed

+1163
-132
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
eclipse.preferences.version=1
22
encoding//src/main/java/AlgorithmicGroupTheory/PermutationGroupFunctions.java=UTF-8
3+
encoding//src/test/java/testCanonicalBlockwiseTest.java=UTF-8

src/main/java/AlgorithmicGroupTheory/HydrogenDistributor.java

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import java.text.DecimalFormat;
4141
import java.util.ArrayList;
4242
import java.util.Arrays;
43+
import java.util.Collections;
44+
import java.util.Comparator;
4345
import java.util.HashMap;
4446
import java.util.LinkedList;
4547
import java.util.List;
@@ -106,24 +108,26 @@ public static int[] addElement(int[] a, int e) {
106108
return a;
107109
}
108110

109-
public static int sum(ArrayList<Integer> partition, int index) {
111+
public static int sum(int[] partition, int index) {
110112
int sum=0;
111113
for(int i=0;i<=index;i++) {
112-
sum=sum+partition.get(i);
114+
sum=sum+partition[i];
113115
}
114116
return sum;
115117
}
116-
public static int[] setValues(ArrayList<Integer> partition, ArrayList<Integer> degrees) {
117-
int partitionSize= partition.size();
118+
119+
public static int[] setValues(int[] partition, int[] degrees) {
120+
int partitionSize= partition.length;
118121
int[] capacity = new int[partitionSize];
119122
int[] valences = new int[partitionSize];
120123
int[] totalAtom = new int[partitionSize];
121124
int i=0;
122-
123-
for(int j=0;j<partition.size();j++) {
124-
totalAtom[i]=partition.get(i);
125-
valences[i]=degrees.get(sum(partition,i)-1)-1;
126-
capacity[i]=(degrees.get(sum(partition,i)-1)-1)*partition.get(i);
125+
int sum=0;
126+
for(int j=0;j<partitionSize;j++) {
127+
totalAtom[i]=partition[i];
128+
sum=sum(partition,i);
129+
valences[i]=degrees[sum-1]-1;
130+
capacity[i]=(degrees[sum-1]-1)*partition[i];
127131
i++;
128132
}
129133

@@ -194,9 +198,9 @@ public static List<int[]> combineArrays(LinkedList<List <int[]>> lists) {
194198
* @throws CDKException
195199
*/
196200

197-
public static List<int[]> run(ArrayList<Integer> partition,ArrayList<Integer> degrees) throws FileNotFoundException, UnsupportedEncodingException, CloneNotSupportedException, CDKException {
198-
int partitionSize= partition.size();
199-
int hydrogen= partition.get(partitionSize-1);
201+
public static List<int[]> run(int[] partition,int[] degrees) throws FileNotFoundException, UnsupportedEncodingException, CloneNotSupportedException, CDKException {
202+
int partitionSize= partition.length;
203+
int hydrogen= partition[partitionSize-1];
200204
HydrogenDistributor.isotopes=partitionSize-1;
201205
HydrogenDistributor.size=partitionSize-1;
202206
setValues(partition,degrees);
@@ -269,12 +273,16 @@ public static int[] addZeros(int[] array, int zeros) {
269273
return array;
270274
}
271275

276+
public static int[] descendingOrderArray(int[] arr) {
277+
return Arrays.stream(arr).boxed().sorted().mapToInt(Integer::intValue).toArray();
278+
}
279+
272280
public static void distribute(List<int[]> arrays,int hydrogen,int[]arr,int valence, int numAtom) throws CloneNotSupportedException {
273281
if(hydrogen==0 && sum(arr)==hydrogens2distribute){
274282
if(arr.length!=numAtom) {
275283
arr=addZeros(arr,(numAtom-arr.length));
276284
}
277-
Arrays.sort(arr);
285+
arr=descendingOrderArray(arr);
278286
arrays.add(arr);
279287
}else if((numAtom-arr.length)==1) {
280288
int add=Math.min(hydrogen,valence);

src/main/java/AlgorithmicGroupTheory/PermutationGroupFunctions.java

Lines changed: 27 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4529,12 +4529,13 @@ public static void backwardBuild(int r, ArrayList<Integer> degrees,ArrayList<Int
45294529
mat2[k][l]=A[k][l];
45304530
}
45314531
}
4532-
if(connectivityTest(hIndex,A)){
4532+
System.out.println("h"+" "+hIndex);
4533+
if(connectivityTest(6,addHydrogens(A,6))){
45334534
pWriter.println("done bu");
45344535
System.out.println("done");
45354536
pWriter.print(hoppa+" "+Arrays.deepToString(A)+"\n");
4536-
System.out.println(Arrays.deepToString(addHydrogens(A,hIndex)));
4537-
depict(buildC(addHydrogens(A,hIndex)),"C:\\Users\\mehme\\Desktop\\outputs\\"+hoppa+".png");
4537+
System.out.println(Arrays.deepToString(addHydrogens(A,6)));
4538+
//depict(buildC(addHydrogens(A,hIndex)),"C:\\Users\\mehme\\Desktop\\outputs\\"+hoppa+".png");
45384539
hoppa++;
45394540
}
45404541
//System.out.println(Arrays.deepToString(addHydrogens(A,4)));
@@ -5249,12 +5250,8 @@ public static boolean blockDemo(int index, int r, int[][] A, ArrayList<Integer>
52495250
pWriter.print("representatives"+" "+index+" "+representatives.get(i)+"\n");
52505251
}
52515252

5252-
System.out.println("p"+" "+partition+" "+newPartition);
52535253
pWriter.print(Arrays.deepToString(A)+"\n");
52545254

5255-
for(int p=0;p<representatives.size();p++) {
5256-
System.out.println("rep bas"+" "+representatives.get(p)+" "+p);
5257-
}
52585255

52595256
System.out.println(Arrays.deepToString(A));
52605257
int y = findY(r);
@@ -5264,7 +5261,6 @@ public static boolean blockDemo(int index, int r, int[][] A, ArrayList<Integer>
52645261
int total = sum(partition);
52655262
ArrayList<Permutation> cycleTrans= cycleTranspositions(index,partition);
52665263
for(Permutation cycle: cycleTrans) {
5267-
System.out.println("cycle"+" "+cycle.toCycleString());
52685264
pWriter.print("cycle"+" "+cycle.toCycleString()+"\n");
52695265
}
52705266
for(Permutation cycle: cycleTrans) {
@@ -5338,18 +5334,18 @@ public static boolean formerPermutationsCheck(int index, int y, int total, int[]
53385334
break;
53395335
}
53405336
}else {
5341-
//if(test.equals(former.multiply(canonical))) {
5342-
addRepresentatives(index, perm.multiply(canonical), pWriter);
5343-
//addRepresentatives(index, idPermutation(total), pWriter);
5337+
if(test.equals(former.multiply(canonical))) {
5338+
//addRepresentatives(index, perm.multiply(canonical), pWriter);
5339+
addRepresentatives(index, idPermutation(total), pWriter);
53445340
/**boolean formerTest = formerBlocksRepresentatives(index,y, A, newPartition, canonical, pWriter);
53455341
if(!formerTest) {
53465342
check=false;
53475343
break;
53485344
}else {
53495345
addRepresentatives(index, idPermutation(total), pWriter);
53505346
}**/
5351-
//}else {
5352-
//addRepresentatives(index, canonical,pWriter);
5347+
}else {
5348+
addRepresentatives(index, canonical,pWriter);
53535349
/**boolean formerTest = formerBlocksRepresentatives(index,y, A, newPartition, canonical, pWriter);
53545350
if(!formerTest) {
53555351
check=false;
@@ -5358,7 +5354,7 @@ public static boolean formerPermutationsCheck(int index, int y, int total, int[]
53585354
pWriter.print("add rep"+" "+index+" "+representatives.size()+" "+canonical.toCycleString()+" "+"\n");
53595355
addRepresentatives(index, canonical,pWriter);
53605356
}**/
5361-
//}
5357+
}
53625358
}
53635359
//}
53645360

@@ -5448,7 +5444,7 @@ public static Permutation getCanonicalPermutatiom(int index, int y, int total, i
54485444
if(!equalBlockCheck(cycleM,newPartition,index,y,A,idPermutation(total), pWriter)) {
54495445
canonical=getEqualPermutation(cycleM, index, y, total,A, partition, newPartition, pWriter);
54505446
pWriter.print("equal perm"+" "+canonical.toCycleString()+"\n");
5451-
//canonical=cycle.multiply(canonical);
5447+
canonical=cycle.multiply(canonical);
54525448
/**if(canonical.isIdentity()) {
54535449
if(!descBlockCheck2(cycleM,newPartition,index,y,A,idPermutation(total),2,pWriter)) {
54545450
canonical = idPermutation(total);
@@ -5459,7 +5455,7 @@ public static Permutation getCanonicalPermutatiom(int index, int y, int total, i
54595455
canonical=cycle.multiply(canonical);
54605456
}**/
54615457
}else {
5462-
//canonical=cycle.multiply(canonical);
5458+
canonical=cycle.multiply(canonical);
54635459
}
54645460
}
54655461
pWriter.print("getCanonical permutation"+" "+canonical.toCycleString());
@@ -6173,7 +6169,9 @@ public static boolean equalBlockCheck(Permutation cycleM,ArrayList<Integer> part
61736169
int[] original= A[index];
61746170
//System.out.println(cycleM.toCycleString()+" "+perm.toCycleString());
61756171
pWriter.print(cycleM.toCycleString()+" "+perm.toCycleString()+"\n");
6176-
original=actArray(actArray(A[cycleM.get(index)],cycleM),perm);
6172+
Permutation mult=cycleM.multiply(perm);
6173+
original=actArray(A[mult.get(index)],mult);
6174+
//original=actArray(actArray(A[cycleM.get(index)],cycleM),perm);
61776175
//System.out.println("equalBlockCheck"+" "+Arrays.toString(canonical));
61786176
pWriter.print("equalBlockCheck"+" "+Arrays.toString(canonical)+"\n");
61796177
//System.out.println("equalBlockCheck"+" "+Arrays.toString(original));
@@ -7636,7 +7634,7 @@ public static void canonicalBlockbasedGenerator(ArrayList<Integer> degrees, Arra
76367634
size = sum(partition);
76377635
initialDegrees=degrees;
76387636
inputPartition=partition;
7639-
List<ArrayList<Integer>> newDegrees= distributeHydrogens(partition, degrees);
7637+
//List<ArrayList<Integer>> newDegrees= distributeHydrogens(partition, degrees);
76407638
FileWriter fWriter = new FileWriter("C:\\Users\\mehme\\Desktop\\output.txt");
76417639
PrintWriter pWriter = new PrintWriter(fWriter);
76427640
pWriter.print("Result"+"\n");
@@ -7654,10 +7652,10 @@ public static void canonicalBlockbasedGenerator(ArrayList<Integer> degrees, Arra
76547652
partitionList.add(0,inputPartition);
76557653
forwardBuild(r,degrees,inputPartition,A,max,L,C,indices,pWriter); **/
76567654
partitionList.add(0,inputPartition);
7657-
7658-
for(ArrayList<Integer> degree: newDegrees) {
7655+
gen(degrees, pWriter);
7656+
/**for(ArrayList<Integer> degree: newDegrees) {
76597657
gen(degree, pWriter);
7660-
}
7658+
}**/
76617659
fWriter.close();
76627660
pWriter.close();
76637661
long endTime = System.nanoTime()- startTime;
@@ -8496,22 +8494,15 @@ public static void main(String[] args) throws CloneNotSupportedException, CDKExc
84968494
PrintWriter pWriter = new PrintWriter(fWriter);
84978495

84988496
ArrayList<Integer> degrees= new ArrayList<Integer>();
8499-
degrees.add(4);
8500-
degrees.add(4);
8501-
degrees.add(4);
8502-
degrees.add(4);
8503-
degrees.add(4);
8504-
degrees.add(4);
8505-
degrees.add(1);
8506-
degrees.add(1);
8507-
degrees.add(1);
8508-
degrees.add(1);
8509-
degrees.add(1);
8510-
degrees.add(1);
8497+
degrees.add(3);
8498+
degrees.add(3);
8499+
degrees.add(3);
8500+
degrees.add(3);
8501+
degrees.add(3);
8502+
degrees.add(3);
85118503

85128504
ArrayList<Integer> partition= new ArrayList<Integer>();
85138505
partition.add(6);
8514-
partition.add(6);
85158506

85168507
ArrayList<Integer> newPartition= new ArrayList<Integer>();
85178508
newPartition.add(1);
@@ -8597,7 +8588,7 @@ public static void main(String[] args) throws CloneNotSupportedException, CDKExc
85978588

85988589
canonicalBlockbasedGenerator(degrees,partition);
85998590
System.out.println(hoppa);
8600-
//fWriter.close();
8601-
//pWriter.close();
8591+
fWriter.close();
8592+
pWriter.close();
86028593
}
86038594
}

0 commit comments

Comments
 (0)