From def547e2d65683c3a697f382b5cf242343c9dbb3 Mon Sep 17 00:00:00 2001 From: Jack Gisby <43494691+jackgisby@users.noreply.github.com> Date: Sat, 30 May 2020 17:59:45 +0100 Subject: [PATCH 001/134] Compatibility with conda version of geng; remove geng tool from package --- metaboblend/databases.py | 8 +- tests/test_isomorphism_database.py | 6 - tools/nauty25r9_mac/NRswitchg | Bin 138600 -> 0 bytes tools/nauty25r9_mac/NRswitchg.c | 198 - tools/nauty25r9_mac/README | 123 - tools/nauty25r9_mac/README_24 | 292 - tools/nauty25r9_mac/addedgeg | Bin 152640 -> 0 bytes tools/nauty25r9_mac/addedgeg.c | 288 - tools/nauty25r9_mac/amtog | Bin 117680 -> 0 bytes tools/nauty25r9_mac/amtog.c | 255 - tools/nauty25r9_mac/biplabg | Bin 123912 -> 0 bytes tools/nauty25r9_mac/biplabg.c | 168 - tools/nauty25r9_mac/bliss2dre.c | 161 - tools/nauty25r9_mac/blisstog.c | 194 - tools/nauty25r9_mac/callgeng.c | 47 - tools/nauty25r9_mac/catg | Bin 36584 -> 0 bytes tools/nauty25r9_mac/catg.c | 175 - tools/nauty25r9_mac/changes24-25.txt | 122 - tools/nauty25r9_mac/checks6.c | 227 - tools/nauty25r9_mac/complg | Bin 138544 -> 0 bytes tools/nauty25r9_mac/complg.c | 197 - tools/nauty25r9_mac/config.guess | 1558 ---- tools/nauty25r9_mac/config.status | 951 --- tools/nauty25r9_mac/config.sub | 1791 ---- tools/nauty25r9_mac/config.txt | 21 - tools/nauty25r9_mac/configure | 6868 ---------------- tools/nauty25r9_mac/configure.ac | 381 - tools/nauty25r9_mac/copyg | Bin 36380 -> 0 bytes tools/nauty25r9_mac/copyg.c | 156 - tools/nauty25r9_mac/countg | Bin 166544 -> 0 bytes tools/nauty25r9_mac/deledgeg | Bin 138448 -> 0 bytes tools/nauty25r9_mac/deledgeg.c | 183 - tools/nauty25r9_mac/directg | Bin 132184 -> 0 bytes tools/nauty25r9_mac/directg.c | 658 -- tools/nauty25r9_mac/dreadnaut | Bin 380216 -> 0 bytes tools/nauty25r9_mac/dreadnaut.c | 2237 ----- tools/nauty25r9_mac/dretog | Bin 157456 -> 0 bytes tools/nauty25r9_mac/dretog.c | 214 - tools/nauty25r9_mac/formats.txt | 164 - tools/nauty25r9_mac/genbg | Bin 101200 -> 0 bytes tools/nauty25r9_mac/genbg.c | 1754 ---- tools/nauty25r9_mac/geng | Bin 109520 -> 0 bytes tools/nauty25r9_mac/geng.c | 2504 ------ tools/nauty25r9_mac/genrang | Bin 166120 -> 0 bytes tools/nauty25r9_mac/genrang.c | 564 -- tools/nauty25r9_mac/gentourng | Bin 100712 -> 0 bytes tools/nauty25r9_mac/gentourng.c | 1495 ---- tools/nauty25r9_mac/gtnauty.c | 861 -- tools/nauty25r9_mac/gtnauty.o | Bin 28772 -> 0 bytes tools/nauty25r9_mac/gtools-h.in | 240 - tools/nauty25r9_mac/gtools.c | 1926 ----- tools/nauty25r9_mac/gtools.h | 240 - tools/nauty25r9_mac/gtools.o | Bin 32784 -> 0 bytes tools/nauty25r9_mac/gtoolsW.o | Bin 32400 -> 0 bytes tools/nauty25r9_mac/gutil1.c | 625 -- tools/nauty25r9_mac/gutil1.o | Bin 14336 -> 0 bytes tools/nauty25r9_mac/gutil2.c | 474 -- tools/nauty25r9_mac/gutil2.o | Bin 12720 -> 0 bytes tools/nauty25r9_mac/gutils.h | 39 - tools/nauty25r9_mac/install-sh | 4 - tools/nauty25r9_mac/labelg | Bin 340720 -> 0 bytes tools/nauty25r9_mac/labelg.c | 352 - tools/nauty25r9_mac/linegraphg | Bin 117856 -> 0 bytes tools/nauty25r9_mac/linegraphg.c | 218 - tools/nauty25r9_mac/listg | Bin 58216 -> 0 bytes tools/nauty25r9_mac/listg.c | 616 -- tools/nauty25r9_mac/makefile | 486 -- tools/nauty25r9_mac/makefile.basic | 486 -- tools/nauty25r9_mac/makefile.in | 486 -- tools/nauty25r9_mac/multig | Bin 136304 -> 0 bytes tools/nauty25r9_mac/multig.c | 833 -- tools/nauty25r9_mac/naucompare.c | 264 - tools/nauty25r9_mac/naugraph.c | 711 -- tools/nauty25r9_mac/naugraph.o | Bin 16500 -> 0 bytes tools/nauty25r9_mac/naugraph1.o | Bin 9924 -> 0 bytes tools/nauty25r9_mac/naugraphW1.o | Bin 9388 -> 0 bytes tools/nauty25r9_mac/naugroup.c | 457 -- tools/nauty25r9_mac/naugroup.h | 53 - tools/nauty25r9_mac/naugroup.o | Bin 11632 -> 0 bytes tools/nauty25r9_mac/naurng.c | 133 - tools/nauty25r9_mac/naurng.h | 40 - tools/nauty25r9_mac/naurng.o | Bin 2788 -> 0 bytes tools/nauty25r9_mac/nausparse.c | 1668 ---- tools/nauty25r9_mac/nausparse.h | 102 - tools/nauty25r9_mac/nausparse.o | Bin 32860 -> 0 bytes tools/nauty25r9_mac/nautaux.c | 252 - tools/nauty25r9_mac/nautaux.h | 34 - tools/nauty25r9_mac/nautest.c | 126 - tools/nauty25r9_mac/nautest1.dre | 58 - tools/nauty25r9_mac/nautest1a.ans | 149 - tools/nauty25r9_mac/nautest1a.dre | 149 - tools/nauty25r9_mac/nautest1b.ans | 150 - tools/nauty25r9_mac/nautest1b.dre | 150 - tools/nauty25r9_mac/nautest1c.ans | 142 - tools/nauty25r9_mac/nautest1c.dre | 143 - tools/nauty25r9_mac/nautest2.c | 79 - tools/nauty25r9_mac/nautest2.dre | 7 - tools/nauty25r9_mac/nautest2a.ans | 24 - tools/nauty25r9_mac/nautest2b.ans | 24 - tools/nauty25r9_mac/nautest2c.ans | 17 - tools/nauty25r9_mac/nautesta.ans | 2 - tools/nauty25r9_mac/nautestb.ans | 3391 -------- tools/nauty25r9_mac/nautestc.ans | 2 - tools/nauty25r9_mac/nauthread1.c | 134 - tools/nauty25r9_mac/nauthread2.c | 140 - tools/nauty25r9_mac/nautil.c | 743 -- tools/nauty25r9_mac/nautil.o | Bin 12480 -> 0 bytes tools/nauty25r9_mac/nautil1.o | Bin 11052 -> 0 bytes tools/nauty25r9_mac/nautilW1.o | Bin 10716 -> 0 bytes tools/nauty25r9_mac/nautinv.c | 1751 ---- tools/nauty25r9_mac/nautinv.h | 42 - tools/nauty25r9_mac/nautinv.o | Bin 59288 -> 0 bytes tools/nauty25r9_mac/nautinv1.o | Bin 32720 -> 0 bytes tools/nauty25r9_mac/naututil-h.in | 278 - tools/nauty25r9_mac/naututil.c | 2714 ------- tools/nauty25r9_mac/naututil.h | 278 - tools/nauty25r9_mac/naututil.o | Bin 54700 -> 0 bytes tools/nauty25r9_mac/naututil1.o | Bin 51164 -> 0 bytes tools/nauty25r9_mac/nauty-h.in | 1177 --- tools/nauty25r9_mac/nauty.a | Bin 522600 -> 0 bytes tools/nauty25r9_mac/nauty.c | 1202 --- tools/nauty25r9_mac/nauty.h | 1177 --- tools/nauty25r9_mac/nauty.o | Bin 20972 -> 0 bytes tools/nauty25r9_mac/nauty1.a | Bin 457528 -> 0 bytes tools/nauty25r9_mac/nauty1.o | Bin 17944 -> 0 bytes tools/nauty25r9_mac/nautyW1.o | Bin 17416 -> 0 bytes tools/nauty25r9_mac/nautyex1.c | 73 - tools/nauty25r9_mac/nautyex10.c | 151 - tools/nauty25r9_mac/nautyex2.c | 75 - tools/nauty25r9_mac/nautyex3.c | 82 - tools/nauty25r9_mac/nautyex4.c | 67 - tools/nauty25r9_mac/nautyex5.c | 130 - tools/nauty25r9_mac/nautyex6.c | 103 - tools/nauty25r9_mac/nautyex7.c | 130 - tools/nauty25r9_mac/nautyex8.c | 109 - tools/nauty25r9_mac/nautyex9.c | 118 - tools/nauty25r9_mac/newedgeg | Bin 138624 -> 0 bytes tools/nauty25r9_mac/newedgeg.c | 240 - tools/nauty25r9_mac/nug25.pdf | Bin 574391 -> 0 bytes tools/nauty25r9_mac/out.graph6 | 36 - tools/nauty25r9_mac/pickg | Bin 166544 -> 0 bytes tools/nauty25r9_mac/planarg | Bin 106696 -> 0 bytes tools/nauty25r9_mac/planarg.c | 391 - tools/nauty25r9_mac/planarity.c | 10379 ------------------------ tools/nauty25r9_mac/planarity.h | 458 -- tools/nauty25r9_mac/ranlabg | Bin 117912 -> 0 bytes tools/nauty25r9_mac/ranlabg.c | 184 - tools/nauty25r9_mac/rng.c | 131 - tools/nauty25r9_mac/rng.h | 37 - tools/nauty25r9_mac/runalltests | 80 - tools/nauty25r9_mac/schreier.c | 1124 --- tools/nauty25r9_mac/schreier.h | 68 - tools/nauty25r9_mac/schreier.o | Bin 20536 -> 0 bytes tools/nauty25r9_mac/schreier.txt | 132 - tools/nauty25r9_mac/schreierW.o | Bin 20136 -> 0 bytes tools/nauty25r9_mac/shortg | Bin 345248 -> 0 bytes tools/nauty25r9_mac/shortg.c | 752 -- tools/nauty25r9_mac/showg | Bin 22032 -> 0 bytes tools/nauty25r9_mac/showg.c | 1135 --- tools/nauty25r9_mac/sorttemplates.c | 438 - tools/nauty25r9_mac/splay.c | 413 - tools/nauty25r9_mac/subdivideg | Bin 117864 -> 0 bytes tools/nauty25r9_mac/subdivideg.c | 225 - tools/nauty25r9_mac/sumlines.c | 1597 ---- tools/nauty25r9_mac/test.txt | 2382 ------ tools/nauty25r9_mac/testg.c | 935 --- tools/nauty25r9_mac/traces.c | 9401 --------------------- tools/nauty25r9_mac/traces.h | 57 - tools/nauty25r9_mac/traces.o | Bin 172492 -> 0 bytes tools/nauty25r9_mac/watercluster2 | Bin 195648 -> 0 bytes tools/nauty25r9_mac/watercluster2.c | 4078 ---------- tools/nauty25r9_unix/NRswitchg | Bin 143837 -> 0 bytes tools/nauty25r9_unix/NRswitchg.c | 198 - tools/nauty25r9_unix/README | 123 - tools/nauty25r9_unix/README_24 | 292 - tools/nauty25r9_unix/addedgeg | Bin 161850 -> 0 bytes tools/nauty25r9_unix/addedgeg.c | 288 - tools/nauty25r9_unix/amtog | Bin 126033 -> 0 bytes tools/nauty25r9_unix/amtog.c | 255 - tools/nauty25r9_unix/biplabg | Bin 136236 -> 0 bytes tools/nauty25r9_unix/biplabg.c | 168 - tools/nauty25r9_unix/bliss2dre.c | 161 - tools/nauty25r9_unix/blisstog.c | 194 - tools/nauty25r9_unix/callgeng.c | 47 - tools/nauty25r9_unix/catg | Bin 44640 -> 0 bytes tools/nauty25r9_unix/catg.c | 175 - tools/nauty25r9_unix/changes24-25.txt | 122 - tools/nauty25r9_unix/checks6.c | 227 - tools/nauty25r9_unix/complg | Bin 147878 -> 0 bytes tools/nauty25r9_unix/complg.c | 197 - tools/nauty25r9_unix/config.guess | 1558 ---- tools/nauty25r9_unix/config.status | 951 --- tools/nauty25r9_unix/config.sub | 1791 ---- tools/nauty25r9_unix/config.txt | 21 - tools/nauty25r9_unix/configure | 6868 ---------------- tools/nauty25r9_unix/configure.ac | 381 - tools/nauty25r9_unix/copyg | Bin 44429 -> 0 bytes tools/nauty25r9_unix/copyg.c | 156 - tools/nauty25r9_unix/countg | Bin 181231 -> 0 bytes tools/nauty25r9_unix/deledgeg | Bin 147751 -> 0 bytes tools/nauty25r9_unix/deledgeg.c | 183 - tools/nauty25r9_unix/directg | Bin 148782 -> 0 bytes tools/nauty25r9_unix/directg.c | 658 -- tools/nauty25r9_unix/dreadnaut | Bin 378510 -> 0 bytes tools/nauty25r9_unix/dreadnaut.c | 2237 ----- tools/nauty25r9_unix/dretog | Bin 169334 -> 0 bytes tools/nauty25r9_unix/dretog.c | 214 - tools/nauty25r9_unix/formats.txt | 164 - tools/nauty25r9_unix/genbg | Bin 109757 -> 0 bytes tools/nauty25r9_unix/genbg.c | 1754 ---- tools/nauty25r9_unix/geng | Bin 118401 -> 0 bytes tools/nauty25r9_unix/geng.c | 2504 ------ tools/nauty25r9_unix/genrang | Bin 174070 -> 0 bytes tools/nauty25r9_unix/genrang.c | 564 -- tools/nauty25r9_unix/gentourng | Bin 105110 -> 0 bytes tools/nauty25r9_unix/gentourng.c | 1495 ---- tools/nauty25r9_unix/gtnauty.c | 861 -- tools/nauty25r9_unix/gtnauty.o | Bin 36808 -> 0 bytes tools/nauty25r9_unix/gtools-h.in | 240 - tools/nauty25r9_unix/gtools.c | 1926 ----- tools/nauty25r9_unix/gtools.h | 240 - tools/nauty25r9_unix/gtools.o | Bin 40992 -> 0 bytes tools/nauty25r9_unix/gtoolsW.o | Bin 40608 -> 0 bytes tools/nauty25r9_unix/gutil1.c | 625 -- tools/nauty25r9_unix/gutil1.o | Bin 20488 -> 0 bytes tools/nauty25r9_unix/gutil2.c | 474 -- tools/nauty25r9_unix/gutil2.o | Bin 15568 -> 0 bytes tools/nauty25r9_unix/gutils.h | 39 - tools/nauty25r9_unix/install-sh | 4 - tools/nauty25r9_unix/labelg | Bin 334684 -> 0 bytes tools/nauty25r9_unix/labelg.c | 352 - tools/nauty25r9_unix/linegraphg | Bin 126166 -> 0 bytes tools/nauty25r9_unix/linegraphg.c | 218 - tools/nauty25r9_unix/listg | Bin 61998 -> 0 bytes tools/nauty25r9_unix/listg.c | 616 -- tools/nauty25r9_unix/makefile | 486 -- tools/nauty25r9_unix/makefile.basic | 486 -- tools/nauty25r9_unix/makefile.in | 486 -- tools/nauty25r9_unix/multig | Bin 152910 -> 0 bytes tools/nauty25r9_unix/multig.c | 833 -- tools/nauty25r9_unix/naucompare.c | 264 - tools/nauty25r9_unix/naugraph.c | 711 -- tools/nauty25r9_unix/naugraph.o | Bin 19440 -> 0 bytes tools/nauty25r9_unix/naugraph1.o | Bin 11280 -> 0 bytes tools/nauty25r9_unix/naugraphW1.o | Bin 10240 -> 0 bytes tools/nauty25r9_unix/naugroup.c | 457 -- tools/nauty25r9_unix/naugroup.h | 53 - tools/nauty25r9_unix/naugroup.o | Bin 17816 -> 0 bytes tools/nauty25r9_unix/naurng.c | 133 - tools/nauty25r9_unix/naurng.h | 40 - tools/nauty25r9_unix/naurng.o | Bin 4400 -> 0 bytes tools/nauty25r9_unix/nausparse.c | 1668 ---- tools/nauty25r9_unix/nausparse.h | 102 - tools/nauty25r9_unix/nausparse.o | Bin 40944 -> 0 bytes tools/nauty25r9_unix/nautaux.c | 252 - tools/nauty25r9_unix/nautaux.h | 34 - tools/nauty25r9_unix/nautest.c | 126 - tools/nauty25r9_unix/nautest1.dre | 58 - tools/nauty25r9_unix/nautest1a.ans | 149 - tools/nauty25r9_unix/nautest1a.dre | 149 - tools/nauty25r9_unix/nautest1b.ans | 150 - tools/nauty25r9_unix/nautest1b.dre | 150 - tools/nauty25r9_unix/nautest1c.ans | 142 - tools/nauty25r9_unix/nautest1c.dre | 143 - tools/nauty25r9_unix/nautest2.c | 79 - tools/nauty25r9_unix/nautest2.dre | 7 - tools/nauty25r9_unix/nautest2a.ans | 24 - tools/nauty25r9_unix/nautest2b.ans | 24 - tools/nauty25r9_unix/nautest2c.ans | 17 - tools/nauty25r9_unix/nautesta.ans | 2 - tools/nauty25r9_unix/nautestb.ans | 3391 -------- tools/nauty25r9_unix/nautestc.ans | 2 - tools/nauty25r9_unix/nauthread1.c | 134 - tools/nauty25r9_unix/nauthread2.c | 140 - tools/nauty25r9_unix/nautil.c | 743 -- tools/nauty25r9_unix/nautil.o | Bin 14296 -> 0 bytes tools/nauty25r9_unix/nautil1.o | Bin 11984 -> 0 bytes tools/nauty25r9_unix/nautilW1.o | Bin 11600 -> 0 bytes tools/nauty25r9_unix/nautinv.c | 1751 ---- tools/nauty25r9_unix/nautinv.h | 42 - tools/nauty25r9_unix/nautinv.o | Bin 60808 -> 0 bytes tools/nauty25r9_unix/nautinv1.o | Bin 36256 -> 0 bytes tools/nauty25r9_unix/naututil-h.in | 278 - tools/nauty25r9_unix/naututil.c | 2714 ------- tools/nauty25r9_unix/naututil.h | 278 - tools/nauty25r9_unix/naututil.o | Bin 70432 -> 0 bytes tools/nauty25r9_unix/naututil1.o | Bin 62400 -> 0 bytes tools/nauty25r9_unix/nauty-h.in | 1177 --- tools/nauty25r9_unix/nauty.a | Bin 652526 -> 0 bytes tools/nauty25r9_unix/nauty.c | 1202 --- tools/nauty25r9_unix/nauty.h | 1177 --- tools/nauty25r9_unix/nauty.o | Bin 35432 -> 0 bytes tools/nauty25r9_unix/nauty1.a | Bin 578746 -> 0 bytes tools/nauty25r9_unix/nauty1.o | Bin 31688 -> 0 bytes tools/nauty25r9_unix/nautyW1.o | Bin 29640 -> 0 bytes tools/nauty25r9_unix/nautyex1.c | 73 - tools/nauty25r9_unix/nautyex10.c | 151 - tools/nauty25r9_unix/nautyex2.c | 75 - tools/nauty25r9_unix/nautyex3.c | 82 - tools/nauty25r9_unix/nautyex4.c | 67 - tools/nauty25r9_unix/nautyex5.c | 130 - tools/nauty25r9_unix/nautyex6.c | 103 - tools/nauty25r9_unix/nautyex7.c | 130 - tools/nauty25r9_unix/nautyex8.c | 109 - tools/nauty25r9_unix/nautyex9.c | 118 - tools/nauty25r9_unix/newedgeg | Bin 143638 -> 0 bytes tools/nauty25r9_unix/newedgeg.c | 240 - tools/nauty25r9_unix/nug25.pdf | Bin 574391 -> 0 bytes tools/nauty25r9_unix/pickg | Bin 181231 -> 0 bytes tools/nauty25r9_unix/planarg | Bin 128658 -> 0 bytes tools/nauty25r9_unix/planarg.c | 391 - tools/nauty25r9_unix/planarity.c | 10379 ------------------------ tools/nauty25r9_unix/planarity.h | 458 -- tools/nauty25r9_unix/ranlabg | Bin 126280 -> 0 bytes tools/nauty25r9_unix/ranlabg.c | 184 - tools/nauty25r9_unix/rng.c | 131 - tools/nauty25r9_unix/rng.h | 37 - tools/nauty25r9_unix/runalltests | 80 - tools/nauty25r9_unix/schreier.c | 1124 --- tools/nauty25r9_unix/schreier.h | 68 - tools/nauty25r9_unix/schreier.o | Bin 22104 -> 0 bytes tools/nauty25r9_unix/schreier.txt | 132 - tools/nauty25r9_unix/schreierW.o | Bin 21848 -> 0 bytes tools/nauty25r9_unix/shortg | Bin 343306 -> 0 bytes tools/nauty25r9_unix/shortg.c | 752 -- tools/nauty25r9_unix/showg | Bin 22261 -> 0 bytes tools/nauty25r9_unix/showg.c | 1135 --- tools/nauty25r9_unix/sorttemplates.c | 438 - tools/nauty25r9_unix/splay.c | 413 - tools/nauty25r9_unix/subdivideg | Bin 126166 -> 0 bytes tools/nauty25r9_unix/subdivideg.c | 225 - tools/nauty25r9_unix/sumlines.c | 1597 ---- tools/nauty25r9_unix/testg.c | 935 --- tools/nauty25r9_unix/traces.c | 9401 --------------------- tools/nauty25r9_unix/traces.h | 57 - tools/nauty25r9_unix/traces.o | Bin 221560 -> 0 bytes tools/nauty25r9_unix/watercluster2 | Bin 202416 -> 0 bytes tools/nauty25r9_unix/watercluster2.c | 4078 ---------- tools/nauty25r9_win/NRswitchg.c | 198 - tools/nauty25r9_win/NRswitchg.exe | Bin 186205 -> 0 bytes tools/nauty25r9_win/README | 123 - tools/nauty25r9_win/README_24 | 292 - tools/nauty25r9_win/addedgeg.c | 288 - tools/nauty25r9_win/addedgeg.exe | Bin 199512 -> 0 bytes tools/nauty25r9_win/amtog.c | 255 - tools/nauty25r9_win/amtog.exe | Bin 169420 -> 0 bytes tools/nauty25r9_win/biplabg.c | 168 - tools/nauty25r9_win/biplabg.exe | Bin 177902 -> 0 bytes tools/nauty25r9_win/bliss2dre.c | 161 - tools/nauty25r9_win/blisstog.c | 194 - tools/nauty25r9_win/callgeng.c | 47 - tools/nauty25r9_win/catg.c | 175 - tools/nauty25r9_win/catg.exe | Bin 98689 -> 0 bytes tools/nauty25r9_win/changes24-25.txt | 122 - tools/nauty25r9_win/checks6.c | 227 - tools/nauty25r9_win/complg.c | 197 - tools/nauty25r9_win/complg.exe | Bin 186662 -> 0 bytes tools/nauty25r9_win/config.guess | 1558 ---- tools/nauty25r9_win/config.status | 950 --- tools/nauty25r9_win/config.sub | 1791 ---- tools/nauty25r9_win/config.txt | 21 - tools/nauty25r9_win/configure | 6868 ---------------- tools/nauty25r9_win/configure.ac | 381 - tools/nauty25r9_win/copyg.c | 156 - tools/nauty25r9_win/copyg.exe | Bin 100271 -> 0 bytes tools/nauty25r9_win/countg.exe | Bin 218011 -> 0 bytes tools/nauty25r9_win/deledgeg.c | 183 - tools/nauty25r9_win/deledgeg.exe | Bin 187090 -> 0 bytes tools/nauty25r9_win/directg.c | 658 -- tools/nauty25r9_win/directg.exe | Bin 190932 -> 0 bytes tools/nauty25r9_win/dreadnaut.c | 2237 ----- tools/nauty25r9_win/dreadnaut.exe | Bin 401533 -> 0 bytes tools/nauty25r9_win/dretog.c | 214 - tools/nauty25r9_win/dretog.exe | Bin 205354 -> 0 bytes tools/nauty25r9_win/formats.txt | 164 - tools/nauty25r9_win/genbg.c | 1754 ---- tools/nauty25r9_win/genbg.exe | Bin 155737 -> 0 bytes tools/nauty25r9_win/geng.c | 2504 ------ tools/nauty25r9_win/geng.exe | Bin 160478 -> 0 bytes tools/nauty25r9_win/genrang.c | 564 -- tools/nauty25r9_win/genrang.exe | Bin 212327 -> 0 bytes tools/nauty25r9_win/gentourng.c | 1495 ---- tools/nauty25r9_win/gentourng.exe | Bin 151109 -> 0 bytes tools/nauty25r9_win/gtnauty.c | 861 -- tools/nauty25r9_win/gtnauty.o | Bin 24079 -> 0 bytes tools/nauty25r9_win/gtools-h.in | 240 - tools/nauty25r9_win/gtools.c | 1926 ----- tools/nauty25r9_win/gtools.h | 240 - tools/nauty25r9_win/gtools.o | Bin 29979 -> 0 bytes tools/nauty25r9_win/gtoolsW.o | Bin 29979 -> 0 bytes tools/nauty25r9_win/gutil1.c | 625 -- tools/nauty25r9_win/gutil1.o | Bin 13200 -> 0 bytes tools/nauty25r9_win/gutil2.c | 474 -- tools/nauty25r9_win/gutil2.o | Bin 12201 -> 0 bytes tools/nauty25r9_win/gutils.h | 39 - tools/nauty25r9_win/install-sh | 4 - tools/nauty25r9_win/labelg.c | 352 - tools/nauty25r9_win/labelg.exe | Bin 360793 -> 0 bytes tools/nauty25r9_win/linegraphg.c | 218 - tools/nauty25r9_win/linegraphg.exe | Bin 168902 -> 0 bytes tools/nauty25r9_win/listg.c | 616 -- tools/nauty25r9_win/listg.exe | Bin 117763 -> 0 bytes tools/nauty25r9_win/makefile | 486 -- tools/nauty25r9_win/makefile.basic | 486 -- tools/nauty25r9_win/makefile.in | 486 -- tools/nauty25r9_win/multig.c | 833 -- tools/nauty25r9_win/multig.exe | Bin 192487 -> 0 bytes tools/nauty25r9_win/naucompare.c | 264 - tools/nauty25r9_win/naugraph.c | 711 -- tools/nauty25r9_win/naugraph.o | Bin 11875 -> 0 bytes tools/nauty25r9_win/naugraph1.o | Bin 7095 -> 0 bytes tools/nauty25r9_win/naugraphW1.o | Bin 7095 -> 0 bytes tools/nauty25r9_win/naugroup.c | 457 -- tools/nauty25r9_win/naugroup.h | 53 - tools/nauty25r9_win/naugroup.o | Bin 11444 -> 0 bytes tools/nauty25r9_win/naurng.c | 133 - tools/nauty25r9_win/naurng.h | 40 - tools/nauty25r9_win/naurng.o | Bin 2007 -> 0 bytes tools/nauty25r9_win/nausparse.c | 1668 ---- tools/nauty25r9_win/nausparse.h | 102 - tools/nauty25r9_win/nausparse.o | Bin 29125 -> 0 bytes tools/nauty25r9_win/nautaux.c | 252 - tools/nauty25r9_win/nautaux.h | 34 - tools/nauty25r9_win/nautest.c | 126 - tools/nauty25r9_win/nautest1.dre | 58 - tools/nauty25r9_win/nautest1a.ans | 149 - tools/nauty25r9_win/nautest1a.dre | 149 - tools/nauty25r9_win/nautest1b.ans | 150 - tools/nauty25r9_win/nautest1b.dre | 150 - tools/nauty25r9_win/nautest1c.ans | 142 - tools/nauty25r9_win/nautest1c.dre | 143 - tools/nauty25r9_win/nautest2.c | 79 - tools/nauty25r9_win/nautest2.dre | 7 - tools/nauty25r9_win/nautest2a.ans | 24 - tools/nauty25r9_win/nautest2b.ans | 24 - tools/nauty25r9_win/nautest2c.ans | 17 - tools/nauty25r9_win/nautesta.ans | 2 - tools/nauty25r9_win/nautestb.ans | 3391 -------- tools/nauty25r9_win/nautestc.ans | 2 - tools/nauty25r9_win/nauthread1.c | 134 - tools/nauty25r9_win/nauthread2.c | 140 - tools/nauty25r9_win/nautil.c | 743 -- tools/nauty25r9_win/nautil.o | Bin 9976 -> 0 bytes tools/nauty25r9_win/nautil1.o | Bin 8507 -> 0 bytes tools/nauty25r9_win/nautilW1.o | Bin 8507 -> 0 bytes tools/nauty25r9_win/nautinv.c | 1751 ---- tools/nauty25r9_win/nautinv.h | 42 - tools/nauty25r9_win/nautinv.o | Bin 38450 -> 0 bytes tools/nauty25r9_win/nautinv1.o | Bin 23509 -> 0 bytes tools/nauty25r9_win/naututil-h.in | 278 - tools/nauty25r9_win/naututil.c | 2714 ------- tools/nauty25r9_win/naututil.h | 278 - tools/nauty25r9_win/naututil.o | Bin 47336 -> 0 bytes tools/nauty25r9_win/naututil1.o | Bin 41330 -> 0 bytes tools/nauty25r9_win/nauty-h.in | 1177 --- tools/nauty25r9_win/nauty.a | Bin 452974 -> 0 bytes tools/nauty25r9_win/nauty.c | 1202 --- tools/nauty25r9_win/nauty.h | 1177 --- tools/nauty25r9_win/nauty.o | Bin 21337 -> 0 bytes tools/nauty25r9_win/nauty1.a | Bin 403220 -> 0 bytes tools/nauty25r9_win/nauty1.o | Bin 17117 -> 0 bytes tools/nauty25r9_win/nauty25r9.tar.gz | Bin 1007323 -> 0 bytes tools/nauty25r9_win/nautyW1.o | Bin 17117 -> 0 bytes tools/nauty25r9_win/nautyex1.c | 73 - tools/nauty25r9_win/nautyex10.c | 151 - tools/nauty25r9_win/nautyex2.c | 75 - tools/nauty25r9_win/nautyex3.c | 82 - tools/nauty25r9_win/nautyex4.c | 67 - tools/nauty25r9_win/nautyex5.c | 130 - tools/nauty25r9_win/nautyex6.c | 103 - tools/nauty25r9_win/nautyex7.c | 130 - tools/nauty25r9_win/nautyex8.c | 109 - tools/nauty25r9_win/nautyex9.c | 118 - tools/nauty25r9_win/newedgeg.c | 240 - tools/nauty25r9_win/newedgeg.exe | Bin 186427 -> 0 bytes tools/nauty25r9_win/nug25.pdf | Bin 574391 -> 0 bytes tools/nauty25r9_win/pickg.exe | Bin 218011 -> 0 bytes tools/nauty25r9_win/planarg.c | 391 - tools/nauty25r9_win/planarg.exe | Bin 179578 -> 0 bytes tools/nauty25r9_win/planarity.c | 10379 ------------------------ tools/nauty25r9_win/planarity.h | 458 -- tools/nauty25r9_win/ranlabg.c | 184 - tools/nauty25r9_win/ranlabg.exe | Bin 169403 -> 0 bytes tools/nauty25r9_win/rng.c | 131 - tools/nauty25r9_win/rng.h | 37 - tools/nauty25r9_win/runalltests | 80 - tools/nauty25r9_win/schreier.c | 1124 --- tools/nauty25r9_win/schreier.h | 68 - tools/nauty25r9_win/schreier.o | Bin 15834 -> 0 bytes tools/nauty25r9_win/schreier.txt | 132 - tools/nauty25r9_win/schreierW.o | Bin 15834 -> 0 bytes tools/nauty25r9_win/shortg.c | 752 -- tools/nauty25r9_win/showg.c | 1135 --- tools/nauty25r9_win/showg.exe | Bin 82967 -> 0 bytes tools/nauty25r9_win/sorttemplates.c | 438 - tools/nauty25r9_win/splay.c | 413 - tools/nauty25r9_win/subdivideg.c | 225 - tools/nauty25r9_win/subdivideg.exe | Bin 168902 -> 0 bytes tools/nauty25r9_win/sumlines.c | 1597 ---- tools/nauty25r9_win/test.g6 | 3 - tools/nauty25r9_win/test.graph6 | 2 - tools/nauty25r9_win/testg.c | 935 --- tools/nauty25r9_win/traces.c | 9401 --------------------- tools/nauty25r9_win/traces.h | 57 - tools/nauty25r9_win/traces.o | Bin 163092 -> 0 bytes tools/nauty25r9_win/watercluster2.c | 4078 ---------- tools/nauty25r9_win/watercluster2.exe | Bin 235707 -> 0 bytes 507 files changed, 3 insertions(+), 251697 deletions(-) delete mode 100644 tools/nauty25r9_mac/NRswitchg delete mode 100644 tools/nauty25r9_mac/NRswitchg.c delete mode 100644 tools/nauty25r9_mac/README delete mode 100644 tools/nauty25r9_mac/README_24 delete mode 100644 tools/nauty25r9_mac/addedgeg delete mode 100644 tools/nauty25r9_mac/addedgeg.c delete mode 100644 tools/nauty25r9_mac/amtog delete mode 100644 tools/nauty25r9_mac/amtog.c delete mode 100644 tools/nauty25r9_mac/biplabg delete mode 100644 tools/nauty25r9_mac/biplabg.c delete mode 100644 tools/nauty25r9_mac/bliss2dre.c delete mode 100644 tools/nauty25r9_mac/blisstog.c delete mode 100644 tools/nauty25r9_mac/callgeng.c delete mode 100644 tools/nauty25r9_mac/catg delete mode 100644 tools/nauty25r9_mac/catg.c delete mode 100644 tools/nauty25r9_mac/changes24-25.txt delete mode 100644 tools/nauty25r9_mac/checks6.c delete mode 100644 tools/nauty25r9_mac/complg delete mode 100644 tools/nauty25r9_mac/complg.c delete mode 100644 tools/nauty25r9_mac/config.guess delete mode 100644 tools/nauty25r9_mac/config.status delete mode 100644 tools/nauty25r9_mac/config.sub delete mode 100644 tools/nauty25r9_mac/config.txt delete mode 100644 tools/nauty25r9_mac/configure delete mode 100644 tools/nauty25r9_mac/configure.ac delete mode 100644 tools/nauty25r9_mac/copyg delete mode 100644 tools/nauty25r9_mac/copyg.c delete mode 100644 tools/nauty25r9_mac/countg delete mode 100644 tools/nauty25r9_mac/deledgeg delete mode 100644 tools/nauty25r9_mac/deledgeg.c delete mode 100644 tools/nauty25r9_mac/directg delete mode 100644 tools/nauty25r9_mac/directg.c delete mode 100644 tools/nauty25r9_mac/dreadnaut delete mode 100644 tools/nauty25r9_mac/dreadnaut.c delete mode 100644 tools/nauty25r9_mac/dretog delete mode 100644 tools/nauty25r9_mac/dretog.c delete mode 100644 tools/nauty25r9_mac/formats.txt delete mode 100644 tools/nauty25r9_mac/genbg delete mode 100644 tools/nauty25r9_mac/genbg.c delete mode 100644 tools/nauty25r9_mac/geng delete mode 100644 tools/nauty25r9_mac/geng.c delete mode 100644 tools/nauty25r9_mac/genrang delete mode 100644 tools/nauty25r9_mac/genrang.c delete mode 100644 tools/nauty25r9_mac/gentourng delete mode 100644 tools/nauty25r9_mac/gentourng.c delete mode 100644 tools/nauty25r9_mac/gtnauty.c delete mode 100644 tools/nauty25r9_mac/gtnauty.o delete mode 100644 tools/nauty25r9_mac/gtools-h.in delete mode 100644 tools/nauty25r9_mac/gtools.c delete mode 100644 tools/nauty25r9_mac/gtools.h delete mode 100644 tools/nauty25r9_mac/gtools.o delete mode 100644 tools/nauty25r9_mac/gtoolsW.o delete mode 100644 tools/nauty25r9_mac/gutil1.c delete mode 100644 tools/nauty25r9_mac/gutil1.o delete mode 100644 tools/nauty25r9_mac/gutil2.c delete mode 100644 tools/nauty25r9_mac/gutil2.o delete mode 100644 tools/nauty25r9_mac/gutils.h delete mode 100644 tools/nauty25r9_mac/install-sh delete mode 100644 tools/nauty25r9_mac/labelg delete mode 100644 tools/nauty25r9_mac/labelg.c delete mode 100644 tools/nauty25r9_mac/linegraphg delete mode 100644 tools/nauty25r9_mac/linegraphg.c delete mode 100644 tools/nauty25r9_mac/listg delete mode 100644 tools/nauty25r9_mac/listg.c delete mode 100644 tools/nauty25r9_mac/makefile delete mode 100644 tools/nauty25r9_mac/makefile.basic delete mode 100644 tools/nauty25r9_mac/makefile.in delete mode 100644 tools/nauty25r9_mac/multig delete mode 100644 tools/nauty25r9_mac/multig.c delete mode 100644 tools/nauty25r9_mac/naucompare.c delete mode 100644 tools/nauty25r9_mac/naugraph.c delete mode 100644 tools/nauty25r9_mac/naugraph.o delete mode 100644 tools/nauty25r9_mac/naugraph1.o delete mode 100644 tools/nauty25r9_mac/naugraphW1.o delete mode 100644 tools/nauty25r9_mac/naugroup.c delete mode 100644 tools/nauty25r9_mac/naugroup.h delete mode 100644 tools/nauty25r9_mac/naugroup.o delete mode 100644 tools/nauty25r9_mac/naurng.c delete mode 100644 tools/nauty25r9_mac/naurng.h delete mode 100644 tools/nauty25r9_mac/naurng.o delete mode 100644 tools/nauty25r9_mac/nausparse.c delete mode 100644 tools/nauty25r9_mac/nausparse.h delete mode 100644 tools/nauty25r9_mac/nausparse.o delete mode 100644 tools/nauty25r9_mac/nautaux.c delete mode 100644 tools/nauty25r9_mac/nautaux.h delete mode 100644 tools/nauty25r9_mac/nautest.c delete mode 100644 tools/nauty25r9_mac/nautest1.dre delete mode 100644 tools/nauty25r9_mac/nautest1a.ans delete mode 100644 tools/nauty25r9_mac/nautest1a.dre delete mode 100644 tools/nauty25r9_mac/nautest1b.ans delete mode 100644 tools/nauty25r9_mac/nautest1b.dre delete mode 100644 tools/nauty25r9_mac/nautest1c.ans delete mode 100644 tools/nauty25r9_mac/nautest1c.dre delete mode 100644 tools/nauty25r9_mac/nautest2.c delete mode 100644 tools/nauty25r9_mac/nautest2.dre delete mode 100644 tools/nauty25r9_mac/nautest2a.ans delete mode 100644 tools/nauty25r9_mac/nautest2b.ans delete mode 100644 tools/nauty25r9_mac/nautest2c.ans delete mode 100644 tools/nauty25r9_mac/nautesta.ans delete mode 100644 tools/nauty25r9_mac/nautestb.ans delete mode 100644 tools/nauty25r9_mac/nautestc.ans delete mode 100644 tools/nauty25r9_mac/nauthread1.c delete mode 100644 tools/nauty25r9_mac/nauthread2.c delete mode 100644 tools/nauty25r9_mac/nautil.c delete mode 100644 tools/nauty25r9_mac/nautil.o delete mode 100644 tools/nauty25r9_mac/nautil1.o delete mode 100644 tools/nauty25r9_mac/nautilW1.o delete mode 100644 tools/nauty25r9_mac/nautinv.c delete mode 100644 tools/nauty25r9_mac/nautinv.h delete mode 100644 tools/nauty25r9_mac/nautinv.o delete mode 100644 tools/nauty25r9_mac/nautinv1.o delete mode 100644 tools/nauty25r9_mac/naututil-h.in delete mode 100644 tools/nauty25r9_mac/naututil.c delete mode 100644 tools/nauty25r9_mac/naututil.h delete mode 100644 tools/nauty25r9_mac/naututil.o delete mode 100644 tools/nauty25r9_mac/naututil1.o delete mode 100644 tools/nauty25r9_mac/nauty-h.in delete mode 100644 tools/nauty25r9_mac/nauty.a delete mode 100644 tools/nauty25r9_mac/nauty.c delete mode 100644 tools/nauty25r9_mac/nauty.h delete mode 100644 tools/nauty25r9_mac/nauty.o delete mode 100644 tools/nauty25r9_mac/nauty1.a delete mode 100644 tools/nauty25r9_mac/nauty1.o delete mode 100644 tools/nauty25r9_mac/nautyW1.o delete mode 100644 tools/nauty25r9_mac/nautyex1.c delete mode 100644 tools/nauty25r9_mac/nautyex10.c delete mode 100644 tools/nauty25r9_mac/nautyex2.c delete mode 100644 tools/nauty25r9_mac/nautyex3.c delete mode 100644 tools/nauty25r9_mac/nautyex4.c delete mode 100644 tools/nauty25r9_mac/nautyex5.c delete mode 100644 tools/nauty25r9_mac/nautyex6.c delete mode 100644 tools/nauty25r9_mac/nautyex7.c delete mode 100644 tools/nauty25r9_mac/nautyex8.c delete mode 100644 tools/nauty25r9_mac/nautyex9.c delete mode 100644 tools/nauty25r9_mac/newedgeg delete mode 100644 tools/nauty25r9_mac/newedgeg.c delete mode 100644 tools/nauty25r9_mac/nug25.pdf delete mode 100644 tools/nauty25r9_mac/out.graph6 delete mode 100644 tools/nauty25r9_mac/pickg delete mode 100644 tools/nauty25r9_mac/planarg delete mode 100644 tools/nauty25r9_mac/planarg.c delete mode 100644 tools/nauty25r9_mac/planarity.c delete mode 100644 tools/nauty25r9_mac/planarity.h delete mode 100644 tools/nauty25r9_mac/ranlabg delete mode 100644 tools/nauty25r9_mac/ranlabg.c delete mode 100644 tools/nauty25r9_mac/rng.c delete mode 100644 tools/nauty25r9_mac/rng.h delete mode 100644 tools/nauty25r9_mac/runalltests delete mode 100644 tools/nauty25r9_mac/schreier.c delete mode 100644 tools/nauty25r9_mac/schreier.h delete mode 100644 tools/nauty25r9_mac/schreier.o delete mode 100644 tools/nauty25r9_mac/schreier.txt delete mode 100644 tools/nauty25r9_mac/schreierW.o delete mode 100644 tools/nauty25r9_mac/shortg delete mode 100644 tools/nauty25r9_mac/shortg.c delete mode 100644 tools/nauty25r9_mac/showg delete mode 100644 tools/nauty25r9_mac/showg.c delete mode 100644 tools/nauty25r9_mac/sorttemplates.c delete mode 100644 tools/nauty25r9_mac/splay.c delete mode 100644 tools/nauty25r9_mac/subdivideg delete mode 100644 tools/nauty25r9_mac/subdivideg.c delete mode 100644 tools/nauty25r9_mac/sumlines.c delete mode 100644 tools/nauty25r9_mac/test.txt delete mode 100644 tools/nauty25r9_mac/testg.c delete mode 100644 tools/nauty25r9_mac/traces.c delete mode 100644 tools/nauty25r9_mac/traces.h delete mode 100644 tools/nauty25r9_mac/traces.o delete mode 100644 tools/nauty25r9_mac/watercluster2 delete mode 100644 tools/nauty25r9_mac/watercluster2.c delete mode 100644 tools/nauty25r9_unix/NRswitchg delete mode 100644 tools/nauty25r9_unix/NRswitchg.c delete mode 100644 tools/nauty25r9_unix/README delete mode 100644 tools/nauty25r9_unix/README_24 delete mode 100644 tools/nauty25r9_unix/addedgeg delete mode 100644 tools/nauty25r9_unix/addedgeg.c delete mode 100644 tools/nauty25r9_unix/amtog delete mode 100644 tools/nauty25r9_unix/amtog.c delete mode 100644 tools/nauty25r9_unix/biplabg delete mode 100644 tools/nauty25r9_unix/biplabg.c delete mode 100644 tools/nauty25r9_unix/bliss2dre.c delete mode 100644 tools/nauty25r9_unix/blisstog.c delete mode 100644 tools/nauty25r9_unix/callgeng.c delete mode 100644 tools/nauty25r9_unix/catg delete mode 100644 tools/nauty25r9_unix/catg.c delete mode 100644 tools/nauty25r9_unix/changes24-25.txt delete mode 100644 tools/nauty25r9_unix/checks6.c delete mode 100644 tools/nauty25r9_unix/complg delete mode 100644 tools/nauty25r9_unix/complg.c delete mode 100644 tools/nauty25r9_unix/config.guess delete mode 100644 tools/nauty25r9_unix/config.status delete mode 100644 tools/nauty25r9_unix/config.sub delete mode 100644 tools/nauty25r9_unix/config.txt delete mode 100644 tools/nauty25r9_unix/configure delete mode 100644 tools/nauty25r9_unix/configure.ac delete mode 100644 tools/nauty25r9_unix/copyg delete mode 100644 tools/nauty25r9_unix/copyg.c delete mode 100644 tools/nauty25r9_unix/countg delete mode 100644 tools/nauty25r9_unix/deledgeg delete mode 100644 tools/nauty25r9_unix/deledgeg.c delete mode 100644 tools/nauty25r9_unix/directg delete mode 100644 tools/nauty25r9_unix/directg.c delete mode 100644 tools/nauty25r9_unix/dreadnaut delete mode 100644 tools/nauty25r9_unix/dreadnaut.c delete mode 100644 tools/nauty25r9_unix/dretog delete mode 100644 tools/nauty25r9_unix/dretog.c delete mode 100644 tools/nauty25r9_unix/formats.txt delete mode 100644 tools/nauty25r9_unix/genbg delete mode 100644 tools/nauty25r9_unix/genbg.c delete mode 100755 tools/nauty25r9_unix/geng delete mode 100644 tools/nauty25r9_unix/geng.c delete mode 100644 tools/nauty25r9_unix/genrang delete mode 100644 tools/nauty25r9_unix/genrang.c delete mode 100644 tools/nauty25r9_unix/gentourng delete mode 100644 tools/nauty25r9_unix/gentourng.c delete mode 100644 tools/nauty25r9_unix/gtnauty.c delete mode 100644 tools/nauty25r9_unix/gtnauty.o delete mode 100644 tools/nauty25r9_unix/gtools-h.in delete mode 100644 tools/nauty25r9_unix/gtools.c delete mode 100644 tools/nauty25r9_unix/gtools.h delete mode 100644 tools/nauty25r9_unix/gtools.o delete mode 100644 tools/nauty25r9_unix/gtoolsW.o delete mode 100644 tools/nauty25r9_unix/gutil1.c delete mode 100644 tools/nauty25r9_unix/gutil1.o delete mode 100644 tools/nauty25r9_unix/gutil2.c delete mode 100644 tools/nauty25r9_unix/gutil2.o delete mode 100644 tools/nauty25r9_unix/gutils.h delete mode 100644 tools/nauty25r9_unix/install-sh delete mode 100644 tools/nauty25r9_unix/labelg delete mode 100644 tools/nauty25r9_unix/labelg.c delete mode 100644 tools/nauty25r9_unix/linegraphg delete mode 100644 tools/nauty25r9_unix/linegraphg.c delete mode 100644 tools/nauty25r9_unix/listg delete mode 100644 tools/nauty25r9_unix/listg.c delete mode 100644 tools/nauty25r9_unix/makefile delete mode 100644 tools/nauty25r9_unix/makefile.basic delete mode 100644 tools/nauty25r9_unix/makefile.in delete mode 100644 tools/nauty25r9_unix/multig delete mode 100644 tools/nauty25r9_unix/multig.c delete mode 100644 tools/nauty25r9_unix/naucompare.c delete mode 100644 tools/nauty25r9_unix/naugraph.c delete mode 100644 tools/nauty25r9_unix/naugraph.o delete mode 100644 tools/nauty25r9_unix/naugraph1.o delete mode 100644 tools/nauty25r9_unix/naugraphW1.o delete mode 100644 tools/nauty25r9_unix/naugroup.c delete mode 100644 tools/nauty25r9_unix/naugroup.h delete mode 100644 tools/nauty25r9_unix/naugroup.o delete mode 100644 tools/nauty25r9_unix/naurng.c delete mode 100644 tools/nauty25r9_unix/naurng.h delete mode 100644 tools/nauty25r9_unix/naurng.o delete mode 100644 tools/nauty25r9_unix/nausparse.c delete mode 100644 tools/nauty25r9_unix/nausparse.h delete mode 100644 tools/nauty25r9_unix/nausparse.o delete mode 100644 tools/nauty25r9_unix/nautaux.c delete mode 100644 tools/nauty25r9_unix/nautaux.h delete mode 100644 tools/nauty25r9_unix/nautest.c delete mode 100644 tools/nauty25r9_unix/nautest1.dre delete mode 100644 tools/nauty25r9_unix/nautest1a.ans delete mode 100644 tools/nauty25r9_unix/nautest1a.dre delete mode 100644 tools/nauty25r9_unix/nautest1b.ans delete mode 100644 tools/nauty25r9_unix/nautest1b.dre delete mode 100644 tools/nauty25r9_unix/nautest1c.ans delete mode 100644 tools/nauty25r9_unix/nautest1c.dre delete mode 100644 tools/nauty25r9_unix/nautest2.c delete mode 100644 tools/nauty25r9_unix/nautest2.dre delete mode 100644 tools/nauty25r9_unix/nautest2a.ans delete mode 100644 tools/nauty25r9_unix/nautest2b.ans delete mode 100644 tools/nauty25r9_unix/nautest2c.ans delete mode 100644 tools/nauty25r9_unix/nautesta.ans delete mode 100644 tools/nauty25r9_unix/nautestb.ans delete mode 100644 tools/nauty25r9_unix/nautestc.ans delete mode 100644 tools/nauty25r9_unix/nauthread1.c delete mode 100644 tools/nauty25r9_unix/nauthread2.c delete mode 100644 tools/nauty25r9_unix/nautil.c delete mode 100644 tools/nauty25r9_unix/nautil.o delete mode 100644 tools/nauty25r9_unix/nautil1.o delete mode 100644 tools/nauty25r9_unix/nautilW1.o delete mode 100644 tools/nauty25r9_unix/nautinv.c delete mode 100644 tools/nauty25r9_unix/nautinv.h delete mode 100644 tools/nauty25r9_unix/nautinv.o delete mode 100644 tools/nauty25r9_unix/nautinv1.o delete mode 100644 tools/nauty25r9_unix/naututil-h.in delete mode 100644 tools/nauty25r9_unix/naututil.c delete mode 100644 tools/nauty25r9_unix/naututil.h delete mode 100644 tools/nauty25r9_unix/naututil.o delete mode 100644 tools/nauty25r9_unix/naututil1.o delete mode 100644 tools/nauty25r9_unix/nauty-h.in delete mode 100644 tools/nauty25r9_unix/nauty.a delete mode 100644 tools/nauty25r9_unix/nauty.c delete mode 100644 tools/nauty25r9_unix/nauty.h delete mode 100644 tools/nauty25r9_unix/nauty.o delete mode 100644 tools/nauty25r9_unix/nauty1.a delete mode 100644 tools/nauty25r9_unix/nauty1.o delete mode 100644 tools/nauty25r9_unix/nautyW1.o delete mode 100644 tools/nauty25r9_unix/nautyex1.c delete mode 100644 tools/nauty25r9_unix/nautyex10.c delete mode 100644 tools/nauty25r9_unix/nautyex2.c delete mode 100644 tools/nauty25r9_unix/nautyex3.c delete mode 100644 tools/nauty25r9_unix/nautyex4.c delete mode 100644 tools/nauty25r9_unix/nautyex5.c delete mode 100644 tools/nauty25r9_unix/nautyex6.c delete mode 100644 tools/nauty25r9_unix/nautyex7.c delete mode 100644 tools/nauty25r9_unix/nautyex8.c delete mode 100644 tools/nauty25r9_unix/nautyex9.c delete mode 100644 tools/nauty25r9_unix/newedgeg delete mode 100644 tools/nauty25r9_unix/newedgeg.c delete mode 100644 tools/nauty25r9_unix/nug25.pdf delete mode 100644 tools/nauty25r9_unix/pickg delete mode 100644 tools/nauty25r9_unix/planarg delete mode 100644 tools/nauty25r9_unix/planarg.c delete mode 100644 tools/nauty25r9_unix/planarity.c delete mode 100644 tools/nauty25r9_unix/planarity.h delete mode 100644 tools/nauty25r9_unix/ranlabg delete mode 100644 tools/nauty25r9_unix/ranlabg.c delete mode 100644 tools/nauty25r9_unix/rng.c delete mode 100644 tools/nauty25r9_unix/rng.h delete mode 100644 tools/nauty25r9_unix/runalltests delete mode 100644 tools/nauty25r9_unix/schreier.c delete mode 100644 tools/nauty25r9_unix/schreier.h delete mode 100644 tools/nauty25r9_unix/schreier.o delete mode 100644 tools/nauty25r9_unix/schreier.txt delete mode 100644 tools/nauty25r9_unix/schreierW.o delete mode 100644 tools/nauty25r9_unix/shortg delete mode 100644 tools/nauty25r9_unix/shortg.c delete mode 100644 tools/nauty25r9_unix/showg delete mode 100644 tools/nauty25r9_unix/showg.c delete mode 100644 tools/nauty25r9_unix/sorttemplates.c delete mode 100644 tools/nauty25r9_unix/splay.c delete mode 100644 tools/nauty25r9_unix/subdivideg delete mode 100644 tools/nauty25r9_unix/subdivideg.c delete mode 100644 tools/nauty25r9_unix/sumlines.c delete mode 100644 tools/nauty25r9_unix/testg.c delete mode 100644 tools/nauty25r9_unix/traces.c delete mode 100644 tools/nauty25r9_unix/traces.h delete mode 100644 tools/nauty25r9_unix/traces.o delete mode 100644 tools/nauty25r9_unix/watercluster2 delete mode 100644 tools/nauty25r9_unix/watercluster2.c delete mode 100644 tools/nauty25r9_win/NRswitchg.c delete mode 100644 tools/nauty25r9_win/NRswitchg.exe delete mode 100644 tools/nauty25r9_win/README delete mode 100644 tools/nauty25r9_win/README_24 delete mode 100644 tools/nauty25r9_win/addedgeg.c delete mode 100644 tools/nauty25r9_win/addedgeg.exe delete mode 100644 tools/nauty25r9_win/amtog.c delete mode 100644 tools/nauty25r9_win/amtog.exe delete mode 100644 tools/nauty25r9_win/biplabg.c delete mode 100644 tools/nauty25r9_win/biplabg.exe delete mode 100644 tools/nauty25r9_win/bliss2dre.c delete mode 100644 tools/nauty25r9_win/blisstog.c delete mode 100644 tools/nauty25r9_win/callgeng.c delete mode 100644 tools/nauty25r9_win/catg.c delete mode 100644 tools/nauty25r9_win/catg.exe delete mode 100644 tools/nauty25r9_win/changes24-25.txt delete mode 100644 tools/nauty25r9_win/checks6.c delete mode 100644 tools/nauty25r9_win/complg.c delete mode 100644 tools/nauty25r9_win/complg.exe delete mode 100644 tools/nauty25r9_win/config.guess delete mode 100644 tools/nauty25r9_win/config.status delete mode 100644 tools/nauty25r9_win/config.sub delete mode 100644 tools/nauty25r9_win/config.txt delete mode 100644 tools/nauty25r9_win/configure delete mode 100644 tools/nauty25r9_win/configure.ac delete mode 100644 tools/nauty25r9_win/copyg.c delete mode 100644 tools/nauty25r9_win/copyg.exe delete mode 100644 tools/nauty25r9_win/countg.exe delete mode 100644 tools/nauty25r9_win/deledgeg.c delete mode 100644 tools/nauty25r9_win/deledgeg.exe delete mode 100644 tools/nauty25r9_win/directg.c delete mode 100644 tools/nauty25r9_win/directg.exe delete mode 100644 tools/nauty25r9_win/dreadnaut.c delete mode 100644 tools/nauty25r9_win/dreadnaut.exe delete mode 100644 tools/nauty25r9_win/dretog.c delete mode 100644 tools/nauty25r9_win/dretog.exe delete mode 100644 tools/nauty25r9_win/formats.txt delete mode 100644 tools/nauty25r9_win/genbg.c delete mode 100644 tools/nauty25r9_win/genbg.exe delete mode 100644 tools/nauty25r9_win/geng.c delete mode 100644 tools/nauty25r9_win/geng.exe delete mode 100644 tools/nauty25r9_win/genrang.c delete mode 100644 tools/nauty25r9_win/genrang.exe delete mode 100644 tools/nauty25r9_win/gentourng.c delete mode 100644 tools/nauty25r9_win/gentourng.exe delete mode 100644 tools/nauty25r9_win/gtnauty.c delete mode 100644 tools/nauty25r9_win/gtnauty.o delete mode 100644 tools/nauty25r9_win/gtools-h.in delete mode 100644 tools/nauty25r9_win/gtools.c delete mode 100644 tools/nauty25r9_win/gtools.h delete mode 100644 tools/nauty25r9_win/gtools.o delete mode 100644 tools/nauty25r9_win/gtoolsW.o delete mode 100644 tools/nauty25r9_win/gutil1.c delete mode 100644 tools/nauty25r9_win/gutil1.o delete mode 100644 tools/nauty25r9_win/gutil2.c delete mode 100644 tools/nauty25r9_win/gutil2.o delete mode 100644 tools/nauty25r9_win/gutils.h delete mode 100644 tools/nauty25r9_win/install-sh delete mode 100644 tools/nauty25r9_win/labelg.c delete mode 100644 tools/nauty25r9_win/labelg.exe delete mode 100644 tools/nauty25r9_win/linegraphg.c delete mode 100644 tools/nauty25r9_win/linegraphg.exe delete mode 100644 tools/nauty25r9_win/listg.c delete mode 100644 tools/nauty25r9_win/listg.exe delete mode 100644 tools/nauty25r9_win/makefile delete mode 100644 tools/nauty25r9_win/makefile.basic delete mode 100644 tools/nauty25r9_win/makefile.in delete mode 100644 tools/nauty25r9_win/multig.c delete mode 100644 tools/nauty25r9_win/multig.exe delete mode 100644 tools/nauty25r9_win/naucompare.c delete mode 100644 tools/nauty25r9_win/naugraph.c delete mode 100644 tools/nauty25r9_win/naugraph.o delete mode 100644 tools/nauty25r9_win/naugraph1.o delete mode 100644 tools/nauty25r9_win/naugraphW1.o delete mode 100644 tools/nauty25r9_win/naugroup.c delete mode 100644 tools/nauty25r9_win/naugroup.h delete mode 100644 tools/nauty25r9_win/naugroup.o delete mode 100644 tools/nauty25r9_win/naurng.c delete mode 100644 tools/nauty25r9_win/naurng.h delete mode 100644 tools/nauty25r9_win/naurng.o delete mode 100644 tools/nauty25r9_win/nausparse.c delete mode 100644 tools/nauty25r9_win/nausparse.h delete mode 100644 tools/nauty25r9_win/nausparse.o delete mode 100644 tools/nauty25r9_win/nautaux.c delete mode 100644 tools/nauty25r9_win/nautaux.h delete mode 100644 tools/nauty25r9_win/nautest.c delete mode 100644 tools/nauty25r9_win/nautest1.dre delete mode 100644 tools/nauty25r9_win/nautest1a.ans delete mode 100644 tools/nauty25r9_win/nautest1a.dre delete mode 100644 tools/nauty25r9_win/nautest1b.ans delete mode 100644 tools/nauty25r9_win/nautest1b.dre delete mode 100644 tools/nauty25r9_win/nautest1c.ans delete mode 100644 tools/nauty25r9_win/nautest1c.dre delete mode 100644 tools/nauty25r9_win/nautest2.c delete mode 100644 tools/nauty25r9_win/nautest2.dre delete mode 100644 tools/nauty25r9_win/nautest2a.ans delete mode 100644 tools/nauty25r9_win/nautest2b.ans delete mode 100644 tools/nauty25r9_win/nautest2c.ans delete mode 100644 tools/nauty25r9_win/nautesta.ans delete mode 100644 tools/nauty25r9_win/nautestb.ans delete mode 100644 tools/nauty25r9_win/nautestc.ans delete mode 100644 tools/nauty25r9_win/nauthread1.c delete mode 100644 tools/nauty25r9_win/nauthread2.c delete mode 100644 tools/nauty25r9_win/nautil.c delete mode 100644 tools/nauty25r9_win/nautil.o delete mode 100644 tools/nauty25r9_win/nautil1.o delete mode 100644 tools/nauty25r9_win/nautilW1.o delete mode 100644 tools/nauty25r9_win/nautinv.c delete mode 100644 tools/nauty25r9_win/nautinv.h delete mode 100644 tools/nauty25r9_win/nautinv.o delete mode 100644 tools/nauty25r9_win/nautinv1.o delete mode 100644 tools/nauty25r9_win/naututil-h.in delete mode 100644 tools/nauty25r9_win/naututil.c delete mode 100644 tools/nauty25r9_win/naututil.h delete mode 100644 tools/nauty25r9_win/naututil.o delete mode 100644 tools/nauty25r9_win/naututil1.o delete mode 100644 tools/nauty25r9_win/nauty-h.in delete mode 100644 tools/nauty25r9_win/nauty.a delete mode 100644 tools/nauty25r9_win/nauty.c delete mode 100644 tools/nauty25r9_win/nauty.h delete mode 100644 tools/nauty25r9_win/nauty.o delete mode 100644 tools/nauty25r9_win/nauty1.a delete mode 100644 tools/nauty25r9_win/nauty1.o delete mode 100644 tools/nauty25r9_win/nauty25r9.tar.gz delete mode 100644 tools/nauty25r9_win/nautyW1.o delete mode 100644 tools/nauty25r9_win/nautyex1.c delete mode 100644 tools/nauty25r9_win/nautyex10.c delete mode 100644 tools/nauty25r9_win/nautyex2.c delete mode 100644 tools/nauty25r9_win/nautyex3.c delete mode 100644 tools/nauty25r9_win/nautyex4.c delete mode 100644 tools/nauty25r9_win/nautyex5.c delete mode 100644 tools/nauty25r9_win/nautyex6.c delete mode 100644 tools/nauty25r9_win/nautyex7.c delete mode 100644 tools/nauty25r9_win/nautyex8.c delete mode 100644 tools/nauty25r9_win/nautyex9.c delete mode 100644 tools/nauty25r9_win/newedgeg.c delete mode 100644 tools/nauty25r9_win/newedgeg.exe delete mode 100644 tools/nauty25r9_win/nug25.pdf delete mode 100644 tools/nauty25r9_win/pickg.exe delete mode 100644 tools/nauty25r9_win/planarg.c delete mode 100644 tools/nauty25r9_win/planarg.exe delete mode 100644 tools/nauty25r9_win/planarity.c delete mode 100644 tools/nauty25r9_win/planarity.h delete mode 100644 tools/nauty25r9_win/ranlabg.c delete mode 100644 tools/nauty25r9_win/ranlabg.exe delete mode 100644 tools/nauty25r9_win/rng.c delete mode 100644 tools/nauty25r9_win/rng.h delete mode 100644 tools/nauty25r9_win/runalltests delete mode 100644 tools/nauty25r9_win/schreier.c delete mode 100644 tools/nauty25r9_win/schreier.h delete mode 100644 tools/nauty25r9_win/schreier.o delete mode 100644 tools/nauty25r9_win/schreier.txt delete mode 100644 tools/nauty25r9_win/schreierW.o delete mode 100644 tools/nauty25r9_win/shortg.c delete mode 100644 tools/nauty25r9_win/showg.c delete mode 100644 tools/nauty25r9_win/showg.exe delete mode 100644 tools/nauty25r9_win/sorttemplates.c delete mode 100644 tools/nauty25r9_win/splay.c delete mode 100644 tools/nauty25r9_win/subdivideg.c delete mode 100644 tools/nauty25r9_win/subdivideg.exe delete mode 100644 tools/nauty25r9_win/sumlines.c delete mode 100644 tools/nauty25r9_win/test.g6 delete mode 100644 tools/nauty25r9_win/test.graph6 delete mode 100644 tools/nauty25r9_win/testg.c delete mode 100644 tools/nauty25r9_win/traces.c delete mode 100644 tools/nauty25r9_win/traces.h delete mode 100644 tools/nauty25r9_win/traces.o delete mode 100644 tools/nauty25r9_win/watercluster2.c delete mode 100644 tools/nauty25r9_win/watercluster2.exe diff --git a/metaboblend/databases.py b/metaboblend/databases.py index d04c2e2..d5e13ef 100644 --- a/metaboblend/databases.py +++ b/metaboblend/databases.py @@ -1086,7 +1086,7 @@ def update_substructure_database(fn_hmdb, fn_db, n_min, n_max, records=None, met conn.close() -def create_isomorphism_database(db_out, pkls_out, max_n_substructures, max_atoms_available, path_geng=None, path_RI=None, debug=False): +def create_isomorphism_database(db_out, pkls_out, max_n_substructures, max_atoms_available, path_RI=None, debug=False): """ Generates a connectivity database containing sets of possible combinations of substructures; also generates PKL files containing the graphs required for building molecules from substructures. The connectivity database is @@ -1103,8 +1103,6 @@ def create_isomorphism_database(db_out, pkls_out, max_n_substructures, max_atoms :param max_atoms_available: The maximal number of atoms available (maximal number of edges per vertice) in each substructure for bonding. At least one atom must be available for bonding for a graph to be created. - :param path_geng: The path of geng, a tool for the generation of small non-isomorphic graphs. - :param path_RI: The path of RI, a tool for verifying subgraph isomorphism. :param debug: Debug print statements provide further information on how the function is generating the connectivity @@ -1139,8 +1137,8 @@ def create_isomorphism_database(db_out, pkls_out, max_n_substructures, max_atoms # get complete set of non-isomorphic graphs, using geng, from a distinct multipartite graph as input if debug: - print([path_geng, str(G.number_of_nodes()), "-d1", "-D2", "-q"]) # max valence for single atom of 2 - proc = subprocess.Popen([path_geng, str(len(G.nodes)), "-d1", "-D2", "-q"], stdout=subprocess.PIPE, + print(["geng", str(G.number_of_nodes()), "-d1", "-D2", "-q"]) # max valence for single atom of 2 + proc = subprocess.Popen(["geng", str(len(G.nodes)), "-d1", "-D2", "-q"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) geng_out, err = proc.communicate() diff --git a/tests/test_isomorphism_database.py b/tests/test_isomorphism_database.py index e8a89e7..c32abb1 100644 --- a/tests/test_isomorphism_database.py +++ b/tests/test_isomorphism_database.py @@ -37,23 +37,18 @@ def setUpClass(cls): pkg_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) if sys.platform == "win32" or sys.platform == "win64": - cls.path_geng = os.path.join(pkg_path, "tools", "nauty25r9_win", "geng") cls.path_ri = os.path.join(pkg_path, "tools", "RI_win", "RI3.6-release", "ri36") elif sys.platform == "darwin": - cls.path_geng = os.path.join(pkg_path, "tools", "nauty25r9_mac", "geng") cls.path_ri = os.path.join(pkg_path, "tools", "RI_mac", "RI3.6-release", "ri36") elif sys.platform == "linux2": if "bb" in "socket.gethostname": - cls.path_geng = os.path.join(pkg_path, "tools", "nauty25r9_unix", "geng") cls.path_ri = os.path.join(pkg_path, "tools", "RI_unix", "RI3.6-release", "ri36") else: - cls.path_geng = os.path.join(pkg_path, "tools", "nauty25r9_bb", "geng") cls.path_ri = os.path.join(pkg_path, "tools", "RI_bb", "RI3.6-release", "ri36") elif sys.platform == "linux": - cls.path_geng = os.path.join(pkg_path, "tools", "nauty25r9_unix", "geng") cls.path_ri = os.path.join(pkg_path, "tools", "RI_unix", "RI3.6-release", "ri36") zip_ref = zipfile.ZipFile(os.path.join(os.path.dirname(os.path.realpath(__file__)), @@ -68,7 +63,6 @@ def setUpClass(cls): to_test_result("pkls"), 3, # sizes [1, 2], # boxes - cls.path_geng, cls.path_ri ) diff --git a/tools/nauty25r9_mac/NRswitchg b/tools/nauty25r9_mac/NRswitchg deleted file mode 100644 index 8088fa5384273db7837e99563c1961cd872f7e0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138600 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ſ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 diff --git a/tools/nauty25r9_mac/NRswitchg.c b/tools/nauty25r9_mac/NRswitchg.c deleted file mode 100644 index 05fe71f..0000000 --- a/tools/nauty25r9_mac/NRswitchg.c +++ /dev/null @@ -1,198 +0,0 @@ -/* NRswitchg.c nauty version 2.4; B D McKay, Dec 2005 */ - -#define USAGE "NRswitchg [-lq] [infile [outfile]]" - -#define HELPTEXT \ -" For each v, complement the edges from N(v) to V(G)-N(v)-v.\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -l Canonically label outputs.\n\ - -q Suppress auxiliary information.\n" - -/*************************************************************************/ - -#include "gtools.h" - -/**************************************************************************/ - -void -NRswitch(graph *g, int m, int n, int v, graph *h) -/* h := g with N-R edge set complemented */ -{ - register int i,j; - register setword *gv,*gi,*hi; -#if MAXN - set Nset[MAXM]; - set Rset[MAXM]; -#else - DYNALLSTAT(set,Nset,Nset_sz); - DYNALLSTAT(set,Rset,Rset_sz); - DYNALLOC1(set,Nset,Nset_sz,m,"NRswitchg"); - DYNALLOC1(set,Rset,Rset_sz,m,"NRswitchg"); -#endif - - EMPTYSET(Rset,m); - for (i = 0; i < n; ++i) ADDELEMENT(Rset,i); - - gv = GRAPHROW(g,v,m); - - for (j = 0; j < m; ++j) - { - Nset[j] = gv[j]; - Rset[j] ^= gv[j]; - } - - FLIPELEMENT(Rset,v); - - gi = (setword*) g; - hi = (setword*) h; - - for (i = 0; i < n; ++i) - { - if (i == v) - for (j = 0; j < m; ++j) hi[j] = gi[j]; - else if (ISELEMENT(Nset,i)) - for (j = 0; j < m; ++j) hi[j] = gi[j] ^ Rset[j]; - else - for (j = 0; j < m; ++j) hi[j] = gi[j] ^ Nset[j]; - - gi += m; - hi += m; - } -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - boolean badargs,dolabel,quiet; - int j,m,n,v,argnum; - int codetype,outcode; - graph *g; - nauty_counter nin,nout; - char *arg,sw; - static graph *gq; - double t; -#if MAXN - graph gc[MAXN*MAXM],h[MAXN*MAXM]; -#else - DYNALLSTAT(graph,gc,gc_sz); - DYNALLSTAT(graph,h,h_sz); -#endif - - HELP; - - infilename = outfilename = NULL; - dolabel = quiet = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('l',dolabel) - else SWBOOLEAN('q',quiet) - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A NRswitchg"); - if (dolabel) fprintf(stderr," -l"); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - if (dolabel) nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = nout = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; -#if !MAXN - DYNALLOC2(graph,gc,gc_sz,n,m,"NRswitchg"); -#endif - for (v = 0; v < n; ++v) - { - NRswitch(g,m,n,v,gc); - gq = gc; - - if (dolabel) - { -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"compl"); -#endif - fcanonise(gq,m,n,h,NULL,FALSE); - gq = h; - } - if (outcode == SPARSE6) writes6(outfile,gq,m,n); - else writeg6(outfile,gq,m,n); - ++nout; - } - FREES(g); - } - t = CPUTIME - t; - - if (!quiet) - fprintf(stderr, - ">Z " COUNTER_FMT " graphs read from %s, " - COUNTER_FMT " written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_mac/README b/tools/nauty25r9_mac/README deleted file mode 100644 index cfb3c8a..0000000 --- a/tools/nauty25r9_mac/README +++ /dev/null @@ -1,123 +0,0 @@ -README file for nauty 2.5 - -Brendan McKay, bdm@cs.anu.edu.au -Adolfo Piperno, piperno@di.uniroma1.it - ------------------------------------------------------------- - -The most recent distribution of nauty and Traces can be found at -http://cs.anu.edu.au/~bdm/nauty and http://pallini.di.uniroma1.it . - -The manual nug25.pdf is available at that site and is also included -in the distribution package. - -Note that nauty and Traces are copyright but free to use for most -purposes. The details are in the file nauty.h. - -The code in the file traces.c is copyright to Adolfo Piperno. -The code in the file planarity.c (used by the planarg program) -is copyright to the Magma project. - ------------------------------------------------------------- - -INSTALLATION. - -See the manual for more information. - -If you have a working shell, and "make", you can run - ./configure -followed by - make -to compile nauty and Traces for your system. - -If that succeeds without problem, you will have have the -program dreadnaut ready to run. - -If you don't have a shell or make, manually edit the files nauty.h, -naututil.h and gtools.h as distributed. The parts between the lines -======= near the start are the main things to look at. After this -manual editing, you can use makefile.basic as a guide to compilation. - -Programs which use an older version of nauty need to be -recompiled (** not just relinked **). Make sure they define -the options structure using one of -DEFAULTOPTIONS_GRAPH -DEFAULTOPTIONS_SPARSEGRAPH -DEFAULTOPTIONS_DIGRAPH -DEFAULTOPTIONS_SPARSEDIGRAPH -DEFAULTOPTIONS_TRACES - ------------------------------------------------------------- - -TESTING. - -After compiling nauty successfully, it is recommended that you run -the included test programs. The simplest way is - make checks - ./runalltests - ------------------------------------------------------------- - -MAILING LIST. - -There is a mailing list for announcements and discussion about -nauty and related topics. You can subscribe at -http://mailman.anu.edu.au/mailman/listinfo/nauty - ------------------------------------------------------------- - -OTHER FILES IN THE PACKAGE. - -Also in the package (documentation at the start of each source file). - -sumlines.c - This is a program designed to digest the outputs from - multiple runs of a program (such as a computation split into multiple - parts). Lines matching given patterns can be counted and checked, - and numbers appearing in them can be accumulated. Instructions appear - in the source file. See the option GMP near the head of the program - before trying to compile. - -sorttemplates.c - Some carefully tuned generic quicksort procedures. - -bliss2dre.c - A program which reads one file in Bliss format and writes - it in dreadnaut format. - -blisstog.c - A program which reads one or more files in Bliss format - and writes all the graphs in sparse6 format. - ------------------------------------------------------------- - -Windows. - -For running nauty in Windows, Cygwin is recommended. - -If configure gives an error message similar to this: - can not guess host type: you must specify one -then try - ./configure --build=unknown - -If shortg gives an error something like "Input file -given twice" it means that the Windows sort program is -being found rather than the Cygwin sort program. Usually -this is a configuration error in Cygwin. - ------------------------------------------------------------- - -Making 32-bit executables on 64-bit Linux systems. - -(In bash or sh:) -CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 ./configure -make clean; make - -This requires 32-bit libraries to be available. On Ubuntu -they are called ia32-libs and libc6-dev-i386. - ------------------------------------------------------------- - -RECENT CHANGES. - -The big change in version 2.5 is the incorporation of Traces. - -See the file changes24-25.txt for a longer list. - -See the file README_24 for a list of older changes. diff --git a/tools/nauty25r9_mac/README_24 b/tools/nauty25r9_mac/README_24 deleted file mode 100644 index 4adec9e..0000000 --- a/tools/nauty25r9_mac/README_24 +++ /dev/null @@ -1,292 +0,0 @@ - -README file for nauty 2.4 - -Brendan McKay, bdm@cs.anu.edu.au - ------------------------------------------------------------- - -The most recent distribution of nauty can be found at -http://cs.anu.edu.au/~bdm/nauty . - -The manual nug.pdf is available at that site and is also included -in the distribution package. - -Note that nauty is copyright but free to use for most purposes. -The details are in the file nauty.h. - -The code in the file planarity.c (used by the planarg program) -is copyright to the Magma project. - ------------------------------------------------------------- - -INSTALLATION. - -The first step is to unpack the archive. On Unix-ish systems -you can use one of these commands: - - tar xzf nauty24.tar.gz -or - gunzip -c nauty24.tar.gz | tar xf - - -This will write all the files into the subdirectory nauty24. -Go to that directory. - -If you have a working shell, and make, you can run - ./configure -followed by - make all -to compile nauty for your system. - -If that succeeds without problem, you will have have the -program dreadnaut ready to run. - -If you have problems during compilation, it may be that the -configuration scripts are inadequate for your system. Usually it -is because of some missing system header, incompatible typedef, -or similar. Please send the details to the author. - -If you don't have a shell or make, manually edit the files nauty.h, -naututil.h and gtools.h as distributed. The parts between the lines -======= near the start are the main things to look at. After this -manual editing, you can use makefile as a guide to compilation. - -Programs which use an older version of nauty need to be -recompiled (** not just relinked **). Make sure they use the -DEFAULTOPTIONS_GRAPH or DEFAULTOPTIONS_SPARSEGRAPH macro to define -the fields of the options parameter. - -See below for compiling on a PC under DJGPP. - -If you are using Windows in an environment that needs Windows line -endings (which is a configuration option in Cygwin, for example), -then you might prefer to use nauty24.zip rather than -nauty24.tar.gz. - ------------------------------------------------------------- - -TESTING. - -After compiling nauty successfully, it is recommended that you run -the included test programs. The simplest way is - make checks - ------------------------------------------------------------- - -MAILING LIST. - -There is a mailing list for announcements and discussion about -nauty and related topics. You can subscribe at -http://dcsmail.anu.edu.au/cgi-bin/mailman/listinfo/nauty-list - ------------------------------------------------------------- - -OTHER FILES IN THE PACKAGE. - -A few additional goodies are included. - -sumlines.c - This is a program designed to digest the outputs from - multiple runs of a program (such as a computation split into multiple - parts). Lines matching given patterns can be counted and checked, - and numbers appearing in them can be accumulated. Instructions appear - in the source file. See the option GMP near the head of the program - before trying to compile. - -naugroup.h, naugroup.c - These define procedures for exhaustively - listing a group found by nauty. This is done in a space-efficient way. - A sample program appears in nautyex3.c, but so far there is no - complete documentation. - ------------------------------------------------------------- - -DJGPP. - -The Unix-like environment DJGPP can be used to run nauty and gtools on -DOS/Win computers. DJGPP is available at http://www.delorie.com/djgpp . -The program shortg does not work since DJGPP does not provide a working -pipe() system call. Using the bash shell is recommended. In DOS, -Windows NT and early Windows editions, you will need to convert all -long file names to the 8+3 limits. Thanks to Guenter Sterntenbrink -for helping with this. - -If configure gives an error message similar to this: - can not guess host type: you must specify one -then try - ./configure --host=i686 -or use i586 for Pentium 2. If all of those fail, try - ./configure --host=unknown - ------------------------------------------------------------- - -Making 32-bit executables on 64-bit Linux systems. - -(In bash or sh:) -CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 ./configure -make clean; make - -This requires the libraries ia32-libs and libc6-dev-i386. - ------------------------------------------------------------- - -RECENT CHANGES. - -Here we list substantive changes made since the first 2.2 release. - -Nov 16, 2002: Replaced rng.c after communication with Don Knuth. - The previous version had a bug (mine!) when there was no explicit - initialization done by the user. It appears the error had no - impact on nauty (which only uses rng.c for the "s" command in - dreadnaut, and for genrang, but both always initialize). - No change to the nauty version number but beta=2. - -Nov 18, 2000: Adjusted the makefile and countg/testg to work in - the DOS/Win environment DJGPPP (see the previous section). - -May 1, 2003: Fixed PRUNE feature of genbg. - -May 3, 2003: Added utility directg for making all orientations of graphs. - -Oct 4, 2003: Added options -a, -Z, -d, -z to genbg. Also, the -l - (canonical label) option now preserves the colouring. - -Nov 17, 2003: Renamed INFINITY to NAUTY_INFINITY since many C header - libraries define INFINITY. If INFINITY is not defined by - the system, you can still use it. - -Nov 19, 2003: Added program biplabg to relabel bipartite graphs with the - colour classes contiguous. - -Feb 13, 2004: Revised C options for solaris on pentium - -Mar 1, 2004: dretog knows !...\n type of comment - -May 7, 2004: geng can be called from another program (see instructions - in geng.c.) - -May 29, 2004: added definition of SETWORD_FORMAT used to write a setword - with printf( ) - see nauty.h - -Sep 11, 2004: Added utility multig for making multigraphs based on - provided simple graphs; similar to directg - -Oct 16, 2004: To avoid problems caused by system-dependent handling of - external declarations, nauty() no longer accepts NULL as - the value of options.dispatch. To get the previous - behaviour, use the value &graph_dispatch. This will be - handled automatically if programs calling nauty use - DEFAULTOPTIONS to declare options and are recompiled. - Even better is to use DEFAULTOPTIONS_GRAPH. - -May 5, 2005: A bug in the writing of sparse6 was found and fixed. - This is procedure ntos6() in gtools.c, which is invoked - by writes6(). The bug could only happen if all the - following are true: - 1. n = 2, 4, 8 or 16 (for n=2, only if the graph has loops) - 2. Vertex n-2 has non-zero degree, but vertex n-1 has - zero degree. - These conditions never happen for graphs generated by - geng or genbg, nor for regular graphs or connected graphs, - nor for graphs canonically labelled by nauty (except maybe - with some unusual vertex colouring or invariant). - If the conditions do happen, the buggy routine may - (with some probability) add a spurious loop to vertex n-1. - - In the package is a utility checks6: - - Usage: checks6 [-w] [infile [outfile]] - Check a file of graphs, optionally write corrected version - -w Write corrected graphs (default is not to write) - -------now we start version 2.3 (not released) and 2.4------ - -Nov 10, 2004: Use faster routine getc_unlocked() for reading graphs if - available. It can make a surprising difference. - -Nov 17, 2004: If putenv() or setenv() are available, we set LC_COLLATE to - "C" before executing "sort" in shortg. This should alleviate - collation issues with sort. However, note that many - utilities use the locale these days so you are advised to - have LC_COLLATE defined to be "C" always when you are dealing - with files of graphs. - - Six counters in statsblk became "unsigned long" instead of - "long". nauty doesn't actually use these, but we might as - well give them twice as long before they overflow. - -Nov 24, 2004: Made geng faster for generating trees. The output labelling - may be different from before. A very much faster tree - generator is in the works. - -Jan 17, 2005: Added two items to dispatch vectors: - init : used for initialising something at the start - cleanup : used for doing something at the end, such as - freeing space allocated by init() - See the manual for calling sequences. - -May 20, 2005: Update graph6 and sparse6 formats to allow much large sizes. - The limit is now 68719476735 vertices (best of luck getting - close to that!). - -Nov 12, 2005: Changed NAUTY_INFINITY to 2^30+2 in BIGNAUTY case - -2006 various: Procedures for sparse graphs implemented. - - New program planarg to test for planarity and find - planar embeddings: planarg -help for details. - The planarity code was written by Paulette Lieby for the - Magma project and used with permission. - - labelg got -S to use sparse graphs. - genbg -N changed to genbg -n (only Gordon uses this). - genrang gained -R switch for regular graphs in text format. - gtools.c has code for reading and writing planarcode. - listg got a compile time option to select "Matrix" or - "array" for Maple output. - pickg/countg got -T for counting triangles - - Better configuration for MacOSX. - -Nov 22, 2006: Removed usertcellproc from options. Greater functionality - is now available using the new targetcell field in the - dispatch vector. The u8 command has gone from dreadnaut. - - Changed bestcell to targetcell in dispatch vector. - -Nov 29, 2006: Added extraoptions field (currently unused) to optionblk - -Dec 9, 2006: Added an invariant adjacencies_sg(), recommended for digraphs - when using sparse representation. - -Dec 10, 2006: Remove BIGNAUTY, whose usefulness has passed. Now the types - shortish and permutation are synonymous with int always. - The limit on the number of vertices is 2^30 unless int - has only 16 bits (still any of them around?) in which - case it is 2^15-3. Programs previously linked with - files like nautyB.o can now be linked with nauty.o. - Alternatively, "make bigs" will create files like - nautyB.o by copying. - -June 26, 2007: Fixed an error in listg -s reported by Evan Heidtmann. - -July 12, 2007: Added -f option to directg. - -Aug 14, 2007: Added -i,-I,-K options to shortg, parallel to labelg. - Since -k is used in labelg in place of -I, changed labelg - to use -I also, with -k remaining as an undocumented - compatibility feature. - -Aug-Sep 2007: Minor things: - * naututil-h.in now defines CPUTIME=0.0 as a last resort - * gtools.c now implements EDGECODE (not used anywhere yet) - * fixed definition of SG_FREE in nausparse.h (not used) - * geng favours space over time for n > 28 - -Oct 14, 2007: Added -T switch to shortg to specify scratch directory. - -Mar 3, 2008: Fixed makefile for compilation in a 64-bit environment. - -Oct 11, 2008: Added -l and -m to genrang - -Nov 29, 2008: Slightly improved -c for geng and genbg - Added tournament generator gentourng. - -Mar 3, 2009: Added -V to directg. diff --git a/tools/nauty25r9_mac/addedgeg b/tools/nauty25r9_mac/addedgeg deleted file mode 100644 index a7d7f5e6a4dbe20c90e966d6549138511d546ca9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152640 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 cOWe72@TjMMIzYq+LOp~S4|TCU= 0; ) - { - gv1 = GRAPHROW(g,v1,m); - for (v2 = -1; (v2 = nextelement(gv1,m,v2)) >= 0; ) - { - if (v2 == v) continue; - gv2 = GRAPHROW(g,v2,m); - for (v3 = -1; (v3 = nextelement(gv2,m,v3)) >= 0; ) - if (v3 != v && v3 != v1) dist[v3] = 0; - } - } -} - -/*************************************************************************/ - -static void -no4path(graph *g, int m, int n, int v, int *dist) -/* For each i, set dist[i]=0 if there is a 4-path from v to i */ -{ - set *gv,*gv1,*gv2,*gv3; - int v1,v2,v3,v4; - - gv = GRAPHROW(g,v,m); - for (v1 = -1; (v1 = nextelement(gv,m,v1)) >= 0; ) - { - gv1 = GRAPHROW(g,v1,m); - for (v2 = -1; (v2 = nextelement(gv1,m,v2)) >= 0; ) - { - if (v2 == v) continue; - gv2 = GRAPHROW(g,v2,m); - for (v3 = -1; (v3 = nextelement(gv2,m,v3)) >= 0; ) - { - if (v3 == v || v3 == v1) continue; - gv3 = GRAPHROW(g,v3,m); - for (v4 = -1; (v4 = nextelement(gv3,m,v4)) >= 0; ) - if (v4 != v && v4 != v1 && v4 != v2) dist[v4] = 0; - } - } - } -} - -/*************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - boolean badargs,dolabel,quiet,Dswitch; - boolean bswitch,tswitch,fswitch,Fswitch,zswitch; - int mincycle; - int i,j,m,n,v,w,argnum; - int codetype,outcode; - graph *g,*gq; - nauty_counter nin,nout; - char *arg,sw; - setword *gv,*gw; - int maxdeg,actmaxdeg,degv; - double t; -#if MAXN - graph h[MAXN*MAXM]; - int deg[MAXN],dist[MAXN]; - boolean okdist[MAXN+1]; -#else - DYNALLSTAT(graph,h,h_sz); - DYNALLSTAT(int,deg,deg_sz); - DYNALLSTAT(boolean,okdist,okdist_sz); - DYNALLSTAT(int,dist,dist_sz); -#endif - - HELP; - - infilename = outfilename = NULL; - Dswitch = dolabel = quiet = zswitch = FALSE; - bswitch = tswitch = fswitch = Fswitch = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('l',dolabel) - else SWBOOLEAN('q',quiet) - else SWBOOLEAN('b',bswitch) - else SWBOOLEAN('t',tswitch) - else SWBOOLEAN('f',fswitch) - else SWBOOLEAN('F',Fswitch) - else SWINT('z',zswitch,mincycle,">E addedgeg -z") - else SWINT('D',Dswitch,maxdeg,">E addedgeg -D") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A addedgeg"); - if (dolabel) fprintf(stderr," -l"); - if (Dswitch) fprintf(stderr," -D%d",maxdeg); - if (bswitch || tswitch || fswitch || Fswitch || zswitch) - { - fprintf(stderr," -"); - if (bswitch) fprintf(stderr,"b"); - if (tswitch) fprintf(stderr,"t"); - if (fswitch) fprintf(stderr,"f"); - if (Fswitch) fprintf(stderr,"F"); - if (zswitch) fprintf(stderr,"z%d",mincycle); - } - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - if (!Dswitch) maxdeg = NAUTY_INFINITY; - - if (dolabel) nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = nout = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - -#if !MAXN - DYNALLOC1(int,deg,deg_sz,n,"addedgeg"); - DYNALLOC1(boolean,okdist,okdist_sz,n+1,"addedgeg"); - DYNALLOC1(int,dist,dist_sz,n,"addedgeg"); -#endif - - actmaxdeg = n; - for (v = 0, gv = g; v < n; ++v, gv += m) - { - degv = 0; - for (i = 0; i < m; ++i) - degv += POPCOUNT(gv[i]); - if (degv < actmaxdeg) actmaxdeg = degv; - deg[v] = degv; - } - - if (actmaxdeg > maxdeg) continue; - - okdist[0] = okdist[1] = FALSE; - for (i = 2; i <= n; ++i) okdist[i] = TRUE; - - if (bswitch) - for (i = 2; i < n; i += 2) okdist[i] = FALSE; - - if (tswitch && n >= 3) okdist[2] = FALSE; - if (fswitch && n >= 4) okdist[3] = FALSE; - if (Fswitch && n >= 5) okdist[4] = FALSE; - if (zswitch) - for (i = 2; i < mincycle-1 && i < n; ++i) okdist[i] = FALSE; - - for (v = 0, gv = g; v < n-1; ++v, gv += m) - { - if (deg[v] >= maxdeg) continue; - - find_dist(g,m,n,v,dist); - - for (w = v+1; w < n; ++w) - dist[w] = okdist[dist[w]] && (deg[w] < maxdeg); - - if (fswitch) no3path(g,m,n,v,dist); - if (Fswitch) no4path(g,m,n,v,dist); - - for (w = v+1; w < n; ++w) - { - if (!dist[w]) continue; - - gw = GRAPHROW(g,w,m); - ADDELEMENT(gv,w); - ADDELEMENT(gw,v); - gq = g; - - if (dolabel) - { -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"addedgeg"); -#endif - fcanonise(g,m,n,h,NULL,FALSE); /*FIXME (loops)*/ - gq = h; - } - if (outcode == SPARSE6) writes6(outfile,gq,m,n); - else writeg6(outfile,gq,m,n); - ++nout; - DELELEMENT(gv,w); - DELELEMENT(gw,v); - } - } - FREES(g); - } - t = CPUTIME - t; - -#if LONG_LONG_COUNTERS - if (!quiet) - fprintf(stderr, - ">Z %lld graphs read from %s, %lld written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); -#else - if (!quiet) - fprintf(stderr, - ">Z %ld graphs read from %s, %ld written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); -#endif - - exit(0); -} diff --git a/tools/nauty25r9_mac/amtog b/tools/nauty25r9_mac/amtog deleted file mode 100644 index 16b422d9bb85937c2cb8692e4f4e375fd4a23a36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117680 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

CW5ppsQ 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 diff --git a/tools/nauty25r9_mac/amtog.c b/tools/nauty25r9_mac/amtog.c deleted file mode 100644 index eb35da9..0000000 --- a/tools/nauty25r9_mac/amtog.c +++ /dev/null @@ -1,255 +0,0 @@ -/* amtog.c version 1.0; B D McKay, Jan 1997. */ - -#define USAGE "amtog [-n#sghq] [infile [outfile]]" - -#define HELPTEXT \ -" Read graphs in matrix format.\n\ -\n\ - -n# Set the initial graph order to # (no default).\n\ - This can be overridden in the input.\n\ - -g Write the output in graph6 format (default).\n\ - -s Write the output in sparse6 format.\n\ - -h Write a header (according to -g or -s).\n\ - -q Suppress auxiliary information.\n\ -\n\ - Input consists of a sequence of commands restricted to:\n\ -\n\ - n=# set number of vertices (no default)\n\ - The = is optional.\n\ - m Matrix to follow (01 any spacing or no spacing)\n\ - An 'm' is also assumed if 0 or 1 is encountered.\n\ - M Complement of matrix to follow (as m)\n\ - t Upper triangle of matrix to follow, row by row\n\ - excluding the diagonal. (01 in any or no spacing)\n\ - T Complement of upper trangle to follow (as t)\n\ - q exit (optional)\n" - -/*************************************************************************/ - -#include "gtools.h" /* which includes nauty.h and stdio.h */ - -extern int labelorg; - -/**************************************************************************/ -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - int m,n; - int argnum,i,j,outcode,val; - char *arg,sw; - boolean badargs; - boolean nswitch,sswitch,gswitch,hswitch,qswitch; - boolean loop,unsymm,compl,triangle; - char *infilename,*outfilename; - FILE *infile,*outfile; - nauty_counter nin; - char s[10]; -#if MAXN - graph g[MAXN*MAXM]; -#else - DYNALLSTAT(graph,g,g_sz); -#endif - - HELP; - - sswitch = gswitch = FALSE; - qswitch = nswitch = hswitch = FALSE; - infilename = outfilename = NULL; - n = -1; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('s',sswitch) - else SWBOOLEAN('g',gswitch) - else SWBOOLEAN('h',hswitch) - else SWBOOLEAN('q',qswitch) - else SWINT('n',nswitch,n,">E amtog -n") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (sswitch && gswitch) - gt_abort(">E amtog: -s and -g are incompatible\n"); - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!infilename || infilename[0] == '-') - { - infilename = "stdin"; - infile = stdin; - } - else if ((infile = fopen(infilename,"r")) == NULL) - { - fprintf(stderr,"Can't open input file %s\n",infilename); - gt_abort(NULL); - } - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (sswitch) outcode = SPARSE6; - else outcode = GRAPH6; - - if (hswitch) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - -#if MAXN - if (nswitch && n > MAXN) - { - gt_abort(">E amtog: value of -n too large\n"); - exit(2); - } -#else - if (nswitch) - { - m = (n + WORDSIZE - 1) / WORDSIZE; - DYNALLOC2(graph,g,g_sz,n,m,"amtog"); - } -#endif - - - /* perform scanning required */ - - nin = 0; - while (fscanf(infile,"%1s",s) == 1) - { - if (s[0] == 'n') - { - if (fscanf(infile,"=%d",&n) != 1) - { - gt_abort(">E amtog: invalid n=# command\n"); - exit(2); - } - m = (n + WORDSIZE - 1) / WORDSIZE; -#if MAXN - if (n < 1 || n > MAXN || m > MAXM) - gt_abort(">E amtog: n<0 or n,m too big\n"); -#else - DYNALLOC2(graph,g,g_sz,n,m,"amtog"); -#endif - } - else if (s[0] == 'm' || s[0] == 'M' || s[0] == 't' || - s[0] == 'T' || s[0] == '0' || s[0] == '1') - { - if (n < 0) - { - fprintf(stderr, - ">E amtog: matrix found before n is defined\n"); - exit(2); - } - if (s[0] == '0' || s[0] == '1') ungetc(s[0],infile); - m = (n + WORDSIZE - 1) / WORDSIZE; - - EMPTYSET(g,m*(size_t)n); - - loop = unsymm = FALSE; - triangle = (s[0] == 't') || (s[0] == 'T'); - compl = (s[0] == 'M') || (s[0] == 'T'); - - ++nin; - for (i = 0; i < n; ++i) - for (j = (triangle ? i+1 : 0); j < n; ++j) - { - if (fscanf(infile,"%1s",s) != 1) - { - fprintf(stderr,">E amtog: incomplete matrix\n"); - ABORT(">E amtog"); - } - if (s[0] == '0' || s[0] == '1') - { - if (i == j) - { - if (s[0] == '1') loop = TRUE; - } - else - { - val = compl ^ (s[0] == '1'); - if (val == 1) - { - if (triangle) - { - ADDELEMENT(GRAPHROW(g,i,m),j); - ADDELEMENT(GRAPHROW(g,j,m),i); - } - else - { - if (j < i && !ISELEMENT(GRAPHROW(g,j,m),i)) - unsymm = TRUE; - ADDELEMENT(GRAPHROW(g,i,m),j); - } - } - else if (j < i && ISELEMENT(GRAPHROW(g,j,m),i)) - unsymm = TRUE; - } - } - else - { - fprintf(stderr, - ">E amtog: illegal character in matrix: \"%c\"\n", - s[0]); - exit(2); - } - } - - if (loop) fprintf(stderr, - ">E amtog: warning, loop in graph " COUNTER_FMT "\n",nin); - - if (unsymm) fprintf(stderr, - ">E amtog: warning, graph " - COUNTER_FMT " is unsymmetric\n",nin); - - if (outcode == SPARSE6) writes6(outfile,g,m,n); - else writeg6(outfile,g,m,n); - } - else if (s[0] == 'q') - { - exit(0); - } - else - { - fprintf(stderr,">E amtog: invalid command \"%c\"\n",s[0]); - exit(2); - } - } - - if (!qswitch) - fprintf(stderr,">Z " COUNTER_FMT " graphs converted from %s to %s.\n", - nin,infilename,outfilename); - - exit(0); -} diff --git a/tools/nauty25r9_mac/biplabg b/tools/nauty25r9_mac/biplabg deleted file mode 100644 index c59094fb6e16a5711029cd1ecc8c4bc412799fc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123912 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 Mp&!>c=9td^2Do=+yZ`_I diff --git a/tools/nauty25r9_mac/biplabg.c b/tools/nauty25r9_mac/biplabg.c deleted file mode 100644 index 67bc33e..0000000 --- a/tools/nauty25r9_mac/biplabg.c +++ /dev/null @@ -1,168 +0,0 @@ -/* biplabg.c version 1.1; B D McKay, Nov 10, 2009. */ - -#define USAGE "biplabg [-q] [infile [outfile]]" - -#define HELPTEXT \ -" Label bipartite graphs so that the colour classes are contiguous.\n\ - The first vertex of each component is assigned the first colour.\n\ - Vertices in each colour class have the same relative order as before.\n\ - Non-bipartite graphs are rejected.\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -q Suppress auxiliary information.\n" - -/*************************************************************************/ - -#include "gtools.h" -#include "gutils.h" - -/**************************************************************************/ - -static boolean -biplabel(graph *g, int m, int n, graph *h) -/* h := bipartite labelling of g; else return FALSE */ -{ - int i,j; -#if MAXN - int colour[MAXN]; - int lab[MAXN]; -#else - DYNALLSTAT(int,colour,colour_sz); - DYNALLSTAT(int,lab,lab_sz); - - DYNALLOC1(int,colour,colour_sz,n,"biplabg"); - DYNALLOC1(int,lab,lab_sz,n,"biplabg"); -#endif - - if (!twocolouring(g,colour,m,n)) return FALSE; - - j = 0; - for (i = 0; i < n; ++i) if (colour[i] == 0) lab[j++] = i; - for (i = 0; i < n; ++i) if (colour[i] == 1) lab[j++] = i; - - updatecan(g,h,lab,0,m,n); - - return TRUE; -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - boolean badargs,quiet; - int j,m,n,argnum; - int codetype,outcode; - graph *g; - nauty_counter nin,nout; - char *arg,sw; - double t; -#if MAXN - graph h[MAXN*MAXM]; -#else - DYNALLSTAT(graph,h,h_sz); -#endif - - HELP; - - infilename = outfilename = NULL; - quiet = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('q',quiet) - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A biplabg"); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nautil_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = nout = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"biplabg"); -#endif - if (biplabel(g,m,n,h)) - { - ++nout; - if (outcode == SPARSE6) writes6(outfile,h,m,n); - else writeg6(outfile,h,m,n); - } - FREES(g); - } - t = CPUTIME - t; - - if (!quiet) - fprintf(stderr, - ">Z " COUNTER_FMT " graphs read from %s; " - COUNTER_FMT " written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_mac/bliss2dre.c b/tools/nauty25r9_mac/bliss2dre.c deleted file mode 100644 index 4d1e8fb..0000000 --- a/tools/nauty25r9_mac/bliss2dre.c +++ /dev/null @@ -1,161 +0,0 @@ -#include -#include -/* Reads a graph in Bliss format from stdin and writes it in dreadnaut - * format to stdout. If there is an argument, it is written to the - * output before the graph. If there are two arguments, they are - * written to the output before and after the graph. - */ - -typedef struct -{ - int v,w; -} vpair; - -int comparedge(const void *p1, const void *p2) -{ - vpair *e1,*e2; - - e1 = (vpair*)p1; - e2 = (vpair*)p2; - if (e1->v < e2->v) return -1; - else if (e1->v > e2->v) return 1; - else if (e1->w < e2->w) return -1; - else if (e1->w > e2->w) return 1; - else return 0; -} - -static int -nextchar(void) -{ - char s[2]; - - if (scanf("%1s",s) != 1) return EOF; - else return s[0]; -} - -int -main(int argc, char *argv[]) -{ - int n,c; - unsigned long ne,j; - vpair *elist,*vlist; - int haven; - int i,v,w; - int haveptn; - - haven = 0; - j = 0; - while ((c = nextchar()) >= 0) - { - switch (c) - { - case 'c': - putchar('"'); - while ((c = getchar()) != '\n' && c != EOF) putchar(c); - printf("\\n\"\n"); - break; - - case 'p': - if (haven) - { - fprintf(stderr,"Duplicate p line\n"); - exit(1); - } - if (scanf(" edge %d %lu",&n,&ne) != 2) - { - fprintf(stderr,"Bad p line\n"); - exit(1); - } - if ((elist = (vpair*)malloc(ne*sizeof(vpair))) == NULL - || (vlist = (vpair*)malloc(n*sizeof(vpair))) == NULL) - { - fprintf(stderr,"Malloc failed\n"); - exit(1); - } - haven = 1; - for (i = 0; i < n; ++i) - { - vlist[i].v = 0; /* default colour */ - vlist[i].w = i+1; - } - break; - - case 'n': - if (!haven) - { - fprintf(stderr,"Missing p line\n"); - exit(1); - } - if (scanf("%d%d",&w,&v) != 2 || w < 1 || w > n) - { - fprintf(stderr,"Bad n line\n"); - exit(1); - } - vlist[w-1].v = v; - break; - - case 'e': - if (!haven || j == ne) - { - fprintf(stderr,"Missing p line or too many e lines\n"); - exit(1); - } - if (scanf("%d%d",&v,&w) != 2 || v < 1 || w < 1 || v > n || w > n) - { - fprintf(stderr,"Bad e line\n"); - exit(1); - } - elist[j].v = v; elist[j].w = w; - ++j; - break; - - default: - fprintf(stderr,"Unknown line %c\n",c); - exit(1); - } - } - - if (j != ne) - { - fprintf(stderr,"Wrong number of e lines\n"); - exit(1); - } - - if (argc > 1) printf("%s\n",argv[1]); - - printf("$=1 n=%d g\n",n); - qsort(elist,ne,sizeof(vpair),comparedge); - - v = -1; - for (j = 0; j < ne; ++j) - { - if (elist[j].v != v) - { - v = elist[j].v; - if (j > 0) printf("\n"); - printf("%d:",v); - } - printf(" %d",elist[j].w); - } - printf(".\n"); - - qsort(vlist,n,sizeof(vpair),comparedge); - for (i = 1; i < n; ++i) - if (vlist[i].v != vlist[i-1].v) break; - if (i < n) - { - printf("f=["); - for (i = 0; i < n; ++i) - { - if (i > 0 && vlist[i].v != vlist[i-1].v) - printf("\n |"); - printf(" %d",vlist[i].w); - } - printf("]\n"); - } - - printf("$$\n"); - - if (argc > 2) printf("%s\n",argv[2]); - return 0; -} diff --git a/tools/nauty25r9_mac/blisstog.c b/tools/nauty25r9_mac/blisstog.c deleted file mode 100644 index d7e0a6a..0000000 --- a/tools/nauty25r9_mac/blisstog.c +++ /dev/null @@ -1,194 +0,0 @@ -/* blisstog.c version 1.0; B D McKay, Sep 2012. */ - -#define USAGE "blisstog [infile]*" - -#define HELPTEXT \ -" Read files of graphs in Bliss (Dimacs) format and write\n\ - them to stdout in sparse6 format.\n" - -#define ZCAT "gunzip -c" /* name of zcat command (might be "gunzip -c") */ - -/*************************************************************************/ - -#include "gtools.h" - -typedef struct -{ - int v,w; -} vpair; - -static int -nextchar(FILE *f) -{ - char s[2]; - - if (fscanf(f,"%1s",s) != 1) return EOF; - else return s[0]; -} - -static boolean -readblissgraph(FILE *f, sparsegraph *g) -/* Reads a graph from Bliss format into a sparse graph */ -{ - int n,c; - unsigned long ne,j; - int haven; - int i,v,w; - int haveptn; - DYNALLSTAT(vpair,elist,elist_sz); - - haven = 0; - j = 0; - while ((c = nextchar(f)) >= 0) - { - switch (c) - { - case 'c': - while ((c = getc(f)) != '\n' && c != EOF) {} - break; - - case 'p': - if (haven) - { - fprintf(stderr,"Duplicate p line\n"); - exit(1); - } - if (fscanf(f," edge %d %lu",&n,&ne) != 2) - { - fprintf(stderr,"Bad p line\n"); - return FALSE; - } - haven = 1; - DYNALLOC1(vpair,elist,elist_sz,ne,"Alloc vpair"); - break; - - case 'n': - if (!haven) - { - fprintf(stderr,"Missing p line\n"); - return FALSE; - } - if (fscanf(f,"%d%d",&w,&v) != 2 || w < 1 || w > n) - { - fprintf(stderr,"Bad n line\n"); - return FALSE; - } - break; - - case 'e': - if (!haven || j == ne) - { - fprintf(stderr,"Missing p line or too many e lines\n"); - return FALSE; - } - if (fscanf(f,"%d%d",&v,&w) != 2 || v < 1 || w < 1 || v > n || w > n) - { - fprintf(stderr,"Bad e line\n"); - return FALSE; - } - elist[j].v = v-1; elist[j].w = w-1; - ++j; - break; - - default: - fprintf(stderr,"Unknown line %c\n",c); - return FALSE; - } - } - - if (j != ne) - { - fprintf(stderr,"Wrong number of e lines\n"); - exit(1); - } - - SG_ALLOC(*g,n,2*ne,"SG_ALLOC"); - g->nv = n; - g->nde = 2*ne; - - for (i = 0; i < n; ++i) g->d[i] = 0; - for (j = 0; j < ne; ++j) - { - ++(g->d[elist[j].v]); - ++(g->d[elist[j].w]); - } - g->v[0] = 0; - for (i = 1; i < n; ++i) g->v[i] = g->v[i-1] + g->d[i-1]; - for (i = 0; i < n; ++i) g->d[i] = 0; - - for (j = 0; j < ne; ++j) - { - v = elist[j].v; - w = elist[j].w; - g->e[g->v[v]+(g->d[v])++] = w; - g->e[g->v[w]+(g->d[w])++] = v; - } - - return TRUE; -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - FILE *infile; - int j; - SG_DECL(g); - size_t flen; - boolean ispipe; - char zcmd[515]; - - HELP; - - if (argc == 1) - { - if (!readblissgraph(stdin,&g)) - { - fprintf(stderr,">E Bliss error in file %s\n","stdin"); - gt_abort(NULL); - } - else - writes6_sg(stdout,&g); - } - else - { - for (j = 1; j < argc; ++j) - { - flen = strlen(argv[j]); - if (flen >= 3 && strcmp(argv[j]+flen-3,".gz") == 0) - { - sprintf(zcmd,"%s \"%s\"",ZCAT,argv[j]); - if ((infile = popen(zcmd,"r")) == NULL) - { - fprintf(stderr, - ">E blisstog: cannot open zcat pipe for \"%s\"\n", - argv[j]); - gt_abort(NULL); - } - ispipe = TRUE; - } - else - { - if ((infile = fopen(argv[j],"r")) == NULL) - { - fprintf(stderr,">E Can't open file %s\n",argv[j]); - gt_abort(NULL); - } - ispipe = FALSE; - } - - if (!readblissgraph(infile,&g)) - { - fprintf(stderr,">E Bliss error in file %s\n",argv[j]); - gt_abort(NULL); - } - else - writes6_sg(stdout,&g); - - if (ispipe) pclose(infile); else fclose(infile); - } - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/callgeng.c b/tools/nauty25r9_mac/callgeng.c deleted file mode 100644 index cff2607..0000000 --- a/tools/nauty25r9_mac/callgeng.c +++ /dev/null @@ -1,47 +0,0 @@ -/* This is a sample of how to call geng as a procedure rather than - * running it as a separate process. The basic idea is to construct - * an argument list for geng's main() function. At compile time, - * assign a name to the macros OUTPROC and GENG_MAIN. A typical - * Unix-style compilation command would be: - gcc -o callgeng -O3 -DMAXN=32 -DOUTPROC=myoutproc -DGENG_MAIN=geng_main \ - callgeng.c geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o rng.o - */ - -#include "gtools.h" - -static unsigned long counter; - -void -OUTPROC(FILE *outfile, graph *g, int n) -{ - /* This will be called for each graph. */ - - ++counter; -} - - -int -main(int argc, char *argv[]) -{ - int geng_argc; - char *geng_argv[6]; - - /* Set up geng argument list. The 0-th argument is the command name. - * There must be a NULL at the end. This example is for connected - * bipartite graphs of order 10 and maximum degree at most 4. */ - - geng_argv[0] = "geng"; - geng_argv[1] = "-q"; - geng_argv[2] = "-cb"; - geng_argv[3] = "-D4"; - geng_argv[4] = "10"; - geng_argv[5] = NULL; - geng_argc = 5; - - counter = 0; - GENG_MAIN(geng_argc,geng_argv); - - printf("Number of graphs = %lu.\n",counter); - - return 0; -} diff --git a/tools/nauty25r9_mac/catg b/tools/nauty25r9_mac/catg deleted file mode 100644 index 9f9ccaf003a0ee3dd0a561a6fb5450b77a38ad8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36584 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 diff --git a/tools/nauty25r9_mac/catg.c b/tools/nauty25r9_mac/catg.c deleted file mode 100644 index 25bbc2f..0000000 --- a/tools/nauty25r9_mac/catg.c +++ /dev/null @@ -1,175 +0,0 @@ -/* catg.c version 1.2; B D McKay, Mar 14 2011 */ - -#define USAGE "catg [-xv] [infile]..." - -#define HELPTEXT \ -" Copy files to stdout with all but the first header removed.\n\ -\n\ - -x Don't write a header.\n\ - In the absence of -x, a header is written if\n\ - there is one in the first input file.\n\ -\n\ - -v Summarize to stderr.\n" - -#include "gtools.h" - -/***********************************************************************/ - -static FILE* -openfile_head(char *filename, char **header) -/* Open the file for reading and return a FILE*. If open fails, or - the header is malformed, write a message and return NULL. Set - *header to point to the header string (statically allocated). - A filename of NULL or "-" means stdin. */ -{ - int c,i; - char *actname; - FILE *f; - DYNALLSTAT(char,head,head_sz); - - if (filename == NULL || strcmp(filename,"-") == 0) - { - f = stdin; - actname = "stdin"; - } - else - { - f = fopen(filename,"r"); - actname = filename; - } - - if (f == NULL) - { - fprintf(stderr,">E catg: can't open file %s\n",actname); - return NULL; - } - - DYNALLOC1(char,head,head_sz,100,"catg"); - - c = getc(f); - if (c == '>') - { - i = 0; - head[i++] = c; - - c = getc(f); - if (c != '>') - { - fprintf(stderr,">E catg: bad header in %s\n",actname); - fclose(f); - return NULL; - } - head[i++] = c; - - do - { - c = getc(f); - if (c == EOF) - { - fprintf(stderr,">E catg: bad header in %s\n",actname); - fclose(f); - return NULL; - } - - if (i >= head_sz-1) - DYNREALLOC(char,head,head_sz,head_sz+100,"catg"); - head[i++] = c; - } - while (c != '<' || head[i-2] != '<'); - - head[i] = '\0'; - } - else - { - ungetc(c,f); - head[0] = '\0'; - } - - *header = head; - - return f; -} - -/***********************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*head; - FILE *infile; - int nfiles,i,j; - char *arg,sw; - boolean vswitch,xswitch; - boolean badargs; - char buff[1024]; - size_t nr; - DYNALLSTAT(char*,filename,filename_sz); - - HELP; - - DYNALLOC1(char*,filename,filename_sz,200,"catg"); - - xswitch = vswitch = FALSE; - - nfiles = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('v',vswitch) - else SWBOOLEAN('x',xswitch) - else badargs = TRUE; - } - } - else - { - if (nfiles >= filename_sz) - DYNREALLOC(char*,filename,filename_sz, - filename_sz+200,"catg"); - filename[nfiles++] = arg; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - for (i = 0; i < (nfiles == 0 ? 1 : nfiles); ++i) - { - infilename = (nfiles == 0 ? NULL : filename[i]); - infile = openfile_head(infilename,&head); - if (infile == NULL) ABORT("catg"); - - if (i == 0 && !xswitch) fprintf(stdout,"%s",head); - - while ((nr = fread(buff,1,1024,infile)) > 0) - { - fwrite(buff,1,nr,stdout); - if (ferror(stdout)) - { - fprintf(stderr,">E catg: error in writing to stdout\n"); - ABORT("catg"); - } - } - if (ferror(infile)) - { - fprintf(stderr,">E catg: error in reading from %s\n", - infilename == NULL ? "stdin" : infilename); - ABORT("catg"); - } - fclose(infile); - } - - if (vswitch) { } - - exit(0); -} diff --git a/tools/nauty25r9_mac/changes24-25.txt b/tools/nauty25r9_mac/changes24-25.txt deleted file mode 100644 index 6a55f1d..0000000 --- a/tools/nauty25r9_mac/changes24-25.txt +++ /dev/null @@ -1,122 +0,0 @@ - -Changes from nauty 2.4 to nauty 2.5 ------------------------------------ - -* Add Traces. The main files are traces.h and traces.c, but - many changes were made to dreadnaut.c and nausparse.c also. - -* Allow thread-safe storage if requested by configure --enable-tls - and available. This allows parallel running of nauty and Traces - in separate threads. - -* The makefile now creates static libraries like nauty.a in - addition to object files like nauty.o. - -* Remove all use of types permutation, nvector, np2vector, shortish. - These are now int. - -* Add schreier.h, schreier.c and the optional use of the random - Schreier method in nauty. These are also used in Traces, but - are not optional there. - -* Add large-file support to all programs, assuming it is available. - Now there is no longer a 4GB limit on files read or written on - 32-bit systems. - -* Use gcc extensions like __builtin_clz() if available and not - disabled by configure --disable-clz. - Use FIRSTBITNZ instead of FIRSTBIT if the argument is certain - to be nonzero. - -* New macros defined in nauty.h: - COUNTER_FMT - PRINT_COUNTER - SETWORDSNEEDED - ADDONEARC - ADDONEEDGE - EMPTYGRAPH - -* The options structure has a new boolean field schreier. - -* New procedures: - densenauty() in naugraph.c - simplified dense graph interface - sparsenauty() in nausparse.c - simplified sparse graph interface - writegroupsize() in nautil.c - write two part group size - copy_sg() in nausparse.c - make a copy of a sparse graph - - densenauty() and sparsenauty() are now the recommended ways to - call nauty from a program. See the sample programs in the package. - -* Use quicksort in place of shell sort in many places. This is - implemented in the file sorttemplates.c that can be used in any - applications. - -* Apply the const attribute more liberally across the code. - -* The sparsegraph fields nde and *v changed type from int to size_t. - This is to allow more than 2^31 edges on 64-bit hardware. - -* sparsegraph.h and sparsegraph.c: - Corrected definition of SG_DECL in sparsegraph.h. (The erroneous - definition would have worked but generated warnings.) - Added DEFAULTOPTIONS_SPARSEDIGRAPH. - Added comparelab_tr(), testcanlab_tr(), updatecan_tr() for Traces. - -* gtools.h and gtools.c: - Now gtools.h is made from gtools-h.in by configure. - Updated G6LEN() to work for larger graphs. - Use large-file functions fseeko(), ftello() if possible. - -* Most tools now use the random number generator in naurng.c rather - than that in rng.c. - -* gutils.h, gutil1.c and gutil2.c: - New procedures maxcliques(), indpathcount1(), indcyclecount1(), - indcyclecount(). - -* Invariants: - Corrected getbigcells(), making a small change to invariants - celltrips, cellquins and refinvar. - -* dreadnaut: - Sparse nauty and Traces now incorported. - New commands: A, G, F, FF, sr, O, OO, P, PP, S, V - w command is now in units of 2*m. - Command-line can run commands using -o. - M command is extended; now applies to i as well as x. - Implement ANSI controls if requested. - File names for > and < can be given in "..." to allow spaces. - -* Updates to utilities: - listg: add -b (Bliss format), -G (GRAPE format) and - -y/-Y (dotty format), -H (HCP format) - labelg: add -t (Traces) and -i16 (refinvar) - countg/pickg: add -m (vertices of min degree), - -M (vertices of max degree), -H (induced cycles), - -K (number of maximal independent sets) - genrang: add -t (tree) - genbg: add -A (antichain) - The makefile can also make genbgL which makes larger sizes - directg: add PROCESS feature - shortg: -S (use sparse nauty), -t (use traces), i16 (refinvar) - -* New utilities: - ranlabg: randomly relabel graphs - linegraphg: compute linegraphs - subdivideg: compute subdivision graphs - watercluster2: orient edges of graphs (by Gunnar Brinkmann) - -* Version 25r2 fixed a rare error in Traces - Version 25r3 fixed some problems in the configure script - (thanks to Daniel Grayson) - Versions 25r4 and 25r5 fixed other rare errors in Traces - Version 25r6 updated the configuration code. Now it should work - in recent versions of Cygwin under Windows. - Version 25r7 fixed some boundary cases in Traces - (thanks to Geoff Bailey, Shreedhar Hardikar, John Call, Alisa Maas), - also a bug in planarg -p for n >= 65536. - Version 25r8 fixed g++ code in some header files, removed CPUDEFS - from dreadnaut.c and traces.c (already in gtools.h), and - increased workspace in densenauty() and sparsenauty(). - Version 25r9 added a missing PRUNE2 call in genbg.c. You didn't - meet this bug unless you wrote a plugin for genbg.c. diff --git a/tools/nauty25r9_mac/checks6.c b/tools/nauty25r9_mac/checks6.c deleted file mode 100644 index 265d226..0000000 --- a/tools/nauty25r9_mac/checks6.c +++ /dev/null @@ -1,227 +0,0 @@ -/* checks6.c; May 2005 */ - -#define USAGE "checks6 [-p#:#w] [infile [outfile]]" - -#define HELPTEXT \ -" Check a file of graphs, optionally write corrected version\n\ -\n\ - -p# -p#:# \n\ - Specify range of input lines (first is 1)\n\ -\n\ - -w Write corrected graphs (default is not to write)\n\ - A header is written if there is one in the input.\n" - -/***********************************************************************/ - -#include "gtools.h" - -/***********************************************************************/ - -static boolean -seemsbad(char *s) -/* Check graph string for apparent problem, if so, correct it */ -{ - int i,j,k,m,n; - char *p,x,pq; - set *gj; - long ii; - int r,rr,topbit,nb,lastj; - graph g[16]; - - if (s[0] != ':') return FALSE; /* not sparse6 */ - - n = graphsize(s); - if (n != 2 && n != 4 && n != 8 && n != 16) return FALSE; - m = 1; - - stringtograph(s,g,m); - if (g[n-1] != bit[n-1]) return FALSE; - if (g[n-2] == 0) return FALSE; - - g[n-1] = 0; - p = s+2; - - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) {} - topbit = 1 << (nb-1); - k = 6; - x = 0; - - lastj = 0; - for (j = 0; j < n; ++j) - { - gj = GRAPHROW(g,j,m); - for (i = 0; i <= j; ++i) - { - if (ISELEMENT(gj,i)) - { - if (j == lastj) - { - x <<= 1; - if (--k == 0) - { - p++; - k = 6; - x = 0; - } - } - else - { - x = (x << 1) | 1; - if (--k == 0) - { - p++; - k = 6; - x = 0; - } - if (j > lastj+1) - { - for (r = 0, rr = j; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - p++; - k = 6; - x = 0; - } - } - x <<= 1; - if (--k == 0) - { - p++; - k = 6; - x = 0; - } - } - lastj = j; - } - for (r = 0, rr = i; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - p++; - k = 6; - x = 0; - } - } - } - } - } - - if (k != 6) - { - if (k >= nb+1 && lastj == n-2 && n == (1< 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE, - pswitch ? pval1 : 1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (wswitch && (codetype&HAS_HEADER)) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nerr = nin = 0; - if (!pswitch || pval2 == NOLIMIT) - maxin = NOLIMIT; - else if (pval1 < 1) maxin = pval2; - else maxin = pval2 - pval1 + 1; - while (nin < maxin || maxin == NOLIMIT) - { - if ((s = gtools_getline(infile)) == NULL) break; - ++nin; - - if (seemsbad(s)) ++nerr; - if (wswitch) writeline(outfile,s); - } - - fprintf(stderr,">Z %ld graphs read",nin); - if (nerr > 0) fprintf(stderr,"; %ld probable errors",nerr); - else fprintf(stderr,"; NO PROBLEMS"); - if (wswitch) fprintf(stderr,"; %ld graphs written",nin); - fprintf(stderr,"\n"); - - exit(0); -} diff --git a/tools/nauty25r9_mac/complg b/tools/nauty25r9_mac/complg deleted file mode 100644 index 29fbe103ef249f80a7903c2710d4d3905ce2ccd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138544 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

    M9Rj?dd}-p13?HLC@bHqG>U&^M!C-j0SVU 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 Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A complg"); - if (restricted || dolabel) - fprintf(stderr," -"); - if (restricted) fprintf(stderr,"r"); - if (dolabel) fprintf(stderr,"l"); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - if (dolabel) nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; -#if !MAXN - DYNALLOC2(graph,gc,gc_sz,n,m,"complg"); -#endif - - if (restricted) - { - ned = 0; - for (ii = (long)n*m; --ii >= 0; ) ned += POPCOUNT(g[ii]); - if (ned+ned > (long)n*(n-1)) - { - compl(g,m,n,gc); - gq = gc; - } - else - gq = g; - } - else - { - compl(g,m,n,gc); - gq = gc; - } - if (dolabel) - { -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"complg"); -#endif - fcanonise(gq,m,n,h,NULL,FALSE); - gq = h; - } - if (outcode == SPARSE6) writes6(outfile,gq,m,n); - else writeg6(outfile,gq,m,n); - FREES(g); - } - t = CPUTIME - t; - - if (!quiet) - fprintf(stderr,">Z " COUNTER_FMT - " graphs converted from %s to %s in %3.2f sec.\n", - nin,infilename,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_mac/config.guess b/tools/nauty25r9_mac/config.guess deleted file mode 100644 index b79252d..0000000 --- a/tools/nauty25r9_mac/config.guess +++ /dev/null @@ -1,1558 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. - -timestamp='2013-06-10' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that -# program. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). -# -# Originally written by Per Bothner. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD -# -# Please send patches with a ChangeLog entry to config-patches@gnu.org. - - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -case "${UNAME_SYSTEM}" in -Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu - - eval $set_cc_for_build - cat <<-EOF > $dummy.c - #include - #if defined(__UCLIBC__) - LIBC=uclibc - #elif defined(__dietlibc__) - LIBC=dietlibc - #else - LIBC=gnu - #endif - EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - ;; -esac - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:Bitrig:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - aarch64_be:Linux:*:*) - UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi - else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; - crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; - frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } - ;; - or1k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - or32:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} - exit ;; - ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} - exit ;; - ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} - exit ;; - x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - x86_64:Haiku:*:*) - echo x86_64-unknown-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc - fi - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; - NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; - x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx - exit ;; -esac - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/tools/nauty25r9_mac/config.status b/tools/nauty25r9_mac/config.status deleted file mode 100644 index a9f7984..0000000 --- a/tools/nauty25r9_mac/config.status +++ /dev/null @@ -1,951 +0,0 @@ -#! /bin/sh -# Generated by configure. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -# Files that config.status was made for. -config_files=" makefile:makefile.in nauty.h:nauty-h.in naututil.h:naututil-h.in gtools.h:gtools-h.in" - -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to the package provider." - -ac_cs_config="" -ac_cs_version="\ -config.status -configured by ./configure, generated by GNU Autoconf 2.65, - with options \"$ac_cs_config\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='/Users/RW/Dropbox/MetabolicUniverse/tools/nauty25r9_mac' -srcdir='.' -test -n "$AWK" || AWK=awk -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -if $ac_cs_recheck; then - set X '/bin/sh' './configure' $ac_configure_extra_args --no-create --no-recursion - shift - $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6 - CONFIG_SHELL='/bin/sh' - export CONFIG_SHELL - exec "$@" -fi - -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "makefile") CONFIG_FILES="$CONFIG_FILES makefile:makefile.in" ;; - "nauty.h") CONFIG_FILES="$CONFIG_FILES nauty.h:nauty-h.in" ;; - "naututil.h") CONFIG_FILES="$CONFIG_FILES naututil.h:naututil-h.in" ;; - "gtools.h") CONFIG_FILES="$CONFIG_FILES gtools.h:gtools-h.in" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -cat >>"$tmp/subs1.awk" <<\_ACAWK && -S["LTLIBOBJS"]="" -S["LIBOBJS"]="" -S["edit_msg"]="++++++ This file is automatically generated, don't edit it by hand! ++++++" -S["sort_newparams_ok"]="1" -S["sort_prog"]="sort" -S["have_ansicontrols"]="0" -S["default_wordsize"]="0" -S["have_tls"]="0" -S["ac_cv_tls"]="" -S["stdio_nolock"]="1" -S["threadlib"]="" -S["have_pthread"]="1" -S["shortg_or_null"]="shortg" -S["have_clzll"]="1" -S["have_clzl"]="1" -S["have_clz"]="1" -S["have_sigprocmask"]="1" -S["have_sigaction"]="1" -S["have_fseeko"]="1" -S["have_fork"]="1" -S["have_setenv"]="1" -S["have_putenv"]="1" -S["have_popen"]="1" -S["have_wait"]="1" -S["have_pipe"]="1" -S["have_perror"]="1" -S["have_getrusage"]="1" -S["have_gettimeofday"]="1" -S["have_time"]="1" -S["have_times"]="1" -S["have_isatty"]="1" -S["have_const"]="1" -S["testprogs"]="dreadtest dreadtestS dreadtestS1 dreadtest4K dreadtest1 dreadtestW dreadtestW1 dreadtestL1 dreadtestL" -S["lok"]="1" -S["MORECFLAGS"]="" -S["ac_cv_sizeof_long_long"]="8" -S["ac_cv_sizeof_long"]="8" -S["ac_cv_sizeof_int"]="4" -S["has_math_inf"]="1" -S["setenv_dec"]="1" -S["putenv_dec"]="1" -S["popen_dec"]="1" -S["fdopen_dec"]="1" -S["ftell_dec"]="1" -S["malloc_dec"]="1" -S["have_pid_t"]="1" -S["header_signal_h"]="1" -S["header_pthread_h"]="1" -S["header_errno_h"]="1" -S["header_sys_types_h"]="1" -S["header_sys_wait_h"]="1" -S["header_string_h"]="1" -S["header_stdlib_h"]="1" -S["header_unistd_h"]="1" -S["header_stddef_h"]="1" -S["EGREP"]="/usr/bin/grep -E" -S["GREP"]="/usr/bin/grep" -S["CPP"]="gcc -E" -S["ac_cv_sys_file_offset_bits"]="0" -S["OBJEXT"]="o" -S["EXEEXT"]="" -S["ac_ct_CC"]="gcc" -S["CPPFLAGS"]="" -S["LDFLAGS"]="" -S["CFLAGS"]=" -O4" -S["CC"]="gcc" -S["host_os"]="darwin14.5.0" -S["host_vendor"]="apple" -S["host_cpu"]="x86_64" -S["host"]="x86_64-apple-darwin14.5.0" -S["build_os"]="darwin14.5.0" -S["build_vendor"]="apple" -S["build_cpu"]="x86_64" -S["build"]="x86_64-apple-darwin14.5.0" -S["target_alias"]="" -S["host_alias"]="" -S["build_alias"]="" -S["LIBS"]="" -S["ECHO_T"]="" -S["ECHO_N"]="" -S["ECHO_C"]="\\c" -S["DEFS"]="-DPACKAGE_NAME=\\\"\\\" -DPACKAGE_TARNAME=\\\"\\\" -DPACKAGE_VERSION=\\\"\\\" -DPACKAGE_STRING=\\\"\\\" -DPACKAGE_BUGREPORT=\\\"\\\" -DPACKAGE_URL=\\\"\\\" -DHAVE_SYS_WAIT_"\ -"H=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYP"\ -"ES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SIGNAL_H=1 -DHAVE_STDDEF_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_STD"\ -"LIB_H=1 -DHAVE_STRING_H=1 -DHAVE_ERRNO_H=1 -DHAVE_PTHREAD_H=1 -DSIZEOF_INT=4 -DSIZEOF_LONG=8 -DSIZEOF_LONG_LONG=8 -DHAVE_FORK=1 -DHAVE_VFORK=1 -DHAV"\ -"E_WORKING_VFORK=1 -DHAVE_WORKING_FORK=1" -S["mandir"]="${datarootdir}/man" -S["localedir"]="${datarootdir}/locale" -S["libdir"]="${exec_prefix}/lib" -S["psdir"]="${docdir}" -S["pdfdir"]="${docdir}" -S["dvidir"]="${docdir}" -S["htmldir"]="${docdir}" -S["infodir"]="${datarootdir}/info" -S["docdir"]="${datarootdir}/doc/${PACKAGE}" -S["oldincludedir"]="/usr/include" -S["includedir"]="${prefix}/include" -S["localstatedir"]="${prefix}/var" -S["sharedstatedir"]="${prefix}/com" -S["sysconfdir"]="${prefix}/etc" -S["datadir"]="${datarootdir}" -S["datarootdir"]="${prefix}/share" -S["libexecdir"]="${exec_prefix}/libexec" -S["sbindir"]="${exec_prefix}/sbin" -S["bindir"]="${exec_prefix}/bin" -S["program_transform_name"]="s,x,x," -S["prefix"]="/usr/local" -S["exec_prefix"]="${prefix}" -S["PACKAGE_URL"]="" -S["PACKAGE_BUGREPORT"]="" -S["PACKAGE_STRING"]="" -S["PACKAGE_VERSION"]="" -S["PACKAGE_TARNAME"]="" -S["PACKAGE_NAME"]="" -S["PATH_SEPARATOR"]=":" -S["SHELL"]="/bin/sh" -_ACAWK -cat >>"$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} - ac_datarootdir_hack=' - s&@datadir@&${datarootdir}&g - s&@docdir@&${datarootdir}/doc/${PACKAGE}&g - s&@infodir@&${datarootdir}/info&g - s&@localedir@&${datarootdir}/locale&g - s&@mandir@&${datarootdir}/man&g - s&\${datarootdir}&${prefix}/share&g' ;; -esac -ac_sed_extra="/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -} - -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - - - - esac - -done # for ac_tag - - -as_fn_exit 0 diff --git a/tools/nauty25r9_mac/config.sub b/tools/nauty25r9_mac/config.sub deleted file mode 100644 index 85a159e..0000000 --- a/tools/nauty25r9_mac/config.sub +++ /dev/null @@ -1,1791 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright 1992-2013 Free Software Foundation, Inc. - -timestamp='2013-09-05' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that -# program. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). - - -# Please send patches with a ChangeLog entry to config-patches@gnu.org. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright 1992-2013 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 \ - | or1k | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none - ;; - xscaleeb) - basic_machine=armeb-unknown - ;; - - xscaleel) - basic_machine=armel-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tile*) - basic_machine=$basic_machine-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - c8051-*) - os=-elf - ;; - hexagon-*) - os=-elf - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or1k-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/tools/nauty25r9_mac/config.txt b/tools/nauty25r9_mac/config.txt deleted file mode 100644 index 98f66f0..0000000 --- a/tools/nauty25r9_mac/config.txt +++ /dev/null @@ -1,21 +0,0 @@ -======================================================================== -| In order to compile nauty on systems which include a Unix-like shell -| (which includes MacOSX and Cygwin), you must first run the script -| "configure". Usually this can be done with the command -| ./configure -| -| The configure script will create custom versions of these files: -| gtools.h makefile naututil.h nauty.h -| Afterwards you can use "make" to compile everything. -| -| In case you can't run shell scripts, or configure doesn't work for -| some reason, you need to adjust the configuration by hand: -| For gtools.h, naututil.h, and nauty.h, make sure definitions near the -| start of the file (like HAVE_UNISTD_H and SIZEOF_INT) are all correct. -| For makefile, copy the file makefile.basic to makefile, then check the -| definitions near the start. -| -| Please notify Brendan McKay of any problems with -| the configuration and of any hints you might have for other people with -| similar setups as you have. -======================================================================== diff --git a/tools/nauty25r9_mac/configure b/tools/nauty25r9_mac/configure deleted file mode 100644 index 9e1cb21..0000000 --- a/tools/nauty25r9_mac/configure +++ /dev/null @@ -1,6868 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65. -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= - -ac_unique_file="dreadnaut.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='LTLIBOBJS -LIBOBJS -edit_msg -sort_newparams_ok -sort_prog -have_ansicontrols -default_wordsize -have_tls -ac_cv_tls -stdio_nolock -threadlib -have_pthread -shortg_or_null -have_clzll -have_clzl -have_clz -have_sigprocmask -have_sigaction -have_fseeko -have_fork -have_setenv -have_putenv -have_popen -have_wait -have_pipe -have_perror -have_getrusage -have_gettimeofday -have_time -have_times -have_isatty -have_const -testprogs -lok -MORECFLAGS -ac_cv_sizeof_long_long -ac_cv_sizeof_long -ac_cv_sizeof_int -has_math_inf -setenv_dec -putenv_dec -popen_dec -fdopen_dec -ftell_dec -malloc_dec -have_pid_t -header_signal_h -header_pthread_h -header_errno_h -header_sys_types_h -header_sys_wait_h -header_string_h -header_stdlib_h -header_unistd_h -header_stddef_h -EGREP -GREP -CPP -ac_cv_sys_file_offset_bits -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_largefile -enable_clz -enable_tls -enable_wordsize -enable_ansicontrols -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-largefile omit support for large files - --disable-clz Disable clz extensions - --enable-tls Enable thread-local variables - --enable-wordsize=value Override default WORDSIZE choice - --enable-ansicontrols Enable ANSI terminal control sequences - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to the package provider. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.65 - -Copyright (C) 2009 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_type - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done -done -if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - -user_cflags="$CFLAGS" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CFLAGS=$user_cflags -MORECFLAGS="" - -# Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : - enableval=$enable_largefile; -fi - -if test "$enable_largefile" != no; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -if test "${ac_cv_sys_largefile_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF - if ac_fn_c_try_compile "$LINENO"; then : - break -fi -rm -f core conftest.err conftest.$ac_objext - CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_largefile_CC=' -n32'; break -fi -rm -f core conftest.err conftest.$ac_objext - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -$as_echo "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if test "${ac_cv_sys_file_offset_bits+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=64; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -$as_echo "$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF -;; -esac -rm -rf conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -if test "${ac_cv_sys_large_files+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _LARGE_FILES 1 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=1; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -$as_echo "$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF -;; -esac -rm -rf conftest* - fi -fi - -if test x"$ac_cv_sys_file_offset_bits" = xno ; then - ac_cv_sys_file_offset_bits=0 -fi - - -if test x"$user_cflags" = x"" -o x"$user_cflags" = x-m32 ; then - if test "$CC" = "icc" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -O3 flags" >&5 -$as_echo_n "checking if $CC supports -O3 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-O3" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -O3" - else - : - fi; - if test x"$ac_cv_try_cflags_ok" = x"no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -O2 flags" >&5 -$as_echo_n "checking if $CC supports -O2 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-O2" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -O2" - else - CFLAGS="$CFLAGS -O" - fi; - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -O4 flags" >&5 -$as_echo_n "checking if $CC supports -O4 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-O4" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -O4" - else - : - fi; - if test x"$ac_cv_try_cflags_ok" = x"no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -O3 flags" >&5 -$as_echo_n "checking if $CC supports -O3 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-O3" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -O3" - else - : - fi; - if test x"$ac_cv_try_cflags_ok" = x"no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -O2 flags" >&5 -$as_echo_n "checking if $CC supports -O2 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-O2" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -O2" - else - CFLAGS="$CFLAGS -O" - fi; - fi - fi - fi - - if test "$CC" = "gcc" ; then - gccver=`gcc --version 2>/dev/null || echo 0.0.0` - else - gccver=0.0.0 - fi - - case "$host" in - *i686-apple-darwin*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -fast flags" >&5 -$as_echo_n "checking if $CC supports -fast flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-fast" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$MORECFLAGS -fast" - else - : - fi;; - *pentium*solaris*) - ;; - *pentium4*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -march=pentium4 flags" >&5 -$as_echo_n "checking if $CC supports -march=pentium4 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-march=pentium4" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -march=pentium4" - else - : - fi;; - *pentium3*|*i686*|*athlon*|x86*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -march=i686 flags" >&5 -$as_echo_n "checking if $CC supports -march=i686 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-march=i686" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -march=i686" - else - : - fi;; - *pentium2*|*i586*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -march=i586 flags" >&5 -$as_echo_n "checking if $CC supports -march=i586 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-march=i586" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -march=i586" - else - : - fi;; - *powerpc*) - machtype=`/usr/bin/machine 2>/dev/null || echo unknown` - case "$machtype" in - ppc740?) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mcpu=7400 flags" >&5 -$as_echo_n "checking if $CC supports -mcpu=7400 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mcpu=7400" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mcpu=7400" - else - : - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mtune=7400 flags" >&5 -$as_echo_n "checking if $CC supports -mtune=7400 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mtune=7400" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mtune=7400" - else - : - fi;; - ppc745?) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mcpu=7450 flags" >&5 -$as_echo_n "checking if $CC supports -mcpu=7450 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mcpu=7450" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mcpu=7450" - else - : - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mtune=7450 flags" >&5 -$as_echo_n "checking if $CC supports -mtune=7450 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mtune=7450" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mtune=7450" - else - : - fi - case "$gccver" in - *\ 4.[0-9].[0-9]\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports $CFLAGS -fast flags" >&5 -$as_echo_n "checking if $CC supports $CFLAGS -fast flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fast" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - MORECFLAGS="$MORECFLAGS -fast" - else - : - fi;; - esac;; - ppc970) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mcpu=g5 flags" >&5 -$as_echo_n "checking if $CC supports -mcpu=g5 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mcpu=g5" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mcpu=g5" - else - : - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mtune=g5 flags" >&5 -$as_echo_n "checking if $CC supports -mtune=g5 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mtune=g5" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mtune=g5" - else - : - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -fast flags" >&5 -$as_echo_n "checking if $CC supports -fast flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-fast" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$MORECFLAGS -fast" - else - : - fi;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mpowerpc flags" >&5 -$as_echo_n "checking if $CC supports -mpowerpc flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mpowerpc" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mpowerpc" - else - : - fi;; - esac;; - *osf*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -fast flags" >&5 -$as_echo_n "checking if $CC supports -fast flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-fast" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -fast" - else - : - fi;; - *sparcv8*|*sparcv9*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -msupersparc flags" >&5 -$as_echo_n "checking if $CC supports -msupersparc flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-msupersparc" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -msupersparc" - else - : - fi - if test x"$ac_cv_try_cflags_ok" = x"no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -cg92 flags" >&5 -$as_echo_n "checking if $CC supports -cg92 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-cg92" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -cg92" - else - : - fi - if test x"$ac_cv_try_cflags_ok" = x"no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -xcg92 flags" >&5 -$as_echo_n "checking if $CC supports -xcg92 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-xcg92" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -xcg92" - else - : - fi - fi - fi;; - esac -fi - -echo CFLAGS=$CFLAGS -echo MORECFLAGS=$MORECFLAGS - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 -$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } -if test "${ac_cv_header_sys_wait_h+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#ifndef WEXITSTATUS -# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) -#endif -#ifndef WIFEXITED -# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) -#endif - -int -main () -{ - int s; - wait (&s); - s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_sys_wait_h=yes -else - ac_cv_header_sys_wait_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 -$as_echo "$ac_cv_header_sys_wait_h" >&6; } -if test $ac_cv_header_sys_wait_h = yes; then - -$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in signal.h stddef.h unistd.h sys/types.h sys/wait.h stdlib.h string.h errno.h pthread.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -if test x"$ac_cv_header_stddef_h" = x"yes"; then -header_stddef_h=1 -else -header_stddef_h=0 -fi - -if test x"$ac_cv_header_unistd_h" = x"yes"; then -header_unistd_h=1 -else -header_unistd_h=0 -fi - -if test x"$ac_cv_header_stdlib_h" = x"yes"; then -header_stdlib_h=1 -else -header_stdlib_h=0 -fi - -if test x"$ac_cv_header_string_h" = x"yes"; then -header_string_h=1 -else -header_string_h=0 -fi - -if test x"$ac_cv_header_sys_wait_h" = x"yes"; then -header_sys_wait_h=1 -else -header_sys_wait_h=0 -fi - -if test x"$ac_cv_header_sys_types_h" = x"yes"; then -header_sys_types_h=1 -else -header_sys_types_h=0 -fi - -if test x"$ac_cv_header_errno_h" = x"yes"; then -header_errno_h=1 -else -header_errno_h=0 -fi - -if test x"$ac_cv_header_pthread_h" = x"yes"; then -header_pthread_h=1 -else -header_pthread_h=0 -fi - -if test x"$ac_cv_header_signal_h" = x"yes"; then -header_signal_h=1 -else -header_signal_h=0 -fi - - -ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define pid_t int -_ACEOF - -fi - -if test x"$ac_cv_type_pid_t" = x"yes"; then -have_pid_t=1 -else -have_pid_t=0 -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if malloc is declared in stdlib.h or malloc.h" >&5 -$as_echo_n "checking if malloc is declared in stdlib.h or malloc.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])malloc[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - malloc_dec=1 -else - malloc_dec=0 -fi -rm -f conftest* - -if test $malloc_dec -eq 0; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])malloc[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - malloc_dec=2 -else - malloc_dec=0 -fi -rm -f conftest* - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $malloc_dec" >&5 -$as_echo "$malloc_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if ftell is declared in stdio.h" >&5 -$as_echo_n "checking if ftell is declared in stdio.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])ftell[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - ftell_dec=1 -else - ftell_dec=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ftell_dec" >&5 -$as_echo "$ftell_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if fdopen is declared in stdio.h" >&5 -$as_echo_n "checking if fdopen is declared in stdio.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])fdopen[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - fdopen_dec=1 -else - fdopen_dec=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $fdopen_dec" >&5 -$as_echo "$fdopen_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if popen is declared in stdio.h" >&5 -$as_echo_n "checking if popen is declared in stdio.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])popen[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - popen_dec=1 -else - popen_dec=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $popen_dec" >&5 -$as_echo "$popen_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if putenv is declared in stdlib.h" >&5 -$as_echo_n "checking if putenv is declared in stdlib.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])putenv[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - putenv_dec=1 -else - putenv_dec=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $putenv_dec" >&5 -$as_echo "$putenv_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if setenv is declared in stdlib.h" >&5 -$as_echo_n "checking if setenv is declared in stdlib.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])setenv[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - setenv_dec=1 -else - setenv_dec=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $setenv_dec" >&5 -$as_echo "$setenv_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if INFINITY is declared in math.h" >&5 -$as_echo_n "checking if INFINITY is declared in math.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#ifdef INFINITY - yes -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - has_math_inf=1 -else - has_math_inf=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_math_inf" >&5 -$as_echo "$has_math_inf" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 -$as_echo_n "checking size of int... " >&6; } -if test "${ac_cv_sizeof_int+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_int" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (int) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_int=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 -$as_echo "$ac_cv_sizeof_int" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT $ac_cv_sizeof_int -_ACEOF - - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 -$as_echo_n "checking size of long... " >&6; } -if test "${ac_cv_sizeof_long+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (long) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 -$as_echo "$ac_cv_sizeof_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG $ac_cv_sizeof_long -_ACEOF - - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 -$as_echo_n "checking size of long long... " >&6; } -if test "${ac_cv_sizeof_long_long+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (long long) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_long_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 -$as_echo "$ac_cv_sizeof_long_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long -_ACEOF - - - -lok=0 -testprogs="dreadtest dreadtestS dreadtestS1 dreadtest4K" -testprogs="$testprogs dreadtest1 dreadtestW dreadtestW1" - - -if test $ac_cv_sizeof_long_long -eq 8; then - lok=1 - testprogs="$testprogs dreadtestL1 dreadtestL" -else - if test $ac_cv_sizeof_long -eq 8; then - lok=1 - fi -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if test "${ac_cv_c_const+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes -else - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "#define const /**/" >>confdefs.h - -fi - -if test x"$ac_cv_c_const" = x"yes"; then -have_const=1 -else -have_const=0 -fi - - -ac_fn_c_check_func "$LINENO" "isatty" "ac_cv_func_isatty" -if test "x$ac_cv_func_isatty" = x""yes; then : - have_isatty=1 -else - have_isatty=0 -fi - - -ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" -if test "x$ac_cv_func_times" = x""yes; then : - have_times=1 -else - have_times=0 -fi - - -ac_fn_c_check_func "$LINENO" "time" "ac_cv_func_time" -if test "x$ac_cv_func_time" = x""yes; then : - have_time=1 -else - have_time=0 -fi - - -ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" -if test "x$ac_cv_func_gettimeofday" = x""yes; then : - have_gettimeofday=1 -else - have_gettimeofday=0 -fi - - -ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" -if test "x$ac_cv_func_times" = x""yes; then : - have_times=1 -else - have_times=0 -fi - - -ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage" -if test "x$ac_cv_func_getrusage" = x""yes; then : - have_getrusage=1 -else - have_getrusage=0 -fi - - -ac_fn_c_check_func "$LINENO" "perror" "ac_cv_func_perror" -if test "x$ac_cv_func_perror" = x""yes; then : - have_perror=1 -else - have_perror=0 -fi - - -ac_fn_c_check_func "$LINENO" "pipe" "ac_cv_func_pipe" -if test "x$ac_cv_func_pipe" = x""yes; then : - have_pipe=1 -else - have_pipe=0 -fi - - -ac_fn_c_check_func "$LINENO" "wait" "ac_cv_func_wait" -if test "x$ac_cv_func_wait" = x""yes; then : - have_wait=1 -else - have_wait=0 -fi - - -ac_fn_c_check_func "$LINENO" "popen" "ac_cv_func_popen" -if test "x$ac_cv_func_popen" = x""yes; then : - have_popen=1 -else - have_popen=0 -fi - - -ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv" -if test "x$ac_cv_func_putenv" = x""yes; then : - have_putenv=1 -else - have_putenv=0 -fi - - -ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv" -if test "x$ac_cv_func_setenv" = x""yes; then : - have_setenv=1 -else - have_setenv=0 -fi - - -for ac_header in vfork.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" -if test "x$ac_cv_header_vfork_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_VFORK_H 1 -_ACEOF - -fi - -done - -for ac_func in fork vfork -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -if test "x$ac_cv_func_fork" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 -$as_echo_n "checking for working fork... " >&6; } -if test "${ac_cv_func_fork_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_fork_works=cross -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* By Ruediger Kuhlmann. */ - return fork () < 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_fork_works=yes -else - ac_cv_func_fork_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 -$as_echo "$ac_cv_func_fork_works" >&6; } - -else - ac_cv_func_fork_works=$ac_cv_func_fork -fi -if test "x$ac_cv_func_fork_works" = xcross; then - case $host in - *-*-amigaos* | *-*-msdosdjgpp*) - # Override, as these systems have only a dummy fork() stub - ac_cv_func_fork_works=no - ;; - *) - ac_cv_func_fork_works=yes - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 -$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} -fi -ac_cv_func_vfork_works=$ac_cv_func_vfork -if test "x$ac_cv_func_vfork" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 -$as_echo_n "checking for working vfork... " >&6; } -if test "${ac_cv_func_vfork_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_vfork_works=cross -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Thanks to Paul Eggert for this test. */ -$ac_includes_default -#include -#ifdef HAVE_VFORK_H -# include -#endif -/* On some sparc systems, changes by the child to local and incoming - argument registers are propagated back to the parent. The compiler - is told about this with #include , but some compilers - (e.g. gcc -O) don't grok . Test for this by using a - static variable whose address is put into a register that is - clobbered by the vfork. */ -static void -#ifdef __cplusplus -sparc_address_test (int arg) -# else -sparc_address_test (arg) int arg; -#endif -{ - static pid_t child; - if (!child) { - child = vfork (); - if (child < 0) { - perror ("vfork"); - _exit(2); - } - if (!child) { - arg = getpid(); - write(-1, "", 0); - _exit (arg); - } - } -} - -int -main () -{ - pid_t parent = getpid (); - pid_t child; - - sparc_address_test (0); - - child = vfork (); - - if (child == 0) { - /* Here is another test for sparc vfork register problems. This - test uses lots of local variables, at least as many local - variables as main has allocated so far including compiler - temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris - 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should - reuse the register of parent for one of the local variables, - since it will think that parent can't possibly be used any more - in this routine. Assigning to the local variable will thus - munge parent in the parent process. */ - pid_t - p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), - p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); - /* Convince the compiler that p..p7 are live; otherwise, it might - use the same hardware register for all 8 local variables. */ - if (p != p1 || p != p2 || p != p3 || p != p4 - || p != p5 || p != p6 || p != p7) - _exit(1); - - /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent - from child file descriptors. If the child closes a descriptor - before it execs or exits, this munges the parent's descriptor - as well. Test for this by closing stdout in the child. */ - _exit(close(fileno(stdout)) != 0); - } else { - int status; - struct stat st; - - while (wait(&status) != child) - ; - return ( - /* Was there some problem with vforking? */ - child < 0 - - /* Did the child fail? (This shouldn't happen.) */ - || status - - /* Did the vfork/compiler bug occur? */ - || parent != getpid() - - /* Did the file descriptor bug occur? */ - || fstat(fileno(stdout), &st) != 0 - ); - } -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_vfork_works=yes -else - ac_cv_func_vfork_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 -$as_echo "$ac_cv_func_vfork_works" >&6; } - -fi; -if test "x$ac_cv_func_fork_works" = xcross; then - ac_cv_func_vfork_works=$ac_cv_func_vfork - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 -$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} -fi - -if test "x$ac_cv_func_vfork_works" = xyes; then - -$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h - -else - -$as_echo "#define vfork fork" >>confdefs.h - -fi -if test "x$ac_cv_func_fork_works" = xyes; then - -$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h - -fi - -if test x"$ac_cv_func_fork" = x"yes"; then -have_fork=1 -else -have_fork=0 -fi - - -ac_fn_c_check_func "$LINENO" "fseeko" "ac_cv_func_fseeko" -if test "x$ac_cv_func_fseeko" = x""yes; then : - have_fseeko=1 -else - have_fseeko=0 -fi - - -ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction" -if test "x$ac_cv_func_sigaction" = x""yes; then : - have_sigaction=1 -else - have_sigaction=0 -fi - - -ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" -if test "x$ac_cv_func_sigprocmask" = x""yes; then : - have_sigprocmask=1 -else - have_sigprocmask=0 -fi - - - - -# Check whether --enable-clz was given. -if test "${enable_clz+set}" = set; then : - enableval=$enable_clz; clzarg=given -else - clzarg=notgiven -fi - -if test "x$clzarg" = "xnotgiven" -o "x$enable_clz" = "xyes"; then : - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if __builtin_clz() is supported" >&5 -$as_echo_n "checking if __builtin_clz() is supported... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){unsigned int x; x = __builtin_clz(x);} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - have_clz=1 -else - have_clz=0 -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_clz" >&5 -$as_echo "$have_clz" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if __builtin_clzl() is supported" >&5 -$as_echo_n "checking if __builtin_clzl() is supported... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){unsigned long x; x = __builtin_clzl(x);} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - have_clzl=1 -else - have_clzl=0 -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_clzl" >&5 -$as_echo "$have_clzl" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if __builtin_clzll() is supported" >&5 -$as_echo_n "checking if __builtin_clzll() is supported... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){unsigned long long x; x = __builtin_clzll(x);} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - have_clzll=1 -else - have_clzll=0 -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_clzll" >&5 -$as_echo "$have_clzll" >&6; } - -else - -have_clz=0 -have_clzl=0 -have_clzll=0 - -fi - - - - -ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create" -if test "x$ac_cv_func_pthread_create" = x""yes; then : - have_pthread=1 -else - have_pthread=0 -fi - -if test $have_pthread -eq 1 ; then - threadlib= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 -$as_echo_n "checking for pthread_create in -lpthread... " >&6; } -if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthread $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_create (); -int -main () -{ -return pthread_create (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pthread_pthread_create=yes -else - ac_cv_lib_pthread_pthread_create=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 -$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } -if test "x$ac_cv_lib_pthread_pthread_create" = x""yes; then : - have_pthread=1 -else - have_pthread=0 -fi - - if test $have_pthread -eq 1 ; then - threadlib=-lpthread - else - threadlib= - fi -fi - -if test $have_pipe -eq 1 -a $have_wait -eq 1 -a $have_fork -eq 1 ; then - shortg=1 - shortg_or_null=shortg -else - shortg=0 - shortg_or_null= -fi - - - - - -ac_fn_c_check_func "$LINENO" "getc_unlocked" "ac_cv_func_getc_unlocked" -if test "x$ac_cv_func_getc_unlocked" = x""yes; then : - have_getc_unlocked=1 -else - have_getc_unlocked=0 -fi - -ac_fn_c_check_func "$LINENO" "flockfile" "ac_cv_func_flockfile" -if test "x$ac_cv_func_flockfile" = x""yes; then : - have_flockfile=1 -else - have_flockfile=0 -fi - -if test $have_getc_unlocked -eq 1 -a $have_flockfile -eq 1 ; then - stdio_nolock=1 -else - stdio_nolock=0 -fi - - -# Check whether --enable-tls was given. -if test "${enable_tls+set}" = set; then : - enableval=$enable_tls; -fi - -if test "x$enable_tls" = "xyes"; then : - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage (TLS) class" >&5 -$as_echo_n "checking for thread local storage (TLS) class... " >&6; } - if test "${ac_cv_tls+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_tls_keywords="__thread __declspec(thread) none" - for ax_tls_keyword in $ax_tls_keywords; do - case $ax_tls_keyword in #( - none) : - ac_cv_tls=none ; break ;; #( - *) : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - static void - foo(void) { - static $ax_tls_keyword int bar; - exit(1); - } -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_tls=$ax_tls_keyword ; break -else - ac_cv_tls=none - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; -esac - done - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5 -$as_echo "$ac_cv_tls" >&6; } - - if test "$ac_cv_tls" != "none"; then : - -cat >>confdefs.h <<_ACEOF -#define TLS $ac_cv_tls -_ACEOF - - have_tls=1 -else - have_tls=0 - -fi - - -else - have_tls=0 -fi - -if test "$have_tls" -eq 0 ; then - ac_cv_tls= -fi - - - -# Check whether --enable-wordsize was given. -if test "${enable_wordsize+set}" = set; then : - enableval=$enable_wordsize; -fi - -if test "x$enable_wordsize" = "x16"; then : - default_wordsize=16 -else - default_wordsize=0 -fi -if test "x$enable_wordsize" = "x32"; then : - default_wordsize=32 -fi -if test "x$enable_wordsize" = "x64"; then : - default_wordsize=64 -fi - - -# Check whether --enable-ansicontrols was given. -if test "${enable_ansicontrols+set}" = set; then : - enableval=$enable_ansicontrols; -fi - -if test "x$enable_ansicontrols" = "xyes"; then : - have_ansicontrols=1 -else - have_ansicontrols=0 -fi - - -case "$build" in - *cygwin*) - for ac_prog in gsort sort -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_sort_prog+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $sort_prog in - [\\/]* | ?:[\\/]*) - ac_cv_path_sort_prog="$sort_prog" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /usr/bin$PATH_SEPARATOR/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_sort_prog="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -sort_prog=$ac_cv_path_sort_prog -if test -n "$sort_prog"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sort_prog" >&5 -$as_echo "$sort_prog" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$sort_prog" && break -done -test -n "$sort_prog" || sort_prog="no_sort_found" - ;; - *) - for ac_prog in gsort sort -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_sort_prog+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$sort_prog"; then - ac_cv_prog_sort_prog="$sort_prog" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_sort_prog="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -sort_prog=$ac_cv_prog_sort_prog -if test -n "$sort_prog"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sort_prog" >&5 -$as_echo "$sort_prog" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$sort_prog" && break -done -test -n "$sort_prog" || sort_prog="no_sort_found" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sort supports the -k switch" >&5 -$as_echo_n "checking if sort supports the -k switch... " >&6; } -if { $sort_prog -k "2,3" /dev/null 2>&1 ; } ; then - sort_newparams_ok=1 -else - sort_newparams_ok=0 -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sort_newparams_ok" >&5 -$as_echo "$sort_newparams_ok" >&6; } - -edit_msg="++++++ This file is automatically generated, don't edit it by hand! ++++++" - - -ac_config_files="$ac_config_files makefile:makefile.in nauty.h:nauty-h.in naututil.h:naututil-h.in gtools.h:gtools-h.in" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.65, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "makefile") CONFIG_FILES="$CONFIG_FILES makefile:makefile.in" ;; - "nauty.h") CONFIG_FILES="$CONFIG_FILES nauty.h:nauty-h.in" ;; - "naututil.h") CONFIG_FILES="$CONFIG_FILES naututil.h:naututil-h.in" ;; - "gtools.h") CONFIG_FILES="$CONFIG_FILES gtools.h:gtools-h.in" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - - - - esac - -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - diff --git a/tools/nauty25r9_mac/configure.ac b/tools/nauty25r9_mac/configure.ac deleted file mode 100644 index 6bd86b5..0000000 --- a/tools/nauty25r9_mac/configure.ac +++ /dev/null @@ -1,381 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(dreadnaut.c) - -AC_DEFUN([AX_TLS], [ - AC_MSG_CHECKING(for thread local storage (TLS) class) - AC_CACHE_VAL(ac_cv_tls, [ - ax_tls_keywords="__thread __declspec(thread) none" - for ax_tls_keyword in $ax_tls_keywords; do - AS_CASE([$ax_tls_keyword], - [none], [ac_cv_tls=none ; break], - [AC_TRY_COMPILE( - [#include - static void - foo(void) { - static ] $ax_tls_keyword [ int bar; - exit(1); - }], - [], - [ac_cv_tls=$ax_tls_keyword ; break], - ac_cv_tls=none - )]) - done - ]) - AC_MSG_RESULT($ac_cv_tls) - - AS_IF([test "$ac_cv_tls" != "none"], - AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here]) - m4_ifnblank([$1], [$1]), - m4_ifnblank([$2], [$2]) - ) -]) - -dnl AC_TRY_CFLAGS (CFLAGS, [ACTION-IF-WORKS], [ACTION-IF-FAILS]) -dnl Check if $CC supports a given set of cflags -AC_DEFUN([AC_TRY_CFLAGS], - [AC_MSG_CHECKING([if $CC supports $1 flags]) - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$1" - AC_TRY_RUN([main(){exit(0);}],[ac_cv_try_cflags_ok=yes], - [ac_cv_try_cflags_ok=no],[ac_cv_try_cflags_ok=no]) - CFLAGS="$SAVE_CFLAGS" - AC_MSG_RESULT([$ac_cv_try_cflags_ok]) - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - ifelse([$2],[],[:],[$2]) - else - ifelse([$3],[],[:],[$3]) - fi]) - -dnl CVT_YESNO([YES-NO VARIABLE],[0-1 VARIABLE]) -dnl Make a 0-1 output variable from a yes/no shell variable -AC_DEFUN(CVT_YESNO,[if test x"$$1" = x"yes"; then -$2=1 -else -$2=0 -fi -AC_SUBST($2)]) - -dnl Checks for system features -AC_CANONICAL_HOST - -dnl Checks for C compiler and sets CFLAGS if not set by user -user_cflags="$CFLAGS" -AC_PROG_CC -CFLAGS=$user_cflags -MORECFLAGS="" -dnl we need AC_SYS_LARGEFILE and AC_FUNC_FSEEKO -AC_SYS_LARGEFILE -if test x"$ac_cv_sys_file_offset_bits" = xno ; then - ac_cv_sys_file_offset_bits=0 -fi -AC_SUBST(ac_cv_sys_file_offset_bits) - -if test x"$user_cflags" = x"" -o x"$user_cflags" = x-m32 ; then - if test "$CC" = "icc" ; then - AC_TRY_CFLAGS([-O3],[CFLAGS="$CFLAGS -O3"]); - if test x"$ac_cv_try_cflags_ok" = x"no"; then - AC_TRY_CFLAGS([-O2],[CFLAGS="$CFLAGS -O2"],[CFLAGS="$CFLAGS -O"]); - fi - else - AC_TRY_CFLAGS([-O4],[CFLAGS="$CFLAGS -O4"]); - if test x"$ac_cv_try_cflags_ok" = x"no"; then - AC_TRY_CFLAGS([-O3],[CFLAGS="$CFLAGS -O3"]); - if test x"$ac_cv_try_cflags_ok" = x"no"; then - AC_TRY_CFLAGS([-O2],[CFLAGS="$CFLAGS -O2"],[CFLAGS="$CFLAGS -O"]); - fi - fi - fi - - if test "$CC" = "gcc" ; then - gccver=`gcc --version 2>/dev/null || echo 0.0.0` - else - gccver=0.0.0 - fi - - case "$host" in - *i686-apple-darwin*) - AC_TRY_CFLAGS([-fast],[CFLAGS="$MORECFLAGS -fast"]);; - *pentium*solaris*) - ;; - *pentium4*) - AC_TRY_CFLAGS([-march=pentium4],[CFLAGS="$CFLAGS -march=pentium4"]);; - *pentium3*|*i686*|*athlon*|x86*) - AC_TRY_CFLAGS([-march=i686],[CFLAGS="$CFLAGS -march=i686"]);; - *pentium2*|*i586*) - AC_TRY_CFLAGS([-march=i586],[CFLAGS="$CFLAGS -march=i586"]);; - *powerpc*) - machtype=`/usr/bin/machine 2>/dev/null || echo unknown` - case "$machtype" in - ppc740?) - AC_TRY_CFLAGS([-mcpu=7400],[CFLAGS="$CFLAGS -mcpu=7400"]) - AC_TRY_CFLAGS([-mtune=7400],[CFLAGS="$CFLAGS -mtune=7400"]);; - ppc745?) - AC_TRY_CFLAGS([-mcpu=7450],[CFLAGS="$CFLAGS -mcpu=7450"]) - AC_TRY_CFLAGS([-mtune=7450],[CFLAGS="$CFLAGS -mtune=7450"]) - case "$gccver" in - *\ 4.[[0-9]].[[0-9]]\ *) - AC_TRY_CFLAGS([$CFLAGS -fast], - [MORECFLAGS="$MORECFLAGS -fast"]);; - esac;; - ppc970) - AC_TRY_CFLAGS([-mcpu=g5],[CFLAGS="$CFLAGS -mcpu=g5"]) - AC_TRY_CFLAGS([-mtune=g5],[CFLAGS="$CFLAGS -mtune=g5"]) - AC_TRY_CFLAGS([-fast],[CFLAGS="$MORECFLAGS -fast"]);; - *) - AC_TRY_CFLAGS([-mpowerpc],[CFLAGS="$CFLAGS -mpowerpc"]);; - esac;; - *osf*) - AC_TRY_CFLAGS([-fast],[CFLAGS="$CFLAGS -fast"]);; - *sparcv8*|*sparcv9*) - AC_TRY_CFLAGS([-msupersparc],[CFLAGS="$CFLAGS -msupersparc"]) - if test x"$ac_cv_try_cflags_ok" = x"no"; then - AC_TRY_CFLAGS([-cg92],[CFLAGS="$CFLAGS -cg92"]) - if test x"$ac_cv_try_cflags_ok" = x"no"; then - AC_TRY_CFLAGS([-xcg92],[CFLAGS="$CFLAGS -xcg92"]) - fi - fi;; - esac -fi - -echo CFLAGS=$CFLAGS -echo MORECFLAGS=$MORECFLAGS - -dnl Checks relevant to Cygwin and other Windows things -AC_EXEEXT - -dnl Checks for header files. -dnl AC_HEADER_STDC -AC_HEADER_SYS_WAIT -AC_CHECK_HEADERS(signal.h stddef.h unistd.h sys/types.h sys/wait.h stdlib.h string.h errno.h pthread.h) -CVT_YESNO(ac_cv_header_stddef_h,header_stddef_h) -CVT_YESNO(ac_cv_header_unistd_h,header_unistd_h) -CVT_YESNO(ac_cv_header_stdlib_h,header_stdlib_h) -CVT_YESNO(ac_cv_header_string_h,header_string_h) -CVT_YESNO(ac_cv_header_sys_wait_h,header_sys_wait_h) -CVT_YESNO(ac_cv_header_sys_types_h,header_sys_types_h) -CVT_YESNO(ac_cv_header_errno_h,header_errno_h) -CVT_YESNO(ac_cv_header_pthread_h,header_pthread_h) -CVT_YESNO(ac_cv_header_signal_h,header_signal_h) - -AC_TYPE_PID_T -CVT_YESNO(ac_cv_type_pid_t,have_pid_t) - -AC_MSG_CHECKING(if malloc is declared in stdlib.h or malloc.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])malloc[^a-zA-Z_0-9]],stdlib.h, - malloc_dec=1,malloc_dec=0) -if test $malloc_dec -eq 0; then - AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])malloc[^a-zA-Z_0-9]],malloc.h, - malloc_dec=2,malloc_dec=0) -fi -AC_SUBST(malloc_dec) -AC_MSG_RESULT($malloc_dec) - -AC_MSG_CHECKING(if ftell is declared in stdio.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])ftell[^a-zA-Z_0-9]],stdio.h, - ftell_dec=1,ftell_dec=0) -AC_SUBST(ftell_dec) -AC_MSG_RESULT($ftell_dec) - -AC_MSG_CHECKING(if fdopen is declared in stdio.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])fdopen[^a-zA-Z_0-9]],stdio.h, - fdopen_dec=1,fdopen_dec=0) -AC_SUBST(fdopen_dec) -AC_MSG_RESULT($fdopen_dec) - -AC_MSG_CHECKING(if popen is declared in stdio.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])popen[^a-zA-Z_0-9]],stdio.h, - popen_dec=1,popen_dec=0) -AC_SUBST(popen_dec) -AC_MSG_RESULT($popen_dec) - -AC_MSG_CHECKING(if putenv is declared in stdlib.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])putenv[^a-zA-Z_0-9]],stdlib.h, - putenv_dec=1,putenv_dec=0) -AC_SUBST(putenv_dec) -AC_MSG_RESULT($putenv_dec) - -AC_MSG_CHECKING(if setenv is declared in stdlib.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])setenv[^a-zA-Z_0-9]],stdlib.h, - setenv_dec=1,setenv_dec=0) -AC_SUBST(setenv_dec) -AC_MSG_RESULT($setenv_dec) - -AC_MSG_CHECKING(if INFINITY is declared in math.h) -AC_EGREP_CPP(yes, -[#include -#include -#ifdef INFINITY - yes -#endif -], has_math_inf=1, has_math_inf=0) -AC_SUBST(has_math_inf) -AC_MSG_RESULT($has_math_inf) - -dnl Checks for sizes of integer types; avoid 64-bit if necessary -AC_CHECK_SIZEOF(int,4) -AC_SUBST(ac_cv_sizeof_int) -AC_CHECK_SIZEOF(long,4) -AC_SUBST(ac_cv_sizeof_long) -AC_CHECK_SIZEOF(long long,0) -AC_SUBST(ac_cv_sizeof_long_long) -lok=0 -testprogs="dreadtest dreadtestS dreadtestS1 dreadtest4K" -testprogs="$testprogs dreadtest1 dreadtestW dreadtestW1" -AC_SUBST(MORECFLAGS) - -if test $ac_cv_sizeof_long_long -eq 8; then - lok=1 - testprogs="$testprogs dreadtestL1 dreadtestL" -else - if test $ac_cv_sizeof_long -eq 8; then - lok=1 - fi -fi -AC_SUBST(lok) -AC_SUBST(testprogs) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -CVT_YESNO(ac_cv_c_const,have_const) - -dnl Checks for library functions. -AC_CHECK_FUNC(isatty,have_isatty=1,have_isatty=0) -AC_SUBST(have_isatty) -AC_CHECK_FUNC(times,have_times=1,have_times=0) -AC_SUBST(have_times) -AC_CHECK_FUNC(time,have_time=1,have_time=0) -AC_SUBST(have_time) -AC_CHECK_FUNC(gettimeofday,have_gettimeofday=1,have_gettimeofday=0) -AC_SUBST(have_gettimeofday) -AC_CHECK_FUNC(times,have_times=1,have_times=0) -AC_SUBST(have_times) -AC_CHECK_FUNC(getrusage,have_getrusage=1,have_getrusage=0) -AC_SUBST(have_getrusage) -AC_CHECK_FUNC(perror,have_perror=1,have_perror=0) -AC_SUBST(have_perror) -AC_CHECK_FUNC(pipe,have_pipe=1,have_pipe=0) -AC_SUBST(have_pipe) -AC_CHECK_FUNC(wait,have_wait=1,have_wait=0) -AC_SUBST(have_wait) -AC_CHECK_FUNC(popen,have_popen=1,have_popen=0) -AC_SUBST(have_popen) -AC_CHECK_FUNC(putenv,have_putenv=1,have_putenv=0) -AC_SUBST(have_putenv) -AC_CHECK_FUNC(setenv,have_setenv=1,have_setenv=0) -AC_SUBST(have_setenv) -AC_FUNC_FORK -CVT_YESNO(ac_cv_func_fork,have_fork) -AC_SUBST(have_fork) -AC_CHECK_FUNC(fseeko,have_fseeko=1,have_fseeko=0) -AC_SUBST(have_fseeko) -AC_CHECK_FUNC(sigaction,have_sigaction=1,have_sigaction=0) -AC_SUBST(have_sigaction) -AC_CHECK_FUNC(sigprocmask,have_sigprocmask=1,have_sigprocmask=0) -AC_SUBST(have_sigprocmask) - -dnl --disable-clz disables the use of gcc extensions __builtin_clz*() - -AC_ARG_ENABLE([clz], - AS_HELP_STRING([--disable-clz], [Disable clz extensions]), [clzarg=given], [clzarg=notgiven]) -AS_IF([test "x$clzarg" = "xnotgiven" -o "x$enable_clz" = "xyes"], [ -AC_MSG_CHECKING(if __builtin_clz() is supported) -AC_LINK_IFELSE([AC_LANG_SOURCE([main(){unsigned int x; x = __builtin_clz(x);}])], [have_clz=1], [have_clz=0]) -AC_MSG_RESULT($have_clz) -AC_MSG_CHECKING(if __builtin_clzl() is supported) -AC_LINK_IFELSE([AC_LANG_SOURCE([main(){unsigned long x; x = __builtin_clzl(x);}])], [have_clzl=1], [have_clzl=0]) -AC_MSG_RESULT($have_clzl) -AC_MSG_CHECKING(if __builtin_clzll() is supported) -AC_LINK_IFELSE([AC_LANG_SOURCE([main(){unsigned long long x; x = __builtin_clzll(x);}])], [have_clzll=1], [have_clzll=0]) -AC_MSG_RESULT($have_clzll) -],[ -have_clz=0 -have_clzl=0 -have_clzll=0 -]) -AC_SUBST(have_clz) -AC_SUBST(have_clzl) -AC_SUBST(have_clzll) - -AC_CHECK_FUNC(pthread_create,have_pthread=1,have_pthread=0) -if test $have_pthread -eq 1 ; then - threadlib= -else - AC_CHECK_LIB(pthread,pthread_create,have_pthread=1,have_pthread=0) - if test $have_pthread -eq 1 ; then - threadlib=-lpthread - else - threadlib= - fi -fi - -if test $have_pipe -eq 1 -a $have_wait -eq 1 -a $have_fork -eq 1 ; then - shortg=1 - shortg_or_null=shortg -else - shortg=0 - shortg_or_null= -fi -AC_SUBST(shortg_or_null) - -AC_SUBST(have_pthread) -AC_SUBST(threadlib) - -AC_CHECK_FUNC(getc_unlocked,have_getc_unlocked=1,have_getc_unlocked=0) -AC_CHECK_FUNC(flockfile,have_flockfile=1,have_flockfile=0) -if test $have_getc_unlocked -eq 1 -a $have_flockfile -eq 1 ; then - stdio_nolock=1 -else - stdio_nolock=0 -fi -AC_SUBST(stdio_nolock) - -dnl --enable-tls enables tests for thread-local attributes -AC_ARG_ENABLE([tls], - AS_HELP_STRING([--enable-tls], [Enable thread-local variables])) -AS_IF([test "x$enable_tls" = "xyes"], [ -AX_TLS([have_tls=1],[have_tls=0]) -],[have_tls=0]) - -if test "$have_tls" -eq 0 ; then - ac_cv_tls= -fi -AC_SUBST(ac_cv_tls) -AC_SUBST(have_tls) - -dnl --enable-wordsize=value overrides default rule for choosing WORDSIZE -AC_ARG_ENABLE([wordsize], - AS_HELP_STRING([--enable-wordsize=value], [Override default WORDSIZE choice])) -AS_IF([test "x$enable_wordsize" = "x16"],[default_wordsize=16],[default_wordsize=0]) -AS_IF([test "x$enable_wordsize" = "x32"],[default_wordsize=32],[]) -AS_IF([test "x$enable_wordsize" = "x64"],[default_wordsize=64],[]) -AC_SUBST(default_wordsize) - -dnl --enable-ansicontrols enables ANSI terminal control sequences -AC_ARG_ENABLE([ansicontrols], - AS_HELP_STRING([--enable-ansicontrols], [Enable ANSI terminal control sequences])) -AS_IF([test "x$enable_ansicontrols" = "xyes"],[have_ansicontrols=1],[have_ansicontrols=0]) -AC_SUBST(have_ansicontrols) - -case "$build" in - *cygwin*) - AC_PATH_PROGS(sort_prog,[gsort sort],no_sort_found, - [/usr/bin$PATH_SEPARATOR/bin$PATH_SEPARATOR$PATH]) ;; - *) - AC_CHECK_PROGS(sort_prog,[gsort sort],no_sort_found) ;; -esac - -AC_MSG_CHECKING(if sort supports the -k switch) -if { $sort_prog -k "2,3" /dev/null 2>&1 ; } ; then - sort_newparams_ok=1 -else - sort_newparams_ok=0 -fi -AC_SUBST(sort_newparams_ok) -AC_MSG_RESULT($sort_newparams_ok) - -edit_msg="++++++ This file is automatically generated, don't edit it by hand! ++++++" -AC_SUBST(edit_msg) - -AC_OUTPUT(makefile:makefile.in nauty.h:nauty-h.in - naututil.h:naututil-h.in gtools.h:gtools-h.in) - diff --git a/tools/nauty25r9_mac/copyg b/tools/nauty25r9_mac/copyg deleted file mode 100644 index bc5cf9dc96ee71b2cfeed8903ca7ed92a7453100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36380 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≫VtnKN5vnJ;> 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 diff --git a/tools/nauty25r9_mac/copyg.c b/tools/nauty25r9_mac/copyg.c deleted file mode 100644 index a8d1c01..0000000 --- a/tools/nauty25r9_mac/copyg.c +++ /dev/null @@ -1,156 +0,0 @@ -/* copyg.c version 1.0; B D McKay, Jan 1997 */ - -#define USAGE "copyg [-gsfp#:#qhx] [infile [outfile]]" - -#define HELPTEXT \ -" Copy a file of graphs with possible format conversion.\n\ -\n\ - -g Use graph6 format for output\n\ - -s Use sparse6 format for output\n\ - In the absence of -g and -s, the format depends on \n\ - the header or, if none, the first input line.\n\ -\n\ - -p# -p#:# \n\ - Specify range of input lines (first is 1)\n\ - -f With -p, assume input lines of fixed length\n\ - (ignored if header or first line has sparse6 format).\n\ -\n\ - -h Write a header.\n\ - -x Don't write a header.\n\ - In the absence of -h and -x, a header is written if\n\ - there is one in the input.\n\ -\n\ - -q Suppress auxiliary output.\n" - -/***********************************************************************/ - -#include "gtools.h" - -int -main(int argc, char *argv[]) -{ - graph *g; - int m,n,codetype; - char *infilename,*outfilename; - FILE *infile,*outfile; - int outcode; - nauty_counter nin; - int argnum,j; - char *arg,sw; - boolean sswitch,fswitch,pswitch,qswitch,gswitch; - boolean hswitch,xswitch; - boolean badargs; - long pval1,pval2,maxin; - - HELP; - - sswitch = fswitch = pswitch = FALSE; - gswitch = qswitch = xswitch = hswitch = FALSE; - infilename = outfilename = NULL; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('s',sswitch) - else SWBOOLEAN('g',gswitch) - else SWBOOLEAN('q',qswitch) - else SWBOOLEAN('f',fswitch) - else SWBOOLEAN('h',hswitch) - else SWBOOLEAN('x',xswitch) - else SWRANGE('p',":-",pswitch,pval1,pval2,"copyg -p") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (sswitch && gswitch) - gt_abort(">E copyg: -s and -g are incompatible\n"); - if (hswitch && xswitch) - gt_abort(">E copyg: -h and -x are incompatible\n"); - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!qswitch) - { - fprintf(stderr,">A copyg"); - if (sswitch || gswitch || fswitch || pswitch || xswitch || hswitch) - fprintf(stderr," -"); - if (sswitch) fprintf(stderr,"s"); - if (gswitch) fprintf(stderr,"g"); - if (hswitch) fprintf(stderr,"h"); - if (xswitch) fprintf(stderr,"x"); - if (fswitch) fprintf(stderr,"f"); - if (pswitch) writerange(stderr,'p',pval1,pval2); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,fswitch, - pswitch ? pval1 : 1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (sswitch || (!gswitch && (codetype&SPARSE6))) outcode = SPARSE6; - else outcode = GRAPH6; - - if (hswitch || (!xswitch && (codetype&HAS_HEADER))) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nin = 0; - if (!pswitch || pval2 == NOLIMIT) - maxin = NOLIMIT; - else if (pval1 < 1) maxin = pval2; - else maxin = pval2 - pval1 + 1; - while (nin < maxin || maxin == NOLIMIT) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - if (outcode == readg_code) writelast(outfile); - else if (outcode == SPARSE6) writes6(outfile,g,m,n); - else writeg6(outfile,g,m,n); - FREES(g); - } - - if (!qswitch) - fprintf(stderr,">Z " COUNTER_FMT " graphs copied from %s to %s\n", - nin,infilename,outfilename); - - exit(0); -} diff --git a/tools/nauty25r9_mac/countg b/tools/nauty25r9_mac/countg deleted file mode 100644 index 73785d9aa719c6c6fdf53d040715381d003fc251..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166544 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

    XH*A6MKpH*6Q*R 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�QzMP%THcyoP@&og7^ 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 deledgeg -d") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A deledgeg"); - if (dolabel) fprintf(stderr," -l"); - if (dswitch) fprintf(stderr," -d%d",mindeg); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - if (!dswitch) mindeg = 0; - - if (dolabel) nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = nout = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - -#if !MAXN - DYNALLOC1(int,deg,deg_sz,n,"deledgeg"); -#endif - - actmindeg = n; - for (v = 0, gv = g; v < n; ++v, gv += m) - { - degv = 0; - for (i = 0; i < m; ++i) - degv += POPCOUNT(gv[i]); - if (degv < actmindeg) actmindeg = degv; - deg[v] = degv; - } - - if (actmindeg < mindeg) continue; - - for (v = 0, gv = g; v < n; ++v, gv += m) - { - if (deg[v] <= mindeg) continue; - - for (w = v; (w = nextelement(gv,m,w)) >= 0; ) - { - if (deg[w] <= mindeg) continue; - - gw = GRAPHROW(g,w,m); - DELELEMENT(gv,w); - DELELEMENT(gw,v); - gq = g; - - if (dolabel) - { -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"deledgeg"); -#endif - fcanonise(g,m,n,h,NULL,FALSE); /* FIXME (loops) */ - gq = h; - } - if (outcode == SPARSE6) writes6(outfile,gq,m,n); - else writeg6(outfile,gq,m,n); - ++nout; - ADDELEMENT(gv,w); - ADDELEMENT(gw,v); - } - } - FREES(g); - } - t = CPUTIME - t; - - if (!quiet) - fprintf(stderr, - ">Z " COUNTER_FMT " graphs read from %s, " - COUNTER_FMT " written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_mac/directg b/tools/nauty25r9_mac/directg deleted file mode 100644 index 35995c3c90a1ad14669bdd30336f69f8aa2a2860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132184 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 AZvX%Q diff --git a/tools/nauty25r9_mac/directg.c b/tools/nauty25r9_mac/directg.c deleted file mode 100644 index df33e30..0000000 --- a/tools/nauty25r9_mac/directg.c +++ /dev/null @@ -1,658 +0,0 @@ -/* directg.c version 1.7; B D McKay, May 22, 2011 */ - -#define USAGE \ - "directg [-q] [-u|-T|-G] [-V] [-o] [-f#] [-e#|-e#:#] [infile [outfile]]" - -#define HELPTEXT \ -" Read undirected graphs and orient their edges in all possible ways.\n\ - Edges can be oriented in either or both directions (3 possibilities).\n\ - Isomorphic directed graphs derived from the same input are suppressed.\n\ - If the input graphs are non-isomorphic then the output graphs are also.\n\ -\n\ - -e# | -e#:# specify a value or range of the total number of arcs\n\ - -o orient each edge in only one direction, never both\n\ - -f# Use only the subgroup that fixes the first # vertices setwise\n\ -\n\ - -T use a simple text output format (nv ne edges) instead of digraph6\n\ - -G like -T but includes group size as third item (if less than 10^10)\n\ - The group size does not include exchange of isolated vertices.\n\ - -V only output graphs with nontrivial groups (including exchange of\n\ - isolated vertices). The -f option is respected.\n\ - -u no output, just count them\n\ - -q suppress auxiliary information\n" - -/* NOTE: Do not use nauty1.* for this program! */ - -/*************************************************************************/ - -#include "gtools.h" -#include "naugroup.h" - -nauty_counter dg_nin,gd_ngen,dg_nout; - -FILE *outfile; - -#define MAXNV 128 -#define MAXNE 1024 -static int v0[MAXNE],v1[MAXNE]; -static int edgeno[MAXNV][MAXNV]; - -#define MAXME ((2*MAXNE+WORDSIZE-1)/WORDSIZE) - -static set x[MAXME]; -static int ix[2*MAXNE],nix; -static boolean first; -static int me; -static int lastreject[MAXNV]; -static boolean lastrejok; -static int rejectlevel; -static unsigned long groupsize; -static unsigned long newgroupsize; -static boolean Gswitch,Vswitch,ntgroup,ntisol; - -/* DEGPRUNE feature - * - * If DEGPRUNE is defined it must have a value equal to the name of a - * procedure to be supplied by the user and linked to this program. - * The prototype must be - * int DEGPRUNE(int *indeg, int outdeg*, int v, int n) - * Here n is the number of vertices altogether, and v (0..n-1) is the - * number of one vertex. At this point in the program, some directed - * edges have been inserted, and the indegrees and outdegrees have the - * values given in indeg[] and outdeg[]. Moreover, it is known that - * no further edges will be added to or from v, so indeg[v] and outdeg[v] - * are final. If DEGPRUNE returns a non-zero value, this branch of the - * search will be abandoned. - * Before any graph is output, DEGPRUNE will have been called for every - * vertex, but it cannot be assumed that DEGPRUNE will be called in order - * of vertex number. - */ - -/* PROCESS feature - * - * If PROCESS is defined, it must expand as the name of a procedure - * with prototype like void PROCESS(FILE *f, graph *g, int n). This - * procedure will be called for each output graph before it is output, - * with f being the output file (possibly NULL). - * It is an error if n > WORDSIZE. - */ - -/* SUMMARY feature - * - * If SUMMARY is defined, it must expand as the name of a procedure - * with prototype void SUMMARY(void). It is called at the end before - * the normal summary (which can be suppressed with -q). The numbers of - * graphs read and digraphs produced are available in the global variables - * dg_nin and dg_nout (type nauty_counter). - */ - -#ifdef DEGPRUNE -static int lastlev[MAXNV],indeg[MAXNV],outdeg[MAXNV]; -extern int DEGPRUNE(int*,int*,int,int); -#endif - -#ifdef PROCESS -extern void PROCESS(FILE*,graph*,int); -#endif - -#ifdef SUMMARY -extern void SUMMARY(void); -#endif - -/* #define GROUPTEST */ -#ifdef GROUPTEST -static long long totallab; -#endif - -/**************************************************************************/ - -void -writeautom(int *p, int n) -/* Called by allgroup. */ -{ - int i; - - for (i = 0; i < n; ++i) printf(" %2d",p[i]); - printf("\n"); -} - -/**************************************************************************/ - -static boolean -ismax(int *p, int n) -/* test if x^p <= x */ -{ - int i,j,k; - set px[MAXME]; - - EMPTYSET(px,me); - - for (j = 0; j < nix; ++j) - { - i = ix[j]; - k = i >> 1; - if (i & 1) ADDELEMENT(px,edgeno[p[v1[k]]][p[v0[k]]]); - else ADDELEMENT(px,edgeno[p[v0[k]]][p[v1[k]]]); - - if (px[0] > x[0]) - { - rejectlevel = k; - return FALSE; - } - } - - rejectlevel = MAXNE+1; - - if (px[0] < x[0]) return TRUE; - - for (i = 1; i < me; ++i) - if (px[i] > x[i]) return FALSE; - else if (px[i] < x[i]) return TRUE; - - ++newgroupsize; - ntgroup = TRUE; - return TRUE; -} - -/**************************************************************************/ - -void -testmax(int *p, int n, int *abort) -/* Called by allgroup2. */ -{ - int i; - - if (first) - { /* only the identity */ - first = FALSE; - return; - } - - if (!ismax(p,n)) - { - *abort = 1; - for (i = 0; i < n; ++i) lastreject[i] = p[i]; - lastrejok = TRUE; - } -} - -/**************************************************************************/ - -static int -trythisone(grouprec *group, int ne, int n) -{ - int i,k; - boolean accept; -#ifdef PROCESS - graph g[WORDSIZE]; -#endif - - first = TRUE; - - ++gd_ngen; - nix = ne; - newgroupsize = 1; - ntgroup = FALSE; - - if (!group || groupsize == 1) - accept = TRUE; - else if (lastrejok && !ismax(lastreject,n)) - accept = FALSE; - else if (lastrejok && groupsize == 2) - accept = TRUE; - else - { - newgroupsize = 1; - ntgroup = FALSE; - if (allgroup2(group,testmax) == 0) - accept = TRUE; - else - accept = FALSE; - } - - if (accept) - { - -#ifdef GROUPTEST - if (groupsize % newgroupsize != 0) - gt_abort("group size error\n"); - totallab += groupsize/newgroupsize; -#endif - - if (Vswitch && !ntisol && !ntgroup) return MAXNE+1; - - ++dg_nout; - -#ifdef PROCESS - EMPTYSET(g,n); - for (i = -1; (i = nextelement(x,me,i)) >= 0; ) - { - k = i >> 1; - if (i & 1) g[v1[k]] |= bit[v0[k]]; - else g[v0[k]] |= bit[v1[k]]; - } - PROCESS(outfile,g,n); -#endif - - if (outfile) - { - fprintf(outfile,"%d %d",n,ne); - if (Gswitch) fprintf(outfile," %lu",newgroupsize); - - for (i = -1; (i = nextelement(x,me,i)) >= 0; ) - { - k = i >> 1; - if (i & 1) fprintf(outfile," %d %d",v1[k],v0[k]); - else fprintf(outfile," %d %d",v0[k],v1[k]); - } - fprintf(outfile,"\n"); - } - return MAXNE+1; - } - else - return rejectlevel; -} - -/**************************************************************************/ - -static int -scan(int level, int ne, int minarcs, int maxarcs, int sofar, - boolean oriented, grouprec *group, int n) -/* Main recursive scan; returns the level to return to. */ -{ - int k,retlev; -#ifdef DEGPRUNE - int w0,w1; - - w0 = v0[level]; - w1 = v1[level]; -#endif - - if (level == ne) - { - retlev = trythisone(group,sofar,n); - return retlev; - } - - if (oriented || sofar + 1 + 2*(ne - level - 1) >= minarcs) - { - k = 2*level; - ADDELEMENT(x,k); - ix[sofar] = k; -#ifdef DEGPRUNE - ++outdeg[w0]; ++indeg[w1]; - if (lastlev[w0] == level && DEGPRUNE(indeg,outdeg,w0,n) - || lastlev[w1] == level && DEGPRUNE(indeg,outdeg,w1,n)) - retlev = level; - else -#endif - retlev = scan(level+1,ne,minarcs,maxarcs,sofar+1,oriented,group,n); - DELELEMENT(x,k); -#ifdef DEGPRUNE - --outdeg[w0]; --indeg[w1]; -#endif - if (retlev < level) return retlev; - ++k; - ADDELEMENT(x,k); - ix[sofar] = k; -#ifdef DEGPRUNE - ++outdeg[w1]; ++indeg[w0]; - if (lastlev[w0] == level && DEGPRUNE(indeg,outdeg,w0,n) - || lastlev[w1] == level && DEGPRUNE(indeg,outdeg,w1,n)) - retlev = level; - else -#endif - retlev = scan(level+1,ne,minarcs,maxarcs,sofar+1,oriented,group,n); - DELELEMENT(x,k); -#ifdef DEGPRUNE - --outdeg[w1]; --indeg[w0]; -#endif - if (retlev < level) return retlev; - } - - if (!oriented && sofar + 2 + ne - level - 1 <= maxarcs) - { - k = 2*level; - ADDELEMENT(x,k); - ADDELEMENT(x,k+1); - ix[sofar] = k; - ix[sofar+1] = k+1; -#ifdef DEGPRUNE - ++indeg[w0]; ++indeg[w1]; - ++outdeg[w0]; ++outdeg[w1]; - if (lastlev[w0] == level && DEGPRUNE(indeg,outdeg,w0,n) - || lastlev[w1] == level && DEGPRUNE(indeg,outdeg,w1,n)) - retlev = level; - else -#endif - retlev = scan(level+1,ne,minarcs,maxarcs,sofar+2,oriented,group,n); - DELELEMENT(x,k+1); - DELELEMENT(x,k); -#ifdef DEGPRUNE - --indeg[w0]; --indeg[w1]; - --outdeg[w0]; --outdeg[w1]; -#endif - if (retlev < level) return retlev; - } - - return level-1; -} - -/**************************************************************************/ - -static void -direct(graph *g, int nfixed, long minarcs, long maxarcs, - boolean oriented, int m, int n) -{ - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - setword workspace[100]; - grouprec *group; - long ne; - int i,j,k,j0,j1,deg; - int isol0,isol1; /* isolated vertices before and after nfixed */ - set *gi; - int lab[MAXNV],ptn[MAXNV],orbits[MAXNV]; - set active[(MAXNV+WORDSIZE-1)/WORDSIZE]; - - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - j0 = -1; /* last vertex with degree 0 */ - j1 = n; /* first vertex with degree > 0 */ - isol0 = isol1 = 0; - - ne = 0; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - deg = 0; - for (j = 0; j < m; ++j) deg += POPCOUNT(gi[j]); - if (deg == 0) - { - lab[++j0] = i; - if (i < nfixed) ++isol0; else ++isol1; - } - else - lab[--j1] = i; - ne += deg; - } - ne /= 2; - ntisol = (isol0 >= 2 || isol1 >= 2); - - me = (2*ne + WORDSIZE - 1) / WORDSIZE; - if (me == 0) me = 1; - EMPTYSET(x,me); - -#ifdef DEGPRUNE - for (i = 0; i < n; ++i) indeg[i] = outdeg[i] = 0; -#endif - if (ne == 0 && minarcs <= 0 && (!Vswitch || ntisol)) - { -#ifdef DEGPRUNE - for (i = 0; i < n; ++i) - if (DEGPRUNE(indeg,outdeg,i,n)) break; - if (i == n) -#endif - trythisone(NULL,0,n); - return; - } - - if (oriented) - { - if (maxarcs < ne || minarcs > ne) return; - } - else - { - if (maxarcs < ne || minarcs > 2*ne) return; - } - - if (n > MAXNV || ne > MAXNE) - { - fprintf(stderr,">E directg: MAXNV or MAXNE exceeded\n"); - exit(1); - } - - for (i = 0; i < n; ++i) ptn[i] = 1; - ptn[n-1] = 0; - EMPTYSET(active,m); - ADDELEMENT(active,0); - - for (i = 0; i <= j0; ++i) - { - if (i < n-1) ADDELEMENT(active,i+1); - ptn[i] = 0; - } - - for (i = j0+1; i < n; ++i) - if (lab[i] < nfixed) break; - - if (i != j0+1 && i != n) - { - ptn[i-1] = 0; - ADDELEMENT(active,i); - } - - options.defaultptn = FALSE; - options.userautomproc = groupautomproc; - options.userlevelproc = grouplevelproc; - - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,100,m,n,NULL); - - if (stats.grpsize2 == 0) - groupsize = stats.grpsize1 + 0.1; - else - groupsize = 0; - - if (Vswitch && groupsize == 1 && !ntisol) return; - - group = groupptr(FALSE); - makecosetreps(group); - -#ifdef DEGPRUNE - for (i = 0; i <= j0; ++i) - if (DEGPRUNE(indeg,outdeg,lab[i],n)) return; -#endif - - k = 0; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - for (j = i; (j = nextelement(gi,m,j)) >= 0; ) - { - v0[k] = i; - v1[k] = j; -#ifdef DEGPRUNE - lastlev[i] = lastlev[j] = k; -#endif - edgeno[i][j] = 2*k; - edgeno[j][i] = 2*k+1; - ++k; - } - } - - lastrejok = FALSE; - - scan(0,ne,minarcs,maxarcs,0,oriented,group,n); -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - graph *g; - int m,n,codetype; - int argnum,j,nfixed; - char *arg,sw; - boolean badargs; - boolean Tswitch,uswitch,eswitch,qswitch,oswitch,fswitch; - long minarcs,maxarcs; - double t; - char *infilename,*outfilename; - FILE *infile; - char msg[201]; - int msglen; - - HELP; - -/* Put 2 in the following to catch incorrect uses of naut*1. */ - nauty_check(WORDSIZE,2,2*WORDSIZE,NAUTYVERSIONID); - - Tswitch = Gswitch = fswitch = Vswitch = FALSE; - uswitch = eswitch = oswitch = qswitch = FALSE; - infilename = outfilename = NULL; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('o',oswitch) - else SWBOOLEAN('q',qswitch) - else SWBOOLEAN('u',uswitch) - else SWBOOLEAN('T',Tswitch) - else SWBOOLEAN('G',Gswitch) - else SWBOOLEAN('V',Vswitch) - else SWINT('f',fswitch,nfixed,"directg -f") - else SWRANGE('e',":-",eswitch,minarcs,maxarcs,"directg -e") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if ((Gswitch!=0) + (Tswitch!=0) + (uswitch!=0) >= 2) - gt_abort(">E directg: -G, -T and -u are incompatible\n"); - - if (!Tswitch && !Gswitch && !uswitch) - gt_abort( - ">E directg: digraph6 output is unimplemented; use -T or -G\n"); - - if (!eswitch) - { - minarcs = 0; - maxarcs = NOLIMIT; - } - - if (!fswitch) nfixed = 0; - - if (!qswitch) - { - msg[0] = '\0'; - CATMSG0(">A directg"); - if (eswitch || oswitch || uswitch || fswitch) CATMSG0(" -"); - if (oswitch) CATMSG0("o"); - if (uswitch) CATMSG0("u"); - if (Tswitch) CATMSG0("T"); - if (Gswitch) CATMSG0("G"); - if (Vswitch) CATMSG0("V"); - if (fswitch) CATMSG1("f%d",nfixed); - if (eswitch) CATMSG2("e%ld:%ld",minarcs,maxarcs); - msglen = strlen(msg); - if (argnum > 0) msglen += strlen(infilename); - if (argnum > 1) msglen += strlen(outfilename); - if (msglen >= 196) - { - fputs(msg,stderr); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - } - else - { - if (argnum > 0) CATMSG1(" %s",infilename); - if (argnum > 1) CATMSG1(" %s",outfilename); - CATMSG0("\n"); - fputs(msg,stderr); - } - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (uswitch) - outfile = NULL; - else - { - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - } - - dg_nin = 0; - gd_ngen = 0; - dg_nout = 0; - - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; -#ifdef PROCESS - if (m > 1) - { - fprintf(stderr,">E m=1 is needed if PROCESS is defined\n"); - exit(1); - } -#endif - ++dg_nin; - direct(g,nfixed,minarcs,maxarcs,oswitch,m,n); - if (!uswitch && ferror(outfile)) - gt_abort(">E directg output error\n"); - FREES(g); - } - t = CPUTIME - t; - -#ifdef SUMMARY - SUMMARY(); -#endif - - if (!qswitch) - { - fprintf(stderr,">Z "); - PRINT_COUNTER(stderr,dg_nin); - fprintf(stderr," graphs read from %s",infilename); - /* fprintf(stderr,"; "); - PRINT_COUNTER(stderr,gd_ngen); - fprintf(stderr,"; %lu digraphs tested",gd_ngen); */ - fprintf(stderr,"; "); - PRINT_COUNTER(stderr,dg_nout); - if (!uswitch) - fprintf(stderr," digraphs written to %s",outfilename); - else - fprintf(stderr," digraphs generated"); - fprintf(stderr,"; %.2f sec\n",t); - } - -#ifdef GROUPTEST - fprintf(stderr,"Group test = %lld\n",totallab); -#endif - - exit(0); -} diff --git a/tools/nauty25r9_mac/dreadnaut b/tools/nauty25r9_mac/dreadnaut deleted file mode 100644 index a9ba20b6cde3fd1bf41e2a162de44fdb21812270..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380216 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 {xCPjJRvjJQ@tp19O})j7!S`=#>1as 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 diff --git a/tools/nauty25r9_mac/dreadnaut.c b/tools/nauty25r9_mac/dreadnaut.c deleted file mode 100644 index 7d1fcf9..0000000 --- a/tools/nauty25r9_mac/dreadnaut.c +++ /dev/null @@ -1,2237 +0,0 @@ -/***************************************************************************** -* * -* This is the main file for dreadnaut() version 2.5, which is a test-bed * -* for nauty() version 2.5. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* Traces is copyright Adolfo Piperno, 2008-2013. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 - replaced all uses of fscanf() by appropriate uses * -* of the new procedures readinteger() and readstring() * -* - changed the '<' command slightly. If a file of the * -* given name cannot be openned, an attempt is made to * -* open a file with the same name extended by DEFEXT. * -* - improved error processing for 'n' command. * -* 28-Sep-88 : changes for version 1.4 : * -* - replaced incorrect %d by %ld in fprintf for ? command * -* 23-Mar-89 : changes for version 1.5 : * -* - added optional startup message * -* - enabled use of refine1 in 'i' command * -* - implemented $$ command * -* - replaced ALLOCS test by DYNALLOC test * -* - modified @ command and added # command * -* - declared local procedures static * -* 25-Mar-89 - implemented k command * -* 27-Mar-89 - implemented * and I commands * -* 29-Mar-89 - implemented K command * -* 2-Apr-89 - added reporting of vertex-invariant statistics * -* 2-Apr-89 - added ## command * -* 4-Apr-89 - added triples(), quadruples(), adjtriang() * -* - updated error reporting for nauty() * -* 5-Apr-89 - removed flushline() from g and e commands * -* - added T command * -* 6-Apr-89 - added cellquads() and distances() * -* 26-Apr-89 - modified ? command, added & and && commands * -* - added indsets(), cliques(), cellquins() * -* 18-Aug-89 - made g, lab, canong dynamically allocated always * -* 2-Mar-90 - added celltrips(), cellcliq(), cellind() * -* 13-Mar-90 - changed canong and savedg in output to h and h' * -* 19-Mar-90 - revised help() a little * -* 19-Apr-90 : changes for version 1.6 * -* - rewrote "*" command to avoid bug in Pyramid C compiler * -* 20-Apr-90 - rewrote above rewrite to avoid bug in SUN3 gcc * -* 23-Apr-90 - undid above rewrite and fixed *my* bug by * -* making NUMINVARS have type int. Sorry, gcc. * -* 10-Nov-90 - added calls to null routines (see comment on code) * -* 27-Aug-92 : renamed to version 1.7, no changes to this file * -* 5-Jun-93 : renamed to version 1.7+, no changes to this file * -* 18-Aug-93 : renamed to version 1.8, no changes to this file * -* 17-Sep-93 : changes for version 1.9 : * -* - added invariant adjacencies() * -* 7-Jun-96 : changes for version 2.0 : * -* - added invariants cellfano() and cellfano2() * -* - made y=10 the default * -* 11-Jul-96 - added dynamic allocation * -* - rewrote h command and added H command * -* - implemented M and R commands * -* 15-Aug-96 - changed z command to use sethash() * -* 30-Aug-96 - no need to declare seed; already in naututil.h * -* 12-Sep-96 - let i and I commands use userrefproc * -* 9-Dec-96 - made y=infinity the default * -* 6-Sep-97 - allocated arrays before accepting commands * -* 7-Sep-97 - make g,canong,savedg 1-d arrays even statically * -* 22-Sep-97 - undid error introduced on 7-Sep (worksize) * -* 9-Jan-00 - used *_check() instead of *_null() * -* 12-Feb-00 - minor code formatting * -* 17-Aug-00 - now use tc_level from DEFAULTOPTIONS * -* 16-Nov-00 - made changes listed in nauty.h * -* 22-Apr-01 - include nautyinv.h * -* - improve worksize processing for MAXN=0 * -* 5-May-01 - k=0 1 automatic for *, also K=3 or K=0 * -* 2-Jun-01 - added __ command for digraph converse * -* 18-Oct-01 - moved WORKSIZE to here * -* 21-Nov-01 - use NAUTYREQUIRED in *_check() calls * -* 1-Sep-02 - Undid the previous change * -* 17-Nov-03 - Changed INFINITY to NAUTY_INFINITY * -* 15-Nov-04 - Completed all prototypes * -* 23-Nov-06 - no usertcellproc() any more in version 2.4 * -* 10-Nov-09 - removed types shortish and permutation * -* 17-Nov-09 - added sparsegraphs, schreier, A and G commands * -* 19-Nov-09 - added F command, stub for Traces * -* 1-Dec-09 - added traces refinement, M also applies to i * -* 16-Dec-09 - added sr# command for random regular graphs * -* 19-Dec-09 - added s# command for the sparse case * -* - w command is in units of 2*m now * -* 19-May-10 - Incorporate traces canonical labelling * -* 7-Jun-10 - implement %, _ and __ commands for sparse format * -* 8-Jun-10 - add O and P commands, and sparse && command * -* 11-Jun-10 - revise command-line parameters * -* 14-Jun-10 - digraphs and invariants (top level only) in Traces * -* 26-Oct-10 - fix u command for sparse graphs; default G=10 * -* 14-Mar-11 - store partition with savedg * -* 21-Jul-11 - extend M command * -* 24-Oct-11 - add S and OO commands * -* 15-Jan-12 - use putorbitsplus() if USE_ANSICONTROLS * -* 20-Sep-12 : the first argument of ungetc is int, not char * -* * -*****************************************************************************/ - -#include "gtools.h" /* which includes nauty.h, which includes stdio.h */ -#include "nautinv.h" -#include "schreier.h" -#include "traces.h" - -#define USAGE "dreadnaut [-o options]" - -#define HELPTEXT \ -" Enter nauty+traces test program.\n\ -\n\ - -o options - set initial options. The parameter value is a string of\n\ - dreadnaut commands from the following set:\n\ - a,c,d,m,p,l,G,P,w,y,$,A,V,M\n\ - The effect is the same as if these commands are entered\n\ - at the beginning of the standard input.\n\ - For help within dreadnaut, use the h command.\n" - -#define PM(x) ((x) ? '+' : '-') -#define SS(n,sing,plur) (n),((n)==1?(sing):(plur)) -#define WORKSIZE 60 - -#define SORT_OF_SORT 2 -#define SORT_NAME sort2ints -#include "sorttemplates.c" /* define sort2ints(a,b,n) */ - -#define INFILE fileptr[curfile] -#define SCHREIER_DEFAULT 10 - -static long seed; - -#if !MAXN -DYNALLSTAT(graph,g,g_sz); -DYNALLSTAT(graph,canong,canong_sz); -DYNALLSTAT(graph,savedg,savedg_sz); -DYNALLSTAT(setword,workspace,workspace_sz); -DYNALLSTAT(int,lab,lab_sz); -DYNALLSTAT(int,ptn,ptn_sz); -DYNALLSTAT(int,orbits,orbits_sz); -DYNALLSTAT(int,templab,templab_sz); -DYNALLSTAT(int,tempptn,tempptn_sz); -DYNALLSTAT(int,perm,perm_sz); -DYNALLSTAT(int,savedlab,savedlab_sz); -DYNALLSTAT(int,savedptn,savedptn_sz); -DYNALLSTAT(set,tempactive,tempactive_sz); -DYNALLSTAT(set,active,active_sz); -#else -static graph g[MAXM*1L*MAXN]; -static graph canong[MAXM*1L*MAXN]; -static graph savedg[MAXM*1L*MAXN]; -static setword workspace[MAXM*2L*WORKSIZE]; -static int lab[MAXN]; -static int ptn[MAXN]; -static int orbits[MAXN]; -static int savedlab[MAXN],savedptn[MAXN]; -static int perm[MAXN]; -static int templab[MAXN]; -static int tempptn[MAXN]; -static int tempactive[MAXM]; -static set active[MAXM]; -#endif - -static sparsegraph g_sg; -static sparsegraph canong_sg; -static sparsegraph savedg_sg; - -static DEFAULTOPTIONS_GRAPH(options); -static DEFAULTOPTIONS_SPARSEGRAPH(options_sg); -static statsblk stats; -static int curfile; -static FILE *fileptr[MAXIFILES]; -static FILE *outfile; -static char def_ext[] = DEFEXT; -static boolean firstpath; /* used in usernode() */ - -DEFAULTOPTIONS_TRACES(traces_opts); -static TracesStats traces_stats; - -#define TMP - -#define DENSE_MODE 0 -#define SPARSE_MODE 1 -#define TRACES_MODE 2 -#define SPARSEREP(mode) ((mode)==1||(mode)==2) -#define NOSPARSEYET(c) else if (SPARSEREP(mode)) { fprintf(ERRFILE,\ - "command %s is not implemented in the sparse case\n",c); } -#define NODENSEYET else if (!SPARSEREP(mode)) { fprintf(ERRFILE,\ - "command %c is not implemented in the dense case\n",c); } -#define NOTRACESYET if (mode==TRACES_MODE) { fprintf(ERRFILE,\ - "command %c is not implemented for Traces\n",c); } - -static int mode; - -#define U_NODE 1 /* masks for u values */ -#define U_AUTOM 2 -#define U_LEVEL 4 -#define U_TCELL 8 /* At version 2.4, usertcellproc() is gone */ -#define U_REF 16 - -#ifndef NODEPROC -#define NODEPROC usernode -#else -extern void NODEPROC(graph*,int*,int*,int,int,int,int,int,int); -#endif - -#ifndef AUTOMPROC -#define AUTOMPROC userautom -#else -extern void AUTOMPROC(int,int*,int*,int,int,int); -#endif - -#ifndef LEVELPROC -#define LEVELPROC userlevel -#else -extern void LEVELPROC(int*,int*,int,int*,statsblk*,int,int,int,int,int,int); -#endif - -#ifndef REFPROC -#define REFPROC NULL -#else -extern void REFPROC(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -#endif - -#ifndef INVARPROC -#define INVARPROC NULL -#define INVARPROCNAME "none" -#else -extern void INVARPROC(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -#define INVARPROCNAME "user-defined" -#endif - -#ifndef INVARPROC_SG -#define INVARPROC_SG NULL -#define INVARPROCNAME_SG "none" -#else -extern void INVARPROC_SG(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -#define INVARPROCNAME_SG "user-defined" -#endif - -static struct invarrec -{ - void (*entrypoint)(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); - char *name; - void (*entrypoint_sg)(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); - char *name_sg; -} invarproc[] - = {{INVARPROC, INVARPROCNAME, INVARPROC_SG, INVARPROCNAME_SG}, - {NULL, "none", NULL, "none"}, - {twopaths, "twopaths", NULL, "unavailable"}, - {adjtriang, "adjtriang", NULL, "unavailable"}, - {triples, "triples", NULL, "unavailable"}, - {quadruples, "quadruples", NULL, "unavailable"}, - {celltrips, "celltrips", NULL, "unavailable"}, - {cellquads, "cellquads", NULL, "unavailable"}, - {cellquins, "cellquins", NULL, "unavailable"}, - {distances, "distances", distances_sg, "distances_sg"}, - {indsets, "indsets", NULL, "unavailable"}, - {cliques, "cliques", NULL, "unavailable"}, - {cellcliq, "cellcliq", NULL, "unavailable"}, - {cellind, "cellind", NULL, "unavailable"}, - {adjacencies, "adjacencies", adjacencies_sg, "adjacencies_sg"}, - {cellfano, "cellfano", NULL, "unavailable"}, - {cellfano2, "cellfano2", NULL, "unavailable"}, - {refinvar, "refinvar", NULL, "unavailable"} - }; -#define NUMINVARS ((int)(sizeof(invarproc)/sizeof(struct invarrec))) - -static void help(FILE*, int); -static void userautom(int,int*,int*,int,int,int); -static void usernode(graph*,int*,int*,int,int,int,int,int,int); -static void userlevel(int*,int*,int,int*,statsblk*,int,int,int,int,int,int); - -static boolean options_writeautoms,options_writemarkers, - options_digraph,options_getcanon,options_linelength; -static int options_invarproc,options_mininvarlevel,options_maxinvarlevel, - options_invararg,options_tc_level,options_cartesian; -static int options_schreier,options_keepgroup,options_verbosity, - options_strategy; - -#if USE_ANSICONTROLS && !DREADTEST -#define PUTORBITS putorbitsplus -#else -#define PUTORBITS putorbits -#endif - -#ifdef EXTRADECLS -EXTRADECLS -#endif - -/***************************************************************************** -* * -* This is a program which illustrates the use of nauty. * -* Commands are read from stdin, and may be separated by white space, * -* commas or not separated. Output is written to stdout. * -* For a short description, see the nauty User's Guide. * -* * -*****************************************************************************/ - -int -main(int argc, char *argv[]) -{ - int m,n,newm,newn; - boolean gvalid,ovalid,cvalid,pvalid,minus,prompt,doquot; - boolean gvalid_sg,cvalid_sg; - int i,j,k,worksize,numcells,savednc,refcode,umask,qinvar; - int oldorg,oldmode; - boolean ranreg,same; - char *s1,*s2; - int c,d; - unsigned long uli; - size_t sli; - set *gp; - double timebefore,timeafter,mintime; - char filename[515]; - int sgn,sgorg,nperm; - int multiplicity,actmult; - long zseed; - permnode *generators; - char *ap,*parameters; - - HELP; - - if (argc == 3 && strcmp(argv[1],"-o") == 0) - parameters = argv[2]; - else if (argc != 1) - { - fprintf(ERRFILE,USAGE); - exit(1); - } - else - parameters = ""; - - mode = DENSE_MODE; - curfile = 0; - fileptr[curfile] = stdin; -#ifdef DREADTEST - prompt = FALSE; -#else - prompt = DOPROMPT(INFILE); -#endif - outfile = stdout; - options_writeautoms = options_writemarkers = TRUE; - options_digraph = FALSE; - options_getcanon = options.getcanon; - options_mininvarlevel = options.mininvarlevel; - options_maxinvarlevel = options.maxinvarlevel; - options_invararg = options.invararg; - options_invarproc = 1; /* index into invarproc[] */ - options_tc_level = options.tc_level; - options_cartesian = options.cartesian; - options_linelength = options.linelength; - options_schreier = SCHREIER_DEFAULT; - options_keepgroup = FALSE; - generators = NULL; - options_verbosity = 1; - options_strategy = 0; - - n = m = 1; - worksize = WORKSIZE; - -#if !MAXN - n = WORDSIZE; - DYNALLOC2(graph,g,g_sz,n,m,"dreadnaut"); - DYNALLOC1(int,lab,lab_sz,n,"dreadnaut"); - DYNALLOC1(int,ptn,ptn_sz,n,"dreadnaut"); - DYNALLOC1(int,orbits,orbits_sz,n,"dreadnaut"); - DYNALLOC1(int,perm,perm_sz,n,"dreadnaut"); - DYNALLOC1(set,active,active_sz,m,"dreadnaut"); - n = 1; -#endif - -#ifdef DREADTEST - seed = 1; - ran_init(seed); -#else -#ifdef INITSEED - INITSEED; - ran_init(seed); -#endif -#endif - - umask = 0; - pvalid = FALSE; - ovalid = FALSE; - gvalid = gvalid_sg = FALSE; /* at most one valid */ - cvalid = cvalid_sg = FALSE; /* at most one valid */ - sgorg = labelorg = oldorg = 0; - sgn = 0; - multiplicity = 1; - mintime = 0.0; - -#ifdef INITIALIZE - INITIALIZE; -#endif - - if (prompt) - { - fprintf(PROMPTFILE,"Dreadnaut version %s.\n",NAUTYVERSION); - fprintf(PROMPTFILE,"> "); - } - - nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - nautinv_check(WORDSIZE,1,1,NAUTYVERSIONID); - nautil_check(WORDSIZE,1,1,NAUTYVERSIONID); - naututil_check(WORDSIZE,1,1,NAUTYVERSIONID); - nausparse_check(WORDSIZE,1,1,NAUTYVERSIONID); - - SG_INIT(g_sg); - SG_INIT(canong_sg); - SG_INIT(savedg_sg); - - minus = FALSE; - for (ap = parameters; *ap != '\0'; ) - { - c = *ap++; - - switch (c) - { - case ' ': - case '\t': - break; - - case '-': - minus = TRUE; - break; - - case '+': - minus = FALSE; - break; - - case 'a': - options_writeautoms = !minus; - minus = FALSE; - break; - - case 'c': - options_getcanon = !minus; - minus = FALSE; - break; - - case 'm': - options_writemarkers = !minus; - minus = FALSE; - break; - - case 'p': - options_cartesian = !minus; - minus = FALSE; - break; - - case 'd': - options_digraph = !minus; - minus = FALSE; - break; - - case 'P': - options_keepgroup = !minus; - minus = FALSE; - break; - - case 'w': - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&worksize,"w"); -#if MAXN - if (worksize > 2*MAXM*WORKSIZE) - { - fprintf(ERRFILE, - "too big - setting worksize = %d\n",WORKSIZE); - worksize = WORKSIZE; - } -#endif - minus = FALSE; - break; - - case 'V': - if (minus) - { - options_verbosity = 0; - minus = FALSE; - } - else - { - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&i,"V"); - if (i < 0) fprintf(ERRFILE,"verbosity must be >= 0\n"); - else options_verbosity = i; - } - break; - - - case 'S': - if (minus) - { - options_strategy = 0; - minus = FALSE; - } - else - { - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&i,"S"); - if (i < 0) fprintf(ERRFILE,"strategy must be >= 0\n"); - else options_strategy = i; - } - break; - - case 'G': - if (minus) - { - options_schreier = 0; - minus = FALSE; - } - else - { - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&i,"G"); - if (i < 0) - fprintf(ERRFILE,"schreierfails must be >= 0\n"); - else - { - options_schreier = i; - if (i > 0) schreier_fails(i); - } - } - break; - - case 'y': - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&options_tc_level,"y"); - minus = FALSE; - break; - - case '$': - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&labelorg,"$"); - minus = FALSE; - break; - - case 'M': - if (minus) - { - multiplicity = 1; - mintime = 0.0; - minus = FALSE; - } - else - { - actmult = 0; - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&multiplicity,"M"); - if (*ap == '/') - { - ++ap; - arg_int(&ap,&actmult,"M/"); - } - if (multiplicity < 0) multiplicity = 0; - if (actmult < 0) actmult = 0; - if (multiplicity == 0 && actmult == 0) multiplicity = 1; - mintime = (double)actmult; - } - break; - - case 'l': - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&options_linelength,"l"); - minus = FALSE; - break; - - case 'A': - d = *ap++; - if (d == 'n' || d == 'N' || d == 'd' || d == 'D') - mode = DENSE_MODE; - else if (d == 's' || d == 'S') mode = SPARSE_MODE; - else if (d == 't' || d == 'T') mode = TRACES_MODE; - else - { - fprintf(ERRFILE,"Mode %c is unknown\n",(d?d:'0')); - break; - } - minus = FALSE; - break; - - default: - fprintf(ERRFILE,"Illegal initialization command %c\n",c); - exit(1); - } - } - - minus = FALSE; - while (curfile >= 0) - if ((c = getc(INFILE)) == EOF || c == '\004') - { - fclose(INFILE); - --curfile; - if (curfile >= 0) prompt = DOPROMPT(INFILE); - } - else switch (c) - { - case '\n': /* possibly issue prompt */ - if (prompt) - fprintf(PROMPTFILE,"> "); - minus = FALSE; - break; - - case ' ': /* do nothing */ - case '\t': -#ifndef NLMAP - case '\r': -#endif - case '\f': - break; - - case '-': /* remember this for next time */ - minus = TRUE; - break; - - case '+': /* forget - */ - case ',': - case ';': - minus = FALSE; - break; - - case '<': /* new input file */ - minus = FALSE; - if (curfile == MAXIFILES - 1) - fprintf(ERRFILE,"exceeded maximum input nesting of %d\n", - MAXIFILES); - if (!readstring(INFILE,filename,513)) - { - fprintf(ERRFILE, - "missing file name on '>' command : ignored\n"); - break; - } - if ((fileptr[curfile+1] = fopen(filename,"r")) == NULL) - { - for (s1 = filename; *s1 != '\0'; ++s1) {} - for (s2 = def_ext; (*s1 = *s2) != '\0'; ++s1, ++s2) {} - fileptr[curfile+1] = fopen(filename,"r"); - } - if (fileptr[curfile+1] != NULL) - { - ++curfile; - prompt = DOPROMPT(INFILE); - if (prompt) - fprintf(PROMPTFILE,"> "); - } - else - fprintf(ERRFILE,"can't open input file\n"); - break; - - case '>': /* new output file */ - if ((d = getc(INFILE)) != '>') ungetc(d,INFILE); - if (minus) - { - minus = FALSE; - if (outfile != stdout) - { - fclose(outfile); - outfile = stdout; - } - } - else - { - if (!readstring(INFILE,filename,513)) - { - fprintf(ERRFILE, - "improper file name, reverting to stdout\n"); - outfile = stdout; - break; - } - OPENOUT(outfile,filename,d=='>'); - if (outfile == NULL) - { - fprintf(ERRFILE, - "can't open output file, reverting to stdout\n"); - outfile = stdout; - } - } - break; - - case '!': /* ignore rest of line */ - do - c = getc(INFILE); - while (c != '\n' && c != EOF); - if (c == '\n') ungetc('\n',INFILE); - break; - - case 'n': /* read n value */ - minus = FALSE; - i = getint(INFILE); - if (i <= 0 || (MAXN && i > MAXN) - || (!MAXN && i > NAUTY_INFINITY-2)) - fprintf(ERRFILE, - " n can't be less than 1 or more than %d\n", - MAXN ? MAXN : NAUTY_INFINITY-2); - else - { - gvalid = FALSE; - cvalid = FALSE; - gvalid_sg = FALSE; - cvalid_sg = FALSE; - pvalid = FALSE; - ovalid = FALSE; - n = i; - m = SETWORDSNEEDED(n); - freeschreier(NULL,&generators); -#if !MAXN - DYNALLOC1(int,lab,lab_sz,n,"dreadnaut"); - DYNALLOC1(int,ptn,ptn_sz,n,"dreadnaut"); - DYNALLOC1(int,orbits,orbits_sz,n,"dreadnaut"); - DYNALLOC1(int,perm,perm_sz,n,"dreadnaut"); - DYNALLOC1(set,active,active_sz,m,"dreadnaut"); -#endif - } - break; - - case 'g': /* read graph */ - minus = FALSE; - if (SPARSEREP(mode)) - { - readgraph_sg(INFILE,&g_sg,options_digraph,prompt, - options_linelength,n); - gvalid_sg = TRUE; - cvalid_sg = FALSE; - } - else - { -#if !MAXN - DYNALLOC2(graph,g,g_sz,n,m,"dreadnaut"); -#endif - readgraph(INFILE,g,options_digraph,prompt,FALSE, - options_linelength,m,n); - gvalid = TRUE; - cvalid = FALSE; - } - ovalid = FALSE; - break; - - case 'e': /* edit graph */ - minus = FALSE; - if (SPARSEREP(mode)) - { - fprintf(ERRFILE,"e command only works in dense mode\n"); - } - else - { - readgraph(INFILE,g,options_digraph,prompt,gvalid, - options_linelength,m,n); - gvalid = TRUE; - cvalid = FALSE; - ovalid = FALSE; - } - break; - - case 'r': /* relabel graph and current partition */ - minus = FALSE; - if (gvalid_sg) - { - readvperm(INFILE,perm,prompt,n,&nperm); - relabel_sg(&g_sg,(pvalid ? lab : NULL),perm,&canong_sg); - cvalid_sg = FALSE; - ovalid = FALSE; - } - else if (gvalid) - { -#if !MAXN - DYNALLOC2(graph,canong,canong_sz,n,m,"dreadnaut"); -#endif - readvperm(INFILE,perm,prompt,n,&nperm); - relabel(g,(pvalid ? lab : NULL),perm,canong,m,n); - cvalid = FALSE; - ovalid = FALSE; - } - else - fprintf(ERRFILE,"g is not defined\n"); - break; - - case 'R': /* form subgraph */ - if (gvalid) - { -#if !MAXN - DYNALLOC2(graph,canong,canong_sz,n,m,"dreadnaut"); -#endif - readvperm(INFILE,perm,prompt,n,&nperm); - if ((minus && nperm == n) || (!minus && nperm == 0)) - fprintf(ERRFILE,"can't form null graph\n"); - else if (minus) - { - sublabel(g,perm+nperm,n-nperm,canong,m,n); - n = n - nperm; - } - else - { - sublabel(g,perm,nperm,canong,m,n); - n = nperm; - } - cvalid = FALSE; - pvalid = FALSE; - ovalid = FALSE; - m = SETWORDSNEEDED(n); - } - else if (gvalid_sg) - { - readvperm(INFILE,perm,prompt,n,&nperm); - if ((minus && nperm == n) || (!minus && nperm == 0)) - fprintf(ERRFILE,"can't form null graph\n"); - else if (minus) - { - sublabel_sg(&g_sg,perm+nperm,n-nperm,&canong_sg); - n = n - nperm; - } - else - { - sublabel_sg(&g_sg,perm,nperm,&canong_sg); - n = nperm; - } - cvalid_sg = FALSE; - pvalid = FALSE; - ovalid = FALSE; - m = SETWORDSNEEDED(n); - } - else - fprintf(ERRFILE,"g is not defined\n"); - minus = FALSE; - break; - - case '_': /* complement graph or converse digraph */ - minus = FALSE; - if ((d = getc(INFILE)) != '_') ungetc(d,INFILE); - - if (!gvalid && !gvalid_sg) - fprintf(ERRFILE,"g is not defined\n"); - else if (gvalid) - { - if (d == '_') converse(g,m,n); - else complement(g,m,n); - cvalid = FALSE; - } - else - { - if (d == '_') - { - copy_sg(&g_sg,&canong_sg); - converse_sg(&canong_sg,&g_sg); - cvalid_sg = FALSE; - } - else - { - copy_sg(&g_sg,&canong_sg); - complement_sg(&canong_sg,&g_sg); - cvalid_sg = FALSE; - } - } - break; - - case '@': /* copy canong into savedg */ - minus = FALSE; - if (cvalid) - { -#if !MAXN - DYNALLOC2(graph,savedg,savedg_sz,n,m,"dreadnaut"); - DYNALLOC1(int,savedlab,savedlab_sz,n,"dreadnaut"); - DYNALLOC1(int,savedptn,savedptn_sz,n,"dreadnaut"); -#endif - sgn = n; - memcpy(savedg,canong,m*(size_t)n*sizeof(setword)); - for (i = n; --i >= 0;) - { - savedlab[i] = lab[i]; - savedptn[i] = ptn[i]; - } - sgorg = labelorg; - } - else if (cvalid_sg) - { -#if !MAXN - DYNALLOC1(int,savedlab,savedlab_sz,n,"dreadnaut"); - DYNALLOC1(int,savedptn,savedptn_sz,n,"dreadnaut"); -#endif - sgn = n; - copy_sg(&canong_sg,&savedg_sg); - for (i = n; --i >= 0;) - { - savedlab[i] = lab[i]; - savedptn[i] = ptn[i]; - } - sgorg = labelorg; - } - else - fprintf(ERRFILE,"h is not defined\n"); - break; - - case '#': /* compare canong to savedg */ - if ((d = getc(INFILE)) != '#') ungetc(d,INFILE); - - if (cvalid || cvalid_sg) - { - if (sgn > 0) - { - if (sgn != n) - fprintf(outfile, - "h and h' have different sizes.\n"); - else - { - if (cvalid) - { - for (sli = 0; sli < m*(size_t)n; ++sli) - if (savedg[sli] != canong[sli]) break; - same = (sli == m*(size_t)n); - } - else - same = aresame_sg(&canong_sg,&savedg_sg); - - if (!same) - fprintf(outfile,"h and h' are different.\n"); - else - { - for (i = 0; i < n; ++i) - if ((ptn[i] == 0) != (savedptn[i] == 0)) - break; - if (i < n) - fprintf(outfile, - "h and h' are identical but have incompatible colourings.\n"); - else - fprintf(outfile, - "h and h' are identical.\n"); - if (d == '#') - putmapping(outfile,savedlab,sgorg, - lab,labelorg,options_linelength,n); - } - } - } - else - fprintf(ERRFILE,"h' is not defined\n"); - } - else - fprintf(ERRFILE,"h is not defined\n"); - break; - - case 'j': /* relabel graph randomly */ - minus = FALSE; - if (gvalid) - { - ranperm(perm,n); -#if !MAXN - DYNALLOC2(graph,canong,canong_sz,n,m,"dreadnaut"); -#endif - relabel(g,(pvalid?lab:NULL),perm,canong,m,n); - cvalid = FALSE; - ovalid = FALSE; - freeschreier(NULL,&generators); - } - else if (gvalid_sg) - { - ranperm(perm,n); - relabel_sg(&g_sg,(pvalid?lab:NULL),perm,&canong_sg); - cvalid_sg = FALSE; - ovalid = FALSE; - freeschreier(NULL,&generators); - } - else - fprintf(ERRFILE,"g is not defined\n"); - break; - - case 'v': /* write vertex degrees */ - minus = FALSE; - if (gvalid) - putdegs(outfile,g,options_linelength,m,n); - else if (gvalid_sg) - putdegs_sg(outfile,&g_sg,options_linelength); - else - fprintf(ERRFILE,"g is not defined\n"); - break; - - case '%': /* do Mathon doubling operation */ - minus = FALSE; - if (gvalid || gvalid_sg) - { -#if !MAXN - if (2L * ((long)n + 1L) > NAUTY_INFINITY-2) - { - fprintf(ERRFILE, - "n can't be more than %d\n",NAUTY_INFINITY-2); - break; - } -#else - if (2L * ((long)n + 1L) > MAXN) - { - fprintf(ERRFILE,"n can't be more than %d\n",MAXN); - break; - } -#endif - newn = 2 * (n + 1); - newm = SETWORDSNEEDED(newn); -#if !MAXN - DYNALLOC1(int,lab,lab_sz,newn,"dreadnaut"); - DYNALLOC1(int,ptn,ptn_sz,newn,"dreadnaut"); - DYNALLOC1(int,orbits,orbits_sz,newn,"dreadnaut"); - DYNALLOC1(int,perm,perm_sz,newn,"dreadnaut"); - DYNALLOC1(set,active,active_sz,newm,"dreadnaut"); -#endif - ovalid = FALSE; - pvalid = FALSE; - freeschreier(NULL,&generators); - } - else - fprintf(ERRFILE,"g is not defined\n"); - - if (gvalid) - { -#if !MAXN - DYNALLOC2(graph,canong,canong_sz,n,m,"dreadnaut"); -#endif - memcpy(canong,g,m*(size_t)n*sizeof(setword)); - -#if !MAXN - DYNALLOC2(graph,g,g_sz,newn,newm,"dreadnaut"); -#endif - mathon(canong,m,n,g,newm,newn); - m = newm; - n = newn; - cvalid = FALSE; - } - else if (gvalid_sg) - { - copy_sg(&g_sg,&canong_sg); - mathon_sg(&canong_sg,&g_sg); - m = newm; - n = newn; - cvalid_sg = FALSE; - } - break; - - case 's': /* generate random graph */ - minus = FALSE; - d = getc(INFILE); - if (d == 'r') - ranreg = TRUE; - else - { - ranreg = FALSE; - if (d != EOF) ungetc(d,INFILE); - } - - i = getint(INFILE); - if (ranreg) - { - if (i < 0) i = 3; - if (i > MAXREG) - { - fprintf(ERRFILE,"sr is limited to degree %d\n",MAXREG); - break; - } - if (SPARSEREP(mode)) - { - ranreg_sg(&g_sg,i,n); - gvalid_sg = TRUE; - cvalid = FALSE; - ovalid = FALSE; - freeschreier(NULL,&generators); - } - NODENSEYET - } - else - { - if (i <= 0) i = 2; - if (!SPARSEREP(mode)) - { -#if !MAXN - DYNALLOC2(graph,g,g_sz,n,m,"dreadnaut"); -#endif - rangraph(g,options_digraph,i,m,n); - gvalid = TRUE; - cvalid = FALSE; - ovalid = FALSE; - freeschreier(NULL,&generators); - } - else - { - rangraph2_sg(&g_sg,options_digraph,1,i,n); - gvalid_sg = TRUE; - cvalid = FALSE; - ovalid = FALSE; - freeschreier(NULL,&generators); - } - } - break; - - case 'q': /* quit */ - EXIT; - break; - - case '"': /* copy comment to output */ - minus = FALSE; - copycomment(INFILE,outfile,'"'); - break; - - case 'I': /* do refinement and invariants procedure */ - minus = FALSE; - if (!gvalid && !gvalid_sg) - { - fprintf(ERRFILE,"g is not valid\n"); - break; - } - if (!pvalid) unitptn(lab,ptn,&numcells,n); - cellstarts(ptn,0,active,m,n); -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - if (gvalid) - { - doref(g,lab,ptn,0,&numcells,&qinvar,perm,active,&refcode, - options.userrefproc ? options.userrefproc : - (m == 1 ? refine1 : refine), - invarproc[options_invarproc].entrypoint,0,0, - options_invararg,options_digraph,m,n); - if (numcells > 1) pvalid = TRUE; - } - else if (gvalid_sg) - { - doref((graph*)&g_sg,lab,ptn,0,&numcells,&qinvar,perm, - active,&refcode, - options_sg.userrefproc ? options_sg.userrefproc : - refine_sg, - invarproc[options_invarproc].entrypoint_sg,0,0, - options_invararg,options_digraph,m,n); - if (numcells > 1) pvalid = TRUE; - } - else - { - fprintf(ERRFILE,"g is not valid\n"); - break; - } -#ifdef CPUTIME - timeafter = CPUTIME; -#endif - fprintf(outfile," %d cell%s; code = %x", - SS(numcells,"","s"),refcode); - if (mode == SPARSE_MODE) - { - if (invarproc[options_invarproc].entrypoint_sg) - fprintf(outfile, - " (%s %s)",invarproc[options_invarproc].name_sg, - (qinvar == 2 ? "worked" : "failed")); - } - else if (mode == DENSE_MODE) - { - if (invarproc[options_invarproc].entrypoint) - fprintf(outfile, - " (%s %s)",invarproc[options_invarproc].name, - (qinvar == 2 ? "worked" : "failed")); - } -#ifdef CPUTIME - fprintf(outfile,"; cpu time = %.2f seconds\n", - timeafter-timebefore); -#else - fprintf(outfile,"\n"); -#endif - if (numcells > 1) pvalid = TRUE; - break; - - case 'i': /* do refinement */ - minus = FALSE; - if (!gvalid && !gvalid_sg) - { - fprintf(ERRFILE,"g is not valid\n"); - break; - } - if (!pvalid) unitptn(lab,ptn,&numcells,n); - cellstarts(ptn,0,active,m,n); - - if (multiplicity != 0 || mintime != 0.0) - { - savednc = numcells; -#if !MAXN - DYNALLOC1(int,tempptn,tempptn_sz,n,"dreadnaut"); - DYNALLOC1(int,templab,templab_sz,n,"dreadnaut"); - DYNALLOC1(set,tempactive,tempactive_sz,m,"dreadnaut"); -#endif - memcpy(templab,lab,n*sizeof(int)); - memcpy(tempptn,ptn,n*sizeof(int)); - for (i = 0; i < m; ++i) tempactive[i] = active[i]; - } - -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - actmult = 0; - for (;;) - { - if (actmult > 0) - { - memcpy(lab,templab,n*sizeof(int)); - memcpy(ptn,tempptn,n*sizeof(int)); - for (i = 0; i < m; ++i) active[i] = tempactive[i]; - numcells = savednc; - } - - if (options.userrefproc) - (*options.userrefproc) - (g,lab,ptn,0,&numcells,perm,active,&refcode,m,n); - else if (gvalid) - { - if (m == 1) - refine1(g,lab,ptn,0,&numcells,perm,active,&refcode,m,n); - else - refine(g,lab,ptn,0,&numcells,perm,active,&refcode,m,n); - } - else if (mode == SPARSE_MODE) - refine_sg((graph*)&g_sg,lab,ptn,0,&numcells,perm,active, - &refcode,m,n); - else /* traces mode */ - refine_tr(&g_sg,lab,ptn,&numcells,&refcode,&traces_opts); - - ++actmult; - if (multiplicity > 0 && actmult >= multiplicity) break; -#ifdef CPUTIME - if (mintime > 0.0 && (actmult < 20 || !(actmult&7)) - && CPUTIME >= timebefore+mintime) - break; -#endif - } -#ifdef CPUTIME - timeafter = CPUTIME; -#endif - if (numcells > 1) pvalid = TRUE; - fprintf(outfile," %d cell%s; code = %x", - SS(numcells,"","s"),refcode); -#ifdef CPUTIME - fprintf(outfile,"; cpu time = %.7f seconds\n", - (timeafter-timebefore)/actmult); -#else - fprintf(outfile,"\n"); -#endif - break; - - case 'x': /* execute nauty */ - minus = FALSE; - if (mode == TRACES_MODE) - { - ovalid = FALSE; - cvalid_sg = FALSE; - if (!gvalid_sg) - { - fprintf(ERRFILE,"g is not defined\n"); - break; - } - - traces_opts.getcanon = options_getcanon; - traces_opts.writeautoms = options_writeautoms; - traces_opts.cartesian = options_cartesian; - traces_opts.linelength = options_linelength; - traces_opts.digraph = options_digraph; - traces_opts.outfile = outfile; - traces_opts.verbosity = options_verbosity; - traces_opts.strategy = options_strategy; - if (options_keepgroup) - traces_opts.generators = &generators; - else - traces_opts.generators = NULL; - -#if !MAXN - DYNALLOC1(int,tempptn,tempptn_sz,n,"dreadnaut"); -#endif - if (!pvalid) unitptn(lab,ptn,&numcells,n); - memcpy(tempptn,ptn,n*sizeof(int)); - savednc = numcells; - if (options_invarproc != 1 && options_maxinvarlevel > 0) - { - if (options_maxinvarlevel > 1) fprintf(ERRFILE, - "Warning: Traces only uses invariants at the top level\n"); - if (invarproc[options_invarproc].entrypoint_sg) - { -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - cellstarts(tempptn,0,active,m,n); - doref((graph*)&g_sg,lab,tempptn,0,&savednc,&qinvar,perm, - active,&refcode, - options_sg.userrefproc ? options_sg.userrefproc : - refine_sg, - invarproc[options_invarproc].entrypoint_sg,0,0, - options_invararg,options_digraph,m,n); - fprintf(outfile,"Invariant %s %s; %d cell%s", - invarproc[options_invarproc].name_sg, - (qinvar == 2 ? "worked" : "failed"), - SS(savednc,"","s")); -#ifdef CPUTIME - timeafter = CPUTIME; - fprintf(outfile,"; cpu time = %.2f seconds\n", - timeafter-timebefore); -#else - fprintf(outfile,"\n"); -#endif - } - } - -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - actmult = 0; - for (;;) - { - traces_opts.defaultptn = !pvalid; - Traces(&g_sg,lab,tempptn,orbits,&traces_opts,&traces_stats, - &canong_sg); - traces_opts.writeautoms = FALSE; - traces_opts.verbosity = 0; - ++actmult; - if (multiplicity > 0 && actmult >= multiplicity) break; -#ifdef CPUTIME - if (mintime > 0.0 && (actmult < 20 || !(actmult&7)) - && CPUTIME >= timebefore+mintime) - break; -#endif - } -#ifdef CPUTIME - timeafter = CPUTIME; -#endif - - fprintf(outfile,"%d orbit%s", - SS(traces_stats.numorbits,"","s")); - fprintf(outfile,"; grpsize="); - writegroupsize(outfile, - traces_stats.grpsize1,traces_stats.grpsize2); - fprintf(outfile,"; %d gen%s", - SS(traces_stats.numgenerators,"","s")); - fprintf(outfile, - "; %lu node%s ", SS(traces_stats.numnodes,"","s")); - if (traces_stats.interrupted) - fprintf(outfile, - "(%lu interrupted, ",traces_stats.interrupted); - else - fprintf(outfile,"("); - fprintf(outfile,"%lu peak); maxlev=%d\n", - traces_stats.peaknodes,traces_stats.treedepth); - if (options_getcanon) - fprintf(outfile, - "canupdates=%d; ",traces_stats.canupdates); -#ifdef CPUTIME - fprintf(outfile,actmult == 1 ? - "cpu time = %.2f seconds\n" : - "cpu time = %.7f seconds\n", - (timeafter-timebefore)/actmult); -#else - fprintf(outfile,"\n"); -#endif - if (options_getcanon) cvalid_sg = TRUE; - ovalid = TRUE; - } - else - { - ovalid = FALSE; - cvalid = cvalid_sg = FALSE; - if (!gvalid && !gvalid_sg) - { - fprintf(ERRFILE,"g is not defined\n"); - break; - } - if (mode == DENSE_MODE) - { - if (pvalid) - { - fprintf(outfile,"[fixing partition]\n"); - options.defaultptn = FALSE; - } - else - options.defaultptn = TRUE; - - options.outfile = outfile; - options.digraph = options_digraph; - options.cartesian = options_cartesian; - options.schreier = (options_schreier > 0); - options.getcanon = options_getcanon; - options.tc_level = options_tc_level; - options.linelength = options_linelength; - options.invarproc - = invarproc[options_invarproc].entrypoint; - options.mininvarlevel = options_mininvarlevel; - if (options.invarproc) - options.maxinvarlevel = options_maxinvarlevel; - else - options.maxinvarlevel = 0; - options.invararg = options_invararg; - if (options_schreier > 0) - schreier_fails(options_schreier); - - if (umask & U_NODE) options.usernodeproc = NODEPROC; - else options.usernodeproc = NULL; - if (umask & U_AUTOM) options.userautomproc = AUTOMPROC; - else options.userautomproc = NULL; - if (umask & U_LEVEL) options.userlevelproc = LEVELPROC; - else options.userlevelproc = NULL; - if (umask & U_REF) options.userrefproc = REFPROC; - else options.userrefproc = NULL; -#if !MAXN - if (options_getcanon) - DYNALLOC2(graph,canong,canong_sz,n,m,"dreadnaut"); - DYNALLOC1(setword,workspace,workspace_sz,2*m*worksize, - "dreadnaut"); -#endif - firstpath = TRUE; - options.writeautoms = options_writeautoms; - options.writemarkers = options_writemarkers; -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - actmult = 0; - for (;;) - { - nauty(g,lab,ptn,NULL,orbits,&options,&stats,workspace, - 2*m*worksize,m,n,canong); - options.writeautoms = FALSE; - options.writemarkers = FALSE; - ++actmult; - if (multiplicity > 0 && actmult >= multiplicity) - break; -#ifdef CPUTIME - if (mintime > 0.0 && (actmult < 20 || !(actmult&7)) - && CPUTIME >= timebefore+mintime) - break; -#endif - } -#ifdef CPUTIME - timeafter = CPUTIME; -#endif - } - if (mode == SPARSE_MODE) - { - if (pvalid) - { - fprintf(outfile,"[fixing partition]\n"); - options_sg.defaultptn = FALSE; - } - else - options_sg.defaultptn = TRUE; - - options_sg.outfile = outfile; - options_sg.digraph = options_digraph; - options_sg.cartesian = options_cartesian; - options_sg.schreier = (options_schreier > 0); - options_sg.getcanon = options_getcanon; - options_sg.linelength = options_linelength; - options_sg.invarproc - = invarproc[options_invarproc].entrypoint_sg; - options_sg.mininvarlevel = options_mininvarlevel; - if (options_sg.invarproc) - options_sg.maxinvarlevel = options_maxinvarlevel; - else - options_sg.maxinvarlevel = 0; - options_sg.invararg = options_invararg; - options_sg.tc_level = options_tc_level; - if (options_schreier > 0) - schreier_fails(options_schreier); - - if (umask & U_NODE) options_sg.usernodeproc = NODEPROC; - else options_sg.usernodeproc = NULL; - if (umask & U_AUTOM) options_sg.userautomproc = AUTOMPROC; - else options_sg.userautomproc = NULL; - if (umask & U_LEVEL) options_sg.userlevelproc = LEVELPROC; - else options_sg.userlevelproc = NULL; - if (umask & U_REF) options_sg.userrefproc = REFPROC; - else options_sg.userrefproc = NULL; -#if !MAXN - DYNALLOC1(setword,workspace,workspace_sz,2*m*worksize, - "dreadnaut"); -#endif - - firstpath = TRUE; - options_sg.writeautoms = options_writeautoms; - options_sg.writemarkers = options_writemarkers; -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - actmult = 0; - for (;;) - { - nauty((graph*)&g_sg,lab,ptn,NULL,orbits,&options_sg, - &stats,workspace,2*m*worksize,m,n,(graph*)&canong_sg); - options_sg.writeautoms = FALSE; - options_sg.writemarkers = FALSE; - ++actmult; - if (multiplicity > 0 && actmult >= multiplicity) - break; -#ifdef CPUTIME - if (mintime > 0.0 && (actmult < 20 || !(actmult&7)) - && CPUTIME >= timebefore+mintime) - break; -#endif - } -#ifdef CPUTIME - timeafter = CPUTIME; -#endif - } - - if (stats.errstatus != 0) - fprintf(ERRFILE, - "nauty returned error status %d [this can't happen]\n", - stats.errstatus); - else - { - if (options_getcanon) - { - if (mode == DENSE_MODE) cvalid = TRUE; - else cvalid_sg = TRUE; - } - ovalid = TRUE; - fprintf(outfile,"%d orbit%s",SS(stats.numorbits,"","s")); - fprintf(outfile,"; grpsize="); - writegroupsize(outfile,stats.grpsize1,stats.grpsize2); - fprintf(outfile,"; %d gen%s", - SS(stats.numgenerators,"","s")); - fprintf(outfile,"; %lu node%s",SS(stats.numnodes,"","s")); - if (stats.numbadleaves) - fprintf(outfile," (%lu bad lea%s)", - SS(stats.numbadleaves,"f","ves")); - fprintf(outfile,"; maxlev=%d\n", stats.maxlevel); - /* fprintf(outfile,"tctotal=%lu",stats.tctotal); */ - if (options_getcanon) - fprintf(outfile,"canupdates=%lu; ",stats.canupdates); -#ifdef CPUTIME - fprintf(outfile,actmult == 1 ? - "cpu time = %.2f seconds\n" : - "cpu time = %.7f seconds\n", - (timeafter-timebefore)/actmult); -#else - fprintf(outfile,"\n"); -#endif - if (mode == DENSE_MODE && options_maxinvarlevel != 0 - && invarproc[options_invarproc].entrypoint) - { - fprintf(outfile,"invarproc \"%s\" succeeded %lu/%lu", - invarproc[options_invarproc].name, - stats.invsuccesses,stats.invapplics); - if (stats.invarsuclevel > 0) - fprintf(outfile," beginning at level %d.\n", - stats.invarsuclevel); - else - fprintf(outfile,".\n"); - } - if (mode == SPARSE_MODE && options_maxinvarlevel != 0 - && invarproc[options_invarproc].entrypoint_sg) - { - fprintf(outfile,"invarproc \"%s\" succeeded %lu/%lu", - invarproc[options_invarproc].name_sg, - stats.invsuccesses,stats.invapplics); - if (stats.invarsuclevel > 0) - fprintf(outfile," beginning at level %d.\n", - stats.invarsuclevel); - else - fprintf(outfile,".\n"); - } - } - } - break; - - case 'A': /* change mode, with possible conversion */ - minus = FALSE; - oldmode = mode; - d = getc(INFILE); - if (d == 'n' || d == 'N' || d == 'd' || d == 'D') mode = DENSE_MODE; - else if (d == 's' || d == 'S') mode = SPARSE_MODE; - else if (d == 't' || d == 'T') mode = TRACES_MODE; - else - { - fprintf(ERRFILE,"Mode %c is unknown\n",(d?d:'0')); - break; - } - if ((d = getc(INFILE)) != '+') - { - ungetc(d,INFILE); - gvalid = gvalid_sg = FALSE; - pvalid = ovalid = FALSE; - } - else - { - if (SPARSEREP(oldmode) && !SPARSEREP(mode) && gvalid_sg) - { -#if !MAXN - DYNALLOC2(graph,g,g_sz,n,m,"dreadnaut"); -#endif - sg_to_nauty(&g_sg,g,m,&m); - gvalid_sg = FALSE; - gvalid = TRUE; - } - if (!SPARSEREP(oldmode) && SPARSEREP(mode) && gvalid) - { - nauty_to_sg(g,&g_sg,m,n); - gvalid = FALSE; - gvalid_sg = TRUE; - } - } - cvalid = cvalid_sg = FALSE; - sgn = 0; /* invalidate saved graph */ - break; - - case 'f': /* read initial partition */ - - if (minus) - { - pvalid = FALSE; - minus = FALSE; - } - else - { - readptn(INFILE,lab,ptn,&numcells,prompt,n); - pvalid = TRUE; - freeschreier(NULL,&generators); - } - break; - - case 'F': /* individualise one more vertex */ - if ((d = getc(INFILE)) != 'F') ungetc(d,INFILE); - minus = FALSE; - if (d != 'F') - { - i = getint(INFILE); - i -= labelorg; - if (i < 0 || i >= n) - fprintf(ERRFILE,"F argument must be 0..n-1\n"); - else - { - if (!pvalid) unitptn(lab,ptn,&numcells,n); - individualise(lab,ptn,0,i,&d,&numcells,n); - pvalid = TRUE; - } - } - else - { - if (!gvalid && !gvalid_sg) - { - fprintf(stderr,"g is not defined\n"); - break; - } - if (!pvalid) unitptn(lab,ptn,&numcells,n); - if (!SPARSEREP(mode)) - i = targetcell(g,lab,ptn,0,1,options_digraph,-1,m,n); - else if (mode == SPARSE_MODE) - i = targetcell_sg((graph*)&g_sg,lab,ptn,0,1, - options_digraph,-1,m,n); - if (ptn[i] > 0) - { - ptn[i] = 0; - ++numcells; - } - pvalid = TRUE; - } - freeschreier(NULL,&generators); - break; - - case 't': /* type graph */ - minus = FALSE; - if (gvalid) - putgraph(outfile,g,options_linelength,m,n); - else if (gvalid_sg) - putgraph_sg(outfile,&g_sg,options_linelength); - else - fprintf(ERRFILE,"g is not defined\n"); - break; - - case 'T': /* type graph preceded by n, $ and g commands */ - minus = FALSE; - if (gvalid) - { - fprintf(outfile,"n=%d $=%d g\n",n,labelorg); - putgraph(outfile,g,options_linelength,m,n); - fprintf(outfile,"$$\n"); - } - else if (gvalid_sg) - { - fprintf(outfile,"n=%d $=%d g\n",n,labelorg); - putgraph_sg(outfile,&g_sg,options_linelength); - fprintf(outfile,"$$\n"); - } - else - fprintf(ERRFILE,"g is not defined\n"); - break; - - case 'u': /* call user procs */ - if (minus) - { - umask = 0; - minus = FALSE; - } - else - { - umask = getint(INFILE); - if (umask < 0) umask = ~U_TCELL; - } - if (umask & U_TCELL) - { - fprintf(ERRFILE,"usertcellproc() is gone at version 2.4\n"); - umask &= ~U_TCELL; - } - break; - - case 'o': /* type orbits */ - minus = FALSE; - if (ovalid) - PUTORBITS(outfile,orbits,options_linelength,n); - else - fprintf(ERRFILE,"orbits are not defined\n"); - break; - - case 'O': /* make orbits into a partition*/ - minus = FALSE; - if ((d = getc(INFILE)) != 'O') ungetc(d,INFILE); - - if (ovalid && d != 'O') - { -#if !MAXN - DYNALLOC1(int,tempptn,tempptn_sz,n,"dreadnaut"); -#endif - for (i = n; --i >= 0;) tempptn[i] = 0; - for (i = n; --i >= 0;) - if ((j = orbits[i]) < i) - { - tempptn[i] = tempptn[j]; - tempptn[j] = i; - } - - k = 0; - numcells = 0; - for (i = 0; i < n; ++i) - { - if (orbits[i] == i) - { - j = i; - do - { - lab[k] = j; - ptn[k] = 1; - ++k; - j = tempptn[j]; - } while (j > 0); - - ptn[k-1] = 0; - ++numcells; - } - } - pvalid = TRUE; - } - else if (ovalid && d == 'O') - { -#if !MAXN - DYNALLOC1(int,tempptn,tempptn_sz,n,"dreadnaut"); - DYNALLOC1(int,templab,templab_sz,n,"dreadnaut"); -#endif - for (i = 0; i < n; ++i) tempptn[i] = 0; - for (i = 0; i < n; ++i) ++tempptn[orbits[i]]; - - j = 0; - for (i = 0; i < n; ++i) - if (tempptn[i] > 0) - { - templab[j] = i; - tempptn[j] = tempptn[i]; - ++j; - } - sort2ints(tempptn,templab,j); - - k = 0; - for (i = 0; i < j; ++i) - { - ptn[templab[i]] = k; - k += tempptn[i]; - } - for (i = 0; i < n; ++i) lab[ptn[orbits[i]]++] = i; - - for (i = 0; i < n; ++i) ptn[i] = 1; - k = 0; - for (i = 0; i < j; ++i) - { - k += tempptn[i]; - if (i == j-1 || tempptn[i] != tempptn[i+1]) - ptn[k-1] = 0; - } - pvalid = TRUE; - } - else - fprintf(ERRFILE,"orbits are not defined\n"); - break; - - case 'b': /* type canonlab and canong */ - minus = FALSE; - if (cvalid) - putcanon(outfile,lab,canong,options_linelength,m,n); - else if (cvalid_sg) - { - sortlists_sg(&canong_sg); - putcanon_sg(outfile,lab,&canong_sg,options_linelength); - } - else - fprintf(ERRFILE,"h is not defined\n"); - break; - - case 'z': /* type hashcode for canong */ - minus = FALSE; - if (cvalid) - { - zseed = hashgraph(canong,m,n,2922320L); - fprintf(outfile,"[N%07lx",zseed); - - zseed = hashgraph(canong,m,n,19883109L); - fprintf(outfile," %07lx",zseed); - - zseed = hashgraph(canong,m,n,489317L); - fprintf(outfile," %07lx]\n",zseed); - } - else if (cvalid_sg) - { - zseed = hashgraph_sg(&canong_sg,2922320L); - fprintf(outfile,"[%c%07lx", - mode==SPARSE_MODE?'S':'T',zseed); - - zseed = hashgraph_sg(&canong_sg,19883109L); - fprintf(outfile," %07lx",zseed); - - zseed = hashgraph_sg(&canong_sg,489317L); - fprintf(outfile," %07lx]\n",zseed); - } - else - fprintf(ERRFILE,"h is not defined\n"); - break; - - case 'c': /* set getcanon option */ - options_getcanon = !minus; - minus = FALSE; - break; - - case 'w': /* read size of workspace */ - minus = FALSE; - worksize = getint(INFILE); -#if MAXN - if (worksize > 2*MAXM*WORKSIZE) - { - fprintf(ERRFILE, - "too big - setting worksize = %d\n",WORKSIZE); - worksize = WORKSIZE; - } -#endif - break; - - case 'l': /* read linelength for output */ - options_linelength = getint(INFILE); - minus = FALSE; - break; - - case 'y': /* set tc_level field of options */ - options_tc_level = getint(INFILE); - minus = FALSE; - break; - - case 'M': /* set multiplicity */ - if (minus) - { - multiplicity = 1; - mintime = 0.0; - minus = FALSE; - } - else - { - multiplicity = getint(INFILE); - if (multiplicity < 0) multiplicity = 0; - if ((d = getc(INFILE)) == '/') - { - actmult = getint(INFILE); - if (actmult < 0) actmult = 0; - } - else - { - ungetc(d,INFILE); - actmult = 0; - } - if (multiplicity == 0 && actmult == 0) multiplicity = 1; - mintime = (double)actmult; - } - break; - - case 'k': /* set invarlev fields of options */ - options_mininvarlevel = getint(INFILE); - options_maxinvarlevel = getint(INFILE); - minus = FALSE; - break; - - case 'K': /* set invararg field of options */ - options_invararg = getint(INFILE); - minus = FALSE; - break; - - case '*': /* set invarproc field of options */ - minus = FALSE; - d = getint(INFILE); - if (d >= -1 && d <= NUMINVARS-2) - { - options_invarproc = d+1; - options_mininvarlevel = 0; - options_maxinvarlevel = 1; - if (options_invarproc >= 10 && options_invarproc <= 13) - options.invararg = 3; - else - options.invararg = 0; - } - else - fprintf(ERRFILE,"no such vertex-invariant\n"); - break; - - case 'a': /* set writeautoms option */ - options_writeautoms = !minus; - minus = FALSE; - break; - - case 'm': /* set writemarkers option */ - options_writemarkers = !minus; - minus = FALSE; - break; - - case 'V': /* set verbosity for Traces */ - if (minus) - { - options_verbosity = 0; - minus = FALSE; - } - else - { - i = getint(INFILE); - if (i < 0) fprintf(ERRFILE,"verbosity must be >= 0\n"); - else options_verbosity = i; - } - break; - - case 'S': /* set strategy for Traces */ - if (minus) - { - options_strategy = 0; - minus = FALSE; - } - else - { - i = getint(INFILE); - if (i < 0) fprintf(ERRFILE,"strategy must be >= 0\n"); - else options_strategy = i; - } - break; - - case 'G': /* set schreier option */ - if (minus) - { - options_schreier = 0; - minus = FALSE; - } - else - { - i = getint(INFILE); - if (i < 0) fprintf(ERRFILE,"schreierfails must be >= 0\n"); - else - { - options_schreier = i; - if (i > 0) schreier_fails(i); - } - } - break; - - case 'p': /* set cartesian option */ - options_cartesian = !minus; - minus = FALSE; - break; - - case 'd': /* set digraph option */ - if (options_digraph && minus) gvalid = gvalid_sg = FALSE; - options_digraph = !minus; - minus = FALSE; - break; - - case 'P': /* set keep-group option */ - if (minus && options_keepgroup) - { - options_keepgroup = FALSE; - freeschreier(NULL,&generators); - } - else - { - if ((d = getc(INFILE)) != 'P') ungetc(d,INFILE); - options_keepgroup = TRUE; - if (d == 'P') - { - readvperm(INFILE,perm,prompt,n,&nperm); - if (nperm != n) - fprintf(ERRFILE,"Incomplete permutation\n"); - else - addpermutation(&generators,perm,n); - } - } - minus = FALSE; - break; - - case '$': /* set label origin */ - if ((d = getc(INFILE)) == '$') - labelorg = oldorg; - else - { - ungetc(d,INFILE); - oldorg = labelorg; - i = getint(INFILE); - if (i < 0) fprintf(ERRFILE,"labelorg must be >= 0\n"); - else labelorg = i; - } - break; - - case '?': /* type options, etc. */ - minus = FALSE; - fprintf(outfile,"Mode=%s ", - (mode==DENSE_MODE?"dense": - mode==SPARSE_MODE?"sparse":"Traces")); - fprintf(outfile,"m=%d n=%d labelorg=%d",m,n,labelorg); - if (!gvalid && !gvalid_sg) - fprintf(outfile," g=undef"); - else if (gvalid) - { - uli = 0; - for (i = 0, gp = g; i < n; ++i, gp += m) uli += setsize(gp,m); - if (options_digraph) fprintf(outfile," arcs=%lu",uli); - else fprintf(outfile," edges=%lu",uli/2); - } - else - { - uli = g_sg.nde; - if (options_digraph) fprintf(outfile," arcs=%lu",uli); - else fprintf(outfile," edges=%lu",uli/2); - } - fprintf(outfile," options=(%cc%ca%cm%cp%cd", - PM(options_getcanon),PM(options_writeautoms), - PM(options_writemarkers),PM(options_cartesian), - PM(options_digraph)); - if (mode == TRACES_MODE) - fprintf(outfile,"%cP",PM(options_keepgroup)); - if (umask & 31) - fprintf(outfile," u=%d",umask&31); - if (options_tc_level > 0) - fprintf(outfile," y=%d",options_tc_level); - if (options_mininvarlevel != 0 || options_maxinvarlevel != 0) - fprintf(outfile," k=(%d,%d)", - options_mininvarlevel,options_maxinvarlevel); - if (options_invararg > 0) - fprintf(outfile," K=%d",options_invararg); - if (multiplicity != 1 || mintime != 0.0) - fprintf(outfile," M=%d/%.0f",multiplicity,mintime); - fprintf(outfile,")\n"); - fprintf(outfile,"linelen=%d worksize=%d input_depth=%d", - options_linelength,worksize,curfile); - if (options_schreier > 0) - fprintf(outfile," G=%d",options_schreier); - if (mode == TRACES_MODE) - { - if (options_verbosity != 1) - fprintf(outfile," V=%d",options_verbosity); - if (options_strategy != 0) - fprintf(outfile," S=%d",options_strategy); - } - if (options_invarproc != 1) - fprintf(outfile," invarproc=%s", - (mode == DENSE_MODE ? - invarproc[options_invarproc].name : - invarproc[options_invarproc].name_sg)); - if (pvalid) - fprintf(outfile,"; %d cell%s",SS(numcells,"","s")); - else - fprintf(outfile,"; 1 cell"); - fprintf(outfile,"\n"); - if (outfile != PROMPTFILE) - { - fprintf(outfile,"Mode=%s ", - (mode==DENSE_MODE?"dense": - mode==SPARSE_MODE?"sparse":"Traces")); - fprintf(PROMPTFILE,"n=%d depth=%d labelorg=%d\n", - n,curfile,labelorg); - } - break; - - case '&': /* list the partition and possibly the quotient */ - if ((d = getc(INFILE)) == '&') - doquot = TRUE; - else - { - ungetc(d,INFILE); - doquot = FALSE; - } - minus = FALSE; - if (pvalid) - putptn(outfile,lab,ptn,0,options_linelength,n); - else - fprintf(outfile,"unit partition\n"); - if (doquot) - { - if (!pvalid) unitptn(lab,ptn,&numcells,n); - if (SPARSEREP(mode)) - putquotient_sg(outfile,&g_sg,lab,ptn,0,options_linelength); - else - putquotient(outfile,g,lab,ptn,0,options_linelength,m,n); - } - break; - - case 'h': /* type help information */ - case 'H': - minus = FALSE; - help(PROMPTFILE,c == 'H'); - break; - - default: /* illegal command */ - fprintf(ERRFILE,"'%c' is illegal - type 'h' for help\n",c); - flushline(INFILE); - if (prompt) fprintf(PROMPTFILE,"> "); - break; - - } /* end of switch */ - - exit(0); -} - -/***************************************************************************** -* * -* help(f,i) writes help information to file f (i = 0,1). * -* * -*****************************************************************************/ - -static void -help(FILE *f, int i) -{ -#define H(ss) fprintf(f," %s\n",ss); - -if (i == 0) -{ -H("Modes: An = dense, As = sparse, At = Traces; extra + to convert graph") -H("+- a : write automs v : write degrees *=# : select invariant:") -H(" b : write canong w=# : set worksize (units of 2m)") -H("+- c : canonise x : run nauty -1 = user-defined") -H("+- d : digraph or loops y=# : set tc_level 0 = none") -H(" e : edit graph z : write hashcode 1 = twopaths") -H("-f, f=#, f=[...] : set colours 2 = adjtriang(K=0,1)") -H(" g : read graph $=# : set origin 3 = triples") -H(" h,H : help $$ : restore origin 4 = quadruples") -H(" i : refine ? : type options 5 = celltrips") -H(" I : refine using invar _ : compl __ : conv 6 = cellquads") -H(" j : relabel randomly % : Mathon doubling 7 = cellquins") -H("k=# # : set invar levels & : type colouring 8 = distances(K)") -H(" K=# : set invar param && : + quotient matrix 9 = indsets(K)") -H(" l=# : set line length >ff : write to file 10 = cliques(K)") -H("+- m : write markers >>ff : append to file 11 = cellcliq(K)") -H(" n=# : set order -> : revert to stdout 12 = cellind(K)") -H(" o : write orbits partition") -H("+- P : keep group PP : add automorphism Type H for more..") -} - -if (i == 1) -{ -H("Commands for g and e : ") -H(" There is always a \"current vertex\" v, initially first vertex.") -H(" # : add edge v-# ; : increment v (exit if over limit)") -H(" -# : delete edge v-# #: : set v := #") -H(" ? : list nbhs of v . : exit") -H("Mode change: An = dense nauty, As = sparse nauty, At = Traces") -H("Use An+, As+ or At+ to also convert graph between dense and sparse") -H("Command line argument -o options allows a,c,d,m,p,l,G,P,w,y,$,A,V,M") -H("Syntax for f : f=[2 3|4:9|10] (rest in extra cell at right)") -H(" -f same as f=[], f=# same as f=[#]") -H("Syntax for r : r 2:4 1 5; (rest appended in order)") -H("Syntax for R : R 2:4 1 5; or -R 0 3 6:10;") -H("Syntax for PP : PP 2:4 1 5 0; (must be complete)") -H("Arguments for u : 1=node,2=autom,4=level,16=ref (add them)") -H("Accurate times: M=#/# set number of runs and minimum total cpu.") -} - -} - -/***************************************************************************** -* * -* usernode(g,lab,ptn,level,numcells,tc,code,m,n) is a simple version of the * -* procedure named by options.usernodeproc. * -* * -*****************************************************************************/ - -static void -usernode(graph *g, int *lab, int *ptn, int level, int numcells, - int tc, int code, int m, int n) -{ - int i; - - for (i = 0; i < level; ++i) PUTC('.',outfile); - if (numcells == n) - fprintf(outfile,"(n/%d)\n",code); - else if (tc < 0) - fprintf(outfile,"(%d/%d)\n",numcells,code); - else - fprintf(outfile,"(%d/%d/%d)\n",numcells,code,tc); - if (firstpath) putptn(outfile,lab,ptn,level,options_linelength,n); - if (numcells == n) firstpath = FALSE; -} - -/***************************************************************************** -* * -* userautom(count,perm,orbits,numorbits,stabvertex,n) is a simple * -* version of the procedure named by options.userautomproc. * -* * -*****************************************************************************/ - -static void -userautom(int count, int *perm, int *orbits, - int numorbits, int stabvertex, int n) -{ - fprintf(outfile, - "**userautomproc: count=%d stabvertex=%d numorbits=%d\n", - count,stabvertex+labelorg,numorbits); - PUTORBITS(outfile,orbits,options_linelength,n); -} - -/***************************************************************************** -* * -* userlevel(lab,ptn,level,orbits,stats,tv,index,tcellsize,numcells,cc,n) * -* is a simple version of the procedure named by options.userlevelproc. * -* * -*****************************************************************************/ - -static void -userlevel(int *lab, int *ptn, int level, int *orbits, statsblk *stats, - int tv, int index, int tcellsize, int numcells, int cc, int n) -{ - fprintf(outfile, - "**userlevelproc: level=%d tv=%d index=%d tcellsize=%d cc=%d\n", - level,tv+labelorg,index,tcellsize,cc); - fprintf(outfile," nodes=%lu cells=%d orbits=%d generators=%d\n", - stats->numnodes,numcells,stats->numorbits,stats->numgenerators); -} diff --git a/tools/nauty25r9_mac/dretog b/tools/nauty25r9_mac/dretog deleted file mode 100644 index 6a9437b01ddc4b27a175e08bce6d4874dab7c94d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157456 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 Gl=?s7a=QTl diff --git a/tools/nauty25r9_mac/dretog.c b/tools/nauty25r9_mac/dretog.c deleted file mode 100644 index 27a76d2..0000000 --- a/tools/nauty25r9_mac/dretog.c +++ /dev/null @@ -1,214 +0,0 @@ -/* dretog.c version 1.0; B D McKay, Jan 1997. */ - -#define USAGE "dretog [-n#o#sghq] [infile [outfile]]" - -#define HELPTEXT \ -" Read graphs in dreadnaut format.\n\ -\n\ - -o# Label vertices starting at # (default 0). \n\ - This can be overridden in the input.\n\ - -n# Set the initial graph order to # (no default). \n\ - This can be overridden in the input.\n\ - -g Use graph6 format (default).\n\ - -s Use sparse6 format.\n\ - -h Write a header (according to -g or -s).\n\ -\n\ - Input consists of a sequence of dreadnaut commands restricted to:\n\ -\n\ - n=# set number of vertices (no default)\n\ - The = is optional.\n\ - $=# set label of first vertex (default 0)\n\ - The = is optional.\n\ - $$ return origin to initial value (see -o#)\n\ - \"..\" and !..\\n comments to ignore\n\ - g specify graph to follow (as dreadnaut format)\n\ - Can be omitted if first character of graph is a digit or ';'.\n\ - q exit (optional)\n" - -/*************************************************************************/ - -#include "gtools.h" /* which includes nauty.h and stdio.h */ - -extern int labelorg; - -/**************************************************************************/ -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - int m,n,c; - int argnum,j,outcode,initorg; - char *arg,sw; - boolean badargs,prompt; - boolean sswitch,gswitch,oswitch,nswitch,hswitch,qswitch; - char *infilename,*outfilename; - FILE *infile,*outfile; - nauty_counter nin; - char s[10]; -#if MAXN - graph g[MAXN*MAXM]; -#else - DYNALLSTAT(graph,g,g_sz); -#endif - - HELP; - - sswitch = gswitch = oswitch = FALSE; - qswitch = nswitch = hswitch = FALSE; - infilename = outfilename = NULL; - initorg = 0; - n = -1; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('s',sswitch) - else SWBOOLEAN('g',gswitch) - else SWBOOLEAN('h',hswitch) - else SWBOOLEAN('q',qswitch) - else SWINT('o',oswitch,initorg,">E dretog -o") - else SWINT('n',nswitch,n,">E dretog -n") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (sswitch && gswitch) - gt_abort(">E dretog: -s and -g are incompatible\n"); - - if (labelorg < 0) gt_abort(">E dretog: negative origin forbidden\n"); - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!infilename || infilename[0] == '-') - { - infilename = "stdin"; - infile = stdin; - } - else if ((infile = fopen(infilename,"r")) == NULL) - { - fprintf(stderr,"Can't open input file %s\n",infilename); - gt_abort(NULL); - } - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (sswitch) outcode = SPARSE6; - else outcode = GRAPH6; - - if (hswitch) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - -#if HAVE_ISATTY - prompt = isatty(fileno(infile)) && isatty(fileno(outfile)); -#else - prompt = (infile == stdin); -#endif - - /* perform scanning required */ - - labelorg = initorg; - nin = 0; - - while (fscanf(infile,"%1s",s) == 1) - { - if (s[0] == 'n') - { - if (fscanf(infile,"%1s",s) == 1 && s[0] != '=') - ungetc(s[0],infile); - if (fscanf(infile,"%d",&n) != 1) - { - fprintf(stderr,">E dretog: invalid n=# command\n"); - gt_abort(NULL); - } - if (n <= 0) - gt_abort(">E dretog: n can't be <= 0\n"); - } - else if (s[0] == '"') - { - while ((c = getc(infile)) != '"' && c != EOF) {} - } - else if (s[0] == '!') - { - while ((c = getc(infile)) != '\n' && c != EOF) {} - } - else if (s[0] == '$') - { - if ((s[0] = getc(infile)) == '$') - labelorg = initorg; - else - { - if (s[0] != '=') ungetc(s[0],infile); - if (fscanf(infile,"%d",&labelorg) != 1) - gt_abort(">E dretog: invalid $=# command\n"); - if (labelorg < 0) - gt_abort(">E dretog: must have labelorg >= 0\n"); - } - } - else if (s[0] == 'g' || (s[0] >= '0' && s[0] <= '9') - || s[0] == ';') - { - if (n < 0) - gt_abort(">E dretog: g command before n is defined\n"); - if (s[0] != 'g') ungetc(s[0],infile); - m = (n + WORDSIZE - 1) / WORDSIZE; -#if MAXN - if (n > MAXN || m > MAXM) - gt_abort(">E n or m too big\n"); -#else - DYNALLOC2(graph,g,g_sz,n,m,"dretog"); -#endif - ++nin; - readgraph(infile,g,FALSE,prompt,FALSE,78,m,n); - if (outcode == SPARSE6) writes6(outfile,g,m,n); - else writeg6(outfile,g,m,n); - } - else if (s[0] == 'q') - exit(0); - else - { - fprintf(stderr,">E dretog: invalid command \"%c\"\n",s[0]); - gt_abort(NULL); - } - } - - if (!qswitch) - fprintf(stderr,">Z " COUNTER_FMT - " graphs converted from %s to %s\n", - nin,infilename,outfilename); - - exit(0); -} diff --git a/tools/nauty25r9_mac/formats.txt b/tools/nauty25r9_mac/formats.txt deleted file mode 100644 index 0677027..0000000 --- a/tools/nauty25r9_mac/formats.txt +++ /dev/null @@ -1,164 +0,0 @@ -Description of graph6 and sparse6 encodings -------------------------------------------- -Brendan McKay, bdm@cs.anu.edu.au -Updated May 2005. - -General principles: - - All numbers in this description are in decimal unless obviously - in binary. - - Apart from the header, there is one object per line. Apart from the - header and the end-of-line characters, all bytes have a value in the - range 63-126 (which are all printable ASCII characters). A file of - objects is a text file, so whatever end-of-line convention is locally - used is fine). - -Bit vectors: - - A bit vector x of length k can be represented as follows. - Example: 1000101100011100 - - (1) Pad on the right with 0 to make the length a multiple of 6. - Example: 100010110001110000 - - (2) Split into groups of 6 bits each. - Example: 100010 110001 110000 - - (3) Add 63 to each group, considering them as bigendian binary numbers. - Example: 97 112 111 - - These values are then stored one per byte. - So, the number of bytes is ceiling(k/6). - - Let R(x) denote this representation of x as a string of bytes. - -Small nonnegative integers: - - Let n be an integer in the range 0-68719476735 (2^36-1). - - If 0 <= n <= 62, define N(n) to be the single byte n+63. - If 63 <= n <= 258047, define N(n) to be the four bytes - 126 R(x), where x is the bigendian 18-bit binary form of n. - If 258048 <= n <= 68719476735, define N(n) to be the eight bytes - 126 126 R(x), where x is the bigendian 36-bit binary form of n. - - Examples: N(30) = 93 - N(12345) = N(000011 000000 111001) = 126 66 63 120 - N(460175067) = N(000000 011011 011011 011011 011011 011011) - = 126 126 63 90 90 90 90 90 - - -Description of graph6 format. ----------------------------- - -Data type: - simple undirected graphs of order 0 to 68719476735. - -Optional Header: - >>graph6<< (without end of line!) - -File name extension: - .g6 - -One graph: - Suppose G has n vertices. Write the upper triangle of the adjacency - matrix of G as a bit vector x of length n(n-1)/2, using the ordering - (0,1),(0,2),(1,2),(0,3),(1,3),(2,3),...,(n-1,n). - - Then the graph is represented as N(n) R(x). - -Example: - Suppose n=5 and G has edges 0-2, 0-4, 1-3 and 3-4. - - x = 0 10 010 1001 - - Then N(n) = 68 and R(x) = R(010010 100100) = 81 99. - So, the graph is 68 81 99. - - -Description of sparse6 format. ------------------------------- - -Data type: - Undirected graphs of order 0 to 68719476735. - Loops and multiple edges are permitted. - -Optional Header: - >>sparse6<< (without end of line!) - -File name extension: - .s6 - -General structure: - - Each graph occupies one text line. Except for end-of-line characters, - each byte has the form 63+x, where 0 <= x <= 63. The byte encodes - the six bits of x. - - The encoded graph consists of: - (1) The character ':'. (This is present to distinguish - the code from graph6 format.) - (2) The number of vertices. - (3) A list of edges. - (4) end-of-line - - Loops and multiple edges are supported, but not directed edges. - -Number of vertices n: - - 1, 4, or 8 bytes N(n) as above. - This is the same as graph6 format. - -List of edges: - - Let k be the number of bits needed to represent n-1 in binary. - - The remaining bytes encode a sequence - - b[0] x[0] b[1] x[1] b[2] x[2] ... b[m] x[m] - - Each b[i] occupies 1 bit, and each x[i] occupies k bits. - Pack them together in bigendian order, and pad up to a - multiple of 6 as follows: - 1. If (n,k) = (2,1), (4,2), (8,4) or (16,5), and vertex - n-2 has an edge but n-1 doesn't have an edge, and - there are k+1 or more bits to pad, then pad with one - 0-bit and enough 1-bits to complete the multiple of 6. - 2. Otherwise, pad with enough 1-bits to complete the - multiple of 6. - These rules are to match the gtools procedures, and to avoid - the padding from looking like an extra loop in unusual cases. - - Then represent this bit-stream 6 bits per byte as indicated above. - - The vertices of the graph are 0..n-1. - The edges encoded by this sequence are determined thus: - - v = 0 - for i from 0 to m do - if b[i] = 1 then v = v+1 endif; - if x[i] > v then v = x[i] else output {x[i],v} endif - endfor - - In decoding, an incomplete (b,x) pair at the end is discarded. - -Example: - - :Fa@x^ - - ':' indicates sparse6 format. - Subtract 63 from the other bytes and write them in binary, - six bits each. - - 000111 100010 000001 111001 011111 - - The first byte is not 63, so it is n. n=7 - n-1 needs 3 bits (k=3). Write the other bits in groups - of 1 and k: - - 1 000 1 000 0 001 1 110 0 101 1 111 - - This is the b/x sequence 1,0 1,0 0,1 1,6 0,5 1,7. - The 1,7 at the end is just padding. - The remaining parts give the edges 0-1 0-2 1-2 5-6. diff --git a/tools/nauty25r9_mac/genbg b/tools/nauty25r9_mac/genbg deleted file mode 100644 index af42488a6fab5a9d844a70d75491c27d1ed0d8d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101200 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

  • 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

    yy?9Gl)x{;RQi|^i{K-BEOm}K{cKiTk*e7 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 aXH-*F&in!u7^%4!s4PBD(bc~D$bSKsHg+xm diff --git a/tools/nauty25r9_mac/genbg.c b/tools/nauty25r9_mac/genbg.c deleted file mode 100644 index 535efd2..0000000 --- a/tools/nauty25r9_mac/genbg.c +++ /dev/null @@ -1,1754 +0,0 @@ -/* genbg.c : version 2.3; B D McKay, 16 Feb 2013. */ - -/* TODO: consider colour swaps */ - -#define USAGE \ -"genbg [-c -ugs -vq -lzF] [-Z#] [-D#] [-A] [-d#|-d#:#] [-D#|-D#:#] n1 n2 \n\ - [mine[:maxe]] [res/mod] [file]" - -#define HELPTEXT \ -" Find all bicoloured graphs of a specified class.\n\ -\n\ - n1 : the number of vertices in the first class\n\ - n2 : the number of vertices in the second class\n\ - mine:maxe : a range for the number of edges\n\ - #:0 means '# or more' except in the case 0:0\n\ - res/mod : only generate subset res out of subsets 0..mod-1\n\ - file : the name of the output file (default stdout)\n\ - -c : only write connected graphs\n\ - -z : all the vertices in the second class must have\n\ - different neighbourhoods\n\ - -F : the vertices in the second class must have at least two\n\ - neighbours of degree at least 2\n\ - -L : there is no vertex in the first class whose removal leaves\n\ - the vertices in the second class unreachable from each other\n\ - -Z# : two vertices in the second class may have at most # common nbrs\n\ - -A : no vertex in the second class has a neighbourhood with is a\n\ - subset of another vertex in the second class\n\ - -D# : specify an upper bound for the maximum degree\n\ - Example: -D6. You can also give separate maxima for the\n\ - two parts, for example: -D5:6\n\ - -d# : specify a lower bound for the minimum degree.\n\ - Again, you can specify it separately for the two parts: -d1:2\n\ - -g : use graph6 format for output (default)\n\ - -s : use sparse6 format for output\n\ - -a : use Greechie diagram format for output\n\ - -u : do not output any graphs, just generate and count them\n\ - -v : display counts by number of edges to stderr\n\ - -l : canonically label output graphs (using the 2-part colouring)\n\ -\n\ - -q : suppress auxiliary output\n\ -\n\ - See program text for much more information.\n" - -/* -Output formats. - - If -n is absent, any output graphs are written in graph6 format. - - If -n is present, any output graphs are written in nauty format. - - For a graph of n vertices, the output consists of n+1 long ints - (even if a setword is shorter than a long int). The first contains - n, and the others contain the adjacency matrix. Long int i of - the adjacency matrix (0 <= i <= n-1) is the set of neighbours of - vertex i, cast from setword to long int. - -PRUNE feature. - - By defining the C preprocessor variables PRUNE1 and/or PRUNE2 at - compile time, you can filter the output of the program efficiently. - The value of the variable is a function name with parameter list - (graph *g, int *deg, int n1, int n2, int maxn2) - - The function will be called for each intermediate graph generated - by the program, including output graphs. The parameters are: - g = the graph in nauty format - deg = an array giving the degrees of the vertices - n1 = the number of vertices in the first colour class - (same as the n1 parameter on the command line) - n2 = the number of vertices in the second colour class - (this will always be at least 1) - maxn2 = the value of n2 on the command line - If n2=maxn2, the graph has the output size. - - If the function returns a non-zero value, neither this graph nor - any of its descendants will be written to the output. - - PRUNE1 and PRUNE2 are functionally equivalent, but placed at different - points in the program. Essentially, use PRUNE1 for fast tests that - eliminate many cases and PRUNE2 for slow tests that eliminate few. - If in doubt, try it both ways and choose the fastest. - You can use both PRUNE1 and PRUNE2 if you wish, in which case note - that the PRUNE1 test has already been passed before PRUNE2 is applied. - - Vertices 0..n1-1 are always present. The program works by successively - adding one more vertex to the second colour class. Vertex n1+n2-1 is - always the last one that has been added, and (except for n2=1) the - subgraph formed by deleting n1+n2-1 has previously been passed by the - pruning function. - - Note that either PRUNE1 nor PRUNE2 are called with n2=0, even if that - is the output level. - - If -c is specified, the isomorphism test has NOT been performed yet - at the time the pruning function is called. However the simplicity - test indicated by -z HAS been performed if -z is specified. - -OUTPROC feature. - - By defining the C preprocessor variable OUTPROC at compile time - (for Unix the syntax is -DOUTPROC=procname on the cc command), - genbg can be made to call a procedure of your manufacture with - each output graph instead of writing anything. Your procedure - needs to have type void and the argument list (FILE *f, graph *g, - int n1, int n2). f is a stream open for writing (in fact, in the - current version it is always stdout), g is the graph in nauty - format, and n1,n2 are the numbers of vertices on each side. Your - procedure can be in a separate file so long as it is linked with - genbg. The global variables nooutput, nautyformat and canonise - (all type boolean) can be used to test for the presence of the - flags -u, -n and -l, respectively. - - For backward compatibility, it is possible to instead define OUTPROC1 to - be the name of a procedure with argument list (FILE *f, graph *g, int n). - -INSTRUMENT feature. - - If the C preprocessor variable INSTRUMENT is defined at compile time, - extra code is inserted to collect statistics during execution, and - more information is written to stderr at termination. - -************************************************************************** - - Author: B. D. McKay, Oct 1994. bdm@cs.anu.edu.au - Copyright B. McKay (1994-2008). All rights reserved. - This software is subject to the conditions and waivers - detailed in the file nauty.h. - 1 May 2003 : fixed PRUNE feature - 13 Sep 2003 : added Greechie output, all outprocs have n1,n2 - 9 Oct 2003 : changed -l to respect partition - 11 Apr 2007 : make >A line more atomic - 29 Aug 2008 : include PLUGIN insertion - 29 Nov 2008 : slight improvement of isomorphism testing - 27 Jul 2011 : fixed error in PRUNE1 found by Stephen Hartke - 8 Jan 2012 : add antichains -A suggested by Andrew Juell - 23 Jan 2013 : fix splitlevinc initialization - 16 Feb 2014 : add a missing call to PRUNE2 - -**************************************************************************/ - -#define NAUTY_PGM 2 /* 1 = geng, 2 = genbg, 3 = gentourng */ -#undef MAXN -#define MAXN WORDSIZE - -#ifndef MAXN1 -#define MAXN1 24 /* not more than 30 */ -#endif -#define ONE_WORD_SETS -#include "gtools.h" /* which includes nauty.h and stdio.h */ - -static void (*outproc)(FILE*,graph*,int,int); -#ifdef OUTPROC -extern void OUTPROC(FILE*,graph*,int,int); -#endif - -static FILE *outfile; /* file for output graphs */ -static boolean connec; /* presence of -c */ -static boolean verbose; /* presence of -v */ -static boolean simple; /* presence of -z */ -boolean nautyformat; /* presence of -n */ -boolean nooutput; /* presence of -u */ -boolean canonise; /* presence of -l */ -boolean graph6; /* presence of -g */ -boolean sparse6; /* presence of -s */ -boolean greout; /* presence of -a */ -boolean quiet; /* presence of -q */ -boolean footfree; /* presence of -F */ -boolean cutfree; /* presence of -L */ -boolean antichain; /* presence of -A */ -int class1size; /* same as n1 */ -int maxcommon; /* -1 or value of -Z */ -static int maxdeg1,maxdeg2,n1,maxn2,mine,maxe,nprune,mod,res,curres; -static int mindeg1,mindeg2; -static graph gcan[MAXN]; -static int xval[MAXN]; /* x-bit version of second class, xval[0..] */ - -#if MAXN1 <= 16 -static int xbit[] = {0x0001,0x0002,0x0004,0x0008, - 0x0010,0x0020,0x0040,0x0080, - 0x0100,0x0200,0x0400,0x0800, - 0x1000,0x2000,0x4000,0x8000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : 15-leftbit[((x)>>8)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] + bytecount[(x)&0xFF]) -#elif MAXN1 <= 24 -static int xbit[] = {0x000001,0x000002,0x000004,0x000008, - 0x000010,0x000020,0x000040,0x000080, - 0x000100,0x000200,0x000400,0x000800, - 0x001000,0x002000,0x004000,0x008000, - 0x010000,0x020000,0x040000,0x080000, - 0x100000,0x200000,0x400000,0x800000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : 23-leftbit[((x)>>16)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + bytecount[(x)&0xFF]) -#else -static int xbit[] = {0x00000001,0x00000002,0x00000004,0x00000008, - 0x00000010,0x00000020,0x00000040,0x00000080, - 0x00000100,0x00000200,0x00000400,0x00000800, - 0x00001000,0x00002000,0x00004000,0x00008000, - 0x00010000,0x00020000,0x00040000,0x00080000, - 0x00100000,0x00200000,0x00400000,0x00800000, - 0x01000000,0x02000000,0x04000000,0x08000000, - 0x10000000,0x20000000,0x40000000,0x80000000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : \ - (x)&0xFF0000 ? 23-leftbit[((x)>>16)&0xFF] : \ - 31-leftbit[((x)>>24)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + \ - + bytecount[((x)>>24)&0xFF] + bytecount[(x)&0xFF]) -#endif - -typedef struct -{ - int ne,dmax; /* values used for xlb,xub calculation */ - int xlb,xub; /* saved bounds on extension degree */ - int lo,hi; /* work purposes for orbit calculation */ - int *xorb; /* min orbit representative */ -} leveldata; - -typedef struct -{ - long hi,lo; -} bigint; - -#define ZEROBIG(big) big.hi = big.lo = 0L -#define ISZEROBIG(big) (big.lo == 0 && big.hi == 0) -#define SETBIG(big,value) {big.hi = 0L; big.lo = (value);} -#define ADDBIG(big,extra) if ((big.lo += (extra)) >= 1000000000L) \ - { ++big.hi; big.lo -= 1000000000L;} -#define PRINTBIG(file,big) if (big.hi == 0) \ - fprintf(file,"%ld",big.lo); else fprintf(file,"%ld%09ld",big.hi,big.lo) -#define BIGTODOUBLE(big) (big.hi * 1000000000.0 + big.lo) -#define SUMBIGS(big1,big2) {if ((big1.lo += big2.lo) >= 1000000000L) \ - {big1.lo -= 1000000000L; big1.hi += big2.hi + 1L;} \ - else big1.hi += big2.hi;} -#define SUBBIGS(big1,big2) {if ((big1.lo -= big2.lo) < 0L) \ - {big1.lo += 1000000000L; big1.hi -= big2.hi + 1L;} \ - else big1.hi -= big2.hi;} -/* Note: SUBBIGS must not allow the value to go negative. - SUMBIGS and SUBBIGS both permit big1 and big2 to be the same bigint. */ -#define ISEQBIG(big1,big2) (big1.lo == big2.lo && big1.hi == big2.hi) -#define ISASBIG(big,value) (big.hi > 0 || big.lo >= (value)) - -#define IFLE1BITS(ww) if (!((ww)&((ww)-1))) - -static leveldata data[MAXN]; /* data[n] is data for n -> n+1 */ -static bigint ecount[1+MAXN*MAXN/4]; /* counts by number of edges */ -static int xstart[MAXN+1]; /* index into xset[] for each cardinality */ -static int *xset; /* array of all x-sets in card order */ -static int *xcard; /* cardinalities of all x-sets */ -static int *xinv; /* map from x-set to index in xset */ - -#ifdef INSTRUMENT -static long nodes[MAXN],rigidnodes[MAXN],fertilenodes[MAXN]; -static long a1calls,a1nauty,a1succs; -static long a2calls,a2nauty,a2uniq,a2succs; -#endif - -#ifdef SPLITTEST -static unsigned long splitcases = 0; -#endif - -#ifdef PLUGIN -#include PLUGIN -#endif - -/************************************************************************/ - -void -writeny(FILE *f, graph *g, int n1, int n2) -/* write graph g (n1+n2 vertices) to file f in y format */ -{ - static char ybit[] = {32,16,8,4,2,1}; - char s[(MAXN*(MAXN-1)/2 + 5)/6 + 4]; - int i,j,k; - char y,*sp; - int n; - - n = n1 + n2; - sp = s; - *(sp++) = 0x40 | n; - y = 0x40; - - k = -1; - for (j = 1; j < n; ++j) - for (i = 0; i < j; ++i) - { - if (++k == 6) - { - *(sp++) = y; - y = 0x40; - k = 0; - } - if (g[i] & bit[j]) y |= ybit[k]; - } - if (n >= 2) *(sp++) = y; - *(sp++) = '\n'; - *sp = '\0'; - - if (fputs(s,f) == EOF || ferror(f)) - { - fprintf(stderr,">E writeny : error on writing file\n"); - exit(2); - } -} - -/************************************************************************/ - -void -writeg6x(FILE *f, graph *g, int n1, int n2) -/* write graph g (n1+n2 vertices) to file f in graph6 format */ -{ - writeg6(f,g,1,n1+n2); -} - -/************************************************************************/ - -void -writes6x(FILE *f, graph *g, int n1, int n2) -/* write graph g (n1+n2 vertices) to file f in graph6 format */ -{ - writes6(f,g,1,n1+n2); -} - -/************************************************************************/ - -void -writegre(FILE *f, graph *g, int n1, int n2) -/* write graph g (n1+n2 vertices) to file f in Greechie diagram format */ -{ - static char atomname[] = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\ -abcdefghijklmnopqrstuvwxyz!\"#$%&'()*-/:;<=>?@[\\]^_`{|}~"; - char grestr[MAXN*MAXN+MAXN+5]; - int i,j,k; - setword gi; - - k = 0; - for (i = n1; i < n1+n2; ++i) - { - if (i > n1) grestr[k++] = ','; - gi = g[i]; - while (gi) - { - TAKEBIT(j,gi); - grestr[k++] = atomname[j]; - } - } - grestr[k++] = '.'; - grestr[k++] = '\n'; - grestr[k] = '\0'; - if (fputs(grestr,f) == EOF || ferror(f)) - { - fprintf(stderr,">E genbg : error on writing file\n"); - gt_abort("genbg"); - } -} - -/***********************************************************************/ - -static void -nullwrite(FILE *f, graph *g, int n1, int n2) -/* don't write graph g (n1+n2 vertices) to file f */ -{ -} - -/***********************************************************************/ - -#ifdef OUTPROC1 - -static void -write12(FILE *f, graph *g, int n1, int n2) -/* pass to OUTPROC1 */ -{ - OUTPROC1(f,g,1,n1+n2); -} - -#endif - -/***********************************************************************/ - -void -writenauty(FILE *f, graph *g, int n1, int n2) -/* write graph g (n1+n2 vertices) to file f in nauty format */ -{ - int nn; - - nn = n1+n2; - - if (fwrite((char *)&nn,sizeof(int),(size_t)1,f) != 1 || - fwrite((char*)g,sizeof(setword),(size_t)nn,f) != nn) - { - fprintf(stderr,">E writenauty : error on writing file\n"); - exit(2); - } -} - -/*********************************************************************/ - -static void -fragments(int *x, int nx, int *frag, int *nfrag) -/* For each v in union(x[0..nx-1]), find the components of the - hypergraph x - v and add them to frag if there are more than one. */ -/* This implementation is shocking. Improve it! */ -{ - int allx,i,j,v; - int vbit,nw,w[MAXN]; - boolean done; - - allx = 0; - for (i = 0; i < nx; ++i) allx |= x[i]; - - *nfrag = 0; - - while (allx) - { - v = XNEXTBIT(allx); - vbit = xbit[v]; - allx &= ~vbit; - - for (i = 0; i < nx; ++i) w[i] = x[i] & ~vbit; - nw = nx; - - done = FALSE; - while (!done && nw > 1) - { - done = TRUE; - for (i = 0; i < nw-1; ++i) - for (j = i+1; j < nw; ) - if ((w[i] & w[j]) != 0) - { - w[i] |= w[j]; - w[j] = w[nw-1]; - --nw; - done = FALSE; - } - else - ++j; - } - - if (nw > 1) - for (i = 0; i < nw; ++i) - frag[(*nfrag)++] = w[i]; - } -} - -/*********************************************************************/ - -static boolean -isconnected(graph *g, int n) -/* test if g is connected */ -{ - setword seen,expanded,toexpand,allbits; - int i; - - allbits = ALLMASK(n); - - expanded = bit[n-1]; - seen = expanded | g[n-1]; - - while (seen != allbits && (toexpand = (seen & ~expanded))) /* not == */ - { - i = FIRSTBITNZ(toexpand); - expanded |= bit[i]; - seen |= g[i]; - } - - return seen == allbits; -} - -/**************************************************************************/ - -static boolean -distinvar(graph *g, int *invar, int n1, int n2) - /* make distance invariant/ - exit immediately FALSE if n-1 not maximal else exit TRUE - Note: only invar[n1..n1+n2-1] set */ -{ - int w,n; - setword workset,frontier; - setword sofar; - int inv,d,v; - - n = n1 + n2; - for (v = n-1; v >= n1; --v) - { - inv = 0; - sofar = frontier = bit[v]; - for (d = 1; frontier != 0; ++d) - { - workset = 0; - inv += POPCOUNT(frontier) ^ (0x57 + d); - while (frontier) - { - w = FIRSTBITNZ(frontier); - frontier &= ~bit[w]; - workset |= g[w]; - } - frontier = workset & ~sofar; - sofar |= frontier; - } - invar[v] = inv; - if (v < n-1 && inv > invar[n-1]) return FALSE; - } - return TRUE; -} - -/**************************************************************************/ - -static void -makeleveldata(void) -/* make the level data for each level */ -{ - int i,j,h; - int nn,nxsets,tttn; - long ncj; - leveldata *d; - int xw,cw; - - nn = maxdeg2 <= n1 ? maxdeg2 : n1; - ncj = nxsets = 1; - for (j = 1; j <= nn; ++j) - { - ncj = (ncj * (n1 - j + 1)) / j; - nxsets += ncj; - } - - tttn = 1 << n1; - xset = (int*) ALLOCS(nxsets,sizeof(int)); - xcard = (int*) ALLOCS(nxsets,sizeof(int)); - xinv = (int*) ALLOCS(tttn,sizeof(int)); - if (xset==NULL || xcard==NULL || xinv==NULL) - { - fprintf(stderr,">E genbg: malloc failed in makeleveldata()\n"); - exit(2); - } - - j = 0; - for (i = 0; i < tttn; ++i) - if ((h = XPOPCOUNT(i)) <= maxdeg2) - { - xset[j] = i; - xcard[j] = h; - ++j; - } - - if (j != nxsets) - { - fprintf(stderr,">E genbg: j=%d mxsets=%d\n",j,nxsets); - exit(2); - } - - /* The following is not SORT_OF_SORT 1, 2 or 3 */ - - h = 1; - do - h = 3 * h + 1; - while (h < nxsets); - - do - { - for (i = h; i < nxsets; ++i) - { - xw = xset[i]; - cw = xcard[i]; - for (j = i; xcard[j-h] > cw || - (xcard[j-h] == cw && xset[j-h] > xw); ) - { - xset[j] = xset[j-h]; - xcard[j] = xcard[j-h]; - if ((j -= h) < h) break; - } - xset[j] = xw; - xcard[j] = cw; - } - h /= 3; - } - while (h > 0); - - for (i = 0; i < nxsets; ++i) xinv[xset[i]] = i; - - xstart[0] = 0; - for (i = 1; i < nxsets; ++i) - if (xcard[i] > xcard[i-1]) xstart[xcard[i]] = i; - xstart[xcard[nxsets-1]+1] = nxsets; - - for (i = 0; i < maxn2; ++i) - { - - d = &data[i]; - - d->xorb = (int*) ALLOCS(nxsets,sizeof(int)); - - if (d->xorb==NULL) - { - fprintf(stderr,">E genbg: malloc failed in makeleveldata()\n"); - exit(2); - } - - d->ne = d->dmax = d->xlb = d->xub = -1; - } -} - -/**************************************************************************/ - -static UPROC -userautomproc(int count, int *p, int *orbits, int numorbits, - int stabvertex, int n) -/* Automorphism procedure called by nauty - Form orbits on powerset of VG - Operates on data[n-n1] */ -{ - int i,j1,j2; - int moved,pxi,pi; - int w,lo,hi; - int *xorb; - - xorb = data[n-n1].xorb; - lo = data[n-n1].lo; - hi = data[n-n1].hi; - - if (count == 1) /* first automorphism */ - for (i = lo; i < hi; ++i) xorb[i] = i; - - moved = 0; - for (i = 0; i < n; ++i) - if (p[i] != i) moved |= xbit[i]; - - for (i = lo; i < hi; ++i) - { - if ((w = xset[i] & moved) == 0) continue; - pxi = xset[i] & ~moved; - while (w) - { - j1 = XNEXTBIT(w); - w &= ~xbit[j1]; - pxi |= xbit[p[j1]]; - } - pi = xinv[pxi]; - - j1 = xorb[i]; - while (xorb[j1] != j1) j1 = xorb[j1]; - j2 = xorb[pi]; - while (xorb[j2] != j2) j2 = xorb[j2]; - - if (j1 < j2) xorb[j2] = xorb[i] = xorb[pi] = j1; - else if (j1 > j2) xorb[j1] = xorb[i] = xorb[pi] = j2; - } -} - -/***************************************************************************** -* * -* refinex(g,lab,ptn,level,numcells,count,active,goodret,code,m,n) is a * -* custom version of refine() which can exit quickly if required. * -* * -* Only use at level==0. * -* goodret : whether to do an early return for code 1 * -* code := -1 for n-1 not max, 0 for maybe, 1 for definite * -* * -*****************************************************************************/ - -static void -refinex(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, boolean goodret, - int *code, int m, int n) -{ - int i,c1,c2,labc1; - setword x; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - set *gptr; - setword workset; - int workperm[MAXN]; - int bucket[MAXN+2]; - - if (n == 1) - { - *code = 1; - return; - } - - *code = 0; - split1 = -1; - while (*numcells < n && ((split1 = nextelement(active,1,split1)) >= 0 - || (split1 = nextelement(active,1,-1)) >= 0)) - { - DELELEMENT1(active,split1); - for (split2 = split1; ptn[split2] > 0; ++split2) - {} - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],1); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT1(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = 0; - ++*numcells; - ADDELEMENT1(active,c1); - } - } - } - - else /* nontrivial splitting cell */ - { - workset = 0; - for (i = split1; i <= split2; ++i) - workset |= bit[lab[i]]; - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - if ((x = workset & g[lab[i]])) /* not == */ - cnt = POPCOUNT(x); - else - cnt = 0; - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - if ((x = workset & g[lab[i]])) /* not == */ - cnt = POPCOUNT(x); - else - cnt = 0; - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) continue; - c1 = cell1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - if (c1 != cell1) - { - ADDELEMENT1(active,c1); - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = 0; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) - lab[i] = workperm[i]; - } - } - - if (ptn[n-2] == 0) - { - if (lab[n-1] == n-1) - { - *code = 1; - if (goodret) return; - } - else - { - *code = -1; - return; - } - } - else - { - i = n - 1; - while (1) - { - if (lab[i] == n-1) break; - --i; - if (ptn[i] == 0) - { - *code = -1; - return; - } - } - } - } -} - -/**************************************************************************/ - -static void -makecanon(graph *g, graph *gcan, int n1, int n2) -/* gcan := canonise(g) */ -{ - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - setword active[1]; - int i; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - - options.writemarkers = FALSE; - options.writeautoms = FALSE; - options.getcanon = TRUE; - options.defaultptn = FALSE; - - for (i = 0; i < n1+n2; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n1-1] = ptn[n1+n2-1] = 0; - EMPTYSET(active,1); - ADDELEMENT(active,0); - ADDELEMENT(active,n1); - - nauty(g,lab,ptn,active,orbits,&options,&stats, - workspace,50,1,n1+n2,gcan); -} - -/**************************************************************************/ - -static boolean -accept1(graph *g, int n2, int x, graph *gx, int *deg, boolean *rigid) - /* decide if n2 in theta(g+x) -- version for n2+1 < maxn2 */ -{ - int i,n; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int count[MAXN]; - graph h[MAXN]; - int xw; - int nx,numcells,code; - int i0,i1,degn; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - -#ifdef INSTRUMENT - ++a1calls; -#endif - - n = n1 + n2; - nx = n + 1; - for (i = 0; i < n; ++i) gx[i] = g[i]; - gx[n] = 0; - deg[n] = degn = XPOPCOUNT(x); - - xw = x; - while (xw) - { - i = XNEXTBIT(xw); - xw &= ~xbit[i]; - gx[i] |= bit[n]; - gx[n] |= bit[i]; - ++deg[i]; - } -#ifdef PRUNE1 - if (PRUNE1(gx,deg,n1,n2+1,maxn2)) return FALSE; -#endif - - for (i = 0; i < n1; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n1-1] = 0; - - i0 = n1; - i1 = n; - for (i = n1; i < nx; ++i) - { - if (deg[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - - ptn[n] = 0; - - if (i0 == n1) - { - numcells = 2; - active[0] = bit[0] | bit[n1]; - } - else - { - numcells = 3; - active[0] = bit[0] | bit[n1] | bit[i1+1]; - ptn[i1] = 0; - } - refinex(gx,lab,ptn,0,&numcells,count,active,FALSE,&code,1,nx); - - if (code < 0) return FALSE; - - if (numcells == nx) - { - *rigid = TRUE; -#ifdef INSTRUMENT - ++a1succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,deg,n1,n2+1,maxn2)) return FALSE; -#endif - return TRUE; - } - - options.writemarkers = FALSE; - options.writeautoms = FALSE; - options.getcanon = TRUE; - options.defaultptn = FALSE; - options.userautomproc = userautomproc; - - active[0] = 0; -#ifdef INSTRUMENT - ++a1nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,h); - - if (orbits[lab[n]] == orbits[n]) - { - *rigid = stats.numorbits == nx; -#ifdef INSTRUMENT - ++a1succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,deg,n1,n2+1,maxn2)) return FALSE; -#endif - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static boolean -accept2(graph *g, int n2, int x, graph *gx, int *deg, boolean nuniq) -/* decide if n in theta(g+x) -- version for n+1 == maxn */ -{ - int i,n; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int degx[MAXN],invar[MAXN]; - setword vmax,gv; - int qn,qv; - int count[MAXN]; - int xw; - int nx,numcells,code; - int degn,i0,i1,j,j0,j1; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - -#ifdef INSTRUMENT - ++a2calls; - if (nuniq) ++a2uniq; -#endif - n = n1 + n2; - nx = n + 1; - for (i = 0; i < n; ++i) - { - gx[i] = g[i]; - degx[i] = deg[i]; - } - gx[n] = 0; - degx[n] = degn = XPOPCOUNT(x); - - xw = x; - while (xw) - { - i = XNEXTBIT(xw); - xw &= ~xbit[i]; - gx[i] |= bit[n]; - gx[n] |= bit[i]; - ++degx[i]; - } -#ifdef PRUNE1 - if (PRUNE1(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - - if (nuniq) - { -#ifdef INSTRUMENT - ++a2succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - if (canonise) makecanon(gx,gcan,n1,n2+1); - return TRUE; - } - - for (i = 0; i < n1; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n1-1] = 0; - - i0 = n1; - i1 = n; - for (i = n1; i < nx; ++i) - { - if (degx[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - - ptn[n] = 0; - - if (i0 == n1) - { - numcells = 2; - active[0] = bit[0] | bit[n1]; - - if (!distinvar(gx,invar,n1,n2+1)) return FALSE; - qn = invar[n]; - j0 = n1; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - qv = invar[j]; - if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > n1) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - if (canonise) makecanon(gx,gcan,n1,n2+1); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - else - { - numcells = 3; - ptn[i1] = 0; - active[0] = bit[0] | bit[n1] | bit[i1+1]; - - vmax = 0; - j = MAXN; - for (i = 0; i < n1; ++i) - if (degx[i] < j && degx[i] > 0) - { - j = degx[i]; - vmax = bit[i]; - } - else if (degx[i] == j) - vmax |= bit[i]; - - gv = gx[n] & vmax; - qn = POPCOUNT(gv); - - j0 = i1+1; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - gv = gx[j] & vmax; - qv = POPCOUNT(gv); - if (qv > qn) - return FALSE; - else if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > i1+1) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - if (canonise) makecanon(gx,gcan,n1,n2+1); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - - refinex(gx,lab,ptn,0,&numcells,count,active,TRUE,&code,1,nx); - - if (code < 0) - return FALSE; - else if (code > 0 || numcells >= nx-4) - { -#ifdef INSTRUMENT - ++a2succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - if (canonise) makecanon(gx,gcan,n1,n2+1); - return TRUE; - } - - options.writemarkers = FALSE; - options.writeautoms = FALSE; - options.getcanon = TRUE; - options.defaultptn = FALSE; - - active[0] = 0; -#ifdef INSTRUMENT - ++a2nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,gcan); - - if (orbits[lab[n]] == orbits[n]) - { -#ifdef INSTRUMENT - ++a2succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - if (canonise) makecanon(gx,gcan,n1,n2+1); - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static void -xbnds(int n2, int ne, int dmax) -/* find bounds on degree for vertex n2 - Store answer in data[*].* */ -{ - int xlb,xub,m; - - xlb = n2 == 0 ? (connec ? 1 : 0) : dmax; - if (xlb < mindeg2) xlb = mindeg2; - m = mine - ne - (maxn2 - n2 -1)*maxdeg2; - if (m > xlb) xlb = m; - - xub = maxdeg2; - m = (maxe - ne) / (maxn2 - n2); - if (m < xub) xub = m; - - data[n2].ne = ne; - data[n2].dmax = dmax; - data[n2].xlb = xlb; - data[n2].xub = xub; -} - -/**************************************************************************/ - -static void -genextend(graph *g, int n2, int *deg, int ne, boolean rigid, int xlb, int xub) -/* extend from n2 to n2+1 */ -{ - int x,y,d; - int *xorb,xc; - int nx,i,j,imin,imax,dmax; - int xlbx,xubx,n; - graph gx[MAXN]; - int degx[MAXN]; - boolean rigidx; - int dneed,need,nfeet,hideg,deg1,ft[MAXN],nfrag,frag[MAXN]; - -#ifdef INSTRUMENT - boolean haschild; - - haschild = FALSE; - ++nodes[n2]; - if (rigid) ++rigidnodes[n2]; -#endif - - n = n1 + n2; - nx = n2 + 1; - dmax = deg[n-1]; - - d = 0; - dneed = mindeg1 - maxn2 + n2; - need = 0; - hideg = 0; - deg1 = 0; - for (i = 0; i < n1; ++i) - { - if (deg[i] == maxdeg1) d |= xbit[i]; - if (deg[i] <= dneed) need |= xbit[i]; - if (deg[i] >= 2) hideg |= xbit[i]; - if (deg[i] == 1) deg1 |= xbit[i]; - } - - if (xlb < XPOPCOUNT(need)) xlb = XPOPCOUNT(need); - if (xlb > xub) return; - - imin = xstart[xlb]; - imax = xstart[xub+1]; - xorb = data[n2].xorb; - - if (nx == maxn2) - { - if (footfree) - { - nfeet = 0; - for (j = 0; j < n2; ++j) - { - x = xval[j] & hideg; - IFLE1BITS(x) ft[nfeet++] = xval[j] & deg1; - } - } - if (cutfree) fragments(xval,n2,frag,&nfrag); - - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if ((x & d) != 0) continue; - if ((need & ~x) != 0) continue; - - if (simple) - { - for (j = n2; --j >= 0;) - if (x == xval[j]) break; - if (j >= 0) continue; - } - if (maxcommon >= 0) - { - for (j = n2; --j >= 0;) - { - y = x & xval[j]; - if (XPOPCOUNT(y) > maxcommon) break; - } - if (j >= 0) continue; - } - if (antichain) - { - for (j = 0; j < n2; ++j) - if ((xval[j] & ~x) == 0) break; - if (j < n2) continue; - } - if (footfree) - { - y = x & (hideg | deg1); - IFLE1BITS(y) continue; - for (j = 0; j < nfeet; ++j) - if ((x & ft[j]) == 0) break; - if (j < nfeet) continue; - } - if (cutfree) - { - y = x & (hideg | deg1); - IFLE1BITS(y) continue; - for (j = 0; j < nfrag; ++j) - if ((x & frag[j]) == 0) break; - if (j < nfrag) continue; - } - - xval[n2] = x; - - if (nx == nprune) - { - if (curres == 0) curres = mod; -#ifdef SPLITTEST - --curres; - ++splitcases; - continue; -#else - if (--curres != 0) continue; -#endif - } - if (accept2(g,n2,x,gx,deg,xc > dmax)) - if (!connec || isconnected(gx,n+1)) - { - ADDBIG(ecount[ne+xc],1); -#ifdef INSTRUMENT - haschild = TRUE; -#endif - (*outproc)(outfile,canonise ? gcan : gx,n1,n2+1); - } - } - } - else - { - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if ((x & d) != 0) continue; - if ((need & ~x) != 0) continue; - - if (nx == nprune) - { - if (curres == 0) curres = mod; -#ifdef SPLITTEST - --curres; - ++splitcases; - continue; -#else - if (--curres != 0) continue; -#endif - } - - if (simple) - { - for (j = n2; --j >= 0;) - if (x == xval[j]) break; - if (j >= 0) continue; - } - if (maxcommon >= 0) - { - for (j = n2; --j >= 0;) - { - y = x & xval[j]; - if (XPOPCOUNT(y) > maxcommon) break; - } - if (j >= 0) continue; - } - if (antichain) - { - for (j = 0; j < n2; ++j) - if ((xval[j] & ~x) == 0) break; - if (j < n2) continue; - } - xval[n2] = x; - - for (j = 0; j < n; ++j) degx[j] = deg[j]; - if (data[nx].ne != ne+xc || data[nx].dmax != xc) - xbnds(nx,ne+xc,xc); - xlbx = data[nx].xlb; - xubx = data[nx].xub; - if (xlbx > xubx) continue; - - data[nx].lo = xstart[xlbx]; - data[nx].hi = xstart[xubx+1]; - if (accept1(g,n2,x,gx,degx,&rigidx)) - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - genextend(gx,nx,degx,ne+xc,rigidx,xlbx,xubx); - } - } - } -#ifdef INSTRUMENT - if (haschild) ++fertilenodes[n2]; -#endif -} - -/**************************************************************************/ -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *arg; - boolean badargs,gotD,gote,gotf,gotmr,gotZ,gotd,gotX; - long Dval1,Dval2; - long dval1,dval2; - int i,j,imin,imax,argnum,sw; - int splitlevinc; - graph g[MAXN1]; - int deg[MAXN1]; - bigint nout; - double t1,t2; - char *outfilename; - char msg[201]; - - HELP; - nauty_check(WORDSIZE,1,MAXN,NAUTYVERSIONID); - - if (MAXN > WORDSIZE || MAXN1 > 8*sizeof(int)-2) - { - fprintf(stderr,"genbg: incompatible MAXN, MAXN1 or WORDSIZE\n"); - fprintf(stderr,"--See notes in program source\n"); - exit(1); - } - - badargs = FALSE; - connec = FALSE; - verbose = FALSE; - nautyformat = FALSE; - nooutput = FALSE; - canonise = FALSE; - greout = FALSE; - simple = FALSE; - graph6 = FALSE; - sparse6 = FALSE; - quiet = FALSE; - footfree = FALSE; - cutfree = FALSE; - - gote = FALSE; - gotf = FALSE; - gotmr = FALSE; - gotD = FALSE; - gotd = FALSE; - gotZ = FALSE; - gotX = FALSE; - outfilename = NULL; - - maxdeg1 = maxdeg2 = MAXN; - mindeg1 = mindeg2 = 0; - - argnum = 0; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('n',nautyformat) - else SWBOOLEAN('u',nooutput) - else SWBOOLEAN('q',quiet) - else SWBOOLEAN('v',verbose) - else SWBOOLEAN('z',simple) - else SWBOOLEAN('F',footfree) - else SWBOOLEAN('L',cutfree) - else SWBOOLEAN('A',antichain) - else SWBOOLEAN('l',canonise) - else SWBOOLEAN('c',connec) - else SWBOOLEAN('a',greout) - else SWBOOLEAN('g',graph6) - else SWBOOLEAN('s',sparse6) - else SWINT('Z',gotZ,maxcommon,"genbg -Z") - else SWINT('X',gotX,splitlevinc,"geng -X") - else SWRANGE('D',":-",gotD,Dval1,Dval2,"genbg -D") - else SWRANGE('d',":-",gotd,dval1,dval2,"genbg -d") -#ifdef PLUGIN_SWITCHES -PLUGIN_SWITCHES -#endif - else badargs = TRUE; - } - } - else if (arg[0] == '-' && arg[1] == '\0') - gotf = TRUE; - else - { - if (argnum == 0) - { - if (sscanf(arg,"%d",&n1) != 1) badargs = TRUE; - ++argnum; - } - else if (argnum == 1) - { - if (sscanf(arg,"%d",&maxn2) != 1) badargs = TRUE; - ++argnum; - } - else if (gotf) - badargs = TRUE; - else - { - if (!gotmr) - { - if (sscanf(arg,"%d/%d",&res,&mod) == 2) - { - gotmr = TRUE; - continue; - } - } - if (!gote) - { - if (sscanf(arg,"%d:%d",&mine,&maxe) == 2 - || sscanf(arg,"%d-%d",&mine,&maxe) == 2) - { - gote = TRUE; - if (maxe == 0 && mine > 0) maxe = MAXN*MAXN/4; - continue; - } - else if (sscanf(arg,"%d",&mine) == 1) - { - gote = TRUE; - maxe = mine; - continue; - } - } - if (!gotf) - { - outfilename = arg; - gotf = TRUE; - continue; - } - } - } - } - - if (argnum < 2) - badargs = TRUE; - else if (n1 < 1 || maxn2 < 0 || n1 > MAXN1 || n1+maxn2 > MAXN) - { - fprintf(stderr, - ">E genbg: must have n1=1..%d, n1+n2=1..%d\n",MAXN1,MAXN); - badargs = TRUE; - } - - if (!gote) - { - mine = 0; - maxe = n1 * maxn2; - } - - if (!gotmr) - { - mod = 1; - res = 0; - } - else if (argnum == 5 || argnum > 6) - badargs = TRUE; - - if (gotd) - { - mindeg1 = dval1; - mindeg2 = dval2; - } - if (gotD) - { - maxdeg1 = Dval1; - maxdeg2 = Dval2; - } - if (maxdeg1 > maxn2) maxdeg1 = maxn2; - if (maxdeg2 > n1) maxdeg2 = n1; - if (connec && mine < n1+maxn2-1) mine = n1 + maxn2 - 1; - if (connec && mindeg1 == 0) mindeg1 = 1; - if (connec && mindeg2 == 0) mindeg2 = 1; - if (maxe > n1*maxdeg1) maxe = n1*maxdeg1; - if (maxe > maxn2*maxdeg2) maxe = maxn2*maxdeg2; - if (mine < n1*mindeg1) mine = n1*mindeg1; - if (mine < maxn2*mindeg2) mine = maxn2*mindeg2; - - if (!badargs && (mine > maxe || maxe < 0 || maxdeg1 < 0 || maxdeg2 < 0)) - { - fprintf(stderr,">E genbg: impossible mine,maxe,maxdeg values\n"); - badargs = TRUE; - } - - if (!gotZ) maxcommon = -1; - - if (!badargs && (mine > maxe || maxe < 0 || maxdeg1 < 0 || maxdeg2 < 0)) - { - fprintf(stderr, - ">E genbg: impossible mine,maxe,mindeg,maxdeg values\n"); - badargs = TRUE; - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if ((nautyformat!=0) + (graph6!=0) + (greout!=0) - + (sparse6!=0) + (nooutput!=0) > 1) - gt_abort(">E genbg: -ungsa are incompatible\n"); - -#ifdef OUTPROC - outproc = OUTPROC; -#else -#ifdef OUTPROC1 - outproc = write12; -#endif - if (nautyformat) outproc = writenauty; - else if (nooutput) outproc = nullwrite; - else if (sparse6) outproc = writes6x; - else if (greout) outproc = writegre; - else outproc = writeg6x; -#endif - -#ifdef PLUGIN_INIT -PLUGIN_INIT -#endif - - for (i = 0; i <= maxe; ++i) ZEROBIG(ecount[i]); - - if (nooutput) - outfile = stdout; - else if (!gotf || outfilename == NULL) - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename, - nautyformat ? "wb" : "w")) == NULL) - { - fprintf(stderr, - ">E genbg: can't open %s for writing\n",outfilename); - gt_abort(NULL); - } - -/* - if (!quiet) - { - fprintf(stderr,">A %s n=%d+%d e=%d:%d d=%d:%d D=%d:%d ", - argv[0],n1,maxn2,mine,maxe, - mindeg1,mindeg2,maxdeg1,maxdeg2); - if (simple) fprintf(stderr,"z"); - if (footfree) fprintf(stderr,"F"); - if (connec) fprintf(stderr,"c"); - if (maxcommon >= 0) fprintf(stderr,"Z%d",maxcommon); - if (mod > 1) fprintf(stderr," class=%d/%d",res,mod); - fprintf(stderr,"\n"); - } -*/ - - if (!quiet) - { - msg[0] = '\0'; - if (strlen(argv[0]) > 75) - fprintf(stderr,">A %s",argv[0]); - else - CATMSG1(">A %s",argv[0]); - CATMSG4(" n=%d+%d e=%d:%d",n1,maxn2,mine,maxe); - CATMSG4(" d=%d:%d D=%d:%d ",mindeg1,mindeg2,maxdeg1,maxdeg2); - if (simple) CATMSG0("z"); - if (footfree) CATMSG0("F"); - if (antichain) CATMSG0("A"); - if (connec) CATMSG0("c"); - if (maxcommon >= 0) CATMSG1("Z%d",maxcommon); - if (cutfree) CATMSG0("L"); - if (mod > 1) CATMSG2(" class=%d/%d",res,mod); - CATMSG0("\n"); - fputs(msg,stderr); - fflush(stderr); - } - - class1size = n1; - - for (i = 0; i < n1; ++i) - { - g[i] = 0; - deg[i] = 0; - } - - t1 = CPUTIME; - - if (maxn2 == 0) - { - if (res == 0) - { - ADDBIG(ecount[0],1); - (*outproc)(outfile,g,n1,0); - } - } - else - { - makeleveldata(); - curres = res; - if (mod <= 1) nprune = 0; - else if (maxn2 >= 6) nprune = maxn2 - 2; - else if (maxn2 >= 3) nprune = maxn2 - 1; - else nprune = maxn2; - - if (gotX) - { - nprune += splitlevinc; - if (nprune > maxn2) nprune = maxn2; - if (nprune < 0) nprune = 0; - } - - xbnds(0,0,0); - imin = xstart[data[0].xlb]; - imax = xstart[data[0].xub+1]; - - for (i = imin; i < imax; ++i) - data[0].xorb[i] = -1; - - for (i = data[0].xlb; i <= data[0].xub; ++i) - data[0].xorb[xstart[i]] = xstart[i]; - - genextend(g,0,deg,0,FALSE,data[0].xlb,data[0].xub); - } - t2 = CPUTIME; - - ZEROBIG(nout); - for (i = 0; i <= maxe; ++i) SUMBIGS(nout,ecount[i]); - - if (verbose) - for (i = 0; i <= maxe; ++i) - if (!ISZEROBIG(ecount[i])) - { - fprintf(stderr,">C "); - PRINTBIG(stderr,ecount[i]); - fprintf(stderr," graphs with %d edges\n",i); - } - -#ifdef INSTRUMENT - fprintf(stderr,"\n>N node counts\n"); - for (i = 0; i < maxn2; ++i) - fprintf(stderr," level %2d: %7ld (%ld rigid, %ld fertile)\n", - i,nodes[i],rigidnodes[i],fertilenodes[i]); - fprintf(stderr,">A1 %ld calls to accept1, %ld nauty, %ld succeeded\n", - a1calls,a1nauty,a1succs); - fprintf(stderr, - ">A2 %ld calls to accept2, %ld nuniq, %ld nauty, %ld succeeded\n", - a2calls,a2uniq,a2nauty,a2succs); - fprintf(stderr,"\n"); -#endif - -#ifdef SPLITTEST - fprintf(stderr,">Z %lu splitting cases at level %d; cpu=%3.2f sec\n", - splitcases,nprune,t2-t1); -#else - if (!quiet) - { - fprintf(stderr,">Z "); - PRINTBIG(stderr,nout); - fprintf(stderr," graphs generated in %3.2f sec\n",t2-t1); - } -#endif - - exit(0); -} diff --git a/tools/nauty25r9_mac/geng b/tools/nauty25r9_mac/geng deleted file mode 100644 index 12912ccd383400b948f2dcd07855224aa6623107..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109520 zcmeEvdw5e-)_2k-(9)JuuvHvE+OaBCbm&-=K#?9efpZ`c96`|mI})w%dO;yUohdDt zM!P*6sG~SIBctzJnR&+g;6U0c6mYnykQy)Cq~&7s{nkDwY0@(D&ij0q zzrH+Aa`xGmwb$Nz?X}lhd+nXw=fCXkZ!(!vO{QfjCX*=}-#7Z1Og>W{LMGFd_{#W} zmCX>R*zdFdU^>Mnf6U3RmwY2QPosjevYGbTGn2FM@=x@FV!Q)4lNDcj(xYc!^=xYV~~(DN{2`9mY(eNvMlkntZcE{GjDM`syBYcHZzCUYUGH$#|oqw@X%%a zqr)qk|InjPJhTWgz2T*e)!{vEG?(6~-{YS?__-E7zPP8sz2Pkzr^8z|T!%pKN$rgT z)&pf_uEp*}3m$*ii0=*0^g|uq@xew0yeEE=a798{ndkAR7Cio7*@DN*7xMSy@d!Vr z!;1|sz4wNZ2*0fCq4{OyiynCFAw9M?ezO z3HPEt@bV1&40KHN-W%TaN$?(h;9tQTWxyL^3@5!O!lU*UCc%5~0rvwv5xv_hKdJZM zY-2F#JrQ0{Nj+3nHg9pyEbH5UZ!Ff~aGHDSM*Vj^v)KL6V>eH{8F(z1 zrh{=sDMkGM&;Rd%|BF2^OJ<*m_lS3kGw+hUU;Id6 zQHMG@SZ+2s)mt6R)6PQPrc#GCcX^F{nfMOTsP}wI#k_4%eEy0A>m%RCgw(QT;voz# zHBDCwLPh@an}y-k9P4P%8|~*AAl6)^L>vBES`>Bo3L4%0W!LVB1BRx{QNL)b_v}}q z^`foSQ%|t_>3Pe=VCn#qtSw#UVBO)Z-!q%MT~T*|gGIwD@Z$4(hB(G~+C5pacl(ci zD9#b@7t7{0gl8j7R;^iRfvl#<+V~4I%%-|)fD1=HyawspXu^iaB2->W?PnpL#sYIY z{_RE|#^|6b`g{qz#))PHx)U~LLJi~eJCKLysG)`1=9bvoF&a6X~s?J|3=lU)bu z(vaj}oif``X;w(SRFDnyYo=JQ$CB9r}jX?`q|Lb8aK7bpv{uUwn6de$^QK-l-dM~2UcVJXx=97Ww zW=cnRMnZUfLfD@Wu1yHPkq~Z2Sga#JF=#ajsp}HLYY;B-qq?VKfn^kE=5h05aZey1 zvEP>B(J>LI{)^7M1~sBH=fs4^m(70Cj}jh@>vyk<@-3xOC&~MV}Vw>D26?)r@MWqM-FONS{8w z1MZ2c^)tLheuSy4Ize^X=$H5-H;hM-KODIc{AZjeB=}xH2~@XyJJCFGgt_`$0$mvJ zRO_ng??mp zHMP^%>b~B4&Rlh)%(l|VdAm|8t_xbfkF3O4w$M)`H@xcxnj<_%q`wi6*+wEIb(j^I zZ4DLa+UzJB)`gj=jvk08wqN*5i0uu0J>0yvC2H%gOk?BEB9(R9P9r>e7llvznxDxG zTI&&}Pf@cvp5leSG-;wa5FV~cW^+rIEx0s|SvOLFpxyVSr_9z_HQIOf=_22Or*BfN zFC)R{e>%fn^yN6KikFJp!E^Tf2sm@L8NL%d=eyLB%Mo7}kAIEgZ$Z4yixf0cCsJ9} zsB_RUn+Y#(dsIq4>Ar?p#{#&Tm4{#L&ZsT-8U&VJu1RU#%z6dFkpV&LWq8sDcnZD^ zmvh4Q?nW_UMXLkCre;~oeHIbkv1aeSC|=C`#U!k*7dEw;cgR{+8O7KTL)pzO4(%p8 zVnpv!Q#==~F1etiC((v*DiknGjG@Rx)wnYO<9p{Z?<%2=BYc?-kH_!rLVP*mIXL%| zNInBBJMN;a%=dq1LO4{;Pdh%j7)6V-s&?t^tKLg2Ov`ee15T|7^X>)~GI}4Q*>MHp z=qcb?UMs7<%}AK4mUMvz!w3qS`g^->lG#qrEz7FRCii#cXwXPPv1JoXg75brVM*25 zP!qHY$|qE#*GvR&J%G>>F$nLmvFCk&NZ((O9eHN(JRXrxf8IZS%-rjy(*({PGLIfv zxp;(cA3+Oyisy=0GpHn?KLdb-;RK5sMxgUKXx;{Z)kYt@gCvieS|7lJeGY&hAQb-c zdJfP%LRNdSZlSC^&pOJ}tmhGY%h1p`ir(=rAQ8>~BPxucLzS!6$B_UOR{jQWLFcfu5P!=#^anwy6_aaW#IOejp z@i3wQ=o7HI@Wiz}W4(^D{vIgA$}XdbR}c{|JNkDtXSLi_RJI?=c07gTckwlKJjOFx z-`i<6b^IqHFb_6Rc(opWgTf5q81yFy`WU@X1c{M_DDgQ3$`SaC0&`<|pQgN-dfo;~ znG{QzPbsH(6-N6;_tSB_-~f*EUhAoF4P_-60pMQ%ke~?wO&uHY!^NE*`OMDF$l4UM z%zR;#5$ZtO6RW->Z1Q`%3Ityz3dE|fL3(6~P}k%=_k*e-JjW!@?XgtiU6I-4wU#$| z%5_go7Pi5wY1*q*_nk4-RfUiQib&GOCUfE$AmQB0>J^ zMNgPM)Gz3sTK?EaOTi!|8noMv3o8y?KqFFRwl6-b-IG+S2X#f8yj^()2a?sbRHec` zSX6?w;O+a+NOcS*;DTvpUA)6GoLvxG2qIVLZSGS#&K6{quYzd!e83faxx`*Cc5*iN z=o!K`D+@TNSr_JF+BFL`zr`?WPnub$_jqbiE0$=BFY0y{wR)pw_s#T3aSMDs67KN} zh1PZyli6N5aNHtm!*1s zDFf;0K0l^k`BXsGM$e;%U_XI%gVcnpzKd68tz3!+RI$;Zi=WR%nA61=#A3mRt zP&E9rxtI%skmos`he}FRQuPtv!s0u`?)y}BSuemC>;4|5+~wC{_$|vLGmwQC3NUe5 z|3Rt4kdv>;UL(s*$lf13ma^x^5}z|7vSYGd6XYUuQ%e^bNHZ5Bq{|5bTh=Q8TiK6g zt;7@65$gd)*QwS8h z7jiDjcgnPaT2IkKum|FhW1SAYelOC{gxx%g)I{T?Wo@TOL280P%m=U)>&)AFTnM!C zqxaF?+fD9tgx4aPSWF|h$P>WYcK}oJ1)kU5ATxJCw#;T0q{%F^KxR_G5I~=S)Z|u$ zmkbBQ@t@oa3A>^s);58+Q|}B(FCwSHf%PsjT?3cekuxk`ZX^;2nD?t zQYyes^${MMP*zf{U($rpvYxsGh<)K70fa-_NW=hZLO6=oglcD?OwrjmWrV*^$?CAv zGwE>)6`0Rs#)T)+GiYxjat-=E1vm;x?68v^2l3FbrDLo$8fzY)DVg3R3acA28=idz zvtgAEyb@tKb=X2Ywn17mg`Y&c!nT8g?rPwZzK9{vO0bo712ijW-{pHI;5#c zQ>o2AMIgg0X4p-h;mCKHp05V^!pCQ0Ua8|vhzk3L!3H7=kMArO=4Gu!@0AO4vR>iO zisn;_aKrXf!u?G`p*90ZtHajN9Aj%~o_a5sJ$HM@GsIwSE`YHbbMQBmuE`K6vR3xXkIO%jm$Dz zF=Tyjc&(IEU9D%+2&T-cucUSX_LY7-(F~#54T5n(^R0e_ND$*+J&y;VV%b0}tc9M|P5PL^+x) z{ufp~0P?|lBve~LyP`I;0CYal?7+}aS4WAU<@^A3H~NrEoRBS|^|JS9cacAapQx5R zFRF8%w=hec_OzLm{8IM%Q)C#WKLZMi&5z}(-A&Zl?!H6R90g{|wWIKS;W@X}d(`Y6 zAgVdfGs`P5WdpHAH}uj^MD!Q4tQ1wp^A>G}ndPh`_|(MDKv;z6#GurF2q8%pN`sm~ z%I!#6G@Vba#Q7+yZgkW*x9{STG)2o9!=$%|plVx#=d(yYa2=`R+8ee3SJb3}sHjRl zQ`GM;2PO94^FxejBZDsX2`fH^N}yVQ`~zB+23CwGGuRky+C>QSI)~x>2D%GzA5=oT zD1voLL4lz4rNz)3@YzB?kxAYQ{e%@yU>pGDUje9iUz_$V%eoh(ea)4bsoG&cWmyW| zwY#FW7FfP=OYp*4(8E=*%H5b)Powo3yqeYA01Olu=o%FEcAKv}+qoxw4;!6<#Bt-_ zM4GU|r{hwQMR3wE(|kxYan=XhWo!6*u;;{h(2ZCO7NRqQG&B%Cen94r%KpJp3!ab? zUMC#<%z78{c(=-^)FiwN+WiEQWn3=u+?*D0-+&qXG}0ke-tJJd=Aobi)Ex-t*`da` zvDEd?1)pjFSR_wMPQDSzX@ijb8zfVHC-MyM$%Eu(D(you!WyzhD*jbxcgzAR$axD& zMSg&#DSt?__rfsYwR!+|k$ z`1~TD(L&9iISQ;kTJIjr_IQt(-$jH;Pjz4CP_6sO+N2KKfrqlZi%ahVl;wUCt>DoH z&i!B!T(m&e?!Jn}zEC0_s??YJQEULmPiJkZ`Ei zPJx0A3)k!8=`s2bc+@K12_{c}#aq>7a?e-P%z`?Sv$*`>U|)x~0hp|gy3p>X&Sq(+7khl=lSAxT1#%yxvGyet)Ru(MF!#^YVJJ_TDA3@$l=&6M;2%G&7<#9$ljs6-IE2 z4M~VQggDN5!fzo|yY9bAp9FJUs74W|9 zSLqd~*|v*f z<6UCsMD3oGDBAcDps+5H?e*-GY$vMvN#pDvRF>GaiUKtB1Hx}r87+$=jTV=4eC^nl zNuQ`$Zl~OX#OQ7j)=bIPRCO$pYG=nq%~Axh{wvHB$<{7td&y*MJ14B#MRsD<9+Dtb zsJZn>#|FBftwpq?&FdBmw`)_Q*yM74z?!^=A*9)%ip=j417D_!(f7+m;qk_D;fb(` zLOaSO;fWR#eivFF#W}{=zb$OSTlwE9!?0--g}}8xK)}wLh?^wv6CgYa zf=twXtLpr~d!(yecpTra&$@2~w*HCQ&}>*B-9-`$WB4e+b1i;bB^HX@OY)?|+B!yn z6k_rjy`RB20MCV|%7yZ8D6kJdhuX`9g&!espru@hwBh9+<-&o3l!APb)8#_Z&QS4-vXFg;1fc_cYsALJc7*KpU}?-c>560Kf-e#o&dG*eSoVk7Y-plf+GCA z0q;nUpziLy_#V_`RPcBJ5d8$PiGb~-pY3=%2T0%Id4l6DEc^@*j{^eYBNq|>cf9Yy zJJKU30qs1#r@j7c476`1NCjD_l0A6V3xoX#0-rG{2vquQ`-SQ?Xb@{D+~+-#DzX-_ zaG$$h5mpoTE!c!}4~LB7&Jt}0**;OYV;5}K4Sik?A*I_Kj5e??%u<*XS=XY;y~Yy& z+L5i%+@wu2i?&@HSU~$p3g$5{zFV7=D%u)(o-S{L#n#3Gq+hfzy}=Ge+HQk@-z2Q~ zgVu1$veg$=-k^+T{5(l4U^BOG?^g^zO%=A2?W8*z|$KR+j<|C)=U0W>oT1sw5ET z$i{vs3qmIpHnmSuEi0X@MN)ZI$=oicLN`gZ)ZzO}+X>h!u=^pJ8`P!Qc3a4EwP9G0 z+3IZGjT=YdVYltH3yyt}+)Jj4whO|l5pV~U7p$hvrO}jFqh#9yp<(62)cq?`NQ6V@ z4*@iXTAkv@E1EU}uaf$5N)vxwJqE9W?==i4+ejU3C)IctM0C<(%*;oz4tk^z6d$O%$v*7!R7A@N+RXHU0`wrucg{1tj;QNRNfrzTnp!k{u zUp?hzYYXtY-aKwCVP7>^e|pkH-$&3MA}K|*O9)$=L9e{OWlamAkVEy+AcW6D#P|7O z1t3TmD8y68IaIyFs_#QRs&%`>cPy)akG`axq=&s*sShDlYSc6E#6gz}5~MReN*J48 zWzyJW0_B%KqWa|Y9g(56vat26>^(aH8J1IqjLZ{q#>?Mugls$9(`2?w?%X5i@9})p zahTTyFPpsxz@SN)R6ca!++nCr$I!qRm>X??+*?gMJm^^yN|+mDSA!flj47El5UrpZ zRL3YxMiSF!BCz}%H_Bn-Etk({$nF}&M=hh|8L#W1nE5~>>byPGYvIBj3x4f2bo$ZB}0y?ongvbi2RI`2wh(h&I z(24BYBQI#xS=dn6w$~m;Mp>JaVnKMb5r(;YZ95N3DG-2sA%s<(iD(udtbAy+uL+T$ zTr{#tAlqFvqCtLe;9ZVIu9^>3$WH)S)2sAls)Cx}+Ar zAf*;R%i2Nc6c9Ew(8F#!D6F^wrNPdHRRb?Y>Enpf&w#4zwqsQ}_z`@^h`if5r61tI zBuZ~W6b5q?y3yyaybqKx13`TfL#@ol3&@VzXUqpU6Rbm#B}1O;SezIv=z&tcb!YPVcIHh)i0tK6m4-rCwnBnYJATV>4N2bq_Aw)34_TC*x5-M|Ez!75g<~S74F0K2NlK=3LGSCT3|OtpMUH$RCelql`nO6 zb}-zG?N&ftbSbFppq-sgT#rESYSy*~z(j55v7e4cL`kEgR@nlcNiSG`kF=uJYX4@i ze3Ky6V`O<^sOmc8<2)K_V%25Xz#CGEaaC6n|B-EQ^kiA(D2#b|4^%2zmB-mbp22Y7 zqD4GmnGbtm;WOm%_cYfqmx+iDkU1Q+fI63iTj`?t>9ez^J4nGb>UYshwh;kRK2j$CvUHXHp5 zQFIcd-N>}V6e7tKZmA8W5J9>;pE%imL_pewpesCvsv=G0icq-|?Q%j~$Rdxv15UQD z<3r#Iy-d{ZGqV5}P=RS-JNChw-M5i+norW{K#bK$U~)&s&=z3RLv0@A{Dk08f+hRe~&!n$WX%gp1`-uk&&)o&mL`oMdo4xB+tIc zwMP5p^qsP5*(r9G1y0?1wu9`%x!5>P$aR4ilX%j{FvPKFFzslapqh z2TW-FjJ%gvzs%-_ike~P7q`-|yT?1UVPlXJqREr#B$|BbU>6eb1wahti3v{C(%@kA za?yT!#>nRsTf5BKJVzDQ<;4E?7yvnK;XpUoqGGcuo(ZHIVy z;NiXjg*TzFu74`RR!-lFnuGj%9Ys-=`JBUc9*)cyZ`4J0z2}kL=pW?YuFr=Y%m?H@ zF0qj)0Msr5zs^=Cy5(Brign90l%;L~Z76KFg9T-EZm455_(#GF?-?&XU+%_C@k82M zS%WTfXu17)TeC{BE=*M|LG0~-;6*-#+}}$cZ?u1>>^+J88@j{E4k|?laOLmPJK#6z_!Kt-1-Yofo-yj;5S|Zegyz$aQInL0(<~B8b6%)Sq%OT9lj%DDB7#TpQc*SSoA#_+wRUM ze>!1ndry1!$wdLZy%_war1pZJ#oFs@t;~(?kTnZ!KteQu<9cIwFE)u|{Xypk41aSv zF9qd`WK&sJkYrsDgAPX09juxQZZ+d{K>=L(AA%BgkY*ECz;Z|3OI>Lh;Lv6cA_WXT zx&nqkTmduoU=@~vg_8?cY%Q%QkRfPAhEfz&Tz<&iq&`6ESq@d~7dFz!hP{RdEXZfw zbD)ZSUn)Fg@DFwhoCBPcaap|=J?Vhd%qt}@d5e@$l4?6gS^&?Rk(p|g0+X~vcX&dP zOo9da^p&E1XlTq=jDQ_-+c*d7f}W=ur?J5l+a0bKFgPkl6H+n_nUkF}h6Ow3K#LTsKT%O#4inAqE3Wqq&1wTC;lI?ZUg8-p zty$@n>U81+Ijh#Wlv^GDINTUO+-3h6)2!BFOD93IBHW`P9Z4taFz_~7!R?_+bUUa^ z@O=vWJJe*7Tdk8^H>gmjx<@G8r4dwlL9$cJqpSIt%6=leg!M8Cj&N3 zY?AwSARfUajc5~55oZMBtc&hOmq3T3C)eQ?AV6gPA}6&dwhTyzy9=?b4MRty3pMIH zh8hK8Ch`TP5nAC7&-aY4mf4?i?H;A52MjfcIzY0Gap$OHuQy~|L8Bvw)Y z8(7keiEBaBcz}1ZL*Y`m&^y_M9=J&W4f!a#o!fRSs8+RZnn{C$X40V8LRidR`<}j- zp`Q)|vS;)Q*44;V)Ew7{0=7`qaCB~nT2HD_CRCxUTQE^j03pM|>BDiflfp_!(I&h0WYnqMZH9+n zf_Bm7erT$e*@+E5+mS`-)3nSpvhCdBJ7vw+gp&{ojN6Jf2OfIbQ`t(iQSlzTSSw^t zJ|Sce6b4N?Aq>iJsLymc)ItY)y34^vKr6|HaE)&RoMRjF6mR22&n`$+imhI#t^%!y znqt;wo7t|ygRoXxv1#kZ@si@8!iu-UPh=U};Pazq!59MwXdSw1TF~+ZP=W_dBZTn>yJ?NlZ6$WKWTic|L^ldj07gN2OlI%BN$8OlCsfl~ z0Qu~Zb0!mH%Fm&2=B1GQlJ)Ah7_%6^U~S7k0iQRyFJ}ke?T8+4@ZEVA z+#HUco%JRY9H6q<9>b^S-76^mN_rpi?r?;ubi(>6-Z*r<>^d!~mbX|#QJa#Uc?K%) z7fMFSscEd_i)i&m!q^tV$s*qqV7@dB(Rfk&q1n5YsKzAtnm|Jet@ZR-hTSuvrWrH? zpEK;T#rWVmT=o;DlY{4Nr0Qr}{qPlGYhMEpnyfRcbX+GdKf+^EbBgqstNX-Uo){B|43w9D zVidV$Qfkhh@qIpixqA2IFiAmG(yUVeDslrHJUdpR$W&J~M-t5QW+Z@B)jL=y$_vAo z2C9Wyj@}WA#!S^-)@b(Js1arct{GHpgZ`e z#kNL48^Bw^=aG&*4Kdp-2fhYj?UDmufv}G0gjIa2m|9$?CxWn!>r_&Fn;rwg>JWK+-fUpc&EG`0|U*h`;ZFF)z1uq~VL^dmOH+I3AM*fvkT{^c=RLjTE*RTtE_Y%IM25jT70rMr9DgDKvlc!d!isD84B<@`ZGp-=j1fTC z0|~=AZZ)iu+yMqMk*d)uB2@nkLld-CjL;9=VlDL`h|G6Cga-`UBj8+?*D(#blGtHn ztn3OTtOhzIqX{O(6);#PDB6FLD7pj`&6fck1mgmZZwML1$#fpH6cBgBW)N?ywwk5~ zgj8C1V6pduB|6w~s9ND8ST?a4hq)==!xq&3t^&WYBQpIXG*zP^%azXeT4zI z-B;AwXFiB?NJzj)bBYpJX)F;|_!FrA7vN9%3-EB0Wq4G1egKwE>>pI#U5 zaTUR!^+o*BM-K8ufPxT`cDo?p;LOGdbXp#y#JpIiA?!!HX#XRKLmX5V&+P9Lgx(!V ziwZij6j-4n!~Zp(bA&gkx7BJMJ#k$1o0N=$s2qS*cqxHagz6Uwy!GxLoTnqm@rvN^ zkoCw<6LPyB4q8X{7==7vF#E;7P=p*fI6#pj;nL#A2tqy^28=E&pFzOu- zAAgvJ)>?ZFN*dc3xe`31mv1NWJW-zC0+EwOEWRGb<#~QvLoIp^o{Lie$f=@9_I7wN zb*Bm|pe|sMo`H(db_xL#Jw(V*$e~`ZpIGdXctDomu{*wkt7a>wbfLOplw1bUZ|#}{h1z6qPrbx!CpXf zC)v9db!aQBzaNrO9BZZG3bL0u-p-87R=c(sBBc(Np1dOg#lem^^0D#KCg<%tP4AA;l_7(K0`VVkLN2q9bJ#N#4R~r7fIv*qdeV5wm-U zklkO%o}MiVgDeI3aTH{Wy6jDxH;!qV^x-IMc!vM{o`h^MBxEaxg+Zku zVUTIkNdwxM1se5@Fm}1G zLdEV37`FFLW0nuGQFG}aok%Pt%!Uw-L*U|9xR=hK-y4?MY^=xkp1|`2o?Uo$$?BCd z8xq@&0bY6D;6+ahHfBk~lUT8-fZ&HFm5C4z!HPX|dv%Sq4 zuu*e*T6)PBMQvi#@;6;kdkWN~a7_dFLm|TvSkg9C-Zxw=gKP{dvTmVD)XdgGnK0}g z;ca0$++Nh2#Bc1j;^#dB6xT;$^zV`W7#~Cb;;fD9U;i+A3hQZ%xA>ZSuyIch`bL5| zV+{t;*tvp}RsK2pF(W4c`(i?|$jyC0>21(KU=Gps4;&nY9c*s0TY_j`ayDC?vT~2gTrWM zr*|AD_-fW}c%m)pw&X_FXhy%*Wx-bnOQGK43SuHs1c>gke?|#R?8V+$>Z>b2hh*f z(f16MY#To&lIA>+^bx$kD7TH!m&Z9n9%FTy4Q7|PI$d?FkA0yxe_RI`;EE3R+Zw7A z7D~3Z79rJ{C&T-|q2|6YloqeS4mK-FUh)VY@hq z7g#i97nJs)+koV?K$6S%NP!>-)}(;sZ)X=4l*Y$08PlJp@}Iu(=ZHP1D@jW+i=>!`AJ&%)w4|)S$f>Ewra& z8z@|~1z7-&-n(IF+AS4EB^=#K_Z~NUEJdx6p)em)gQmKm=V{~DenyO}xD#$KfCMK6 ztQ8D#i*AeKoVi8Rs=#qh8RPZjMI|HWgzPG!2M$T3V1Z4;!xpSK3jWGgzX9+H+f#Iw z6BN`Dst?EsEAxRJQBz|7x?qi*-y{D_^j7?r#pKi;GgqAvZQlsh2cW(~R#04)RSJXW zg&&$?J&x14e@qfYfQ%!Fx+2=dI$%6dEn}rr%PKuj%tnG3n;sLhk@UpGY$QD~F>RJ& z$lny;AY$S1Jk0W&(WWWP@+$UTNfE;vNCRE}jj*ziW4v)0;&7GQRL$~BOvNYo8+PT_ zK8=u_H5lu!?2>+I0T2IgTlLp4wWJXncSBPgR1!%7J3rRh{PC8GM!PHh;DTh!t}~B zfYmLhOMAS>yBv_QlITYmWYT55QZ52Qu<~QRobViX01tN3$xb;`exlf*d$^n)u(QK( zkg&rFqViS>)z6_~C@`HNT-nsw3K`KE(xd@qR_{HU3bD|FLq)~j^W?^J9&S9aA-xBD zQ3e-RkVWaAzTv7YRI}uU9)1~XG$zeO$#$;lYosU62Z!b&7xJY)L=V6whsjIV6!^BI zK3OZ)Kw3D`3`cH`xP!HUpw=TTJmwHdc07#bK%xCCp2f*dCU=0HbwNpq>NIO-6|Y+C zwlCmOBdmB5f(0>soUQy0sRRJ)Q1xX`XFMGwZ;)9xDHgS^LDtH2^f1wU7G{0a_KX%JP1}ey3E}UNI8jXgbT< z1}>qrH#EA@wC+$??TjwGW* zVQSaMVD7rVP|QCD)~KHI4bP5&(L&vjMh18IT&KN3Pc{p?i!Z0G*TeAgu1L#Pr8MkI z+i`27S@11KEvP(%MNRO!jTdYqV^NdIIdB^>BYdi88OT2`=VN0I?Dc|B-2j+VwUV)u zwV`9_78kBQf+014A>oFOXalZQ0XG9fawKt_@SJ>ndZEbr{@|4#+fbK&U^kcRg-LH+17>i4&A`&rNaGSN-Q98m9^D9g80&v z#Fqw$tfWpvGa+AGB1HNs9ZCxEvT^!DPHbL_OscbJQ&Q-ercJ^58mTT5jMM^B@*IGH z8%mkG+<0b5bjHf8i#a)nq{~nG!{KPv5##1S5t0N%2rYLhVv^`@T;@tQyo!dtAZyQ< zZ51mmZmX0r=LHLpmTbFacFqHR%ouLmcLJ{5-WkGqH-~o9TO_Ms|A;`wpkK4}y`FSdzx*h1YV1e0>id!7lkhpao$p6}sP9MS|AB8u3WldrtG*kV z!5xI4xNEQe!H9p_gf!&$Gr zI5S^|%K|(n5&yfS`dJ%}(INIZ+kVe!(YAl_z$q-}clg%f`&=Y@$-qf$=M3ruSSXDr)cv^ya5G49N!e%2~sn4fY9>&~lu9$8@YZN(J^ zi?SfloC7@y-epK|YENMY@z_P$`c?v8!9lkbJLkA~hn=9A<<2pzJHjBdFi0^hJBqg( zOFRg>1(uyTdq+X|RJ_M8I>~+_WKV)UXIg?i2OIC%8AhEj-~3HF>dKqS$g1KC{U z&bNIGI#Zd2Ja5UM(>Ex>-FDIRsanO}A%xoy5l5B^Lo`~6@~T>9*mued`%al*-x(ga z?*#M6z9YhC*@HuvYsaAPbpww~A;ved*zk>j6QZ6!mooHhz~qk^diLxg+Yse0YDRY26NvKzyRBq} zXMpTF5p9a3k^hB>Pnp#B5?`tW3)Qx2}B@_2e zBdFi>3TI_Bf`$VYfSRR@3eg(f7OSIXu8Gdkf z+lLZsuFxV`M&;rb>L>#-m_kcO!L608NNYl@WLr&Lg5wkL7(>9Yy3oPtp!L@{>cRV1 z%X$sLp!HYyr4O2cR*)rY17cvwq9M=|`dYHq1FW%0;+w(4m)z}1wqy~&xFzdroaPO` za|g9ywM-CP)qIPA?D-%)Y&oppXH`7kv8|nh^q2vQvukGNw@tv#HDUm<>~wC)qT?dO z(-S4HnQdfDsit-$pAV(oK%D@<9a7*ZHC^4n&mvA&-{XWZ$vAxoQOol*hyZ$yYl=E2 zB@N5%#Qj91=X&u!^-4Nqbtv#P-N1vZRVucc#MBBOPDk+rg$UuG6_1f@hZYUQrCM0G zaNSM8bGSl@L}@q;zdKE<=7%07mM5{J(CJCKm~T9LOBa4ay08|3;c<%K(uECUIUF&) z@H6BKOHHDDA=MXZM~BsKH*IBuKYAXH;QnXYke=Lp344{N`ciyK!k|F-@ZkI3!G>1Tsn-Ux2v z{!jUxkW%6QBvAKZ>iD-^L1hN;-rP1EVev-l+%5+L*y#+yKt~4DFNNw~PzMQ{?C?=`dG4Z++1vG)N1;%Px9dUA1PY~kyT*D( zE8h20u^#YDO7wkP_vyw_vC$1!h3O)Zm0*)_*Z_3m6y(ru58*0k5D7B<(#VvnXTqrx z4p8syb)fUH6W7;)$(kr!NKsAF_^IQ)X+F->%(|NF=zs#DUS z$%t$^yuK@Oe+f=x%4UTL!loe+oac;&J;=oxyccfwT%DZRotSx4WTE#$)RQY3TlrM- z7leZfqrLaSSe>ijR0k~a>=6CCz+R-v-la`&wSE|Ruy7Zw8!A*o_$8bJ6I$lLX>=dq-=3M)^b?!@+*_@%n*@`UQ&=?G`X5mpJ|iHLoN zMlt*gR7<^L!b(Tj`|wWB(RgCGI{w3`_6Bd)VyM4~;~}iX8NFWB-i{dF^jk5ryne-1%TfG{5?#Q$9gXy9&0i#o@9 z2m9o8*HZ)0W}^8G@uVOn-Gn5aw@g5F9ap20o?d8d?&*cc1z($`PcPK<=>Gh$$g zRQlh~>Q@pVJS6yj-50{DKK(_$P(3)zOn^`#_#WsBp{5Un7m^?hPJjTq8{Qj2Wzte> ziagU(`QBhp2cWAz#gt0wfPYc+wS=O;n=aMot2dqvG7?=9e(QZ|Uy160z#E_<=m`sYqT?hqK*~^y3?gg9 z&4lw{!u57PD)?UQ13F1MG*<0bXIU;B1Ql)%PwA7M;a z!m!4U@w733yC5$Rrx?Qpf!q(i;)1|O5CmRD5LdmO*{(M;CUy-3NbnCF2gN@=4M~vr z2{K7LfK1mVkvZ??>gwF9=aUmaR9mwLr60N-tZ1~GF*pR=x?O1psSr1;05=x ze0GNY&bYo|-W#JOhQp-!@>J#+c}?_3=MHjff?P z=Q`COCiZGB=gn`sw zRQe8-CN&}IzTbOcfcsv+7)CW{^0$g@x93l^AJ@`>O)4e(dg`;rCAbi7{3#o-`~!*t zp<@UW_79@yQ3^u?)~ZW+c4iGBro#neGgT&{M3J9VAS=~)J!-ZI)MTvk0vsoV|!h(*17y_38a9mRQg!lyXK=!^Eh+1ghBdTAV zP&pa)fb!a8%myVxyR5vHfYo81b6~Fkm=gFjOqDnDlKy3)0=r|1?foTFnKJ~O$VK0vru&c*-U5&gcGKMmleXG~R}9+(ydoQ&LYnm< zGz`yWAl^e?pl@^O@SSSC8X0P`VKnwZ{Dt(|g=>cBM)NEyCE)fA+{e7~E$XMuw2$V1 z2M*ukiMnz3SQi=a2LVbuP6JP_fnVmkXb*YN;&QnPgcR+GG)4H!Y3vC61Ft4~;UV3; zi{Ze8Sw?Z#Y|0N{ds%La(3z6JxjYAJl?!(OhvfiUGjtG6-SI3(<+jfijV?aonc8s4 zGBVAfOgUF7-Uj?v$S&B`vqf@;Sw~kj43$&ImmvKeLd(I95m$J@k05RvzJUf}HC}-K z5aiM6Fa94{a@A66&U>E)N8vf+;-^IMNSE7At>iLJlNalM?Ugx4b?Oji#pW2ppxn1U@}9 zw?WUFLV1yB07|9ACR{(6%)gBPFEr4^)RSVJw07v=> z6^|jD0^F7dbcAQ8E^pu{?hJeaBxH+$;y#Z5Y-@5VigBbU6;+h>=XInvMT#ZXPuL`Q z&lx5L&Y&Ys9Y_iRK~ty-DwV32g4a~vGC+7jMXrczWxq}}39mN@n_!wL-e|$F%H|We zejWE$Z)!$8o_vYHvA{hD#;t0knoKR{qJCeqrwccQW1F%yG98-FI;gWac&FQ!T^ruA zfV2q?7?V(Un+$ckn#2JZFb@*<`k4RKj~z#4UZa{7GpNSxZk#_TdiUTD32-(97j0sqd9II_$9hJF zD82mVp7P>00)YE2E3TJn&b1xm^Nm8EzrhAFh7^M9j+eJ!>=>i1*7eg{cNkhSS%7;VSOf_=A8cO`lX zHZ7vid(Aw|DfHeHP|ETKokGP_eGawrd2z4BpvVSJucEal5x9%}#N~dXH8I^U>iPQv ztd!mm8HE;M_7Z&pkC1K?iA>RQFt2J;`8H@{!ws-hd&{v;!cMR%=w(#L&qB7RzQD)lZN|; zfvCHf@TNc>xnxlw6PuQ>oS_|XR7DuVGQv0?o)9E2gX;-TV}8cdf>I;R6nJY%jc5+` zMn83$KUB;YW!<1_aI?{L$_G6XZRS+&zCyn-GHzeTd=Jumhem&yJr)IQX2Qz2Og~h9z57D@gC-v9)Vy27y3C|ZE#(stAZ5v53H&0JIoP;9cAo91d<<7S43B|u{{+Q@Fd?}Y8AabAmV~=@E52LP()J1OPXrD} zn{Z=EdIRo6FKne+O;wvC*WgYniE_cmtfob5>*Bd7hG+MuH{dEx+iBJ=tg?d0ek}NG z2(0eJtq-ERg-v`HUcX>R~3rAaK2j%FlTA}U^vm9-t zRWuF9D!u2cJYVqV0KxY%GCOcLv#=?{iT~=t@`SZ`8efZX0d!rF=xxMW+&w{9u^do^ zx;xF@`hfTRgo=9*PQm)Wyk6&a&!jF7^7VLc;5gRfJ1rz5K%O|yWrSy}$*D03f>Ke< zll^%;>3bqq>)BH%I~W@Qqjapiz$3jIXIngryl~HviWj z^$#Y#(s`KsaMG;D)zZRWx*TR4A3d4^f43jVg)N8yUkhX;WHq0cZF>aYO0*jr{FQW9 z2zVv#iLO|L_o~Zqcg}=B*YH62J9h2SeiOvNxBVc|d9K1FP+Z?q75F!^)bQa=AYrzh zguVOi3_i&?k%W5}Xcyxc?$QXa_^}o_-6v`;(6}4_bKV!$#>8DM8Va2nM ztn}s^`eg6^rS%zS2kWke+ZjsU@8v%h|v(H!H53721yxlY=Fr zWCbg()w}`7frTo3=xL2ew zq%X05jf^U+uL-n)_st4P=vZ21&+GXEMt+J;?`ADAf8c{yVprXYB^FmaW98LuM38)g z&^)LGzQK5n+BdNF4hqG{fT-_2gZlW0#E35|MtuBVpNaNvfgkk>MRV^a+AG}6&#&N0 zV|KqzZ|$HrtPRQZM(C4&yE?R5Ngay6Yu3r^GR(n5I(u+Er~>kIGM!BZYe=HAb>Ux7 zMs?P@7@f(13s-aIu`~QjN@9~Zon?b(EQObHxHE!2;N*sLH|i{ZF*OfKo@I77jmMQ(AMf?Grw%6apPwvow@`0d#PRHjqqJ z>mwry_mH3^!RUi5V%xbSqS>8(f#HIE^8b)*4Y&$t)o2=J8y3%cK`W$zc3}XL+RKK* zmmVqsZZ4vKEbI6j0+~8%LnIYHSa+Kkt~uI1Cc$`1iO1;YNFu+Bt(RoKg~NSkc<1ND zpGhifo|!0>eT@Dyq_QiK_!}hlNM$-}gZ~BoACD&xSJ3%@E|{O?F)Vn1DzgmsOixBih_E{KVSf=OB;qEk_Adc8&j# zV6tn+|3Mjy%(ZuKn}JRYYfuZ|=za_nq{E9ee3ZTw^kKcR=OqVR)y z_)ZGXMmVNF5Ra$BRR(vZ!o zZj;!_Ku4xGFrh|8}^DYGRk(6q(alYObX0=dO*!a-OG~gyDatuiN+!aB!$Zet=_(PDt}b zt;Tv(T64j4fb9)Lp~^;~8k0-|{kHg&;&Xos?z%cynsx{dp@T}71t*l&j6rAcii)Dq zdePSA*+xrlw1IA*{*CusKli{=p>A*6QE&Z(nr!4P51IyGDX@;GD-8ISL)_%6^TQZ_ zirJ_5iQc(yz)4AFOV{HriVHY(fIqmR?V81tupi+x2A2L=HvIiRVkCpsHiUaNb;eO7 zv+h8oxY>(7xtfZpws9i8gG=d$eVQ$WT!$-E=7Y<*_vm_E-}(RBGWM8tCdLuW^{e_=_pf z82;l6H(O)|b>B=Utg_E~(K8P9rUk<>rfSxG^nf9awx~AfTU0h&x))wD12X4k9K%NE ze;p33REc{9_<9MoM z{=%U?)+E%`!=Qr|SG4W$Tp!&j_+9~Grq*Tk7^2G|3-Bfv`8%o*8{<#jCUbPBCz}sS zzn(k<283+eQF#Y^U*YyFu|1VH!G0>#h0Lv@uTxk}md5nZr3#zRVuI{3`6<0T(!SJC&pLYLIxYQ7yo(a zcG__gi)%x5v`%w_G<471HT%T2BM?9;F4tu2l`aioGcv>0=;xA56Ch5GM1fCX9%vlilNo9Fsn9u&KKjMA>1^)*sIoSueVuehs zv{3v4(cz=NrG;Yj^9a*^)k(a9lPtq4h}MbA&)E@NB&d!5VJjLb9^uQyJc5UFwwj~g z7o443I|DIdqorUh@sxp_r$_~0D%(>cC1N9jF_v<>KJAI6NCn9}MJh;ODpCQs%66;) zZ&pAQ^c|>rqN5u#+ju9CiM)mvO<*=Coy2XVf@F3h6(sW;sUU&jNCn_H+i^S0E|Gj= zw{pR+?K6F9wZ{Btd+dRj^XoyAwGP)%?7hy#z94Sd>lCU#<@4RX%%SGskn*fI=t^+b zU0yp)vs{h?Hp@lZUSZXrkx8*#T#Vz5&JaIFUkeig_D9Em`yC8{n)MYuz-#c=17J4G z_=wtY`nGGyG%OdJ!~gLcK47~k8*v#c*JHE(M(=?Rlv%-e8J6`MM8S`G4XL)^Enqiu ziQT+`X|Y);yomi_x~KOGLPUnoCRVjZvmbnBIQUHU>zE=mt2;>iPoB>@e;LI23%5}l zObAC^c2v$&*g5>$G4{;BT}E+zK&b12J=*t;!C$(-L;4ox4CbRA29pR_=PwRiZI6~j zM(M8+*yNyzn9i0iYXor>ld;@DgrnQTe{^&zi(~vzs5@bXw*0Mu&xuRoV>jbpI6NPg z)--}GIPniI&yEK7iSz@%#GpdUzHu8#R{$MD6Owr z6=x7Ngk=)V&1C@lx}eo+-`BRZwu)LUSeGPV5|Cm5WmOgzm^dmCl(5PCzR$TclbL{h z`&<6_i* zwPg!?eItpwqG#vr_*76=Z)7I>u`r)@BvDsU!b6E(d$9?WtydzQj)_MbcWOspx*(Le zD@7jy=vBLtgUG1wcLHt$zCKlee`oYYUcJUUh#%}F2B9DEPFel|yp-q*ABs?j2jbh1 zcloBU*aD&Lx@w`2#@|so*sdl|Co($}l7AAd@qo?plEP~|ptHj6P{8cTMq=L{3y@pT z*!Co5qY|aqQs`k^zG`owyJB93XkcHh+H4A;4v!R26 zICX)4WbOZsD31>`2W528E*MoeYv*+=Ys`Cp-zHjJ*b z+gv$RCk3Iz%;~z;Yx^21qT6{e^gE>b>$9}#y#T)I)e<_@B&brjUOJ=-qazAi*R`>0 z@V6wEXt;skCDglo7t4abE7^X11DmvJ5rX|!3ds)00tCLUAwAP_`YbSg@0XltuircRaOVr1>K#EquDXdeu;{jF;yEq207F_vO6YIX~-XWp%#a7!@>Si ziO_NM>XVm`eSu_uqR%VMJk^)4q`VXQ@))tHzPPMfy7cAe&D8brX8K~uqb1uPeE~07 zwEff*+g>4cCEFhRO=jEcWo&-kSzgi}0)&iWU!bbMJ1?Ha%7SIV*8eNE{_9FCE>2}% z*F4rA*9Ya9&>ab8$)1QI5Uf;e)w6Nm^5Pb`;{!?Yl`&)$@kJRvZr3&U764&FUu#RR z5b8S!N@`obf)CLUtz=t2UlK9kqCEw&d5*j?@HkB_KTq1dZIdAOiTtJ`oA2)05!8Y; zh8?mB)D$Xq^WzHL5q5ipJrT`bCV#2(ZhT+{6kH|#YFI5{3TQPL!@sZ)R(-)glA3TQ1 z12g|dQq=Z$nt2c6gW4S6lULtJjL?XIBJptFI%A{Xwuw<1CS^6*hsqtp8(-Q&Y?mIh4{5^(|ec~`&iT80>CoM1gT>&*!K9)`JF$qq6%udiG*yMi9 z0UBC1#|n2x*rIXRcDxnMSn3V8F!OPn>n$N?wdJa&ABMi8n?)0)lyRJkych6Zq24Jp z|56FL91OyRgxs~Wx?A~GS6Fb;mG8QCC1XDSr~Vi_Fx(CTy%sYA6}7?5JtTrgl>Z|U z!Pu6)NVv9g6Bc92o|E9zO<>?+fI#M(kfWRb`^MaOLV~!*$LVaSIyikf&3AOi$r&AjK{m)AE)5w$z^gY zQJQ+bK{*`WNPS{kOzG-j&kaf3)1mSSr}7opG6td_FGcilDU{S{KyX)#SGhLsd#tn6BEVP?Icod-q9Zg132as*C!*Q)QO z(uPlRa#w1#w@dvj(JZMSQRtJ^-#5K}WTZ-C1ybTsNE;#pd-9%7OtiMxYVA4_OKa0Q zN6)&J?6gY$ohlj0=FBnu-oD*U`eff;vD2!C&x#v9DRAe;Tn&43T)8`4xy@Sb6MR|D zf20ktPmUd{M|d$j@3ZofgzrZv2<0Xv{`V8U>djZ>kU^e$;#rY+jz~Ne;hXP+6YnL7 zXR&%3p=HLjr;x}=vdI+@IKdu280}7d%t$7C{9rUc8LimkTJ=8^mB3<(rwV`@elYqD zIEPih2(UyBVL9CnM%N~zuPRn|&ig6A7a4vAt*F2c7WjPRS0#eaBQ`yo939b0l><@w znHBKPkQCi1z$z$>FjI`HBsCZUfciRaZj-q#k2b_+EKDP=KF zA*IynXsm+#Ba}GoU~<3H4ga%jfZWB0L*J{9ou!V0&hsFSP%jo+;5M=QLTbr?8u42l z8UXCvmJXG&DjrCdPZC?`d~nu<4Kf~?3$g95EHYJL>iqE-??~cTRpRuOmTUOmXnR48 zDGO(>*Z9_Ltc+$qB5=P2Ed!tN)rl+c)XWNHp|y$DpU((EuGzz0!5PMoQ)_hje*%q0 zl(JEKMGuo9Mg#}0%S&XCjNf*x{6TW0Ro=FV1hN=^MLZ^Ox-Jxg1Zv(VQYhTN@2zhh^NLm(u3%-|MnsKg{T>bo9Mncj>5=nqaP#jkKbwh~~*8N<{THcfX%b14zU z2XhP+U1O*Ro<<9#s3iWHHA}dV0YbYmCmJ&sLVS zKFem(2THAUp&wZU_^+}Kchz4ORc3$XgzbpN5Y|wq&>rBH!=quB971ved2;t9523|; z$T);BjoRf9(x@_d2u=Qfa|kW{{zIrEI*)eC3dxYs>WJ1RqZ5bF%inVdbwn$YDSwi7 z2z5lqCZiLF(B0|~8k9JMR-NP!>OdBdmLS5Feh9^h?Rp5E+j$5rLqJO%LfXQe|M~#> zGC{xZJby0y*XPet$W!Y4NiCG{?DxBc&H`wD>a|vh*8tK5FrBd($@7Oqw$SNvq`U%T zrvpoI+n-r@@|XU5#b~do6Gw!~@HHx~D~+A3OAqSS3nQ|DwyQ%2a|yBr)4?7S zH&B4^nPKzot8vke1?t%8(wdVj!s1wAVnwZzEUc)jW!Fh9!px1wTIuA1Q+`Kt;|d6UG3`w%V%(V3U3nN#Nu$Dy1%Uy?X0I)_@U zp^|gQa_`l7_E34++4Cn0wvuO$_=rpDqkP}l<4&GE7oGI%IUfPAXhpL+d&Wq3xE1a$ z;lWn;_7#NtTjBR4TwsOold#d?e75qFkt+DhpEI@}rUtu;s@&($No zYg%<@L**sxgw6BTJEVk%~QKAqtW-=Ciak9 z{MuU^q1?}fV>eEKIdg^YVeGTr~EvW{=$_A1$8z{{a9n16T1qRuO%fjq2 zXxi2pLbr{c_l}U^C50oEVl*jYA1Zp*ztw(Moy}F-DD6iBFd^i4&n)oxtv-0hP@fGP z(~WM$Q*dR4civGozL&Y`T+;s9hPe$4Fw>hmQ`#?9g4F<%8=apPm*!rH7$DX_VYN7t zy}1EA$m-3je^VlT$V}^Bt`7Qgnm(7kLvp1Sx`$Azq~~azw_&0pSm8z zRo91NGNJN6>96;?YklUa^a+ic?J|XcV523uA|S}DDiCZ;KqVl!+EaJ2ySCllI&8c8 z-gCzFo?ICI53-kfst*Rwuj@_|K)!!s^B@rDZC<(iwl%ea&yn2iYzf|3hxXt~+Om&H zxeKg~a^>iSi02qJIXgdsK=pVu0lTY`mk{fMdF5aN(I z&1amdh^!3Ak8qF}J|Y7WZtP|)z*Du?HiVB13FS#tVnh%yXk<{Rp>~_B%7ZFR&l!E) zxh+~vwY0X`b{4IT{kQC13f^%V9|_K&KTVax^m)e>ybpHO{aE^u2JV>rY*(}}DD_~>&Ug>r8?UU)+qGxY7t>1y;0 zK0v{h{&pdXm&t`vno8+MxIiQX;MzW^5rL4oWVYlJuDh0I3{&{O5XvJD*j#f*otYKd zAKgbvJTr5#IUNvjb28Qy_O2~NCXBVSb>`Pe>UcN07afXvfb=gMuL$*=clhBzR#w&N z(;z82j{ig2o5Mw=1BBzPbEz0%O4G3?74M*cw+0fgD6!GIsrPN*GAnutA!Uin`bmyo z@_wRYecErlBUZkR_r1)Wanx(hyh%}2hC_-pCl56}gMH>~5w?BrC>Gm#QR)Hx_g?er z!LUQbm301Q;)ONRTZAFu_2<7uM63s2UbViUI7eB$Kb?Hfwch`ld_UY>eSb9h-o`t; zqsmKM&0`CN=0$H0aX4D*ZXu(fI*I^6h6G8Q4)lhPRA`Idp!bI8-Qs3?!Hc{I&3Y$K z5f%|1r{S1FWk%6;{Jvd54J&@lfP=o>H$v5RwrWa!u-Gj7AwjcfNJheVD-6^#iSilc zXYp{E-3^DlgZS7DN3jZBonz$pwL*DDex4O7H1fM!puaX`q7RZlK$5T|}&!#x9fi%KSw9iV9MIKv04JGX&#r zI0kj|3KsXXFB8g~{PE;VI)KFAlFoLBy9xJOvL~ntczgB`9 zJS2$y@9P8##Pb{>q#N+X9TyJ~c7fL9w{=5|BDr}p} zNbBM9UeW+=TwWpe;b(bvJ#M>=@^7UTNcNCoH$m~`Z4_-GM1kS*`4Sa8%PjhlBx8S5 zkFr)CK5k%HH%huK;qr?mUDet2Y6u~b0Z5G()6IB~%rD?WC2WcOQwVgzAO~QxD~H@! z%`OFrdb6uUUU?QLo+A=Z1%alc>7aBB-CT!Hs^zcQF^-VHX|uykhyyilmOV*2+d*?$ zi4$x?#j|Wd^ik-Wa7gnrPvvKk*x2$!$MMpQBJ&opHv?oEP{%A%~B53jW3>=G~uX0!hNO&M>fX<~YS$Ie>%c}_qUx$a8zmJ@5Gyj`! ziHi)_O&kJqNwNQJ@uEe1Kq?NLrTjgDSylZOo4r^;bA^kJ=a`X>6+~CYOou_8{{1^g~Ei|!_9mfa~Cf`f{2Yg8a$$K`am zfZ9e$7|CBH4`jCh9tCLO@>__>5}dGnxk^$dZHeAKHY;mh`I!VO=zOIk`oO(p%-DuF zum|`#pmehrnHT<*jqWUpvJU1gvy&ell@I;-pic7sDubNxPfGl$sSJN4gLRU738nBK z>-?Vg#c~oNB@YpIF(hy32(>I2`oD_(HQ`3v@QZ}g1K$u4uMl3|E`mPOahiJM|Cxtb z^cVRpQ{e$iCG5CPe)C80%V=oP8DWSW^!ls1F?fhol*TZd;9X%lLhxoPL_YrbC%Wfh;m3+URK(pr!wN@N6_~=?8 zVW($R@OH-FLt@PQI{7WSonK&fAP@S%IVn37U?NaL@7_qbyizBHxQCQ-=uHc~sqgH~ z*_>v2K*$#PniObr4Mm;j4Yt2$eJBXfJCBj~3^O712xtzY8IuV^>saN|-p-q97OmM& z6Qt%m@k5y-!^S!MtTkTje))eQfz!VV&OIlp_a9>9MUAcL_zhn?#$AKy`h~LWjIx2& zqaP0>UBuCu;aMtDZ|?XUejk!}R!w(fMb`I5 z?0?4+`JEJnh83)Ld;;2EhHRjPp%}1!P^u2^#vD`wdcJLP;bK!1pMdBQV{~SK3$yY3 zpHQHcs{KbR&A&vNwL-Q=k))Y127*o9(D4!9qM_Vu^zfcTzS4Da-%0udEX5ySX{SHH zQZ%hgbC3k6pi=%fwTC!OFl4{R60gJ)cI0lG(OQaZSa#`th~COzp;wxx}QCT$1kuU#lz0;1Y zq~>RgnxDqf{g|mJZC5UN%8?{tesF!k{1nRkyuctCc*d6bQ4vpfjaZP15NrR*`I$-V z|JD2;_%{nP%k31B1+ljLGg-5dvWu97=)hSLc5IL+lnkaf+x7SyKR$?>D@Mp-WQkwB zkB3kdvstEW2nWBSA5+;?aMmk32&u%utXkkmp-L{+jK!sN8~fYVaL}=tT~9HUC1%mP zWQU>aHV(#%?ja2R-&2;f;V6@eBC}hRT*T|LqNC@ZA}0b6bxXCU=2NYmi!T7d*l`_&UgaFMT&tN%YIdzeqhNEg`EdLF%Gibx2*B$RQbxy~FYWn? zK^OoP^=k9NL%!T0|HT)#QU2cyk?CKBoeYH2wt1X;Ll;KJidw%JLYbkgmd|eE+^w`* z2`$F@XVT}QXK?W|{ZEmf4Bn0pd;^E*QnIsMTOh`84F6NwYmN|6a@j0ta@q5bpL>HG*lw&6J-kN$Y9u#8UQVlV^wo07QS@^BT8H{9AX|85>M4>*W<0{ev zaG=niFa_`PR@L1Yu$CvU>sb=&cxfRJE+0Z{R`3EoypjCy3IX1qI{Y|+X2;XS z%HLuJyX^}Z>_N*hVgv0*KuGkt{Y%vx%4E8YBhj1tNUJqtst88srsfWdB1`vc=L=2X z&lIy?yMh0GAU|E?sADIdQLtb8iDNDyi49le^hBuJxm9-e5H=dFvpI`;(UOoHklhG` z%kQO>tYDGbtjOcE0%|(2i3_#l5kad>M-89ltb)UuKa4PF!^J$%tHA)GS$;ZUqjFG* zIr}Ld#T=Xk9A7y`|3N8O_6XYU!q*>*$;=<}ycFAM`d-kNG_Gv)hM>jpPvO@|dPpI{ zTC>?3T(ip(lo5}jjC}fMDNyjHozHMN<|%$q-RS~A)@>) z72kt>^sN%&EnMwF8e^ee>+Vq`K6i@V;}SuTqv7)5F;a_sTlpA5&Ri8F={X}j#u}JG_-n*&ypAff%Q(8+9bqWO(+F1 z(+a}nH<2_ec)0=#Ob{5y-3C6paoS2lJi?!vycV$>4_t-YNQi$X7pct2Ydyvub6SDl zXrnqWWeDtyFejIoXpC|nXj2f>&I2$h5p>+GU}owdw9N|#fq+9*0aVy*4#$xp%urBP z^s^KCi_s&577YJijLA#U`g6e?SOaB_up(?3wqOp2>dA7)s9Es z?7hKiABmbO9F=^h)kmy`ieh33*mstJ8QpWM<2Uhmql3iXOv|blk6-<=u_YlSA zVi}bGgZ2H+MDpu-bvbt^jP*t<&jpg_N=c@A0flu(^e!uxQ&R9c(0V=J$}sNrK_Pwue*!2ma+cf;bgq0^n>+zUn~Xuxc?wS;Wdtm!Vt6H@&~JU zW?y9gO~;(QL|Av9PYJS#4N#B#7kIeMq8E9XWq*}l$Mf==e}nuMjpP?VoybL?f}4T5 z{D@!N%-aw51MBuPi{$F|!)?Z{fMbxL@yXjyJ@r8@2H!t0#t zLp|Bs&nF!lu9+X%!!fct_$zbrBhI2c$_Sl9Cd>tFLZhKTO4HsRKGE4R``l*7Vb-f) z5V4AIdAqFts>`gxqq2}Ah1bOjstU0VF|paPju=5&rn`;HV||((Z%K0gsQQo8h^-YV z$SgYY8P}D`^;*PEYL4(w4l=Q%jrD`CUJVYwus_JVSj^weTg_?~ql*$u$3C)}`Rn-& zVo-mUmlJ+2FN}WTf(GS?ahD4k*H3lLJlO?pxv-BDBR;o;nt$aFfVh->161Pu<^`DT zl>CGAlHC+r%#@$B_{6<0z1UKU)$0fgtDB?uZ!($Ce@RFmyW9X1Jzz^TrY(^SreiFHGorY#EdL{UFp6g9 zm#Y9H%~{P?hPd`|HSUfXr0^TxYBl4#ORgx^(X^U3Ne|Ps>K^geQZE)l8^nP-N1|sb zi!+cvmqNIZFHnpm7mztaCrv31EQ@ZDu055yreUDV;#Lpd#eD{BBB`*%k)p|PO94|6`5tL zc$oQDsQJhr!wYxzp|r%JR>A&>7w!I7CM*93d~_T6r^qy#<&Rj|Yvd8}udgrf=PK`LbbG;JA95BG7H}bJ1!>)2YZ+# zS-~IB@?R4&iz?+ezlvY-kLSUl>*SA)$t7%-k5Z{Fwm$q&KAfK;AM!6CDg%Ehx`r4L z{~rkc;vh_c`&GO05A0Uuw)2Md%=m_Ic@E#Rf+c4D7WJuoGVj!Uoq7~ClQ4Smr819G z*bLehWJ{H0v*hc@vRiqidVVu6RP->#Fk=hJnCdwwX!J{sh_IuaR0Rz9Op>|Hn?zqX zK+r6@LGp1RPL@G7^RMHTPPv`CwCY?c4VPa_Ojd9R8Gf!Z_~bYLYJREp3?8()Seko^ zH7telJ%Q6vVY#GWamko`y^Bv?&}_$c)#&^Wi6Hw{-r}v{@^5%mW3o!cm%FUeN2^EC zE2N5^Sw@b4<4Og4`OlKhX`iP>e$tJS9Yct1`x!xwx)G+Mimzg?YxYuY;WQhBox31f zT`hzid+1xS5lSG4jP4aP`C`m1TFj!=}x5YY)H^|#L8qB`pyyR zg?NxnS+0Z!VCXv)kaiYB-C6>(G7 zhzY3(A?}P+q@9t(b&?Ji|C{t2w=v{(pn%68;eGLNGa1c}KM*H>u82qIZ;||`iGX0> ziqC=QXE@gF;zWWOTu~zPWEM>)^Gi0j6Y}U+!Epd&4H5dt{FyuiXa~H4cpsm=w8?QQscfPIF?*>g4vOd)g%jj#0jD;=mn&46OYl3uyqsP zNl?~lD^IzJ%U#yGNp(M6YPS<_=I{AP63t#h7vn|0=fx8V*`R31opie7%p_;rNHy%A zwNC)BJ|l)?nc;bkOZ*axpU%OVqE+0o6cIA$65O&ZV#Quck3M-Cw6OqO3y%H#J074E z@vfLVWIrFd9SflXX>qPJ`=igG9%hjoKH#HRg8c!t(#h_$E78d#e34GZcxI9t22zoG z6iP;o2C7Gwv+cwW>uzj;Xz2)!i~fr8P2&C_TgVj8G)jgsUBX?BkB|b`OxOCA#G`k zH!^8a675)Mcbiuw@C`fo1~N(D8+P!Gl!daKa6R}&+d}gG2${T}m-fRlDUpZ~1+&>c*Zguli=rSC5L)kh9 z0a)5u6|mpmL{g*!Q?PkhdsySe$!cKK3U4p_Aq3OBP8?2e2yO3b?@06$xxXB*%SH-m zAc97n_Z{^6<;wYPAS){=g7k$V0i?;F)Wm1?M3_yrHkRM9v#I+K3*cy80A;>$@yL%b zdb&p1=L>B1-rD#Jh;BMw1RC0~eR1e)Tgz=NJv+8WeA>`jUq2fr@I(#{F2@jy5GoD}_Rbls@#b$R_p*XDJvs2zpXlzJ+1Vft>5;C$A2U5onE z25liHIaJR2OnTqdfx-tp&c@*Nqs_dBp!Z{Q*B{u*%QJ50*3j3Z&Hj%|hSdEJADG_2 z8ngc*=ewZ;9_RYmz1>FMqF8Z~o>$fTDx>h3&h#{h)`XVePT*E)MljD<50<-vwm|mM z13gUpLq-oEQ4!-TSVJ4JJXxL|7{16H{&&t1=hxaJVo%)GqzBxK?2?a1>xngO}>V;lTVFDgHwl#T{4N(|7Cw*YGFLG;~$-{WH zwO`^tRloJPHUCF(oXz~l&$jKnZD-Gp?U6~R53QY){}L905O`$|2_Nrk9JzO`D>4~f z&ad=_JtdvE14#d6nD#$j(&R2%mgQ`neU_rn)J<|MtDBm?tahqn8D%XKPHud)v!!wm z78k4B2zn0Ab~{_EE`PfxqXR2B+I|yMwvxolC+RPn(qC5d;!+Z$aGq1?Um>>6v#grC zb?BwwsrVa~^|B}W8%bR!hIB-J5FYi|h})5^Tv;&u&Sq#;&uKL;ip?AR{yir9mLf-J zH7_{8q89R_CSVEyv1};5>m%b3ta(p=iycHU-B`2wz@5Vm>I3m;h+X2vSrlV5!4=UX zKZe)x3A~n-@LFOPKWwG&!*=T7y|&=#U?-QbAzSvpA8N;j_Cvdp%rN|rkD*GI&oQ51 zB;~oJgm?dtSi}f_3}0+bnmz85+5>NF5A8(`PiPH5ZS@m04B6|B_2I+E6^}rhus-7J zW;52ndx1J&XIWGT@1<0DFIXlhdQ7%{_xxjIwKAR{v051r=w1r;PwpRy_3?mwO^CF9F*b60Iomr1 zn*2-M=J0vU;-lLD0K4o%Ou)1y5dXC5Q#iBDvJ1LFTeKaV)sIcd8vfJM_velsvi~Hf z0=mX?dSE?ECvgNV7RTA&KOfzhk0NV6K*ui|bn2*E%YCfhGF(0zyxQnd$P)Cq8 z9}#yxGti$f4PBSWpBGm;YrPasW=uk95QL<@{1dT+x%_Hi6I zG>Zd=qipYLA0Ker=HxyemVG?D%k@@{6o6Nq86#8sIE>^0E>g0OhuLUESi)EOwc7vj zpnxnxpNd`lhviYv&fmcPjm*8@*ywj|&D_8LAqc8AVQXY+w$0dzT@n~ZcJ}a!Fh)sA zk))9QJ6}AiCwE@8f9J0{A?D@GnDEi;nX-TXhUheSOP2Ee`}eR7Y~fYEgg0Dr7qb-^ za04X>!ZMd(fIjh1=nTJE$c?L?uUFq#nL__M;TieDFe*l&l0AWYeciQeGzG}4OO4)U`DMmeSKZ2#BDPX{C$FN??3Vf8 z;Vk^EX@91wOuf6!;4^lYv&p4h-Q=9~Te}{)(KhFEeTlzU|3>!N*cn~g%NMhMqc8U~ zf3IS{QS6F0;r5{NPYIN~q6@w^?~5ty;65W#5BTfGqpdtp)byFR48>U3VCaM;+}W`i zMe9vR!9v+>!6Afeb?FJ04~|E)w>59n^xPyQY8^Up4#y(_MgGPD1o@3Oms5%8nVYIQ zK-;KkAqvZ#kly^p$I$4s>c>fI`YRChHCj5hXubwxeaBYKw}xDj*ll)mkM!I$`yS`k zId?j@RNiKKCYpX72Kr5I<7QZQa6Cjj%4duc7DutF+U#2OR*%s}ovMw=S@{%wIu;04 zC6P|>7`uXJTXg3T^oE1bFk(N{%^DdlD?{575=(Caz6Vjpj+=Rqc8U&eg!ti`e@w@} zw<1gr26A^3$^JL#!DD9ON^TcFrz^Zd^v0y7{Jb)a+r@EaNF0 z_L>4Nh`{j@3c`%w(|;pAF^XOT8&Qvz@VyH>AV1+V-pt{{XlMV|wS^OU$Q;ycAu9$= zR_Mm7gZVbbw69Qi3ryXs0#f_=7^nLQd$8NE)uWwLpS1f0`o4g0Ut^~nH)=O#M2afq z_?ivr9#q44bs_~CHBDdt})*H#IQ$@@D%p4AmW#4E>c8kq1mGSIUoKjTww>@B zUgzX@J3kI_T&lrq6B8K8_3n%OEzya+{>Y#wb>rz`8HmVJRwvA%^Ws+mjB~E%%OM#X z(b&Q4WFN7J3=$pABl`+j-{n~V1vsXwK(4B#2P!n{)?+L=N6-> zsvkyg{6~%Bv3%!F<2XgF)ch-PLK$&=CpkyWC3M^>!xgzE?rctG@0aZJPUA?`04rOg zQ2nftz#BY;sj`olHPS9;dsR`QZ%%{@n#ip(LUQDTo`yG{pb6QkB|-aVNX-U3_eB%H#RAm2|oa>qE8kNKV7-Loz>D!n|Hc^OS{ z86j3iH*=WFxYz(?uqyA&wr?i14QUEn*&)4@v%gty*w;&fkK6Vj}=8nzKZT-i?@p#APV4ia87jpQFrr0Ge)8;bhz%V@d z(ftNM)IP|l`2x_EFZMyE3QG%DA&=N#kH0Hu$~76|VUuwjCOJ(fhVus*HkawL8&}yq z#@!T%HBj?Dy9;q2yWz5jS01MxbiG{I%s16K#t)78s%*0u_I``**Sbp)huYq;5h9C!3;NF;8=(~9 zYsnTIiMf| zKH~htXR6b~XR5Ozv9oClIPr0_xE0zO0=0AffiHcC&NS?{>qd3H?A31LseH9N$KQ$F zBKHgBNCY==$t)ZYQY(4}iCWzT=!B}48~sUZt?IApiK;Wfu+9YI5o`YhedqjJ3!Iv2 z1F&2kXp3HjWJ(2c+PIuZpIK*T`UweF`lhOD7JIRsH^%g>u#Xv;w<35xhGAZhqX-r$ zkU2HhaZDe%1!I7{f``$Ge^terelVC}cuPS!xstUhf2s3D9Y_HJwd7~0~Khx!67 zJ_B+t_^jJ``+tJ8{>V1xTScKSZL+ZeU*?4=!f0@Q&AG?fYHZg0hY&M6TDo%B!O~`Y z%5!7NCU1-Oh48-lRBuSosf$_(@y@t0) zYCX^^8DtZ{EZfQ)ZpY5emD{-J766gq4F6xMy^4Mgoqk{s!Qm}@*(Vf&{Eq{`g_*bB zYvhiLN9>%5$!{=N7Ng>g{Ota+)+m?a*Z8 zmc~_zjRJv&ZhA+nUeg`zA9HjLb&D*vR|Fa^I>|S4bU|A3Vk>zGlFKtTSoCb;Yc5=u zh|J}gw0TDHeyt$CkdU+&`OAiQ1K%3%`37E3ui05y%OJE(YkP6Lh}cbW9QZlI9Vz>= zQa(&;TS9a?yi0$==zo5nyyG|XWVUi33;u%=EKN`scZUyC@vDhf@{X%hQQIWxIe>$b zcYG-ozenN+5^r(oM$wkHZM;TzjH6YZ^JN^ShWk~v5wv|h*#uu+6WvC-w`JKy|3WA^ zpQvf4{!V~*x8YffrV3grib$>S@m-W41$v-<2X8}&W)q_+muxKW`2)e4EJbKi?XlQU z#!f1C?O~5?s98Ph3^dWb0e20WkcF#;)sL?!>o%j558}x_wO$LuhW%l#LScL4E}Jp@Vd2ZTu?6}WS7HjS@?`XPT)_T{H&XddLN7B? zX0`~t=2uf>H2x{K8q@xb?sNo+o^kfQ7eQh7IFDDh$oRR95zHcJK-vaq#Sc}N+1Mw^ zHvzKP2T6EI$@9^F#8y#5hE#O0YJzn7U=X<^bOda{Q^i#gcfTVrADiv-(|Ucp+l+Jg zu$vEy@e)t>>#0y>xuQ{ulHln$-$GYLTu! zK{?Svx++W%z{lhKwsK3CZl&_8{U`hd{QJoq_tT2mx49d0>LAkUL!>p@i-wZ9M7BG3 zm-$A1aXFt|1}g#)#?Z4^vl{FY*{c?}vrUWm$*iNjh{|#;e50k1VhhmY06VC;2{I7D zp#&#d!90Rf2&#pIZj$5So46#`RLWNqBXMXZ320$BQ4BXA!42Hj8!e&oa9#EuCU(&;&}wP{2YudNIc32&w1rdT9Y2h~;%{j;MuWDe z#@ml$r^t^w?Zu~+4~A)3IQAI(a3Se7w$8a3fJ6Mwzf3nrwfF*vRcuwDoPCZjm!&WB#Qb;)bOX@)h>)_k5j)3fFE=E1yI!M6HM`zQHo^(n#?zvVpLkk4 z#&>S`PabDXTd)rLth#Wg&Py3r5+mS;5Qo5%wxA8vtZfe@5m}G&-Px+xquTWwv_*N$ z1q?SQ_g837{zg}6y;p1(DJ~eGH3!|`?qWS);Me-VuWs2V%d&p$nI!!ci=6r$hG@x6xclM4lxyyHR-JqoHM3uJtx zve@R$-H&RM+lgU2Wl5XgkUE0sY8J)r_D8Z@}|g ztd}|9b7e|uWLl_&Is+bwUmUON_OEx+|I$W#;WbLzS$m@T^v}N z>pbK)FkJQKFX_0rd;^5Fh-kn=FB%tczhH-jooxC2Cv7=M#V6B50A|$1?(9)4P7zH= zHk_DYnJw>(NjAMRCfRn0q47Kx(s~}U6d@rW(iYBAFztbAhNY}P3j$FralpnG`6+zv zEqaPCpbtbHVTV3&lU5Cbp2@pI-1%ZDUI4xnIoRvLaX*I5+X$QYbJ#tNsHR)CkF8}8 z?Ca9{Op3It-(5*@IOGe4!5Q$CwxUv3({8N>XabuVFRf33)@LI8fQj$}CMNg+&59p@ zg^q1VKtU`P2wY})pSYtn))N+V;@#`SKlmYmH%m~CmyT9QFC7~cT`J=4X%jJ3e}Nea{f4Z!b9F$7IdI$~<{6dZa}As68uLv#ol(~}RDiCsmV!g|0PA?bhAGndQ7APq z<#!Z#bH(`UN6eU<)0&%;VzOXeoFlADynlP=eI{LTIgiX4;8GMrIe%h(GUv->G>U~D z2+8VF)uhg^R&9ZshDe`SAB!$y=^`({(N4^><06Gic-CS$Z3)dX>2cb8!YJ?sdV7r{ zY_BGFe=K#HNMOC~Gd2sG%c8?L4_89LvI^hE;&UD{4r~6FQjS&@k=ROZ)t7UHm*!vZE?tw5ph#b@U`?CQHl_(%gQ5d#e}*65GX+wh*2lg?>*HHe;ERms z6gtxF9#FbQdKSA4Xqrg#7@Jy-qeVm66I2Jc7(1ZumLg1G=`h=NpvIiOUbKR-h`df< zaU=TL2hrDpv535Cyt3wd(y|JUJN}D4GnI+NNOB~s0g1Rz!#P2#Rt+09%X!4W)I(#u z9|qQRwt9mRq@6Q866Hs(_vgJ{qyG)Vy_qM-F5s=qYPGd3MUO1oHa40e*Mq z+^_e^%E__|`G@t<@v;1tw(7Xrz%x`swD+y`vbsu}@L4r)m0<0emmCnP*zeiDeS@wCL4h&oX@2 zp*>aa!Jh4J8*&=7*BX>XyA(c`alZzgtJyy5Y>3Csy!ln9(*VShrm~-j8{j3x;V^cg zk9X5k;&wJvoj>egP5s;Sg$+;4SAp+3^Io6RgA>WwT=|W&S@U!l?QN%%L!{CA@)R{? z>^y)Vg1ymSe_-2aXWo-lgS`Q`ef^hs?G=A1bg2Mz>`!6NuYx)M z1<6&WIUfRn3Q+}?Y}!ImM}td$&yVC$^ah}uzCU5_BIT zFY^hHEz49v2uThN9O3v84LH@|igY0uY_Zj5@a^V25tG@^k*K9pt2l=u$ zduy75LR#|;JQU0s9k-t{CT@ROl@wp)aqbCiRK$dJTFt$(g3Y25iWCPd4Q(YD@p@(@ znlszQjdTc-z>YR3Yp^=jxx!7ym8HiZco15hB42kd$$e|g^1Xitpx+~>O5oNeY*`Kn z!&lv5tT7IY|A!fu^OD~GgDY*CXFWUQe9D*rtB$a5zCAL_rkbEl=&A8{=+NNW7 zD*ii(KZkgWo_G6YNqSyyLe~7resQh%y@xvLHCiBdG$OU3JN27FE^w<7BzKA--rlx# zmXI(8i?*Y()+Ck-Nc=P-ny{XeH)t3bX+!kSFELr7sjKv{C#4#*=9e@^qroH|3tJ8;&so zEJ$*LQ5dbEsBZaP7vb%4F@iIS#E~AktPcqRZ#4!v6qvJf_$1)Y{Do#)2_CYsyj)xc< zc9iqc98-)UQ>BB$vdYVG9d(QLkU3zWl`*88LBbTq89~ips)~-5@3?lBQ)506dh-~l z0`inq!?Fn!$NDvo>2JkleDj;^Ne`5G1MiEoGSR3yI-HHV=F1=k$33)Y45-rux>4*k zrsbdpZJePSH|9`5ffPoWa+mZPXLcd80o~ag($)fbRRHR2(pdntkP0kn^-w~|{;Ts4 zxE5;zSBeoE@WIAuZAcK1g!3)qyiDj1W3yQ#uOY*MQ`aj|d}JopQTbJ`QMt2W<^+Ks zs0iidM2Nfl!cH@6=Z&p+KV1Y{_GFzwrwO_(dEcW6MYU z{1mFhR{qILQ2701i}bVn!&iA2PYZG>I@GUHk1ix4vp~dl9)(Rf8diizoR_pHi4wQw z*^N4Jyunatn^qgj<4j$>)aKLN>&3&BxMPKa5UH>%04)Zwdq*0o8xe(^Awr`YHM6Kt zD2M7Egrre&JfXmH(10ME!-jk%jk7$UrSOlDd37Nam>M9iRvzF-tL{$yese;B5H0=Y zPm4j(TAFL7QofW!d5S=!E&P}_FU~tfM$63q6!Aw;rNwv&dLn&41{?!Nk)C1cd;_ia z3B)He)~~T2u>vA-L;8(#WAL=uy^a3!((K_Gg)1y!RLll@oCiYB2*csgMsQKNO11=l zDwO6Q3!OP1g=yGDTyLOU;r!aQ+Jpp95<=w0m*&21S|&sTQ;p+qo=mmpK7j_F8R}{SGWxNKj~5E$bW_tUds( zbEPHT@Tm3ZwleU*LD^fckRx#6W5DV1@!?Tz$VflKmkE*KZH%H3oxT|4h0~T?4Ozhh zf}eqkj)icBuvPF(@ikgIvLTF}URq3~9 zF-HIA7?AhA;?$2ERF~!DAMNL4_RJqTdkd zLgfSvKJB54ND3acR~|+KxW~hYm&A85vS6=7rp+^(J@eex8}Lw*`=JsM{ZO3{v_PBx zDLWs_iYsblQjI;WKY$#}f7G^=yvg;$CelYb6Fzc^ zwrB!4uI}_Kop~R3mgV@5Wp`i{ma45~|4Y*7mC@h+P@Y>@vurJn_azo>x#;gzv}3Kj zi!a&T$l{>~H?4)6(((}Zqw-${1e~@)ioAib z?BOyRG9*U#)PT&;G5qwi;u2$<{)yjvm2Hv4E3&hf3lz zcBjLWI>FF$mSSkeT~;$bBqOCN7o=i@IlB5nsa!#H-$Xm28zs(g^t4()(SG9-1 zyWUvm&3`Nju>(8S{S_+~#-L~0K2yu6`~}|K#(5y0e=KoX=z(*$TExLCto9gr4?+AB z%^%7xTd2w|+=Mg2hQlaNuJ+~@ay^MTpb(*Mb}Xe zxAtH!S4x+zL=UWSi*#;4!{S4oh;VLGdn}|%)e@0hno)t=p=p0y4CX)QPLP zX@vD@>LMht65k{m(GnNhe($L9XK z4IjXx1t0&dR-~i<$!hE;qbLVaYQ9n+I^$RAbyko{j?_`hJCD~ZI$twj^MlwW%vlu| zWXB)>q=rxUx!%BJ$|wX*COr;#$d57E0*}=p;b+DjKU*tfW$)_rgdmhJs!j-M^-=c1Q~boM&#>!fQ|mmsA+(ufUnpR*z8tgff%(DSjOsq@8;Nf2?&fJ+}MX@&M^lcdeBs6MFG%wR}k zXd~!`)=7U6`J8Jf3fB{EeH=o<<4g_K)tf7FNFK-W&h4o1Z$~h9n+WP439BcSaR`=J zYB>tR)e#^Ap1MCme<7`X4J87E6H7QctSI*yuxKkz47mpDU^Sp!y*2bt%s~aQ><$vd zXC-Z6REmcO?P_zh;TT%lfoQ>-Iw;tT*V^(PgV5; z1<`^*(uN0$qdlxZN%Z(R#4rd4Z8u1Jgpzpc^%;bcTPWBfl=L9frT-b@1zm8kcwZAY*+?A)V!+qY=V-X|otfoH zd~QDx(Zgp81~X&_VY&!5KwP%!fMWx3q*YXp#gmC&f#YQM7ibuWhtV;ux+t6Iz5_{z zbj=(0&9eTy9bX9ZTZZ|VFcrKl&L&J(v4If~u}%}q3{&AW3@3u=S%a=LUhGPA_n z@EOzddGvC+7%o40BVDubn1y0yXIT9(xuJBzuW(_J=!uRgQ4_4MxNfrbr*}XevbqBY zDPphimcAo)V1$#>D(4bL{gL)RgJ4>D(W7Ts!}9%uF;fi&BXJ5Np&2d1HpGUd*7x^} z$4oUI$zS|(F&;PuN9=6Ic>)og{b5|v#z%sJ8n2tPM>q33{tGhgc61Iz0N=uRGzcYJ z79T7zYzohm6%HxTH_vWtD{bU_3EVCB<=0A#yE(^DE0Ex@CL{5ZIDa#=HDf(+H$N3)dTc-OSCQ~-zK-j8*Az5@>B-xBm_#c#5&esMj(S#Di zJ`bWRQSJtHz6u2vb6TiN3M(JM;P%j3ywKa6?Xw4Q59B5`AqU;dXY5|{dgkTAHL;?M z{UX^qXFIejk=xuAIu(Mf6X3E*DQg+3qtVhUvB zWkv`A*`vam@}l03K`PFrz;78|IMffy%p)9&RM2L>@gaUa*sV|{Oi&-(B#VxR!pV{o zdfJ7O4Tgt|NAwzrHykArS5t57U`J%$uI$K|{# zCscs(m&8)t5z8iztk*no?Bg}E+I|D7!+1U`y=3hojQYF_jL&Oc$I8X9j?mCpwm*AX zu>Or|L+D&z=H(|}zjPyW3HR_CV3tT1F`6KksU__A`YEYCxdcApjU_<86Z8!>6uv|J zWcfZUZK8|MBO0|qB^=f0H@m0N|J76Njc2Y`kAZ#ve{0Ke zsrDwfoJ*4J{rH6TwuByTyFGom(hd$bB+5GXC-Df%bixSTETU`hegFYRIr^X23d0zY zn*25dv|5>cuhBh$6U!yzm$F#vv;HCDBS^6zy4GNU=UO2#XfCv2Oa&z6*(`i`n`Bb> zaQ`P0`0%z)eE0#IQTZh6btUU{Bh^Nx*_;Pv4;o`mdfv|5jSukD%~`D1QJZm8$zKW{ z676%M?(>n?XwquVkmZ`~GuqKSLV{f{VWB`k0{|v36XRB8qF=2oIMq&j0^MME&r^*~ z%~xR5lP;%yMJOM+2`oKSe%1B`Q0+6F3e(#~SU09E7G{vg_yArI^hbX^>nYmzRQc54 zeXA4y`znbrHFUxM&Pw2apMv!iGacZAu@PQlgxgrxHk&Hgcw+wVL4CTSg2x0EERn5B z&Nr{P)lNfreCE$`KnSBCgt<@hIf5?`hGMC(HKXSh3rZNhhPlxecB5Xo@`C$~?I&Gn z`WLvLUfLAF|AKKqu)mL)b+A7r>wY2O^!bS%EwYBC<9i3=B>3O(6Y#&{BtD#@@Zp;W zDFm?d;WIu~DBx~Th#7-A;UhT|@&rFl;(u!`{BMaIvR?}MB-#}NtWIKp7{CFX6$5 z0AG0aGGPCBuvhF0%{w(@ z7-d;0X+D>q&pQ1zCiNW$W1Jqw0>>G*itqdZ2E@_&7z@qWG;^x8!+wiNclKPxJb05& z(FIJo&nWwoBx~5iUeytOTtR{3w?vWDC2WbWWD|y>6e%wqEBNa=R$H`uHAuBs;{RHy zQi&Z@i0;22n=5iXxGoMev4;xnC@wp(Z{X&nzZ>@laJs$D`g^g2YH!7nuohk{Te4-@ z3vKX~$FS_xjX8)b!(LmV*4u)`2#>-~)C&9shQyViI)>@}a$WMLslP5_M$-$L%5I@5U?sR34&XbVu1l zZ7n?{4sXOJD#9{siNOKv1VL~K_dh}J?JW?vzAp?5b;cF&JO5dXAZSZ52L4MS`rjYb zjalr6_k-ch0+{YU#Pg7x)5Zu$G8{vVAaeC3j7SJQ&Y$FP!&Y{@ZI7yHm^Be@*|`@p zcgDAn7M5r32gaI)BQPGgDh%H&{0=j(MXy;GJVyzFGKIr8`^`JphNtDYOh4t`w=M>v zq6$)aN#M!R5iiJE(rOQJx*FMD#Fx~3BUC6O17t@ks5QcPaI9{`_ZWL|i&1+=Xzv|@oz zzb7ogQ%~0ZPJE8`EBr{-qgj42i5YF9G1~GML4BGK?2*NXP>S3iYuCwGqdlaEfcS^7 z?l%V;5Up+w^@d>fvoFB<^()62fK0y*U`N zm)jCU&fUBG7r$l}kw%Cfe?HL@wYFt zsr#8f{eC9>N!G3IRM1?bBV=Ha-BSw!QlhMhLG%p1qzet#KV1Zhk%FH9uc#V0^;; zZLm^q{J;{bg5&s@OK_iq!?+TE9Q{pi4o8MMF67elgbu!iGp9BE{DW$u=V&?#ZUSqe z_86q^X{{uUl-)v6;+!`gy_RxNlaNx7E8CKuUpFhbm^UFZ6%u`HT~+_3$|g6_)5ysQ z)SbPZ;$H`Zvx5Dg@TKr&Y%W?gqhsUPyGSJqvNhh4fNu<*NfpwzZ(@iq+`{d-?2C#- z%iKm=^tF7+w4G){rr?Uk8B+cc3Es*htVG#-#^Go^seF+k`}x3mU7wmSV;hP^^FEGi z5hHpdsM4p7tYNFSXoc#- zF~{dY=M^u19kg(WwD4v6iUg9j@UI-RAVvt70hr4cO3h;m#+ijtp9oUNse?O*R^5|i zd?~)l9KQ4_^X5O7qy{0`@o%oA*c&Mp(GQze%~4~)0yXaClgw>7Um?82TdMAtp~JQS z#;9;Ea}cB9>{!9>!#41Hf!GZ{P3(sEM0(L}-u!S$yyave0G7I#;yp-V&Nwf5U&H-I zVA8`Soj+#q;Sy!r5^pqfb|u?8PBjVz)ZNkF_mZhDdpSb$80J_>I=m*+_qNhUXOS2^ zWRLSRt)>-Z_^lqvd0=8}BvPt(ZPB@;la-;Ax<6H-T#@qUu0U{4bYR)^DoVt_=0US? ziBz#qL^S(Lp2WwInAm&-^@7zd+d5Dhm-EBW`?1pLi!Q%YymrTK3B$O$5y{A<}cvg<;D>R~6P=U?>!nB(8ClWkQ#1~dsiueZMvZWO}5sqVnW&hjYT>&ps{^m^A?#%BXl8;5rXUfM6 z{w17Z=x=$o)3truk;%{^+gKXN@41YPuF`kWwB~r-ellI#zME%^XPX|mL8(H` zxCb$?B||fcwXM-hw{_VMC}n0VKUKRZ;Q%GzTKM=kL`-id;wTY^iTI9)i@H`t{2uiFiv0F;IeH*d+T4nQbjm!pD~VS zm;R>m*|s@-%k0Wz^ikVp!Z}v)wj+e|RQz^oVmo#__f)oM*KfzK8~<-uDTYPf?2mZ` z4Pzph;BM?GkmWWC@a?RSVIeX?`K;N+0utE6zgHhyEJwiW=^rGno9wm-eVauKAdj+T zsVgXu1wW?$a_7!aakE`*=CL!ov_EctQj(bcpLD*f`QH^ypyQ!6G;K9aYmu6AXY8-hEN*5Eak(U#=r9uwWLOm-z;B3D0;mRO`9EaC6+%D3{55Yp(MD}N^ojt zg8$Xtmq5o=TxnOgBukcsE%+VcBtRY*fj0@+7y$-@3??!2JH%`={#nxM<+aptZ}jW7 zC5AaPgIR4)#5Ms=;D|s75GE)YAU11*Sxmr;LV!5IfPlo<`AO0lNX8Hn&-Yc`YIQd< znmImm$Q<Y)cFH`1maf59>X1WUPD;w5FEk!!`$~Fn zC{4nJNF3Ma%Qv8*X2y8B^67qSo`GllzFV1I&sNGA7DjUwAQ=b z>E@tce90Z8!!;7j`XsV$-F=&oAr^|y+}=VR6v{)E{AAYyVMIPMt%fTEc)IooUBDG< zbJ~4+b&mA`3Hs})ox6T~$qO4o02kuA61*=&ZmTyJkS$iMwVT)D%|Ud^pK#yLE00H~ zTv&=(y_tE~n0FbY8%h1(hu5rQwboq6ORI4C*+qC0ghpRsLf5ep<)Or#e|*}vA%aTq zPZwWnvby5h&APt8{UBKatcw7?T(AxY&I{Jz>rVdgl4mZ2bW-jl)djA(j#a`2fs>}L zjK(&l%I@Ux&HSyr z_t29#Bb3gw4>+LHQn1&yZ$aFWrysis1+bHR2jjb-HLEpKXRqEo$g)~Ybrx^lg7+5s zHCgUeu2`k>ExKX#lk5ie$CFG`#`W5bI-2)<>gYmc^x}>9bhUsN7&{Nn{Ro$vVL6?R zqmqYWV(xwQN0r(k89X5jb*H>yMUp% z7Ps-y!=9~G+t;CK;QF?U*&#=yZUytnU}63$q|xK1?C%F$`|L2%%)a*7E#$B5@2Obn zA6s(K`@D!fhfOtA=N+Wy2l=+K2Wvb$*KX{>0R{ZUQR9_O?=G5hVbfDOzSqX5tKyeF zHNxTh*3>;cpw#TT4c|ruEt9vR%3yM-Ki90?*uOuHOtYKtVXmGTCttDlsd5ItiWO_0 zOU<9E14G{ZM>epXuX!&K+y%yP3X!q;HTuYBu*gLSK@;=jn^k zx0SxL==(K&)aL8iNgv;%^weP#?l_jdsr1dGZ#sQ5=sS|W1L*q_eN*W>lfFj!I5l=C z`u>5wKVr=GtflWA`fjA}P5SPnk0ZM0e)@RtP0v&GJwe|~^gTe|FX`hd(eo~Sx6@bS zhwoeT?M>g+@S*Odr~O2w+PR;UJq+Vx!jTg`8^;YRFtspsFqq(~9>!^IsP&Ve^2rPA z6xR{AS=!fa`Bg@B(9WN6>fuE|X2?p<` z6nk_Z7)S-xzA)2ZJ`aO6QhgETAQQID4`ww?Kg_pa?u5A? z<_VY=VBUZ!!q^!`Z~4Re*!f-FS9lYm@G`7|H|(P?z_5M?!my6Ef7;+DU)VpaFSc`a zJPiBg%P{49Vg1j6DSyiO!u}yY9GFg+JdCctA8swo{~&>_hjm#b`BRN;xaHkg@zwM; z9h<{(xu@yJ%D=iiTdtiGpLF?qTK}=ySKVIQZad~b?d|`h`M;i%Zmv)}Fc0A4JPkK}>(bA&OEtFP_FOYod^NpI$AiZB?*qeg^2GAR zx|ToH*oND4-&pb0^fsM6C+=zgjn%(n)o)MJkCp#e?f<09-_!b!)xPTfw*6lD`=Dsg z0eZf3OjrXipS-p|oonQ$x$PA7>#UNRg*{$Id6WM4eGJWy%bAfVw z-CnYXzWB=X&UG4{is$Us-s#Ihmvqif#FFmW3lhOz_gqkCT<@?%DgqyCc&>83>?Ykz zFzY(Oc--mE1k*j9lZrY)$4k56STyEFoNzqod2NkSM3Mz9aI!tFlguSTE}9*6R=SyN zEbMxX4vW*JfhOo=g2`^ziGnwk^lqe^#1+r<1?^744JJM3(CH3RBvKjoP{-{JyXmYG zOX?iLLC7rlI8+}eNt9!xiO}j~S1X!DmC0u8Q?tnya1y~-e>Q%>y#G+9*<0iwd z?ZqHEh!E*pL#WtD<&w^^3!QmK&1{o8M5gOH1f6(l6-HVpl|u{caKccFC2|QT;&y|r zl47wp2f;?AT=o=?aj~3CW||=<3Y4)PiilD@~J zC;ufHK3kHZoMRS6O#L2Ygbv82Qg*tXXOes98B9(Lm0WKu9t&bz314Q&WRGT238!`C zOeQ=X6DFNWp}d5Xb$heA_Y=8rk6s^8V^c21ZCj&RDO)4rE*7^}+~ukzg8zqUdx5rF zVPla7|GO7pu}rWtFf(MeF{{_ywzigtUds(xERjxmUMv*Hw7_CFhfC`m_%ICVhvTda z#&cNTMzYo!_i!e)bA)qkIu;Eu*^aFC3LH8U-Q40idM5z)9M45LSPC)Bvq7xcoU&dv zlM8dMVp$$31bafV8*Bw_EQtx7#&kw48`Y|iS~Wt3k$WhHBBn6QVP|sf!=_c9Rj+A7 zIY-Vud=_dvXKwq~j&7ZME{GQ)y>ePxypey<770TcSVdJx#Z^KrZ;AAR#gUfC;+BY$ zTnNjBrO0=)uK=+_klk@Il8!wVelx!4J<(Auar9d}($ao3JTh~fRk3W3!~FDCqK-Su zDMi`oq*u3=!`tRz3vk0_&EvF9g`KG7r^B@??yhv>kzh7BV`drY*B7?roJ22n6c4^e zl_4X^JY7R>q6@g5j&M|`ts;oU<8F5_Zs!Ds7q)igWh1fVDA{2dN(M85a4LeW69ssB z!PaXm#wN4IAdscl%VOmptw^$E53?}Mieh9taSU_^UBH>as(+LRr4vvzmcb;7X5Dyv zG`fs?UM`kF12S$nmBE-uVS2mR4@Pf=Jy)UsQe66Xmn~+=3h7T>s@~3Ztv`A=!#aUg zDeeWj-7HDe$$GZvrEr98ItCPOSo_do%sR}HEZ3rR&jP1>9Wb*+mz=@6hs7ij!y18e zThd*{^yN`@G=zJCnIH}unes@?>|_|{F*$*BXx5h#fPq*EQ&<=h7{%o=#HCTq;bp38 zrj@QV`;GMrcppgbQJrOCdsHc9ZUL&5eslm{k?gD})d_mc4b>j`CEQh7B+vkIhERU#ONe( z7i=gI?WSFoM7wEOCDCr$ripgbIvqFCzRLV|)51!kkF>GH8<{r2Om{AUMWJkBF}gBX zPlGtZ%=98b2&WglZR?4_5WN>`%23Q~apmRc*b=QB^&>f$m4fXw(O(gUFf&>r zb6O&^5;%9+czw$4UUX9kuX`)6P5zC8Lc%HG;9t7MrqIDzGN^F3-bqh3OfUbj5)aI z7X-Gt5&k06OqnrL4-XF`7C$F~*kh&FoDectF=l7!onp);jzTp`Bde)UK?xeAq4-&e z3VY$6j2m+^Dvg~G2ZO9ST|zhoaqP|Ee9Mz0yHxiz4rUPtgIE8corz$a{}=`ze{aWQ zUKZ? zWh9uHnrNX5Qe>sf9Ga=V#xt$sd^Hn7{MjuLoR_;ZsazUI9yIOahL~-CSr3c^jlwmY z5OIXCBr2Fr$NTWhH^DWlVqek|&0S?F<&--b36m#r`Xq_s`%mi9^L;6G!}-wV`(ix4 zpDeHQ9jN@ips&Wa_oP~%Px*Wfl;Wu`PIJW3%)$6;;5Ml*se?^WEi>=*sT$lm>uZNn zdglSkH#kexcFk74{x;=z+7Z^SeEAbqtvX5h239~k5Jy;C)$}Kn&q*s)NQ2%}zOIW@ z&EUmK4PC5!#j90K*EPytxJK1D*D8PdTIFm0j;cw22fFm%RsQ0gswRJz@(V3Ytfiuk$(N{T#wJD>blL)eSt4JYGimTa>?l3+nk6!heOjZC7e= zJL>x$8utgdJCW!6s;=<9Qo|o0&4<7rqOQ0)qHB_`rn$-IOCRV{{RjGd12e&ZSw4T) zY~b0x+Mza|e=4%!Q*-`l%GcZMYi_D<=m*(fTezv^f8Cz80G$l-gT$R9Zil#?;{J`e zXNdbXaeKtghzmK^4 ziF=5+?cy#Fcd@vqh`U_ekhpPit2sy>@j1mf|7|-WDQrG7JX7znGP3mJ<&MQE6aQc3 zbK$pU4ITcSxJBa*{NA`j;tu}VVCOH!9pp-iq6*?x*NWdi@#&ZTg5V@sDlIb+%rXlOfMp-fgmzY2Z2C{_93@p`+uTL4i9N|V3Ow@xV=+D+qS%)k(%?Qy<9_SSw8`q!k5;Jyq?(eAT@{*4rrLogcIm{ zv|M1^Fl|u7J`XZqO}(C&sz#bk1)>}j%QO#_FQDqwzJWv!de05#vTnero~UblruEuD>sFh5 zkaWK7i>sgd(`s;nmMp1X)GL3V+UTRONBzN9qXux3ioZks+{bssUhI5V{i0F%d)1ph zwRQrc@$wI-=u_7N6{g}XJRYK4N*^IiW7VsJCm&<>ue6t5x~;8SAR|YlF#vx&c+hJiV+A`Vp>rVv?%qR@c{2N_|INI;@@q z+lDXlV{BdxrVd?-A>j|iQ>nD4?ypl1F}v&hc&R;f17cX4t#!eidZ*r1I~!6)9ZLNc zML<5jy$&Pjw@6V0Etq^W^FmO50wOO(Ir-al_&v1y*P~2S;x>kFF#fw(mko?9JixSC zmj37j$_Rcw5lJ4@l|!PJCK##iD@agyoCya1P1{>Zkpd^*pFmZ&RHj=!g34*(sajKS zI^xAfUO8)O=8pR8m6-rqnm zP^2%Z{=ESk6ngwk45|E;kVg2knP5P@*ia#OdUY>!Z7!QisBH~ez@*-3K-1RLur6z9 z=dWhkUaY?^h1BXB6IW^Jj`|r!^zdDXtO0i^ySi^;E^8#m>cNRtp!Ek(^?#2U4Z}ty zQl8p8(NmXBLIHO(yznpDzK1zsh1@w24X}b6^?p-K?Ly<(ftNI9lWGlGKllh!3_Ok$ zwa^xes)rg~byrg^kuIgXXtD^D17?V?2Nwo0mBG57Y5V82hqXQM3;O$CVfD;3ey`DT zF^_5%5d%KFN_!Bt<=FL;0_j-VRhM!p(c!K~Q882`)%r;z%hKv5l=QkT?+w}mZ`Jtb zs^^jO&|7RYR@b!YgTG9I;!iLFbtbLfi(UWOy|nHn_U0kB;7>aJhpdCG;mu8^&bOhI z!Ha8=e*w1gTM?;xs)^b@xnv@kS>Z<1PtYMlt3go{Rc|y=e5n4km&sxs=Xosdsdt-X z5M6^phc98K`Ac=C5z5PQ7+4U^s+;zrIL@rdKL%z0Wuz&mcyzCkraXy)^OrNP!7Ft& zZ>K%ee(7Brb1nQT36?gzrSw4H&8d+P^=xCJXGrp)(+PXOe{8}ySkPQ))$-d zdvz6j1>cabJzv}JTh>*WQrx@W*Y7L(iZ#tc)7qDH4*2r^;^bmYzi(h_-rwArMp^C6 z1OB|f;AW#aDyTy{7rfl!#U?&z@e+fxf(Hd(Xz@}LzuMwc48B@$LGU*P z4=pqC-?I2LgKx3;41@0$Ttvm-RX-r+_4(%+{J7wP;GYUUDr4fe2_6)@Q*d77QS}($ z%YpsW*5Gdn-Y)o7!421$cpTSsdz%D5D!5tjGlCt# zIEiU`=N^;(C5s0Q=JAO9n<4l^!R>-4V%1^%QG!1wxKr?S!Ak_s61+_C;ewY7K3Z^> z;1dO}7yKo`4+%b5a6#~?f;S0XE_g_ANbrk-R|wuBxL5F2!50f27W_|we<}Dz!P^Dj zF8Ce6gMy2KHwfM-n1A4!{NqGnf4?laLGZ5xHw!Kbo+fyg;Qa)1En$9+;Aw(q2zCUw z3!WkPD8aJ@cM3jC@DjmC2wo=mc)`mBpCb4i!DkEZ5*!tr7JQ!Iyx{W%UoQ9}!To}- z5`3-T0m0V`{=VP=!4C)?6#Rt6KQ#P)Uhutwe<8Ra_?H&{tD(mcNAq{ty$0_Ty!<|c zYq5Ki|K|vvBDhQN{(>WdX9?~Re1zb*;6;Mdf|m-$TL3*?{?_6j85|PaEI4lQdK1rE z^jW`V{DlOLH(sx=$BW?01h+q6;=ds{{h-0$7ThcNKEZjx8wFo3_<6zof?pB5Uhvz3 z3xbP+Hwpf;;32{FIQ_7`TLklu77z~$b_8!1+$Ojv_-Mg91%FAfddReoHD-!SDJ zV(~0PKVNVc4n7<|iv{;TY3NTC>^x=g*N9QyA*t^QOJ8HsUm&>sbwj_}rkC>92v$OW zgW$oHhW<7i|9O+&J%Wq-8H}G8y8NwD{*w~l*=N!ZS^73Zzg4i4Gx6JO{J$Ffp5QKt zuf@$yY~Qft-z4~q*G+z(AqJzYzRm%H9UMf-zk`LoAnDs|{BKPB(SrNGZ}4KlMbV-B z8^J^W-^8CqjQVVn{9K7Ih`vuwu+;;)OmI=kyUxbTc>RvxW%ru=?-s12zc*Mc=jTnt zD1W<@|B~QN;m4aopPy>@^N!%ImrVZe3;klDuYt}d`Bz+P;u{4!-!OP@VwAUB=ns(i zLXU}WwOIJwA-G@4JKo0Q;LiRyS@5vLpFxcLmq`9+OMHI5p?3urk2E+Vcu4B|_m=)j zQ=cmZ59bZOiWvEKN&Ytp?h$;a(0ATq=`Jn&6Z{y~D(H3rWTJS6K?2QkWDD&-$9@x!wI z{a?WYGQa-L#>@P~CkVRy`~@a|e9xuvvWpGALa^0uyUwN;y|`N}E*ko~1vh`o;QMU6 z;Ku|za5)~H72N+DgI^KcF7t7l-~xWwlK%ICyWkT4Suk~%i6>yK)%?84;C%!aerE9g zf}4dOGX>|Re)9x(O8Vn0mhzSmgWt=9-=_kjTo$dLv#M~o3TLYD-&f&vRd}EZf3FJP zSA`2zcvBUAz6!rwg}#szM?)2!Qib=e!uwU>gRAhIDtvSmUQ~ro zuEM8Q;cyjRQH3*A`1~rIufkVU;j60f4ORG-DtuQJ{y`PqP=&GWK#LzQr(kd-QaC25 zMi{)O#}$PwLVX5??^r$yGY#f*FxcwV7htf(tNmdPfcYYf z19KqEK`_%{u%xRNm_uL=g_!_T57PiM5r%(d1yAQ+Qym=@;8$8k#2Dxe;mZ{jfXoOl zTis+tLDss$4Rx3|?FN+jyN@UXy=8u{%-=44zAlzbgW)i4!+f|T^X=gmA1a{RqhE_>R3L?G0x~AN>NAr7zH2QB z76N#?Owm8YfhK*judR>YT0xW#iyz2`qQ;F176+ldhOiH^Ro=Xy0&zE*)nRS8b)rll zeMATH8zIvq{F1c0qpiEcWKt@!I!}#-Np12ulx51ikpT7?gcZ0;po(U0Xe7ion_2|u za<)B~$pq4nPL@CqbP2R2bdOqgv3rmJ;aUMfi^)SdUb(^H7>{L*2#ZBl;8Y})fD8mw{N`N+ zx+&TYn6DGUA0MXK zT0}y^6iiEc_dIw^8cd>8W(Ag#Fmk~aAMq@)3C*UERWzXo8$SZ|Mg-vjT?H?Pi(_jX3|FcL8- z_1BYVR5)lN(Cm1exm7eruPug3x|E-*+E(hIvdndjbf9E1Qjba>1*;fTVJJF)K}o|M z+x-Fi&7Y#)ivEtREXZawPmjkE0)HYUa^XKzVK~%DqYJderBK5n8@#9@e9;IOPpF7E zp_JoD6_EYBk;MX&!~pcfC|WIn3Rx&oxp0x)P!hXiUFt^1gGuyg*}L``!F!;j;9@!? z27xLRs7iuYE;*HgR}97qu_FV7 zH?k%04vLCaVg{J;iJ5@O&n~z9&zWW~ZJ^h#E+sGJsHT$GQ1k+$RZZY6>7QWH6ZICm z{25`eMaWCbHm#-+wqqmqhDRC`qfkGfZw8{egyz1{lh9tHI)SyFmEpEirm~}V1!=kc zV3r*NU7A1%TTwSd@a1q>JW)j~b`}!#mDBW9k=Vso6N&}}_jse$0N;qR16D3kPzjhz z9q2$GC6FppB??sBfTGuUt#70!nVwFi&wB&7HAz$?0!EigZ=+gxt$kL0O?5I}UBN9< zdqkl|LkaEHcb*su40-D2=xBWdgY_CM7ldow9dU7Z^0d}az>Xx#uM(CWe*}w0z(@+S z$eU9M^26Rq#*{D8MyrT{*^Jdnq91xnyjwtrYrj@ak{G#j#6}`lt>`4XWBJg*c4*Zt z0wWr0=2QlCA?wjx)VpeT2N!%^WT(5@Oa+Z`>l;=Mxrqo zvd(Bf`5>N=!aWvl_2!^HYLqxm3dpR33Mse`ysj18GyTE!dQc@=SWss^nM+Ls^I}wci4sC{T*# Pq*a;xh@!3jZKeJbuBoqp diff --git a/tools/nauty25r9_mac/geng.c b/tools/nauty25r9_mac/geng.c deleted file mode 100644 index 096d865..0000000 --- a/tools/nauty25r9_mac/geng.c +++ /dev/null @@ -1,2504 +0,0 @@ -/* TODO: insert new timings - * add chordal graphs - * add complements for ordinary graphs */ - -/* geng.c version 2.7; B D McKay, Jan 2013. */ - -#define USAGE \ -"geng [-cCmtfbd#D#] [-uygsnh] [-lvq] \n\ - [-x#X#] n [mine[:maxe]] [res/mod] [file]" - -#define HELPTEXT \ -" Generate all graphs of a specified class.\n\ -\n\ - n : the number of vertices\n\ - mine:maxe : a range for the number of edges\n\ - #:0 means '# or more' except in the case 0:0\n\ - res/mod : only generate subset res out of subsets 0..mod-1\n\ -\n\ - -c : only write connected graphs\n\ - -C : only write biconnected graphs\n\ - -t : only generate triangle-free graphs\n\ - -f : only generate 4-cycle-free graphs\n\ - -b : only generate bipartite graphs\n\ - (-t, -f and -b can be used in any combination)\n\ - -m : save memory at the expense of time (only makes a\n\ - difference in the absence of -b, -t, -f and n <= 28).\n\ - -d# : a lower bound for the minimum degree\n\ - -D# : a upper bound for the maximum degree\n\ - -v : display counts by number of edges\n\ - -l : canonically label output graphs\n\ -\n\ - -u : do not output any graphs, just generate and count them\n\ - -g : use graph6 output (default)\n\ - -s : use sparse6 output\n\ - -y : use the obsolete y-format instead of graph6 format\n\ - -h : for graph6 or sparse6 format, write a header too\n\ -\n\ - -q : suppress auxiliary output (except from -v)\n\ -\n\ - See program text for much more information.\n" - - -/* Parameters: - - n = the number of vertices (1..min(32,WORDSIZE)) - mine = the minimum number of edges (no bounds if missing) - maxe = the maximum number of edges (same as mine if missing) - 0 means "infinity" except in the case "0-0" - mod, res = a way to restrict the output to a subset. - All the graphs in G(n,mine..maxe) are divided into - disjoint classes C(0,mod),C(1,mod),...,C(mod-1,mod), - of very approximately equal size. - Only the class C(res,mod) is written. - - If the -x or -X switch is used, they must have the - same value for different values of res; otherwise - the partitioning may not be valid. In this case - (-x,-X with constant value), the usual relationships - between modulo classes are obeyed; for example - C(3,4) = C(3,8) union C(7,8). This is not true - if 3/8 and 7/8 are done with -x or -X values - different from those used for 3/4. - - file = a name for the output file (stdout if missing or "-") - - All switches can be concatenated or separate. However, the - value of -d must be attached to the "d", and similarly for "x". - - -c : only write connected graphs - -C : only write biconnected graphs - -t : only generate triangle-free graphs - -f : only generate 4-cycle-free graphs - -b : only generate bipartite graphs - (-t, -f and -b can be used in any combination) - -m : save memory at expense of time (only makes a - difference in the absence of -b, -t, -f and n <= 30). - -d : specify an upper bound for the maximum degree. - The value of the upper bound must be adjacent to - the "d". Example: -d6 - -v : display counts by number of edges - -l : canonically label output graphs - - -u : do not output any graphs, just generate and count them - -g : use graph6 output (default) - -s : use sparse6 output - -n : use nauty format instead of graph6 format for output - -y : use the obsolete y-format instead of graph6 format - -h : for graph6 or sparse6 format, write a header too - - -q : suppress auxiliary output (except from -v) - - -x : specify a parameter that determines how evenly - the res/mod facility splits the graphs into subsets. - High values mean more even splitting at slight cost - to the total time. The default is 20*mod, and the - the legal minimum is 3*mod. More information is given - under "res/mod" above. - -X : move the initial splitting level higher by , - in order to force more even splitting at the cost - of speed. Default is -X0. More information is given - under "res/mod" above. - -Output formats. - - The output format is determined by the mutually exclusive switches - -u, -n, -y, -g and -s. The default is -g. - - -u suppresses output of graphs completely. - - -s and -g specify sparse6 and graph6 format, defined elsewhere. - In this case a header is also written if -h is present. - - If -y is present, graphs will be written in y-format. - y-format is obsolete and only provided for backwards compatibility. - - Each graph occupies one line with a terminating newline. - Except for the newline, each byte has the format 01xxxxxx, where - each "x" represents one bit of data. - First byte: xxxxxx is the number of vertices n - Other ceiling(n(n-1)/12) bytes: These contain the upper triangle of - the adjacency matrix in column major order. That is, the entries - appear in the order (0,1),(0,2),(1,2),(0,3),(1,3),(2,3),(0,4),... . - The bits are used in left to right order within each byte. - Any unused bits on the end are set to zero. - - If -n is present, any output graphs are written in nauty format. - - For a graph of n vertices, the output consists of one int giving - the number of vertices, and n setwords containing the adjacency - matrix. Note that this is system dependent (i.e. don't use it). - It will not work properly if the output is to stdout and your - system distinguishes binary and text files. - -OUTPROC feature. - - By defining the C preprocessor variable OUTPROC at compile time - (for Unix the syntax is -DOUTPROC=procname on the cc command), - geng can be made to call a procedure of your manufacture with - each output graph instead of writing anything. Your procedure - needs to have type void and the argument list (FILE *f, graph - *g, int n). f is a stream open for writing, g is the graph in - nauty format, and n is the number of vertices. Your procedure - can be in a separate file so long as it is linked with geng. The - global variables sparse6, graph6, quiet, nooutput, nautyformat, - yformat and canonise (all type boolean) can be used to test - for the presence of the flags -s, -g, -q, -u, -n, -y and -l, - respectively. If -l is present, the group size and similar - details can be found in the global variable nauty_stats. - -PRUNE feature. - - By defining the C preprocessor variable PRUNE at compile time, geng - can be made to call - int PRUNE(graph *g,int n,int maxn) - for each intermediate (and final) graph, and reject it if - the value returned is nonzero. The arguments are: - - g = the graph in nauty format (m=1) - n = the number of vertices in g - maxn = the number of vertices for output - (the value you gave on the command line to geng) - - geng constructs the graph starting with vertex 0, then adding - vertices 1,2,3,... in that order. Each graph in the sequence is - an induced subgraph of all later graphs in the sequence. - - A call is made for all orders from 1 to maxn. In testing for - a uniform property (such as a forbidden subgraph or forbidden - induced subgraph) it might save time to notice that a call to - PRUNE for n implies that the call for n-1 already passed. - - For very fast tests, it might be worthwhile using PREPRUNE as - well. It has the same meaning but is applied earlier and more - often. - -SUMMARY - - If the C preprocessor variable SUMMARY is defined at compile time, the - procedure SUMMARY(bigint nout, double cpu) is called just before - the program exits. The purpose is to allow reporting of statistics - collected by PRUNE or OUTPROC. The values nout and cpu are the output - count and cpu time reported on the >Z line. - Output should be written to stderr. - -INSTRUMENT feature. - - If the C preprocessor variable INSTRUMENT is defined at compile time, - extra code is inserted to collect statistics during execution, and - more information is written to stderr at termination. - -CALLING FROM A PROGRAM - - It is possible to call geng from another program instead of using it - as a stand-alone program. The main requirement is to change the name - of the main program to be other than "main". This is done by defining - the preprocessor variable GENG_MAIN. You might also like to define - OUTPROC to be the name of a procedure to receive the graphs. To call - the program you need to define an argument list argv[] consistent with - the usual one; don't forget that argv[0] is the command name and not - the first argument. The value of argc is the number of strings in - argv[]; that is, one more than the number of arguments. See the - sample program callgeng.c. - -************************************************************************** - -Sample performance statistics. - - Here we give some graph counts and execution times on a Linux - Pentium III running at 550 MHz. Times are with the -u option - (generate but don't write); add 3-5 microseconds per graph for - output to a file. Add another 0.2-0.3 microseconds per graph - if you specify isomorphism (-c), or 0.6-0.7 microseconds per - graph if you specific biisomorphism (-C). - - - General Graphs C3-free Graphs (-t) - - 1 1 1 1 - 2 2 2 2 - 3 4 3 3 - 4 11 4 7 - 5 34 5 14 - 6 156 6 38 - 7 1044 7 107 - 8 12346 0.11 sec 8 410 - 9 274668 1.77 sec 9 1897 - 10 12005168 1.22 min 10 12172 0.21 sec - 11 1018997864 1.72 hr 11 105071 1.49 sec - 12 165091172592 285 hr 12 1262180 15.9 sec - 13 50502031367952 ~10 years 13 20797002 4.08 min - These can be done in about half 14 467871369 1.50 hr - the time by setting the edge limit 15 14232552452 45.6 hr - half way then adding complements. 16 581460254001 79 days - 17 31720840164950 - - - C4-free Graphs (-f) (C3,C4)-free Graphs (-tf) - - 1 1 1 1 - 2 2 2 2 - 3 4 3 3 - 4 8 4 6 - 5 18 5 11 - 6 44 6 23 - 7 117 7 48 - 8 351 8 114 - 9 1230 9 293 - 10 5069 0.11 sec 10 869 - 11 25181 0.48 sec 11 2963 0.10 sec - 12 152045 2.67 sec 12 12066 0.36 sec - 13 1116403 18.0 sec 13 58933 1.50 sec - 14 9899865 2.50 min 14 347498 7.76 sec - 15 104980369 25.7 min 15 2455693 50.9 sec - 16 1318017549 5.33 hr 16 20592932 6.79 min - 17 19427531763 82.6 hr 17 202724920 1.11 hr - 18 333964672216 62 days 18 2322206466 12.7 hr - 19 6660282066936 19 30743624324 168 hr - 20 468026657815 110 days - - Old value was wrong: 18 2142368552 (The program was - ok, but somehow we tabulated the answer incorrectly.) - - - Bipartite Graphs (-b) C4-free Bipartite Graphs (-bf) - - 1 1 1 1 - 2 2 2 2 - 3 3 3 3 - 4 7 4 6 - 5 13 5 10 - 6 35 6 21 - 7 88 7 39 - 8 303 8 86 - 9 1119 9 182 - 10 5479 0.11 sec 10 440 - 11 32303 0.59 sec 11 1074 - 12 251135 3.99 sec 12 2941 0.15 sec - 13 2527712 35.1 sec 13 8424 0.43 sec - 14 33985853 7.22 min 14 26720 1.37 sec - 15 611846940 2.05 hr 15 90883 4.30 sec - 16 14864650924 48.9 hr 16 340253 14.9 sec - 17 488222721992 70 days 17 1384567 57.1 sec - 18 21712049275198 18 6186907 4.01 min - 19 30219769 18.4 min - 20 161763233 1.57 hr - 21 946742190 8.85 hr - 22 6054606722 56.2 hr - 23 42229136988 16.6 days - 24 320741332093 121 days - -If you know any more of these counts, please tell me. - -************************************************************************** - -Hints: - -To make all the graphs of order n, without restriction on type, -it is fastest to make them up to binomial(n,2)/2 edges and append -the complement of those with strictly less than binomial(n,2)/2 edges. - -If it is necessary to split the computation into pieces, it is more -efficient to use the res/mod feature than to split by numbers of edges. - -The memory requirements are exponential in n if no maxdeg is given. -For maxdeg=D, the requirements are still exponential (but smaller) -for general graphs, but O(n^D) for other graphs. Use -m to reduce -the memory requirements to O(n^D) for general graphs too, at the -cost of a small increase in cpu time. - -************************************************************************** - - Author: B. D. McKay, Sep 1991 and many later dates. - Copyright B. McKay (1991-2013). All rights reserved. - This software is subject to the conditions and waivers - detailed in the file nauty.h. - - Changes: Nov 18, 1991 : added -d switch - fixed operation for n=16 - Nov 26, 1991 : added OUTPROC feature - Nov 29, 1991 : -c implies mine >= n-1 - Jan 8, 1992 : make writeny() not static - Jan 10, 1992 : added -n switch - Feb 9, 1992 : fixed case of n=1 - Feb 16, 1992 : changed mine,maxe,maxdeg testing - Feb 19, 1992 : added -b, -t and -u options - documented OUTPROC and added external - declaration for it. - Feb 20, 1992 : added -v option - Feb 22, 1992 : added INSTRUMENT compile-time option - Feb 23, 1992 : added xbnds() for more effective pruning - Feb 24, 1992 : added -l option - Feb 25, 1992 : changed writenauty() to use fwrite() - Mar 11, 1992 : completely revised many parts, incl - new refinement procedure for fast rejection, - distance invariant for regular graphs - May 19, 1992 : modified userautomproc slightly. xorb[] - is no longer idempotent but it doesn't matter. - Speed-up of 2-5% achieved. - June 5, 1993 : removed ";" after "CPUDEFS" to avoid illegal - empty declaration. - Nov 24, 1994 : tested for 0 <= res < mod - - Apr 13, 1996 : Major overhaul. Renamed "geng". - Changed argument syntax. - Removed 16-vertex limit. - Added -s, -m, -x. Allowed combinations. - Replaced code for non-general graphs. - Very many small changes. - Jul 12, 1996 : Changed semantics of -x and res/mod. - Changed >A line and added fflush()/ - All switches can be concatenated or not. - Aug 16, 1996 : Added -X switch and PRUNE() feature. - Fixed case of argument 0-0. - Sep 22, 1996 : Improved 1-2% by tweaking refinex(). - Jan 21, 1997 : Renamed to geng. - Changed -s to -f, and added -sghq. - Sep 7, 1997 : Fixed WORDSIZE=16 problems. - Sep 22, 1997 : Use "wb" open for nautyformat. - Jan 26, 1998 : Added SUMMARY feature. - Mar 4, 1998 : Added -C. - Mar 12, 1998 : Moved stats to nauty_stats. - Jan 1, 2000 : Changed -d to -D and added -d. - Feb 24, 2000 : Raised limit to 32 vertices. - Mar 3, 2000 : Made some counts into unsigned long. - (Includes first arg to SUMMARY.) - Mar 12, 2000 : Used bigint for counts that may exceed 2^32. - Now all counts from very long runs are ok. - Oct 12, 2000 : Changed maxef[32] to 92 after confirmation - from Yang Yuansheng. The old value of 93 was - valid but 92 is slightly more efficient. - Nov 16, 2000 : Used fuction prototypes. - Jul 31, 2001 : Added PREPRUNE - May 7, 2004 : Complete all function prototypes - Nov 24, 2004 : Force -m for very large sizes - Add -bf automatically if generating trees - Apr 1, 2007 : Write >A in one fputs() to try to reduce - mixing of outputs in multi-process pipes. - Sep 19, 2007 : Force -m for n > 28 regardless of word size. - Nov 29, 2008 : Slightly improved isomorphism testing. - -**************************************************************************/ - -#define NAUTY_PGM 1 /* 1 = geng, 2 = genbg, 3 = gentourng */ - -#ifndef MAXN -#define MAXN 32 /* not more than max(32,WORDSIZE) */ -#endif - -#if MAXN > 32 - #error "Can't have MAXN greater than 32" -#endif - -#define ONE_WORD_SETS -#include "gtools.h" /* which includes nauty.h and stdio.h */ - -#if MAXN < 32 -typedef int xword; /* Must be as large as MAXN bits, and - must be unsigned if equal to MAXN bits */ -#else -typedef unsigned int xword; -#endif - -static void (*outproc)(FILE*,graph*,int); - -static FILE *outfile; /* file for output graphs */ -static int connec; /* 1 for -c, 2 for -C, 0 for neither */ -static boolean bipartite; /* presence of -b */ -static boolean trianglefree; /* presence of -t */ -static boolean squarefree; /* presence of -f */ -static boolean savemem; /* presence of -m */ -static boolean verbose; /* presence of -v */ -boolean nautyformat; /* presence of -n */ -boolean yformat; /* presence of -y */ -boolean graph6; /* presence of -g */ -boolean sparse6; /* presence of -s */ -boolean nooutput; /* presence of -u */ -boolean canonise; /* presence of -l */ -boolean quiet; /* presence of -q */ -boolean header; /* presence of -h */ -statsblk nauty_stats; -static int mindeg,maxdeg,maxn,mine,maxe,mod,res; -#define PRUNEMULT 20 /* bigger -> more even split at greater cost */ -static int min_splitlevel,odometer,splitlevel,multiplicity; -static graph gcan[MAXN]; - -#if MAXN <= 16 -static xword xbit[] = {0x0001,0x0002,0x0004,0x0008, - 0x0010,0x0020,0x0040,0x0080, - 0x0100,0x0200,0x0400,0x0800, - 0x1000,0x2000,0x4000,0x8000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : 15-leftbit[((x)>>8)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] + bytecount[(x)&0xFF]) -#elif MAXN <= 24 -static xword xbit[] = {0x000001,0x000002,0x000004,0x000008, - 0x000010,0x000020,0x000040,0x000080, - 0x000100,0x000200,0x000400,0x000800, - 0x001000,0x002000,0x004000,0x008000, - 0x010000,0x020000,0x040000,0x080000, - 0x100000,0x200000,0x400000,0x800000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : 23-leftbit[((x)>>16)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + bytecount[(x)&0xFF]) -#else -static xword xbit[] = {0x00000001,0x00000002,0x00000004,0x00000008, - 0x00000010,0x00000020,0x00000040,0x00000080, - 0x00000100,0x00000200,0x00000400,0x00000800, - 0x00001000,0x00002000,0x00004000,0x00008000, - 0x00010000,0x00020000,0x00040000,0x00080000, - 0x00100000,0x00200000,0x00400000,0x00800000, - 0x01000000,0x02000000,0x04000000,0x08000000, - 0x10000000,0x20000000,0x40000000,0x80000000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : \ - (x)&0xFF0000 ? 23-leftbit[((x)>>16)&0xFF] : \ - 31-leftbit[((x)>>24)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + \ - + bytecount[((x)>>24)&0xFF] + bytecount[(x)&0xFF]) -#endif - -typedef struct -{ - int ne,dmax; /* values used for xlb,xub calculation */ - int xlb,xub; /* saved bounds on extension degree */ - xword lo,hi; /* work purposes for orbit calculation */ - xword xstart[MAXN+1]; /* index into xset[] for each cardinality */ - xword *xset; /* array of all x-sets in card order */ - xword *xcard; /* cardinalities of all x-sets */ - xword *xinv; /* map from x-set to index in xset */ - xword *xorb; /* min orbit representative */ - xword *xx; /* (-b, -t, -s, -m) candidate x-sets */ - /* note: can be the same as xcard */ - xword xlim; /* number of x-sets in xx[] */ -} leveldata; - - -/* The program is so fast that the count of output graphs can quickly - overflow a 32-bit integer. Therefore, we use two long values - for each count, with a ratio of 10^9 between them. The macro - ADDBIG adds a small number to one of these big numbers. - BIGTODOUBLE converts a big number to a double (approximately). - SUMBIGS adds a second big number into a first big number. - SUBBIGS subtracts one big number from a second. - PRINTBIG prints a big number in decimal. - ZEROBIG sets the value of a big number to 0. - ISZEROBIG tests if the value is 0. - SETBIG sets a big number to a value at most 10^9-1. - ISEQBIG tests if two big numbers are equal. - ISASBIG tests if a big number is at least as a value at most 10^9-1. -*/ - -typedef struct -{ - long hi,lo; -} bigint; - -#define ZEROBIG(big) big.hi = big.lo = 0L -#define ISZEROBIG(big) (big.lo == 0 && big.hi == 0) -#define SETBIG(big,value) {big.hi = 0L; big.lo = (value);} -#define ADDBIG(big,extra) if ((big.lo += (extra)) >= 1000000000L) \ - { ++big.hi; big.lo -= 1000000000L;} -#define PRINTBIG(file,big) if (big.hi == 0) \ - fprintf(file,"%ld",big.lo); else fprintf(file,"%ld%09ld",big.hi,big.lo) -#define BIGTODOUBLE(big) (big.hi * 1000000000.0 + big.lo) -#define SUMBIGS(big1,big2) {if ((big1.lo += big2.lo) >= 1000000000L) \ - {big1.lo -= 1000000000L; big1.hi += big2.hi + 1L;} \ - else big1.hi += big2.hi;} -#define SUBBIGS(big1,big2) {if ((big1.lo -= big2.lo) < 0L) \ - {big1.lo += 1000000000L; big1.hi -= big2.hi + 1L;} \ - else big1.hi -= big2.hi;} -/* Note: SUBBIGS must not allow the value to go negative. - SUMBIGS and SUBBIGS both permit big1 and big2 to be the same bigint. */ -#define ISEQBIG(big1,big2) (big1.lo == big2.lo && big1.hi == big2.hi) -#define ISASBIG(big,value) (big.hi > 0 || big.lo >= (value)) - -static leveldata data[MAXN]; /* data[n] is data for n -> n+1 */ -static bigint ecount[1+MAXN*(MAXN-1)/2]; /* counts by number of edges */ -static bigint nodes[MAXN]; /* nodes at each level */ - -#ifdef INSTRUMENT -static unsigned long rigidnodes[MAXN],fertilenodes[MAXN]; -static unsigned long a1calls,a1nauty,a1succs; -static unsigned long a2calls,a2nauty,a2uniq,a2succs; -#endif - -/* The numbers below are actual maximum edge counts. The apparently - anomolous value of 92 for maxef[32] has been confirmed independently - by Yang Yuansheng (as well as all the smaller maxef[] values). - geng works correctly with any upper bounds. - To extend an upper bound upwards: (n-1, E) -> (n, E + floor(2*E/(n-2))). -*/ - -static int maxeb[] = /* max edges for -b */ - {0,0,1,2,4, 6,9,12,16,20, 25,30,36,42,49, 56,64,72,81,90, - 100,110,121,132,144, 156,169,182,196,210, 225,240,256}; -static int maxet[] = /* max edges for -t */ - {0,0,1,2,4, 6,9,12,16,20, 25,30,36,42,49, 56,64,72,81,90, - 100,110,121,132,144, 156,169,182,196,210, 225,240,256}; -static int maxef[] = /* max edges for -f */ - {0,0,1,3,4, 6,7,9,11,13, 16,18,21,24,27, 30,33,36,39,42, - 46,50,52,56,59, 63,67,71,76,80, 85,90,92}; -static int maxeft[] = /* max edges for -ft */ - {0,0,1,2,3, 5,6,8,10,12, 15,16,18,21,23, 26,28,31,34,38, - 41,44,47,50,54, 57,61,65,68,72, 76,80,85}; -static int maxebf[] = /* max edges for -bf */ - {0,0,1,2,3, 4,6,7,9,10, 12,14,16,18,21, 22,24,26,29,31, - 34,36,39,42,45, 48,52,53,56,58, 61,64,67}; - -#ifdef PLUGIN -#include PLUGIN -#endif - -#ifdef OUTPROC -extern void OUTPROC(FILE*,graph*,int); -#endif -#ifdef PRUNE -extern int PRUNE(graph*,int,int); -#endif -#ifdef PREPRUNE -extern int PREPRUNE(graph*,int,int); -#endif -#ifdef SUMMARY -extern void SUMMARY(bigint,double); -#endif - -/************************************************************************/ - -void -writeny(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in y format */ -{ - static char ybit[] = {32,16,8,4,2,1}; - char s[(MAXN*(MAXN-1)/2 + 5)/6 + 4]; - int i,j,k; - char y,*sp; - - sp = s; - *(sp++) = 0x40 | n; - y = 0x40; - - k = -1; - for (j = 1; j < n; ++j) - for (i = 0; i < j; ++i) - { - if (++k == 6) - { - *(sp++) = y; - y = 0x40; - k = 0; - } - if (g[i] & bit[j]) y |= ybit[k]; - } - if (n >= 2) *(sp++) = y; - *(sp++) = '\n'; - *sp = '\0'; - - if (fputs(s,f) == EOF || ferror(f)) - { - fprintf(stderr,">E writeny : error on writing file\n"); - exit(2); - } -} - -/************************************************************************/ - -void -writeg6x(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in graph6 format */ -{ - writeg6(f,g,1,n); -} - -/************************************************************************/ - -void -writes6x(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in sparse6 format */ -{ - writes6(f,g,1,n); -} - -/***********************************************************************/ - -static void -nullwrite(FILE *f, graph *g, int n) -/* don't write graph g (n vertices) to file f */ -{ -} - -/***********************************************************************/ - -void -writenauty(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in nauty format */ -{ - int nn; - - nn = n; - - if (fwrite((char *)&nn,sizeof(int),(size_t)1,f) != 1 || - fwrite((char*)g,sizeof(setword),(size_t)n,f) != n) - { - fprintf(stderr,">E writenauty : error on writing file\n"); - exit(2); - } -} - -/*********************************************************************/ - -static boolean -isconnected(graph *g, int n) -/* test if g is connected */ -{ - setword seen,expanded,toexpand,allbits; - int i; - - allbits = ALLMASK(n); - - expanded = bit[n-1]; - seen = expanded | g[n-1]; - - while (seen != allbits && (toexpand = (seen & ~expanded))) /* not == */ - { - i = FIRSTBITNZ(toexpand); - expanded |= bit[i]; - seen |= g[i]; - } - - return seen == allbits; -} - -/**********************************************************************/ - -static boolean -isbiconnected(graph *g, int n) -/* test if g is biconnected */ -{ - int sp,v,w; - setword sw; - setword visited; - int numvis,num[MAXN],lp[MAXN],stack[MAXN]; - - if (n <= 2) return FALSE; - - visited = bit[0]; - stack[0] = 0; - num[0] = 0; - lp[0] = 0; - numvis = 1; - sp = 0; - v = 0; - - for (;;) - { - if ((sw = g[v] & ~visited)) /* not "==" */ - { - w = v; - v = FIRSTBITNZ(sw); /* visit next child */ - stack[++sp] = v; - visited |= bit[v]; - lp[v] = num[v] = numvis++; - sw = g[v] & visited & ~bit[w]; - while (sw) - { - w = FIRSTBITNZ(sw); - sw &= ~bit[w]; - if (num[w] < lp[v]) lp[v] = num[w]; - } - } - else - { - w = v; /* back up to parent */ - if (sp <= 1) return numvis == n; - v = stack[--sp]; - if (lp[w] >= num[v]) return FALSE; - if (lp[w] < lp[v]) lp[v] = lp[w]; - } - } -} - -/**********************************************************************/ - -static void -gcomplement(graph *g, graph *gc, int n) -/* Take the complement of g and put it in gc */ -{ - int i; - setword all; - - all = ~(setword)BITMASK(n-1); - for (i = 0; i < n; ++i) - gc[i] = g[i] ^ all ^ bit[i]; -} - -/**********************************************************************/ - -static boolean -distinvar(graph *g, int *invar, int n) -/* make distance invariant - return FALSE if n-1 not maximal else return TRUE */ -{ - int w; - setword workset,frontier; - setword sofar; - int inv,d,v; - - for (v = n-1; v >= 0; --v) - { - inv = 0; - sofar = frontier = bit[v]; - for (d = 1; frontier != 0; ++d) - { - workset = 0; - inv += POPCOUNT(frontier) ^ (0x57 + d); - while (frontier) - { - w = FIRSTBITNZ(frontier); - frontier ^= bit[w]; - workset |= g[w]; - } - frontier = workset & ~sofar; - sofar |= frontier; - } - invar[v] = inv; - if (v < n-1 && inv > invar[n-1]) return FALSE; - } - return TRUE; -} - -/**************************************************************************/ - -static void -makexgraph(graph *g, xword *h, int n) -/* make x-format graph from nauty format graph */ -{ - setword gi; - int i,j; - xword hi; - - for (i = 0; i < n; ++i) - { - hi = 0; - gi = g[i]; - while (gi) - { - j = FIRSTBITNZ(gi); - gi ^= bit[j]; - hi |= xbit[j]; - } - h[i] = hi; - } -} - -/**************************************************************************/ - -static void -make0graph(graph *g, xword *h, int n) -/* make x-format graph without edges */ -{ - int i; - - for (i = 0; i < n; ++i) h[i] = 0; -} - -/**************************************************************************/ - -static void -makebgraph(graph *g, xword *h, int n) -/* make x-format graph of different colour graph */ -{ - setword seen1,seen2,expanded,w; - setword restv; - xword xseen1,xseen2; - int i; - - restv = 0; - for (i = 0; i < n; ++i) restv |= bit[i]; - - seen1 = seen2 = 0; - expanded = 0; - - while (TRUE) - { - if ((w = ((seen1 | seen2) & ~expanded)) == 0) - { - xseen1 = 0; - w = seen1; - while (w) - { - i = FIRSTBITNZ(w); - w ^= bit[i]; - xseen1 |= xbit[i]; - } - xseen2 = 0; - w = seen2; - while (w) - { - i = FIRSTBITNZ(w); - w ^= bit[i]; - xseen2 |= xbit[i]; - } - - w = seen1; - while (w) - { - i = FIRSTBITNZ(w); - w ^= bit[i]; - h[i] = xseen2; - } - w = seen2; - while (w) - { - i = FIRSTBITNZ(w); - w ^= bit[i]; - h[i] = xseen1; - } - - restv &= ~(seen1 | seen2); - if (restv == 0) return; - i = FIRSTBITNZ(restv); - seen1 = bit[i]; - seen2 = 0; - } - else - i = FIRSTBITNZ(w); - - expanded |= bit[i]; - if (bit[i] & seen1) seen2 |= g[i]; - else seen1 |= g[i]; - } -} - -/**************************************************************************/ - -static void -makeb6graph(graph *g, xword *h, int n) -/* make x-format bipartite girth 6 graph */ -{ - setword w,x; - xword hi; - int i,j; - - makebgraph(g,h,n); - - for (i = 0; i < n; ++i) - { - w = g[i]; - x = 0; - while (w) - { - j = FIRSTBITNZ(w); - w ^= bit[j]; - x |= g[j]; - } - x &= ~bit[i]; - hi = h[i]; - while (x) - { - j = FIRSTBITNZ(x); - x ^= bit[j]; - hi |= xbit[j]; - } - h[i] = hi; - } -} - -/**************************************************************************/ - -static void -makesgraph(graph *g, xword *h, int n) -/* make x-format square graph */ -{ - setword w,x; - xword hi; - int i,j; - - for (i = 0; i < n; ++i) - { - w = g[i]; - x = 0; - while (w) - { - j = FIRSTBITNZ(w); - w ^= bit[j]; - x |= g[j]; - } - x &= ~bit[i]; - hi = 0; - while (x) - { - j = FIRSTBITNZ(x); - x ^= bit[j]; - hi |= xbit[j]; - } - h[i] = hi; - } -} - -/**************************************************************************/ - -static void -makeg5graph(graph *g, xword *h, int n) -/* make x-format girth-5 graph */ -{ - setword w,x; - xword hi; - int i,j; - - for (i = 0; i < n; ++i) - { - w = g[i]; - x = g[i]; - while (w) - { - j = FIRSTBITNZ(w); - w ^= bit[j]; - x |= g[j]; - } - x &= ~bit[i]; - hi = 0; - while (x) - { - j = FIRSTBITNZ(x); - x ^= bit[j]; - hi |= xbit[j]; - } - h[i] = hi; - } -} - -/**************************************************************************/ - -static void -makeleveldata(boolean restricted) -/* make the level data for each level */ -{ - long h; - int n,nn; - long ncj; - leveldata *d; - xword *xcard,*xinv; - xword *xset,xw,tttn,nxsets; - xword cw; - xword i,j; - - for (n = 1; n < maxn; ++n) - { - nn = maxdeg <= n ? maxdeg : n; - ncj = nxsets = 1; - for (j = 1; j <= nn; ++j) - { - ncj = (ncj * (n - j + 1)) / j; - nxsets += ncj; - } - tttn = 1L << n; - - d = &data[n]; - - d->ne = d->dmax = d->xlb = d->xub = -1; - - if (restricted) - { - d->xorb = (xword*) calloc(nxsets,sizeof(xword)); - d->xx = (xword*) calloc(nxsets,sizeof(xword)); - if (d->xorb == NULL || d->xx == NULL) - { - fprintf(stderr, - ">E geng: calloc failed in makeleveldata()\n"); - exit(2); - } - continue; /* <--- NOTE THIS! */ - } - - d->xset = xset = (xword*) calloc(nxsets,sizeof(xword)); - d->xcard = xcard = (xword*) calloc(nxsets,sizeof(xword)); - d->xinv = xinv = (xword*) calloc(tttn,sizeof(xword)); - d->xorb = (xword*) calloc(nxsets,sizeof(xword)); - d->xx = d->xcard; - - if (xset==NULL || xcard==NULL || xinv==NULL || d->xorb==NULL) - { - fprintf(stderr,">E geng: calloc failed in makeleveldata()\n"); - exit(2); - } - - j = 0; - - for (i = 0;; ++i) - { - if ((h = XPOPCOUNT(i)) <= maxdeg) - { - xset[j] = i; - xcard[j] = h; - ++j; - } - if (i == (xword)((1L<E geng: j=%u mxsets=%u\n", - j,(unsigned)nxsets); - exit(2); - } - - h = 1; - do - h = 3 * h + 1; - while (h < nxsets); - - do - { - for (i = h; i < nxsets; ++i) - { - xw = xset[i]; - cw = xcard[i]; - for (j = i; xcard[j-h] > cw || - (xcard[j-h] == cw && xset[j-h] > xw); ) - { - xset[j] = xset[j-h]; - xcard[j] = xcard[j-h]; - if ((j -= h) < h) break; - } - xset[j] = xw; - xcard[j] = cw; - } - h /= 3; - } - while (h > 0); - - for (i = 0; i < nxsets; ++i) xinv[xset[i]] = i; - - d->xstart[0] = 0; - for (i = 1; i < nxsets; ++i) - if (xcard[i] > xcard[i-1]) d->xstart[xcard[i]] = i; - d->xstart[xcard[nxsets-1]+1] = nxsets; - } -} - -/**************************************************************************/ - -static void -userautomproc(int count, int *p, int *orbits, - int numorbits, int stabvertex, int n) -/* form orbits on powerset of VG - called by nauty; operates on data[n] */ -{ - xword i,j1,j2,moved,pi,pxi; - xword lo,hi; - xword *xorb,*xinv,*xset,w; - - xorb = data[n].xorb; - xset = data[n].xset; - xinv = data[n].xinv; - lo = data[n].lo; - hi = data[n].hi; - - if (count == 1) /* first automorphism */ - for (i = lo; i < hi; ++i) xorb[i] = i; - - moved = 0; - for (i = 0; i < n; ++i) - if (p[i] != i) moved |= xbit[i]; - - for (i = lo; i < hi; ++i) - { - if ((w = xset[i] & moved) == 0) continue; - pxi = xset[i] & ~moved; - while (w) - { - j1 = XNEXTBIT(w); - w ^= xbit[j1]; - pxi |= xbit[p[j1]]; - } - pi = xinv[pxi]; - - j1 = xorb[i]; - while (xorb[j1] != j1) j1 = xorb[j1]; - j2 = xorb[pi]; - while (xorb[j2] != j2) j2 = xorb[j2]; - - if (j1 < j2) xorb[j2] = xorb[i] = xorb[pi] = j1; - else if (j1 > j2) xorb[j1] = xorb[i] = xorb[pi] = j2; - } -} - -/**************************************************************************/ - -static void -userautomprocb(int count, int *p, int *orbits, - int numorbits, int stabvertex, int n) -/* form orbits on powerset of VG - called by nauty; operates on data[n] */ -{ - xword j1,j2,moved,pi,pxi,lo,hi,x; - xword i,*xorb,*xx,w,xlim,xlb; - - xorb = data[n].xorb; - xx = data[n].xx; - xlim = data[n].xlim; - - if (count == 1) /* first automorphism */ - { - j1 = 0; - xlb = data[n].xlb; - - for (i = 0; i < xlim; ++i) - { - x = xx[i]; - if (XPOPCOUNT(x) >= xlb) - { - xx[j1] = x; - xorb[j1] = j1; - ++j1; - } - } - data[n].xlim = xlim = j1; - } - - moved = 0; - for (i = 0; i < n; ++i) - if (p[i] != i) moved |= xbit[i]; - - for (i = 0; i < xlim; ++i) - { - if ((w = xx[i] & moved) == 0) continue; - pxi = xx[i] & ~moved; - while (w) - { - j1 = XNEXTBIT(w); - w ^= xbit[j1]; - pxi |= xbit[p[j1]]; - } - /* pi = position of pxi */ - - lo = 0; - hi = xlim - 1; - - for (;;) - { - pi = (lo + hi) >> 1; - if (xx[pi] == pxi) break; - else if (xx[pi] < pxi) lo = pi + 1; - else hi = pi - 1; - } - - j1 = xorb[i]; - while (xorb[j1] != j1) j1 = xorb[j1]; - j2 = xorb[pi]; - while (xorb[j2] != j2) j2 = xorb[j2]; - - if (j1 < j2) xorb[j2] = xorb[i] = xorb[pi] = j1; - else if (j1 > j2) xorb[j1] = xorb[i] = xorb[pi] = j2; - } -} - -/***************************************************************************** -* * -* refinex(g,lab,ptn,level,numcells,count,active,goodret,code,m,n) is a * -* custom version of refine() which can exit quickly if required. * -* * -* Only use at level==0. * -* goodret : whether to do an early return for code 1 * -* code := -1 for n-1 not max, 0 for maybe, 1 for definite * -* * -*****************************************************************************/ - -static void -refinex(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, boolean goodret, int *code, int m, int n) -{ - int i,c1,c2,labc1; - setword x,lact; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - set *gptr; - setword workset; - int workperm[MAXN]; - int bucket[MAXN+2]; - - if (n == 1) - { - *code = 1; - return; - } - - *code = 0; - lact = *active; - - while (*numcells < n && lact) - { - TAKEBIT(split1,lact); - - for (split2 = split1; ptn[split2] > 0; ++split2) {} - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],1); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT1(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = 0; - ++*numcells; - lact |= bit[c1]; - } - } - } - - else /* nontrivial splitting cell */ - { - workset = 0; - for (i = split1; i <= split2; ++i) workset |= bit[lab[i]]; - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - if ((x = workset & g[lab[i]]) != 0) cnt = POPCOUNT(x); - else cnt = 0; - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - if ((x = workset & g[lab[i]]) != 0) - cnt = POPCOUNT(x); - else - cnt = 0; - - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) continue; - c1 = cell1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - if (c1 != cell1) - { - lact |= bit[c1]; - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = 0; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) lab[i] = workperm[i]; - } - } - - if (ptn[n-2] == 0) - { - if (lab[n-1] == n-1) - { - *code = 1; - if (goodret) return; - } - else - { - *code = -1; - return; - } - } - else - { - i = n - 1; - while (TRUE) - { - if (lab[i] == n-1) break; - --i; - if (ptn[i] == 0) - { - *code = -1; - return; - } - } - } - } -} - -/**************************************************************************/ - -static void -makecanon(graph *g, graph *gcan, int n) -/* gcan := canonise(g) */ -{ - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - - options.getcanon = TRUE; - - nauty(g,lab,ptn,NULL,orbits,&options,&nauty_stats, - workspace,50,1,n,gcan); -} - -/**************************************************************************/ - -static boolean -accept1(graph *g, int n, xword x, graph *gx, int *deg, boolean *rigid) -/* decide if n in theta(g+x) - version for n+1 < maxn */ -{ - int i; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int count[MAXN]; - graph h[MAXN]; - xword xw; - int nx,numcells,code; - int i0,i1,degn; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - -#ifdef INSTRUMENT - ++a1calls; -#endif - - nx = n + 1; - for (i = 0; i < n; ++i) gx[i] = g[i]; - gx[n] = 0; - deg[n] = degn = XPOPCOUNT(x); - - xw = x; - while (xw) - { - i = XNEXTBIT(xw); - xw ^= xbit[i]; - gx[i] |= bit[n]; - gx[n] |= bit[i]; - ++deg[i]; - } - -#ifdef PREPRUNE - if (PREPRUNE(gx,n+1,maxn)) return FALSE; -#endif - - i0 = 0; - i1 = n; - for (i = 0; i < nx; ++i) - { - if (deg[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - ptn[n] = 0; - if (i0 == 0) - { - numcells = 1; - active[0] = bit[0]; - } - else - { - numcells = 2; - active[0] = bit[0] | bit[i1+1]; - ptn[i1] = 0; - } - refinex(gx,lab,ptn,0,&numcells,count,active,FALSE,&code,1,nx); - - if (code < 0) return FALSE; - - if (numcells == nx) - { - *rigid = TRUE; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - - options.getcanon = TRUE; - options.defaultptn = FALSE; - options.userautomproc = userautomproc; - - active[0] = 0; -#ifdef INSTRUMENT - ++a1nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,h); - - if (orbits[lab[n]] == orbits[n]) - { - *rigid = stats.numorbits == nx; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static boolean -accept1b(graph *g, int n, xword x, graph *gx, int *deg, boolean *rigid, - void (*makeh)(graph*,xword*,int)) -/* decide if n in theta(g+x) -- version for n+1 < maxn */ -{ - int i,v; - xword z,hv,bitv,ixx; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int count[MAXN]; - graph gc[MAXN]; - xword h[MAXN],xw,jxx,kxx,*xx; - int nx,numcells,code; - int i0,i1,degn,xubx; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - -#ifdef INSTRUMENT - ++a1calls; -#endif - - nx = n + 1; - for (i = 0; i < n; ++i) gx[i] = g[i]; - gx[n] = 0; - deg[n] = degn = XPOPCOUNT(x); - - xw = x; - while (xw) - { - i = XNEXTBIT(xw); - xw ^= xbit[i]; - gx[i] |= bit[n]; - gx[n] |= bit[i]; - ++deg[i]; - } - -#ifdef PREPRUNE - if (PREPRUNE(gx,n+1,maxn)) return FALSE; -#endif - - i0 = 0; - i1 = n; - for (i = 0; i < nx; ++i) - { - if (deg[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - ptn[n] = 0; - if (i0 == 0) - { - numcells = 1; - active[0] = bit[0]; - } - else - { - numcells = 2; - active[0] = bit[0] | bit[i1+1]; - ptn[i1] = 0; - } - refinex(gx,lab,ptn,0,&numcells,count,active,FALSE,&code,1,nx); - - if (code < 0) return FALSE; - - (*makeh)(gx,h,nx); - xx = data[nx].xx; - xubx = data[nx].xub; - - xx[0] = 0; - kxx = 1; - for (v = 0; v < nx; ++v) - { - bitv = xbit[v]; - hv = h[v]; - jxx = kxx; - for (ixx = 0; ixx < jxx; ++ixx) - if ((hv & xx[ixx]) == 0) - { - z = xx[ixx] | bitv; - if (XPOPCOUNT(z) <= xubx) xx[kxx++] = z; - } - } - data[nx].xlim = kxx; - - if (numcells == nx) - { - *rigid = TRUE; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - - options.getcanon = TRUE; - options.defaultptn = FALSE; - options.userautomproc = userautomprocb; - - active[0] = 0; -#ifdef INSTRUMENT - ++a1nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,gc); - - if (orbits[lab[n]] == orbits[n]) - { - *rigid = stats.numorbits == nx; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static boolean -accept2(graph *g, int n, xword x, graph *gx, int *deg, boolean nuniq) -/* decide if n in theta(g+x) -- version for n+1 == maxn */ -{ - int i; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int degx[MAXN],invar[MAXN]; - setword vmax,gv; - int qn,qv; - int count[MAXN]; - xword xw; - int nx,numcells,code; - int degn,i0,i1,j,j0,j1; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - boolean cheapacc; - -#ifdef INSTRUMENT - ++a2calls; - if (nuniq) ++a2uniq; -#endif - nx = n + 1; - for (i = 0; i < n; ++i) - { - gx[i] = g[i]; - degx[i] = deg[i]; - } - gx[n] = 0; - degx[n] = degn = XPOPCOUNT(x); - - xw = x; - while (xw) - { - i = XNEXTBIT(xw); - xw ^= xbit[i]; - gx[i] |= bit[n]; - gx[n] |= bit[i]; - ++degx[i]; - } - -#ifdef PREPRUNE - if (PREPRUNE(gx,n+1,maxn)) return FALSE; -#endif - - if (nuniq) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - - i0 = 0; - i1 = n; - for (i = 0; i < nx; ++i) - { - if (degx[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - ptn[n] = 0; - if (i0 == 0) - { - numcells = 1; - active[0] = bit[0]; - - if (!distinvar(gx,invar,nx)) return FALSE; - qn = invar[n]; - j0 = 0; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - qv = invar[j]; - if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > 0) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - else - { - numcells = 2; - ptn[i1] = 0; - active[0] = bit[0] | bit[i1+1]; - - vmax = 0; - for (i = i1+1; i < nx; ++i) vmax |= bit[lab[i]]; - - gv = gx[n] & vmax; - qn = POPCOUNT(gv); - - j0 = i1+1; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - gv = gx[j] & vmax; - qv = POPCOUNT(gv); - if (qv > qn) - return FALSE; - else if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > i1+1) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - - refinex(gx,lab,ptn,0,&numcells,count,active,TRUE,&code,1,nx); - - if (code < 0) return FALSE; - - cheapacc = FALSE; - if (code > 0 || numcells >= nx-4) - cheapacc = TRUE; - else if (numcells == nx-5) - { - for (j1 = nx-2; j1 >= 0 && ptn[j1] > 0; --j1) {} - if (nx - j1 != 5) cheapacc = TRUE; - } - else - { - j1 = nx; - j0 = 0; - for (i1 = 0; i1 < nx; ++i1) - { - --j1; - if (ptn[i1] > 0) - { - ++j0; - while (ptn[++i1] > 0) {} - } - } - if (j1 <= j0 + 1) cheapacc = TRUE; - } - - if (cheapacc) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - - options.getcanon = TRUE; - options.defaultptn = FALSE; - - active[0] = 0; -#ifdef INSTRUMENT - ++a2nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,gcan); - - if (orbits[lab[n]] == orbits[n]) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static void -xbnds(int n, int ne, int dmax) -/* find bounds on extension degree; store answer in data[*].* */ -{ - int xlb,xub,d,nn,m,xc; - - xlb = n == 1 ? 0 : (dmax > (2*ne + n - 2)/(n - 1) ? - dmax : (2*ne + n - 2)/(n - 1)); - xub = n < maxdeg ? n : maxdeg; - - for (xc = xub; xc >= xlb; --xc) - { - d = xc; - m = ne + d; - for (nn = n+1; nn < maxn; ++nn) - { - if (d < (2*m + nn - 2)/(nn - 1)) d = (2*m + nn - 2)/(nn - 1); - m += d; - } - if (d > maxdeg || m > maxe) xub = xc - 1; - else break; - } - - if (ne + xlb < mine) - for (xc = xlb; xc <= xub; ++xc) - { - m = ne + xc; - for (nn = n + 1; nn < maxn; ++nn) - m += maxdeg < nn ? maxdeg : nn; - if (m < mine) xlb = xc + 1; - else break; - } - - data[n].ne = ne; - data[n].dmax = dmax; - data[n].xlb = xlb; - data[n].xub = xub; -} - -/**************************************************************************/ - -static void -spaextend(graph *g, int n, int *deg, int ne, boolean rigid, - int xlb, int xub, void (*makeh)(graph*,xword*,int)) -/* extend from n to n+1 -- version for restricted graphs */ -{ - xword x,d,dlow; - xword xlim,*xorb; - int xc,nx,i,j,dmax,dcrit,xlbx,xubx; - graph gx[MAXN]; - xword *xx,ixx; - int degx[MAXN]; - boolean rigidx; - -#ifdef INSTRUMENT - boolean haschild; - - haschild = FALSE; - if (rigid) ++rigidnodes[n]; -#endif - ADDBIG(nodes[n],1); - - nx = n + 1; - dmax = deg[n-1]; - dcrit = mindeg - maxn + n; - d = dlow = 0; - for (i = 0; i < n; ++i) - { - if (deg[i] == dmax) d |= xbit[i]; - if (deg[i] == dcrit) dlow |= xbit[i]; - } - - if (xlb == dmax && XPOPCOUNT(d) + dmax > n) ++xlb; - if (nx == maxn && xlb < mindeg) xlb = mindeg; - if (xlb > xub) return; - -#ifdef PRUNE - if (PRUNE(g,n,maxn)) return; -#endif - - xorb = data[n].xorb; - xx = data[n].xx; - xlim = data[n].xlim; - - if (nx == maxn) - { - for (ixx = 0; ixx < xlim; ++ixx) - { - x = xx[ixx]; - xc = XPOPCOUNT(x); - if (xc < xlb || xc > xub) continue; - if ((rigid || xorb[ixx] == ixx) - && (xc > dmax || (xc == dmax && (x & d) == 0)) - && (dlow & ~x) == 0) - { - if (accept2(g,n,x,gx,deg, - xc > dmax+1 || (xc == dmax+1 && (x & d) == 0)) - && (!connec || - (connec==1 && isconnected(gx,nx)) || - (connec>1 && isbiconnected(gx,nx)))) - { -#ifdef PRUNE - if (!PRUNE(gx,nx,maxn)) -#endif - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - ADDBIG(ecount[ne+xc],1); - (*outproc)(outfile,canonise ? gcan : gx,nx); - } - } - } - } - } - else - { - for (ixx = 0; ixx < xlim; ++ixx) - { - if (nx == splitlevel) - { - if (odometer-- != 0) continue; - odometer = mod - 1; - } - x = xx[ixx]; - xc = XPOPCOUNT(x); - if (xc < xlb || xc > xub) continue; - if ((rigid || xorb[ixx] == ixx) - && (xc > dmax || (xc == dmax && (x & d) == 0)) - && (dlow & ~x) == 0) - { - for (j = 0; j < n; ++j) degx[j] = deg[j]; - if (data[nx].ne != ne+xc || data[nx].dmax != xc) - xbnds(nx,ne+xc,xc); - - xlbx = data[nx].xlb; - xubx = data[nx].xub; - if (xlbx <= xubx - && accept1b(g,n,x,gx,degx,&rigidx,makeh)) - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - spaextend(gx,nx,degx,ne+xc,rigidx,xlbx,xubx,makeh); - } - } - } - if (n == splitlevel - 1 && n >= min_splitlevel - && ISASBIG(nodes[n],multiplicity)) - --splitlevel; - } -#ifdef INSTRUMENT - if (haschild) ++fertilenodes[n]; -#endif -} - -/**************************************************************************/ - -static void -genextend(graph *g, int n, int *deg, int ne, boolean rigid, int xlb, int xub) -/* extend from n to n+1 -- version for general graphs */ -{ - xword x,d,dlow; - xword *xset,*xcard,*xorb; - xword i,imin,imax; - int nx,xc,j,dmax,dcrit; - int xlbx,xubx; - graph gx[MAXN]; - int degx[MAXN]; - boolean rigidx; - -#ifdef INSTRUMENT - boolean haschild; - - haschild = FALSE; - if (rigid) ++rigidnodes[n]; -#endif - ADDBIG(nodes[n],1); - - nx = n + 1; - dmax = deg[n-1]; - dcrit = mindeg - maxn + n; - d = dlow = 0; - for (i = 0; i < n; ++i) - { - if (deg[i] == dmax) d |= xbit[i]; - if (deg[i] == dcrit) dlow |= xbit[i]; - } - - if (xlb == dmax && XPOPCOUNT(d) + dmax > n) ++xlb; - if (nx == maxn && xlb < mindeg) xlb = mindeg; - if (xlb > xub) return; - -#ifdef PRUNE - if (PRUNE(g,n,maxn)) return; -#endif - - imin = data[n].xstart[xlb]; - imax = data[n].xstart[xub+1]; - xset = data[n].xset; - xcard = data[n].xcard; - xorb = data[n].xorb; - - if (nx == maxn) - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if (xc == dmax && (x & d) != 0) continue; - if ((dlow & ~x) != 0) continue; - - if (accept2(g,n,x,gx,deg, - xc > dmax+1 || (xc == dmax+1 && (x & d) == 0))) - if (!connec || (connec==1 && isconnected(gx,nx)) - || (connec>1 && isbiconnected(gx,nx))) - { -#ifdef PRUNE - if (!PRUNE(gx,nx,maxn)) -#endif - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - ADDBIG(ecount[ne+xc],1); - (*outproc)(outfile,canonise ? gcan : gx,nx); - } - } - } - else - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if (xc == dmax && (x & d) != 0) continue; - if ((dlow & ~x) != 0) continue; - if (nx == splitlevel) - { - if (odometer-- != 0) continue; - odometer = mod - 1; - } - - for (j = 0; j < n; ++j) degx[j] = deg[j]; - if (data[nx].ne != ne+xc || data[nx].dmax != xc) - xbnds(nx,ne+xc,xc); - xlbx = data[nx].xlb; - xubx = data[nx].xub; - if (xlbx > xubx) continue; - - data[nx].lo = data[nx].xstart[xlbx]; - data[nx].hi = data[nx].xstart[xubx+1]; - if (accept1(g,n,x,gx,degx,&rigidx)) - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - genextend(gx,nx,degx,ne+xc,rigidx,xlbx,xubx); - } - } - - if (n == splitlevel-1 && n >= min_splitlevel - && ISASBIG(nodes[n],multiplicity)) - --splitlevel; -#ifdef INSTRUMENT - if (haschild) ++fertilenodes[n]; -#endif -} - -/**************************************************************************/ -/**************************************************************************/ - -#ifdef GENG_MAIN -int -GENG_MAIN(int argc, char *argv[]) -#else -int -main(int argc, char *argv[]) -#endif -{ - char *arg; - boolean badargs,gote,gotmr,gotf,gotd,gotD,gotx,gotX; - boolean secret,connec1,connec2,safe,sparse; - char *outfilename,sw; - int i,j,argnum; - graph g[1]; - int tmaxe,deg[1]; - bigint nout; - int splitlevinc; - xword testxword; - double t1,t2; - char msg[201]; - - HELP; - nauty_check(WORDSIZE,1,MAXN,NAUTYVERSIONID); - - testxword = (xword)(-1); - if (MAXN > 32 || MAXN > WORDSIZE || MAXN > 8*sizeof(xword) - || (MAXN == 8*sizeof(xword) && testxword < 0)) - { - fprintf(stderr,"geng: incompatible MAXN, WORDSIZE, or xword\n"); - fprintf(stderr,"--See notes in program source\n"); - exit(1); - } - - badargs = FALSE; - trianglefree = FALSE; - bipartite = FALSE; - squarefree = FALSE; - verbose = FALSE; - nautyformat = FALSE; - yformat = FALSE; - graph6 = FALSE; - sparse6 = FALSE; - savemem = FALSE; - nooutput = FALSE; - canonise = FALSE; - header = FALSE; - outfilename = NULL; - secret = FALSE; - safe = FALSE; - connec1 = connec2 = FALSE; - - maxdeg = MAXN; - mindeg = 0; - - gotX = gotx = gotd = gotD = gote = gotmr = gotf = FALSE; - - argnum = 0; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('n',nautyformat) - else SWBOOLEAN('u',nooutput) - else SWBOOLEAN('g',graph6) - else SWBOOLEAN('s',sparse6) - else SWBOOLEAN('t',trianglefree) - else SWBOOLEAN('f',squarefree) - else SWBOOLEAN('b',bipartite) - else SWBOOLEAN('v',verbose) - else SWBOOLEAN('l',canonise) - else SWBOOLEAN('y',yformat) - else SWBOOLEAN('h',header) - else SWBOOLEAN('m',savemem) - else SWBOOLEAN('c',connec1) - else SWBOOLEAN('C',connec2) - else SWBOOLEAN('q',quiet) - else SWBOOLEAN('$',secret) - else SWBOOLEAN('S',safe) - else SWINT('d',gotd,mindeg,"geng -d") - else SWINT('D',gotD,maxdeg,"geng -D") - else SWINT('x',gotx,multiplicity,"geng -x") - else SWINT('X',gotX,splitlevinc,"geng -X") -#ifdef PLUGIN_SWITCHES -PLUGIN_SWITCHES -#endif - else badargs = TRUE; - } - } - else if (arg[0] == '-' && arg[1] == '\0') - gotf = TRUE; - else - { - if (argnum == 0) - { - if (sscanf(arg,"%d",&maxn) != 1) badargs = TRUE; - ++argnum; - } - else if (gotf) - badargs = TRUE; - else - { - if (!gotmr) - { - if (sscanf(arg,"%d/%d",&res,&mod) == 2) - { - gotmr = TRUE; - continue; - } - } - if (!gote) - { - if (sscanf(arg,"%d:%d",&mine,&maxe) == 2 - || sscanf(arg,"%d-%d",&mine,&maxe) == 2) - { - gote = TRUE; - if (maxe == 0 && mine > 0) maxe = MAXN*(MAXN-1)/2; - continue; - } - else if (sscanf(arg,"%d",&mine) == 1) - { - gote = TRUE; - maxe = mine; - continue; - } - } - if (!gotf) - { - outfilename = arg; - gotf = TRUE; - continue; - } - } - } - } - - if (argnum == 0) - badargs = TRUE; - else if (maxn < 1 || maxn > MAXN) - { - fprintf(stderr,">E geng: n must be in the range 1..%d\n",MAXN); - badargs = TRUE; - } - - if (!gotmr) - { - mod = 1; - res = 0; - } - - if (!gote) - { - mine = 0; - maxe = (maxn*maxn - maxn) / 2; - } - - if (connec1 && mindeg < 1 && maxn > 1) mindeg = 1; - if (connec2 && mindeg < 2 && maxn > 2) mindeg = 2; - if (maxdeg >= maxn) maxdeg = maxn - 1; - if (maxe > maxn*maxdeg / 2) maxe = maxn*maxdeg / 2; - if (maxdeg > maxe) maxdeg = maxe; - if (mindeg < 0) mindeg = 0; - if (mine < (maxn*mindeg+1) / 2) mine = (maxn*mindeg+1) / 2; - - if (!badargs && (mine > maxe || maxe < 0 || maxdeg < 0)) - { - fprintf(stderr, - ">E geng: impossible mine,maxe,mindeg,maxdeg values\n"); - badargs = TRUE; - } - - if (!badargs && (res < 0 || res >= mod)) - { - fprintf(stderr,">E geng: must have 0 <= res < mod\n"); - badargs = TRUE; - } - - if (connec2) connec = 2; - else if (connec1) connec = 1; - else connec = 0; - - if (connec && mine < maxn-1) mine = maxn - 2 + connec; - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if ((nautyformat!=0) + (yformat!=0) + (graph6!=0) - + (sparse6!=0) + (nooutput!=0) > 1) - gt_abort(">E geng: -uyngs are incompatible\n"); - -#ifdef OUTPROC - outproc = OUTPROC; -#else - if (nautyformat) outproc = writenauty; - else if (yformat) outproc = writeny; - else if (nooutput) outproc = nullwrite; - else if (sparse6) outproc = writes6x; - else outproc = writeg6x; -#endif - -#ifdef PLUGIN_INIT -PLUGIN_INIT -#endif - - for (i = 0; i <= maxe; ++i) ZEROBIG(ecount[i]); - for (i = 0; i < maxn; ++i) ZEROBIG(nodes[i]); - - if (nooutput) - outfile = stdout; - else if (!gotf || outfilename == NULL) - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename, - nautyformat ? "wb" : "w")) == NULL) - { - fprintf(stderr, - ">E geng: can't open %s for writing\n",outfilename); - gt_abort(NULL); - } - - if (bipartite) - if (squarefree) tmaxe = maxebf[maxn]; - else tmaxe = maxeb[maxn]; - else if (trianglefree) - if (squarefree) tmaxe = maxeft[maxn]; - else tmaxe = maxet[maxn]; - else if (squarefree) tmaxe = maxef[maxn]; - else tmaxe = (maxn*maxn - maxn) / 2; - - if (safe) ++tmaxe; - - if (maxe > tmaxe) maxe = tmaxe; - - if (gotx) - { - if (multiplicity < 3 * mod || multiplicity > 999999999) - gt_abort(">E geng: -x value must be in [3*mod,10^9-1]\n"); - } - else - multiplicity = PRUNEMULT * mod; - - if (!gotX) splitlevinc = 0; - -/* - if (!quiet) - { - fprintf(stderr,">A %s -%s%s%s%s%s%s",argv[0], - connec2 ? "C" : connec1 ? "c" : "", - trianglefree ? "t" : "", - squarefree ? "f" : "", - bipartite ? "b" : "", - canonise ? "l" : "", - savemem ? "m" : ""); - if (mod > 1) fprintf(stderr,"X%dx%d",splitlevinc,multiplicity); - fprintf(stderr,"d%dD%d n=%d e=%d",mindeg,maxdeg,maxn,mine); - if (maxe > mine) fprintf(stderr,"-%d",maxe); - if (mod > 1) fprintf(stderr," class=%d/%d",res,mod); - fprintf(stderr,"\n"); - fflush(stderr); - } -*/ - - if (!quiet) - { - msg[0] = '\0'; - if (strlen(argv[0]) > 75) - fprintf(stderr,">A %s",argv[0]); - else - CATMSG1(">A %s",argv[0]); - - CATMSG6(" -%s%s%s%s%s%s", - connec2 ? "C" : connec1 ? "c" : "", - trianglefree ? "t" : "", - squarefree ? "f" : "", - bipartite ? "b" : "", - canonise ? "l" : "", - savemem ? "m" : ""); - if (mod > 1) - CATMSG2("X%dx%d",splitlevinc,multiplicity); - CATMSG4("d%dD%d n=%d e=%d",mindeg,maxdeg,maxn,mine); - if (maxe > mine) CATMSG1("-%d",maxe); - if (mod > 1) CATMSG2(" class=%d/%d",res,mod); - CATMSG0("\n"); - fputs(msg,stderr); - fflush(stderr); - } - - g[0] = 0; - deg[0] = 0; - - sparse = bipartite || squarefree || trianglefree || savemem; - - t1 = CPUTIME; - - if (header) - { - if (sparse6) - { - writeline(outfile,SPARSE6_HEADER); - fflush(outfile); - } - else if (!yformat && !nautyformat && !nooutput) - { - writeline(outfile,GRAPH6_HEADER); - fflush(outfile); - } - } - - if (maxn == 1) - { - if (res == 0) - { - ADDBIG(ecount[0],1); - (*outproc)(outfile,g,1); - } - } - else - { - if (maxn > 28 || maxn+4 > 8*sizeof(xword)) - savemem = sparse = TRUE; - if (maxn == maxe+1 && connec) - bipartite = squarefree = sparse = TRUE; /* trees */ - - makeleveldata(sparse); - - if (maxn >= 14 && mod > 1) splitlevel = maxn - 4; - else if (maxn >= 6 && mod > 1) splitlevel = maxn - 3; - else splitlevel = -1; - - if (splitlevel > 0) splitlevel += splitlevinc; - if (splitlevel > maxn - 1) splitlevel = maxn - 1; - if (splitlevel < 3) splitlevel = -1; - - min_splitlevel = 6; - odometer = secret ? -1 : res; - - if (maxe >= mine && - (mod <= 1 || (mod > 1 && (splitlevel > 2 || res == 0)))) - { - xbnds(1,0,0); - if (sparse) - { - data[1].xx[0] = 0; - if (maxdeg > 0) data[1].xx[1] = xbit[0]; - data[1].xlim = data[1].xub + 1; - } - - if (bipartite) - if (squarefree) - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,makeb6graph); - else - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,makebgraph); - else if (trianglefree) - if (squarefree) - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,makeg5graph); - else - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,makexgraph); - else if (squarefree) - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,makesgraph); - else if (savemem) - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,make0graph); - else - genextend(g,1,deg,0,TRUE,data[1].xlb,data[1].xub); - } - } - t2 = CPUTIME; - - ZEROBIG(nout); - for (i = 0; i <= maxe; ++i) SUMBIGS(nout,ecount[i]); - - if (verbose) - { - for (i = 0; i <= maxe; ++i) - if (!ISZEROBIG(ecount[i])) - { - fprintf(stderr,">C "); - PRINTBIG(stderr,ecount[i]); - fprintf(stderr," graphs with %d edges\n",i); - } - } - -#ifdef INSTRUMENT - fprintf(stderr,"\n>N node counts\n"); - for (i = 1; i < maxn; ++i) - { - fprintf(stderr," level %2d: \n",i); - PRINTBIG(stderr,nodes[i]); - fprintf(stderr," (%lu rigid, %lu fertile)\n", - rigidnodes[i],fertilenodes[i]); - } - fprintf(stderr,">A1 %lu calls to accept1, %lu nauty, %lu succeeded\n", - a1calls,a1nauty,a1succs); - fprintf(stderr, - ">A2 %lu calls to accept2, %lu nuniq, %lu nauty, %lu succeeded\n", - a2calls,a2uniq,a2nauty,a2succs); - fprintf(stderr,"\n"); -#endif - -#ifdef SUMMARY - SUMMARY(nout,t2-t1); -#endif - - if (!quiet) - { - fprintf(stderr,">Z "); - PRINTBIG(stderr,nout); - fprintf(stderr," graphs generated in %3.2f sec\n",t2-t1); - } - -#ifdef GENG_MAIN - for (i = 1; i < maxn; ++i) - if (sparse) - { - free(data[i].xorb); - free(data[i].xx); - } - else - { - free(data[i].xorb); - free(data[i].xset); - free(data[i].xinv); - free(data[i].xcard); - } - return 0; -#else - exit(0); -#endif -} diff --git a/tools/nauty25r9_mac/genrang b/tools/nauty25r9_mac/genrang deleted file mode 100644 index 30034b23ae580686225df12c22ea9453a0d3c06e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166120 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

    u9Yk-rB~HU77q#S{d`D!(r;DiDF`LT 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%0DgBTNaQ|!YV2r(YYl}D0Afg}3!#mby- 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 0; ) - if (!ISELEMENT(gpi,perm[j])) - { - ii = perm[i]; - jj = perm[j]; - while (ii != i || jj != j) - { - ADDELEMENT(g+m*1L*ii,jj); - ii = perm[ii]; - jj = perm[jj]; - } - } - } -} - -/**************************************************************************/ - -static void -ranedges(long e, graph *g, int m, int n) -/* Random graph with n vertices and e edges */ -{ - unsigned long ln,li,nc2,ned,sofar; - set *gi,*gj; - int i,j; - - ln = n; - nc2 = (ln&1) ? ln*((ln-1)/2) : (ln/2)*(ln-1); - - if (e + e > nc2) ned = nc2 - e; - else ned = e; - sofar = 0; - - for (li = m*ln; --li != 0;) g[li] = 0; - g[0] = 0; - - while (sofar < ned) - { - i = KRAN(n); - do { j = KRAN(n); } while (i == j); - gi = GRAPHROW(g,i,m); - if (!ISELEMENT(gi,j)) - { - ADDELEMENT(gi,j); - gj = GRAPHROW(g,j,m); - ADDELEMENT(gj,i); - ++sofar; - } - } - - if (ned != e) complement(g,m,n); -} - -/**************************************************************************/ - -static void -makeranreg(int *cub, int degree, int multmax, int loopmax, int n) -/* Make a random regular graph in cub[]. Each consecutive degree - entries of cub[] is set to the neighbours of one vertex. - The length of cub had better be at least degree*n */ -{ - long i,j,k,v,w,nn,mult; - boolean ok; -#if MAXN - int deg[MAXN],p[MAXLREG*MAXN]; -#else - DYNALLSTAT(int,deg,deg_sz); - DYNALLSTAT(int,p,p_sz); - DYNALLSTAT(int,loops,loops_sz); - - DYNALLOC1(int,deg,deg_sz,n,"genrang"); - DYNALLOC2(int,p,p_sz,degree,n,"genrang"); - DYNALLOC1(int,loops,loops_sz,n,"genrang"); -#endif - - nn = n; - - for (i = j = 0; i < nn; ++i) - for (k = 0; k < degree; ++k) - p[j++] = i; - - do - { - ok = TRUE; - - for (j = degree*nn-1; j >= 1; j -= 2) - { - i = KRAN(j); - k = p[j-1]; - p[j-1] = p[i]; - p[i] = k; - } - for (i = 0; i < nn; ++i) deg[i] = loops[i] = 0; - - for (j = degree*nn-1; j >= 1;) - { - v = p[j--]; - w = p[j--]; - if (v == w && ++loops[v] > loopmax) - { - ok = FALSE; - break; - } - if (v != w && multmax < degree) - { - mult = 0; - for (i = deg[w]; --i >= 0;) - if (cub[degree*w+i] == v && ++mult >= multmax) break; - if (i >= 0) - { - ok = FALSE; - break; - } - } - cub[degree*w+deg[w]++] = v; - cub[degree*v+deg[v]++] = w; - } - } - while (!ok); -} - -/**************************************************************************/ - -static void -ranregR(FILE *f, int degree, int multmax, int loopmax, int n) -/* Make a random regular graph of order n and degree d and write - it in f, as number of vertices, number of edges, list of edges */ -{ - long i,j,k,l; - int loops; -#if MAXN - int cub[MAXLREG*MAXN]; -#else - DYNALLSTAT(int,cub,cub_sz); - DYNALLOC2(int,cub,cub_sz,degree,n,"genrang"); -#endif - - makeranreg(cub,degree,multmax,loopmax,n); - - fprintf(f,"%d %ld\n",n,n*(long)degree/2); - l = j = 0; - for (i = 0; i < n; ++i) - { - loops = 0; - for (k = 0; k < degree; ++k, ++j) - if (i < cub[j] || (i == cub[j] && (++loops & 1) == 0)) - { - if (l > 0 && l % 5 == 0) fprintf(f,"\n"); - fprintf(f," %ld %d",i,cub[j]); - ++l; - } - } - fprintf(f,"\n"); - if (ferror(f)) gt_abort(">E genrang output error\n"); -} - -/**************************************************************************/ - -static void -ranreg(int degree, graph *g, int m, int n) -/* Make a random simple regular graph of order n and degree d and return - it in g. */ -{ - int i,j,k; - set *gi; -#if MAXN - int cub[MAXLREG*MAXN]; -#else - DYNALLSTAT(int,cub,cub_sz); - DYNALLOC1(int,cub,cub_sz,degree*n,"genrang"); -#endif - - makeranreg(cub,degree,1,0,n); - - j = 0; - for (i = 0, gi = (set*)g; i < n; ++i, gi += m) - { - EMPTYSET(gi,m); - for (k = 0; k < degree; ++k) - { - ADDELEMENT(gi,cub[j]); - j++; - } - } -} - -/**************************************************************************/ - -static void -ranreglm_sg(int degree, sparsegraph *sg, int multmax, int loopmax, int n) -/* Make a sparse random regular graph of order n and degree d - * and return it in sg. */ -{ - int i,j,k,k0,deg,loops,nde; -#if MAXN - int cub[MAXLREG*MAXN]; -#else - DYNALLSTAT(int,cub,cub_sz); - DYNALLOC1(int,cub,cub_sz,degree*n,"genrang"); -#endif - - makeranreg(cub,degree,multmax,loopmax,n); - - SG_ALLOC(*sg,n,degree*n,"genrang"); - - sg->nv = n; - j = nde = 0; - for (i = 0; i < n; ++i) - { - sg->v[i] = k0 = i*degree; - loops = deg = 0; - for (k = 0; k < degree; ++k, ++j) - { - if (cub[j] == i) - { - /* Loops are in cub twice but sg once */ - ++loops; - if ((loops&1)) sg->e[k0+deg++] = i; - } - else - sg->e[k0+deg++] = cub[j]; - } - sg->d[i] = deg; - nde += deg; - } - sg->nde = nde; -} - -/**************************************************************************/ - -static void -randomtree(sparsegraph *sg, int n) -/* Make a random tree with n vertices */ -{ - int i,v0,v1,ne,k; -#if MAXN - int ed[2*MAXN]; -#else - DYNALLSTAT(int,ed,ed_sz); - DYNALLOC1(int,ed,ed_sz,2*n,"randomtree"); -#endif - - SG_ALLOC(*sg,n,2*(n-1),"randomtree"); - sg->nv = n; - sg->nde = 2*(n-1); - sg->w = NULL; - - for (i = 0; i < n; ++i) sg->d[i] = 0; - - v0 = KRAN(n); - ne = k = 0; - while (ne < n-1) - { - do { v1 = KRAN(n); } while (v1 == v0); - if (sg->d[v1] == 0) - { - ed[k++] = v0; - ed[k++] = v1; - ++ne; - ++sg->d[v0]; - ++sg->d[v1]; - } - v0 = v1; - } - - sg->v[0] = 0; - for (i = 1; i < n; ++i) sg->v[i] = sg->v[i-1] + sg->d[i-1]; - - for (i = 0; i < n; ++i) sg->d[i] = 0; - - for (k = 0; k < 2*(n-1); ) - { - v0 = ed[k++]; - v1 = ed[k++]; - sg->e[sg->v[v0]+(sg->d[v0])++] = v1; - sg->e[sg->v[v1]+(sg->d[v1])++] = v0; - } -} - -/**************************************************************************/ -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - int m,n,codetype; - int argnum,j; - char *arg,sw; - boolean badargs; - boolean gswitch,sswitch,qswitch,Sswitch,Rswitch,lswitch,tswitch; - boolean aswitch,P1switch,P2switch,eswitch,rswitch,mswitch; - long numgraphs,nout,P1value,P2value,evalue,rvalue; - nauty_counter ln,nc2; - int Svalue,loopmax,multmax; - static FILE *outfile; - char *outfilename; - sparsegraph sg; - boolean usesparse; - -#if MAXN - graph g[MAXM*1L*MAXN]; - int perm[MAXN]; -#else - DYNALLSTAT(graph,g,g_sz); - DYNALLSTAT(int,perm,perm_sz); -#endif - - HELP; - - gswitch = sswitch = qswitch = Sswitch = Rswitch = FALSE; - aswitch = P1switch = P2switch = eswitch = rswitch = FALSE; - tswitch = lswitch = mswitch = FALSE; - outfilename = NULL; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('g',gswitch) - else SWBOOLEAN('s',sswitch) - else SWBOOLEAN('a',aswitch) - else SWBOOLEAN('t',tswitch) - else SWBOOLEAN('q',qswitch) - else SWLONG('P',P1switch,P1value,"genrang -P") - else SWLONG('/',P2switch,P2value,"genrang -P") - else SWLONG('e',eswitch,evalue,"genrang -e") - else SWLONG('r',rswitch,rvalue,"genrang -r") - else SWLONG('R',Rswitch,rvalue,"genrang -R") - else SWINT('S',Sswitch,Svalue,"genrang -S") - else SWINT('l',lswitch,loopmax,"genrang -l") - else SWINT('m',mswitch,multmax,"genrang -m") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) - { - if (sscanf(arg,"%d",&n) != 1 || n < 1) badargs = TRUE; - } - else if (argnum == 2) - { - if (sscanf(arg,"%ld",&numgraphs) != 1 || numgraphs < 1) - badargs = TRUE; - } - else if (argnum == 3) outfilename = arg; - else badargs = TRUE; - } - } - - if ((gswitch!=0) + (sswitch!=0) > 1) - gt_abort(">E genrang: -gs are incompatible\n"); - - if (gswitch) codetype = GRAPH6; - else codetype = SPARSE6; - - if (P1switch && !P2switch) - { - P2value = P1value; - P1value = 1; - } - else if (P2switch && !P1switch) - { - P1value = 1; - P1switch = TRUE; - } - - if (P1switch && (P1value < 0 || P2value <= 0 || P1value > P2value)) - gt_abort(">E genrang: bad value for -P switch\n"); - - if ((P1switch!=0) + (eswitch!=0) + (rswitch!=0) - + (Rswitch!=0) + (tswitch!=0) > 1) - gt_abort(">E genrang: -Pert are incompatible\n"); - - if ((sswitch!=0) + (gswitch!=0) + (Rswitch!=0) > 1) /* REVISE */ - gt_abort(">E genrang: -sgR are incompatible\n"); - - if ((aswitch!=0) + (Rswitch!=0) > 1) - gt_abort(">E genrang: -aR are incompatible\n"); - - if (!lswitch) loopmax = 0; - if (!mswitch) multmax = 1; - - if ((loopmax>0 || multmax>1) && !(Rswitch || (rswitch && !gswitch))) - gt_abort(">E genrang: -l,-m need -R or -r without -g\n"); - - if (multmax < 1 || loopmax < 0) - gt_abort(">E genrang: bad value for -l or -m\n"); - - if (argnum < 2 || argnum > 3) badargs = TRUE; - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!Sswitch) - { -#ifdef INITSEED - INITSEED; - ran_init(seed); -#endif - } - else - ran_init(Svalue); - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - m = (n + WORDSIZE + 1) / WORDSIZE; - usesparse = tswitch || (rswitch && !aswitch && codetype==SPARSE6); -#if !MAXN - if (!Rswitch && !usesparse) - { - DYNALLOC2(graph,g,g_sz,n,m,"genrang"); - if (aswitch) DYNALLOC1(int,perm,perm_sz,n,"genrang"); - } -#endif - - rswitch = rswitch || Rswitch; - - if (rswitch && rvalue > MAXLREG) - { - fprintf(stderr, - ">E -r/-R is only implemented for degree <= %d\n",MAXLREG); - exit(1); - } - - ln = n; - nc2 = ln*loopmax + ln*(ln-1)/2*multmax; - - if (eswitch && evalue > nc2) - { - fprintf(stderr, - ">E There are no graphs of order %d and %ld edges\n", - n,evalue); - exit(1); - } - - if (rswitch && (((n&1) != 0 && (rvalue&1) != 0) - || rvalue > (n-1)*multmax+2*loopmax)) - { - fprintf(stderr, - ">E There are no such graphs of order %d and degree %ld\n", - n,rvalue); - exit(1); - } - - if (!P1switch) - { - P1value = 1; - P2value = 2; - } - - SG_INIT(sg); - - for (nout = 1; nout <= numgraphs; ++nout) - { - if (eswitch) ranedges(evalue,g,m,n); - else if (Rswitch) ranregR(outfile,rvalue,multmax,loopmax,n); - else if (rswitch && usesparse) - ranreglm_sg(rvalue,&sg,multmax,loopmax,n); - else if (rswitch && !usesparse) ranreg(rvalue,g,m,n); - else if (tswitch) randomtree(&sg,n); - else rangraph2(g,FALSE,P1value,P2value,m,n); - - if (Rswitch) continue; - - if (aswitch && !usesparse) - { - ranperm(perm,n); - perminvar(g,perm,m,n); - } - if (codetype == SPARSE6) - { - if (usesparse) - { - sortlists_sg(&sg); - writes6_sg(outfile,&sg); - } - else - writes6(outfile,g,m,n); - } - else - { - if (usesparse) - writeg6_sg(outfile,&sg); - else - writeg6(outfile,g,m,n); - } - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/gentourng b/tools/nauty25r9_mac/gentourng deleted file mode 100644 index 561395611b410b8d3fe23c222afc172187b8c845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100712 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 : specify an upper bound for the maximum out-degree. - The value of the upper bound must be adjacent to - the "d". Example: -d6 - -l : canonically label output graphs - - -u : do not output any graphs, just generate and count them - -g : use graph6 output - -s : use sparse6 output - For -g and -s, the lower triangle of the adjacency matrix - is written as if it is an undirected graph. Nauty tools - like labelg do not know this format. To read it you can - read it as an undirected graph then complement the upper - triangle. - -h : for graph6 or sparse6 format, write a header too - - -q : suppress auxiliary output (except from -v) - -Output formats. - - The output format is determined by the mutually exclusive switches - -u, -g and -s. The default is ascii format. - - -u suppresses output of graphs completely. - - -s and -g specify sparse6 and graph6 format, defined elsewhere. - In this case a header is also written if -h is present. - -OUTPROC feature. - - By defining the C preprocessor variable OUTPROC at compile time - (for Unix the syntax is -DOUTPROC=procname on the cc command), - gentourng can be made to call a procedure of your manufacture with each - output graph instead of writing anything. Your procedure needs - to have type void and the argument list (FILE *f, graph *g, int n). - f is a stream open for writing, g is the graph in nauty format, - and n is the number of vertices. Your procedure can be in a - separate file so long as it is linked with gentourng. The global - variables nooutput, and canonise (all type boolean) can be - used to test for the presence of the flags -u and -l, - respectively. If -l is present, the group size and similar - details can be found in the global variable nauty_stats. - -PRUNE feature. - - By defining the C preprocessor variable PRUNE at compile time, gentourng - can be made to call - int PRUNE(graph *g,int n,int maxn) - for each intermediate (and final) graph, and reject it if - the value returned is nonzero. The arguments are: - - g = the graph in nauty format (m=1) - n = the number of vertices in g - maxn = the number of vertices for output - (the value you gave on the command line to gentourng) - - gentourng constructs the graph starting with vertex 0, then adding - vertices 1,2,3,... in that order. Each graph in the sequence is - an induced subgraph of all later graphs in the sequence. - - A call is made for all orders from 1 to maxn. In testing for - a uniform property (such as a forbidden subgraph or forbidden - induced subgraph) it might save time to notice that a call to - PRUNE for n implies that the call for n-1 already passed. - - For very fast tests, it might be worthwhile using PREPRUNE as - well or instead. It has the same meaning but is applied earlier - and more often. - -SUMMARY - - If the C preprocessor variable SUMMARY is defined at compile time, the - procedure SUMMARY(bigint nout, double cpu) is called just before - the program exits. The purpose is to allow reporting of statistics - collected by PRUNE or OUTPROC. The values nout and cpu are the output - count and cpu time reported on the >Z line. - Output should be written to stderr. - -INSTRUMENT feature. - - If the C preprocessor variable INSTRUMENT is defined at compile time, - extra code is inserted to collect statistics during execution, and - more information is written to stderr at termination. - -CALLING FROM A PROGRAM - - It is possible to call gentourng from another program instead of using it - as a stand-alone program. The main requirement is to change the name - of the main program to be other than "main". This is done by defining - the preprocessor variable GENG_MAIN. You might also like to define - OUTPROC to be the name of a procedure to receive the graphs. To call - the program you need to define an argument list argv[] consistent with - the usual one; don't forget that argv[0] is the command name and not - the first argument. The value of argc is the number of strings in - argv[]; that is, one more than the number of arguments. See the - sample program callgeng.c. - - -Counts: - - all strong regular - n tournaments tournaments tournaments - - 1 1 1 1 - 2 1 0 1 - 3 2 1 1 - 4 4 1 1 - 5 12 6 1 - 6 56 35 5 - 7 456 353 3 - 8 6880 6008 85 - 9 191536 178133 15 - 10 9733056 9355949 13333 - 11 903753248 884464590 1223 - 12 154108311168 152310149735 19434757 - 13 48542114686912 48234782263293 1495297 - 14 28401423719122304 28304491788158056 - 15 31021002160355166848 30964247546702883729 18400989629 - -************************************************************************** - - Author: B. D. McKay, Nov 2008. - Copyright B. McKay (2008). All rights reserved. - This software is subject to the conditions and waivers - detailed in the file nauty.h. - -**************************************************************************/ - -#define NAUTY_PGM 3 /* 1 = geng, 2 = genbg, 3 = gentourng */ - -#ifndef MAXN -#define MAXN 32 /* not more than max(32,WORDSIZE) */ -#endif - -#if MAXN > 32 - #error "Can't have MAXN greater than 32" -#endif - -#define ONE_WORD_SETS -#include "gtools.h" /* which includes nauty.h and stdio.h */ - -typedef unsigned int xword; - -static void (*outproc)(FILE*,graph*,int); - -static FILE *outfile; /* file for output graphs */ -static int connec; /* 1 for -c, 0 for not */ -boolean graph6; /* presence of -g */ -boolean sparse6; /* presence of -s */ -boolean nooutput; /* presence of -u */ -boolean canonise; /* presence of -l */ -boolean quiet; /* presence of -q */ -boolean header; /* presence of -h */ -statsblk nauty_stats; -static int mindeg,maxdeg,maxn,mod,res; -static boolean regular; -#define PRUNEMULT 20 /* bigger -> more even split at greater cost */ -static int min_splitlevel,odometer,splitlevel,multiplicity; -static graph gcan[MAXN]; - -#if MAXN <= 16 -static xword xbit[] = {0x0001,0x0002,0x0004,0x0008, - 0x0010,0x0020,0x0040,0x0080, - 0x0100,0x0200,0x0400,0x0800, - 0x1000,0x2000,0x4000,0x8000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : 15-leftbit[((x)>>8)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] + bytecount[(x)&0xFF]) -#elif MAXN <= 24 -static xword xbit[] = {0x000001,0x000002,0x000004,0x000008, - 0x000010,0x000020,0x000040,0x000080, - 0x000100,0x000200,0x000400,0x000800, - 0x001000,0x002000,0x004000,0x008000, - 0x010000,0x020000,0x040000,0x080000, - 0x100000,0x200000,0x400000,0x800000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : 23-leftbit[((x)>>16)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + bytecount[(x)&0xFF]) -#else -static xword xbit[] = {0x00000001,0x00000002,0x00000004,0x00000008, - 0x00000010,0x00000020,0x00000040,0x00000080, - 0x00000100,0x00000200,0x00000400,0x00000800, - 0x00001000,0x00002000,0x00004000,0x00008000, - 0x00010000,0x00020000,0x00040000,0x00080000, - 0x00100000,0x00200000,0x00400000,0x00800000, - 0x01000000,0x02000000,0x04000000,0x08000000, - 0x10000000,0x20000000,0x40000000,0x80000000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : \ - (x)&0xFF0000 ? 23-leftbit[((x)>>16)&0xFF] : \ - 31-leftbit[((x)>>24)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + \ - + bytecount[((x)>>24)&0xFF] + bytecount[(x)&0xFF]) -#endif - -typedef struct -{ - xword lo,hi; /* work purposes for orbit calculation */ - xword xstart[MAXN+1]; /* index into xset[] for each cardinality */ - xword *xset; /* array of all x-sets in card order */ - xword *xcard; /* cardinalities of all x-sets */ - xword *xinv; /* map from x-set to index in xset */ - xword *xorb; /* min orbit representative */ -} leveldata; - - -/* The program is so fast that the count of output graphs can quickly - overflow a 32-bit integer. Therefore, we use two long values - for each count, with a ratio of 10^9 between them. The macro - ADDBIG adds a small number to one of these big numbers. - BIGTODOUBLE converts a big number to a double (approximately). - SUMBIGS adds a second big number into a first big number. - SUBBIGS subtracts one big number from a second. - PRINTBIG prints a big number in decimal. - ZEROBIG sets the value of a big number to 0. - ISZEROBIG tests if the value is 0. - SETBIG sets a big number to a value at most 10^9-1. - ISEQBIG tests if two big numbers are equal. - ISASBIG tests if a big number is at least as a value at most 10^9-1. -*/ - -typedef struct -{ - long hi,lo; -} bigint; - -#define ZEROBIG(big) big.hi = big.lo = 0L -#define ISZEROBIG(big) (big.lo == 0 && big.hi == 0) -#define SETBIG(big,value) {big.hi = 0L; big.lo = (value);} -#define ADDBIG(big,extra) if ((big.lo += (extra)) >= 1000000000L) \ - { ++big.hi; big.lo -= 1000000000L;} -#define PRINTBIG(file,big) if (big.hi == 0) \ - fprintf(file,"%ld",big.lo); else fprintf(file,"%ld%09ld",big.hi,big.lo) -#define BIGTODOUBLE(big) (big.hi * 1000000000.0 + big.lo) -#define SUMBIGS(big1,big2) {if ((big1.lo += big2.lo) >= 1000000000L) \ - {big1.lo -= 1000000000L; big1.hi += big2.hi + 1L;} \ - else big1.hi += big2.hi;} -#define SUBBIGS(big1,big2) {if ((big1.lo -= big2.lo) < 0L) \ - {big1.lo += 1000000000L; big1.hi -= big2.hi + 1L;} \ - else big1.hi -= big2.hi;} -/* Note: SUBBIGS must not allow the value to go negative. - SUMBIGS and SUBBIGS both permit big1 and big2 to be the same bigint. */ -#define ISEQBIG(big1,big2) (big1.lo == big2.lo && big1.hi == big2.hi) -#define ISASBIG(big,value) (big.hi > 0 || big.lo >= (value)) - -static leveldata data[MAXN]; /* data[n] is data for n -> n+1 */ -static bigint nodes[MAXN]; /* nodes at each level */ -static bigint nout; - -#ifdef INSTRUMENT -static unsigned long rigidnodes[MAXN],fertilenodes[MAXN]; -static unsigned long a1calls,a1nauty,a1succs; -static unsigned long a2calls,a2nauty,a2uniq,a2succs; -#endif - -#ifdef PLUGIN -#include PLUGIN -#endif - -#ifdef OUTPROC -extern void OUTPROC(FILE*,graph*,int); -#endif -#ifdef PRUNE -extern int PRUNE(graph*,int,int); -#endif -#ifdef PREPRUNE -extern int PREPRUNE(graph*,int,int); -#endif -#ifdef SUMMARY -extern void SUMMARY(bigint,double); -#endif - -/************************************************************************/ - -void -write_ascii(FILE *f, graph *g, int n) -/* write tournament g (n vertices) to file f in ascii format */ -{ - char s[MAXN*(MAXN-1)/2+2]; - int i,j; - size_t k; - - k = 0; - for (i = 0; i < n-1; ++i) - for (j = i+1; j < n; ++j) - if ((g[i] & bit[j])) s[k++] = '1'; else s[k++] = '0'; - - s[k++] = '\n'; - s[k] = '\0'; - - if (fwrite(s,1,k,f) != k || ferror(f)) - gt_abort(">E write_ascii : error on writing\n"); -} - -/************************************************************************/ - -void -writeg6x(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in graph6 format */ -{ - writeg6(f,g,1,n); -} - -/************************************************************************/ - -void -writes6x(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in sparse6 format */ -{ - writes6(f,g,1,n); -} - -/***********************************************************************/ - -static void -nullwrite(FILE *f, graph *g, int n) -/* don't write graph g (n vertices) to file f */ -{ -} - -/***********************************************************************/ - -static boolean -isstrong(graph *g, int n) -/* test if tournament g is strongly-connected - * This code is strictly for tournaments only. - */ -{ - setword seen,expanded,toexpand,allbits; - int i; - - allbits = ALLMASK(n); - - seen = bit[0] | g[0]; - expanded = bit[0]; - - while (seen != allbits && (toexpand = (seen & ~expanded))) /* not == */ - { - i = FIRSTBITNZ(toexpand); - expanded |= bit[i]; - seen |= g[i]; - } - - if (seen != allbits) return FALSE; - - seen = (allbits ^ g[0]); - expanded = bit[0]; - - while (seen != allbits && (toexpand = (seen & ~expanded))) /* not == */ - { - i = FIRSTBITNZ(toexpand); - expanded |= bit[i]; - seen |= (g[i] ^ allbits); - } - - return seen == allbits; -} - -/**********************************************************************/ - -static void -gcomplement(graph *g, graph *gc, int n) -/* Take the complement of g and put it in gc */ -{ - int i; - setword all; - - all = ~(setword)BITMASK(n-1); - for (i = 0; i < n; ++i) - gc[i] = g[i] ^ all ^ bit[i]; -} - -/**************************************************************************/ - -static void -makeleveldata(void) -/* make the level data for each level */ -{ - long h; - int n,dmax,dmin; - long ncj; - leveldata *d; - xword *xcard,*xinv; - xword *xset,xw,tttn,nxsets; - xword cw; - xword i,j; - - for (n = 1; n < maxn; ++n) - { - dmax = n/2; - if (maxdeg < dmax) dmax = maxdeg; - dmin = mindeg - maxn + n + 1; - if (dmin < 0) dmin = 0; - ncj = 1; - nxsets = (dmin == 0 ? 1 : 0); - for (j = 1; j <= dmax; ++j) - { - ncj = (ncj * (n-j+1)) / j; - if (j >= dmin) nxsets += ncj; - } - tttn = 1L << n; - - d = &data[n]; - - d->xset = xset = (xword*) calloc(nxsets,sizeof(xword)); - d->xcard = xcard = (xword*) calloc(nxsets,sizeof(xword)); - d->xinv = xinv = (xword*) calloc(tttn,sizeof(xword)); - d->xorb = (xword*) calloc(nxsets,sizeof(xword)); - - if (xset==NULL || xcard==NULL || xinv==NULL || d->xorb==NULL) - { - fprintf(stderr, - ">E gentourng: calloc failed in makeleveldata()\n"); - exit(2); - } - - j = 0; - - for (i = 0;; ++i) - { - if ((h = XPOPCOUNT(i)) <= dmax && h >= dmin) - { - xset[j] = i; - xcard[j] = h; - ++j; - } - if (i == (xword)((1L<E gentourng: j=%u mxsets=%u\n", - j,(unsigned)nxsets); - exit(2); - } - - h = 1; - do - h = 3 * h + 1; - while (h < nxsets); - - do - { - for (i = h; i < nxsets; ++i) - { - xw = xset[i]; - cw = xcard[i]; - for (j = i; xcard[j-h] > cw || - (xcard[j-h] == cw && xset[j-h] > xw); ) - { - xset[j] = xset[j-h]; - xcard[j] = xcard[j-h]; - if ((j -= h) < h) break; - } - xset[j] = xw; - xcard[j] = cw; - } - h /= 3; - } - while (h > 0); - - for (i = 0; i < nxsets; ++i) xinv[xset[i]] = i; - - d->xstart[0] = 0; - for (i = 1; i < nxsets; ++i) - if (xcard[i] > xcard[i-1]) d->xstart[xcard[i]] = i; - d->xstart[xcard[nxsets-1]+1] = nxsets; - } -} - -/**************************************************************************/ - -static void -userautomproc(int count, int *p, int *orbits, - int numorbits, int stabvertex, int n) -/* form orbits on powerset of VG - called by nauty; operates on data[n] */ -{ - xword i,j1,j2,moved,pi,pxi; - xword lo,hi; - xword *xorb,*xinv,*xset,w; - - xorb = data[n].xorb; - xset = data[n].xset; - xinv = data[n].xinv; - lo = data[n].lo; - hi = data[n].hi; - - if (count == 1) /* first automorphism */ - for (i = lo; i < hi; ++i) xorb[i] = i; - - moved = 0; - for (i = 0; i < n; ++i) - if (p[i] != i) moved |= xbit[i]; - - for (i = lo; i < hi; ++i) - { - if ((w = xset[i] & moved) == 0) continue; - pxi = xset[i] & ~moved; - while (w) - { - j1 = XNEXTBIT(w); - w ^= xbit[j1]; - pxi |= xbit[p[j1]]; - } - pi = xinv[pxi]; - - j1 = xorb[i]; - while (xorb[j1] != j1) j1 = xorb[j1]; - j2 = xorb[pi]; - while (xorb[j2] != j2) j2 = xorb[j2]; - - if (j1 < j2) xorb[j2] = xorb[i] = xorb[pi] = j1; - else if (j1 > j2) xorb[j1] = xorb[i] = xorb[pi] = j2; - } -} - -/***************************************************************************** -* * -* refinex(g,lab,ptn,level,numcells,count,active,goodret,code,m,n) is a * -* custom version of refine() which can exit quickly if required. * -* * -* Only use at level==0. * -* goodret : whether to do an early return for code 1 * -* code := -1 for n-1 not max, 0 for maybe, 1 for definite * -* * -*****************************************************************************/ - -static void -refinex(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, boolean goodret, int *code, int m, int n) -{ - int i,c1,c2,labc1; - setword x,lact; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - set *gptr; - setword workset; - int workperm[MAXN]; - int bucket[MAXN+2]; - - if (n == 1) - { - *code = 1; - return; - } - - *code = 0; - lact = *active; - - split1 = -1; - while (*numcells < n && lact) - { - TAKEBIT(split1,lact); - - for (split2 = split1; ptn[split2] > 0; ++split2) {} - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],1); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT1(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = 0; - ++*numcells; - lact |= bit[c1]; - } - } - } - - else /* nontrivial splitting cell */ - { - workset = 0; - for (i = split1; i <= split2; ++i) workset |= bit[lab[i]]; - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - if ((x = workset & g[lab[i]]) != 0) cnt = POPCOUNT(x); - else cnt = 0; - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - if ((x = workset & g[lab[i]]) != 0) - cnt = POPCOUNT(x); - else - cnt = 0; - - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) continue; - c1 = cell1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - if (c1 != cell1) - { - lact |= bit[c1]; - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = 0; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) lab[i] = workperm[i]; - } - } - - if (ptn[n-2] == 0) - { - if (lab[n-1] == n-1) - { - *code = 1; - if (goodret) return; - } - else - { - *code = -1; - return; - } - } - else - { - i = n - 1; - while (TRUE) - { - if (lab[i] == n-1) break; - --i; - if (ptn[i] == 0) - { - *code = -1; - return; - } - } - } - } -} - -/**************************************************************************/ - -static void -makecanon(graph *g, graph *gcan, int n) -/* gcan := canonise(g) */ -{ - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - - options.getcanon = TRUE; - options.digraph = TRUE; - - nauty(g,lab,ptn,NULL,orbits,&options,&nauty_stats, - workspace,50,1,n,gcan); -} - -/**************************************************************************/ - -static boolean -accept1(graph *g, int n, xword x, graph *gx, int *deg, boolean *rigid) -/* decide if n in theta(g+x) - version for n+1 < maxn */ -{ - int i; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int count[MAXN]; - graph h[MAXN]; - int nx,numcells,code; - int i0,i1,degn; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - -#ifdef INSTRUMENT - ++a1calls; -#endif - - nx = n + 1; - for (i = 0; i < n; ++i) gx[i] = g[i]; - gx[n] = 0; - deg[n] = degn = XPOPCOUNT(x); - - for (i = 0; i < n; ++i) - { - if ((xbit[i] & x)) - gx[n] |= bit[i]; - else - { - gx[i] |= bit[n]; - ++deg[i]; - } - } - -#ifdef PREPRUNE - if (PREPRUNE(gx,n+1,maxn)) return FALSE; -#endif - - i0 = 0; - i1 = n; - for (i = 0; i < nx; ++i) - { - if (deg[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - ptn[n] = 0; - if (i0 == 0) - { - numcells = 1; - active[0] = bit[0]; - } - else - { - numcells = 2; - active[0] = bit[0] | bit[i1+1]; - ptn[i1] = 0; - } - refinex(gx,lab,ptn,0,&numcells,count,active,FALSE,&code,1,nx); - - if (code < 0) return FALSE; - - if (numcells == nx) - { - *rigid = TRUE; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - - options.getcanon = TRUE; - options.digraph = TRUE; - options.defaultptn = FALSE; - options.userautomproc = userautomproc; - /* - if (!regular || nx != maxn-1) options.userautomproc = userautomproc; - else options.userautomproc = NULL; - */ - - active[0] = 0; -#ifdef INSTRUMENT - ++a1nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,h); - - if (orbits[lab[n]] == orbits[n]) - { - *rigid = stats.numorbits == nx; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static boolean -hitinvar(graph *g, int *invar, int n) -/* make hitting invariant - * return FALSE if n-1 not maximal else return TRUE */ -{ - setword x,y,z; - int inv,i,v,d; - - for (v = n-1; v >= 0; --v) - { - inv = 0; - x = y = g[v]; - while (y) - { - TAKEBIT(i,y); - z = x & g[i]; - d = POPCOUNT(z); - if (d > inv) inv = d; - } - - invar[v] = inv; - if (v < n-1 && inv > invar[n-1]) return FALSE; - } - return TRUE; -} - -/**************************************************************************/ - -static boolean -accept2(graph *g, int n, xword x, graph *gx, int *deg, boolean nuniq) -/* decide if n in theta(g+x) -- version for n+1 == maxn */ -{ - int i; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int degx[MAXN],invar[MAXN]; - setword vmax,gv,gxn; - int qn,qv; - int count[MAXN]; - int nx,numcells,code; - int degn,i0,i1,j,j0,j1; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - boolean cheapacc; - -#ifdef INSTRUMENT - ++a2calls; - if (nuniq) ++a2uniq; -#endif - nx = n + 1; - gxn = 0; - - for (i = 0; i < n; ++i) - { - if ((xbit[i] & x)) - { - gxn |= bit[i]; - gx[i] = g[i]; - degx[i] = deg[i]; - } - else - { - gx[i] = g[i] | bit[n]; - degx[i] = deg[i] + 1; - } - } - gx[n] = gxn; - degx[n] = degn = XPOPCOUNT(x); - -#ifdef PREPRUNE - if (PREPRUNE(gx,n+1,maxn)) return FALSE; -#endif - - if (nuniq) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - - i0 = 0; - i1 = n; - for (i = 0; i < nx; ++i) - { - if (degx[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - ptn[n] = 0; - if (i0 == 0) - { - numcells = 1; - active[0] = bit[0]; - if (!hitinvar(gx,invar,nx)) return FALSE; - qn = invar[n]; - j0 = 0; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - qv = invar[j]; - if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > 0) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - else - { - numcells = 2; - ptn[i1] = 0; - active[0] = bit[0] | bit[i1+1]; - - vmax = 0; - for (i = i1+1; i < nx; ++i) vmax |= bit[lab[i]]; - - gv = gx[n] & vmax; - qn = POPCOUNT(gv); - - j0 = i1+1; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - gv = gx[j] & vmax; - qv = POPCOUNT(gv); - if (qv > qn) - return FALSE; - else if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > i1+1) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - - refinex(gx,lab,ptn,0,&numcells,count,active,TRUE,&code,1,nx); - - if (code < 0) return FALSE; - - cheapacc = FALSE; - if (code > 0) cheapacc = TRUE; - - if (cheapacc) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - - options.getcanon = TRUE; - options.digraph = TRUE; - options.defaultptn = FALSE; - - active[0] = 0; -#ifdef INSTRUMENT - ++a2nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,gcan); - - if (orbits[lab[n]] == orbits[n]) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static void -genextend(graph *g, int n, int *deg, boolean rigid) -/* extend from n to n+1 -- version for general graphs */ -{ - xword x,dlow,dhigh,dcrit; - xword *xset,*xcard,*xorb; - xword i,imin,imax; - int nx,xc,j,dmax; - int xlb,xub,xlbx,xubx; - graph gx[MAXN]; - int degx[MAXN]; - boolean rigidx; - boolean subconnec; - -#ifdef INSTRUMENT - boolean haschild; - - haschild = FALSE; - if (rigid) ++rigidnodes[n]; -#endif - nx = n + 1; - ADDBIG(nodes[n],1); - - if (regular && nx == maxn) - { - x = 0; - for (i = 0; i < n; ++i) - if (deg[i] == maxdeg) x |= xbit[i]; - - if (accept2(g,n,x,gx,deg,FALSE)) - { -#ifdef PRUNE - if (!PRUNE(gx,nx,maxn)) -#endif - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - ADDBIG(nout,1); - (*outproc)(outfile,canonise ? gcan : gx,nx); - } - } -#ifdef INSTRUMENT - if (haschild) ++fertilenodes[n]; -#endif - return; - } - - dmax = deg[n-1]; - - xlb = mindeg + n + 1 - maxn; - if (0 > xlb) xlb = 0; - xub = dmax+1; - if (n/2 < xub) xub = n/2; - if (maxdeg < xub) xub = maxdeg; - - if (xlb > xub) return; - - dlow = dcrit = dhigh = 0; - for (i = 0; i < n; ++i) - { - if (deg[i] == dmax) dlow |= xbit[i]; - if (deg[i] == maxdeg) dhigh |= xbit[i]; - if (deg[i] == mindeg + n - maxn) dcrit |= xbit[i]; - } - - if (XPOPCOUNT(dhigh) > xlb) xlb = XPOPCOUNT(dhigh); - if (n-XPOPCOUNT(dcrit) < xub) xub = n - XPOPCOUNT(dcrit); - if (xub == dmax+1 && XPOPCOUNT(dlow)+dmax >= n) --xub; - if (xlb > xub) return; - -#ifdef PRUNE - if (PRUNE(g,n,maxn)) return; -#endif - - imin = data[n].xstart[xlb]; - imax = data[n].xstart[xub+1]; - xset = data[n].xset; - xcard = data[n].xcard; - xorb = data[n].xorb; - - if (nx == maxn) - { - subconnec = connec && isstrong(g,n); - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if (xc == dmax+1 && (x & dlow) != 0) continue; - if ((dhigh & ~x) != 0) continue; - if ((dcrit & x) != 0) continue; - - if (accept2(g,n,x,gx,deg, - xc < dmax || (xc == dmax && (x & dlow) == 0))) - if (!connec || (subconnec && x != 0) || isstrong(gx,nx)) - { -#ifdef PRUNE - if (!PRUNE(gx,nx,maxn)) -#endif - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - ADDBIG(nout,1); - (*outproc)(outfile,canonise ? gcan : gx,nx); - } - } - } - } - else - { - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if (xc == dmax+1 && (x & dlow) != 0) continue; - if ((dhigh & ~x) != 0) continue; - if ((dcrit & x) != 0) continue; - if (nx == splitlevel) - { - if (odometer-- != 0) continue; - odometer = mod - 1; - } - - for (j = 0; j < n; ++j) degx[j] = deg[j]; - xlbx = mindeg+nx+1-maxn; - if (xlbx < 0) xlbx = 0; - xubx = xc + 1; - if (maxdeg < xubx) xubx = maxdeg; - if (nx/2 < xubx) xubx = nx/2; - if (xlbx > xubx) continue; - - data[nx].lo = data[nx].xstart[xlbx]; - data[nx].hi = data[nx].xstart[xubx+1]; - if (accept1(g,n,x,gx,degx,&rigidx)) - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - genextend(gx,nx,degx,rigidx); - } - } - } - - if (n == splitlevel-1 && n >= min_splitlevel - && ISASBIG(nodes[n],multiplicity)) - --splitlevel; -#ifdef INSTRUMENT - if (haschild) ++fertilenodes[n]; -#endif -} - -/**************************************************************************/ -/**************************************************************************/ - -int -#ifdef GENG_MAIN -GENG_MAIN(int argc, char *argv[]) -#else -main(int argc, char *argv[]) -#endif -{ - char *arg; - boolean badargs,gotd,gotD,gotf,gotmr; - boolean secret,connec1; - char *outfilename,sw; - int i,j,argnum; - graph g[1]; - int deg[1]; - int splitlevinc; - xword testxword; - double t1,t2; - char msg[201]; - - HELP; - nauty_check(WORDSIZE,1,MAXN,NAUTYVERSIONID); - - testxword = (xword)(-1); - if (MAXN > 32 || MAXN > WORDSIZE || MAXN > 8*sizeof(xword) - || (MAXN == 8*sizeof(xword) && testxword < 0)) - { - fprintf(stderr,"gentourng: incompatible MAXN, WORDSIZE, or xword\n"); - fprintf(stderr,"--See notes in program source\n"); - exit(1); - } - - badargs = FALSE; - graph6 = FALSE; - sparse6 = FALSE; - nooutput = FALSE; - canonise = FALSE; - header = FALSE; - outfilename = NULL; - secret = FALSE; - connec1 = FALSE; - - maxdeg = MAXN; - mindeg = 0; - splitlevinc = 0; - - gotd = gotD = gotf = gotmr = FALSE; - - argnum = 0; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('u',nooutput) - else SWBOOLEAN('g',graph6) - else SWBOOLEAN('s',sparse6) - else SWBOOLEAN('l',canonise) - else SWBOOLEAN('h',header) - else SWBOOLEAN('q',quiet) - else SWBOOLEAN('c',connec1) - else SWBOOLEAN('$',secret) - else SWINT('d',gotd,mindeg,"gentourng -d") - else SWINT('D',gotD,maxdeg,"gentourng -D") -#ifdef PLUGIN_SWITCHES -PLUGIN_SWITCHES -#endif - else badargs = TRUE; - } - } - else if (arg[0] == '-' && arg[1] == '\0') - gotf = TRUE; - else - { - if (argnum == 0) - { - if (sscanf(arg,"%d",&maxn) != 1) badargs = TRUE; - ++argnum; - } - else if (gotf) - badargs = TRUE; - else - { - if (!gotmr) - { - if (sscanf(arg,"%d/%d",&res,&mod) == 2) - { - gotmr = TRUE; - continue; - } - } - if (!gotf) - { - outfilename = arg; - gotf = TRUE; - continue; - } - } - } - } - - if (argnum == 0) - badargs = TRUE; - else if (maxn < 1 || maxn > MAXN) - { - fprintf(stderr,">E gentourng: n must be in the range 1..%d\n",MAXN); - badargs = TRUE; - } - - if (!gotmr) - { - mod = 1; - res = 0; - } - - if (connec1) connec = 1; - else connec = 0; - - if (maxdeg >= maxn) maxdeg = maxn - 1; - if (mindeg < 0) mindeg = 0; - - if (!badargs && - (maxdeg < mindeg || 2*maxdeg < maxn-1 || 2*mindeg > maxn-1)) - { - fprintf(stderr,">E gentourng: impossible degree bounds\n"); - badargs = TRUE; - } - - if (connec && mindeg < 1 && maxn > 1) mindeg = 1; - if (connec && maxdeg == maxn-1 && maxn > 1) maxdeg = maxn - 2; - - if (!badargs && (res < 0 || res >= mod)) - { - fprintf(stderr,">E gentourng: must have 0 <= res < mod\n"); - badargs = TRUE; - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if ((graph6!=0) + (sparse6!=0) + (nooutput!=0) > 1) - gt_abort(">E gentourng: -uyngs are incompatible\n"); - -#ifdef OUTPROC - outproc = OUTPROC; -#else - if (nooutput) outproc = nullwrite; - else if (sparse6) outproc = writes6x; - else if (graph6) outproc = writeg6x; - else outproc = write_ascii; -#endif - -#ifdef PLUGIN_INIT -PLUGIN_INIT -#endif - - for (i = 0; i < maxn; ++i) ZEROBIG(nodes[i]); - - if (nooutput) - outfile = stdout; - else if (!gotf || outfilename == NULL) - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr, - ">E gentourng: can't open %s for writing\n",outfilename); - gt_abort(NULL); - } - - multiplicity = PRUNEMULT * mod; - - if (!quiet) - { - msg[0] = '\0'; - if (strlen(argv[0]) > 75) - fprintf(stderr,">A %s",argv[0]); - else - CATMSG1(">A %s",argv[0]); - - CATMSG2(" -%s%s",connec1 ? "c" : "",canonise ? "l" : ""); - /* - if (mod > 1) - CATMSG2("X%dx%d",splitlevinc,multiplicity); - */ - CATMSG3("d%dD%d n=%d",mindeg,maxdeg,maxn); - if (mod > 1) CATMSG2(" class=%d/%d",res,mod); - CATMSG0("\n"); - fputs(msg,stderr); - fflush(stderr); - } - - g[0] = 0; - deg[0] = 0; - - t1 = CPUTIME; - - if (header) - { - if (sparse6) - { - writeline(outfile,SPARSE6_HEADER); - fflush(outfile); - } - else if (!nooutput) - { - writeline(outfile,GRAPH6_HEADER); - fflush(outfile); - } - } - - ZEROBIG(nout); - - if (maxn == 1) - { - if (res == 0) - { - ADDBIG(nout,1); - (*outproc)(outfile,g,1); - } - } - else - { - makeleveldata(); - - if (maxn >= 14 && mod > 1) splitlevel = maxn - 4; - else if (maxn >= 6 && mod > 1) splitlevel = maxn - 3; - else splitlevel = -1; - - splitlevel += splitlevinc; - if (splitlevel > maxn - 1) splitlevel = maxn - 1; - if (splitlevel < 3) splitlevel = -1; - - min_splitlevel = 6; - odometer = secret ? -1 : res; - regular = mindeg == maxdeg; - if (regular) connec = FALSE; /* All reg tourns are strong! */ - - genextend(g,1,deg,TRUE); - } - t2 = CPUTIME; - -#ifdef INSTRUMENT - fprintf(stderr,"\n>N node counts\n"); - for (i = 1; i < maxn; ++i) - { - fprintf(stderr," level %2d: \n",i); - PRINTBIG(stderr,nodes[i]); - fprintf(stderr," (%lu rigid, %lu fertile)\n", - rigidnodes[i],fertilenodes[i]); - } - fprintf(stderr,">A1 %lu calls to accept1, %lu nauty, %lu succeeded\n", - a1calls,a1nauty,a1succs); - fprintf(stderr, - ">A2 %lu calls to accept2, %lu nuniq, %lu nauty, %lu succeeded\n", - a2calls,a2uniq,a2nauty,a2succs); - fprintf(stderr,"\n"); -#endif - -#ifdef SUMMARY - SUMMARY(nout,t2-t1); -#endif - - if (!quiet) - { - fprintf(stderr,">Z "); - PRINTBIG(stderr,nout); - fprintf(stderr," graphs generated in %3.2f sec\n",t2-t1); - } - -#ifdef GENG_MAIN - for (i = 1; i < maxn; ++i) - { - free(data[i].xorb); - free(data[i].xset); - free(data[i].xinv); - free(data[i].xcard); - } - return 0; -#else - exit(0); -#endif -} diff --git a/tools/nauty25r9_mac/gtnauty.c b/tools/nauty25r9_mac/gtnauty.c deleted file mode 100644 index 96be1eb..0000000 --- a/tools/nauty25r9_mac/gtnauty.c +++ /dev/null @@ -1,861 +0,0 @@ -/* gtnauty.c : nauty-related routines for gtools. - - Jan 15, 2001 : Increased graph order limit from 2^16-1 to 2^22-1. - Aug 9, 2001 : Added fgroup_inv() and fcanonise_inv() - Sep 15, 2004 : Completed prototypes - Oct 16, 2004 : DEAFULTOPTIONS_GRAPH - Nov 17, 2005 : Added fcanonise_inv_sg() - May 11, 2010 : use sorttemplates.c - -**************************************************************************/ - -#include "gtools.h" /* which includes naututil.h, nausparse.h, stdio.h */ - -static boolean issymm; -static set *g0; -static int gm; -static int fuzz2[] = {006532,070236,035523,062437}; -#define FUZZ2(x) ((x) ^ fuzz2[(x)&3]) - -int gt_numorbits; - -#ifdef REFINE -void REFINE(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -#endif - -/**************************************************************************/ - -#define SORT_OF_SORT 1 -#define SORT_NAME lsort -#define SORT_TYPE1 long -#include "sorttemplates.c" -/* Creates static void lsort(long *x, int n) */ - -/**************************************************************************/ - -void -fcanonise(graph *g, int m, int n, graph *h, char *fmt, boolean digraph) -/* canonise g under format fmt; result in h. - fmt is either NULL (for no vertex classification) or is a string - with char-valued colours for the vertices. If it ends early, it - is assumed to continue with the colour 'z' indefinitely. */ -{ -#if MAXN - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - long x[MAXN]; - int count[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - int i; - boolean endfmt; - int numcells,code; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E fcanonise: m or n too large\n"); - ABORT(">E fcanonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"fcanonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"fcanonise"); - DYNALLOC1(int,orbits,orbits_sz,n,"fcanonise"); - DYNALLOC1(long,x,x_sz,n,"fcanonise"); - DYNALLOC1(int,count,count_sz,n,"fcanonise"); - DYNALLOC1(set,active,active_sz,m,"fcanonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"fcanonise"); -#endif - - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - - if (fmt != NULL) - { - endfmt = FALSE; - for (i = 0; i < n; ++i) - { - if (!endfmt && fmt[i] != '\0') - x[i] = ((long)fmt[i] << 22) | i; - else - { - endfmt = TRUE; - x[i] = ((long)'z' << 22) | i; - } - } - lsort(x,n); - - for (i = 0; i < n; ++i) - { - lab[i] = x[i] & 0x3fffffL; - if (i == n-1) - ptn[i] = 0; - else if ((x[i+1] >> 22) != (x[i] >> 22)) - { - ++numcells; - ADDELEMENT(active,i+1); - ptn[i] = 0; - } - else - ptn[i] = 1; - } - } - else - { - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n-1] = 0; - } - - if (m == 1) - refine1(g,lab,ptn,0,&numcells,count,active,&code,1,n); - else - refine(g,lab,ptn,0,&numcells,count,active,&code,m,n); - - if (numcells == n || (numcells == n-1 && !digraph)) - { - for (i = 0; i < n; ++i) count[i] = lab[i]; - updatecan(g,h,count,0,m,n); - gt_numorbits = numcells; - } - else - { - options.getcanon = TRUE; - options.defaultptn = FALSE; - options.digraph = digraph; -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - EMPTYSET(active,m); - nauty(g,lab,ptn,active,orbits,&options,&stats, - workspace,4*m,m,n,h); - gt_numorbits = stats.numorbits; - } -} - -/**************************************************************************/ - -void -fcanonise_inv(graph *g, int m, int n, graph *h, char *fmt, - void (*invarproc)(graph*,int*,int*,int,int,int,int*,int, - boolean,int,int), int mininvarlevel, int maxinvarlevel, - int invararg, boolean digraph) -/* canonise g under format fmt; result in h. - fmt is either NULL (for no vertex classification) or is a string - with char-valued colours for the vertices. If it ends early, it - is assumed to continue with the colour 'z' indefinitely. - This is like fcanonise() except that a invariant and its arguments - can be specified. */ -{ -#if MAXN - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - long x[MAXN]; - int count[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - int i; - boolean endfmt; - int numcells,code; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E fcanonise: m or n too large\n"); - ABORT(">E fcanonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"fcanonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"fcanonise"); - DYNALLOC1(int,orbits,orbits_sz,n,"fcanonise"); - DYNALLOC1(long,x,x_sz,n,"fcanonise"); - DYNALLOC1(int,count,count_sz,n,"fcanonise"); - DYNALLOC1(set,active,active_sz,m,"fcanonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"fcanonise"); -#endif - - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - - if (fmt != NULL) - { - endfmt = FALSE; - for (i = 0; i < n; ++i) - { - if (!endfmt && fmt[i] != '\0') - x[i] = ((long)fmt[i] << 22) | i; - else - { - endfmt = TRUE; - x[i] = ((long)'z' << 22) | i; - } - } - lsort(x,n); - - for (i = 0; i < n; ++i) - { - lab[i] = x[i] & 0x3fffffL; - if (i == n-1) - ptn[i] = 0; - else if ((x[i+1] >> 22) != (x[i] >> 22)) - { - ++numcells; - ADDELEMENT(active,i+1); - ptn[i] = 0; - } - else - ptn[i] = 1; - } - } - else - { - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n-1] = 0; - } - - if (m == 1) - refine1(g,lab,ptn,0,&numcells,count,active,&code,1,n); - else - refine(g,lab,ptn,0,&numcells,count,active,&code,m,n); - - if (numcells == n || (!digraph && numcells >= n-1)) - { - for (i = 0; i < n; ++i) count[i] = lab[i]; - updatecan(g,h,count,0,m,n); - gt_numorbits = numcells; - } - else - { - options.getcanon = TRUE; - options.digraph = digraph; - options.defaultptn = FALSE; - if (invarproc) - { - options.invarproc = invarproc; - options.mininvarlevel = mininvarlevel; - options.maxinvarlevel = maxinvarlevel; - options.invararg = invararg; - } -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - EMPTYSET(active,m); - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,4*m,m,n,h); - gt_numorbits = stats.numorbits; - } -} - -/**************************************************************************/ - -void -fcanonise_inv_sg(sparsegraph *g, int m, int n, sparsegraph *h, char *fmt, - void (*invarproc)(graph*,int*,int*,int,int,int,int*,int, - boolean,int,int), int mininvarlevel, int maxinvarlevel, - int invararg, boolean digraph) -/* canonise g under format fmt; result in h. - fmt is either NULL (for no vertex classification) or is a string - with char-valued colours for the vertices. If it ends early, it - is assumed to continue with the colour 'z' indefinitely. - This is like fcanonise() except that a invariant and its arguments - can be specified. Version for sparse graphs. */ -{ -#if MAXN - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - long x[MAXN]; - int count[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - int i; - boolean endfmt; - int numcells,code; - statsblk stats; - static DEFAULTOPTIONS_SPARSEGRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E fcanonise: m or n too large\n"); - ABORT(">E fcanonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"fcanonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"fcanonise"); - DYNALLOC1(int,orbits,orbits_sz,n,"fcanonise"); - DYNALLOC1(long,x,x_sz,n,"fcanonise"); - DYNALLOC1(int,count,count_sz,n,"fcanonise"); - DYNALLOC1(set,active,active_sz,m,"fcanonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"fcanonise"); -#endif - - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - - if (fmt != NULL) - { - endfmt = FALSE; - for (i = 0; i < n; ++i) - { - if (!endfmt && fmt[i] != '\0') - x[i] = ((long)fmt[i] << 22) | i; - else - { - endfmt = TRUE; - x[i] = ((long)'z' << 22) | i; - } - } - lsort(x,n); - - for (i = 0; i < n; ++i) - { - lab[i] = x[i] & 0x3fffffL; - if (i == n-1) - ptn[i] = 0; - else if ((x[i+1] >> 22) != (x[i] >> 22)) - { - ++numcells; - ADDELEMENT(active,i+1); - ptn[i] = 0; - } - else - ptn[i] = 1; - } - } - else - { - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n-1] = 0; - } - - refine_sg((graph*)g,lab,ptn,0,&numcells,count,active,&code,1,n); - - if (numcells == n || (!digraph && numcells == n-1)) - { - for (i = 0; i < n; ++i) count[i] = lab[i]; - updatecan_sg((graph*)g,(graph*)h,count,0,m,n); - gt_numorbits = numcells; - } - else - { - options.getcanon = TRUE; - options.digraph = digraph; - options.defaultptn = FALSE; - if (invarproc) - { - options.invarproc = invarproc; - options.mininvarlevel = mininvarlevel; - options.maxinvarlevel = maxinvarlevel; - options.invararg = invararg; - } -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - EMPTYSET(active,m); - nauty((graph*)g,lab,ptn,active,orbits,&options,&stats, - workspace,4*m,m,n,(graph*)h); - gt_numorbits = stats.numorbits; - } -} - -/**************************************************************************/ - -void -fgroup(graph *g, int m, int n, char *fmt, int *orbits, int *numorbits) -/* Find the orbits of undirected graph g stabilised by format fmt. - The orbits are put into orbits[] and the number of them into *numorbits - fmt is either NULL (for no vertex classification) or is a string - with char-valued colours for the vertices. If it ends early, it - is assumed to continue with the colour 'z' indefinitely. */ -{ -#if MAXN - int lab[MAXN],ptn[MAXN]; - long x[MAXN]; - int count[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - int i,j; - int orbrep; - boolean endfmt; - int numcells,code; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E fcanonise: m or n too large\n"); - ABORT(">E fcanonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"fcanonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"fcanonise"); - DYNALLOC1(long,x,x_sz,n,"fcanonise"); - DYNALLOC1(int,count,count_sz,n,"fcanonise"); - DYNALLOC1(set,active,active_sz,m,"fcanonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"fcanonise"); -#endif - - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - - if (fmt != NULL) - { - endfmt = FALSE; - for (i = 0; i < n; ++i) - { - if (!endfmt && fmt[i] != '\0') - x[i] = ((long)fmt[i] << 22) | i; - else - { - endfmt = TRUE; - x[i] = ((long)'z' << 22) | i; - } - } - lsort(x,n); - - for (i = 0; i < n; ++i) - { - lab[i] = x[i] & 0xffff; - if (i == n-1) ptn[i] = 0; - else if ((x[i+1] >> 22) != (x[i] >> 22)) - { - ++numcells; - ADDELEMENT(active,i+1); - ptn[i] = 0; - } - else - ptn[i] = 1; - } - } - else - { - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n-1] = 0; - } - - if (m == 1) - refine1(g,lab,ptn,0,&numcells,count,active,&code,1,n); - else - refine(g,lab,ptn,0,&numcells,count,active,&code,m,n); - - if (cheapautom(ptn,0,FALSE,n)) - { - for (i = 0; i < n; ) - { - if (ptn[i] == 0) - { - orbits[lab[i]] = lab[i]; - ++i; - } - else - { - orbrep = n; - j = i; - do - { - if (lab[j] < orbrep) orbrep = lab[j]; - } while (ptn[j++] != 0); - - for (; i < j; ++i) orbits[lab[i]] = orbrep; - } - } - *numorbits = gt_numorbits = numcells; - } - else - { - options.getcanon = FALSE; - options.defaultptn = FALSE; -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - EMPTYSET(active,m); - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,4*m,m,n,NULL); - *numorbits = gt_numorbits = stats.numorbits; - } -} - -/**************************************************************************/ - -void -fgroup_inv(graph *g, int m, int n, char *fmt, int *orbits, int *numorbits, - void (*invarproc)(graph*,int*,int*,int,int,int,int*,int, - boolean,int,int), int mininvarlevel, int maxinvarlevel, int invararg) -/* Find the orbits of undirected graph g stabilised by format fmt. - The orbits are put into orbits[] and the number of them into *numorbits - fmt is either NULL (for no vertex classification) or is a string - with char-valued colours for the vertices. If it ends early, it - is assumed to continue with the colour 'z' indefinitely. - This is like fgroup() except that a invariant and its arguments - can be specified. */ -{ -#if MAXN - int lab[MAXN],ptn[MAXN]; - long x[MAXN]; - int count[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - int i,j; - int orbrep; - boolean endfmt; - int numcells,code; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E fcanonise: m or n too large\n"); - ABORT(">E fcanonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"fcanonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"fcanonise"); - DYNALLOC1(long,x,x_sz,n,"fcanonise"); - DYNALLOC1(int,count,count_sz,n,"fcanonise"); - DYNALLOC1(set,active,active_sz,m,"fcanonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"fcanonise"); -#endif - - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - - if (fmt != NULL) - { - endfmt = FALSE; - for (i = 0; i < n; ++i) - { - if (!endfmt && fmt[i] != '\0') - x[i] = ((long)fmt[i] << 22) | i; - else - { - endfmt = TRUE; - x[i] = ((long)'z' << 22) | i; - } - } - lsort(x,n); - - for (i = 0; i < n; ++i) - { - lab[i] = x[i] & 0xffff; - if (i == n-1) ptn[i] = 0; - else if ((x[i+1] >> 22) != (x[i] >> 22)) - { - ++numcells; - ADDELEMENT(active,i+1); - ptn[i] = 0; - } - else - ptn[i] = 1; - } - } - else - { - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n-1] = 0; - } - - if (m == 1) - refine1(g,lab,ptn,0,&numcells,count,active,&code,1,n); - else - refine(g,lab,ptn,0,&numcells,count,active,&code,m,n); - - if (cheapautom(ptn,0,FALSE,n)) - { - for (i = 0; i < n; ) - { - if (ptn[i] == 0) - { - orbits[lab[i]] = lab[i]; - ++i; - } - else - { - orbrep = n; - j = i; - do - { - if (lab[j] < orbrep) orbrep = lab[j]; - } while (ptn[j++] != 0); - - for (; i < j; ++i) orbits[lab[i]] = orbrep; - } - } - *numorbits = gt_numorbits = numcells; - } - else - { - options.getcanon = FALSE; - options.defaultptn = FALSE; - if (invarproc) - { - options.invarproc = invarproc; - options.mininvarlevel = mininvarlevel; - options.maxinvarlevel = maxinvarlevel; - options.invararg = invararg; - } -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - EMPTYSET(active,m); - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,4*m,m,n,NULL); - *numorbits = gt_numorbits = stats.numorbits; - } -} - -/**************************************************************************/ - -static void -userlevel(int *lab, int *ptn, int level, int *orbits, statsblk *stats, - int tv, int index, int tcellsize, int numcells, int cc, int n) -{ - int i0,i; - - if (level != 2) return; - - issymm = TRUE; - - i0 = nextelement(g0,gm,-1); - if (i0 >= 0) - for (i = i0; (i = nextelement(g0,gm,i)) >= 0;) - if (orbits[i] != i0) - { - issymm = FALSE; - return; - } -} - -/*******************************************************************/ - -/* istransitive(g,m,n,h) - - g is an input graph with - m,n of standard meaning. - h is a place to put an output graph. - - If g is transitive, return 1 or 2 and put a canonically labelled - version of g into h. The value is 2 for symmetric graphs, - and 1 for other transitive graphs. - If g is not transitive, return 0. In that case h may or - may not have something in it. -*/ -int -istransitive(graph *g, int m, int n, graph *h) -{ - int i,inv; - set *gw; - short wt; - int d,inv0,v,w; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); -#if MAXN - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - long x[MAXN]; - int count[MAXN]; - setword workspace[4*MAXM]; - set workset[MAXM]; - set sofar[MAXM],frontier[MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(setword,workspace,workspace_sz); - DYNALLSTAT(set,workset,workset_sz); - DYNALLSTAT(set,sofar,sofar_sz); - DYNALLSTAT(set,frontier,frontier_sz); -#endif - -#if MAXN - if (m > MAXM || n > MAXN) - { - fprintf(stderr, - ">E istransitive: bad input parameters (n=%d m=%d)\n",n,m); - exit(1); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"istransitive"); - DYNALLOC1(int,ptn,ptn_sz,n,"istransitive"); - DYNALLOC1(int,orbits,orbits_sz,n,"istransitive"); - DYNALLOC1(long,x,x_sz,n,"istransitive"); - DYNALLOC1(int,count,count_sz,n,"istransitive"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"istransitive"); - DYNALLOC1(set,workset,workset_sz,m,"istransitive"); - DYNALLOC1(set,sofar,sofar_sz,m,"istransitive"); - DYNALLOC1(set,frontier,frontier_sz,m,"istransitive"); -#endif - - for (v = 0; v < n; ++v) - { - inv = 0; - EMPTYSET(sofar,m); - ADDELEMENT(sofar,v); - EMPTYSET(frontier,m); - ADDELEMENT(frontier,v); - for (d = 1; d < n; ++d) - { - EMPTYSET(workset,m); - wt = 0; - for (w = -1; (w = nextelement(frontier,m,w)) >= 0;) - { - ++wt; - gw = GRAPHROW(g,w,m); - for (i = m; --i >= 0;) workset[i] |= gw[i]; - } - if (wt == 0) break; - wt += 0x73 ^ d; - wt = FUZZ2(wt); - inv += wt; - for (i = m; --i >= 0;) - { - frontier[i] = workset[i] & ~sofar[i]; - sofar[i] |= frontier[i]; - } - } - if (v == 0) inv0 = inv; - else if (inv != inv0) return 0; - } - - options.getcanon = TRUE; - options.userlevelproc = userlevel; -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - issymm = TRUE; - g0 = (set*) g; - gm = m; - - nauty(g,lab,ptn,NULL,orbits,&options,&stats,workspace,4*m,m,n,h); - - if (stats.numorbits != 1) return 0; - else if (!issymm) return 1; - else return 2; -} - -/**************************************************************************/ - -void -tg_canonise(graph *g, graph *h, int m, int n) -/* Canonise vertex-transitive graph */ -{ - int i; -#if MAXN - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E tg_canonise: m or n too large\n"); - ABORT(">E tg_canonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"tg_canonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"tg_canonise"); - DYNALLOC1(int,orbits,orbits_sz,n,"tg_canonise"); - DYNALLOC1(set,active,active_sz,m,"tg_canonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"tg_canonise"); -#endif - - options.getcanon = TRUE; - options.defaultptn = FALSE; -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[0] = ptn[n-1] = 0; - - EMPTYSET(active,m); - ADDELEMENT(active,0); - - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,4*m,m,n,h); -} diff --git a/tools/nauty25r9_mac/gtnauty.o b/tools/nauty25r9_mac/gtnauty.o deleted file mode 100644 index b5504d5873b504439382a30b6e90dfbcebacc20a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28772 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 diff --git a/tools/nauty25r9_mac/gtools-h.in b/tools/nauty25r9_mac/gtools-h.in deleted file mode 100644 index c3117ff..0000000 --- a/tools/nauty25r9_mac/gtools-h.in +++ /dev/null @@ -1,240 +0,0 @@ -/***************************************************************************** -* This is the main header file for gtools. nauty version 2.5. * -* Subject to the copyright notice in nauty.h. * -* @configure_input@ -*****************************************************************************/ - -/* The parts between the ==== lines are modified by configure when -creating gtools.h out of gtools-h.in. If configure is not being -used, it is necessary to check they are correct. -====================================================================*/ - -#ifndef _GTOOLS_H_ /* only process this file once */ -#define _GTOOLS_H_ - -#define HAVE_ERRNO_H @header_errno_h@ /* exists */ -#define HAVE_PERROR @have_perror@ /* perror() exists */ -#define HAVE_PIPE @have_pipe@ /* pipe() exists */ -#define HAVE_WAIT @have_wait@ /* wait() exists */ -#define HAVE_WAIT_H @header_sys_wait_h@ /* exists */ -#define HAVE_POPEN @have_popen@ /* popen() and pclose() exist */ -#define POPEN_DEC @popen_dec@ /* popen() is declared in stdio.h */ -#define FTELL_DEC @ftell_dec@ /* ftell() is declared in stdio.h */ -#define FDOPEN_DEC @fdopen_dec@ /* fdopen() is declared in stdio.h */ -#define SORTPROG "@sort_prog@" /* name of sort program */ -#define SORT_NEWKEY @sort_newparams_ok@ /* if -k is supported */ -#define HAVE_PID_T @have_pid_t@ /* pid_t is defined */ -#define PUTENV_DEC @putenv_dec@ /* putenv() is declared in stdlib.h */ -#define SETENV_DEC @setenv_dec@ /* setenv() is declared in stdlib.h */ -#define HAVE_PUTENV @have_putenv@ /* putenv() exists */ -#define HAVE_SETENV @have_setenv@ /* setenv() exists */ -#define HAVE_PTHREADS @have_pthread@ /* Posix threads exist */ -#define HAVE_PTHREAD_H @header_pthread_h@ /* exists */ -#define HAVE_FSEEKO @have_fseeko@ /* fseeko() and ftello() exist */ -#define HAVE_SIGACTION @have_sigaction@ /* sigaction() exists */ -#define HAVE_SIGPROCMASK @have_sigprocmask@ /* sigprocmask() exists */ - -/* @edit_msg@ */ - -/*==================================================================*/ - -#ifndef MAXN -#define MAXN 0 -#endif - -#define SIZELEN(n) ((n)<=SMALLN?1:((n)<=SMALLISHN?4:8)) - /* length of size code in bytes */ -#define G6LEN(n) (SIZELEN(n) \ - + ((size_t)(n)/12)*((size_t)(n)-1) + (((size_t)(n)%12)*((size_t)(n)-1)+11)/12) - /* exactly graph6 string length excluding \n\0 - This twisted expression works up to n=227023 in 32-bit arithmetic - and for larger n if size_t has 64 bits. */ - -#include "naututil.h" /* which includes stdio.h */ -#include "nausparse.h" - -#if HAVE_ERRNO_H -#include -#else -extern int errno; -#endif - -#if HAVE_WAIT_H -#include -#endif - -#if HAVE_SIGACTION -#include -#endif - -#if HAVE_PERROR -#define ABORT(msg) do {if (errno != 0) perror(msg); exit(1);} while(0) -#else -#define ABORT(msg) do {exit(1);} while(0) -#endif - -#if PUTENV_DEC && HAVE_PUTENV -#define SET_C_COLLATION putenv("LC_COLLATE=C") -#elif SETENV_DEC && HAVE_SETENV -#define SET_C_COLLATION setenv("LC_COLLATE","C",1) -#elif HAVE_PUTENV -int putenv(char*); -#define SET_C_COLLATION putenv("LC_COLLATE=C") -#elif HAVE_SETENV -int setenv(const char*,const char*,int); -#define SET_C_COLLATION setenv("LC_COLLATE","C",1) -#else -#define SET_C_COLLATION -#endif - -#if HAS_STDIO_UNLOCK && !defined(NAUTY_IN_MAGMA) && !defined(IS_JAVA) -#define FLOCKFILE(f) flockfile(f) -#define FUNLOCKFILE(f) funlockfile(f) -#define GETC(f) getc_unlocked(f) -#undef PUTC -#define PUTC(c,f) putc_unlocked(c,f) -#else -#define FLOCKFILE(f) -#define FUNLOCKFILE(f) -#define GETC(f) getc(f) -#undef PUTC -#define PUTC(c,f) putc(c,f) -#endif - -#define BIAS6 63 -#define MAXBYTE 126 -#define SMALLN 62 -#define SMALLISHN 258047 -#define TOPBIT6 32 -#define C6MASK 63 - -#define GRAPH6_HEADER ">>graph6<<" -#define SPARSE6_HEADER ">>sparse6<<" -#define PLANARCODE_HEADER ">>planar_code<<" -#define PLANARCODELE_HEADER ">>planar_code le<<" -#define PLANARCODEBE_HEADER ">>planar_code be<<" -#define EDGECODE_HEADER ">>edge_code<<" - -#define GRAPH6 1 -#define SPARSE6 2 -#define PLANARCODE 4 -#define PLANARCODELE 8 -#define PLANARCODEBE 16 -#define EDGECODE 32 -#define PLANARCODEANY (PLANARCODE|PLANARCODELE|PLANARCODEBE) -#define UNKNOWN_TYPE 256 -#define HAS_HEADER 512 - -#define ARG_OK 0 -#define ARG_MISSING 1 -#define ARG_TOOBIG 2 -#define ARG_ILLEGAL 3 - -#define MAXARG 2000000000L -#define NOLIMIT (MAXARG+31L) - -#define SWBOOLEAN(c,bool) if (sw==c) bool=TRUE; -#define SWINT(c,bool,val,id) if (sw==c) \ - {bool=TRUE;arg_int(&arg,&val,id);} -#define SWLONG(c,bool,val,id) if (sw==c) \ - {bool=TRUE;arg_long(&arg,&val,id);} -#define SWRANGE(c,sep,bool,val1,val2,id) if (sw==c) \ - {bool=TRUE;arg_range(&arg,sep,&val1,&val2,id);} - -#ifdef HELPTEXT2 -#define PUTHELPTEXT printf("\nUsage: %s\n\n%s",USAGE,HELPTEXT1);\ - printf("%s",HELPTEXT2); -#else -#define PUTHELPTEXT printf("\nUsage: %s\n\n%s",USAGE,HELPTEXT) -#endif - -#define HELP if (argc > 1 && (strcmp(argv[1],"-help")==0 \ - || strcmp(argv[1],"/?")==0 \ - || strcmp(argv[1],"--help")==0)) \ - { PUTHELPTEXT; return 0;} -#define GETHELP \ -fprintf(stderr," Use %s -help to see more detailed instructions.\n",argv[0]) - -#define alloc_error gt_abort - -#define CATMSG0(fmt) sprintf(msg+strlen(msg),fmt) -#define CATMSG1(fmt,x1) sprintf(msg+strlen(msg),fmt,x1) -#define CATMSG2(fmt,x1,x2) sprintf(msg+strlen(msg),fmt,x1,x2) -#define CATMSG3(fmt,x1,x2,x3) sprintf(msg+strlen(msg),fmt,x1,x2,x3) -#define CATMSG4(fmt,x1,x2,x3,x4) sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4) -#define CATMSG5(fmt,x1,x2,x3,x4,x5) sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4,x5) -#define CATMSG6(fmt,x1,x2,x3,x4,x5,x6) \ - sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4,x5,x6) - -/************************************************************************/ - -/* @edit_msg@ */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void gtools_check(int,int,int,int); -extern FILE *opengraphfile(char*,int*,boolean,long); -extern void writeline(FILE*,char*); -extern char *gtools_getline(FILE*); /* formerly getline() */ -extern int graphsize(char*); -extern void stringcounts(char*,int*,size_t*); -extern void stringtograph(char*,graph*,int); -extern size_t edgecount(char*); -extern graph *readg(FILE*,graph*,int,int*,int*); -extern char *ntog6(graph*,int,int); -extern char *ntos6(graph*,int,int); -extern char *sgtos6(sparsegraph*); -extern char *sgtog6(sparsegraph*); -extern void writeg6(FILE*,graph*,int,int); -extern void writes6(FILE*,graph*,int,int); -extern void writeg6_sg(FILE*,sparsegraph*); -extern void writes6_sg(FILE*,sparsegraph*); -extern void writepc_sg(FILE*,sparsegraph*); -extern void stringtosparsegraph(char*,sparsegraph*,int*); -extern sparsegraph *read_sg(FILE*,sparsegraph*); -extern sparsegraph *read_sg_loops(FILE*,sparsegraph*,int*); -extern sparsegraph *readpc_sg(FILE*,sparsegraph*); -extern sparsegraph *readpcle_sg(FILE*,sparsegraph*); -extern char *getecline(FILE*); -extern void writelast(FILE*); -extern int longval(char**,long*); -extern void arg_int(char**,int*,char*); -extern void arg_long(char**,long*,char*); -extern void arg_range(char**,char*,long*,long*,char*); -extern void writerange(FILE*,int,long,long); -extern void gt_abort(char*); -extern char *stringcopy(char*); -extern boolean strhaschar(char*,int); - -extern void fcanonise(graph*,int,int,graph*,char*,boolean); -extern void fcanonise_inv - (graph*,int,int,graph*,char*,void(*)(graph*,int*,int*,int, - int,int,int*,int,boolean,int,int),int,int,int,boolean); -extern void fcanonise_inv_sg - (sparsegraph*,int,int,sparsegraph*,char*,void(*)(graph*,int*,int*, - int,int,int,int*,int,boolean,int,int),int,int,int,boolean); -extern void fgroup(graph*,int,int,char*,int*,int*); -extern void fgroup_inv - (graph*,int,int,char*,int*,int*,void(*)(graph*,int*,int*,int, - int,int,int*,int,boolean,int,int),int,int,int); -extern int istransitive(graph*,int,int,graph*); -extern void tg_canonise(graph*,graph*,int,int); - -extern TLS_ATTR int readg_code; -extern TLS_ATTR char *readg_line; -extern TLS_ATTR size_t ogf_linelen; -extern TLS_ATTR boolean is_pipe; - -#ifdef __cplusplus -} -#endif - -#ifdef CPUDEFS -CPUDEFS -#endif - -/* @edit_msg@ */ - -#endif /* _GTOOLS_H_ */ diff --git a/tools/nauty25r9_mac/gtools.c b/tools/nauty25r9_mac/gtools.c deleted file mode 100644 index 0e6ab54..0000000 --- a/tools/nauty25r9_mac/gtools.c +++ /dev/null @@ -1,1926 +0,0 @@ -/* gtools.c : Common routines for gtools programs. */ -/* Version 2.6, Jan 2011. */ - -/* Todo: size check if MAXN>0; option to free memory */ - -#include "gtools.h" - -#ifndef SEEK_SET -#define SEEK_SET 0 -#define SEEK_CUR 1 -#define SEEK_END 2 -#endif - -TLS_ATTR size_t ogf_linelen; -TLS_ATTR boolean is_pipe; - -#if HAVE_FSEEKO -#define FSEEK_VER fseeko -#define FTELL_VER ftello -#define OFF_T_VER off_t -#else -#if !FTELL_DEC -extern long ftell(FILE*); -extern int fseek(FILE*,long,int); -#endif -#define FSEEK_VER fseek -#define FTELL_VER ftell -#define OFF_T_VER long -#endif - -#if !POPEN_DEC -extern FILE *popen(const char*,const char*); -#endif - -/* - Version 1.1: Fixed sparse6 input for powers of 2. May 9, 1998 - Version 1.2: Added "cmd: ..." option for opengraphfile(). - Fixed readg() bug (could not be invisible). Oct 5, 1998 - Version 1.3: Added "is_pipe". June 20, 2002 - Version 1.4: Stuff for autoconf. August 30, 2002 - Version 1.5: Unlocked stdio for efficiency. October 31, 2004 - Also fwrite() in place of fputs() for writeline(). - Version 1.6: i/o for sparsegraph; use of s6len; improve allocations - Version 1.7: Add stringcounts() - Add very long size code (see formats.txt) - Version 1.8: Add gtools_check() - Version 1.9: Add writepc_sg(), readpc_sg() and readpcle_sg() - Add planar_code options to opengraphfile() - Version 2.4: Add writeec_sg(), readec_sg() (MISSING!) - Add edge_code options to opengraphfile() - Version 2.5: Remove sortints(), not used - Version 2.6: Add sgtog6() and writeg6_sg() -*/ - -#define B(i) (1 << ((i)-1)) -#define M(i) ((1 << (i))-1) - -/********************************************************************* -opengraphfile(filename,codetype,assumefixed,position) - opens and positions a file for reading graphs. - - filename = the name of the file to open - (NULL means stdin, assumed already open) - If filename starts with "cmd:", the remainder is taken - to be a command to open a subshell for, using a pipe. - codetype = returns a code for the format. - This is a combination of SPARSE6, GRAPH6, PLANARCODE, - PLANARCODELE, PLANARCODEBE, EDGECODE, UNKNOWN_TYPE - and HAS_HEADER. - If a header is present, that overrides the data. - If there is no header, the first graph is examined. - assumefixed = nonzero if files other than stdin or pipes should be - assumed to be seekable and have equal record sizes. - Ignored if there is a sparse6 header or the first - graph has sparse6 format. - position = the number of the record to position to - (the first is number 1; 0 and -NOLIMIT also mean - to position at start). planar_code files can only - be positioned at the start. - - If the file starts with ">", there must be a header. - Otherwise opengraphfile() fails. - - The value returned is a file pointer or NULL. - If assumedfixed is not zero and position > 1, the global variable - ogf_linelen is set to the length (including \n) of the length of the - first record. UPDATE - - The global variable is_pipe is set to whether the input file is a pipe. - -**********************************************************************/ - -FILE* -opengraphfile(char *filename, int *codetype, int assumefixed, long position) -{ - FILE *f; - int c,bl,firstc; - long i,l; - OFF_T_VER pos,pos1,pos2; - boolean bad_header; - - is_pipe = FALSE; - - if (filename == NULL) - { - f = stdin; - assumefixed = FALSE; - } - else - { - if (filename[0] == 'c' && filename[1] == 'm' - && filename[2] == 'd' && filename[3] == ':') - { -#if !HAVE_POPEN - gt_abort - (">E The \"cmd:\" option is not available in this version"); -#else - filename += 4; - while (*filename == ' ') ++filename; - f = popen(filename,"r"); -#endif - assumefixed = FALSE; - is_pipe = TRUE; - } - else - f = fopen(filename,"r"); - - if (f == NULL) - { - fprintf(stderr,">E opengraphfile: can't open %s\n",filename); - return NULL; - } - } - - FLOCKFILE(f); - firstc = c = GETC(f); - if (c == EOF) - { - *codetype = GRAPH6; - FUNLOCKFILE(f); - return f; - } - - if (c != '>') - { - *codetype = firstc == ':' ? SPARSE6 : GRAPH6; - ungetc(c,f); - } - else - { - bad_header = FALSE; - if ((c = GETC(f)) == EOF || c != '>') - bad_header = TRUE; - if (!bad_header && ((c = GETC(f)) == EOF || - (c != 'g' && c != 's' && c != 'p'))) - bad_header = TRUE; - if (!bad_header && c == 'g') - { - if ((c = GETC(f)) == EOF || c != 'r' || - (c = GETC(f)) == EOF || c != 'a' || - (c = GETC(f)) == EOF || c != 'p' || - (c = GETC(f)) == EOF || c != 'h' || - (c = GETC(f)) == EOF || c != '6' || - (c = GETC(f)) == EOF || c != '<' || - (c = GETC(f)) == EOF || c != '<') - bad_header = TRUE; - else - *codetype = GRAPH6 | HAS_HEADER; - } - else if (!bad_header && c == 'e') - { - if ((c = GETC(f)) == EOF || c != 'd' || - (c = GETC(f)) == EOF || c != 'g' || - (c = GETC(f)) == EOF || c != 'e' || - (c = GETC(f)) == EOF || c != '_' || - (c = GETC(f)) == EOF || c != 'c' || - (c = GETC(f)) == EOF || c != 'o' || - (c = GETC(f)) == EOF || c != 'd' || - (c = GETC(f)) == EOF || c != 'e' || - (c = GETC(f)) == EOF || c != '<' || - (c = GETC(f)) == EOF || c != '<') - bad_header = TRUE; - else - *codetype = EDGECODE | HAS_HEADER; - } - else if (!bad_header && c == 's') - { - if ((c = GETC(f)) == EOF || c != 'p' || - (c = GETC(f)) == EOF || c != 'a' || - (c = GETC(f)) == EOF || c != 'r' || - (c = GETC(f)) == EOF || c != 's' || - (c = GETC(f)) == EOF || c != 'e' || - (c = GETC(f)) == EOF || c != '6' || - (c = GETC(f)) == EOF || c != '<' || - (c = GETC(f)) == EOF || c != '<') - bad_header = TRUE; - else - *codetype = SPARSE6 | HAS_HEADER; - } - else if (!bad_header && c == 'p') - { - if ((c = GETC(f)) == EOF || c != 'l' || - (c = GETC(f)) == EOF || c != 'a' || - (c = GETC(f)) == EOF || c != 'n' || - (c = GETC(f)) == EOF || c != 'a' || - (c = GETC(f)) == EOF || c != 'r' || - (c = GETC(f)) == EOF || c != '_' || - (c = GETC(f)) == EOF || c != 'c' || - (c = GETC(f)) == EOF || c != 'o' || - (c = GETC(f)) == EOF || c != 'd' || - (c = GETC(f)) == EOF || c != 'e') - bad_header = TRUE; - else - { - if ((c = GETC(f)) == EOF) - bad_header = TRUE; - else if (c == ' ') - { - if ((bl = GETC(f)) == EOF || (bl != 'l' && bl != 'b') || - (c = GETC(f)) == EOF || c != 'e' || - (c = GETC(f)) == EOF || c != '<' || - (c = GETC(f)) == EOF || c != '<') - bad_header = TRUE; - else if (bl == 'l') - *codetype = PLANARCODELE | HAS_HEADER; - else - *codetype = PLANARCODEBE | HAS_HEADER; - } - else if (c == '<') - { - if ((c = GETC(f)) == EOF || c != '<') - bad_header = TRUE; - else - *codetype = PLANARCODE | HAS_HEADER; - } - else - bad_header = TRUE; - } - } - - if (bad_header) - { - fprintf(stderr,">E opengraphfile: illegal header in %s\n", - filename == NULL ? "stdin" : filename); - *codetype = UNKNOWN_TYPE | HAS_HEADER; - FUNLOCKFILE(f); - return NULL; - } - } - - if (position <= 1) return f; - - if (*codetype&PLANARCODEANY) - { - fprintf(stderr, - ">E opengraphfile: planar_code files can only be opened at the start\n"); - *codetype = UNKNOWN_TYPE | HAS_HEADER; - FUNLOCKFILE(f); - fclose(f); - return NULL; - } - - if (*codetype&EDGECODE) - { - fprintf(stderr, - ">E opengraphfile: edge_code files can only be opened at the start\n"); - *codetype = UNKNOWN_TYPE | HAS_HEADER; - FUNLOCKFILE(f); - fclose(f); - return NULL; - } - - if (!assumefixed || (*codetype&SPARSE6) || firstc == ':') - { - l = 1; - while ((c = GETC(f)) != EOF) - { - if (c == '\n') - { - ++l; - if (l == position) break; - } - } - if (l == position) return f; - - fprintf(stderr, - ">E opengraphfile: can't find line %ld in %s\n",position, - filename == NULL ? "stdin" : filename); - return NULL; - } - else - { - pos1 = FTELL_VER(f); - if (pos1 < 0) - { - fprintf(stderr,">E opengraphfile: error on first ftell\n"); - return NULL; - } - - for (i = 1; (c = GETC(f)) != EOF && c != '\n'; ++i) {} - ogf_linelen = i; - - if (c == EOF) - { - fprintf(stderr, - ">E opengraphfile: required record no present\n"); - FUNLOCKFILE(f); - return NULL; - } - - pos2 = FTELL_VER(f); - if (pos2 < 0) - { - fprintf(stderr,">E opengraphfile: error on second ftell\n"); - return NULL; - } - - pos = pos1 + (position-1)*(pos2-pos1); - if (FSEEK_VER(f,pos,SEEK_SET) < 0) - { - fprintf(stderr,">E opengraphfile: seek failed\n"); - return NULL; - } - } - - FUNLOCKFILE(f); - return f; -} - -/*********************************************************************/ - -void -writeline(FILE *f, char *s) -/* write a line with error checking */ -/* \n is not appended automatically */ -{ - size_t slen; - - slen = strlen(s); - - if (fwrite(s,1,slen,f) != slen || ferror(f)) - gt_abort(">E writeline : error on writing\n"); -} - -/*********************************************************************/ -/* This function used to be called getline(), but this was changed due - to too much confusion with the GNU function of that name. -*/ - -char* -gtools_getline(FILE *f) /* read a line with error checking */ -/* includes \n (if present) and \0. Immediate EOF causes NULL return. */ -{ - DYNALLSTAT(char,s,s_sz); - int c; - long i; - - DYNALLOC1(char,s,s_sz,5000,"gtools_getline"); - - FLOCKFILE(f); - i = 0; - while ((c = GETC(f)) != EOF && c != '\n') - { - if (i == s_sz-3) - DYNREALLOC(char,s,s_sz,3*(s_sz/2)+10000,"gtools_getline"); - s[i++] = c; - } - FUNLOCKFILE(f); - - if (i == 0 && c == EOF) return NULL; - - if (c == '\n') s[i++] = '\n'; - s[i] = '\0'; - return s; -} - -/****************************************************************************/ - -char* -getecline(FILE *f) /* read an edge_code line */ -/* No trailing \n or \0 is added. Immediate EOF causes NULL return. */ -{ - size_t headsize,bodysize; - int sizesize,edgesize; - int c1,c,i; - DYNALLSTAT(unsigned char,s,s_sz); - - FLOCKFILE(f); - if ((c1 = GETC(f)) == EOF) return NULL; - - if (c1 > 0) - { - bodysize = c1; - edgesize = 1; - headsize = 1; - } - else - { - if ((c = GETC(f)) == EOF) - gt_abort("Incomplete edge_code line"); - else - { - sizesize = c >> 4; - edgesize = c & 0xF; - bodysize = 0; - for (i = 0; i < sizesize; ++i) - { - if ((c = GETC(f)) == EOF) - gt_abort("Incomplete edge_code line"); - else - bodysize = (bodysize << 8) + c; - } - headsize = 2 + sizesize; - } - } - - DYNALLOC1(unsigned char,s,s_sz,headsize+bodysize,"getecline"); - - s[0] = c1; - if (c1 == 0) - { - s[1] = (sizesize << 4) + edgesize; - for (i = 0; i < sizesize; ++i) - s[headsize-1-i] = (bodysize >> 8*i) & 0xFF; - } - - if (bodysize > 0 && fread(s+headsize,bodysize,1,f) != bodysize) - gt_abort("Incomplete edge_code line"); - - FUNLOCKFILE(f); - return (char*)s; -} - -int -graphsize(char *s) -/* Get size of graph out of graph6 or sparse6 string. */ -{ - char *p; - int n; - - if (s[0] == ':') p = s+1; - else p = s; - n = *p++ - BIAS6; - - if (n > SMALLN) - { - n = *p++ - BIAS6; - if (n > SMALLN) - { - n = *p++ - BIAS6; - n = (n << 6) | (*p++ - BIAS6); - n = (n << 6) | (*p++ - BIAS6); - n = (n << 6) | (*p++ - BIAS6); - n = (n << 6) | (*p++ - BIAS6); - n = (n << 6) | (*p++ - BIAS6); - } - else - { - n = (n << 6) | (*p++ - BIAS6); - n = (n << 6) | (*p++ - BIAS6); - } - } - return n; -} - -/****************************************************************************/ - -static void -encodegraphsize(int n, char **pp) -/* Encode the size n in a string starting at **p, and reset **p - to point to the character after the size */ -{ - char *p; - - p = *pp; - if (n <= SMALLN) - *p++ = BIAS6 + n; - else if (n <= SMALLISHN) - { - *p++ = MAXBYTE; - *p++ = BIAS6 + (n >> 12); - *p++ = BIAS6 + ((n >> 6) & C6MASK); - *p++ = BIAS6 + (n & C6MASK); - } - else - { - *p++ = MAXBYTE; - *p++ = MAXBYTE; - *p++ = BIAS6 + (n >> 30); - *p++ = BIAS6 + ((n >> 24) & C6MASK); - *p++ = BIAS6 + ((n >> 18) & C6MASK); - *p++ = BIAS6 + ((n >> 12) & C6MASK); - *p++ = BIAS6 + ((n >> 6) & C6MASK); - *p++ = BIAS6 + (n & C6MASK); - } - - *pp = p; -} - -/****************************************************************************/ - -void -stringcounts(char *s, int *pn, size_t *pe) -/* Determine number of edges of graph6 or sparse6 string */ -{ - char *p; - int i,j,k,x,nb,v,n,need; - size_t count; - boolean done; - - n = graphsize(s); - *pn = n; - - p = s + (s[0] == ':') + SIZELEN(n); - - if (s[0] == ':') /* sparse6 */ - { - count = 0; - - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) {} - k = 0; - v = 0; - done = FALSE; - while (!done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (x & B(k)) ++v; - --k; - - need = nb; - j = 0; - while (need > 0 && !done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (need >= k) - { - j = (j << k) | (x & M(k)); - need -= k; k = 0; - } - else - { - k -= need; - j = (j << need) | ((x >> k) & M(need)); - need = 0; - } - } - if (done) continue; - - if (j > v) - v = j; - else if (v < n) - ++count; - } - } - else /* graph6 */ - { - count = 0; - for (; *p != '\n' && *p != '\0'; ++p) - count += bytecount[*p - BIAS6]; - } - - *pe = count; -} - -/****************************************************************************/ - -void -stringtograph(char *s, graph *g, int m) -/* Convert string (graph6 or sparse6 format) to graph. */ -/* Assumes g is big enough to hold it. */ -{ - char *p; - int n,i,j,k,v,x,nb,need; - size_t ii; - set *gi,*gj; - boolean done; - - n = graphsize(s); - - p = s + (s[0] == ':') + SIZELEN(n); - - if (TIMESWORDSIZE(m) < n) - gt_abort(">E stringtograph: impossible m value\n"); - - for (ii = m*(size_t)n; --ii > 0;) g[ii] = 0; g[0] = 0; - - if (s[0] != ':') /* graph6 format */ - { - k = 1; - for (j = 1; j < n; ++j) - { - gj = GRAPHROW(g,j,m); - - for (i = 0; i < j; ++i) - { - if (--k == 0) - { - k = 6; - x = *(p++) - BIAS6; - } - - if (x & TOPBIT6) - { - gi = GRAPHROW(g,i,m); - ADDELEMENT(gi,j); - ADDELEMENT(gj,i); - } - x <<= 1; - } - } - } - else /* sparse6 format */ - { - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) {} - - k = 0; - v = 0; - done = FALSE; - while (!done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (x & B(k)) ++v; - --k; - - need = nb; - j = 0; - while (need > 0 && !done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (need >= k) - { - j = (j << k) | (x & M(k)); - need -= k; k = 0; - } - else - { - k -= need; - j = (j << need) | ((x >> k) & M(need)); - need = 0; - } - } - if (done) continue; - - if (j > v) - v = j; - else if (v < n) - { - ADDELEMENT(GRAPHROW(g,v,m),j); - ADDELEMENT(GRAPHROW(g,j,m),v); - } - } - } -} - -/***********************************************************************/ - -graph* /* read graph into nauty format */ -readg(FILE *f, graph *g, int reqm, int *pm, int *pn) -/* graph6 and sparse6 formats are supported - f = an open file - g = place to put the answer (NULL for dynamic allocation) - reqm = the requested value of m (0 => compute from n) - *pm = the actual value of m - *pn = the value of n -*/ -{ - char *s,*p; - int m,n; - - if ((readg_line = gtools_getline(f)) == NULL) return NULL; - - s = readg_line; - if (s[0] == ':') - { - readg_code = SPARSE6; - p = s + 1; - } - else - { - readg_code = GRAPH6; - p = s; - } - - while (*p >= BIAS6 && *p <= MAXBYTE) - ++p; - if (*p == '\0') - gt_abort(">E readg: missing newline\n"); - else if (*p != '\n') - gt_abort(">E readg: illegal character\n"); - - n = graphsize(s); - if (readg_code == GRAPH6 && p - s != G6LEN(n)) - gt_abort(">E readg: truncated graph6 line\n"); - - if (reqm > 0 && TIMESWORDSIZE(reqm) < n) - gt_abort(">E readg: reqm too small\n"); - else if (reqm > 0) - m = reqm; - else - m = (n + WORDSIZE - 1) / WORDSIZE; - - if (g == NULL) - { - if ((g = (graph*)ALLOCS(n,m*sizeof(graph))) == NULL) - gt_abort(">E readg: malloc failed\n"); - } - - *pn = n; - *pm = m; - - stringtograph(s,g,m); - return g; -} - -/****************************************************************************/ - -void -stringtosparsegraph(char *s, sparsegraph *sg, int *nloops) -/* Convert string (graph6 or sparse6 format) to sparse graph. - * Assumes sg exists and is initialised - * Also returns the number of loops */ -{ - char *p,*q; - int n,nde,i,j,k,vv,x,nb,need; - int *d,*e; - size_t *v; - int loops; - boolean done; - - n = graphsize(s); - - q = s + (s[0] == ':') + SIZELEN(n); - - sg->nv = n; - - DYNALLOC1(size_t,sg->v,sg->vlen,n,"stringtosparsegraph"); - DYNALLOC1(int,sg->d,sg->dlen,n,"stringtosparsegraph"); - - v = sg->v; - d = sg->d; - for (i = 0; i < n; ++i) d[i] = 0; - - if (s[0] != ':') /* graph6 format */ - { - p = q; - k = 1; - for (j = 1; j < n; ++j) - { - for (i = 0; i < j; ++i) - { - if (--k == 0) - { - k = 6; - x = *(p++) - BIAS6; - } - - if (x & TOPBIT6) - { - d[i]++; - d[j]++; - } - x <<= 1; - } - } - - v[0] = 0; - for (i = 1; i < n; ++i) v[i] = v[i-1]+d[i-1]; - nde = v[n-1]+d[n-1]; - for (i = 0; i < n; ++i) d[i] = 0; - - sg->nde = nde; - DYNALLOC1(int,sg->e,sg->elen,nde,"stringtosparsegraph"); - e = sg->e; - - p = q; - k = 1; - - for (j = 1; j < n; ++j) - { - for (i = 0; i < j; ++i) - { - if (--k == 0) - { - k = 6; - x = *(p++) - BIAS6; - } - - if (x & TOPBIT6) - { - e[v[i]+d[i]++] = j; - e[v[j]+d[j]++] = i; - } - x <<= 1; - } - } - - *nloops = 0; - } - else /* sparse6 format */ - { - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) {} - - p = q; - - k = 0; - vv = 0; - done = FALSE; - loops = 0; - while (!done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (x & B(k)) ++vv; - --k; - - need = nb; - j = 0; - while (need > 0 && !done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (need >= k) - { - j = (j << k) | (x & M(k)); - need -= k; k = 0; - } - else - { - k -= need; - j = (j << need) | ((x >> k) & M(need)); - need = 0; - } - } - if (done) continue; - - if (j > vv) - vv = j; - else if (vv < n) - { - d[vv]++; - if (vv != j) d[j]++; - else ++loops; - } - } - - v[0] = 0; - for (i = 1; i < n; ++i) v[i] = v[i-1]+d[i-1]; - nde = v[n-1]+d[n-1]; - for (i = 0; i < n; ++i) d[i] = 0; - - sg->nde = nde; - DYNALLOC1(int,sg->e,sg->elen,nde,"stringtosparsegraph"); - e = sg->e; - - p = q; - - k = 0; - vv = 0; - done = FALSE; - while (!done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (x & B(k)) ++vv; - --k; - - need = nb; - j = 0; - while (need > 0 && !done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (need >= k) - { - j = (j << k) | (x & M(k)); - need -= k; k = 0; - } - else - { - k -= need; - j = (j << need) | ((x >> k) & M(need)); - need = 0; - } - } - if (done) continue; - - if (j > vv) - vv = j; - else if (vv < n) - { - e[v[vv]+d[vv]++] = j; - if (vv != j) e[v[j]+d[j]++] = vv; - } - } - *nloops = loops; - } -} - -/***********************************************************************/ - -sparsegraph* /* read graph into sparsegraph format */ -read_sg_loops(FILE *f, sparsegraph *sg, int *nloops) -/* graph6 and sparse6 formats are supported - * f = an open file - * sg = place to put the answer (NULL for dynamic allocation) - * - must be initialised if not NULL - * nloops := number of loops (each loop in a sparse6 string - * gives one loop in the sparse representation) - */ -{ - char *s,*p; - int n,loops; - - if ((readg_line = gtools_getline(f)) == NULL) return NULL; - - s = readg_line; - if (s[0] == ':') - { - readg_code = SPARSE6; - p = s + 1; - } - else - { - readg_code = GRAPH6; - p = s; - } - - while (*p >= BIAS6 && *p <= MAXBYTE) - ++p; - if (*p == '\0') - gt_abort(">E read_sg: missing newline\n"); - else if (*p != '\n') - gt_abort(">E read_sg: illegal character\n"); - - n = graphsize(s); - if (readg_code == GRAPH6 && p - s != G6LEN(n)) - gt_abort(">E read_sg: truncated graph6 line\n"); - - if (sg == NULL) - { - if ((sg = (sparsegraph*)ALLOCS(1,sizeof(sparsegraph))) == NULL) - gt_abort(">E read_sg: malloc failed\n"); - SG_INIT(*sg); - } - - stringtosparsegraph(s,sg,&loops); - *nloops = loops; - - return sg; -} - -/***********************************************************************/ - -sparsegraph* /* read graph into sparsegraph format */ -read_sg(FILE *f, sparsegraph *sg) -/* graph6 and sparse6 formats are supported - * *f = an open file - * *sg = place to put the answer (NULL for dynamic allocation) - * - must be initialised if not NULL - */ -{ - int loops; - - return read_sg_loops(f,sg,&loops); -} - -/****************************************************************************/ - -DYNALLSTAT(char,gcode,gcode_sz); /* Used by ntog6, ntos6 and sgtos6 */ -TLS_ATTR size_t s6len; -TLS_ATTR int readg_code; -TLS_ATTR char *readg_line; - -/****************************************************************************/ - -char* -ntog6(graph *g, int m, int n) -/* convert nauty graph to graph6 string, including \n and \0 */ -{ - int i,j,k; - char *p,x; - set *gj; - size_t ii; - - ii = G6LEN(n)+3; - - DYNALLOC1(char,gcode,gcode_sz,ii,"ntog6"); - - p = gcode; - encodegraphsize(n,&p); - - k = 6; - x = 0; - - for (j = 1; j < n; ++j) - { - gj = GRAPHROW(g,j,m); - for (i = 0; i < j; ++i) - { - x <<= 1; - if (ISELEMENT(gj,i)) x |= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - } - - if (k != 6) *p++ = BIAS6 + (x << k); - - *p++ = '\n'; - *p = '\0'; - - return gcode; -} - -/****************************************************************************/ - -char* -ntos6(graph *g, int m, int n) -/* convert nauty graph to sparse6 string, including \n and \0 */ -{ - int i,j,k; - char *p,x; - set *gj; - size_t ii; - int r,rr,topbit,nb,lastj; - char *plim; - - DYNALLOC1(char,gcode,gcode_sz,5000,"ntos6"); - - plim = gcode + gcode_sz - 20; - - gcode[0] = ':'; - p = gcode+1; - encodegraphsize(n,&p); - - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) - {} - topbit = 1 << (nb-1); - k = 6; - x = 0; - - lastj = 0; - for (j = 0; j < n; ++j) - { - gj = GRAPHROW(g,j,m); - for (i = 0; i <= j; ++i) - { - if (ISELEMENT(gj,i)) - { - if (p >= plim) - { - ii = p - gcode; - DYNREALLOC(char,gcode,gcode_sz, - 3*(gcode_sz/2)+10000,"ntos6"); - p = gcode + ii; - plim = gcode + gcode_sz - 20; - } - if (j == lastj) - { - x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - else - { - x = (x << 1) | 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - if (j > lastj+1) - { - for (r = 0, rr = j; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - lastj = j; - } - for (r = 0, rr = i; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - } - } - } - - if (k != 6) - { - if (k >= nb+1 && lastj == n-2 && n == (1<nv; - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) {} - - ii = (size_t)(nb+1)*(n/6+sg->nde/3); - DYNALLOC1(char,gcode,gcode_sz,ii+1000,"ntos6"); - plim = gcode + gcode_sz - 20; - - gcode[0] = ':'; - p = gcode; - *p++ = ':'; - encodegraphsize(n,&p); - - topbit = 1 << (nb-1); - k = 6; - x = 0; - - lastj = 0; - for (j = 0; j < n; ++j) - { - vj = v[j]; - dj = d[j]; - for (l = 0; l < dj; ++l) - { - i = e[vj+l]; - if (i <= j) - { - if (p >= plim) - { - ii = p - gcode; - DYNREALLOC(char, - gcode,gcode_sz,5*(gcode_sz/4)+1000,"sgtos6"); - p = gcode + ii; - plim = gcode + gcode_sz - 20; - } - if (j == lastj) - { - x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - else - { - x = (x << 1) | 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - if (j > lastj+1) - { - for (r = 0, rr = j; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - lastj = j; - } - for (r = 0, rr = i; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - } - } - } - - if (k != 6) - { - if (k >= nb+1 && lastj == n-2 && n == (1<nv; - - ii = G6LEN(n)+3; - - DYNALLOC1(char,gcode,gcode_sz,ii,"sgtog6"); - - p = gcode; - encodegraphsize(n,&p); - - bodylen = ((n * (size_t)(n-1)) / 2 + 5) / 6; - for (ii = 0; ii < bodylen; ++ii) p[ii] = 0; - p[bodylen] = '\n'; - p[bodylen+1] = '\0'; - - for (i = 0, org = 0; i < n; org += i, ++i) - { - ei = e + v[i]; - for (j = 0; j < d[i]; ++j) - if (ei[j] < i) - { - ii = ei[j] + org; - p[ii/6] |= g6bit[ii%6]; - } - } - - for (ii = 0; ii < bodylen; ++ii) p[ii] += BIAS6; - - return gcode; -} - -/**************************************************************************/ - -void -writeg6(FILE *f, graph *g, int m, int n) -/* write graph to file in graph6 format */ -{ - writeline(f,ntog6(g,m,n)); -} - -/**************************************************************************/ - -void -writes6(FILE *f, graph *g, int m, int n) -/* write graph to file in sparse6 format */ -{ - char *s; - - s = ntos6(g,m,n); - - if (fwrite(s,1,s6len,f) != s6len || ferror(f)) - gt_abort(">E writes6 : error on writing\n"); -} - -/**************************************************************************/ - -void -writeg6_sg(FILE *f, sparsegraph *g) -/* write undirected sparse graph to file in sparse6 format */ -{ - writeline(f,sgtog6(g)); -} - -/**************************************************************************/ - -void -writes6_sg(FILE *f, sparsegraph *g) -/* write undirected sparse graph to file in sparse6 format */ -{ - char *s; - - s = sgtos6(g); - - if (fwrite(s,1,s6len,f) != s6len || ferror(f)) - gt_abort(">E writes6 : error on writing\n"); -} - -/**************************************************************************/ - -DYNALLSTAT(unsigned char,buff,buff_sz); - -void -writepc_sg(FILE *f, sparsegraph *sg) -/* write a sparse graph in planar_code format - *f = an open file - *sg = the graph to write -*/ -{ - int bytes; - size_t i,j,len,k,*v,vi; - unsigned int w; - int n,*d,*e,di; - -#define BEPUT1(x) buff[j++]=(x); -#define BEPUT2(x) w=(x); buff[j++]=(w>>8)&0xFF; buff[j++]=w&0xff; -#define BEPUT4(x) w=(x); buff[j++]=(w>>24)&0xFF; buff[j++]=(w>>16)&0xff; \ - buff[j++]=(w>>8)&0xFF; buff[j++]=w&0xff; - - n = sg->nv; - SG_VDE(sg,v,d,e); - - if (n <= 255) bytes = 1; - else if (n <= 65535) bytes = 2; - else bytes = 4; - - len = bytes * (1 + n + (size_t)(sg->nde)); - if (bytes == 2) len += 1; - else if (bytes == 4) len += 3; - - DYNALLOC1(unsigned char,buff,buff_sz,len,"writepc_sg"); - - if (bytes == 1) - { - j = 0; - BEPUT1(n); - for (i = 0; i < n; ++i) - { - vi = v[i]; - di = d[i]; - for (k = 0; k < di; ++k) BEPUT1(e[vi+k]+1); - BEPUT1(0); - } - } - else if (bytes == 2) - { - j = 0; - BEPUT1(n); - BEPUT2(n); - for (i = 0; i < n; ++i) - { - vi = v[i]; - di = d[i]; - for (k = 0; k < di; ++k) BEPUT2(e[vi+k]+1); - BEPUT2(0); - } - } - else /* bytes==4 */ - { - j = 0; - BEPUT1(n); - BEPUT2(n); - BEPUT4(n); - for (i = 0; i < n; ++i) - { - vi = v[i]; - di = d[i]; - for (k = 0; k < di; ++k) BEPUT4(e[vi+k]+1); - BEPUT4(0); - } - } - - if (fwrite((void*)buff,1,j,f) != j) - gt_abort(">E writepc_sg : error on writing\n"); -} - -/**************************************************************************/ - -sparsegraph* -readpc_sg(FILE *f,sparsegraph *sg) -/* read a planar_code graph into sparse graph format - *f = an open file - *sg = place to put the answer (NULL for dynamic allocation) - - must be initialised if not NULL -*/ -{ -#define BEGET1(x) { x = GETC(f); } -#define BEGET2(x) { w1=GETC(f); w2=GETC(f); if (w2==EOF) x = EOF; else \ - x = (w1<<8) | w2; } -#define BEGET4(x) { w1=GETC(f); w2=GETC(f); w3=GETC(f); w4=GETC(f); \ - if (w4==EOF) x = EOF; \ - else x = (w1<<24) | (w2<<16) | (w3<<8) | w4; } - int w1,w2,w3,w4; - int bytes,n; - int i,j,*d,*e,di; - size_t *v,vi; - - BEGET1(n); - if (n == EOF || n < 0) return NULL; - else if (n > 0) - bytes = 1; - else - { - BEGET2(n); - if (n == EOF || n < 0) - gt_abort(">E readpc_sg : error 1 on reading\n"); - else if (n > 0) - bytes = 2; - else - { - BEGET4(n); - if (n == EOF || n < 0) - gt_abort(">E readpc_sg : error 2 on reading\n"); - else if (n > 0) - bytes = 4; - else - gt_abort(">E readpc_sg : error 3 on reading\n"); - } - } - - if (sg == NULL) - { - if ((sg = (sparsegraph*)ALLOCS(1,sizeof(sparsegraph))) == NULL) - gt_abort(">E readpc_sg: malloc failed\n"); - SG_INIT(*sg); - } - - SG_ALLOC(*sg,n,2*(size_t)n,"readpc_sg"); - SG_VDE(sg,v,d,e); - - vi = 0; - for (i = 0; i < n; ++i) - { - v[i] = vi; - di = 0; - do - { - if (bytes == 1) BEGET1(j) - else if (bytes == 2) BEGET2(j) - else BEGET4(j); - if (j == EOF) gt_abort(">E readpc_sg : error 4 on reading\n"); - - if (j > 0) - { - if (vi == sg->elen) - { - DYNREALLOC(int,sg->e,sg->elen,2*sg->elen,"readpc_sg"); - e = sg->e; - } - e[vi++] = j-1; - ++di; - } - else if (j == 0) - d[i] = di; - else - gt_abort(">E readpc_sg : error 5 on reading\n"); - } while (j != 0); - } - - sg->nv = n; - sg->nde = vi; - return sg; -} - -/**************************************************************************/ - -sparsegraph* -readpcle_sg(FILE *f,sparsegraph *sg) -/* read a planar_code graph into sparse graph format - *f = an open file - *sg = place to put the answer (NULL for dynamic allocation) - - must be initialised if not NULL -*/ -{ -#define LEGET1(x) { x = GETC(f); } -#define LEGET2(x) { w2=GETC(f); w1=GETC(f); if (w1==EOF) x = EOF; else \ - x = (w1<<8) | w2; } -#define LEGET4(x) { w4=GETC(f); w3=GETC(f); w2=GETC(f); w1=GETC(f); \ - if (w1==EOF) x = EOF; \ - else x = (w1<<24) | (w2<<16) | (w3<<8) | w4; } - int w1,w2,w3,w4; - int bytes,n; - int i,j,*d,*e,di; - size_t *v,vi; - - LEGET1(n); - if (n == EOF || n < 0) return NULL; - else if (n > 0) - bytes = 1; - else - { - LEGET2(n); - if (n == EOF || n < 0) - gt_abort(">E readpcle_sg : error 1 on reading\n"); - else if (n > 0) - bytes = 2; - else - { - LEGET4(n); - if (n == EOF || n < 0) - gt_abort(">E readpcle_sg : error 2 on reading\n"); - else if (n > 0) - bytes = 4; - else - gt_abort(">E readpcle_sg : error 3 on reading\n"); - } - } - - if (sg == NULL) - { - if ((sg = (sparsegraph*)ALLOCS(1,sizeof(sparsegraph))) == NULL) - gt_abort(">E readpcle_sg: malloc failed\n"); - SG_INIT(*sg); - } - - SG_ALLOC(*sg,n,2*(size_t)n,"readpcle_sg"); - SG_VDE(sg,v,d,e); - - vi = 0; - for (i = 0; i < n; ++i) - { - v[i] = vi; - di = 0; - do - { - if (bytes == 1) LEGET1(j) - else if (bytes == 2) LEGET2(j) - else LEGET4(j); - if (j == EOF) gt_abort(">E readpcle_sg : error 4 on reading\n"); - - if (j > 0) - { - if (vi == sg->elen) - { - DYNREALLOC(int,sg->e,sg->elen,2*sg->elen,"readpcle_sg"); - e = sg->e; - } - e[vi++] = j-1; - ++di; - } - else if (j == 0) - d[i] = di; - else - gt_abort(">E readpcle_sg : error 5 on reading\n"); - } while (j != 0); - } - - sg->nv = n; - sg->nde = vi; - return sg; -} - -/**************************************************************************/ - -void -writelast(FILE *f) -/* write last graph read by readg() assuming no intervening gtools_getline() */ -{ - writeline(f,readg_line); -} - -/**************************************************************************/ - -int -longvalue(char **ps, long *l) -{ - boolean neg,pos; - long sofar,last; - char *s; - - s = *ps; - pos = neg = FALSE; - if (*s == '-') - { - neg = TRUE; - ++s; - } - else if (*s == '+') - { - pos = TRUE; - ++s; - } - - if (*s < '0' || *s > '9') - { - *ps = s; - return (pos || neg) ? ARG_ILLEGAL : ARG_MISSING; - } - - sofar = 0; - - for (; *s >= '0' && *s <= '9'; ++s) - { - last = sofar; - sofar = sofar * 10 + (*s - '0'); - if (sofar < last || sofar > MAXARG) - { - *ps = s; - return ARG_TOOBIG; - } - } - *ps = s; - *l = neg ? -sofar : sofar; - return ARG_OK; -} - -/*************************************************************************/ - -void -arg_long(char **ps, long *val, char *id) -{ - int code; - - code = longvalue(ps,val); - if (code == ARG_MISSING || code == ARG_ILLEGAL) - { - fprintf(stderr,">E %s: missing argument value\n",id); - gt_abort(NULL); - } - else if (code == ARG_TOOBIG) - { - fprintf(stderr,">E %s: argument value too large\n",id); - gt_abort(NULL); - } -} - -/*************************************************************************/ - -void -arg_int(char **ps, int *val, char *id) -{ - int code; - long longval; - - code = longvalue(ps,&longval); - *val = longval; - if (code == ARG_MISSING || code == ARG_ILLEGAL) - { - fprintf(stderr,">E %s: missing argument value\n",id); - gt_abort(NULL); - } - else if (code == ARG_TOOBIG || *val != longval) - { - fprintf(stderr,">E %s: argument value too large\n",id); - gt_abort(NULL); - } -} - -/************************************************************************/ - -boolean -strhaschar(char *s, int c) -/* Check if s contains c. Saves the bother of figuring out whether - strchr() is available, or index() or whatever. */ -{ - int i; - - for (i = 0; s[i] != '\0'; ++i) - if (s[i] == c) return TRUE; - - return FALSE; -} - -/************************************************************************/ - -void -arg_range(char **ps, char *sep, long *val1, long *val2, char *id) -{ - int code; - char *s; - - s = *ps; - code = longvalue(&s,val1); - if (code != ARG_MISSING) - { - if (code == ARG_ILLEGAL) - { - fprintf(stderr,">E %s: bad range\n",id); - gt_abort(NULL); - } - else if (code == ARG_TOOBIG) - { - fprintf(stderr,">E %s: value too big\n",id); - gt_abort(NULL); - } - } - else if (*s == '\0' || !strhaschar(sep,*s)) - { - fprintf(stderr,">E %s: missing value\n",id); - gt_abort(NULL); - } - else - *val1 = -NOLIMIT; - - if (*s != '\0' && strhaschar(sep,*s)) - { - ++s; - code = longvalue(&s,val2); - if (code == ARG_MISSING) - *val2 = NOLIMIT; - else if (code == ARG_TOOBIG) - { - fprintf(stderr,">E %s: value too big\n",id); - gt_abort(NULL); - } - else if (code == ARG_ILLEGAL) - { - fprintf(stderr,">E %s: illegal range\n",id); - gt_abort(NULL); - } - } - else - *val2 = *val1; - - *ps = s; -} - -/***********************************************************************/ - -void -writerange(FILE *f, int c, long lo, long hi) /* Write a range. */ -{ - if (c != '\0') fprintf(f,"%c",c); - if (lo != -NOLIMIT) fprintf(f,"%ld",lo); - if (lo != hi) - { - fprintf(stderr,":"); - if (hi != NOLIMIT) fprintf(f,"%ld",hi); - } -} - -/************************************************************************/ - -void -gt_abort(char *msg) /* Write message and halt. */ -{ - if (msg) fprintf(stderr,"%s",msg); - ABORT(">E gtools"); -} - -/************************************************************************/ - -char* -stringcopy(char *s) /* duplicate string */ -{ - char *scopy; - size_t i,len; - - for (len = 0; s[len] != '\0'; ++len) - {} - - if ((scopy = (char*)ALLOCS(len+1,1)) == NULL) - gt_abort(">E stringcopy: malloc failed\n"); - - for (i = 0; i <= len; ++i) - scopy[i] = s[i]; - - return scopy; -} - -/***************************************************************************** -* * -* gtools_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -gtools_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in gtools.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in gtools.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in gtools.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: gtools.c version mismatch\n"); - exit(1); - } -} diff --git a/tools/nauty25r9_mac/gtools.h b/tools/nauty25r9_mac/gtools.h deleted file mode 100644 index 928e149..0000000 --- a/tools/nauty25r9_mac/gtools.h +++ /dev/null @@ -1,240 +0,0 @@ -/***************************************************************************** -* This is the main header file for gtools. nauty version 2.5. * -* Subject to the copyright notice in nauty.h. * -* gtools.h. Generated from gtools-h.in by configure. -*****************************************************************************/ - -/* The parts between the ==== lines are modified by configure when -creating gtools.h out of gtools-h.in. If configure is not being -used, it is necessary to check they are correct. -====================================================================*/ - -#ifndef _GTOOLS_H_ /* only process this file once */ -#define _GTOOLS_H_ - -#define HAVE_ERRNO_H 1 /* exists */ -#define HAVE_PERROR 1 /* perror() exists */ -#define HAVE_PIPE 1 /* pipe() exists */ -#define HAVE_WAIT 1 /* wait() exists */ -#define HAVE_WAIT_H 1 /* exists */ -#define HAVE_POPEN 1 /* popen() and pclose() exist */ -#define POPEN_DEC 1 /* popen() is declared in stdio.h */ -#define FTELL_DEC 1 /* ftell() is declared in stdio.h */ -#define FDOPEN_DEC 1 /* fdopen() is declared in stdio.h */ -#define SORTPROG "sort" /* name of sort program */ -#define SORT_NEWKEY 1 /* if -k is supported */ -#define HAVE_PID_T 1 /* pid_t is defined */ -#define PUTENV_DEC 1 /* putenv() is declared in stdlib.h */ -#define SETENV_DEC 1 /* setenv() is declared in stdlib.h */ -#define HAVE_PUTENV 1 /* putenv() exists */ -#define HAVE_SETENV 1 /* setenv() exists */ -#define HAVE_PTHREADS 1 /* Posix threads exist */ -#define HAVE_PTHREAD_H 1 /* exists */ -#define HAVE_FSEEKO 1 /* fseeko() and ftello() exist */ -#define HAVE_SIGACTION 1 /* sigaction() exists */ -#define HAVE_SIGPROCMASK 1 /* sigprocmask() exists */ - -/* ++++++ This file is automatically generated, don't edit it by hand! ++++++ */ - -/*==================================================================*/ - -#ifndef MAXN -#define MAXN 0 -#endif - -#define SIZELEN(n) ((n)<=SMALLN?1:((n)<=SMALLISHN?4:8)) - /* length of size code in bytes */ -#define G6LEN(n) (SIZELEN(n) \ - + ((size_t)(n)/12)*((size_t)(n)-1) + (((size_t)(n)%12)*((size_t)(n)-1)+11)/12) - /* exactly graph6 string length excluding \n\0 - This twisted expression works up to n=227023 in 32-bit arithmetic - and for larger n if size_t has 64 bits. */ - -#include "naututil.h" /* which includes stdio.h */ -#include "nausparse.h" - -#if HAVE_ERRNO_H -#include -#else -extern int errno; -#endif - -#if HAVE_WAIT_H -#include -#endif - -#if HAVE_SIGACTION -#include -#endif - -#if HAVE_PERROR -#define ABORT(msg) do {if (errno != 0) perror(msg); exit(1);} while(0) -#else -#define ABORT(msg) do {exit(1);} while(0) -#endif - -#if PUTENV_DEC && HAVE_PUTENV -#define SET_C_COLLATION putenv("LC_COLLATE=C") -#elif SETENV_DEC && HAVE_SETENV -#define SET_C_COLLATION setenv("LC_COLLATE","C",1) -#elif HAVE_PUTENV -int putenv(char*); -#define SET_C_COLLATION putenv("LC_COLLATE=C") -#elif HAVE_SETENV -int setenv(const char*,const char*,int); -#define SET_C_COLLATION setenv("LC_COLLATE","C",1) -#else -#define SET_C_COLLATION -#endif - -#if HAS_STDIO_UNLOCK && !defined(NAUTY_IN_MAGMA) && !defined(IS_JAVA) -#define FLOCKFILE(f) flockfile(f) -#define FUNLOCKFILE(f) funlockfile(f) -#define GETC(f) getc_unlocked(f) -#undef PUTC -#define PUTC(c,f) putc_unlocked(c,f) -#else -#define FLOCKFILE(f) -#define FUNLOCKFILE(f) -#define GETC(f) getc(f) -#undef PUTC -#define PUTC(c,f) putc(c,f) -#endif - -#define BIAS6 63 -#define MAXBYTE 126 -#define SMALLN 62 -#define SMALLISHN 258047 -#define TOPBIT6 32 -#define C6MASK 63 - -#define GRAPH6_HEADER ">>graph6<<" -#define SPARSE6_HEADER ">>sparse6<<" -#define PLANARCODE_HEADER ">>planar_code<<" -#define PLANARCODELE_HEADER ">>planar_code le<<" -#define PLANARCODEBE_HEADER ">>planar_code be<<" -#define EDGECODE_HEADER ">>edge_code<<" - -#define GRAPH6 1 -#define SPARSE6 2 -#define PLANARCODE 4 -#define PLANARCODELE 8 -#define PLANARCODEBE 16 -#define EDGECODE 32 -#define PLANARCODEANY (PLANARCODE|PLANARCODELE|PLANARCODEBE) -#define UNKNOWN_TYPE 256 -#define HAS_HEADER 512 - -#define ARG_OK 0 -#define ARG_MISSING 1 -#define ARG_TOOBIG 2 -#define ARG_ILLEGAL 3 - -#define MAXARG 2000000000L -#define NOLIMIT (MAXARG+31L) - -#define SWBOOLEAN(c,bool) if (sw==c) bool=TRUE; -#define SWINT(c,bool,val,id) if (sw==c) \ - {bool=TRUE;arg_int(&arg,&val,id);} -#define SWLONG(c,bool,val,id) if (sw==c) \ - {bool=TRUE;arg_long(&arg,&val,id);} -#define SWRANGE(c,sep,bool,val1,val2,id) if (sw==c) \ - {bool=TRUE;arg_range(&arg,sep,&val1,&val2,id);} - -#ifdef HELPTEXT2 -#define PUTHELPTEXT printf("\nUsage: %s\n\n%s",USAGE,HELPTEXT1);\ - printf("%s",HELPTEXT2); -#else -#define PUTHELPTEXT printf("\nUsage: %s\n\n%s",USAGE,HELPTEXT) -#endif - -#define HELP if (argc > 1 && (strcmp(argv[1],"-help")==0 \ - || strcmp(argv[1],"/?")==0 \ - || strcmp(argv[1],"--help")==0)) \ - { PUTHELPTEXT; return 0;} -#define GETHELP \ -fprintf(stderr," Use %s -help to see more detailed instructions.\n",argv[0]) - -#define alloc_error gt_abort - -#define CATMSG0(fmt) sprintf(msg+strlen(msg),fmt) -#define CATMSG1(fmt,x1) sprintf(msg+strlen(msg),fmt,x1) -#define CATMSG2(fmt,x1,x2) sprintf(msg+strlen(msg),fmt,x1,x2) -#define CATMSG3(fmt,x1,x2,x3) sprintf(msg+strlen(msg),fmt,x1,x2,x3) -#define CATMSG4(fmt,x1,x2,x3,x4) sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4) -#define CATMSG5(fmt,x1,x2,x3,x4,x5) sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4,x5) -#define CATMSG6(fmt,x1,x2,x3,x4,x5,x6) \ - sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4,x5,x6) - -/************************************************************************/ - -/* ++++++ This file is automatically generated, don't edit it by hand! ++++++ */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void gtools_check(int,int,int,int); -extern FILE *opengraphfile(char*,int*,boolean,long); -extern void writeline(FILE*,char*); -extern char *gtools_getline(FILE*); /* formerly getline() */ -extern int graphsize(char*); -extern void stringcounts(char*,int*,size_t*); -extern void stringtograph(char*,graph*,int); -extern size_t edgecount(char*); -extern graph *readg(FILE*,graph*,int,int*,int*); -extern char *ntog6(graph*,int,int); -extern char *ntos6(graph*,int,int); -extern char *sgtos6(sparsegraph*); -extern char *sgtog6(sparsegraph*); -extern void writeg6(FILE*,graph*,int,int); -extern void writes6(FILE*,graph*,int,int); -extern void writeg6_sg(FILE*,sparsegraph*); -extern void writes6_sg(FILE*,sparsegraph*); -extern void writepc_sg(FILE*,sparsegraph*); -extern void stringtosparsegraph(char*,sparsegraph*,int*); -extern sparsegraph *read_sg(FILE*,sparsegraph*); -extern sparsegraph *read_sg_loops(FILE*,sparsegraph*,int*); -extern sparsegraph *readpc_sg(FILE*,sparsegraph*); -extern sparsegraph *readpcle_sg(FILE*,sparsegraph*); -extern char *getecline(FILE*); -extern void writelast(FILE*); -extern int longval(char**,long*); -extern void arg_int(char**,int*,char*); -extern void arg_long(char**,long*,char*); -extern void arg_range(char**,char*,long*,long*,char*); -extern void writerange(FILE*,int,long,long); -extern void gt_abort(char*); -extern char *stringcopy(char*); -extern boolean strhaschar(char*,int); - -extern void fcanonise(graph*,int,int,graph*,char*,boolean); -extern void fcanonise_inv - (graph*,int,int,graph*,char*,void(*)(graph*,int*,int*,int, - int,int,int*,int,boolean,int,int),int,int,int,boolean); -extern void fcanonise_inv_sg - (sparsegraph*,int,int,sparsegraph*,char*,void(*)(graph*,int*,int*, - int,int,int,int*,int,boolean,int,int),int,int,int,boolean); -extern void fgroup(graph*,int,int,char*,int*,int*); -extern void fgroup_inv - (graph*,int,int,char*,int*,int*,void(*)(graph*,int*,int*,int, - int,int,int*,int,boolean,int,int),int,int,int); -extern int istransitive(graph*,int,int,graph*); -extern void tg_canonise(graph*,graph*,int,int); - -extern TLS_ATTR int readg_code; -extern TLS_ATTR char *readg_line; -extern TLS_ATTR size_t ogf_linelen; -extern TLS_ATTR boolean is_pipe; - -#ifdef __cplusplus -} -#endif - -#ifdef CPUDEFS -CPUDEFS -#endif - -/* ++++++ This file is automatically generated, don't edit it by hand! ++++++ */ - -#endif /* _GTOOLS_H_ */ diff --git a/tools/nauty25r9_mac/gtools.o b/tools/nauty25r9_mac/gtools.o deleted file mode 100644 index 30f4599083ca70cb31e2c91b73212448646676d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32784 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 diff --git a/tools/nauty25r9_mac/gtoolsW.o b/tools/nauty25r9_mac/gtoolsW.o deleted file mode 100644 index 5ae0fe8300eba8a078f35b2e8a9b6a8ea06027e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32400 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 maxd) - { - maxd = d; - maxdc = 1; - } - - dor |= d; - ned += d; - } - - *mindeg = mind; - *mincount = mindc; - *maxdeg = maxd; - *maxcount = maxdc; - *edges = ned / 2; - *eulerian = (dor & 1) == 0; -} - -/*********************************************************************/ - -boolean -isconnected1(graph *g, int n) -/* test if g is connected (m=1) */ -{ - setword seen,expanded,toexpand; - int i; - - seen = bit[0]; - expanded = 0; - - while ((toexpand = (seen & ~expanded)) != 0) - { - i = FIRSTBITNZ(toexpand); - expanded |= bit[i]; - seen |= g[i]; - } - - return POPCOUNT(seen) == n; -} - -/**************************************************************************/ - -boolean -isconnected(graph *g, int m, int n) -/* Test if g is connected */ -{ - int i,head,tail,w; - set *gw; -#if MAXN - int queue[MAXN],visited[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); - DYNALLSTAT(int,visited,visited_sz); -#endif - - if (m == 1) return isconnected1(g,n); - -#if !MAXN - DYNALLOC1(int,queue,queue_sz,n,"isconnected"); - DYNALLOC1(int,visited,visited_sz,n,"isconnected"); -#endif - - for (i = 0; i < n; ++i) visited[i] = 0; - - queue[0] = 0; - visited[0] = 1; - - head = 0; - tail = 1; - while (head < tail) - { - w = queue[head++]; - gw = GRAPHROW(g,w,m); - for (i = -1; (i = nextelement(gw,m,i)) >= 0;) - { - if (!visited[i]) - { - visited[i] = 1; - queue[tail++] = i; - } - } - } - - return tail == n; -} - -/**************************************************************************/ - -boolean -issubconnected(graph *g, set *sub, int m, int n) -/* Test if the subset of g induced by sub is connected. Empty is connected. */ -{ - int i,head,tail,w,subsize; - set *gw; -#if MAXN - int queue[MAXN],visited[MAXN]; - setword subw[MAXM]; -#else - DYNALLSTAT(int,queue,queue_sz); - DYNALLSTAT(int,visited,visited_sz); - DYNALLSTAT(set,subw,subw_sz); - - DYNALLOC1(int,queue,queue_sz,n,"issubconnected"); - DYNALLOC1(int,visited,visited_sz,n,"issubconnected"); - DYNALLOC1(set,subw,subw_sz,m,"issubconnected"); -#endif - - subsize = 0; - for (i = 0; i < m; ++i) subsize += (sub[i] ? POPCOUNT(sub[i]) : 0); - - if (subsize <= 1) return TRUE; - - for (i = 0; i < n; ++i) visited[i] = 0; - - i = nextelement(sub,m,-1); - queue[0] = i; - visited[i] = 1; - - head = 0; - tail = 1; - while (head < tail) - { - w = queue[head++]; - gw = GRAPHROW(g,w,m); - for (i = 0; i < m; ++i) subw[i] = gw[i] & sub[i]; - - for (i = -1; (i = nextelement(subw,m,i)) >= 0;) - { - if (!visited[i]) - { - visited[i] = 1; - queue[tail++] = i; - } - } - } - - return tail == subsize; -} - -/**********************************************************************/ - -boolean -isbiconnected1(graph *g, int n) -/* Test if g is biconnected; version for m=1. */ -{ - int sp,v,w; - setword sw; - int numvis; - setword visited; - int num[WORDSIZE],lp[WORDSIZE],stack[WORDSIZE]; - - if (n <= 2) return FALSE; - - visited = bit[0]; - stack[0] = 0; - num[0] = 0; - lp[0] = 0; - numvis = 1; - sp = 0; - v = 0; - - for (;;) - { - if ((sw = g[v] & ~visited)) /* not "==" */ - { - w = v; - v = FIRSTBITNZ(sw); /* visit next child */ - stack[++sp] = v; - visited |= bit[v]; - lp[v] = num[v] = numvis++; - sw = g[v] & visited & ~bit[w]; - while (sw) - { - w = FIRSTBITNZ(sw); - sw &= ~bit[w]; - if (num[w] < lp[v]) lp[v] = num[w]; - } - } - else - { - w = v; /* back up to parent */ - if (sp <= 1) return numvis == n; - v = stack[--sp]; - if (lp[w] >= num[v]) return FALSE; - if (lp[w] < lp[v]) lp[v] = lp[w]; - } - } -} -/**********************************************************************/ - -boolean -isbiconnected(graph *g, int m, int n) -/* test if g is biconnected */ -{ - int sp,v,vc; - int numvis; - set *gv; -#if MAXN - int num[MAXN],lp[MAXN],stack[MAXN]; -#else - DYNALLSTAT(int,num,num_sz); - DYNALLSTAT(int,lp,lp_sz); - DYNALLSTAT(int,stack,stack_sz); -#endif - - if (n <= 2) return FALSE; - if (m == 1) return isbiconnected1(g,n); - -#if !MAXN - DYNALLOC1(int,num,num_sz,n,"isbiconnected"); - DYNALLOC1(int,lp,lp_sz,n,"isbiconnected"); - DYNALLOC1(int,stack,stack_sz,n,"isbiconnected"); -#endif - - num[0] = 0; - for (v = 1; v < n; ++v) num[v] = -1; - lp[0] = 0; - numvis = 1; - sp = 0; - v = 0; - vc = -1; - gv = (set*)g; - - for (;;) - { - vc = nextelement(gv,m,vc); - if (vc < 0) - { - if (sp <= 1) return numvis == n; - vc = v; - v = stack[--sp]; - gv = GRAPHROW(g,v,m); - if (lp[vc] >= num[v]) return FALSE; - if (lp[vc] < lp[v]) lp[v] = lp[vc]; - } - else if (num[vc] < 0) - { - stack[++sp] = vc; - v = vc; - gv = GRAPHROW(g,v,m); - vc = -1; - lp[v] = num[v] = numvis++; - } - else if (vc != v) - { - if (num[vc] < lp[v]) lp[v] = num[vc]; - } - } -} - -/**************************************************************************/ - -boolean -twocolouring(graph *g, int *colour, int m, int n) -/* If g is bipartite, set colour[*] to 0 or 1 to indicate an example - of 2-colouring and return TRUE. Otherwise return FALSE. - Colour 0 is assigned to the first vertex of each component. */ -{ - int i,head,tail,v,w,need; - set *gw; -#if MAXN - int queue[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); -#endif - -#if !MAXN - DYNALLOC1(int,queue,queue_sz,n,"twocolouring"); -#endif - - for (i = 0; i < n; ++i) colour[i] = -1; - - for (v = 0; v < n; ++v) - if (colour[v] < 0) - { - queue[0] = v; - colour[v] = 0; - - head = 0; - tail = 1; - while (head < tail) - { - w = queue[head++]; - need = 1 - colour[w]; - gw = GRAPHROW(g,w,m); - for (i = -1; (i = nextelement(gw,m,i)) >= 0;) - { - if (colour[i] < 0) - { - colour[i] = need; - queue[tail++] = i; - } - else if (colour[i] != need) - return FALSE; - } - } - } - - return TRUE; -} - -/**************************************************************************/ - -boolean -isbipartite(graph *g, int m, int n) -/* Test if g is bipartite */ -{ -#if MAXN - int colour[MAXN]; -#else - DYNALLSTAT(int,colour,colour_sz); -#endif - - /* if (m == 1) return isbipartite1(g,n); */ - -#if !MAXN - DYNALLOC1(int,colour,colour_sz,n,"isbipartite"); -#endif - - return twocolouring(g,colour,m,n); -} - -/**************************************************************************/ - -int -girth(graph *g, int m, int n) -/* Find the girth of graph g. 0 means acyclic. */ -{ - int i,head,tail,v,w; - int best,c,dw1; - set *gw; -#if MAXN - int dist[MAXN],queue[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); - DYNALLSTAT(int,dist,dist_sz); - - DYNALLOC1(int,queue,queue_sz,n,"girth"); - DYNALLOC1(int,dist,dist_sz,n,"girth"); -#endif - - best = n+1; - - for (v = 0; v < n; ++v) - { - for (i = 0; i < n; ++i) dist[i] = -1; - - queue[0] = v; - dist[v] = 0; - - head = 0; - tail = 1; - while (head < tail) - { - w = queue[head++]; - gw = GRAPHROW(g,w,m); - dw1 = dist[w] + 1; - for (i = -1; (i = nextelement(gw,m,i)) >= 0;) - { - if (dist[i] < 0) - { - dist[i] = dw1; - queue[tail++] = i; - } - else if (dist[i] >= dist[w]) - { - c = dw1 + dist[i]; - if (c < best) best = c; - if ((c & 1) != 0 || c > best) break; - } - } - if (i >= 0) break; - } - if (best == 3) return 3; - } - - return (best > n ? 0 : best); -} - -/**************************************************************************/ - -void -find_dist(graph *g, int m, int n, int v, int *dist) -/* Put in dist[0..n-1] the distance of each vertex from v. - Vertices in a different component are given the distance n. */ -{ - int i,head,tail,w; - set *gw; -#if MAXN - int queue[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); -#endif - -#if !MAXN - DYNALLOC1(int,queue,queue_sz,n,"isconnected"); -#endif - - for (i = 0; i < n; ++i) dist[i] = n; - - queue[0] = v; - dist[v] = 0; - - head = 0; - tail = 1; - while (tail < n && head < tail) - { - w = queue[head++]; - gw = GRAPHROW(g,w,m); - for (i = -1; (i = nextelement(gw,m,i)) >= 0;) - { - if (dist[i] == n) - { - dist[i] = dist[w] + 1; - queue[tail++] = i; - } - } - } -} - -/**************************************************************************/ - -void -find_dist2(graph *g, int m, int n, int v, int w, int *dist) -/* Put in dist[0..n-1] the distance of each vertex from {v,w}. - Vertices in a different component are given the distance n. */ -{ - int i,head,tail,x; - set *gx; -#if MAXN - int queue[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); -#endif - -#if !MAXN - DYNALLOC1(int,queue,queue_sz,n,"isconnected"); -#endif - - for (i = 0; i < n; ++i) dist[i] = n; - - queue[0] = v; - queue[1] = w; - dist[v] = dist[w] = 0; - - head = 0; - tail = 2; - while (tail < n && head < tail) - { - x = queue[head++]; - gx = GRAPHROW(g,x,m); - for (i = -1; (i = nextelement(gx,m,i)) >= 0;) - { - if (dist[i] == n) - { - dist[i] = dist[x] + 1; - queue[tail++] = i; - } - } - } -} - -/**************************************************************************/ - -void -diamstats(graph *g, int m, int n, int *radius, int *diameter) -/* Find the radius and diameter. Both -1 if g is disconnected. - We use an O(mn) algorithm, which is pretty disgraceful. */ -{ - int v,i,head,tail,w; - int ecc,diam,rad; - set *gw; -#if MAXN - int queue[MAXN],dist[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); - DYNALLSTAT(int,dist,dist_sz); -#endif - - /* if (m == 1) {diamstats1(g,n,radius,diameter); return; } */ - -#if !MAXN - DYNALLOC1(int,queue,queue_sz,n,"isconnected"); - DYNALLOC1(int,dist,dist_sz,n,"isconnected"); -#endif - - diam = -1; - rad = n; - - for (v = 0; v < n; ++v) - { - for (i = 0; i < n; ++i) dist[i] = -1; - - queue[0] = v; - dist[v] = 0; - - head = 0; - tail = 1; - while (tail < n && head < tail) - { - w = queue[head++]; - gw = GRAPHROW(g,w,m); - for (i = -1; (i = nextelement(gw,m,i)) >= 0;) - { - if (dist[i] < 0) - { - dist[i] = dist[w] + 1; - queue[tail++] = i; - } - } - } - - if (tail < n) - { - *diameter = *radius = -1; - return; - } - - ecc = dist[queue[n-1]]; - - if (ecc > diam) diam = ecc; - if (ecc < rad) rad = ecc; - } - - *diameter = diam; - *radius = rad; -} - -/**************************************************************************/ - -static long -maxclnode1(graph *g, setword cliq, setword cov, int maxv) -/* Internal search node. cov has all the vertices outside cliq that - * cover all of cliq. maxv is the last vertex of cliq. - */ -{ - long ans; - int i; - setword w; - - if (cov == 0) return 1; - - ans = 0; - w = cov & BITMASK(maxv); - while (w) - { - TAKEBIT(i,w); - ans += maxclnode1(g,cliq|bit[i],cov&g[i]&~bit[i],i); - } - return ans; -} - -long -maxcliques(graph *g, int m, int n) -/* Find the number of maximal cliques */ -{ -#if MAXN - set clique[MAXM],covers[MAXM]; -#else - DYNALLSTAT(set,clique,clique_sz); - DYNALLSTAT(set,covers,covers_sz); -#endif - int i; - long ans; - - if (m == 1) - { - ans = 0; - for (i = 0; i < n; ++i) - ans += maxclnode1(g,bit[i],g[i],i); - } - else - { - fprintf(stderr,">E maxcliques() is only implemented for m=1\n"); - exit(1); - } - - return ans; -} diff --git a/tools/nauty25r9_mac/gutil1.o b/tools/nauty25r9_mac/gutil1.o deleted file mode 100644 index cee479e78ac8e7467f4ecc5f994f4f70ce7b8a6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14336 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 diff --git a/tools/nauty25r9_mac/gutil2.c b/tools/nauty25r9_mac/gutil2.c deleted file mode 100644 index 954722e..0000000 --- a/tools/nauty25r9_mac/gutil2.c +++ /dev/null @@ -1,474 +0,0 @@ -/* gutil2.c: Some more graph utilities. */ - -#include "gtools.h" -#include "gutils.h" - -/**************************************************************************/ - -int -loopcount(graph *g, int m, int n) -/* Number of loops */ -{ - set *gi; - int i,nl; - - nl = 0; - for (i = 0, gi = g; i < n; ++i, gi += m) - if (ISELEMENT(gi,i)) ++nl; - - return nl; -} - -/**************************************************************************/ - -long -pathcount1(graph *g, int start, setword body, setword last) -/* Number of paths in g starting at start, lying within body and - ending in last. {start} and last should be disjoint subsets of body. */ -{ - long count; - setword gs,w; - int i; - - gs = g[start]; - w = gs & last; - count = POPCOUNT(w); - - body &= ~bit[start]; - w = gs & body; - while (w) - { - TAKEBIT(i,w); - count += pathcount1(g,i,body,last&~bit[i]); - } - - return count; -} - -/**************************************************************************/ - -long -cyclecount1(graph *g, int n) -/* The total number of cycles in g (assumed no loops), m=1 only */ -{ - setword body,nbhd; - long total; - int i,j; - - body = ALLMASK(n); - total = 0; - - for (i = 0; i < n-2; ++i) - { - body ^= bit[i]; - nbhd = g[i] & body; - while (nbhd) - { - TAKEBIT(j,nbhd); - total += pathcount1(g,j,body,nbhd); - } - } - - return total; -} - -/**************************************************************************/ - -long -cyclecount(graph *g, int m, int n) -/* The total number of cycles in g (assumed no loops) */ -{ - if (m == 1) return cyclecount1(g,n); - - gt_abort("cycle counting is only implemented for n <= WORDSIZE"); - return 0; -} - -/**************************************************************************/ - -long -indpathcount1(graph *g, int start, setword body, setword last) -/* Number of induced paths in g starting at start, extravertices within - * body and ending in last. - * {start}, body and last should be disjoint. */ -{ - long count; - setword gs,w; - int i; - - gs = g[start]; - w = gs & last; - count = POPCOUNT(w); - - w = gs & body; - while (w) - { - TAKEBIT(i,w); - count += indpathcount1(g,i,body&~gs,last&~bit[i]&~gs); - } - - return count; -} - -/**************************************************************************/ - -long -indcyclecount1(graph *g, int n) -/* The total number of induced cycles in g (assumed no loops), m=1 only */ -{ - setword body,last,cni; - long total; - int i,j; - - body = ALLMASK(n); - total = 0; - - for (i = 0; i < n-2; ++i) - { - body ^= bit[i]; - last = g[i] & body; - cni = g[i] | bit[i]; - while (last) - { - TAKEBIT(j,last); - total += indpathcount1(g,j,body&~cni,last); - } - } - - return total; -} - -/**************************************************************************/ - -long -indcyclecount(graph *g, int m, int n) -/* The total number of induced cycles in g (assumed no loops) */ -{ - if (m == 1) return indcyclecount1(g,n); - - gt_abort("induced cycle counting is only implemented for n <= WORDSIZE"); - return 0; -} - -/**************************************************************************/ - -long -numtriangles1(graph *g, int n) -/* The number of triangles in g */ -{ - int i,j; - setword gi,w; - long total; - - total = 0; - for (i = 0; i < n-2; ++i) - { - gi = g[i] & BITMASK(i); - while (gi) - { - TAKEBIT(j,gi); - w = g[j] & gi; - if (w) total += POPCOUNT(w); - } - } - - return total; -} - -/**************************************************************************/ - -long -numtriangles(graph *g, int m, int n) -/* The number of triangles in g */ -{ - int i,j,k,kw; - setword *gi,*gj,w; - long total; - - if (m == 1) return numtriangles1(g,n); - - total = 0; - for (i = 0, gi = g; i < n-2; ++i, gi += m) - for (j = i; (j = nextelement(gi,m,j)) > 0; ) - { - gj = GRAPHROW(g,j,m); - kw = SETWD(j); - w = gi[kw] & gj[kw] & BITMASK(SETBT(j)); - if (w) total += POPCOUNT(w); - for (k = kw+1; k < m; ++k) - { - w = gi[k] & gj[k]; - if (w) total += POPCOUNT(w); - } - } - - return total; -} - -/**************************************************************************/ - -void -commonnbrs(graph *g, int *minadj, int *maxadj, int *minnon, int *maxnon, - int m, int n) -/* Count the common neighbours of pairs of vertices, and give the minimum - and maximum for adjacent and non-adjacent vertices. Undirected only. - Null minimums are n+1 and null maximums are -1. -*/ -{ - int j,k; - int mina,maxa,minn,maxn; - int cn; - set *gi,*gj; - setword w; - - mina = minn = n+1; - maxa = maxn = -1; - - for (j = 0, gj = g; j < n; ++j, gj += m) - for (gi = g; gi != gj; gi += m) - { - cn = 0; - for (k = 0; k < m; ++k) - { - w = gi[k] & gj[k]; - if (w) cn += POPCOUNT(w); - } - - if (ISELEMENT(gi,j)) - { - if (cn < mina) mina = cn; - if (cn > maxa) maxa = cn; - } - else - { - if (cn < minn) minn = cn; - if (cn > maxn) maxn = cn; - } - } - - *minadj = mina; - *maxadj = maxa; - *minnon = minn; - *maxnon = maxn; -} - -/**************************************************************************/ - -void -delete1(graph *g, graph *h, int v, int n) -/* Delete vertex v from g, result in h */ -{ - setword mask1,mask2,gi; - int i; - - mask1 = ALLMASK(v); - mask2 = BITMASK(v); - - for (i = 0; i < v; ++i) - { - gi = g[i]; - h[i] = (gi & mask1) | ((gi & mask2) << 1); - } - for (i = v; i < n-1; ++i) - { - gi = g[i+1]; - h[i] = (gi & mask1) | ((gi & mask2) << 1); - } -} - -/**************************************************************************/ - -void -contract1(graph *g, graph *h, int v, int w, int n) -/* Contract distinct vertices v and w (not necessarily adjacent) - with result in h. No loops are created. */ -{ - int x,y; - setword bitx,bity,mask1,mask2; - int i; - - if (w < v) - { - x = w; - y = v; - } - else - { - x = v; - y = w; - } - - bitx = bit[x]; - bity = bit[y]; - mask1 = ALLMASK(y); - mask2 = BITMASK(y); - - for (i = 0; i < n; ++i) - if (g[i] & bity) - h[i] = (g[i] & mask1) | bitx | ((g[i] & mask2) << 1); - else - h[i] = (g[i] & mask1) | ((g[i] & mask2) << 1); - - h[x] |= h[y]; - for (i = y+1; i < n; ++i) h[i-1] = h[i]; - h[x] &= ~bitx; -} - -/**************************************************************************/ - -static TLS_ATTR int knm[18][16]; /* knm[n,m] = conncontent(K_n - m*K_2) */ -static TLS_ATTR boolean knm_computed = FALSE; - -int -conncontent(graph *g, int m, int n) -/* number of connected spanning subgraphs with an even number - of edges minus the number with an odd number of edges */ -{ - graph h[WORDSIZE]; - setword gj; - int i,j,v1,v2,x,y; - int minv,mindeg,deg,goodv; - long ne; - - if (m > 1) ABORT("conncontent only implemented for m=1"); - - /* First handle tiny graphs */ - - if (n <= 3) - { - if (n == 1) return 1; - if (n == 2) return (g[0] ? -1 : 0); - if (!g[0] || !g[1] || !g[2]) return 0; /* disconnected */ - if (g[0]^g[1]^g[2]) return 1; /* path */ - return 2; /* triangle */ - } - - /* Now compute - ne = number of edges - mindeg = minimum degree - minv = a vertex of minimum degree - goodv = a vertex with a clique neighbourhood (-1 if none) - */ - - mindeg = n; - ne = 0; - goodv = -1; - for (j = 0; j < n; ++j) - { - gj = g[j]; - deg = POPCOUNT(gj); - ne += deg; - if (deg < mindeg) - { - mindeg = deg; - minv = j; - if (deg == 1) goodv = j; - } - if (deg >= 3 && deg <= 4 && goodv < 0) - { - while (gj) - { - TAKEBIT(i,gj); - if (gj & ~g[i]) break; - } - if (!gj) goodv = j; - } - } - ne /= 2; - -/* Cases of isolated vertex or tree */ - - if (mindeg == 0) return 0; - -#if 0 - if (mindeg == 1 && ne == n-1) - { - if (isconnected1(g,n)) return ((n&1) ? 1 : -1); - else return 0; - } -#endif - -/* Cases of clique and near-clique */ - - if (mindeg == n-1) - { - j = -1; - for (i = 2; i < n; ++i) j *= -i; - return j; - } - - if (mindeg == n-2 && n < 16) - { - if (!knm_computed) - { - knm_computed = TRUE; - knm[1][0] = 1; - for (i = 2; i < 16; ++i) - { - knm[i][0] = -knm[i-1][0] * (i-1); - for (j = 1; j+j <= i; ++j) - knm[i][j] = knm[i][j-1] + knm[i-1][j-1]; - } - } - return knm[n][(n*n-n)/2-ne]; - } - -/* Case of vertex with clique neighbourhood */ - - if (goodv >= 0) - { - delete1(g,h,goodv,n); - return -POPCOUNT(g[goodv]) * conncontent(h,m,n-1); - } - -/* Case of minimum degree 2 */ - - if (mindeg == 2) - { - x = FIRSTBITNZ(g[minv]); - y = FIRSTBITNZ(g[minv]^bit[x]); - if (x > minv) --x; - if (y > minv) --y; - delete1(g,h,minv,n); - v1 = conncontent(h,m,n-1); - if (h[x] & bit[y]) return -2*v1; /* adjacent neighbours */ - - h[x] |= bit[y]; - h[y] |= bit[x]; - v2 = conncontent(h,m,n-1); - return -v1 - v2; - } - -/* Case of more than 2/3 dense but not complete */ - - if (3*ne > n*n-n) - { - j = FIRSTBITNZ(g[minv] ^ bit[minv] ^ ALLMASK(n)); /* non-neighbour */ - - g[minv] ^= bit[j]; - g[j] ^= bit[minv]; - v1 = conncontent(g,m,n); - g[minv] ^= bit[j]; - g[j] ^= bit[minv]; - - contract1(g,h,minv,j,n); - v2 = conncontent(h,m,n-1); - - return v1 + v2; - } - -/* All remaining cases */ - - j = FIRSTBITNZ(g[minv]); /* neighbour */ - - g[minv] ^= bit[j]; - g[j] ^= bit[minv]; - v1 = conncontent(g,m,n); - g[minv] ^= bit[j]; - g[j] ^= bit[minv]; - - contract1(g,h,minv,j,n); - v2 = conncontent(h,m,n-1); - - return v1 - v2; -} diff --git a/tools/nauty25r9_mac/gutil2.o b/tools/nauty25r9_mac/gutil2.o deleted file mode 100644 index 4400bbba30431db783b833803cedf750fa5d815e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12720 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 diff --git a/tools/nauty25r9_mac/gutils.h b/tools/nauty25r9_mac/gutils.h deleted file mode 100644 index 4bd9f54..0000000 --- a/tools/nauty25r9_mac/gutils.h +++ /dev/null @@ -1,39 +0,0 @@ -/* gutils.h - procedure declarations for gutil1.c and gutil2.c */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void degstats(graph*,int,int, - unsigned long*,int*,int*,int*,int*,boolean*); -extern void diamstats(graph*,int,int,int*,int*); -extern void find_dist(graph*,int,int,int,int*); -extern void find_dist2(graph*,int,int,int,int,int*); -extern int girth(graph*,int,int); -extern boolean isbiconnected1(graph*,int); -extern boolean isbiconnected(graph*,int,int); -extern boolean isbipartite(graph*,int,int); -extern boolean twocolouring(graph*,int*,int,int); -extern boolean isconnected1(graph*,int); -extern boolean isconnected(graph*,int,int); -extern boolean issubconnected(graph*,set*,int,int); -extern long maxcliques(graph*,int,int); -extern void delete1(graph*,graph*,int,int); -extern int conncontent(graph*,int,int); - -extern int loopcount(graph*,int,int); -extern long pathcount1(graph*,int,setword,setword); -extern long cyclecount1(graph*,int); -extern long cyclecount(graph*,int,int); -extern long indpathcount1(graph*,int,setword,setword); -extern long indcyclecount1(graph*,int); -extern long indcyclecount(graph*,int,int); -extern void commonnbrs(graph*,int*,int*,int*,int*,int,int); -extern void contract1(graph*,graph*,int,int,int); -extern int cstarcontent(graph*,int,int); -extern long numtriangles1(graph*,int); -extern long numtriangles(graph*,int,int); - -#ifdef __cplusplus -} -#endif diff --git a/tools/nauty25r9_mac/install-sh b/tools/nauty25r9_mac/install-sh deleted file mode 100644 index a8fff16..0000000 --- a/tools/nauty25r9_mac/install-sh +++ /dev/null @@ -1,4 +0,0 @@ -# This is a dummy file to keep autoconf happy -# Since we don't provide an "install" target, -# it is an error for autoconf to complain when -# this file is absent. diff --git a/tools/nauty25r9_mac/labelg b/tools/nauty25r9_mac/labelg deleted file mode 100644 index b5845c74914b63947860df80514af79d6e79785a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340720 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

    bbp@J|dE`C`CP8GtaVwdHhf zjAHEObVAF$Pxy1-I5+Bvdml!6glk*f%?t#ifITw644uHPtgp1)SGvInuZMETaXg4O zVX;$Kr?_`?k``1QMJ_(y=jo;5!r#Teq+%evje1)GmTyB&Fua$&yM45z53WZt!J_X- zGXe*<28MIGN#VW>PKf@|gIv9P0d) z5j!Y5jIh$}Mj7K=dCWNYmeJT2_23y4B^UZe0h1c&H)VC2(LYo!PE8MVw)#=B8jokP zpz=!EhlanfjjqQh7sDZUL`(HmJR+LlXtuU+sXS4ry~drD)eL&Go|C7^H`$l5^^FVA z=K`C**74CN2=K7hn8o1mj;1X>K=lQlkFU+nYG{ehTIYG2J6D_Mv}s&;)GU8k#r%Zd zwl`bc(?*q4uF@BD3)Z~4TKNi>z9m_YurjxP&=)_roY7{b>m^#0g;hWz%awkiBhFgg zoT_3TG22}4nO^U<`hO~m_2K;JlUPwX;0%*Fhdd=ubG2^%ihY(~X+k^%fy#<;9N#uv z8+_K;bCVCT!4G;sz1Fap`+zk*$3PWqn5%x^^CXCiiW@)~yGNU~r7fK7oX|U8NlukQ z<+A{yW_2Hdfwi&)auhb!G@4x$+y%G~h#~qyK^cJz0dtGU`+s6&pd9aepA!E;ayYT3 zeLgMfWf2t-7NycFab2&Zdi;IB2jaJ;1-lyl?)j?aUyl44_TS5&X(HeG+|B=^o)c6^g!eP_F;ah{lHyN%@qd&ZQ<{`sk;nAyflrR}urFf`# z;ji&gg`FnzpP}#}pLdNNyyh!yGvXJr;kf#1p&e#44IAFddE$|1&~>;s1_^s1>~h^; zBmTEn1eFpeo>r02U$y*;!QUzWJ^m2gmy7%!Mk~Qx2L2>F6{5R6QV;UHUzmHe&>D6g zGO$<_uqM8a;Qn?r!n6gC)$m)Xv^qE(V-y-|3w{%Z*`RPO&k*0=cqSOf+ocbY&@J$} zV-BBVYsV^d_!`{K;ZTJRU+d;{>5^_vmoDk%bm@|APFHw};&g>@It;~yv4iZ|uM&!| z6l+c#;%si6Ei>(}sbmTM2I41tj6^>1(S7Ks*7zP1gS-)*l_wJ_pxu;r=(KE`3ndRT zgLK4_)_8zAn9=FewxG7^{XlI01>??hf69G(Ah!1c-MgRsyJ~V`Zg{MPmM{}n(gsen zZp1H=RoTfN;UrJ2P=nqf$2^;BMB7e@>@u07uP7^VLNXnE0NV+g@#PAgqtU_1Z=fc2 zKu#VNPOpde!XQ864i0p0lGQP{y8}t@&zpS_){o zx#mA`Xld!EH`G@)kfLsvI7L{SaInje&kzsi||C_ zDBB0U{4)^y@`7WJP1E*o;AV^5Y}M9nXyV8E?av{HwqMU^I#iyz-tv`#?%R;r|WVx>u!i^LDmE#X2wPSCy09GewvGo!;8AUYG-&}Wa7m0r0+UXm{Pe1rBEG#LGT}hliw7HXkba1dZhiyRXxp)J}0Axh0a8KjScCbz1l&2o8x#L4Ckp~VUNggzZE?9k#3 z0;BYmvQNP zRc`ce9cwOB&yZoC8vPsIlzNV!#>=PddPfDqEgw(2$*jK!?W@O zb7YBKO&~i$bTBirwv4tsK3>`~iY0vl%~t%ls>_%QU(qIk(%q(HoKGTYRLrjVObbi) zmrJOT_>(GMV@P(e;TLCRy<7s2#J#H2PE#tHct4(SuJKASo|}(!@HR;mz^}g<2MMNR zqa3zOwBXlM5G?%T_ONr?re7x|ZTeKX_{`g9_{`^CR3#B9X`9m^7yh-)kt3btU)!7| z_6>L96D$9M=94lVutA_k=o0|4meRI4?dqvKe|#{{+vd3WEB}nPIm_(3EZrJY#9Ho@ zwmGt^CC`0c(qQ87G)H`GQbaI4CpY$UZn7}jg5J^eA;7sARk9MyHLNNx1&J&Bim|!s z4DNB4QF|VVpHXI*o>M5JZdAtnKApOIo;ZfK;OXBRP?i81Xao9;C3hE~Q*A)+QEE~`rnSe|i&@VFp zy@3C5Vvr5!>fV4Z6F}$Nfb>j2)i$7!8GvpUK(GE;;pmLsfC>fB=Wf-toJ>FmDWhvg z*~Uxbs8j&OY(SEqs0WTdlKsB_v;l46z6;rZu>q~g0Q5dFsfi!ifS&FR=#K*EDjU#! znSidf0WHV?biV-F`zO`4J9-29l>j=y1~erTP@xUz;tW9J1<(o`klq{6C;_xSTj8iU z6VO)5z|r6gKpp|~QyWlDZ$O<_@^H2dD8+pjjuzN}-lHsy>=%hwO`K!{+C+H|WUmuI zKePcol?h0<0sTG$&@BS!wLdBx-PapXTmb#6kLud(nSc&aM%Ql403;!{i3S^xl*R zkk1GsOKhMFY|Y95d9;$cm)mW-Nyq;c6RBn4)xpmI$1G{z3KZQYkm5tmuL7F#@ZfdU5EvQX!4+fi|!+Gl10y zut#iQCrNqcz~u>`mpUcRc<5I@$pF-@$~>P-nbW(&KcenL8_>H_o(bp;3KCHpP)jDD zSvH`*WdM3o03Bxo`p@2g9uh!j+kob00y^IYbY}*j>jcp1-zz*#?+xf00rb%^)wS`N zfIe4cp3xbAP7^@4+knpP4X9KAJ!k_OlnLlRZ9x4q0B!S9cZ3b-tIK=gXb%O6i)}#f z$iwugU1bC6kTM6^aRKz{?^M@X96;VQDLpHIa%@1qm50-h%t)MM19>O|h#^3JV*{}q zAYC(Lt^ir{wZhLY&)0}L~7 z6mM8YF*{bZx8Y@9e1ot6OfF=R8)a_qZQpJ;u5bN0g|_Yf0;BcN>8=ir0f~Lpf7S;f z^Ao>0{)SXGH|)621}>2-L?%V{2t+4MVrl%UYrx47u9yDuXt4Y#;NBk zRu!dAk$Tj1q?chCCCdI>g^rI3Ok_%#Rh^6G%bHKL>0o$jeyH(d+1Bn6azEBp))E+w z+4czl+U6&s>23FIe1>q~CYm0%Qw}m1#?skyCX%0P-uJn(0PD;DnFm zqkZ+xwE^6!%vS>OpB7=lvX?HqIEsl-48OT2v2=`b2Wq&)C(8o-j7&n?_9Z?q?E@uT zSSS<`XuB|9#xrEi$_aUQNB^dqYuTM+3wDky7JTN^d~xEBS53H7$dT>073Pk_^f$Xm z(XgsZ)OMKXd}^@H`hi@msv<7b9R8Ndo&zbUkj-iVn$=dVC^Z-_R)Uk*f@CA*iu|iS zrQ@<(i@%-P7FEa%~I)|}mI;4|ApbF`H z!Ik0cK{}m%ZoWZCr_HIeNv=KT@Ba__xhg*H|A2bVQ2P=8JNh9=`+d;wnjlQX#xG=) z*n7ws2Q{qbBt{iOOnOj+0vHq-8$wBB^~%B;8t`0su?%Ll77%b6gJZfp?vK2{(_M8^Qk^Kc`nsu=32GI?3L_F zbR19<(vZ3s2KItlb*n#rcAhO^P!@R+g>PUAGxVSTDe#$oy4-ZWa`B@!ko89Ex zQmX7I{Ny&lMg9dWXE=-d)E-B(x z=mG)hD^_oiG1lk3r6781z?v_-wX=FKcS16pJj4tj5x3Ux?)k!8-w2Slj4!AGcS78u zqPO< zAKNaS5KGy?Dtku+Zd;QRn0{234hr+{uVvHYVFe*`jJcUsHSNw_wB z%Z#9P!$8nKao|)KsbE<*N6*CBXnM;G@$EA`efg;3GFO(#hel78eZ~gXI9bGYYK=eS zMiQmRs@?!%R$QMn|U*uv{eL7YyDz-iG^L?tqfAYjK zMpPK(bzUP(NZ!b~cHI}GE*eK5`?CBV{ux6!r{mF1x8wqG<1lWN*QTIGQIJ=F6+yYq zy`ZMEMK|p``hG;<*FEgy1_O=)9#^+@6lYE5bB%XR?XH()2P(0g z8enK7$$8T`AK=EL?b6*U5$&$TdFp3cQVIbJ?TqmFsf61&bqiKxCN(i_3Ph&oP5k+DP%}CglqBv{Z6tkS#_(r63Tt z)WD`=E+aiMRtePFN$azEIGvC|6Q{T(n1I?at(GD)gRDwq{^} zl$@Yh0Oi}du5;W8!GbDrqZ$>Gd##WI4N9Iyr?}Ymzd;%|dcNP)Sb@W^O+@(8HWQ!C z{|!8!6&KUJfV}KlA@v=}=g*NY#B8}-+=s^3-iU_$ONJrw@@_T5ej&t@?YWAJ9Inzb zO}oZ(5|l7ao9r2;uCH5X*iio_M0_^w%lX4cg%kf|;FwTw}`YKznZ$whYaHp<)C zo)@`vHSad?FU^~!u05Lf@xRp2e4~ZBHfh|beMFCs8v&>& zmneVe@VRFBlXj@EJg@y%PyJetU62*63xs2ea-95jf$Uk(t}Ozskx#@3dr2D<2)`iJt-|MBN2D!;QEspO zSa0hmb6U4*YIVz+%`H2+@!8)6ZQ-2D&MR%BmGqHy38`7&+TPqnTH~*%fjlTu9K^EM_V2`QFV3zN z{=U_(MmdPZ#_A6T&CZ>N7>p@I!(xfD5W7F6 zW_^L)Hbz=a?vUIENkQ?H+{y4fh~&->zM=ac1fCU3!J7kxl=C`mHy(hG|VD+NL{gvcc% zL3Z4&s*luTe-nY{E73j84nc1Qew8d*!kOE;^-vQKy@hv02ar|buGC=RC#FPm?ZTDU zEO-o>yGw>uX7oC&Cy83lGLOkidVI{+u|s_oPHwp&6TX#8y1&)k-?Jk3ANB678^BpY zM(2jcEwlc`r_Ee`wD`Pxq8&+D`((Dy?u+vsI*|HRkM>Kx>zl81u;MeXUFI`aNiGLD zBH7#-EwuVs7rFJ9WMI7b@$BUM<@!OUW?tw{9na__a-(W!DE3+EMKWD1BaB{ z&BjQx+|mok-q5$x)MfVm1&x%r|7M45yqiTnXW23DntzX}g5TAVI1RcQmZQ$LPw{zEPnZ>hSUn$cy97j!DAEAoEF2Uy!Vv)c%7 zBxO_+R5A!EF|kryhCnBPkW<#)NDTj6xIal zCcMes8h9E;OCa`sT`|PzXCo|(l z0m;?AOUq><()rosSjN`q;oh0y zH>bywb1ojBtq;oNi&qXKeaAe8a+!Bi^b8V^55sEWU*RQk`XDI=EdMfc5~Z|Ee9GxH zoomePE*w}Bwa|pk4kYAFu@!G?nr}32K7y_UBT23~8Er4^U(`JX9RF!GL8~Cc>RMF6 zsxVu4U80NA(%xaFB%c3=($0S(&rr+%#7|}ff(hO(^IQIvwa9wIp6>8Sy&@(nHS$;T zbxuW5nTLh+;>P}9xMf^C(s2Y?2Q@Gv|~A2h;5bxgcBORp%rn@nW*XdB_J zp>X8htP8E;r|=hdMa~u{A9AOg?dE&4T2n(6xpmVUp@Y{TS>x;403%!m7EKEH~s{vOEXak!y3WlU~UIhSD39~$0uTI`pgkyt!+tO=xmpn)a_0yJn1y;338bDqMXzlEb3 z2g@zHaYptnMP%Nx{hPymVJGB&%4HH3E|3`*t2F!6p3I7%Nw2t9upRxLc;lw36#pgP z8C}Vnh+X=;!a3PfR&uHBm`y$rQA@zaW5O70k96*$C^5PZ|U zKzO#%xk+ohUFKqEqkKuFE&m-itU0Wz73}DdrKZRH)-8@BMrkRxN(o6Qw;B)BAFo%G zFR04_GKA`08~`p^_oHvdYr13rEZ~;Os=xmR|HquVIrY8Jw8_6 zuTcRRp9gdcIwNC=HE0%yIjeku9B`86knbe=Bm_DJN{?*MGHE$eR^s121LoBNf~2^L zt$3>Cxh(*olbhw44kjE8XX3PXzg7OQ!)UE?MBTp9 zeGKx$y7{i|deh2X76`vdw$i1L^YYH>0!aKJZkJRvi3o`nbG9DoH(CO6#HKo-2n8`! zrV!rsJ>FSLy%49mR^&chS0pd+MQJAbB>3_#u@pGIb5Cj*@z5F13wu6)2%28ni2bsz ziKSw5{WRUROD{bT2*Vn4SJ5Q!;9qWJ8!%M&%X~$;Pq@~y4E}9|$>=r0XO_ZPpMwDB zqX=R66GCu>U1#S&v0t>si3 z;hNgw4-TWYJ$!;vIJ^4qcYQ)b!~__dSs?9e(i)1O7uk*RzO6ORP#oYLX3JPM4XJ9I z3ueG8Y{SqO@2gd5AzP%3x%8+_dMYe(6lH7+s-HrKOStQTPz{8<0}AG4E7;w_Mt|7~ zc2(5IBYRyq@0}0`UzSC-THTDo#Uy&o&Zf_n%?eS2YOo)~DwkwMjt_*RS;TtjW*yS> zNlCdKt6k#GieTfY%OWI`jZ2nNX2Emfl4;#Lm{xi*g6V{L!n;8$KIPt_n^*A`7@B`!nZ zeVZH%TI1*ZOr!5_@5wnyU7A?Zf;+>d95iW*mQz=;U!w?BIl<7fJU~;At7JbGShUq| zzGa>-t@r#!F0`22pWCt|=?AZIPQzQ?#AB zv4=bW4}u$xshPoLj9EB4fLdVpMjB#DB4Ne&_}ns-I62Xk5wroycsZ2AI#QTQ>N`F8 zPtT{$XP{D__kgzWCSFGfbQ9&Mw#ugx zc0bCd4cw-nAvz2x;N4i8N@w;Q^e9$hGJDSTxe(d?$zh|uF+bfcyG_JC%ds|%{{cEO z)=|QwGG@Xpw|%=joy>abZPrtT-&jwvoZ6f`36wBjgmpdY>7HhxcO*Cepj*M8ZlCDn zXau@4S~5YVpO>AL{AFK6Es>XVH}yl+YkZWyO5_r2vPj$8*{K5dSZ@DGfMFu46_g3C#?uhKN7trJ= zm3ixPy^mLZf0u485oW9%Xc8 zVU$Mf!Z(=eNkl0C-ef0E@0_oo$9=_JN~ZOQEQ4>kpvQduH}p+$|L8~+t5wG^iEoYO zJH%bD*{Wm?aUh9*{>%lQ(iQ->Z2`#p^9UK!=xwZ}W zc~eyNLDSU5bDCtEv6FFdVaAn1>0FuT3vDHPZ zNi!>nj{Up`lP{mE`QNiY*suj8w%FOTHGhYxGH$z$`Mm$C8aM%!OxEHL)&ym014{2sJ&w5nK?;ZjH?Pf#7mzfD2X6Rlis_%FMs4Nlo`|{hc{J z7e0&(Ex#vzHT^Fn`Qo$6dX%XBFeKK$5FK=rTk~FNRD5EejMaRTGmUW9h)W~E7Yq8S zvY=mp5n*u|%BlM)Q7?n>$};wMn*C;NBh{4fp!{#-)rQT-Czp|M;1T(NqT4lf1E?cY ziNq*Mr&1y??jBL0ROi|iQq3my3?l!O6+CB8D8Bdwj5Ey_&)TN=B0N?!t284MHHYLR zO2-ie?2Ptv1YslZ;zAT7?EDYkmx8$BppL$QW+XrPyex2qs{o-AYl7k~u*=+0hIi8~ z*9wIj*2P%#KkWkurNCw1Uc{n9lLJ@L;$+Qg`7HMWWS?#+UBjFEXykNu%w?=t#-f`H z46vXj**NP>r;eHXDDFaT&UKAG?X-{MK3#ZC!>4hlz@J^Vi($GZ{s~V!Zb)eVy zj|;o!>cqg?A7!gT&Oj9|g~LMF&6?WXpw9eC>s#bP@9*7LcQRbj;=3F%x-^m^M=%6`?Qf!;Fd|D3;wJ+t3Gp<@K18sy`phav^@xlu>;&HXfqxNF?X zU&VYfC91c*-lG_i!xfX;s3owvbszzje)^=y_w+e(Uy@mvWw7j}l};5CCpm0C@|*kF z#em96z`TU9n%%EtNHJtp{A^?wHfaE+?a>R)B1^ed*%Sz4$#Xx?OcKKKTftRO-^XlM z)_o8CIYO;AnOZOa_w)K$zEx0U-Y+RNU8=4vLQn|p^$+WAzl#HO2OVLb1qr`aT}D>% z0;ZKSxfmGs7+!n5m_2kWMLx6Jej3i^Lvuy`SRx_3xpSk(b-L%JhS>7l6n62dGLg8O z+T8O*`iSITgZ+9_ZENbJUi2kjqfJaY>D}nKdz2%t9YZ%_B4j2bzwlZ2iuBRu{t1A@ zcp-#EGI?(MB}ll5PADqmNP%AP#iDP%-p$Xf+LcGWhtc0SiL>+d#sgvxKVS+IVUB!& ze1hY8P6M8mV@+_Aw!{8z{SVE2({QIoFi~7QMNpyT`OR&KimP25h_z1$12RcBplf|A z+Z(jijm#e-mh6v91?^K{nYo})ZGt#*3>$KX5@F|oGs0>e)`bB5-Y-oLQ& zeg#O!o_#B~UG{7i2CT}h%Go__+B6*rNA?S4&eqL$e46hQKE5T>lwF~Ytgic2T8u$c zJAnOdrtGnxBh!@aYzPQ_lULMlzLhYx35pJrQ`ELotGRBNo_yW}C7Vkya}RL(16F$* zx3$KT8TpL)(hGm=;t6SZH;ep;{J`g}TNWub!cL0mywhnnr@O+g{IWip4gD}z(njuO z40k>?9BjjHm$9_Lh`wA~^awS5rlLE)>k#(uw(m-V2j$aX^j>+)MBim(kNgWIOcJ(n z#rOgVc8x!VSi~nwO84EE!!hFA&FRaJ(13#ZEEpFfPr3RYL1lCEBZy74&HaD?mPsR< zK5exxI-+ij<>sg$)f{ObyTtZ7lj9^xVbE%MH#+Y7vCCK5f_fTc>-J5btEF_0xz1O5 z%vXAdT!rKZSHi<8c$hTn2>e+&*g8IOMNf7*N`F#6$Y?(ed@LBh#pT@^9SGxJL5lM_ zkDfj8VK)iRop&TV!u2#VpHU#!-O5mWd>_tyeAXR`U+(JVKWB0j4>^H`A=U?ybZ3az zQrMpokjsvmxyx84@F<^0r#O!YTw^{8ws=7hmAxuL!sKC1T7t!Ik3MQ)>l4SN0z<^^jSbDwTqT@W(A)GHnm z3%=u7r8Rzl2BNpsOcEBE;d7xaG?ay0eZ-njENM8E|7QJgkq;cNb^SKm-~KIpg7LRM ze7fr}?)Jy}&-xIKB0J3_Zzlut>1sdizo_4$>c4P2-!3JE6>81sGjT$~{e!c!U$Y&P zNB)4K`qO*JW4p#^YVeB2b8;VHB|aDk-!ES_u3!CxwevbwNu=|USb(!#?bo;Df0wVY z*7)5B!BjX{TujWs^bJ3qE*4(ZhePMP4qe|e`@UsarLE$PN8Izs69(W3u;o>8hypKMfBpR=nzXjfhMtyN#Jt1hyu-egxj z`mI%$*j2-JRi9n;1{B?IHsD%SHE$GkRGuGob|@}3cjqt?GkNH@o)tu(y&ctK>yC*3 z+x8jE%}Q`(%YVB1)pt}^cgW?x!tap{--=(v%nQ7xwvW>vAHv5a^TQ!t0s2Ec*R6@g zOuk^TpB2MM$F5m-fz3=Q?VdjQD;}obGNGLlbXt*dnQ$TI&`CBiff#0 zD9P*<{DKJb4Bk?E6QlWS0E(By?)8FD&x8ELVanptXx`AS=fI5Kjr4~ug_u$$WDCrnDzX38c}^KA3KIz|i>v}|Ug^0~-p3d{ zefpi$;|_p~&$er>jEGeGhk04+QOK>oJ?;M7Zdx*bmJ zSSQm>!VsKJucyGODMsBYF1Bh)M7p;P1%-YdJ;f$ZCQ`1kciHN;V3{sa2K7lgH8^TF6Bi7wd(t{7KaOTND@s;|9H z<_rp%GAq|!xkT^{>{#WptcbWHOdiHU6DhY#7O42#zn7TtisGv^JfQL$g|dQJrugcZ zZ20QMJhpujF}5>WgXtS9_&?y%XcJnVSKjot-#QUu7t`+veC8a=65r=l%dW+_^JZ1P zRBZh;J8_dy zg(JxApmVD{z|&ZDX^Xy8G%#`)FDeggL0r|^K5S&8e5jo!W_=b<>%XTIj;{9F{@N!{ zl?v~HT=uOi9+Nj}Kej!!53CV7RdEegbuqq(Q<2ToM%OkMcW}#SG64AH7Y#(ISt##< zt)0LU?oz5it8s&;y+UahPn!*zg{L*CYY(3GxqS4$;Nl~?xcG?F5EN9WJ$~8~llIV( z`|?4*RrT{BB8$_0yZ!mLosHDY3T2~Pp|FczxMB6@7+C3-87$7hHJLaMqrOk=Wcs?B$BAm1%$TOQr=#z1>FVhH;6OV1n7a1psGGOGA*=B1 zrIQ24G1@X;t2$BI(zd|UR?BDnD+%VF^<7mXv;y)zUb;ZOETxl2jx)jo zI^9jm`XD?qM$FwvxiOEFZo~s=fx9O?7~wnE@4&YABl)XRcCF5dtvMF`L|!6wRbs$$ zWj+FHA`?x$kiZNz?^%C>Zy2dCXxj7@ZE9ngBFoueaS7%Lrl-6Un^~9@8P98flV=s9 zXKD@p*JX*aK=6$RZXa!7IR&~k_6FU$Tc$DVhr`Fs%F+J1fxJ(tzSGwah_w=xv_Ob0 znIm;$cT7c3na^(!Hhypy!o=d0Y7uH8)x4msej4*LPqox@CiO_w#u|?h&;DxP{1aC% zoY{NnWeQhPqx5w!)-`{=9baq_eG;Z7--=0$GStpy8dA$CVo-E<+uofW-I z?aU6Uk&#p~F*pFyyciie7Iv|o*yjyxz?1$BdX#p@e$=OSxNKxrO+7g~OYu{+{&GK< zT|VC|gBw;1sofK>o*K+sb}*d8D;s9twlRv)IE~@J2wZWeNmH5MEI1d*icgO{|Au^w z^r`Z?b*~z@JMt+wivmnyO#9kNFpWRb7JJq8>dVOY*s3(Uxr+z&!^(Er5C6(TYS&UI zEanl1#T4<4#69w&6&KV5I2K8L&~phj4b$I(w!vn=+45`pju|WpPMvDqUJ&baktFnd zyr7J@X9O2A@`X4T(r4Y8k0F)guh#PO!;n>b>ZAab32qB$K8|cihO8S-oq*}_)M_?; zPYuS7xOjjEp09X>Ik~t*bipFo95f@vgM%h2K+ybIF*`ry#jN>$c^IDBLJlK5NfO&w z2hgR*LBGu^H&OtdIf#W19iL09ZK8K#smu+WfQX1h7F@x5$^$t**_EGO-v_MPeTjF?J*Ft1ewntWba-7|9A?wx=#63qhrB0D>AZdk)ZyST_ zbqnk1=yDE^*Y{-DA6_NHZU+;I zzYcLJJgfgcCYi4G+BI+fM$K|+X2ugupawV{N-+$1_*Z?hUK0IQEz%NG)WeZk^5r7= z^63IE_F}P698&6&`fB}UStTpCx3@_z2>W`T3p>f91U+3V=770B@!pFP&-+Q|8nTPe zsCZOh)V3RTb^xBMs3~kwBkux$O&3q|MgYPD%XS2y?HaV5Vio&`eJC;ubVs4qbyNbwaibMLEmNZCoz43^;twU&XvLv{^$Dx<@ghAHY6?D^( zqj)B8gIm9fw6r(QEIr>G!{Eb&aGtzEMfF=uB=VYE#ezVMI&<|za^138`66*2A3?Zd zmdlqYU9*0KXr%$7mmlPbEHlk966frUL-Zsl{xGq_@^0ZZr1D6=i>v1tw)0wV4G1p~ z__#xTkvP9M{84I`k0(E}p8%f#jh5&M0RFWDc+Gz(z$$)hOtnGcF~0ysnXWGqpdXN; zk`K#sv%WeFFlm4npxVI}+aWWVYD(KO7pvv`~^2IbW$m z@ham4)UBuQ;d_>+lKX(Q&`A~&C=u&LylNPwWd{;3&t=F9owo*1#&{nmFaMqgiPoo} zROEh1CV!;;iIZq_0OU*Nj{(wwMkdFuDDg_Z;_ILqH8q5~CFKV8J!EFnZz#sGXbC)M z4r*{<`dc#$&H^#4$piCM%IKYusMtGWcNV&IZRuLWx)Z718Sx}m5GCT*{{Ar~462me zCnc_b1g$Vj()SYc`AHIwAhCy-(L+mouIsO(=R^36xbhOd$@-grl=YP|e&@??OJ$qW zy=|fRESI+M8Z<9fa@iVHII!B1Y#}!;k4zBp(9LhV+m+8}yW7-8384z)LQ!yF`Mv>2-fpE^Al~<6+nrXkhfnK$V#(b#VLI^)+W7_ur)k>>dftDk(5qXOCz$NnxI@%-9;j`iU} znT7VV5AA1-&a=c8ey6{M0dfYo)4l6zmy=_lE)SnY{sqF2Qy1o3I@nJ@b}udGfIAO9igt~b`E=*!V=yy<7m2T z9Rx&Xbm3lL+gVhxp8|MX#Qqxj7U1F3a8NE*6pak?QyNeUVMxE-~Gtit5(7{0X zpfYQ)SGwkJLVWwWe2QlBIAHlfp1(u4{P`RX&Qh*X zKqDn}(~ktH`cg(n+$XHOvD}UePyDgLR^MF&eX4Xdjr2fA9yJ~?_t{Q!A(DVvgI39V z@CPo92h?JaRgQU(oizeeB13fM@2fHxY;1&YcAK1PZ61U3p(-3B{BQ5gqt)_9CqcPd z{&e#T-Fne}GkoPyvyv_2^v@yu>RLat9@-WnBd&EBOqC?HH!frU?Z-ZPJ&EqgJ&fB? ze>`(&WcCEfAp#l-%*M5#kWBid=r;XJB_+m`4sFqK#lr9u;>9to_5D5okd3amJHQ>e z(YV9OuTkVMF@q%c<|Yt_FzwJiZquQAU|EoF#H*!5rk;3dfed9#GX3qWLU7DeUZgj! zOrG)`c5Tx02PVIqE!Qc>vB4T2PoxWZQTGt+GM8W%v(?eQGx%%#C!K745&GX(x7;yy zJPAm8P_J-5WOfk#(oSqeC|tat#wz?R3zG=R;wAWH6Dh4*XRReN2>+W_D$JD%)Lw@F zA1+#Wz~s(lc)!bz)aW*Mle9iox0JvUwwZfoF8AU_|K?B}NYQG;>85t!&J zac?8iFnXWfsVd_BPv|5a21mEiWG2gUE{Juu{(mofI~9;h2&dk_)bHQRQd+Z5d<;eHKG0G5%ko{?d|HY4rGdknBXvlwHOqA(-;Ix0j% z5mMYnNZukU$ZJ}|ITZTLvg8D=(qBAKzGJ(7^0K&3OIU)|P%0y4GYcQX(MW(PoJ>Zr z>M3@gs5?rL!3;+3UYRDcV>M}|Qf3*FdcM~tR3k(6>#iT11A;e~OdMQ;)Wf(9CNLP} zTtPi*MDl#*HWUHvqH_vQdwujpY>+H64%}Mj8#4&Z^mk$Bsu|X4JK^K%tv;b<+Amz%kk95q8l79F?#2wcRurE^?~Fq5MeL) zPEDaM*v^XN!hUJQs5x(wwpwW!mWoeEW6^9$$0+=&FJ{d}Wk{_MhZPBSALib{W8%cW zA~Wo@TC&V-1D9Y9FLiLTZ3lUF?g<-nMiJtoM2&^`@2Nm=+l9|@Pp z7O6|&c4{d=_#WFgc3^{q-Gstx1D)+X^(*}4W1;Y7zx9~R#4+AN;uS_qu)>wFMC36O zc7^y~qnR!m{GuJ!YOYqjgWw{hSVkSKc~5Nsw}KBbLBJ+yXm-?N~3B_pwf<}F~~7K^>_LW zp|<$VwVDdrphsQy1;<;F18{s5apj${P~w9e|6&O2w{A6kL=2na0V~K7A*4oDTU3e1 z9CM*cjaJ??F2rlW_9}S|y?@DtRw2OwTXCnlOL&>Yi>$97f^*zSf$%FF4CBMWCKc>% z534+%i$Qs2ri@RR@Kh@o_w9oF6opSC9JTN~?;7!6EPM*bQe9jw@n1}XVsVITx=xm+ zdAO!)4Ua&PivK*4=07M{d8g614F1#D0x?Sm3E|TkRBXTE%X$5%r`S;AqoA8>Dls+KZ$DRIUc|^ zze&$e^Tw5Ss6lcZlelYsdy3iP@tIl4H`J8#T&sQ-H#vNA8b4`+46q*e4Z^1|xldJm zCWr1MzWAd!ia4_qp2xeZjLF8cZ};s@Ym6|02YY8N?7g0uxT zhfu~e2?cPhYUk{A2?bVtkG8fccW^;DCecy~$ay9K~Q&p()`7}g0(0-Cbt#;F>s{x zfLqv)5CveW$^?@BRJKtBb7+ueqdB|qAD$GEUrc{%Ylx>kgB;NP#(-yZ4RoaA8U(RDA zn5SVTfK8>KDBXJQNBp)Opgr3BR{N_DclNPeSk-jtriXvae|0bZ&*E_lk*w@g>Drd4 zZZ5^Hp)?^T*MPE?hV@$GP+AI+Gz+U0niee^y?^n;M3*NAvW|4-d%7!Y^tit(66BU2 zchTFw75|Z-eZPf&=&`Sfae9C|tz(3&uUKWX z;1t@Rh5LyOtgw$W)ZSfM!$&-V5AV_z?>H6krzAI00Q=a9UBF2{QgW_x22lAZeyg}c z6h1KMIb}H*`5PL-04)!OTS#WDwn>fbs&{zkCyQiDuknW!!XrsdQ4n*jKC57!jAvv3 z$w5-*D}6wZyK$6^PlA9eTy=x3+{e;w-5e>Potw4A=Sn*Zq#V+~L|5aIGz`Comkwri z>R%3WhDp=XYOg0tTA0>WhMudQJtCZnns3-OtLoV64&ByLCl<@zrc!Zmb8Ys!ILvgL=uzomv_i{_?Avn!arc}wKO>mh z2$MzTG~6E1#moYe&04t$-kW8P@SBlmvg}yuHiCi(t!{DSP`N>9vnE#gf(w2*fgTeA zgAoJNG>d1YO13caDQwB;E@iE*u?BVTp>7@WLJd?`{UzP?=VsIokix)wRBIg1TuFW@ zc`eK-9m&tQ@tOZhT*pzj_LLMpyXZ~z{0SLkMEXbU1RSWy@q_|DWtR3lF! zzu+4;PsRguK=3DQ(=w$;9CmmP&hn8Gf*x8R z<6&UNXP!+AL>nf97&QQ!=8M9RCFaNS^rITHu~|h6-7S?IY|3;Ty8eJzZx02nD(xVM zj+ZOh72trk?2%7U!Zc*p16HY4$Z7vKiGRp_NWvRfdrHUyKObg9W^>;p7zR@h^O*bG z1{(K}Y8<|8_KbYl=|0U`lIqX;)NYa3n)dlPLDy#AggulJ_R#L#qXn7S`+TnU(sr}W zSGwC*nlQpUl+H`UO*}FX9tM}jZxN9%Q!J847Iw)7`(A1Y^kNo1V8rj_n8;|Z&)X?+ z36W)P^RTQwrqYx{%wwFJnuGD5_92S-Id?Gra|vm2_u)5%*3!`#j zMT{c$$LCu_V4EAr2A*vd+*7u}bvX-$`MT>htc_886l~s{5h;N@kyVkl&_{@bVb*md z4}K|Zy<2Na6Iq)idcVa~x^>V}p_lAN1)#UNzh{UzkVL|-wE42^fOOv3|NlUL{fhW2 zHf(K+s>cMRVmV4-GfXA>MQ=+thG;zr$`bjUDuokG;su|1jOd5N?@C-)lfIDLBlfvh zQb}9%9jpl|L1-5~yXDsqdD|){-fo+43M>g@;>9CaJS-AxHOrj!UkK01yPFHb={Tyx zi1tfiyz(ByysQasDGLdVttf(B^xuy~&K%KQE?a5ctt3*xoM;Y}lxKAff<flV(jlCD?nlMpmVJlC?cy!^N174#yFR|IfHm#hk{OtJG}Bgpbx%7+vc z={P}&-e3P6MK$tbst~Fl*L-_Ou>>!DK}C`g)3?EA zhT0oM@-@pb17ymJwzxJE=vY_ZExhg(^&GuOx7B3)!Jx&vzg2j_gDapCM|hpat#A{o zJT1GtuSZTrlX+cRyo$&o=dqb9j}=|B>`~ucj(rC9sx8dp^)xmG=Qc*uQ=B>LZ6{4! zq)ZmsXFI~|V(^Ax5@9C6?{mS042YxT0|ZIpUcl5mh0RU;ORnL&37D&E2KV)`U6C8nLb$x|fZdYQ!y(APb zxSM>bD(M)@7bAN{jtu3#?)eAo=V{M#fq3DMRc;2e;3eDYrw+ONEO|Mrn@PMn@WZt zkQEfUjxEKjw1r0y1emq3-Yd46{B*bcw(oaxZx%eD)KS^-v-!&d>Cwa=JgtF>FmTdQ z{$J#WI0XMcQ+UVCMcug}y0b?fld~N+!nlaCB{7-oUaE=7-mQeznxyiDa)ct$hG4j9 za{8t|$ppPbCaC#4S=A8Qe-7`mL4Urwcy`OhbT$k;y86YYfJ{8&h<1oiAgG%Aob0 zqW5G>(U7@4fWExG8J zuZ_ahEcBGgT{CuUoPAbSAmhnA5fBT!*iy-cR<@29r4@l%|<9^wgcNynjB@qB9a?9cit(YlC5gW11B;w`1JFPhVN|fFzR5waKh}FgYL0I_1(At#L;}K20434>$hx6eK@j z72#B~T|MfG@mT1BfP@0KsO;Ka-C$J3?EBW~u zH2;NvJdr=RVd-ruCmwyqpe?y()lVpN8Amwi6^#;fqBY+64grT8-}Vny63cO$lHC*{ zRDdMg2A*;-8Vpw(y0^o6M0pa$C1RQ7(f}G3G)cWGT-KV9!{CmRwpoPGktIB6U5ESs zjkAOCD$eKZvX`aP<9$pS+3_&L%+a$8alWxfi=P3jd|fE~v&O7Yys$ioAwDMSGY2|R zf<dne?{m(JoWDgLl*0LC8(9b3Uxu!@hV;gG6XgVAYmY^r zLv#R@xlSHVpwrtMXT#pxU26i~FC@|@5=b2{{95i)P%N=Oarcvf(l2`PM-rp4OTCyD zkV!x-^s$}X&q{x**op%fi&SScZy=qWy+9K^Fxptz{A*7Of>iL)nCP3F0!R_@xu8L)Yu zxl*3Qn(Zi;1__|EV*}2QL$D&11~vZ!`kemu3}QouOof(K$nRL~;Hfy=s9n|g&jwEo zg*yY}NFv-aade^hwdNMv5!81`Z7VosU`bJg5nA*(GtcoiJYl|hAUVB8m;*xt+7uBlA%%^fSm94l;Z&R}5#ij4? z9ARkY0Q)c>1t%#S)9$n`4N{$6^D)z6`Uf+{n!eMe(@*o8K=7ieu_M{qLdAjPJjP6f zHi%Jx7%_4;tAJoT_!kz0HsZO3_d$b%0|#=(TE3#GPL%AG>Vd=ww^g%6rMfw$yG%-? z=jWxrZy&ixSFj6RT#%YYOqAA;!ESth)q=F=?AIo-h~4^R@AKUSp*}NS%V%&AGt4PiG}-1iFI$08cV&PC zGUl~#jJotuS46u&7BY#Xt~|u&7J0k$Ls}BAdXbpsmk@}K5Aqv)oF(sVJhbWV0Sbt9 znn`KZe^6Sl>o5M9>cRNPE!!k~l}?pWj!RKdzzPwFb5gdQ2IE-bCkj~A_joL^IBRF< z6+fL>`#Mghgd~Qj?jPl|XvD}L(}=Q`#CNIh1hPtujykvITG;=TCAAV0|KSHTN@9jM zbTQ$gZqVEdOM^2Ok(7@w&lf(Ud*=&lsV5dey1GN;QcEBVGtDyrU`%hH;kP3F**SYQ zK|MLPBz{poI9#6W!|Mur;SL;1d0~>g5FgD`|8g+g%HD$cJ0Ow4 zB4EB3n7&~K`egqR?9%lwN2g^eEnDO4C|*Wa?trE)L+qWUJiI^n}z?-f!pU;e)>0mt@K1# zEppeKFLKwa!;$w`;@GvyCRIcfX!80BLER3g<34$_)5grTMRHUcI7Eyz`AvmKA#v6) zF2l^b>wVc;j<`mUx*ZvWxokM%#W0UVPO{e{M(mCeSy8O9m*BF#CAx=r z3{bl*awZXR6TI%Zku&rd@o%S*w>w$>Bk@@;lrPE8Gx#ajp2o$~P(|x^g1@@MHN~-&uo*!B%1>dK|PqV}Q2!5|9!2_2RoA z0oSl=z%%2SZ_H_xK9#koz)k{W()vET6h^pAjBR-0565{b%Wu5H_*0>=~8O9 z0r&((a#+`VnN#WDZD?hAFuT8yj2*k}BYv}2;Py~?)!d%=-E{yo*Jk$TYWj0Nj}!A7 zRcFrSp3Z!SOIK%h(P9bQ{zP4SbY>iHeIsz2Q<*N3c(s8S5zLWrj?wGF?S3u3Ly&5| zi-JjpS`||-tSFuOyXtDFfaPj2L%bdQ{*a%+>0itk8}^N;gy}91SSK6tyk@w()jt~- zrTED9R^e?vju|x?q#ISI@(!;a1%v7}$>^e-*z)G^n$JQ@svE4wa~a#87`|*$<;6$- zSpngoA~!Ic=B9Ge4Uw5EnlMm*4^(6N#u+UBaw=gpO%j|Ow8qMuL-7r<;Xg`1VX_>m z)}l2SOfasE)rx=aF58ln#j60o-j;?S+j8{&cROjIS@nHsCvpaK<9w+iBc{g`UJ7_Z z9tDHpNrnJZ)`_3Jz=~p`Q;kWL5Pw8YzT|hD$9*FG)oMOu1?a1)LqdFh*ncJ2U+j?k zX5!2?iht@=`RV^voW@o8-nVL#K~vZ>CrH4IuporYy^#}@eZ)I9CxXfPk`m!Y`{=>b zZ%aD|O_q+t^QLg|L%&~MBc-9)C^euKIs1N6Tp4A*aWk=x1m$jt?nhej{Yy%`qjRDM ztv)W8>(~(zw3bWNtmL&L>FyS|Thv1jQzy&eu)A6HM_BswS4&Z@k}JQAKjvQ5snhk+ zjvo054ao{ZQ}~Y{<(8w-e-UF?Bp5Z!L$R5;P?+%fDXb_$%K~`ZHvFqx_((m4x8w(~ z12}$-@#02l6>FeG#~j9l*hg}Z*||_YOst|va=bKFiXvj6d4$Jc@5;ND5jAys4E2pP zKozbwv5Kt7$p}_5CodNMAT1#3CApA$hh=1Vz$`biy_}CmrqD!Do(pPMJcYQ6fOV2O z$gE00Njq$3ym9#sJV$=0^UOkF^(CBp7WiD7SlbX(;5}6PVd{8!8A0H@)0PblfvUVG zXezYRY}FKDZIX-F*!W2;j9QC7bDqeWqk4Q?C;RyXex&!G zC*OM`uGQNP{@wOB z%kwL$!5`2VqjdS?>;gGR&Dac~1@HT_mZ@BE>Un*S{o!(WXhx`+N~D{eY@k zRVh{Bf@p2omzGGTm`@Vpc?6T^__UI4>btQyWUgZiMzV;p={(2V8atCF$PcBRgq=$gtphVF43Y>~<;4ukZ2U_TGgR@Ngq26+5XXNeekuhf zp+~knwNCL{mmBCRu|Cm@Y<;p13I@#PAVJ1uvB0yRbz!FE=d@3Y2KhB(NzZHx*ZHqSJcL7*iq- z2#zLtcRU98K=`X*IJbH9|6=Y<;G-(9#{Ue-C`#gu8Wc5X)TrPJN~}{7WnczoU?QNR zSkYQXty?YP#08VEBoVGR6QhD+ty^2GZS^&_qPP=K!lDT3D_dRbGSg^9TmVJ#|DN;Q z*+OXP`}Y0(e||o4Gxt90dCob{*`D**m3LsFTEN)@heHAL0Bb+0g}DEY{7HsH>j+)@ zN|N)TIwXGIfhEfxHIaOBBDjeV-n58vVdpMQQSxI9PjcNJEcp>9j4|p~V~o0wcN~pS zMS&}6tme2>;*_A{m3!O$@oS0BIGunD+(RKbXVAs>yzrsRU*eIc8C$GIxrYIB8Jwgw zL`rKS&9@VTu|2f9leo67#jz4%L4c=6>-b-gnp_;}+)(a!W((Py5LNPE^_p^8_{w)m z!|`9wi^*Ume(#g*k%3$Rna02T=h_%XzEj3n@^5O*?-QD_c%c;L;8_j#qr52xg)zx_ zUJv7A=p)%D>iQ+cdL_;c-&cP7%b-r@g#P&leiikHxWI z{ydZf`yBQ`fbi$n_AX~KQX>0z_TTn)f5X;-DSqBDhvwNb2YY)r`&0fCI{qhg{MWSR z502kdAn|g@&oYgG@4ec;Hf-m7|KF_mI_@E5zq1;j<_r6v)pRv%2C>F^3-s<9Hc^-e zcT@9~l}<}%!c(l~?TGAfn5=Y{hlzgn&+}cvf?)E34*!0>%QN1D?`pow*i<*)_+MW^quqH;lDsVdPL2?s)p9= z>5?+JNrKMfN_WmIv6zIT@Awv5Ez1e9hI)hcdmZkpd)z&iNLUY;u9#W1nTW*lXq>LJs z=4+v07bXv4Ac8MV3k97(w3_`gTxbB`aHJ$Sn3A1DT1e&{BluZ0N?Y*`kVjTJ&vaH2 zQN_dBaaE})`ok(MDyY0;8qI@E(J!Tp<9)*v6|4A;MZdaU%2X{eMISar#q_vi(WR#7 zJ*H@_DQc9+NKOLN?TLG}XwhWKbuJ@r1iq`AiQ7Y7aZ+N8O${l@_|= z4-4#(?y}{I3#B{18TLo73wr0I?F`80P1nhGBm(98Y?q2)_N;BfWt|YBS116(7{*Vm zSTBh%2hTsIfL}w^OoW*oK^WVaQ->Gnkwbu6$E6p~N@Z>B!~7#qs3Ewt;#Pz! zm%%#Yh&-)Z;HbqBO~=hqKY?Q>7?a3RFO@|5t02@A`gijZSxsNDZQ;RS8oyXTfPmx_ zvl@3RQ4>wbu9H1pw`$3j6GPP>vr=HNM3T7NS)+*W=M4(~i9FH@|K~tT6#j4YsS3Y_ zz`O+a&r6&`MIF_~jOMRL(Dl-2648trkjhOr3MqUzH?FB*K%%4$ZH8qf_Eqx#qH(jw zV;8gHAC+dwqZnNqH10DmcCqs4^o8zMAn-L*&d7@qwf43%B4CdghP#VAb)v3S`{yS4UM;RVTz4co z;14v$F9{1F`&Z)HVbZu9#SWAQ{F0MW#1i{_l=6R|)JZ`dN_BA};b$?On^Vi7SMa@W zHGj%r{LalvOvl_Tq(zKQEt1S=1ge(j`D!)I)d7=!ziI?H1GoB}Jfg!Y!(cD4QhkE7 z$cX6ow?VEWt`*EmcU9YuntM%pxz;<6de!#Jf<5m~A*sv&hALLXqDLu_!^3vVl>CH}iZ1UPT+lhO{6gZ*`+~p8 zkQcX4s4iXpCuD-Bs0<1m%e zQw>vv4#r9%RQt{DG%$+65`8L3tZrv)fU}A>(7^FL(lj8)sD%c;)Ms}ZIFpL>Nbu^; zXdsaz?BY0>ve$Efs#qp|1S~Z=T;_lXL+#NEUX#FvzY|`T9d67DP z`_<%YJk6%vdX0>~s4v<>2n!jF4Ze{1c;&aGE#?SUfz>R0RQ*I(455Me1TwF^v7?J> z72r?1sBp9lV)y2Bq~m>BKjgZoew%s6U}P%ZR`ZH#D#1f~xTr!U0c;SGJWo>AAH;?r z7+$v*JzRv#jkGlVw=mUrFoaKjx8MqLD0uEYa!u?7l>8 zRLrrnX7i|tW6RV)Sr&9IEfrUE)47KVQ}}E0XNP6WMhdo*FhdYVE&x#p?4#kSUt&wEH29}yPdeez)Wbun}@(FWzGqLWMLZ9LyRq^O-EgcXaspgJe zOz|Cn7_q+!I4ZIs$<_3e!+Eu&ohmw4DmUCnO2WooY`MsIV)5benJ!C_Pri5gCwBQG zp$`8zppSj~73)?h#U`}AgU_fUT-%!?pVsb0?wT%1Mq9B4CtAq9eh_~?Dy5y;y^2G2 z)k1mQ5!lQ1`&G2cH+~n>u(Uj#-~23>p8?-X&_kUaKU|H6(@>cbP0yl+wb3{Ndb zhHE&0wK;Lk0&&w8&6L(mmf`EQ(-3_sI$p+4!V<_UT!%Fc&m0ytBb$DhXhxOcJy`P$2Td;Fph+bhG?|2hCXsN^%MmQ(~WQ5*)?Q__Ln!Q;}2`5Q&$I%=g zKUpFV`FKORr+u_1G0rX3uj4PYhiiW3;r+76Kjd6PjXKWrV+7fnsDLoS_N+%tpSM!c zHATt%@ZK@w%lvjV(p7Mn3@jxrm;{v<6O5Afsoa1JR3>Op6O|CA3s`{tY0s!mzF&wF zk+O}_3ZJ&IcJ)VQ@roqiy#~jR*J__ zTErhD4R42*oJggcAkvtm4&9X4bcKv0ZGGF6_<$E8HI>^W`{p^oCfPU7em2Rzd6GQ~ zYZw9*5}rIu?GdFNB7X{0bo@$zr!YN3o|_Ua+J|?P_Mc6jn-bUZi4y{l=Rp1X&&d-_ zN5sgji8&*MK*@WTqS4MpX&S|eIZ1%cDWl_#eHu4d;|XZD$hxu?0j`#eAHr{w&i2WL z>{MCwASQOJDGBS;8;#c0{v)|bemGSZ(E$@2A&-=jTaDf&*s|m)0a*qGCS5LNt4=Ug zicJ-x>`IJ4rr=4Y;BKbir%2tjZB*Udf_s{R???&9`=Tjm6y4l{A6%wgKWPfiH3cCr zFf6y=0xekNP$EY_{P-a#W(6NX|DdDz%h`4At9T{rzKV=K=2V4ES4V4CX?-^{$Fa24 zogP^3eWYW?l{TYaBORY%hW`!A(oNl+AfNMfT$?4;l^Q)B6H7@d^uZ{;!2Lbi6~p@- zKc|(BQIiBWGb}Qt35)zH#&N5;66_V;EYi(ldX_l(y>%eo=lO|r^O&GX$hvyrrPf8> z%UBDMZYJx~NH-DzW|Xiu=#&8aEa_9e^`wCbfjDDO!qiseYe&AEjSH5+V3ZSiKjIws z)=Ttna=e+7!eV-l5BJzj5t+G}awLjA^UyF}s5jpK9Dhm5zyPcZho(JK=6@vtC{Dyn zWX4(EA->ghXArk0&||-ZA=Cg0l4=sj7jgE=q6bN;AFXWTBJTxU{P_e2X!C3L4h*eX zSl7qzTTh6_I=@xDKHyo+0lYUk5?|hh%!Xf0;xnMmmo0lLeI$2hp@a7QUo#MAu8bVd zhZq)u_9RBcKf{K{3lAcG!Yh#!2T3G_x6*IlC883Sp}8S;e&5TnANie8lf-j0Y7$8F z4Q>TO$7Jdp+;S}-8oS{Hyu}SS49lz8%?SnU&@j>Bl_PPHx}#`=rvXlq)&f7|-mol% zL>9wfhmOH9MwMff9iv>~bXfi8UU{{}vVbY`x>&clvr8O1oQnbpA=NwNp$cJjv9phE z5-5YW{|00}`I7X`EnfCo4j@!*dqEI?g3$&iOQ~W?$q}ldiX|>);E3TmFi{5YdYMjD z8EmJjDubs}jWIBi#G4mqD}(n_B8S$uKA0}Kj*>J_6kV2$ ztyc5JKd`dLz*B{GBt+>n%4&#`5YPoQ2pxz90W1*)&!3%KMJgCqA}2Y&jNDux>PGGG zPI_(Fy1PJMRx3lJEBKJLJXZ6wyhsE46~zPZkuq3-?XIw}JQixe6F@Kx`u&-6;<@OK zpr1h-Y0!W30Hx+qDl=sl^uG4)z(0m{3s6~sznY3J@Xw~Y0coZYq4HlWsKJV05NhbC z$sAs?M@=So7uJbKuo+~{vi4#)(qNiS%%m-_={T8ZzV~1rX?7$lC+z40eRgL@BdFLj zFPb=ZfNEN7?z$B2kmSTzas3`{SQXdx`tEujP}lV#nrnCWE%6~Z&);R-vFy?A4Gs)_ z&c%Vm`4<6CH?qiTYO!SfZdD@-H}*8u^E=mAZZ%!OI~U3>PsfYLx$>s*^1;4KWFYa2 zG(OQ!LoQl;yvIWL__Mw8xYR7d0kpwnGg}^dG2^=0B)WN?1aRcVZV1Jv;;;G?e^m$m zsxOE<>go`G6))Tbaeh;h^_h(DGfybm&x{zW9IF}d52z@s--dR ze@!f<7FJ7Y33E%HCYK>OeXpjJM2m8J&1E5HTrozSj$sjIkY^3>UXBIY+I!eIw|SHd zIZea9*>We|ip&as#Kx7Tx^xk* z7|R2eli2^59PR?emnkLxobQPRKh;r1rAof{EFS4mS?;Lz?{QQ&QnBYzO&mK+DVY&f zy(z%sNXPlba??h|%kzmrS)b_JqMMs|mAi%&hMj5S`1XkTwiPEZlqug(>(OZCFXX16 z+7GfJ8=(F3Xy5OgjY7$U|MF`l^ver!W?Or3!wn=yM3$&HfwCs+`uOZJd=1mm-h8EX z=?yEpws-hFw08()`MgO$>r~`3$Q0&{>+OVy@LZc1X{IC01o1_p6U3g>cqt=xXX4z5 z-M(T8E|P#K3>&&uC1pOcQ*r8}VlIsv<@D+EyJ_H4`BYzOKK_c2l>Rxdvi0sV;FGA= zZ{9I7OoOc9=(HQai9_Yhm76DHW;*dgyzlszIn8$L-OR)0Y~B0(IG7(CONv;5g<=c*IO1!!;>x#=U6L%ikvM!5xIkbPGA zT8K$Q$Cq;U1-G$pqoOhK59l%yB;dD|^BJ-oEe#Yim~N>+@Xu!b`mB(Z28oC0NJ% z`M!((XXbS`rByhNhIYx+@EZZ{Mf8+$Lmw|=RBRc?d%17%(j8sU8(98qeQN7pq+joP zd0<~a%C&SPVZ`(>+GF~r#qEi&e?o7$p6C~oj#5R{pG`A&Xft}pA}zh5FMDX|kF*5Q z)tO2cm`b9tQmJ)km1<0-kf}7#R1)o#O6TpY(lAqLUsLI8glJS=(PXJ~c-8ok2zJBn@&e-r@9`~cGly? zG}?VV7{O680udro5o0&s$q0U~!>iiUG=Gdfgo^s%xm9i$l~Q|CDvJjj>a3nu+aG*> z9l=&f7^jJd+?^AJ$8fg$tJJPcs#}e9#8qp5oE+aLTLzOayp3@!Ua&P;!MBvqMWUIZ z=fvbSiSBr>GFJh6HT!N$AumJ;6?YTo*BHXCh+g#!@&7OB3wXE!SObPx1Te4MX0Gnf z=5mp3VY;~1B%sZ=RPK)1Q9AFo0^$g(t!3k%tKPJCfrVVc%{3G2&ru9*;yt_jbv)9$ z`(Rd5~P$Q}0z;X0LW0mfbJ4&PdV=tfmDruZGHU#Oud&isGqs zL%)8lFI1~@En)E+J-+X(rUv=o%GO(vtzSV%#i!MBCGR8RkJI7rc2nMY>o;B7bII*^{fRH(kYtrU)`9(mv=yHZ%vTZtGbns$WTISvA)pRv`157 zMB>#(V|R3}JB7Bi}+!lF}O=p*O%gh%B5v+IiW=d^D+&v)rd zeiO&X=fRRMTB{HzP2N`cyYI%rn$0-3Vkb!4BKJHIHyh$6Br?3#eBL?EE$-{6DX=>_ z(HpKS_Kl>5-GP2mdnCbylw74s4E1AWazn8FCZXLlGKx=&XrvE%kGzEBs4`{NKgxra_#&II{wO5JMK_#ZG@pCp%Bq+lud|NLjhAn!V{;LE zqueas&Llf(A7<26V+=weO`sX^QXOj^jHK86{KL?Pvdk9Qir-_458g2+MiPnarao&{&sAHbF{T|5%+ zo*~exTEk}z%9VG^d6zQg;PO=UF%Qa;iLEmeTb4U9tMO|3l*w657wZNOF}}(l|1ZHp z1akK{fYm$*Z&~tDyk}j#WcgS-%x;2HR@09;$1TYqqg3;G$$LpyY@!&JJY^NRmRZ@q4=SNH`g7ixc4}<(xmb`e$ZJB$DxA@IwwkaGD8>AvKk+dg1tQX z*)C7}CxcQ*>ZtoXIbj0{`**-VTKmsp;Y!6qg)keb75}zS%mA-QybQ7XSVA$>RQ(tL z5F8f9qt-M|(9t_cK$7o0lt+3~{p)zMseYu-?wjgJD&mqOwoEX$XXUwg)ISXfiB&|< zukcw}qs ze$IqMhWJLG-KTpF6?Z+bqOnkE()+~2(%nSV#rFuaNZc|HL~r<>S4DU6g-j0|jK<+F zZ1QGa;9c8=ONuACjdpUIj9+$+G3ly3+(>-9DNQ+XOkRh<*qjVF`*aza_$IGo1^%8G z$#236jc0PCaZHXhe#w!>EjiM7B}e8sC13wN&2T@oTt94_{P;__xNKdb`e@nC-;*7w zvw+#-pH)w~*yFL0sa5-OYP(kL#fjO~0%F1d3H&pMh~Rm_p<`>UX3uMw!+#CI*tfk3scpBCsaokFrF6DjODV`X$d9h8pWLbLxTjT>2b9!NT zZQ~Eu5t4j#hlY|*(n8kR(`-U_`?y|4;apP2YRt!(Modd_UW`zSqR06a7#bc@i%c_S z5U~x#2p}~U<>FEKtCT&a>esVm0wiQy3$JP62X;tqvVsxkCI%&v>?Wa=Fj~IW`gED?D z^m8hHqTg!wLnNxYT3&Yq_EU=>-%gcp{MJ#)@v=peIivkwBt3Ad4wG**FCx~Y{b_lF z#41%Cqb+kgn^TpiEl=8?miw2OmiKpCuKEby6)o?tEmQU_e)F@ODImQ_s1hlDg$^d| zeHJVo8XVSQafyL!74hf1O`5){) z;JDkPcZ&PT#d=6eFxj-~o#1}7y=OikZF!q{fo#j+Y9o8vv!0~?)X5;8vIu#}&$giz z_zeYs{Xa);YPd;||3lVK1#T$7YUWN!hE=f{pcvEE0pT1fc$W`W%R9)rscUPugk&NW zukay@666|4Mz=X4Uce<-Ks9W6YvO_A!+m zh&4ZjLsrwtywTvcrbFc~*REQX9{EpcBa42^`H-RC;bzoU?x>BW>`3W6s&PjU?^^=q zEaD|0j@nbJ{@NfU`vY;P97A2n56q_R-H2Db2UcKRns^D2bBUL{jthl=2?nObm!gzd z0h06<)zY6_v8x0e;(Fb(3;_#arwG_fkAoLVb{hM2veYe1Ts}${qLTUsh!^l81H|08 zET!VTWoq%NpEu=D@p!7~K~wJmG8AVrv3H*)zG>x}9!YOolrOc+mb&GB>2e~Mdv3-N zWA@G(_D(qs@?qjY9gysuHSC=qCidhvu3fWt2F>0XG<#>z?43cgcLsCz&O5Y|VOW$W z4@!C=(=0S*C@vZw1P-LoSQ+^csu>hMdt?qG9K?qVBKY_S>g~qMEc7*q&|fMV9~n6{ z!G)#wQ8)`13?jTaLjdA3@>lrrA7SJ%>1!7l`47{TkzX0qd7Mfuv-%hEB6s!C&1BM`oXU^?2q*_iU%LRxKTlIomYI2cg=@)xvM(=EpcL67 zSjMFeDNq6VE2R zOBn8cw7tWAC2e_c9Ww`Un z6xk7t{Plu4hBa56q(6ERt>DfgHKn;Thm5jBD>$<&T8aFHB=8~7O>^dMqE$9$zOqiy zXq{gt@hG(n8m;6-25dd>;~BDi@v1eTVU|?YuI+f6rFWRIgkWCgq?qw_QpGUiE9FmR z#xr#jze$uB)QJp3wzZ`UL%xyU{{x2HOFMEIaw~l)1F>4h>#|QMYnUo>MK%L@kEv+R%Yk!7FC%N>^eHmPVb3>gMeNvR!IepIc%!{x<3e*8xmNCL;&t}u{m zZqk*1?=+pqpQ&Y5{w-dlR^BiWm$Ze$3ip^L9mK0X0CTcdzJqEz;~r0FA4MZ|WOA;6 zJ0Jm`5h&qz+1%q$_fwDDqrm-Wdwb#SfqM+)MUUJ=7@vFiw_}*$Aa`yO4l)s)*83Sg zEp=9Q3>zfeg;(qJRVvz7@URBKU{k`QV^87Xro@-0N{|1ZV6Zc|+)Y~m^myr7xoWu% zLf|44XEn|cEX{CMulu=2*dzoZz|{7d^ZnjKDBUA$I{f0Q#6fM~QvYQdE^lcYL^x*P z(yp%zTrxCjVDoX6beVz8fAjl41)Dl;yJ#O>XTh1??)*3x^@}W+d^y)lyGNM3<$koi zZ{V;1G<|5KN0^AFFUeIDGV+Ik%|#o5jpKb3`8A}O*a~j|>kkHc>YPlhu7qp^n2Bro ztF?RnHOaz+_m50#%du~@hHS1;v}-slRrdfLV!Rp6rJ8~Aizz1YaQHDs@^GpqF>X1p z$AOqZd9mL9j^S$l;DlcPQ1lv!{uo*)jyF{1i|vis{#P8k7$b0})b)#pa7;Frt3h^7 zyYSP!)MjTlSxa$Mdyk`y*C(Ku7%`WfGdc#lw zM@2m!jqv#ZFT@zBncsfSYcfE*@F?ZU{I+&Bd}f2|KOz4cU&;SQ!i}+b=TrILK1rOT zZB`x4XUYHe3i;nAkvrtI>iG2}fIEl($CibiQEn1A9|OW7a2S=crvQTXW23B<(7N|o zal_GiY16?ry@v(sESFhg#p>K08&h?BN~yo$RA$}5G2EjutVVxbF6t|aI97VAaf3_( zaF8VWdK#2TUYu8RT{!B<^upYe6d{qZWDglP(pNCO<|M!Kq=K9{0}`NJ`R!y}0w)!V z9h&pDEsQJgcDeS1OY@?Ivjam5TIvQyY`q_ntFpMb0V8(Uvp8b+57C{yB}8&L(4{ST z3WEcc_%UG~A;9G~gsxmXIl|?Vws$`nnD5u+pD`k<jt%3OUFlR2wd0wbV z2JU}B%oSLivf``dhA4Y7CBkIpBgaS|+-Z?MLpYd>IZRFuk7G!|2XMdjhUN_ut$_TJoDo{!RwHpl@?spP=sp!m~Tce(^!Tv%$qVcm&+{X>b%2?3YJw56baOqlxoXP9n3Jkahm#qP#+ysl z5O#h{`r#|vCp(jN8{`Cb8-llxn?Xmi4-i=G4rvPUX^P$>Ep=ewUK35zr2 z37t&9w?@(de#>Mw;5_@*^A(4;*9HXB!DvGGfLZbg$(-arcV3ch zNN08kGm{!A#1RO@hmkJ^yVz<$tbGUJo(1@dN>WV-NS=ZYA?8GCK+@P2UDqn6&!fXp zQc6xBSedjmaw*SQ`NKTqN{Zx5F#FLG%$`q3@-O;vqMD6U%N$`UU^>Z(C+n${(7s_BN77}bP;u6xqC=c%uMVz zc@k(zF0|@+bGfka@QlSm1IqH{CTWsLA2OX6u*M5K;b=Y{EL@WN_=gUzEAkaQ9V<$$ zk6rNe;5Whzizn0aLXOPa@7BEP4n~G4ZE61wG=#1 zMjfz~oJhTefbxi>z9L6kOB;neOYNI~$CKNM4(PI#Xwj45cH$(MB6QIfi6+ABANPvb zsfd1AeaYdoDU<@YL{lK5(= zHMU)h+O@#+p=MD+{*mxih?Pbz!Qv3%C=)Q*@Z-FiSU74L%F5_9n~YwJ8!YcbRxb|6 zCq}hP%*iIngC%@R@Xpy+lY1S<#5A#2IDd4p?w6X+D;#}ZOOm<3^S#(xN$0h;_HX_U z$=L~hm_Z9?mEEvb))PO+bSwT=xu60Jmt9(NdP+L!^Ji!AkBE~m-?>z3dYJSQ<9vm; zSWQoBY<9%}CM&o5MoXR@T6m|`{D4GZcMUJ&1U#uF!Xc@M^M5*j6GPr?a(V$O^A~T+ zXKZD7J0$h;m+Pn-rb!ydKj{P_c)r_j@i(6Q5xggq3vPj+dWj^fv=B@%RYUS3tMbxhC6nJT- zA7F+9u5%wM$~$+31(dSN3`>DYT5Ets+AbgW6gJ%=(cDfQ4DVgD$|t#bo+I{miMfn6 zbL{oIM3aubWcx*`P@xvc_&JLGy;mO5TKQzjFMSDY}N(;vsAU&bpA=7rxmHNSEu zS8{!bZQT1P2IiA0TLT^yu*h@e>>G(L5^m=FghP4WIe#Uz`@gFJZmpXAk@6hcZp{eN(o0z zzoE+)J?3ndyA;W~_7}uL%^M`R;>wOrMU=jb zXxzjHJvDn3UJQ=LikPHK-JFqaxfQV*;kZ%Ag;A=T3QXFQ1|*)fyO=yk`biy^eN!h3`(j?TzT0A!;jzeF!1Gzs9Tsrc;*tM1>o*)MH0yWq3GVuxz^fkDZ#X4b zKa21G7wgyWD%Nl9@j2`F+gYjgdxa0We!pdXdRV_zU~l&NT~1BbZ?rsmSii~A&kpNn zf{+o`Np$W^ScqzHTgd5qHogwY#83WE{_@COqQMd_2jIm$yck*t=aPi~6I!j76QRT8 zw*HDjlHZmgbjTxh_BL19`ulNGqUr@x@IF&eRNwCC)@};UF$HT(!R8(c&NBtCGzBB3 z;I`jvXXCIP35L9d8hOMSB#Q@*PMqQGJ<-zeo zbQ-okiPbmO037}gUdH5u$A~o0TrT^ioSdK7a3jf;o7?zFBOYptKl)Mq$&GX4%qh?- zsG9tpDf5n+ZM-kaqh~_+;Ak02)sv>+TvMc<_>KPi{TV7QXw zy46~70yl-T#vM}WXH>#s2#y$KQ{(|5huEI}p>tFttw9^8DxsoQdQd7IOQp`kBxjSD zqqofH2A4CW%qiU(CRJ_^_UrsMzx?iUZ~8 z=s*5UaW>AE`wZ=4SPWQCEfvR8Z*oBykwl^}CA;?ru#m*ju$G+h3e@Wmv=b|j((&HN z-$4Be9%-l_;g0vX9>;qt6?+~pP%kr3FT)bhFE4gExHP?9`Z4O!14oMNQGbRia{%jN zz7c^_Xs>Jd!1D}vm>264igKa%Y~!vc3G0!e_*u6U*zXQpsq*U7ZCzZG9{sWW+tA*N z=$hUQOSad1k~2p!M~N;5Y)Ml2=d^9X~j;+RWPS{xxP+3JCcSdJjhK)w2rBh zuBUhBa2dL*Xbeb-Wx@5?Jxz(M273rhoNL;^-cZN?lZ!D4Nw73-6oOR~Pal!3-EB%d z%(3rir@4x}08};%lw`Bzrp2Vj^(9Da8T*?mdsqlkrU0w? zz>S!MUZs?4rb(HAB)6idxNrMy4`%vtIqlc@#p)}TB1E&vb&M`vbPW%xVAe?_yk1@z zGgTP26G|Jf&R>9GBPqM5Dka(6XbN<332h{vDwo-Mezv~J&7A6ar03)VD`ZZ7 zedf&R_tffPPEfht(!fKrc)O5xfgBwAsIH6^7bkDlaJcBk))lLI3J@Sfszp<-$8o&P z0u=lFg?e99G|-Qb^>fILP*FG;l--LUYja)00T;@)M9Q(m-G|A9s;*LCdaLCj)xgAs zB2puH&ImfY$wdvA4BUGf3bZx|JUj6dtsd;xa6=hJ9y#ZYsgQ9rPL+mwhj6{Br9g7$ zV`ib*1+_6YixHeiu5h7{n{sY-iSO}SLo+9f%r8Z zdytLU70W8K$8z*dXJ2g+^Pnk+AzC^}*>K>T+yg-17(_xY0kKy0WK#SEJdDFwZzonA zDxeU1qKQIYsJ}7BM~6w?qHCB^+NOBcjjl~`Mjm{?uZo^+?99_ysoIp6!Yi*>=TT|AEggc=6w~FIw^1VgXvpt|;;@ z3yBTcwGR%5!D7%F&iE!QP{qBEM*A%Vl>oE&#Ngl zurCNXyGO*xOmeV^V%2*QAO@UqSoOZkSoLOmj7jeTOnM_zCOyciU;%7~367N5$L=P* z*_in->6Ogh1(RNHSvt9stOt|c*YuIn92wv@F#(46cwOv_73fP$dTf3D690|a*tO|F z>Q-Z4NMB6+DXH6P`sogay=!_h>>bz5f3-7vojI@mzp)P;1}+-=P@unSAF_DWqkZTw zN+4l{>0hnE8-a zs>0M{$&Qvs5B7+0($5a|p)u4}|3;RLFTJ|6mgKJPk9M%}=>=8YjkN#F-uk~^zl%Ug zvwn>Sx$8HUS3R!ZMU-IuPT;$-@BL@j@05wG-gu?0e!+6bA1a_inrfmZQeKY5b+ey^*eQ??qmy zaj&i)2gq5? z1)nqp=bC~&nKc%ef{rP8l_}VhS>sky@FG)igelmQS>sYISmdKbj#=Z5vstbi`M7KL zy{!O?Ij)yS59^UfLp!VoV#p%OzlhwOw(lJ(-S#qre~6Dc29Dk3Yv6wY@TOL^kJ(7uSz-W<4Cbs-6=7076vj6X3*82-2 z0?Hmu8)DXbTz_WFdUsGY`LHRoo9XV;UrKk`Wbg}m%O-<-x}wdur6BpAP5GY4VEukt z@G(=c#T4v`44yCr8%@DWOu?SWV74iEo+(&q3id<>Kh=UoCsHDZ44TgbR#W)+Psl*_ zldV_l{9`T>@x%e;r^)jP=h>yAWFCXXkm7X&ApFExAa4mb+YK^mvW$$y) zA~B2796n6T7(21-{g{fz94M8}pi;)Ncd(2Rl1kI)4N~TUZVm6EW$yqQOI)E-@b=|z zXm2+jY1(UN>Oyi=V*WuW5@G!65*5Zd zSedO~q)dJ6gbKV&0{@Jtb_3r;#mVVHtbRYDi^Oc&1=mmFZ)RA|BR#|Sn1jslQ+;-y zVVH_N&v4hReq>P+s~>KSZk9h`K3qeZI2Kma-6$Xiz*;CH@!GyR^c(n_pI-?DYs;xnwfO zpn4T|5?&G@WOh_3bpY@*$pH}?M3eQM619c4-wSPjY_U_y&55Ini3lRttJSx-rjYCf zzGUq;or}@;0=^|7IePanqromAe&AR>y0yuOr8Y{daklnQC32&vZi(;rmOsvKlbjFS z!+2B5Sot&s{)Mq}Y}#0v(&u(&uk0)r`BHEyZTh=OxvkK<=&I9Y;yE}cR?VBPaM3z( zFQd$+_u9j|?~gTmXPYxcWrBZse?|+EP9BqHqUyY~Ide3xV}UGlrjHj{*2jNk&fJsY zYR(+&S}(T(t*rVzSTEO5f+|_o%R2OC{9lU`+lpn+O66n!F7X+^|3{|FYjsieTs4z7 zkry8%zWGcd>}uw@cZG<6L0SUw4(3`h>-xn?Re#MgS&B8mYW~X?U0t31Xai$t&BD&T zIH!xbMw&2@I!!kqMl_rP9@Vu;mLu=qk!q>BP&9hX9m5A96RnhYay|p5F2|W)l;3V# zH9zmVR9M#VK@q!eGk=Pl`ReCF&!gl3vsgc~4ls-LOl@lOXt+um%4BC4TU_moJw=R8 zde5l2(Jy6ulnY1y9zj{D-#`1p(L}7MX+zB(gEw>@L++-|k$Tf-Y(IHq-{{%XRh|b@ zA$5tTJhLwHL|BtdOXe!iSby$!_KodLx(>z`tLCFdDNP$7`CdL@ul@KE0b1V{q-`v` zxAI6?cn|+VuTBQy9_)^wHsFy~1p3K8e2bSOmfm@vYtAZ z?hsENLQRj@@nNKrjo3}aJcwdk%V}AX9>1@T`48|2bMc+sl;AH3jB>mmpC#jFZG)>q zvQGTB@wAZLt3w8g*f2{tA;&rA>axZMNxKq<%q```5$A?eLg{1v9;?ODfRUmZiVfSv zNPOg;K4b1ce3)ytV1UA;wI}{&n9bc&!yJ!-riWc>CBq>Q#M8fV((_m#PYGh z-+Rv_z2#-w`@K)d8rn^#(3ms(0Y>diH$IN05U;|~b9xh|D?y;LikysASUbbUA!!Pf z6pfwvQk}a+c7v2AW8K|qE6{>YDO9Zu#V2-!;$uAIuag8Q3o;p2+x^eeOrBp7^5(^+ zvVQ%ft$5(Yf{^_}nfz_fA0Use#d297H?0H*zmbYJjZWSc^p&FLZ>#;DZGO)tG7DigUc9}A{K_ja4{M8#Y2VQy?n|LS?oReOWsmQ=%68wD~!&;wz#te2HiTMLcZQ%6MN<5b7vN2 z{lAP7O4fBtyuPQwJs074t#lNxXp}_pKnL-+F2br%qU9&+0TfzD7!@h(Q&(gmQ5;x0vs4f1i|VGJ}lJ!;Rg* z{(*1Cb|1U}KWuD3dN73maIVY|Bg!pw7SE#}>#21ZdAUIMJ-=YzXo~32Jp^VdKtl1z zZ3X^;FO$S1I^K-enzP7y>J88OP}D~=FVGAKxxw=$;{^TMLBE%`*Q{p6*g0IrlS0Du z!rhADdP;v;v^0k9&G=GyXyhq;KOjcaS32fdFEdNxU4?N6d|RyeDL5M0AN&6djFkOR zFPpdLDg%c3UI?Sw2v$3@UZtW0QVgp-h7bUdcu$;1;ppa2`zM5RFHWr4U6~*pw?oTP z9JLCV=&wlpaSVFonn}pvsY|XF510I*% zQiROmPKiByXvq_XHP#}Nf9W!2NB7sT{blEH?0@$1Y1KA-Y zZ(Xk#o#?jHc~E-4_Y)$4{33mZqD%aCNh7i2?j*wTvpu7nV`q+t2a581i>&4oG;~0x z&PoY)&nzS$Q81W|Jm^c*oC++{JbS)S80=VK>Jn}-w>x}pHO>MOXk2V(aMhYx{!Gr} zm7uZ_rLx)~{>=c$YW%t8j7T>XAGzIbU!Ck~$0Leu-d^7Dp|oc;{Z@W$gaye6l8gA2 z9+Z;3%fFI`;S!{RY;do!8??)=b}Dx8DZ9f^7BzVGM0oD91}qf{nG#Ono7Aw5UP^_f zvUL=tDlDf$*HY1et)uzhH1`Eo#B_6f9k8_Kr7TV*A&PdqO$fl1A&r#B{x%@5W^a+b zYWnbF5c1n{AY{n?H$Q<@ITfAyP!^GRFJE3Y$)euv-^?MS`Y4E;JP)oB9}A}Tzna1- z!>|I&IQn)Q>HGrrn)*YL2i}WUo)U^~=J*nh#=HIYkbAn8*CZ&==|x{g@OgX{S5(VI zZ_$$5f_A|j;jTq~@-ohc!? zFnggCkQm8g`=u65GnJQ8*8tMRyUpK=$bMy^Y_G>%tx$3I6UoMAL>aUB7?VOg55Py9 zs>L)EAA_vjPO09!i=XMS=PneYX!u||@0Rjsyd=+_yM;fvvD>h7{X-DGn?F?U?TQN? z`nguYnLmubtd?0UZN#~596U>U2tS)r2K@G$)rYQ%T@S~ENk~uB5jN~LB7)Si=UDc< z4CAXgC&xZze;I1uS~fafdSs~m`!eo;j~k)d-h@|v2#YCi$ratbXE`RAcj5va@^NnB zW^fdPH{g7+qwMt%Dx(*ec-VE`4oAAEK_2Bn^?ie(f@Qi;DmJ0 zLkn@C2*16;KX3y}VW?kJAbYvUA0y(0WgK|XdCC+6zSRtRHMij$*28P`pI)L3i5m2Z z+V4`G37k@5B9bJ33O)p!A-6a!B5H-BZ*UdvUG8w2mSx~?wFn)Cqi^#~mN(+~$Em#J z$}joji``nHdF#}&kBFv`)AO4{9|@}KS^Y)#~(A*s$R#r0b}o{MiRqI3xDun z8UC#9#!z&w0Fso>2TYJsMZcji7gxrJ?)a8lP-6T0yIu=NzwtXm+Bk{ZY7covE?{Dh zYS`Xu%8xl5+giZqaJ;r{OV>*FyKkY&wor8VHoJ6&vwJ9dpk2Tv%r8Tii_q6Qwh%lT z^nF?bdbyIN*|B6+LHnE7Q4I7D8Lx8XA{~>$FY(}#T+X>O&Kx#d+#+VHocY~T;LPj4 zr?OM^n1Z0-DUYif!R;0C>iVq00fx#EzX_n zzX0Y-bgjVLPysO4Y*AqTQO8s9+}Iv~xqU!x`-=X0_*Jnwc4Ur>a)UOZRDg1U^47JA z9I0~0SBjr4LLC$yH24kfGC>cn0ow!is`kVo0ne({TkIwg2|&;Lm}$hmR|p6;IY=MF z5Noto-fW~8*=*#E?9E6(pV7BJKD;Xu-B@is{&j?-ozV}gIrwiqz9roL5jxntD$gvW zifs2O{Q~@_J)w1bN&PtfG+W%Taf9g~E>$pVr%Q-Fyp}VQY{}dKP}0iXQ>Sm@xNn0* z2m3Z!r*DjSzK?iFsIVsBd%YH2eSV&qgY+o{U2G6P0DsEhof7`iZk_3}6NjQJiCl|| z=3upaqc6m)V}O9k%dp9aGiqEU9+^>qJQ8tqZYTuOS?+$tS$)6l-{y8}m&|}?PiK#m zX*!Pd=l4Zk$cyb8a-P#ocPyK3<#bXKynvr$$aIWXI$vWZkYN)J&OKTTL$KN|oF&Dx zTVkVk8M!7(?dsNG7+X`rqF&XW?bV*YG4V25@r&U~xfP0z)f_?%=C^=Mj;W?4Rb$EL zBMYum4SSY^8k%I03Y@uuI=-1IrZx?Y!`7LgV zQd(aT@U3UZJL>dad3B@Q)d0W7MWUO=#ATn`7Ha>rmrb@d*Loki58CBZDe-7zLw(B>{;1mg>sAj@yiINaN*%te84^!13-_ke0p z+Ag?-u~pmeSn+9!3+R9@j!qmmCSKZB9ep|6{(dhpi}6LVB!995vo=y(uqof(&2Lw- z?j?eJy6(1F_rlvnk_IHf+k(e|xDOsEs68u7blK~KgW0O=-{mAoL+D_;DA!sMV_J3Q=*WnxL+}AbgCI2`kZM$n+24_?a_PjA^^I+n+ zuas?dx5ugB@Aea9-z509BP3um+yKa#wSd2>#3j@}SEppZpt@1?J%luwF+~NXoFVg& zcdX`Sy&x^cqA*A+LIV|&Hbk5$V##a4l6Q%i8=ar@jyR*S+7+$<$~K?w^uz#o#4eCx z+*0sg2!BoAS}i{UE78?v;mc9QOGpjV*esc&y*{mrbr!cW96|KqP5`kB?IpStzI3a9 z=mcyS>sbG=Gh_vCp5TQ169uF|priXdHAhFHNi2r{<*C`9g?NBz!A~%nm(Ck8wDghM zUiNYuN>bY?-=%l#U|k*H#T*g~K)#(NDgR7Yhjf8iq1|2!T>Z}Z;2ffB=}RN*%0`-e z!ncAf1T|ig*T@J~C`4jJB`d*;UswNV=wLD2t`!PT=Efk5Ey&D$Yle|%II$ufj~DH#}AILm4(plNci8eT6M7i`6Ct8smAF@`Ct ziWi&=^}SCopu8s@IeEL-(qen2>}av$GMa^&#t!d|X0Z>Nh4%pdVn}PLi;`lrh%5zV zqA>il{W8;v+RNU-NIj(wtrWeoGv2*>XVj3UZ-e#^s-asg z->Zc%BP7-Aqe@7jtAuz#;#R-?S5y#gxlpYvfI7`jcv#h#Q8KHFIr>o3ZesRE(Luhp z;xm+SrSy>7LQ=9w^3_7YqK9mE^^lce(Jpq-L%4`>xT}YJ>*^s{{BW1_k&k=SM_eRx zRZLY)8b=CAic@%s4%4V6yKyKb%fe)gVm%m*!bXBWimED?jW`y$>@@YPSM8(iRU9rI zI5%gkZz&I_mQib(6F(<{Vk~2Bl}R-D#~M(@ca<)ydX@B70%<~TWmEAfrgSt zW4x6l!n*EOqa=?3TbW;b+WH&2D21^#6YY(i^)8!CHj?Een+B}LckqCxQK(ojSo-3w zkH+KqVy`mxXsfAAe?c6A;K|eY)lF4D0LOx%1dG2ilz=jwMF!)IzS|xD3)1+{Up?c0 zs))BOQ$+9|M++Xyy>gibUP&n2YFPyCcPQ%xNZ5K2D5vuW!`mr6Z0ED^Yh@<>&D&4~ zgZ9Ue!xzE$^+Fb3Ll#2%2e z32l7Z@Tn)ZZ-D(^Td0fupb~$1!86<=;&0g2YsyKy%i$MJB`SJpn_YRgQ%jBLq_zV7 zX2Tc#d^>5iYTt3U>g<`hdxJ|4N(eWNVBo5pT%N(W#1Bv9DiAwUP+T4TV5%x1{CFUQ zaPnuWpzNXTRU9ZCWNUjVLO7TB)*UszvhF(i`r(Q^h7c(4@9OB%1;qMbH3d{a+{TWc zP`u5oV$bTgmJ6%-2cz@?~nbd zRe6)%MP62JU-m?-gh2!%)g79bPuv3FIjnuPf7c{V+xw z-KgqOX20A;|A6Y>^P~ku@tbKJPs#t?_~C05H1fb= zQ)LGq+MiM-ybq>Jzzv_q4NRm{oc(0Y7W%s-Fx$ zo3Arg-$a0PeT15wL`ij>8U4lBr&|n^nF+JWY%se)YARR?NvmjgX}d;v8~_ipWBBLipyBJm#v#4tyG)ISQuFc*-kNA zSAw;o#;-8Bn8X^sj9#{`EY=F;wK7BueMjQ zpH3jl6`2C&1dcjqjmXIrh8U9(hTg6e0OUY1vl}mrI2A_#8jLn&j5{1f$xVk#sKlSr z3s4j6dsjgXIRE|RROC<~3f)t3&S_|YV>P{nSxZb@a%BgWELg=tHE}Hz6IYv|B2koG z6PD;GXmUB1Oo0d}DPKKc%Xh;<{E#mgF*=FQyJaWUJ{z8CqKYceRkPy%iIP z%q`gT2Dl;%VRN;-nnUU*R^!7_6<1nvQHjY)sqXyIUJ`2GUWVCTv_szt@v23KJS9@M zZ>4qm%7|x6#Pj!n=RMMJ)=E!XXc69!xrvj^Vrr((%rU!}9jFJGeU=E|R zT2{(*ql+nKfN};Qm}=dc=~}mBlqr)>bYH(c9($H5jdp1(eYHAI8-vD>#@Id}rCKsV zDAon2A43|^T3gd*ELUJEnd!IpmVB|sfoB)oxohpH^=h%PUUf1Ek)nShP$2F2yEh&191?w+*C!IEja^BsR#gb?6C%PAI#w>%DXEDyy+C)+k zbJH6>DwTgRAk$yU?jeR)gT?)$KZb&$o5K>OWsGp7Le8`g!5XYwNNvG4bZTyWuRlI4 zD7h?RgG2Mp`_1D23`I`_)dIfl*w?m4JexdQ1HSg!Bz9zBf3zW_3X+k(QjMU%z(qST zuo<+Q;i4U8HE_;h3iWjuBC4IA;mG_TV>SyF4@UXXhSU0DSYoz&NviS}q+PpoR(15) z#-PFDQNDsd#mFV_TG)9(kxp%$jRb8xhxx2gV+|HFXby3E2w~HibH(DHs_j?NAr&dQ z$ZD!RhB!-^SkdTN%H%(Agu=s>N9MH}#PFzILg03~#-xO!>I7o4Jqfn;AhHIb|PStGu$7CcFSslfNFkjkb>M z_7EX7gONW2BMYBod@`Aca|ISf6Luh7+mgo5jngAba5cwY!p<C9@U^39RXkOh9<_8RX(o*BqPj55m_WxS#&W1{aBERZP%=lyF9u_6241p$Dux~#A;`? znr8^lH%RAVq2I=0(`4#;m&0;9Aa6mfJrNhK;5Rf^j=1l)S6j`WV{Fu1D6)g6`8g|a z`?mZ@>ozt)*7bJ8V)n#l@z?uS)qD`JUvKE*h{JhesU%;ItkVk<`S&?iT;g8>#0rI@ zFy5PbC7`Y){R5N+Z#dn~@aegfNoG`LR$m@*)AqrOowy z?ZOvBU9UHFX_l#)Pday3{>~|p=rX&c1$YE}YinLgzKmrhGyX_?j&>S}KdGIDqPzJW z?8-B~KaCMiyD(s{Rncng>Md%PrSp?v+GN`TfW$vI>ckY*ZPY0{h9c=Z-NBoeg4K(8;wx@mx^hN-^)Ndx--<=Xf zC{Xit*x%Qe8(_WJc~G~Hi|jY+ch`B?-v@n5>-YBiNXFh#e;{In-#UF=r{(wI5PrRW zkAQD6FVVXDh~HQ8>-rDV`&U2tU3-+2-qWW1f$X%~P-C`*d|R%4zw>w@mkho+ zmVJmVaVaz?MLMo~Eay9?nj!<+!vi;l+Y@Y=Nt_lcbRm`a?Ug}m>_%c`td_orM=<9y zz!i?Jq>M1zP`ofM^eZaTz!d?zeKYalDx`0IgRr&g)qXvq;2*fUnheen`vuu}GRGDo z@pHecKJ@$8QJW6qc-x7#s3rJkMr|L0(cI8?R^OU2j!3Iyl_KD8TlH^urY2S zKfD>D%Lo~W%sb-4g{T0u8inlXU)yA>G zaKqSsLC52uChQ%s^AXrt$;IfbEB~Fha&`7u!k_%k9@>=M$M1v-oHGm1J__tH@C4kp zXM#@Sd)s5+3*kcN%tC$@+G7g+4NJDsFXv_!7lRGcp3A~7PJg(_6DHqs``>#x_sSmS zx8Ds8qmUj&Bc01Y~WH@f2iU8ExKO_`hY!F@tHgh63hW{ti4C@AT+xJj9JY83%As~ z9g!TaJ&c-tTk(gKNH{h$e|*5+xOr{EmhI0N+-c`v&~BXcYIr}N)5HbDEsu~8{$nJB ze_v;J*o0+E*eHmzNDyb&UNwAQFvZ`RD(j3Ya7Gu{V+-uz1-Mq7(Y@`lz3t(>ol%9( z=t6sJp*>vjM8HKiiYIbj+GPj<-y8K8gUk5Eg{#*RRM8~+SIEXtqw<4|lC0v7iKG!0 z865a#7&V%e<#>behxQLRVb@rso3=ftNH^`S_Rb5k@KI`~IyoZK07PiIL-En>0_pxB zv-(o)V5v$4wvh_#IYubx!pfi`3-W5fUSZw(>}Co2M9pz!Ar+ZA&vf}Sw%laW%IvrD zdmXg40fH*x^A4jY|T7G%2<)Q8% zW4|2Xlsu=$L`rX#4uzszP8*3IE0VLc#gfe!{H@|Y=NKgtw-iCGq>axZK05~>K+UNc z;&*E2!;nf_C9yu|F6H)OR}ne4*si=osvsI*5}{nkIk$JG4+99Yn7p@3kpIr&J>DKf zVeT`~s$u8GV!P!2oT_1}+6=pE$(U%#b98v8?_I0;B8Vs4)e#t~u0yNoFn+uILI9tp z#q4D^_9hp$<}{Zq&Et4?QcGiT4luJcuHb9VPs#Cr4Op>SrWU0a$~j^o)mfoufOI&@ z^+N?u0&p|{f?PRyqyMGl-!akHb1>_ICpneK7D5rfZ)MFMaD=3oomzvwEp<~l2wbVF zcU*-w-S=Q^dM)&b%zTeTWHnSa=hcTHhGDw)!^Uwi)aI6#Te|fp#{wM!!R448+0f9M z??G;x;~|Ti$S52>SmN7WyN&~f0pIsE4`u<-J?sW}S_fpnvvE}hJk0qO#wQ&4i03I| zpfn~rgf#*N_7)5q*HV8R-S{Sv4h2 zAOFz88QfT67tZM1$Jl=f@ZtuL=$>LqAc%>c3L8D`!Wd;&Wil&kpAW~!dWI^WvYMLN zkpj*`!nA_E_pP`XpCOeZg=^JrW@NAHqyJJ|O3=>}{0c|cn*Mh^iYJuMd z-hSXs3{$*d<__@Y6m_8^U`NA2{k#tfxYe`Vu?&+aK=QFU}Ra<0;<<1MBnw^a}es6pm_35SE>MoVWS^5s#Q(YImx zosJM_Zg*mtWgeYt^=FO z`Ki7QQ#n6ng&L+ZFplRL{s(4~#2+G%Q*;c4mGFI4`-ki)xtxP!1WrYT3@2W7B!d(G z+KclrlbG3u*$L?@6-43hYFf&C^bFH!0O2EMuU><^K6nkb$>}Gj>U9H|_wmZOt)vbx zZAl!CJ3ciE*Ilq*st-MJ^G9l_hY~;@PeUY-@((R-i-o};fdh5`vk&N!vu~?nX%3t- z>o&W+J$ZAU37d9l5gDF1D8fDO=^P@Bww@54XBQ@5YS|L|At zf$!Xg{@HlIkCbJ}DdcciQ0zVzXmH_l3m%0?44EVu7Zmp4+CKvbJ z6R16e0d({F<*Cy1rg6_+iT8#DeNrC=D<9z~6~O!ez(Ux9+)(>$!su#8!3G50aIKTH zf?`_yhAwXD`IWIQxcGz}Rbzhs%#KBz;*i@A9;KD8*L_Q-eb~*zXElumWs;ZiPYNG7 zAu9VY^ArRbNuRmsnUi-bl-!h~0 z{^$Ej-40fy-LvKH&07PW4^@NOq_#W$UBridhA4%icu}%_DF!ehjR1JW_ zU#7sk`-srk*>F1w>=m0gSdn#} z^^kB|&4-<<#QcT_Sem!*Rkq}!mNO%>XB?<|Mu{7jcPvPo+5erY_Cpl-djdbWSa0wv zv3;rFUy-Z_VWLkkfj{czp=250jzA=kqxs01eML3m?`vtKI(}ApK>+^3E}Eh@oGoav z_bd&~<334t`Z?Mfyx>m19hl2qjU$E@K2dv%yUB;MfRL6?)!Lek((MNeb6){U zKWTT&$HnLQZ02gZy+FHz2R1Kj9*8wf=h`|C;$I z$cysj)s_^oX(R?*v*Pmz|Pr!_2gZ5vQLVGk9Y?kuC&1+*yMsVdPZ~ z_?Q5VyjKL0A3HPX`@)JRDHbqkBFG&dj=sWx`srXZ`))US=As9|?gI`~O1?-R${-VG z%lR)O;YFO@L2h3i;Z#1s>7(=eGL!VfvDZ2Z#&C=4)bX)<*(C^J=!8#+zKr*T8avF1Qc7BbP^%;YjrMmrCpma0zG zhrmTS!uIW+yu^286XNA-24?T}lV*E}8|uFa&}Q|qlenS#w0=(9kXcypWfPduN)*;j zDhs+k*USXFt)&=%40?~&HY@HhO$)vzW-(|E7>Ic^W!MQ9>-n&XQi?&AzX#uDxS2)gk`vPEx&~Aj^rP0;ps&e>T`9{~u@X0v=U) zEq-TUrbZ3!Sc9Sl#Y&YFTA?JBF{I7F49w^Z(iWu`d$0Z8-*sQ> z#X+agNS%d^k~>ys;lFgfm|3WGzS1n5$EP|Aa|tN!O?2ukOx5yg&Xo!dHVfD9KFBP9 zbA|EE#~3ndhAJMZ#c1o`EBbnfh*7>(1syiK?B{Whr^p*pKJ>+>JOskrrZ#(*#RF@T zw`z=JE$Pnrpr4?>GWA>({TBE!QFmX&2@r%L6E7xT{zP|Uzry~`q!tQWt-mrmxL9o~ zOQmZ%MH0{VTYkd)OUI(lInz-COiEY!WAU!D(urnoAU%&%P`lj?kUd=J@7E;w3O5Rp zFMAhabeq=Wf4LzeqJWlSwN+AN#Ay(hj-V8AIYsQrTCRSTBivCu$xS(h?2S4)Nd zmm1#8ypEyOkQau^Bv85gUl0#BDn7>srvplw3K8+KV)`+FK3yUO5DC+j*W|3>KXJfUGii`b#kkjTAI^E4kKkn7qE6PoAy7VD8@+ zwEG&rt7z{$L3;z@C7q+f@yYwx9w50};WLFJ?ecduycLdj2|5efV;1RZ8?bpADBNtG z-;ho>hr;$R{z{wYL_XEcQ~Md4=k!gwc@ER^YL1r*4z_uI`tCtC&w&o4&mWa57>JkT{y+{%FUyqMOws{qaw09Et4EfZE&~jdo}e^*_L9ighvI7;0UAw#6vfzhwei=6aG_@wUqIzAt2e))7c?ZeGu zveSmgEFb#OE>B6~g0P7@i+OO-?24p=Encb+OK#teVAW^FUW*n_-8^l+H2!sSiTc2R zi3kS8_J3?m``G_1c6!hTsDqS*FGhv0)rhvU($T{_*aD`#6!v3(3`><=2AV@yRkJau|5cbiKt$wfkRSTTM=b!}I+$~;U?N9&L<$sZz0>$kFG zwJRUGsYh0XdW`CMXThqBCk(Psgzc)?G8aKU1|Z55-~B%kWf1&506)g$yD!C$r{&%r z96w@9S|Ui+{JSi8I`0wv&`xPU#HbrY{TWFAf_Z-l zCk`vNzwfbN6~?Totl`e$HQZgihGls35zG-u*x%!>$*@i2`~N29&^Kvw%!Bun5;-W_ zt*qsjsNcvhUWb&I)M z%4&OGHI%Gyk{8fVl}H9(!18AHisld9`bbcz%-OO@%vq#)8 zSMRW@9iHjA1&%Z|)9AeBa(l$R%qzS&gI9Pu$1C8%5zh zV2nVF$fh`M7!zEl>VRl0P5We1%E=c7-H=TQ8!V3Kf4UQ$qKi zUJSSK+WLbt>5#ZvAug8znkRA9iy< zqbC5?pzqfUsqKA%sH2=DjN*~BNFh5(SuO`uGS#VIm*=x;xDszjcJ3xfIEuaRP#SXK z>5_FA{TsOrTtpHcJhxo7^tg|NgJeHRJB*+gjvo{9S6`h70V){AoTgY0hN&RfrlLKB zGTu2xwDWewI)ITFcRAix)~=`&(`84%f{OImw_VydIqf|I(Xk_2<1TzKK`|n(+65kV zSCWg4Gp`VtN2?dm_<(afyuu;adLW$k%eu1dXXXvdj+5O{v_C)u%f#6ck%$zVwzmzw zuA{Hpzop>~qX=&fudpi-hIIGk)`u)(m5Kgz81t_((K0hZDw&?z1l16!(OpeSKb+~3 zT#r8{xgP5&7ts>tQ{_W`xf{0b{B_ENjMwsNf>Oc3*t+J|WepbU2&m@!RO%F!H*GS) zkXOGimP`v9alop6InTa5cBroEVdh(1Q)SvJ-!~aicgC156ws~VbfVSUhXdj+aRuxB zABl`|hJ3-NK_?)YH;o`X76<7+vmvoG|Bljer6K6$K`>AWz8?*vvO{w6h{U3HIh7k_ z*cZAVx%@RJ37|Qt=O zaj4l?`Xy8G$*TvO3S4rGsY7*!4f?S=4^ha0Gdi#U5t!{u>|@;~eQmbyaBA%WC5YAF zUFd7j9-ZI2xN*K2aw^ubS%p100X@9cmZcb%dCYB7XuYd9Vnduy;Y!@k>+pt@`bsha zkulw6ojod#PlL`VL)JS95emnDyifIfW0obqMs~sM`R&p8QT_J!Z1#7V?C&->1GW&p zg+);x5)*cmsD+p`+37+{IRtLwB%82eH#Wn#xNw#oEdLfFerla&%xjN4sM{vkA{DcV>$+5@XRBot#u)_;G z`z1^Txd{J-la25bV+}u1vCicu-iA?lyB|N1M<80&ndupa<@gB^X2@#OvYH7`&-D<^=ab!IIfUTF!?>OoHQznlZlIqlnKpjuOzt6@n(_CrPdHIoHkjsuBD(HP`^!C(889f7|#ra;36i}qI;{ia&wxevmT zR|A-8ySRO_LB477G730yQ=KHTWEmE z>g=jjBqN9GJ)EO}Bx!ut#W%6|7hwF28oDu4BfDLXsYp5g{~JwOLqpCY!_bc4Oj=f( z7S7g6eN*6bQ4~c|@$qU-8|s?VwlhD4_QP{nz3*{H}gu`Wuck1`h77W zb16#+%83o=S4V*#in}#HIk8Z-iSlfF2I=6RVG300_8n=eIGS_h?SZ=0PW?cAjqM7& zk3>09eV~4HrGO~`T5RT3d4c19|CNStBA@CIp4-b1&bU*D@Ki0YW`ee(Stic-so+Ve zbzJ`Z!G^Fu0s7pNpH}oc`Gp2|FTpW}oIHkp*=iZ5l0}}`hxZ?v%f^vBT!pcE!9!yQ zaP8OdagJ-x=>|dh0$YeXKYIYbJ}dVT$zgM>{sC&i2{|BKP>O)CTCJrcMkqP5bSm3e zGi3gb@tK;g9u-I@RY=37JhmN=r{Yg(SpXFBCcV;^3_xL}zrhSeYB@tK6$xdWns_fft@2%QV zwNqtH(#(Dx`BCuo5>qDW?LW6a!(+yNdCq9%&-3pk?Je@9;`1e%1lN@>?WaXw(%Do; z|7EhEny5|wrH=i@YLoX|`S~z=BKi{VMxv8o6mZ=NU>Bk|4f=z?8?p5C0Rh?w>s zvX-Pi6SS>zU{N5Po2qLKi3M_oz4Fy&XXc!9-MBY7yQ;70v@kkywj3MAsrdt6Wkn?g z#Ud~+euls7frO6{DSJQy(%&@9vTzZ000Gzc8XTU4`PGJcl3(Yz9yv*-=(wKVyZ_6> z`Ia-o_8Z~my8jkQD}l^Xw~o8sCwUj{^4%y;1+O&M-IfRVqX4Wk09O?NuE_&jEdbXT zfGY|BD$HpW^9A5{2H>Isz-+lyfd3SL=?37O0>Cfw06!Oi(+t3r0>HF9KuiFRFaR|L zfVw=uL;-mB&)UtA1%NSmfYAc*r~x>t0C0RB;5Y%e(*O)A034PFI8*?xG5~vo6*eRJ zsoZKeKjE(T*9PE~0zjCFHULw(>kS)#)8wfs;pu!8Pe~Q08h{7nsR8(NzKTCd6<;#| z=|UCD^8nWhz#D(kacC$2wB!Mr1z?*2xVQjtSsq}H0NiE(ep&$d_dLJ_0dp7zsIV$bKXundgDO5|mr$oiT+ji7>m9kP3DjryXH)R;zfGm%`!*5r{v!FCdeC!-~TK*EP@?4U3bmP z0{cYopU?b)Dlwx%;C#m(yqd$Ln*0BltL6h@n~SS?F!#pys=Vn}&1kop9~4*fxPTql zo2@+Voslc7=C1>)IXCylcf$eIY-4bxH_t?hdUOB5tC4bh-@R2nkU?8Mpqf3oH@@Zr zs+r|h^Sk0|st;bxH>H|Ixx#9W7*Nesxi`Ljp9~zdk6tvrIjp#v7X|FVLEFjW-V<|$ z)!ZvkMN8o1+#BDY4yb0STg`3ZqCvav;MFXaYBqF8;WB8m2UPQq+#BD|52$98Tg}9L zHH3PMg}EZL2?zYOrt1$2$FVc{Mr+kue?K!~KgpJobza6Iuav6mw1VNK0+L(aQ}vl| z-^VD%z9 z1w_Io?3a7r(nr2W2bTXK<^P!SWx@RiW3cR)3_=id09I-r_zx0;c~)!Zv!2d?tf zQjI@XSk2V~s;SGp@y$D+nmeA8#y!!yDOA*(^ABFl52c#NZ_f4Ri~-d=m3!kGbwD+f z+-iPOT+N{eujaG=rJ9R#h1I;y&*BB~pSd@_UGk>i+&urR>COAWqTXx~Fb3_M{?uWe zRO8JRR&$eE&BdS3?k&qb^|c*P#ay?FC50-8pl78;oGHU-4LabJuT!BF^n`8Sg?umG zeqE^#0TJdP?B6}-1P*Wd7**tEImBsq_~Si@JI8k7b7LzQy?t zIGJzVt@m4=hdIDlD^3|i3-^xPe7a?s{9N2hKUjnj}R zr{*5Mj1V@Kt}y(=UisR7Ng{|!hs*e{Uo8m7-n51b>i%!Yr;hJpJ|l2>qqH}FRz!I? zex|p}+bRz?iZMVAi9net!$NBKIpYHuTB~;InY}rA`VafMyc={0#m~syaflXzUnxgL zBws?7jY%r2#?@BaZ5&Qa&p6RAObVj3%s;_s1ihxqWeKF~xlL($VEdB!k#tCYmh$F4 z%CBd7vUW~b_NH@!5L4EC%`el%GTSNh)VYtB*RrBI(jAoM+2A--}0UF#T(G z7Rkj#kRG~ek9->15KMnv%R1GYaq3@4TMe9NJ4W%Wz+ux!S3` zDwjgK;f#=fjGZK1Rprv`h+Mn@xyQ-f!-*u5?Xr6a_Q7glv!|AFv<`h)Dj$of0-ri^ zkt8wLreuWCd=t@OwM|Cji|>Lu!2gEEUf3QWRk_KjU4=cMVrlB}rXv{MHcm#4??hYU zT`Gy20)3Ar{}r&w8T6};6v2d-w3G5twav?A^_bwQUsGU^Lr_4SmvT$u96gmz0Mb*w zX#V7Dy6Uaw$(YpH3@tL+C6a&I-cpc1ob#^V=YO^lrIOWN~e(sP)T)4RNK5~fLAqd96P6}KPX+LAGzM*4)sJdG&}$ z{0A6}0``d*UMsLG659)A-kSsw=BAZ4%LLQE8{U=SKh>ZXJA^;_&~tc{39~i}<6HRB z-jWFnE-Y~om`G5kWz8ApOk5PSUm>8%-$l_Db;j7M+lhtUN&5rL4K#qa2j>CnsYU+bmr9x7*o9J$z` z4#8ca6+HNjKF}FcTE?0@vEJRW5?Zc>I^K36tX|p6_WE^m`X%sd>n zxe)d!%}C?P$GIhaJ6->PF@Hy!81PTLHhEN_&wEW)0~m_zL1o0relC>NAyo-E8z_xa zxKZlco~F?_i(eb)@?JyzC6oOVo#bg~QJ1EF=phbjX~4s|S3u9in_&Bt;7(ca0j2yH{-1{FvY2CB{u^& zda?B0sa^mg@%r~RR0lmTVKZw1i(L~*SG4HzEb3n%T{hUirxCvj(r4i}=dZjfk&VPV z$w>t+SsdYT44M(}Z%!_UFj_6W^pu%0SckFmeW1FB<+91`3eh6$<$;)M^;ivo1K)oU zv$y3C5V%}+jMd!AGHpKq|0KXad%!={2jCybSF$JbA=oR*iR|d#4N(wEEl45r516Ck z{c*Z1Iv2~NSpjUwztgrrmoN&v88G%HXpUWQE5@hH(|k-`0l_$#T|!-`68mx{s^`lp z*%YS1@!bY=&>q1trtM&=980wFY7bixCotK1oV`9jX76wMeax9u8gtGBa}AxyXEJ}p zysslgS*Q4Mh11pku>a%BCUJWF2oAYT9E#e96RSN5WY@|Kecl^zZ3yE9HfKb*3J+Ei znnAe2`}({Pty1}`K9w*r8LaMP8ze;)l!BB^kX_Z^c*@RyQgS<2?Zxh)&>r7 zppTqGVo3I7Gja!tNXrJ#9+9I*l7Fku%i#<{lO?1e#=gdF1OLD=&55BzzAqZoa9AY% zL_m^MlwHHlZO&2KttNeh_L^-lV1CK^WVOZV2)l>AXWx=8Lrcx-$<==r`+ze7X?7>h zMHoPx~gZvI}vq;w-XIYrwxPXuoQu{}-GPkYh%m3^D`l0sF~- z2i)OldIloVA@%Qv~R&BmtFnhoCEcxNc zKDz?ua6$4&)@pP1#G>^8Kgeo*qHnA1y&l5TEZ@ueB!~1iGa?|_zK2+gEqerI>L7te z9(_ZW0-Q0=Dh-*@ALLQXAx`1lFRTCmKmV-5UD=a_O|K-VH(5?9p|ibYP&n)=^LfRFsV2{84KhjW0f>X8-K3$`~otZrr;?2w+*<$a} zkPRbSg=cne&YK#>7tzyCV&p#DGzhZ(|Va0rT0N6EfNxkrZCJ*3EqC*zsH0( znz@3_e~l+#E#Dq=LOpnDTdTGNN9-kP&kBBOZ<5b~RtPK|>S=l0naS2|++c;Cwz=ap zExUS|N8+m+tHGgmBe}idtd>h-?COP*5v0qzP$$a?tq~i(ZaH4b0Wv(1%qko?w%pC$-%6DX78J>Q zk5mm}{w6vPM(k2ieK>XJ$i?16Hagi=u07U!74&=&KElh8&Pl(sjAWN!9$3PL*JRV+ z^ERJ3)TN$|dKhb!P;t$k?~eCbX)jEFXa(1W?u3y2j%bOk<31t=|ML8r08n=a zoKV_3mR;JA&OA;CsIy711;?*o&nS{nc^{P=^p=-ma&tl&K=0xR_=#@pQhR@)rqDHQAJUI_d{ScJ^&GACw<>Nm$iJY*u= z?@*U)u-d|W>taCtHZ#u9N*RF6Ipn75(k(9Yi*kZY$|8P=n!-vQ%bk{GK%`E8x7GFy z9-E?uaTl>a?7g1A(U3?$qLXL>A-kLjGExQOfu?&DwFT_wA!q~e13S(0s;6X%GiD9` zKHxWy>P9AArYz)?JqXo@xod>k^krT_2&WA+%DXWz+WR2G{RYo$j{q8SAW63z-D*~w zh*cp^2AuGpK*7^Y&`Zr)E{NYZ$ggzeCMhsX(oZTRIZ%+sh{I71|8ssA8+~DT1$i$P zCXej%F3O%%yk1~JNhR?p0=LN3UEW19kirFR^~wo&o!Oz<;llbdH8EONi|7;R*YC7h zicJwUg7!$mnhL5FdC(l?&WMJ25VUWWb;xrM%TC&CwMfombcv9ak>FyVwfII;?#7or zB`!NqSl7V-UjVAdw*`E_2T`92Hk9AA}~fVcSiv#sO$h- zE<@O6e0ujVxsSZ0nCVF_RG;Rnuxw-eAmjYRgzB zr?cW3f0f5tzB%YLg2q1ySgRfijQD4OWQ10bV`M|5CvEHrwY=-ZK%Gf&_)eQU$q`lQ zNV@P38oz_LjGY9B!vVxPMCXC*GXR0dZ~$JA!`^bLZwQ4}>bEqGC=-LcwW)%&PbE?z z@eLPOucbq^qPP|8Z1nq&4CeJ)?2x<6K~7h10Oc;N=gt!e1Pq;#;#6RheE;+APe zw+B7lRo!-1uG|Mg1?mqgP6 z4{Blp`5Rk-43Gk?6tdAdIB^xuhFgRrI39ZggR41cXzL&o zTeKZPTDB095fo+=cLD!XRH1~*(Oqw)cH&k<8W6+pFi3L&gY9vt2T3L}=Liijav>^u zBY|cn3Cg!W=zU)j3)(N?Rwt#3MjNL&o($xV*`dFEUKUB+%ok)k&Ds#Nvrxu0s9xo; z#pqz)65dO?`hodRVQH7b{9fmIYIHSZxms975K3)xO9@LR<}@f9+IPQq0_WN!|5Hj}@B{jixF+bC8R zd6L5O-giL$sPL)hc=Mm?Y^02er@dS6=+6XxtOD(cO8MNe*q{ z?Cm2%_Q+*&jI`)w^BG$oOYVxO_|XyYBZbf%$1tL)H(||XKIojR86*bb0gWaddlRR> z4CIX6m6R8egjRE^X695Cs8n|#k8&%fTpzn~mNFZse?paJrDWd2jgB1QG5hJ>n-JGx z_GieC1a2E?!D_o(G=Btr(@NF|yEJ>Q@D|C#0}lv!%>0tSQTut}GLj>d!w5WJxQmDl zhaTd!VK8dBqoUsLQ46m!qxs!`Kj*nS-+j*r#+yi(-^=*q-7+OTa)O*Eo~1&l{cm{- zzfi*kk?(H(Rd>B!PynPkW_=tz_#B~L-d8Xg%QF&q8|&@!1Ga3uqCG z%AmT}8<3s0Fcyg`5$0r%vA(a-N($tiTwR-KwUYNDA=+wwmf`wp`X=OMH{oM`y;8qh zwJHyWK8d0TmEsKtA)jpj7iqj^{1~zXI2iloTxjz&X|o}px5*PFpNtPlPwo;qrf7fU z1R=UQ6XJQFOFXyaWuUDip0Gbd1j0V>ue|*8yvjfDr=cfu^3TL&p01$(Eoi5^bT%DLgGZE1t01p8 zMAFqK2JD2;+KL;=;CW;uJ>x`pK!lntLQ2Y@E?ePHOdaTl(u!XDHrFbG%c*Emk80$a z%F6}%kv+uSt)%4A?N#WHix3QM2yI|TEj^Z;HCYaA{Zx#BO0+|gvq6oT0*6fyb>bUg z`>~k4Cqp|(;85JgBGKud`-iJkA@|rs{H%N0>U<}Mm zR7k_WK(9{K6+4*-E0K5tFp2iYU@{4fC7)A$pS-0I$T)?cYn zEsF7itfH^c5YoGj+hH=gM$j9*5b4_%@^7hbX|?=ptH1le7b&|`!jBd?PL?>*e*b>x*3U8BK#x!>Sz zV(PayJVPV9wfVE=!y!ReOQ^l~qd&+JQjbJ*=q_Sl-*ie3&@8;%`xhWEFZKRWA#tTZ zMd0hbmS1>SBv_+lwNa3dd*=yAbKM=gSk3DHyPCV+U(3@jU%Ncz9{?-z0M`pZ*Z|Bc z0LWug!gT_0ssU&!0Q@-*@FxNIngK``0G8(gt`&ecuFy6#6aZTC0L=oh%>Z0n0Jtm< zFh>AxGXOs=0Q`F%-~s_yXaFJwfFI@orVGFY24F$~pgs@q0|BTv0H+oJPRj#)M*vPV z07n-9ex3)IB>?;9YBxg#fLIBaxo034YE80Z8G(esUckajwyc)qoR`5ridWpSUZj^3Gk%scKrzFf>R!IBd3 z$NjOKcr}OTQ4-T~iXaClL=bVp_rbEszj*|ML{5?rki;qI)JjQKzX;98;;{d@%ZKx0 zF*|(`F?yGiKVeJeI?9);2#qn%7A=YF^w@4VIIDLsMz{oL!fpW-c#=L)NcOl%R=IaE zf1-=aCs{{&7x5>$s63KBmuLm#rZC9wma&+FR*i)+liV@V{Q4&`&(=uQ^B1;T<@G&Q zdH5CU$Volck!QZbZxY{^@{^4Bhk@bhsklDUymfc-Nzx#Y&Yv7WEh*X-NdL&=-(^2x z#hw+)SH*$4gR7pXzXNrOb>oMD`CRZ=`rlwuW<6<*8oI7Y ztPcM<+%ea0F5`-P5{>WTmmxRW9zGw67)k|PisCZjrB)mTTl1SaBQj*Ctd)ltxXzIP{r6a)Ot>l(~r zXyVG+xSk8zQYq9ekd~~b&_($|zaHUqyJ3_$#b3GFTJn$tHZ^Y>R`90Z3Q2eIL$Sa9 zMTe?5^bkWEbD&(I9!_yazfIRl?Dexhf~c!`}$|17pqXX4^W{1Fn9+ZBu9yqAXj*^vE0p=C-~q5uAovmP^Nj_LAk&i%IrP zcgdB5RIA`Hp7%f7bV|^^Nns}0Eq58%+ZA?-y+mQN82ZRtL}Cg1f8Yo<$bv%7Z7RYi z2iQOVZ~vueE?P_Gsc15LOTh2K&-BMH3*PCaO5E{;KLr=VxG^BGm{^eJJI$gQuH%1w z(`ZyW4?ir9jUTFE+g?AHFM6-}9V&GN1FA&ZpT#rjQ9TyWs1U@@;!nQ>*j6~)U-8We zfqi~oj*4@&tN6vBwjt)62%oto9Bm*$fPW@u%b_|CcZsZ8b2TMX!EfY(pu+9h z=C)I(dGIuGJIvwFaD1GIMsjYt#Qft>iB)supoU}6ir`n7YGuxn-{RFR*?{UhMV<<$ zYg#aTjK?X=1Iyl*J-r}L=$1vy=)~1&e!$TJM4;v8Eudy@i8y8e8oO<>#fa{!Z-5o?AgnF~+vkp@egm%g*)h0@g~+|wee$m{s*cpGzqdtN$JKopaz{Ebs{+1_znliNlSH-LO}B+Ngn2s#PNYKxrJpomY`q8Q;(AEz`SPSL$qomtTkc4#tQaQ|nJq#uChOl@)HaD!r>G4RB*5kwQ zXSK^^2CGqgbOrpMh3);xE$&*OZ-3oJb5e@84pD3ovtQ3_MXSlXcHX(_%NIWpk3SAu z%grY}l)-9i`MT1{UjYifnx-Q)^g%A-8~Y=??jJ`FaI_5QC#Za6uiWT)dGy4U{xcHf zJNZ#L0Lc$B_XD8_BF`U&?V(plVUkPzqXv%Tp4rL>@88NJvo~Lt8ddc+e3;(OLNVmq zWS+Kj`$xS^iFyZDJLa!@lB5}mcaw5Lo&JK(NRIt}JXi&BtZ<_CO974s@;rfR6t^TB zo)8StS6|^wbON;x3Jy+w3rvpsIMk}=4d?G z;z%sy>)nz3C$y>uzrm1y4?)|~T68A#e%1;rbvIO8Fi0jlTwcwJBC}7< z^L6MJ!8)v$74GH|<~=o7*O}Q+>wY6hcxF%LY91;Q>k;j^ZoBXZ6v3smKyyjiY0)_l zo<0mRSFY{)_VUfL{(N`K#jKCZ%xwoxH&8iGWqqX0Z99=B#7XK8)hn`Ka^yop0^lF9 zS#+YG5{zcApDxv~29|6(k+- zCzh8a4+kxD_j#|*UUXqQ3J`ulPs*+~7L1>f3cAvX#b4*~8jLl!4r=%r^Tvrme1tEw zpjU1?u;|WtmFX>dY%=(TxVuG8hK8*f0#4Ztkk76GqaKs z^6NEdKWpgi>+{(3<14QUdS-QE6b;!(W#l+Hl`pctDXb^(p!AjAOV|X~eGb?ldzLnW zCUi`)%l=IB+NanRw{l&9LFiU#vMJKifEQU$vWn1n$@q%HKz_Xrc$ceA(SfyO8g&+M zSTC}E4u?tdvfWrg6k(Y80O>C36zvnrM`y^LdK>G&Y8G{dHu9;Qs6{Tc>eWQEU{7Aj z#<&qyXE?gFW3fz&17P*yOj<^(&^``LjEQPV}cl>|o&I&S6hS0g=Zrp4$ zQ!$x}6U@SMDS#~S{8dAhYp24mh9|~I^?mO0lja)_VYACK!7{1JaM@!ngh>(in3?2i z#=f;!mv{)uX8B=RKrQ6NqMy9-v2jQR=(#_R0o5-*`x4{(0?Gm&)kP;q(@ zjO|<}NC6-Dj-Y)S5f8F6t9D~bz0EjDu7++bn3PT&h2rE{{3N#MVms&2hGnbfVl1J7mcV#URJ7?x|cy)9= zE9{x==&l7U(6>mdFn&2Ex+Un`9OM-Qulus^xw4^P)I5H0{%`;CN3-8jF=V881{GW+ zhw4hq9)VAds1**`P3b^zzdA=~d4YhcA40q5^Rp#6J|d!(9(tWdYD zH@Z|Cd#pAR7qJ+I{*I48DSzMsaT(82fIb-{DNzx#hzfg&bR@7q_kog$Jc!sYvMjp6 zHwyx_i=-lJIo5LZpbPrpw?42|Z5@GobhkLvi2Dt8drX6%TZL(P-cg~BS#7mK+l_?h z`Ls6H-guHa*1(}`XC+7*U@Zbh&<)2q-OjrflZ@s_>3ftcbRm1Im73)acu~iN`^c6G z{+9Op_a^?01`|cFH8CBdpa_)oJE9#2CIH@Hh$iI2+P&Q4eS1yJ~=b4%56axLR? z58J2)U^Y2OyCFxHM){M}KTIHC#C`3jT*^xkLWvlJ^OAkTotu z(`uOo*%Q9QTDX)u(1GhGc%hO*-vXMWQmu^FSM?9fOq9ZLt#%hc_7J!GIYuXQ1^{eI z{6r;-`ERqLrXkbDo1g*lKssI;VJAVFzFr!l4D9>pGlI^T_E`LXF_f>9r7{&mp6d%b zihcJY5M8p+L1*4|lSfMk=8$K2XnO?GpnIYF!q~<*iCf&@WdDY7!#8elKLwgyezIO_ zZsI}{Qe4oRyH0U+-=jt1G{{i8^TVki;5Ga~1CAru-CwpadAN9m9%ty8teb)EpelIa z7x+lSW{?gIaD|_aNonsW;oj`$`1JUDGF8V}BQM4ryIKaT%qh4^nSlRRs7*)oQ0 z)q(z-t8)IEi)ohnZ;DG3$KB$@e805BT?sgL1f5@Dym(cu@H1J%!EbrgNAneYG`ES5 zW{h!py{7;uR7XsT7sE-4dq6Z@wkDeX$spL?d%aP_6*;@JA3tSBSL`EK$_f6b z#bu`K_*&ICnWFdE;x*I7D~y$8$GNYB_!+-UaYt%+09*_dPM4u}KmPivF#vZdYF%By>v!)HmP1OYmQ@%k%L7u&cyl1T^@oHx&(14x6N@lz^x9aSvzDbBizH z2gSIs^l3B(nOapU_+DQ-pd!~_PJF8~wMuB~9t1{qaNirkZOmGeIa!`-46ARMd`|=q zaqeKwV7hvkc-Xwf5@U-_;U$RF(#z0RF5tx9=`ZN79LHxTyFtV7SUBGp`YQMkSE^@n zs-O9a7QHKzJ^})>75GydvyE`pIS(t*#Ha!c$?#veiO8xipg^mof}eAKC%8L@|E$F$ zdB#A$zQ)CY(yH&CiDd(~RyWuJe)2w{mj z|9WX#qNafIJW@HqF>&os4(sJUo-bWy#Jia3g$eP@%4_JP{h;C5a z?F#e{8JR<-i9C&0FHBFv-)%Qo4N7fj;1Tx@$tIa zWf$R*r?h{VoLvqe@F7jaQeLOdunf1JSFaT_i2@$ z-BRNtG!>KqlM2ek94n$fsd$4^UlFKX{10AOsgM5$ks0sI zo?@S?T?2it#IHO|wf6L3u%#s>*&+BPbu;?%PxH0OdM+|b%Kjf{j~oR!_DE5l#q6$# zjkfiYPK0_=!kNeyIxI78I(!P9`mS^;{(+b!Nm$+6Hv^=@!4q8y=2mT|1>0-?{=PE=*6$h#s}h*uaeBIy8nG&g)V zO%FJY<*7dV)21Z6yY?Atxw49bI9&u>*NSm=D}BP6^UgnbMHc zSb=a|&MobEh4u^%hlL=>`GHs9U?jk!02Wn-+iy|uY<`s-V5$dBm(_D8d27;Tj8a;h z#fI4K_da_Zr&MjlH(0@L(|ZVqH-InLa4!$7XBeo-) z-H*K%cX%uHf-FcQtP)c`4gZaUm}{Q~x7N3=KSugzwEi(?mRM}ByF(WLZdu<{2JKz1 zmm$&~W2_C2fKCRYnMpaWrUljnoh2U^j&4LL-b4 zoRMW|>Hp+^gi`OuL@A`<_f3r~CNZ<#&U=Je$tWX7(iju#abIp>#XD-yoch9isCl&v z^J+iasxhq|@nv?^9eMS3-31s3A$GC9`fFY7hPyZFt*ExL#G;->J4W*EnT{Zr0i4!1w_iv0JnRcAsAW z!%JlZxT#)hQim1QJ8SB;Tu67_8C1d={;^(sm2#2PR!+?Ybdi}jLoS5XU{K*#rT$9o zR-Bfk8yZz4`J=oTR5fD=wzX!pt$mBJK~*gM1a5*}yjx=NcaeC7&*P!A3`f0%Ih$Hu z|BF2hhrG5&NBK1VP-hj@&=f#&M@wOB)y8p-{xr#wzR)^n!bm# z<0_0&D`kE_1sg2d6j9%nZ$W$5fd1mANd};x2XTgm#tGj*^9J*Gooe5p$LY%PZa$5Bi~{Z! z$)_PmRmvlkjwX?vg@qYa+}l>_N_vlsC&gJU&oC+daoc0V6hY0>erh})8E;7Vss88w zvUV$V7Z3)^MeWy%(k)ocEiCv0{L8-Fejxc3GOdTZo60Zam@_$>O;sAzg+GqA7<}YT zhieks#}|1-;5+L!0X7kcr8-!6gJsSxEh=@rV!7{}B{^EyBeEZ?HVKS~u_t5TGib+? zf5fs>gkM1nH-i}ZC!F~q_O6)olL0wrp#1l_IcGRBQ1Dz8itPK;{FUENUt<5l_ciE$ zy#brF@hu~OL~o+bw<{F|6U z93jwcw@ACxp4A5~Wd>jZyy76*Ea{PqJ>FlvIB}v7WSqDb3~D%1vfGJr+k1}-Q1H1* zu6IwoUh-?^$(?6(*s4ovyG+f4Lyp#l*GQ&aqreX7okafk82m)OpsQ{2JWX6oyh%C= zk{3)5C$dO4PQ>((9$$UB5M8~8u^NKZP?S7# zSvC5Of%)*he7|cxs%(|m0_L0yVoDyRE%Ouo)7$iQV=+8j)I`rbp=r;Y$*!qzvgA>@ zag{VP1Xqbj?OZRyN>0n0Y`0MHCfj9}+P<#%cz6_WmikP+3^_vk==%>T!vuwjaJ`*m z6+-xm_q#I-_Yv>?0SRj&^8nkR2P2;B1}eS^?+>Y1WAQ`nCZ!4*;5{gS?HC`H-5;wzuH566C_%W*N*OrNDwW_V6oA5SaZ0E)uH;(yMqG z_G$w0Nw{*gNw{*gU3M=-S~L-_(!w6h3yyb1l%p|C)TwJSRPjv04&A&+>B^fKYElAt zSGjW*Be;Tx9f(^CP@c1i#AB8v5URn`wR!JFT%v+c|6dUM*>@emJQ4a&vlj`3f z37{6xA(R@Z`X5ei?K5m$!Qr;$UFCNTjWk*HYCYDH@1gb148=vRS+(IMiK(v6p+Bnr zK++93z6CeR#3{lvdQQ&{ewHvU{tBeHe*$IDb@n8;m@FO{Dx5~`OIFX{Byuvi^>!^T z)FC+sFA;x&a-LgDe+mZ9tmh9^{r!fVa@_do>}opR*tJNJP`8qo5=@@iDID2HP3xj~ zF0#!Q@Z3cNjtJowXnV<45bwkkm|}d$k5PA{e!X>I{$e&}x?->dVEJesrj`Xz;vP+a z5Exy34FuRqWrf(lcB7MRcnlV$L~ZRf_YkSs@Y4Lsm|y41f^mi(ufK9ZVQ6hMD^aG*o!tWFk_ z*WD?*9v4xbTob5O^=|TL@|oZ=&6ssW;`_5FxcirE(a9@hdW z_Al9E+Vd~Oxit6Unkf{4=mZ;q3s`b>6BZSf*l=TL4|;ZuW?RHR%_r*-jtG>5ZTtcB z86NfjJei?Kds7X+u3DUX?L)-LA>t-efCiwr!$&Z=QzQgrrDYy4jEtK^%O<}G$2~#^ zcTze1X?J693BkMb9F|ns(s7$TXNLLgPCkpR83@0+0Dol>Jh5&eKiXiOMe@zEnKEY( zse=mlmyhBojnFz;0(Wf1YKSv$t}uRA2Io1xH?L>OIwLWJqizT>eTuGSg-mhEZh;$> z+(=_s5&r}*r$aDslSboM?+n?-3)>^mCij9G!mpPlZ4wlOJg>6krvb&9J4P=x?Oaeb zT)_o@5T5eeLtd9cFlGfksTW_G z&%;7f$*&?$43bd`M}Pc))3>luBIHW`qnSN+*$veDmq4wueAaTpy<%`)50eF{Gcclu zvnhjQ(o?35b7SGW$XG>tS~}^2VZC_W;(4TY)`rIE$})8bJB49iRgQ-Fk|fjvnXiY4 zc%lr$e2HSfUkUT|H}`1~^YyW{WD2iINmDdHn3f4a!jlVj>sJMKD@EtYsC6)Q3xbLk z#djGHpq~|*Xh35c7`Bk-6$rzGYh@n{UBCrGp! zu^H2Q@Ki>fd=H4J8RhFzkkj>an`;>oS{e5hju2p_FJcfyBHh~XAVaW*_N;ap9~{eQ zPtdt!L(qOZSS2eZ3y%t3 ztuIX+CYh0Z#H?pef(alwz?B~V2g#unC=8FkOL8EEdIl#}csXGWVR|-iM4OL|eM2;T z&LE_@4cOQ@8@YIY*fUn{!zy=Tfb829lJF>3-j;mcqm?8XmDfi};-kWAtY#+v5vhDb z{@#Z5tZ6*Q6bq;8s(<7uY5JbT2X1qjH{tJw69Ltazq_791V72KcL5K1*mfpK!(+&% z810n|`MF81v6lQrPGvK?rOZ8~zGM1Zu5q`j5!iCUH6qYvX>8puc@Mf?zg^I^Jhj^9 z%9jRZW3>KxYFa8+$2Gu3w^nqQ1@az+X|#aDgB$BNl%Y9o*7M>538dOv$FvHcJ59 zJoj?Y=#VW}%SImJaA8|}`4C+Eu0Aw2c+Lw2^JA+-xKi9pNe$`&2Edx^N+(eqDb4CmImEw2(e6M379&Q}TWQ>W$gEtn^S+0`zR1wyX&I zie)H|eRqp@m-)IM_O)6hJD;`i&-{(q|IF*_|EBz=Z-2Xsj2XiI?f=U7c&a1(EHUC) z^(S_tLDoOec~+lQB)s8#KxL=M#h~fu_10Ck`o3*`$yRsG(pxT6|72WZ(Wq=h9HlaeIg&KU=40R zjsm4S5zN)@l5Uq#l_WJfe0WuTSCPCVFBO@(gZ$=2NPa%Rvgm}lbJV>6RNo3Bzo<NX^1XgJ=7%xBr)aL2tv0A^UCi^s1bDfymX<(qmSfoi1BR z@Ri9UEgb7?*TVp+QJ@znKh(bf+&B@6&}>&efO`QRx#vyHNzka9@q}W+3SJF84PAmQ z(=|h4(j`3)rRlq3PZd=(IwC=qps%z0Axnf|&pBav?P5v^@|iC4C%y^>Q*OqG)phU9 zEZr+pd$W$C`X|=0hU*)~f$`p5B4|mqpX8qDJ+nrdQTLWSpz$_e%UlfMFCVBBct@H)5V;tW%()z9^=A1VY66NOS z4P&|&jj1{k;{!Hyuqv;U-8y}R@x@V}oHgOJ?*r7(!SQk|ww*-!i(sd@G%ei!z9N^{!7>4ptL zuRG+0{h`bU;pE}?)P2Y(%ybK^!G9y52tR;VYY#CTgUQQB-XOB-co&ZAA(80~fpL4t z;uNsENdFIFCc{tX{^SPyQgENcOZHctw31AYk460ZWvCM4kc&1%G~^@5fW-%k8kpj8 z`GZ7{HjW&5j|tlyfj*M2=OG#3C1Sb{_DjSQJRlQKpo-XB)x-qtxx+#>$q=Z&m4QD$ zSUYzZCyN>s5JZ1=ZKw73&g>v{6&c0k6}gIlyo`ROzrTo`>+6nf8Pq?*LN;%<+x6cmM1_zI|(&CUkt}`>3O6*yGWzukI!z)n}6aJwzu!))O z!)qVfWc)vggo>pbMq;q+3SZnk8{B*NSjW3KHe~;D{Dh$0A>C51uERJ|o*bOx>rr^&Nn91MgX60wrK45&t3=073|}1U zq}RVad~9R+xXx@vz=_sY2Wq2(tFyj9EzP%Xk@+f`qyznV$X^0=Ad-TBe|slBxvXl& zt1}W`WX82~c6hLF`c<++eGhX9bOlG2%kYJq2Xrc$o6a4SoDkuZ9j9z$$nn~f)7}X| zVU5XK7QpSHoV`F!QSv%<^*xrT9{0HYIVTDvN0W>%`~BX#P7^nuHYrL9h{e5jcxB{c ze7imikg4jYZ13z$c9i4aYfanBFSy~yCDyZVv;71PHFGAAJiT~6@~|MF=&pd%;CR#j z=3%c-``C&-CoVOz-JZ3di^TDonHiJ}9!a;ImG?_(sOC2ZN7KG*r;4vn*_v_BqMr!Z zv0(ag6cHbhLx7E~K=fPMs>ib@@yGNP{R{d-$_S^2Pp1qJ!ML44&r<)aCL>_p z_C;o1Te)yb7#Y}{nXH9ZIk`$~O1-n$EdhJVxukJ9yinw*0eMIc_Gy2R%+q3@G5f7Q zepv9%3R*>C3q|(!%nn!p;fYA4LsDsxTL_pb4|gpPF!|>M&d2ABIZIRqjsLgHsY`;H zZ{qP?Lcg<<#e?F^{r~|dEhCVfK}@xcml6Da=LRX#O1;P5K=Y<2G=U?lN3#H|KQ?3 zvm!Y~a^`K4in15?FH&^DXt|vskIO7cmJKK9IX`UgQpdlP6krf?)n)`4eCscMT0qLr z_lGOo7kG<7wzOU9@Hg&x@izbdVbZ>w@0SpNJi+q#JI_t~eya6K%cG^`MgH=Uu^bIz zwY(0$*L+1~NdoVQz=Wdr_2tcT%SxJ#4mZyoTatJ`OZK5+d|4aoNZc3p?@6q80+5=S z9kr8&CGP+~4h#D0E3DLVIwrIhS{$?AwAxNLd}VvsnO+W52gwY|;q~5W#ze{KlZ3== zZhqBcymAwkbC@Lf6faSA$CKS{E&LE$-I?hbS9!?|(nbd0&A7Jb=#}$RX!n$TqBfV4 zuug#4z5%78I^Ll+FKynuKlyy-9!ii#1zD+1-E8Vc6|+$<%Vh+6?;0cMLX%$@CTaw5 zs}(?b+TKzD=u!YW=sI({$ugeF_4O>NhLMOm`1;M9PYfmQbT`RqL};=h`S-{w|27be zMt!*>K`|JMK*ndB`BkqvD%)~)o8whfx#ED3G4M<{9CYS zIGkP)-|SQ`Cbv!U`;v4j;{2Qrc!}NfHj^7^u(hPc6hLi+!NEe&|6faOWs5Su=2d?E zNK9?&90jgf4S-Ny&dLbXt`%d2)iRM+;vOJ1#GH{N{jIz$7SED;>o#vR{s|h`zYS`F z9xchuHNmIX@$|vL4b!FLQD=7P+3~Wwxo4OzDxK_*mfD>wOJBTCGI2%lYRge#$ic=?FdJhFZ5d@6(r=sdzEK1W{D-WFnLJW zPV6SnW&$ojmtsa;vQ6~PPR&E}#U(8zB-@!@78U204^0paOSyMx5@cjQlj=nH6|~E8 z;$XL9@n6o4cJZ~G^{CmT5hVmo`MYuV#J+(Xu}iE(q5vRd5x1%zG21ax-@*-_)o;z|-!@r}IucNTuHh@8) zepyC?ec$48Vc5Eqz~X=Ry@3zbh1Pk#clFx9v#L<%gP@9%-XHOmbx!Bru=TA@YgDXr zul4ipy#cFyO8s8zyv^JlIi;Sxa_2lsP1jw^R3c|B=R(X&?<_cxqPDp9NNY(OB?J9u zz?d&qvlggoBMjQ;|DAP8G_w1Mfo9kOsmZe z!DpwKca%E;A4+8!oHHjlKP+qh%rkFf-xfd19qeeeHPf*oejWV9t9c)1FAX>kl*qoA zUFQE-K%2t;y^!3*Q2ylcndEx$&nZiOOu`oqSFtw>H7llPl4s(Hi1Xuef?vzS?B#c} zXZiOh%H91V_|iX@?=j>-7YE6C>C?;k0cheI;9oKPKN4}y;(G`j(Yo*UD?fshy)#vY zF8N`|StJcs@dc96G{xYlaCrpz$2y)Su`D21VF zvn3VY8_0`;vV&ADovdNFSMsH#H?3k~(ha(pum)m&*hwf&%zmM_XND;AUMJvz#J`x; zu<%VeUwE+!p-ZO*`VNWN4+y805polgsJj2=SHKw@@bK!&v6B3OL-!E@#C{~_>1SWW^JP^g~ZV$?fEEyt3qAp zl{~PU#?p`F`mW*V@~~ZZhdk~I9<4ipcUQo=cFFGvrT<8>jt*S%eSpSxM9JdMUKm?_JA* zxP9CGPc?k#f67X&0f^k5_Bh*nb>=pHn3`Uca&k36M%rD)xXiR9w?CHAO`KjB*+5sI zl8;NW@vbR)BkxBBoI?Vh!GW$tQj7eH*}oW@t(VT_;Ky^;+XP*hM=^OFz{p3oevv&o z(zQq)$-kmfNKUa}o6K`R+43Or|8#hDldn!Pz2NE0H~4}ke+DNc_ww(-Vf^X6;AHws zemhJO{0!UY5~RfPDV3qOCznR-oAr6uWSuNA8eIIzgx=Bm)nEu2}Pl$A-jM6*h-25LMOt{E4tq_9uZZ)oufvOWjDqK{sYccrnzjFWKwmM45oC zkT?)aPAGNKt4Znmy=)eG%#=sFb^5PYSnC8&dt(v`tvh}%Q2}zQtp8cCu2&X;9)Hn$Hsg`Gl?N!rC5;f0 zi`BLZK#3P-zzSMp_MJJ2!4U%q=QU-&Dqdr}Me3 z)LS*33JdJpr%U6cHk_a>UO|4XncH%n|KA5Jdx=ow{Co9jZAIP6 zN%MtXG&VmM&5$egRU{goBkIjs%?c3KPTY|UeHri~SDnNd5QcfF3PYa+jD3^+l}bRF z_0T2z5OK%R0|pV~F%EqzDJBlzkLAKjkbE6OPXSzxr783$ zCHPhnY-Jn!^G`K{^K=^x0R0O*g6611PhYQ=h!-8ybQYL z*xCkZ%U4Rq3zOVmBG>(xT4pjxfpnX`ukzd#u!NxG{&pY(o0Od0LZYUCLAA zKmAMY@-ydqWDYZzRt!;^x$+o62I~ds^*(T%Xnw#0GhvF{paXH@bCEz%(yenTLSlyp zh8z6IIOpW7KL6KAw={gt$ekO$%5}(iNeO@wN&QvUhm4i27>DUhSOdD0r{=wj^N@ z2aw_V8^_&Etv5JwNzScyB$RaU2u-∨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 Rsd>;-IXFZCrTrFc{sVbacHsa3 diff --git a/tools/nauty25r9_mac/labelg.c b/tools/nauty25r9_mac/labelg.c deleted file mode 100644 index a78304d..0000000 --- a/tools/nauty25r9_mac/labelg.c +++ /dev/null @@ -1,352 +0,0 @@ -/* labelg.c version 1.6; B D McKay, Jan 2011 */ - -#define USAGE "labelg [-qsg] [-fxxx] [-S|-t] [-i# -I#:# -K#] [infile [outfile]]" - -#define HELPTEXT \ -" Canonically label a file of graphs.\n\ -\n\ - -s force output to sparse6 format\n\ - -g force output to graph6 format\n\ - If neither -s or -g are given, the output format is\n\ - determined by the header or, if there is none, by the\n\ - format of the first input graph. Also see -S. \n\ - -S Use sparse representation internally.\n\ - Note that this changes the canonical labelling.\n\ - Multiple edges are not supported. One loop per vertex is ok.\n\ - -t Use Traces.\n\ - Note that this changes the canonical labelling.\n\ - Multiple edges and loops are not supported, nor invariants.\n\ -\n\ - The output file will have a header if and only if the input file does.\n\ -\n\ - -fxxx Specify a partition of the point set. xxx is any\n\ - string of ASCII characters except nul. This string is\n\ - considered extended to infinity on the right with the\n\ - character 'z'. One character is associated with each point,\n\ - in the order given. The labelling used obeys these rules:\n\ - (1) the new order of the points is such that the associated\n\ - characters are in ASCII ascending order\n\ - (2) if two graphs are labelled using the same string xxx,\n\ - the output graphs are identical iff there is an\n\ - associated-character-preserving isomorphism between them.\n\ - No option can be concatenated to the right of -f.\n\ -\n\ - -i# select an invariant (1 = twopaths, 2 = adjtriang(K), 3 = triples,\n\ - 4 = quadruples, 5 = celltrips, 6 = cellquads, 7 = cellquins,\n\ - 8 = distances(K), 9 = indsets(K), 10 = cliques(K), 11 = cellcliq(K),\n\ - 12 = cellind(K), 13 = adjacencies, 14 = cellfano, 15 = cellfano2,\n\ - 16 = refinvar(K))\n\ - -I#:# select mininvarlevel and maxinvarlevel (default 1:1)\n\ - -K# select invararg (default 3)\n\ -\n\ - -q suppress auxiliary information\n" - - -/*************************************************************************/ - -#include "gtools.h" -#include "nautinv.h" -#include "gutils.h" -#include "traces.h" - -static struct invarrec -{ - void (*entrypoint)(graph*,int*,int*,int,int,int,int*, - int,boolean,int,int); - char *name; -} invarproc[] - = {{NULL, "none"}, - {twopaths, "twopaths"}, - {adjtriang, "adjtriang"}, - {triples, "triples"}, - {quadruples, "quadruples"}, - {celltrips, "celltrips"}, - {cellquads, "cellquads"}, - {cellquins, "cellquins"}, - {distances, "distances"}, - {indsets, "indsets"}, - {cliques, "cliques"}, - {cellcliq, "cellcliq"}, - {cellind, "cellind"}, - {adjacencies, "adjacencies"}, - {cellfano, "cellfano"}, - {cellfano2, "cellfano2"}, - {refinvar, "refinvar"} - }; - -#define NUMINVARS ((int)(sizeof(invarproc)/sizeof(struct invarrec))) - -static nauty_counter orbtotal; -static double unorbtotal; -extern int gt_numorbits; - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - graph *g; - sparsegraph sg,sh; - int m,n,codetype; - int argnum,j,outcode; - char *arg,sw,*fmt; - boolean badargs; - boolean sswitch,gswitch,qswitch,fswitch,Oswitch; - boolean iswitch,Iswitch,Kswitch,Mswitch,Sswitch; - boolean uswitch,tswitch; - int inv,mininvarlevel,maxinvarlevel,invararg; - long minil,maxil; - double t; - char *infilename,*outfilename; - FILE *infile,*outfile; - nauty_counter nin; - int ii,secret,loops; - DEFAULTOPTIONS_TRACES(traces_opts); - TracesStats traces_stats; -#if MAXN - graph h[MAXN*MAXM]; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; -#else - DYNALLSTAT(graph,h,h_sz); - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); -#endif - - HELP; - - nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - sswitch = gswitch = qswitch = FALSE; - fswitch = Oswitch = Mswitch = FALSE; - iswitch = Iswitch = Kswitch = FALSE; - uswitch = Sswitch = tswitch = FALSE; - infilename = outfilename = NULL; - inv = 0; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('s',sswitch) - else SWBOOLEAN('g',gswitch) - else SWBOOLEAN('u',uswitch) - else SWBOOLEAN('q',qswitch) - else SWBOOLEAN('O',Oswitch) - else SWBOOLEAN('S',Sswitch) - else SWBOOLEAN('t',tswitch) - else SWINT('i',iswitch,inv,"labelg -i") - else SWINT('K',Kswitch,invararg,"labelg -K") - else SWRANGE('k',":-",Iswitch,minil,maxil,"labelg -k") - else SWRANGE('I',":-",Iswitch,minil,maxil,"labelg -I") - else if (sw == 'f') - { - fswitch = TRUE; - fmt = arg; - break; - } - else SWINT('M',Mswitch,secret,"labelg -M") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (sswitch && gswitch) - gt_abort(">E labelg: -s and -g are incompatible\n"); - - if (tswitch && (fswitch || Sswitch)) - gt_abort(">E labelg: -t is incompatible with -S and -f \n"); - - if (!Sswitch && iswitch && (inv > NUMINVARS)) - gt_abort(">E labelg: -i value must be 0..16\n"); - if (Sswitch && iswitch && (inv != 8)) - gt_abort(">E labelg: only distances (-i8) is available with -S"); - if (tswitch && iswitch) - gt_abort(">E labelg: invariants are not available with -t"); - - if (iswitch && inv == 0) iswitch = FALSE; - - if (iswitch) - { - if (Iswitch) - { - mininvarlevel = minil; - maxinvarlevel = maxil; - } - else - mininvarlevel = maxinvarlevel = 1; - if (!Kswitch) invararg = 3; - } - - if (!Mswitch) secret = 1; - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!qswitch) - { - fprintf(stderr,">A labelg"); - if (sswitch || gswitch || fswitch || iswitch - || tswitch || Sswitch) - fprintf(stderr," -"); - if (sswitch) fprintf(stderr,"s"); - if (gswitch) fprintf(stderr,"g"); - if (Sswitch) fprintf(stderr,"S"); - if (tswitch) fprintf(stderr,"t"); - if (iswitch) - fprintf(stderr,"i=%s[%d:%d,%d]",invarproc[inv].name, - mininvarlevel,maxinvarlevel,invararg); - if (fswitch) fprintf(stderr,"f%s",fmt); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (uswitch) - outcode = 0; - else if (sswitch || (!gswitch && (codetype&SPARSE6))) - outcode = SPARSE6; - else - outcode = GRAPH6; - - if (!fswitch) fmt = NULL; - - if (!uswitch && (codetype&HAS_HEADER)) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nin = 0; - orbtotal = 0; - unorbtotal = 0.0; - t = CPUTIME; - if (Sswitch) - { - SG_INIT(sg); - SG_INIT(sh); - while (TRUE) - { - if (read_sg_loops(infile,&sg,&loops) == NULL) break; - ++nin; - n = sg.nv; - m = (n + WORDSIZE - 1) / WORDSIZE; - SG_ALLOC(sh,n,sg.nde,"labelg"); - for (ii = 0; ii < secret; ++ii) - fcanonise_inv_sg(&sg,m,n,&sh,fmt,iswitch?distances_sg:NULL, - mininvarlevel,maxinvarlevel,invararg,loops>0); - sortlists_sg(&sh); - orbtotal += gt_numorbits; - unorbtotal += 1.0 / gt_numorbits; - if (outcode == SPARSE6) writes6_sg(outfile,&sh); - else if (outcode == GRAPH6) writeg6_sg(outfile,&sh); - } - } - else if (tswitch) - { - SG_INIT(sg); - SG_INIT(sh); - traces_opts.getcanon = TRUE; - traces_opts.writeautoms = FALSE; - traces_opts.verbosity = 0; - traces_opts.outfile = stdout; - - while (TRUE) - { - if (read_sg_loops(infile,&sg,&loops) == NULL) break; - if (loops > 0) gt_abort(">E Traces does not allow loops\n"); - ++nin; - n = sg.nv; - DYNALLOC1(int,lab,lab_sz,n,"traces@labelg"); - DYNALLOC1(int,ptn,ptn_sz,n,"traces@labelg"); - DYNALLOC1(int,orbits,orbits_sz,n,"traces@labelg"); - SG_ALLOC(sh,n,sg.nde,"labelg"); - for (ii = 0; ii < n; ++ii) { lab[ii] = ii; ptn[ii] = 1; } - ptn[n-1] = 0; - for (ii = 0; ii < secret; ++ii) - Traces(&sg,lab,ptn,orbits,&traces_opts,&traces_stats,&sh); - sortlists_sg(&sh); - orbtotal += gt_numorbits; - unorbtotal += 1.0 / gt_numorbits; - if (outcode == SPARSE6) writes6_sg(outfile,&sh); - else if (outcode == GRAPH6) writeg6_sg(outfile,&sh); - SG_FREE(sh); - } - } - else - { - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"labelg"); -#endif - loops = loopcount(g,m,n); - for (ii = 0; ii < secret; ++ii) - fcanonise_inv(g,m,n,h,fmt,invarproc[inv].entrypoint, - mininvarlevel,maxinvarlevel,invararg,loops>0); - orbtotal += gt_numorbits; - unorbtotal += 1.0 / gt_numorbits; - if (outcode == SPARSE6) writes6(outfile,h,m,n); - if (outcode == GRAPH6) writeg6(outfile,h,m,n); - FREES(g); - } - } - t = CPUTIME - t; - -#if LONG_LONG_COUNTERS - if (Oswitch) - fprintf(stderr,">C orbit totals = %lld %15.8f\n", - orbtotal,unorbtotal); - if (!qswitch) - fprintf(stderr, - ">Z %lld graphs labelled from %s to %s in %3.2f sec.\n", - nin,infilename,outfilename,t); -#else - if (Oswitch) - fprintf(stderr,">C orbit totals = %ld %15.8f\n", - orbtotal,unorbtotal); - if (!qswitch) - fprintf(stderr, - ">Z %ld graphs labelled from %s to %s in %3.2f sec.\n", - nin,infilename,outfilename,t); -#endif - - exit(0); -} diff --git a/tools/nauty25r9_mac/linegraphg b/tools/nauty25r9_mac/linegraphg deleted file mode 100644 index 87f7d44e10b93dd5770d493e57467bc4f7e70996..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117856 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
    4z2Fbfp{e4c2-?LV$8OD)Oq3>k>%3#H4 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 - gnde = g->nde; - DYNALLOC1(size_t,eno,eno_sz,gnde,"linegraphg"); - - hnv = gnde/2; - if (hnv != gnde/2) gt_abort(">E linegraphg: too many input edges\n"); - - hnde = 0; - num = 0; - for (i = 0; i < gnv; ++i) - { - xhnde = hnde; - hnde += gd[i]*((size_t)gd[i]-1); - if (hnde < xhnde) gt_abort(">E linegraphg: too many output edges\n"); - - for (j = gv[i]; j < gv[i]+gd[i]; ++j) - { - if (ge[j] == i) - gt_abort(">E linegraphg can't handle loops\n"); - else if (ge[j] > i) - eno[j] = num++; - else - { - lo = gv[ge[j]]; - hi = lo + gd[ge[j]] - 1; - while (lo <= hi) - { - mid = lo + (hi-lo)/2; - if (ge[mid] == i) break; - else if (ge[mid] < i) lo = mid+1; - else hi = mid-1; - } - if (lo > hi) - gt_abort(">E linegraphg : binary search failed\n"); - eno[j] = eno[mid]; - } - } - } - - SG_ALLOC(*h,hnv,hnde,"linegraphg"); - h->nv = hnv; - h->nde = hnde; - SG_VDE(h,hv,hd,he); - - for (i = 0; i < hnv; ++i) hd[i] = 0; - for (i = 0; i < gnv; ++i) - { - for (j = gv[i]; j < gv[i]+gd[i]; ++j) - hd[eno[j]] += gd[i]-1; - } - - hv[0] = 0; - for (i = 1; i < hnv; ++i) hv[i] = hv[i-1] + hd[i-1]; - for (i = 0; i < hnv; ++i) hd[i] = 0; - - for (i = 0; i < gnv; ++i) - { - for (j = gv[i]; j < gv[i]+gd[i]-1; ++j) - for (k = j+1; k < gv[i]+gd[i]; ++k) - { - v = eno[j]; w = eno[k]; - he[hv[v]+(hd[v]++)] = w; - he[hv[w]+(hd[w]++)] = v; - } - } -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - boolean badargs,quiet; - int j,m,n,argnum; - int codetype,outcode; - sparsegraph g,h; - nauty_counter nin,nullgraphs; - char *arg,sw; - static graph *gq; - double t; - - HELP; - - SG_INIT(g); - SG_INIT(h); - - infilename = outfilename = NULL; - quiet = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('q',quiet) - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A linegraphg"); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nin = 0; - nullgraphs = 0; - t = CPUTIME; - while (read_sg(infile,&g)) - { - ++nin; - - if (g.nde > 0) - { - linegraph(&g,&h); - if (outcode == SPARSE6) writes6_sg(outfile,&h); - else writeg6_sg(outfile,&h); - } - else - ++nullgraphs; - } - t = CPUTIME - t; - - if (!quiet) - { - if (nullgraphs > 0) - fprintf(stderr,">W " COUNTER_FMT " null graphs not written\n", - nullgraphs); - - fprintf(stderr,">Z " COUNTER_FMT - " graphs converted from %s to %s in %3.2f sec.\n", - nin,infilename,outfilename,t); - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/listg b/tools/nauty25r9_mac/listg deleted file mode 100644 index c3506f5177123c7be85a5e4560e6b6ce15b87fac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58216 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 diff --git a/tools/nauty25r9_mac/nauty.c b/tools/nauty25r9_mac/nauty.c deleted file mode 100644 index a6fbe2a..0000000 --- a/tools/nauty25r9_mac/nauty.c +++ /dev/null @@ -1,1202 +0,0 @@ -/***************************************************************************** -* * -* Main source file for version 2.5 of nauty. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. Permission * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : renamed to version 1.3 (no changes to this file) * -* 28-Sep-88 : renamed to version 1.4 (no changes to this file) * -* 23-Mar-89 : changes for version 1.5 : * -* - add use of refine1 instead of refine for m==1 * -* - changes for new optionblk syntax * -* - disable tc_level use for digraphs * -* - interposed doref() interface to refine() so that * -* options.invarproc can be supported * -* - declared local routines static * -* 28-Mar-89 : - implemented mininvarlevel/maxinvarlevel < 0 options * -* 2-Apr-89 : - added invarproc fields in stats * -* 5-Apr-89 : - modified error returns from nauty() * -* - added error message to ERRFILE * -* - changed MAKEEMPTY uses to EMPTYSET * -* 18-Apr-89 : - added MTOOBIG and CANONGNIL * -* 8-May-89 : - changed firstcode[] and canoncode[] to short * -* 10-Nov-90 : changes for version 1.6 : * -* - added dummy routine nauty_null (see dreadnaut.c) * -* 2-Sep-91 : changes for version 1.7 : * -* - moved MULTIPLY into nauty.h * -* 27-Mar-92 : - changed 'n' into 'm' in error message in nauty() * -* 5-Jun-93 : renamed to version 1.7+ (no changes to this file) * -* 18-Aug-93 : renamed to version 1.8 (no changes to this file) * -* 17-Sep-93 : renamed to version 1.9 (no changes to this file) * -* 13-Jul-96 : changes for version 2.0 : * -* - added dynamic allocation * -* 21-Oct-98 : - made short into shortish for BIGNAUTY as needed * -* 7-Jan-00 : - allowed n=0 * -* - added nauty_check() and a call to it * -* 12-Feb-00 : - used better method for target cell memory allocation * -* - did a little formating of the code * -* 27-May-00 : - fixed error introduced on Feb 12. * -* - dynamic allocations in nauty() are now deallocated * -* before return if n >= 320. * -* 16-Nov-00 : - use function prototypes, change UPROC to void. * -* - added argument to tcellproc(), removed nvector * -* - now use options.dispatch, options.groupopts is gone. * -* 22-Apr-01 : - Added code for compilation into Magma * -* - Removed nauty_null() and EXTDEFS * -* 2-Oct-01 : - Improved error message for bad dispatch vector * -* 21-Nov-01 : - use NAUTYREQUIRED in nauty_check() * -* 20-Dec-02 : changes for version 2.2: * -* - made tcnode0 global * -* - added nauty_freedyn() * -* 17-Nov-03 : changed INFINITY to NAUTY_INFINITY * -* 14-Sep-04 : extended prototypes even to recursive functions * -* 16-Oct-04 : disallow NULL dispatch vector * -* 11-Nov-05 : changes for version 2.3: * -* - init() and cleanup() optional calls * -* 23-Nov-06 : changes for version 2.4: * -* - use maketargetcell() instead of tcellproc() * -* 29-Nov-06 : add extra_autom, extra_level, extra_options * -* 10-Dec-06 : remove BIGNAUTY * -* 10-Nov-09 : remove shortish and permutation types * -* 16-Nov-11 : added Shreier option * -* 15-Jan012 : added TLS_ATTR to static declarations * -* * -*****************************************************************************/ - -#define ONE_WORD_SETS -#include "nauty.h" -#include "schreier.h" - -#ifdef NAUTY_IN_MAGMA -#include "cleanup.e" -#define NAUTY_ABORT (-11) -#endif - -typedef struct tcnode_struct -{ - struct tcnode_struct *next; - set *tcellptr; -} tcnode; - -/* aproto: header new_nauty_protos.h */ - -#ifndef NAUTY_IN_MAGMA -#if !MAXN -static int firstpathnode0(int*, int*, int, int, tcnode*); -static int othernode0(int*, int*, int, int, tcnode*); -#else -static int firstpathnode(int*, int*, int, int); -static int othernode(int*, int*, int, int); -#endif -static void firstterminal(int*, int); -static int processnode(int*, int*, int, int); -static void recover(int*, int); -static void writemarker(int, int, int, int, int, int); -#endif - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#define OPTCALL(proc) if (proc != NULL) (*proc) - - /* copies of some of the options: */ -static TLS_ATTR - boolean getcanon,digraph,writeautoms,domarkers,cartesian,doschreier; -static TLS_ATTR int linelength,tc_level,mininvarlevel,maxinvarlevel,invararg; -static TLS_ATTR void (*usernodeproc)(graph*,int*,int*,int,int,int,int,int,int); -static TLS_ATTR void (*userautomproc)(int,int*,int*,int,int,int); -static TLS_ATTR void (*userlevelproc) - (int*,int*,int,int*,statsblk*,int,int,int,int,int,int); -static TLS_ATTR void (*invarproc) - (graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -static TLS_ATTR FILE *outfile; -static TLS_ATTR dispatchvec dispatch; - - /* local versions of some of the arguments: */ -static TLS_ATTR int m,n; -static TLS_ATTR graph *g,*canong; -static TLS_ATTR int *orbits; -static TLS_ATTR statsblk *stats; - /* temporary versions of some stats: */ -static TLS_ATTR unsigned long invapplics,invsuccesses; -static TLS_ATTR int invarsuclevel; - - /* working variables: */ -static TLS_ATTR int gca_first, /* level of greatest common ancestor of - current node and first leaf */ - gca_canon, /* ditto for current node and bsf leaf */ - noncheaplevel, /* level of greatest ancestor for which cheapautom==FALSE */ - allsamelevel, /* level of least ancestor of first leaf for - which all descendant leaves are known to be - equivalent */ - eqlev_first, /* level to which codes for this node match those - for first leaf */ - eqlev_canon, /* level to which codes for this node match those - for the bsf leaf. */ - comp_canon, /* -1,0,1 according as code at eqlev_canon+1 is - <,==,> that for bsf leaf. Also used for - similar purpose during leaf processing */ - samerows, /* number of rows of canong which are correct for - the bsf leaf BDM:correct description? */ - canonlevel, /* level of bsf leaf */ - stabvertex, /* point fixed in ancestor of first leaf at level - gca_canon */ - cosetindex; /* the point being fixed at level gca_first */ - -static TLS_ATTR boolean needshortprune; /* used to flag calls to shortprune */ - -#if !MAXN -DYNALLSTAT(set,defltwork,defltwork_sz); -DYNALLSTAT(int,workperm,workperm_sz); -DYNALLSTAT(set,fixedpts,fixedpts_sz); -DYNALLSTAT(int,firstlab,firstlab_sz); -DYNALLSTAT(int,canonlab,canonlab_sz); -DYNALLSTAT(short,firstcode,firstcode_sz); -DYNALLSTAT(short,canoncode,canoncode_sz); -DYNALLSTAT(int,firsttc,firsttc_sz); -DYNALLSTAT(set,active,active_sz); - -/* In the dynamically allocated case (MAXN=0), each level of recursion - needs one set (tcell) to represent the target cell. This is - implemented by using a linked list of tcnode anchored at the root - of the search tree. Each node points to its child (if any) and to - the dynamically allocated tcell. Apart from the the first node of - the list, each node always has a tcell good for m up to alloc_m. - tcnodes and tcells are kept between calls to nauty, except that - they are freed and reallocated if m gets bigger than alloc_m. */ - -static TLS_ATTR tcnode tcnode0 = {NULL,NULL}; -static TLS_ATTR int alloc_m = 0; - -#else -static TLS_ATTR set defltwork[2*MAXM]; /* workspace in case none provided */ -static TLS_ATTR int workperm[MAXN]; /* various scratch uses */ -static TLS_ATTR set fixedpts[MAXM]; /* points which were explicitly - fixed to get current node */ -static TLS_ATTR int firstlab[MAXN], /* label from first leaf */ - canonlab[MAXN]; /* label from bsf leaf */ -static TLS_ATTR short firstcode[MAXN+2], /* codes for first leaf */ - canoncode[MAXN+2]; /* codes for bsf leaf */ -static TLS_ATTR int firsttc[MAXN+2]; /* index of target cell for left path */ -static TLS_ATTR set active[MAXM]; /* used to contain index to cells now - active for refinement purposes */ -#endif - -static TLS_ATTR set *workspace,*worktop; /* first and just-after-last - addresses of work area to hold automorphism data */ -static TLS_ATTR set *fmptr; /* pointer into workspace */ - -static TLS_ATTR schreier *gp; /* These two for Schreier computations */ -static TLS_ATTR permnode *gens; - -/***************************************************************************** -* * -* This procedure finds generators for the automorphism group of a * -* vertex-coloured graph and optionally finds a canonically labelled * -* isomorph. A description of the data structures can be found in * -* nauty.h and in the "nauty User's Guide". The Guide also gives * -* many more details about its use, and implementation notes. * -* * -* Parameters - means read-only, means write-only, means both: * -* g - the graph * -* lab,ptn - used for the partition nest which defines the colouring * -* of g. The initial colouring will be set by the program, * -* using the same colour for every vertex, if * -* options->defaultptn!=FALSE. Otherwise, you must set it * -* yourself (see the Guide). If options->getcanon!=FALSE, * -* the contents of lab on return give the labelling of g * -* corresponding to canong. This does not change the * -* initial colouring of g as defined by (lab,ptn), since * -* the labelling is consistent with the colouring. * -* active - If this is not NULL and options->defaultptn==FALSE, * -* it is a set indicating the initial set of active colours. * -* See the Guide for details. * -* orbits - On return, orbits[i] contains the number of the * -* least-numbered vertex in the same orbit as i, for * -* i=0,1,...,n-1. * -* options - A list of options. See nauty.h and/or the Guide * -* for details. * -* stats - A list of statistics produced by the procedure. See * -* nauty.h and/or the Guide for details. * -* workspace - A chunk of memory for working storage. * -* worksize - The number of setwords in workspace. See the Guide * -* for guidance. * -* m - The number of setwords in sets. This must be at * -* least ceil(n / WORDSIZE) and at most MAXM. * -* n - The number of vertices. This must be at least 1 and * -* at most MAXN. * -* canong - The canononically labelled isomorph of g. This is * -* only produced if options->getcanon!=FALSE, and can be * -* given as NULL otherwise. * -* * -* FUNCTIONS CALLED: firstpathnode(),updatecan() * -* * -*****************************************************************************/ - -void -nauty(graph *g_arg, int *lab, int *ptn, set *active_arg, - int *orbits_arg, optionblk *options, statsblk *stats_arg, - set *ws_arg, int worksize, int m_arg, int n_arg, graph *canong_arg) -{ - int i; - int numcells; - int retval; - int initstatus; -#if !MAXN - tcnode *tcp,*tcq; -#endif - - /* determine dispatch vector */ - - if (options->dispatch == NULL) - { - fprintf(ERRFILE,">E nauty: null dispatch vector\n"); - fprintf(ERRFILE,"Maybe you need to recompile\n"); - exit(1); - } - else - dispatch = *(options->dispatch); - - if (options->userrefproc) - dispatch.refine = options->userrefproc; - else if (dispatch.refine1 && m_arg == 1) - dispatch.refine = dispatch.refine1; - - if (dispatch.refine == NULL || dispatch.updatecan == NULL - || dispatch.targetcell == NULL || dispatch.cheapautom == NULL) - { - fprintf(ERRFILE,">E bad dispatch vector\n"); - exit(1); - } - - /* check for excessive sizes: */ - -#if !MAXN - if (m_arg > NAUTY_INFINITY/WORDSIZE+1) - { - stats_arg->errstatus = MTOOBIG; - fprintf(ERRFILE,"nauty: need m <= %d, but m=%d\n\n", - NAUTY_INFINITY/WORDSIZE+1,m_arg); - return; - } - if (n_arg > NAUTY_INFINITY-2 || n_arg > WORDSIZE * m_arg) - { - stats_arg->errstatus = NTOOBIG; - fprintf(ERRFILE,"nauty: need n <= min(%d,%d*m), but n=%d\n\n", - NAUTY_INFINITY-2,WORDSIZE,n_arg); - return; - } -#else - if (m_arg > MAXM) - { - stats_arg->errstatus = MTOOBIG; - fprintf(ERRFILE,"nauty: need m <= %d\n\n",MAXM); - return; - } - if (n_arg > MAXN || n_arg > WORDSIZE * m_arg) - { - stats_arg->errstatus = NTOOBIG; - fprintf(ERRFILE, - "nauty: need n <= min(%d,%d*m)\n\n",MAXM,WORDSIZE); - return; - } -#endif - if (n_arg == 0) /* Special code for zero-sized graph */ - { - stats_arg->grpsize1 = 1.0; - stats_arg->grpsize2 = 0; - stats_arg->numorbits = 0; - stats_arg->numgenerators = 0; - stats_arg->errstatus = 0; - stats_arg->numnodes = 1; - stats_arg->numbadleaves = 0; - stats_arg->maxlevel = 1; - stats_arg->tctotal = 0; - stats_arg->canupdates = (options->getcanon != 0); - stats_arg->invapplics = 0; - stats_arg->invsuccesses = 0; - stats_arg->invarsuclevel = 0; - return; - } - - /* take copies of some args, and options: */ - m = m_arg; - n = n_arg; - - nautil_check(WORDSIZE,m,n,NAUTYVERSIONID); - OPTCALL(dispatch.check)(WORDSIZE,m,n,NAUTYVERSIONID); - -#if !MAXN - DYNALLOC1(set,defltwork,defltwork_sz,2*m,"nauty"); - DYNALLOC1(set,fixedpts,fixedpts_sz,m,"nauty"); - DYNALLOC1(set,active,active_sz,m,"nauty"); - DYNALLOC1(int,workperm,workperm_sz,n,"nauty"); - DYNALLOC1(int,firstlab,firstlab_sz,n,"nauty"); - DYNALLOC1(int,canonlab,canonlab_sz,n,"nauty"); - DYNALLOC1(short,firstcode,firstcode_sz,n+2,"nauty"); - DYNALLOC1(short,canoncode,canoncode_sz,n+2,"nauty"); - DYNALLOC1(int,firsttc,firsttc_sz,n+2,"nauty"); - if (m > alloc_m) - { - tcp = tcnode0.next; - while (tcp != NULL) - { - tcq = tcp->next; - FREES(tcp->tcellptr); - FREES(tcp); - tcp = tcq; - } - alloc_m = m; - tcnode0.next = NULL; - } -#endif - - /* OLD g = g_arg; */ - orbits = orbits_arg; - stats = stats_arg; - - getcanon = options->getcanon; - digraph = options->digraph; - writeautoms = options->writeautoms; - domarkers = options->writemarkers; - cartesian = options->cartesian; - doschreier = options->schreier; - if (doschreier) schreier_check(WORDSIZE,m,n,NAUTYVERSIONID); - linelength = options->linelength; - if (digraph) tc_level = 0; - else tc_level = options->tc_level; - outfile = (options->outfile == NULL ? stdout : options->outfile); - usernodeproc = options->usernodeproc; - userautomproc = options->userautomproc; - userlevelproc = options->userlevelproc; - - invarproc = options->invarproc; - if (options->mininvarlevel < 0 && options->getcanon) - mininvarlevel = -options->mininvarlevel; - else - mininvarlevel = options->mininvarlevel; - if (options->maxinvarlevel < 0 && options->getcanon) - maxinvarlevel = -options->maxinvarlevel; - else - maxinvarlevel = options->maxinvarlevel; - invararg = options->invararg; - - if (getcanon) - if (canong_arg == NULL) - { - stats_arg->errstatus = CANONGNIL; - fprintf(ERRFILE, - "nauty: canong=NULL but options.getcanon=TRUE\n\n"); - return; - } - - /* initialize everything: */ - - if (options->defaultptn) - { - for (i = 0; i < n; ++i) /* give all verts same colour */ - { - lab[i] = i; - ptn[i] = NAUTY_INFINITY; - } - ptn[n-1] = 0; - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - } - else - { - ptn[n-1] = 0; - numcells = 0; - for (i = 0; i < n; ++i) - if (ptn[i] != 0) ptn[i] = NAUTY_INFINITY; - else ++numcells; - if (active_arg == NULL) - { - EMPTYSET(active,m); - for (i = 0; i < n; ++i) - { - ADDELEMENT(active,i); - while (ptn[i]) ++i; - } - } - else - for (i = 0; i < M; ++i) active[i] = active_arg[i]; - } - - g = canong = NULL; - initstatus = 0; - OPTCALL(dispatch.init)(g_arg,&g,canong_arg,&canong, - lab,ptn,active,options,&initstatus,m,n); - if (initstatus) - { - stats->errstatus = initstatus; - return; - } - - if (g == NULL) g = g_arg; - if (canong == NULL) canong = canong_arg; - - if (doschreier) newgroup(&gp,&gens,n); - - for (i = 0; i < n; ++i) orbits[i] = i; - stats->grpsize1 = 1.0; - stats->grpsize2 = 0; - stats->numgenerators = 0; - stats->numnodes = 0; - stats->numbadleaves = 0; - stats->tctotal = 0; - stats->canupdates = 0; - stats->numorbits = n; - EMPTYSET(fixedpts,m); - noncheaplevel = 1; - eqlev_canon = -1; /* needed even if !getcanon */ - - if (worksize >= 2 * m) - workspace = ws_arg; - else - { - workspace = defltwork; - worksize = 2 * m; - } - worktop = workspace + (worksize - worksize % (2 * m)); - fmptr = workspace; - - /* here goes: */ - stats->errstatus = 0; - needshortprune = FALSE; - invarsuclevel = NAUTY_INFINITY; - invapplics = invsuccesses = 0; - -#if !MAXN - retval = firstpathnode0(lab,ptn,1,numcells,&tcnode0); -#else - retval = firstpathnode(lab,ptn,1,numcells); -#endif - -#ifdef NAUTY_IN_MAGMA - if (retval != NAUTY_ABORT) -#endif - { - if (getcanon) - { - (*dispatch.updatecan)(g,canong,canonlab,samerows,M,n); - for (i = 0; i < n; ++i) lab[i] = canonlab[i]; - } - stats->invarsuclevel = - (invarsuclevel == NAUTY_INFINITY ? 0 : invarsuclevel); - stats->invapplics = invapplics; - stats->invsuccesses = invsuccesses; - } - -#if !MAXN -#ifndef NAUTY_IN_MAGMA - if (n >= 320) -#endif - { - nautil_freedyn(); - OPTCALL(dispatch.freedyn)(); - nauty_freedyn(); - } -#endif - OPTCALL(dispatch.cleanup)(g_arg,&g,canong_arg,&canong, - lab,ptn,options,stats,m,n); - - if (doschreier) - { - freeschreier(&gp,&gens); - if (n >= 320) schreier_freedyn(); - } -} - -/***************************************************************************** -* * -* firstpathnode(lab,ptn,level,numcells) produces a node on the leftmost * -* path down the tree. The parameters describe the level and the current * -* colour partition. The set of active cells is taken from the global set * -* 'active'. If the refined partition is not discrete, the leftmost child * -* is produced by calling firstpathnode, and the other children by calling * -* othernode. * -* For MAXN=0 there is an extra parameter: the address of the parent tcell * -* structure. * -* The value returned is the level to return to. * -* * -* FUNCTIONS CALLED: (*usernodeproc)(),doref(),cheapautom(), * -* firstterminal(),nextelement(),breakout(), * -* firstpathnode(),othernode(),recover(),writestats(), * -* (*userlevelproc)(),(*tcellproc)(),shortprune() * -* * -*****************************************************************************/ - -static int -#if !MAXN -firstpathnode0(int *lab, int *ptn, int level, int numcells, - tcnode *tcnode_parent) -#else -firstpathnode(int *lab, int *ptn, int level, int numcells) -#endif -{ - int tv; - int tv1,index,rtnlevel,tcellsize,tc,childcount,qinvar,refcode; -#if !MAXN - set *tcell; - tcnode *tcnode_this; - - tcnode_this = tcnode_parent->next; - if (tcnode_this == NULL) - { - if ((tcnode_this = (tcnode*)ALLOCS(1,sizeof(tcnode))) == NULL || - (tcnode_this->tcellptr - = (set*)ALLOCS(alloc_m,sizeof(set))) == NULL) - alloc_error("tcell"); - tcnode_parent->next = tcnode_this; - tcnode_this->next = NULL; - } - tcell = tcnode_this->tcellptr; -#else - set tcell[MAXM]; -#endif - - ++stats->numnodes; - - /* refine partition : */ - doref(g,lab,ptn,level,&numcells,&qinvar,workperm, - active,&refcode,dispatch.refine,invarproc, - mininvarlevel,maxinvarlevel,invararg,digraph,M,n); - firstcode[level] = (short)refcode; - if (qinvar > 0) - { - ++invapplics; - if (qinvar == 2) - { - ++invsuccesses; - if (mininvarlevel < 0) mininvarlevel = level; - if (maxinvarlevel < 0) maxinvarlevel = level; - if (level < invarsuclevel) invarsuclevel = level; - } - } - - tc = -1; - if (numcells != n) - { - /* locate new target cell, setting tc to its position in lab, tcell - to its contents, and tcellsize to its size: */ - maketargetcell(g,lab,ptn,level,tcell,&tcellsize, - &tc,tc_level,digraph,-1,dispatch.targetcell,M,n); - stats->tctotal += tcellsize; - } - firsttc[level] = tc; - - /* optionally call user-defined node examination procedure: */ - OPTCALL(usernodeproc) - (g,lab,ptn,level,numcells,tc,(int)firstcode[level],M,n); - - if (numcells == n) /* found first leaf? */ - { - firstterminal(lab,level); - OPTCALL(userlevelproc)(lab,ptn,level,orbits,stats,0,1,1,n,0,n); - return level-1; - } - - if (noncheaplevel >= level - && !(*dispatch.cheapautom)(ptn,level,digraph,n)) - noncheaplevel = level + 1; - - /* use the elements of the target cell to produce the children: */ - index = 0; - for (tv1 = tv = nextelement(tcell,M,-1); tv >= 0; - tv = nextelement(tcell,M,tv)) - { - if (orbits[tv] == tv) /* ie, not equiv to previous child */ - { - breakout(lab,ptn,level+1,tc,tv,active,M); - ADDELEMENT(fixedpts,tv); - cosetindex = tv; - if (tv == tv1) - { -#if !MAXN - rtnlevel = firstpathnode0(lab,ptn,level+1,numcells+1, - tcnode_this); -#else - rtnlevel = firstpathnode(lab,ptn,level+1,numcells+1); -#endif - childcount = 1; - gca_first = level; - stabvertex = tv1; - } - else - { -#if !MAXN - rtnlevel = othernode0(lab,ptn,level+1,numcells+1, - tcnode_this); -#else - rtnlevel = othernode(lab,ptn,level+1,numcells+1); -#endif - ++childcount; - } - DELELEMENT(fixedpts,tv); - if (rtnlevel < level) - return rtnlevel; - if (needshortprune) - { - needshortprune = FALSE; - shortprune(tcell,fmptr-M,M); - } - recover(ptn,level); - } - if (orbits[tv] == tv1) /* ie, in same orbit as tv1 */ - ++index; - } - MULTIPLY(stats->grpsize1,stats->grpsize2,index); - - if (tcellsize == index && allsamelevel == level + 1) - --allsamelevel; - - if (domarkers) - writemarker(level,tv1,index,tcellsize,stats->numorbits,numcells); - OPTCALL(userlevelproc)(lab,ptn,level,orbits,stats,tv1,index,tcellsize, - numcells,childcount,n); - return level-1; -} - -/***************************************************************************** -* * -* othernode(lab,ptn,level,numcells) produces a node other than an ancestor * -* of the first leaf. The parameters describe the level and the colour * -* partition. The list of active cells is found in the global set 'active'. * -* The value returned is the level to return to. * -* * -* FUNCTIONS CALLED: (*usernodeproc)(),doref(),refine(),recover(), * -* processnode(),cheapautom(),(*tcellproc)(),shortprune(), * -* nextelement(),breakout(),othernode(),longprune() * -* * -*****************************************************************************/ - -static int -#if !MAXN -othernode0(int *lab, int *ptn, int level, int numcells, - tcnode *tcnode_parent) -#else -othernode(int *lab, int *ptn, int level, int numcells) -#endif -{ - int tv; - int tv1,refcode,rtnlevel,tcellsize,tc,qinvar; - short code; -#if !MAXN - set *tcell; - tcnode *tcnode_this; - - tcnode_this = tcnode_parent->next; - if (tcnode_this == NULL) - { - if ((tcnode_this = (tcnode*)ALLOCS(1,sizeof(tcnode))) == NULL || - (tcnode_this->tcellptr - = (set*)ALLOCS(alloc_m,sizeof(set))) == NULL) - alloc_error("tcell"); - tcnode_parent->next = tcnode_this; - tcnode_this->next = NULL; - } - tcell = tcnode_this->tcellptr; -#else - set tcell[MAXM]; -#endif - -#ifdef NAUTY_IN_MAGMA - if (main_seen_interrupt) return NAUTY_ABORT; -#endif - - ++stats->numnodes; - - /* refine partition : */ - doref(g,lab,ptn,level,&numcells,&qinvar,workperm,active, - &refcode,dispatch.refine,invarproc,mininvarlevel,maxinvarlevel, - invararg,digraph,M,n); - code = (short)refcode; - if (qinvar > 0) - { - ++invapplics; - if (qinvar == 2) - { - ++invsuccesses; - if (level < invarsuclevel) invarsuclevel = level; - } - } - - if (eqlev_first == level - 1 && code == firstcode[level]) - eqlev_first = level; - if (getcanon) - { - if (eqlev_canon == level - 1) - { - if (code < canoncode[level]) - comp_canon = -1; - else if (code > canoncode[level]) - comp_canon = 1; - else - { - comp_canon = 0; - eqlev_canon = level; - } - } - if (comp_canon > 0) canoncode[level] = code; - } - - tc = -1; - /* If children will be required, find new target cell and set tc to its - position in lab, tcell to its contents, and tcellsize to its size: */ - - if (numcells < n && (eqlev_first == level || - (getcanon && comp_canon >= 0))) - { - if (!getcanon || comp_canon < 0) - { - maketargetcell(g,lab,ptn,level,tcell,&tcellsize,&tc, - tc_level,digraph,firsttc[level],dispatch.targetcell,M,n); - if (tc != firsttc[level]) eqlev_first = level - 1; - } - else - maketargetcell(g,lab,ptn,level,tcell,&tcellsize,&tc, - tc_level,digraph,-1,dispatch.targetcell,M,n); - stats->tctotal += tcellsize; - } - - /* optionally call user-defined node examination procedure: */ - OPTCALL(usernodeproc)(g,lab,ptn,level,numcells,tc,(int)code,M,n); - - /* call processnode to classify the type of this node: */ - - rtnlevel = processnode(lab,ptn,level,numcells); - if (rtnlevel < level) /* keep returning if necessary */ - return rtnlevel; - if (needshortprune) - { - needshortprune = FALSE; - shortprune(tcell,fmptr-M,M); - } - - if (!(*dispatch.cheapautom)(ptn,level,digraph,n)) - noncheaplevel = level + 1; - - /* use the elements of the target cell to produce the children: */ - for (tv1 = tv = nextelement(tcell,M,-1); tv >= 0; - tv = nextelement(tcell,M,tv)) - { - breakout(lab,ptn,level+1,tc,tv,active,M); - ADDELEMENT(fixedpts,tv); -#if !MAXN - rtnlevel = othernode0(lab,ptn,level+1,numcells+1,tcnode_this); -#else - rtnlevel = othernode(lab,ptn,level+1,numcells+1); -#endif - DELELEMENT(fixedpts,tv); - - if (rtnlevel < level) return rtnlevel; - /* use stored automorphism data to prune target cell: */ - if (needshortprune) - { - needshortprune = FALSE; - shortprune(tcell,fmptr-M,M); - } - if (tv == tv1) - { - longprune(tcell,fixedpts,workspace,fmptr,M); - if (doschreier) pruneset(fixedpts,gp,&gens,tcell,M,n); - } - - recover(ptn,level); - } - - return level-1; -} - -/***************************************************************************** -* * -* Process the first leaf of the tree. * -* * -* FUNCTIONS CALLED: NONE * -* * -*****************************************************************************/ - -static void -firstterminal(int *lab, int level) -{ - int i; - - stats->maxlevel = level; - gca_first = allsamelevel = eqlev_first = level; - firstcode[level+1] = 077777; - firsttc[level+1] = -1; - - for (i = 0; i < n; ++i) firstlab[i] = lab[i]; - - if (getcanon) - { - canonlevel = eqlev_canon = gca_canon = level; - comp_canon = 0; - samerows = 0; - for (i = 0; i < n; ++i) canonlab[i] = lab[i]; - for (i = 0; i <= level; ++i) canoncode[i] = firstcode[i]; - canoncode[level+1] = 077777; - stats->canupdates = 1; - } -} - -/***************************************************************************** -* * -* Process a node other than the first leaf or its ancestors. It is first * -* classified into one of five types and then action is taken appropriate * -* to that type. The types are * -* * -* 0: Nothing unusual. This is just a node internal to the tree whose * -* children need to be generated sometime. * -* 1: This is a leaf equivalent to the first leaf. The mapping from * -* firstlab to lab is thus an automorphism. After processing the * -* automorphism, we can return all the way to the closest invocation * -* of firstpathnode. * -* 2: This is a leaf equivalent to the bsf leaf. Again, we have found an * -* automorphism, but it may or may not be as useful as one from a * -* type-1 node. Return as far up the tree as possible. * -* 3: This is a new bsf node, provably better than the previous bsf node. * -* After updating canonlab etc., treat it the same as type 4. * -* 4: This is a leaf for which we can prove that no descendant is * -* equivalent to the first or bsf leaf or better than the bsf leaf. * -* Return up the tree as far as possible, but this may only be by * -* one level. * -* * -* Types 2 and 3 can't occur if getcanon==FALSE. * -* The value returned is the level in the tree to return to, which can be * -* anywhere up to the closest invocation of firstpathnode. * -* * -* FUNCTIONS CALLED: isautom(),updatecan(),testcanlab(),fmperm(), * -* writeperm(),(*userautomproc)(),orbjoin(), * -* shortprune(),fmptn() * -* * -*****************************************************************************/ - -static int -processnode(int *lab, int *ptn, int level, int numcells) -{ - int i,code,save,newlevel; - boolean ispruneok; - int sr; - - code = 0; - if (eqlev_first != level && (!getcanon || comp_canon < 0)) - code = 4; - else if (numcells == n) - { - if (eqlev_first == level) - { - for (i = 0; i < n; ++i) workperm[firstlab[i]] = lab[i]; - - if (gca_first >= noncheaplevel || - (*dispatch.isautom)(g,workperm,digraph,M,n)) - code = 1; - } - if (code == 0) - { - if (getcanon) - { - sr = 0; - if (comp_canon == 0) - { - if (level < canonlevel) - comp_canon = 1; - else - { - (*dispatch.updatecan) - (g,canong,canonlab,samerows,M,n); - samerows = n; - comp_canon - = (*dispatch.testcanlab)(g,canong,lab,&sr,M,n); - } - } - if (comp_canon == 0) - { - for (i = 0; i < n; ++i) workperm[canonlab[i]] = lab[i]; - code = 2; - } - else if (comp_canon > 0) - code = 3; - else - code = 4; - } - else - code = 4; - } - } - - if (code != 0 && level > stats->maxlevel) stats->maxlevel = level; - - switch (code) - { - case 0: /* nothing unusual noticed */ - return level; - - case 1: /* lab is equivalent to firstlab */ - if (fmptr == worktop) fmptr -= 2 * M; - fmperm(workperm,fmptr,fmptr+M,M,n); - fmptr += 2 * M; - if (writeautoms) - writeperm(outfile,workperm,cartesian,linelength,n); - stats->numorbits = orbjoin(orbits,workperm,n); - ++stats->numgenerators; - OPTCALL(userautomproc)(stats->numgenerators,workperm,orbits, - stats->numorbits,stabvertex,n); - if (doschreier) addgenerator(&gp,&gens,workperm,n); - return gca_first; - - case 2: /* lab is equivalent to canonlab */ - if (fmptr == worktop) fmptr -= 2 * M; - fmperm(workperm,fmptr,fmptr+M,M,n); - fmptr += 2 * M; - save = stats->numorbits; - stats->numorbits = orbjoin(orbits,workperm,n); - if (stats->numorbits == save) - { - if (gca_canon != gca_first) needshortprune = TRUE; - return gca_canon; - } - if (writeautoms) - writeperm(outfile,workperm,cartesian,linelength,n); - ++stats->numgenerators; - OPTCALL(userautomproc)(stats->numgenerators,workperm,orbits, - stats->numorbits,stabvertex,n); - if (doschreier) addgenerator(&gp,&gens,workperm,n); - if (orbits[cosetindex] < cosetindex) - return gca_first; - if (gca_canon != gca_first) - needshortprune = TRUE; - return gca_canon; - - case 3: /* lab is better than canonlab */ - ++stats->canupdates; - for (i = 0; i < n; ++i) canonlab[i] = lab[i]; - canonlevel = eqlev_canon = gca_canon = level; - comp_canon = 0; - canoncode[level+1] = 077777; - samerows = sr; - break; - - case 4: /* non-automorphism terminal node */ - ++stats->numbadleaves; - break; - } /* end of switch statement */ - - /* only cases 3 and 4 get this far: */ - if (level != noncheaplevel) - { - ispruneok = TRUE; - if (fmptr == worktop) fmptr -= 2 * M; - fmptn(lab,ptn,noncheaplevel,fmptr,fmptr+M,M,n); - fmptr += 2 * M; - } - else - ispruneok = FALSE; - - save = (allsamelevel > eqlev_canon ? allsamelevel-1 : eqlev_canon); - newlevel = (noncheaplevel <= save ? noncheaplevel-1 : save); - - if (ispruneok && newlevel != gca_first) needshortprune = TRUE; - return newlevel; - } - -/***************************************************************************** -* * -* Recover the partition nest at level 'level' and update various other * -* parameters. * -* * -* FUNCTIONS CALLED: NONE * -* * -*****************************************************************************/ - -static void -recover(int *ptn, int level) -{ - int i; - - for (i = 0; i < n; ++i) - if (ptn[i] > level) ptn[i] = NAUTY_INFINITY; - - if (level < noncheaplevel) noncheaplevel = level + 1; - if (level < eqlev_first) eqlev_first = level; - if (getcanon) - { - if (level < gca_canon) gca_canon = level; - if (level <= eqlev_canon) - { - eqlev_canon = level; - comp_canon = 0; - } - } -} - -/***************************************************************************** -* * -* Write statistics concerning an ancestor of the first leaf. * -* * -* level = its level * -* tv = the vertex fixed to get the first child = the smallest-numbered * -* vertex in the target cell * -* cellsize = the size of the target cell * -* index = the number of vertices in the target cell which were equivalent * -* to tv = the index of the stabiliser of tv in the group * -* fixing the colour partition at this level * -* * -* numorbits = the number of orbits of the group generated by all the * -* automorphisms so far discovered * -* * -* numcells = the total number of cells in the equitable partition at this * -* level * -* * -* FUNCTIONS CALLED: itos(),putstring() * -* * -*****************************************************************************/ - -static void -writemarker(int level, int tv, int index, int tcellsize, - int numorbits, int numcells) -{ - char s[30]; - -#define PUTINT(i) itos(i,s); putstring(outfile,s) -#define PUTSTR(x) putstring(outfile,x) - - PUTSTR("level "); - PUTINT(level); - PUTSTR(": "); - if (numcells != numorbits) - { - PUTINT(numcells); - PUTSTR(" cell"); - if (numcells == 1) PUTSTR("; "); - else PUTSTR("s; "); - } - PUTINT(numorbits); - PUTSTR(" orbit"); - if (numorbits == 1) PUTSTR("; "); - else PUTSTR("s; "); - PUTINT(tv+labelorg); - PUTSTR(" fixed; index "); - PUTINT(index); - if (tcellsize != index) - { - PUTSTR("/"); - PUTINT(tcellsize); - } - PUTSTR("\n"); -} - -/***************************************************************************** -* * -* nauty_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -nauty_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in nauty.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in nauty.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in nauty.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: nauty.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* extra_autom(p,n) - add an extra automophism, hard to do correctly * -* * -*****************************************************************************/ - -void -extra_autom(int *p, int n) -{ - if (writeautoms) - writeperm(outfile,p,cartesian,linelength,n); - stats->numorbits = orbjoin(orbits,p,n); - ++stats->numgenerators; - OPTCALL(userautomproc)(stats->numgenerators,p,orbits, - stats->numorbits,stabvertex,n); -} - -/***************************************************************************** -* * -* extra_level(level,lab,ptn,numcells,tv1,index,tcellsize,childcount) * -* creates an artificial level in the search. This is dangerous. * -* * -*****************************************************************************/ - -void -extra_level(int level, int *lab, int *ptn, int numcells, int tv1, int index, - int tcellsize, int childcount, int n) -{ - MULTIPLY(stats->grpsize1,stats->grpsize2,index); - if (domarkers) - writemarker(level,tv1,index,tcellsize,stats->numorbits,numcells); - OPTCALL(userlevelproc)(lab,ptn,level,orbits,stats,tv1,index,tcellsize, - numcells,childcount,n); -} - -/***************************************************************************** -* * -* nauty_freedyn() frees all the dynamic memory used in this module. * -* * -*****************************************************************************/ - -void -nauty_freedyn(void) -{ -#if !MAXN - tcnode *tcp,*tcq; - - tcp = tcnode0.next; - while (tcp != NULL) - { - tcq = tcp->next; - FREES(tcp->tcellptr); - FREES(tcp); - tcp = tcq; - } - alloc_m = 0; - tcnode0.next = NULL; - DYNFREE(firsttc,firsttc_sz); - DYNFREE(canoncode,canoncode_sz); - DYNFREE(firstcode,firstcode_sz); - DYNFREE(workperm,workperm_sz); - DYNFREE(canonlab,canonlab_sz); - DYNFREE(firstlab,firstlab_sz); - DYNFREE(defltwork,defltwork_sz); - DYNFREE(fixedpts,fixedpts_sz); - DYNFREE(active,active_sz); -#endif -} diff --git a/tools/nauty25r9_mac/nauty.h b/tools/nauty25r9_mac/nauty.h deleted file mode 100644 index f1bb218..0000000 --- a/tools/nauty25r9_mac/nauty.h +++ /dev/null @@ -1,1177 +0,0 @@ -/************************************************************************** -* This is the header file for Version 2.5 of nauty(). * -* nauty.h. Generated from nauty-h.in by configure. -**************************************************************************/ - -#ifndef _NAUTY_H_ /* only process this file once */ -#define _NAUTY_H_ - -/* The parts between the ==== lines are modified by configure when -creating nauty.h out of nauty-h.in. If configure is not being used, -it is necessary to check they are correct. -====================================================================*/ - -/* Check whether various headers or options are available */ -#define HAVE_UNISTD_H 1 /* */ -#define HAVE_SYSTYPES_H 1 /* */ -#define HAVE_STDDEF_H 1 /* */ -#define HAVE_STDLIB_H 1 /* */ -#define HAVE_STRING_H 1 /* */ -#define MALLOC_DEC 1 /* 1 = malloc() is declared in stdlib.h, */ - /* 2 = in malloc.h, 0 = in neither place */ -#define HAS_MATH_INF 1 /* INFINITY is defined in math.h or */ - /* some system header likely to be used */ -#define HAS_STDIO_UNLOCK 1 /* Whether there are getc_unlocked, */ - /* putc_unlocked,flockfile and funlockfile*/ - -#define DEFAULT_WORDSIZE 0 -#define SIZEOF_INT 4 -#define SIZEOF_LONG 8 -#define SIZEOF_LONG_LONG 8 /* 0 if nonexistent */ - -#define HAVE_CONST 1 /* compiler properly supports const */ - -#define HAVE_TLS 0 /* have storage attribute for thread-local */ -#define TLS_ATTR /* if so, what it is. if not, empty */ - -#define USE_ANSICONTROLS 0 - /* whether --enable-ansicontrols is used */ - -#define _FILE_OFFSET_BITS 0 -#if _FILE_OFFSET_BITS == 64 -#define _LARGEFILE_SOURCE -#else -#undef _FILE_OFFSET_BITS -#endif - -/* Support of gcc extensions __builtin_clz, __builtin_clzl, __builtin_clzll */ -#define HAVE_CLZ 1 -#define HAVE_CLZL 1 -#define HAVE_CLZLL 1 - -/*==================================================================*/ - -/* The following line must be uncommented for compiling into Magma. */ -/* #define NAUTY_IN_MAGMA */ - -#ifdef NAUTY_IN_MAGMA -#include "defs.h" -#include "system.h" -#include "bs.h" -#define OLDEXTDEFS -#else -#include -#define P_(x) x -#endif - -#if defined(__cray) || defined(__cray__) || defined(cray) -#define SYS_CRAY /* Cray UNIX, portable or standard C */ -#endif - -#if defined(__unix) || defined(__unix__) || defined(unix) -#define SYS_UNIX -#endif - -#if !HAVE_CONST -#define const -#endif - -/***************************************************************************** -* * -* AUTHOR: Brendan D. McKay * -* Research School of Computer Science * -* Australian National University * -* Canberra, ACT 0200, Australia * -* phone: +61 2 6125 3845 fax: +61 2 6125 0010 * -* email: bdm@cs.anu.edu.au * -* * -* Nauty is copyright (1984-2013) Brendan McKay. All rights reserved. * -* Permission -* is hereby given for use and/or distribution with the exception of * -* sale for profit or application with nontrivial military significance. * -* You must not remove this copyright notice, and you must document any * -* changes that you make to this program. * -* This software is subject to this copyright only, irrespective of * -* any copyright attached to any package of which this is a part. * -* * -* This program is only provided "as is". No responsibility will be taken * -* by the author, his employer or his pet rabbit* for any misfortune which * -* befalls you because of its use. I don't think it will delete all your * -* files, burn down your computer room or turn your children against you, * -* but if it does: stiff cheddar. On the other hand, I very much welcome * -* bug reports, or at least I would if there were any bugs. * -* * RIP, 1989 * -* Traces is copyright Adolfo Piperno (2011-). * -* * -* Reference manual: * -* B. D. McKay and A. Piperno, nauty User's Guide (Version 2.5), * -* http://pallini.di.uniroma1.it * -* http://cs.anu.edu.au/~bdm/nauty/ * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : renamed to version 1.3 (no changes to this file) * -* 28-Sep-88 : added PC Turbo C support, making version 1.4 * -* 23-Mar-89 : changes for version 1.5 : * -* - reworked M==1 code * -* - defined NAUTYVERSION string * -* - made NAUTYH_READ to allow this file to be read twice * -* - added optional ANSI function prototypes * -* - added validity check for WORDSIZE * -* - added new fields to optionblk structure * -* - updated DEFAULTOPTIONS to add invariants fields * -* - added (set*) cast to definition of GRAPHROW * -* - added definition of ALLOCS and FREES * -* 25-Mar-89 : - added declaration of new function doref() * -* - added UNION macro * -* 29-Mar-89 : - reduced the default MAXN for small machines * -* - removed OUTOFSPACE (no longer used) * -* - added SETDIFF and XOR macros * -* 2-Apr-89 : - extended statsblk structure * -* 4-Apr-89 : - added IS_* macros * -* - added ERRFILE definition * -* - replaced statsblk.outofspace by statsblk.errstatus * -* 5-Apr-89 : - deleted definition of np2vector (no longer used) * -* - introduced EMPTYSET macro * -* 12-Apr-89 : - eliminated MARK, UNMARK and ISMARKED (no longer used) * -* 18-Apr-89 : - added MTOOBIG and CANONGNIL * -* 12-May-89 : - made ISELEM1 and ISELEMENT return 0 or 1 * -* 2-Mar-90 : - added EXTPROC macro and used it * -* 12-Mar-90 : - added SYS_CRAY, with help from N. Sloane and A. Grosky * -* - added dummy groupopts field to optionblk * -* - select some ANSI things if __STDC__ exists * -* 20-Mar-90 : - changed default MAXN for Macintosh versions * -* - created SYS_MACTHINK for Macintosh THINK compiler * -* 27-Mar-90 : - split SYS_MSDOS into SYS_PCMS4 and SYS_PCMS5 * -* 13-Oct-90 : changes for version 1.6: * -* - fix definition of setword for WORDSIZE==64 * -* 14-Oct-90 : - added SYS_APOLLO version to avoid compiler bug * -* 15-Oct-90 : - improve detection of ANSI conformance * -* 17-Oct-90 : - changed temp name in EMPTYSET to avoid A/UX bug * -* 16-Apr-91 : changes for version 1.7: * -* - made version SYS_PCTURBO use free(), not cfree() * -* 2-Sep-91 : - noted that SYS_PCMS5 also works for Quick C * -* - moved MULTIPLY to here from nauty.c * -* 12-Jun-92 : - changed the top part of this comment * -* 27-Aug-92 : - added version SYS_IBMC, thanks to Ivo Duentsch * -* 5-Jun-93 : - renamed to version 1.7+, only change in naututil.h * -* 29-Jul-93 : changes for version 1.8: * -* - fixed error in default 64-bit version of FIRSTBIT * -* (not used in any version before ALPHA) * -* - installed ALPHA version (thanks to Gordon Royle) * -* - defined ALLOCS,FREES for SYS_IBMC * -* 3-Sep-93 : - make calloc void* in ALPHA version * -* 17-Sep-93 : - renamed to version 1.9, * -* changed only dreadnaut.c and nautinv.c * -* 24-Feb-94 : changes for version 1.10: * -* - added version SYS_AMIGAAZT, thanks to Carsten Saager * -* (making 1.9+) * -* 19-Apr-95 : - added prototype wrapper for C++, * -* thanks to Daniel Huson * -* 5-Mar-96 : - added SYS_ALPHA32 version (32-bit setwords on Alpha) * -* 13-Jul-96 : changes for version 2.0: * -* - added dynamic allocation * -* - ERRFILE must be defined * -* - added FLIPELEM1 and FLIPELEMENT macros * -* 13-Aug-96 : - added SWCHUNK? macros * -* - added TAKEBIT macro * -* 28-Nov-96 : - include sys/types.h if not ANSI (tentative!) * -* 24-Jan-97 : - and stdlib.h if ANSI * -* - removed use of cfree() from UNIX variants * -* 25-Jan-97 : - changed options.getcanon from boolean to int * -* Backwards compatibility is ok, as boolean and int * -* are the same. Now getcanon=2 means to get the label * -* and not care about the group. Sometimes faster. * -* 6-Feb-97 : - Put in #undef for FALSE and TRUE to cope with * -* compilers that illegally predefine them. * -* - declared nauty_null and nautil_null * -* 2-Jul-98 : - declared ALLBITS * -* 21-Oct-98 : - allow WORDSIZE==64 using unsigned long long * -* - added BIGNAUTY option for really big graphs * -* 11-Dec-99 : - made bit, leftbit and bytecount static in each file * -* 9-Jan-00 : - declared nauty_check() and nautil_check() * -* 12-Feb-00 : - Used #error for compile-time checks * -* - Added DYNREALLOC * -* 4-Mar-00 : - declared ALLMASK(n) * -* 27-May-00 : - declared CONDYNFREE * -* 28-May-00 : - declared nautil_freedyn() * -* 16-Aug-00 : - added OLDNAUTY and changed canonical labelling * -* 16-Nov-00 : - function prototypes are now default and unavoidable * -* - removed UPROC, now assume all compilers know void * -* - removed nvector, now just int (as it always was) * -* - added extra parameter to targetcell() * -* - removed old versions which were only to skip around * -* bugs that should have been long fixed: * -* SYS_APOLLO and SYS_VAXBSD. * -* - DEFAULTOPIONS now specifies no output * -* - Removed obsolete SYS_MACLSC version * -* 21-Apr-01 : - Added code to satisfy compilation into Magma. This * -* is activated by defining NAUTY_IN_MAGMA above. * -* - The *_null routines no longer exist * -* - Default maxinvarlevel is now 1. (This has no effect * -* unless an invariant is specified.) * -* - Now labelorg has a concrete declaration in nautil.c * -* and EXTDEFS is not needed * -* 5-May-01 : - NILFUNCTION, NILSET, NILGRAPH now obsolete. Use NULL. * -* 11-Sep-01 : - setword is unsigned int in the event that UINT_MAX * -* is defined and indicates it is big enough * -* 17-Oct-01 : - major rewrite for 2.1. SYS_* variables gone! * -* Some modernity assumed, eg size_t * -* 8-Aug-02 : - removed MAKEEMPTY (use EMPTYSET instead) * -* - deleted OLDNAUTY everywhere * -* 27-Aug-02 : - converted to use autoconf. Now the original of this * -* file is nauty-h.in. Run configure to make nauty.h. * -* 20-Dec-02 : - increased INFINITY * -* some reorganization to please Magma * -* - declared nauty_freedyn() * -* 17-Nov-03 : - renamed INFINITY to NAUTY_INFINITY * -* 29-May-04 : - added definition of SETWORD_FORMAT * -* 14-Sep-04 : - extended prototypes even to recursive functions * -* 16-Oct-04 : - added DEFAULTOPTIONS_GRAPH * -* 24-Oct-04 : Starting 2.3 * -* - remove register declarations as modern compilers * -* tend to find them a nuisance * -* - Don't define the obsolete symbol INFINITY if it is * -* defined already * -* 17-Nov-04 : - make 6 counters in statsblk unsigned long * -* 17-Jan-04 : - add init() and cleanup() to dispatchvec * -* 12-Nov-05 : - Changed NAUTY_INFINITY to 2^30+2 in BIGNAUTY case * -* 22-Nov-06 : Starting 2.4 * -* - removed usertcellproc from options * -* changed bestcell to targetcell in dispatch vector * -* declare targetcell and maketargetcell * -* 29-Nov-06 : - add extraoptions to optionblk * -* - add declarations of extra_autom and extra_level * -* 10-Dec-06 : - BIGNAUTY is gone! Now permutation=shortish=int. * -* NAUTY_INFINITY only depends on whether sizeof(int)=2. * -* 27-Jun-08 : - define nauty_counter and LONG_LONG_COUNTERS * -* 30-Jun-08 : - declare version 2.4 * -* 8-Nov-09 : - final release of version 2.4; * -* 10-Nov-10 : Starting 2.5 * -* - declare shortish and permutation obsolete, now int * -* 14-Nov-10 : - SETWORDSNEEDED(n) * -* 23-May-10 : - declare densenauty() * -* 29-Jun-10 : - add PRINT_COUNTER(f,x) * -* - add DEFAULTOPTIONS_DIGRAPH() * -* 27-Mar-11 : - declare writegroupsize() * -* 14-Jan-12 : - add HAVE_TLS and TLS_ATTR * -* 21-Feb-12 : - add ENABLE_ANSI * -* 18-Mar-12 : - add COUNTER_FMT * -* 18-Aug-12 : - add ADDONEARC, ADDONEEDGE, EMPTYGRAPH * -* 29-Aug-12 : - add CLZ macros and FIRSTBITNZ * -* 19-Oct-12 : - add DEFAULT_WORDSIZE * -* 3-Jan-12 : Released 2.5rc1 * -* * -* ++++++ This file is automatically generated, don't edit it by hand! ++++++ -* * -*****************************************************************************/ - -/***************************************************************************** -* * -* 16-bit, 32-bit and 64-bit versions can be selected by defining WORDSIZE. * -* The largest graph that can be handled has MAXN vertices. * -* Both WORDSIZE and MAXN can be defined on the command line. * -* WORDSIZE must be 16, 32 or 64; MAXN must be <= NAUTY_INFINITY-2; * -* * -* With a very slight loss of efficiency (depending on platform), nauty * -* can be compiled to dynamically allocate arrays. Predefine MAXN=0 to * -* achieve this effect, which is default behaviour from version 2.0. * -* In that case, graphs of size up to NAUTY_INFINITY-2 can be handled * -* if the the memory is available. * -* * -* If only very small graphs need to be processed, use MAXN<=WORDSIZE * -* since this causes substantial code optimizations. * -* * -* Conventions and Assumptions: * -* * -* A 'setword' is the chunk of memory that is occupied by one part of * -* a set. This is assumed to be >= WORDSIZE bits in size. * -* * -* The rightmost (loworder) WORDSIZE bits of setwords are numbered * -* 0..WORDSIZE-1, left to right. It is necessary that the 2^WORDSIZE * -* setwords with the other bits zero are totally ordered under <,=,>. * -* This needs care on a 1's-complement machine. * -* * -* The int variables m and n have consistent meanings throughout. * -* Graphs have n vertices always, and sets have m setwords always. * -* * -* A 'set' consists of m contiguous setwords, whose bits are numbered * -* 0,1,2,... from left (high-order) to right (low-order), using only * -* the rightmost WORDSIZE bits of each setword. It is used to * -* represent a subset of {0,1,...,n-1} in the usual way - bit number x * -* is 1 iff x is in the subset. Bits numbered n or greater, and * -* unnumbered bits, are assumed permanently zero. * -* * -* A 'graph' consists of n contiguous sets. The i-th set represents * -* the vertices adjacent to vertex i, for i = 0,1,...,n-1. * -* * -* A 'permutation' is an array of n ints repesenting a permutation of * -* the set {0,1,...,n-1}. The value of the i-th entry is the number to * -* which i is mapped. * -* * -* If g is a graph and p is a permutation, then g^p is the graph in * -* which vertex i is adjacent to vertex j iff vertex p[i] is adjacent * -* to vertex p[j] in g. * -* * -* A partition nest is represented by a pair (lab,ptn), where lab and ptn * -* are int arrays. The "partition at level x" is the partition whose * -* cells are {lab[i],lab[i+1],...,lab[j]}, where [i,j] is a maximal * -* subinterval of [0,n-1] such that ptn[k] > x for i <= k < j and * -* ptn[j] <= x. The partition at level 0 is given to nauty by the user. * -* This is refined for the root of the tree, which has level 1. * -* * -*****************************************************************************/ - -#ifndef NAUTY_IN_MAGMA -#if HAVE_SYSTYPES_H -#include -#endif -#if HAVE_UNISTD_H -#include -#endif -#if HAVE_STDDEF_H -#include -#endif -#if HAVE_STDLIB_H -#include -#endif -#if HAVE_STRING_H -#include -#else -#include -#endif -#endif - -/* WORDSIZE is the number of set elements per setword (16, 32 or 64). - WORDSIZE and setword are defined as follows: - - DEFAULT_WORDSIZE is usually 0 but is set by the configure script - to NN if --enable-wordsize=NN is used, where NN is 16, 32 or 64. - - If WORDSIZE is not defined, but DEFAULT_WORDSIZE > 0, then set - WORDSIZE to the same value as DEFAULT_WORDSIZE. - If WORDSIZE is so far undefined, use 32 unless longs have more - than 32 bits, in which case use 64. - Define setword thus: - WORDSIZE==16 : unsigned short - WORDSIZE==32 : unsigned int unless it is too small, - in which case unsigned long - WORDSIZE==64 : the first of unsigned int, unsigned long, - unsigned long long, which is large enough. -*/ - -#ifdef NAUTY_IN_MAGMA -#undef WORDSIZE -#define WORDSIZE WORDBITS -#endif - -#ifndef WORDSIZE -#if DEFAULT_WORDSIZE > 0 -#define WORDSIZE DEFAULT_WORDSIZE -#endif -#endif - -#ifdef WORDSIZE - -#if (WORDSIZE != 16) && (WORDSIZE != 32) && (WORDSIZE != 64) - #error "WORDSIZE must be 16, 32 or 64" -#endif - -#else /* WORDSIZE undefined */ - -#if SIZEOF_LONG>4 -#define WORDSIZE 64 -#else -#define WORDSIZE 32 -#endif - -#endif /* WORDSIZE */ - -#ifdef NAUTY_IN_MAGMA -typedef t_uint setword; -#define SETWORD_INT /* Don't assume this is correct in Magma. */ - -#else /* NAUTY_IN_MAGMA */ - -#if WORDSIZE==16 -typedef unsigned short setword; -#define SETWORD_SHORT -#endif - -#if WORDSIZE==32 -#if SIZEOF_INT>=4 -typedef unsigned int setword; -#define SETWORD_INT -#else -typedef unsigned long setword; -#define SETWORD_LONG -#endif -#endif - -#if WORDSIZE==64 -#if SIZEOF_INT>=8 -typedef unsigned int setword; -#define SETWORD_INT -#else -#if SIZEOF_LONG>=8 -typedef unsigned long setword; -#define SETWORD_LONG -#else -typedef unsigned long long setword; -#define SETWORD_LONGLONG -#endif -#endif -#endif - -#endif /* NAUTY_IN_MAGMA else */ - -#if SIZEOF_LONG_LONG>=8 && SIZEOF_LONG==4 -typedef unsigned long long nauty_counter; -#define LONG_LONG_COUNTERS 1 -#define COUNTER_FMT "%llu" -#else -typedef unsigned long nauty_counter; -#define LONG_LONG_COUNTERS 0 -#define COUNTER_FMT "%lu" -#endif -#define PRINT_COUNTER(f,x) fprintf(f,COUNTER_FMT,x) - -#define NAUTYVERSIONID (25490+HAVE_TLS) /* 10000*version + HAVE_TLS */ -#define NAUTYREQUIRED NAUTYVERSIONID /* Minimum compatible version */ - -#if WORDSIZE==16 -#define NAUTYVERSION "2.5 (16 bits)" -#endif -#if WORDSIZE==32 -#define NAUTYVERSION "2.5 (32 bits)" -#endif -#if WORDSIZE==64 -#define NAUTYVERSION "2.5 (64 bits)" -#endif - -#ifndef MAXN /* maximum allowed n value; use 0 for dynamic sizing. */ -#define MAXN 0 -#define MAXM 0 -#else -#define MAXM ((MAXN+WORDSIZE-1)/WORDSIZE) /* max setwords in a set */ -#endif /* MAXN */ - -/* Starting at version 2.2, set operations work for all set sizes unless - ONE_WORD_SETS is defined. In the latter case, if MAXM=1, set ops - work only for single-setword sets. In any case, macro versions - ending with 1 work for single-setword sets and versions ending with - 0 work for all set sizes. -*/ - -#if WORDSIZE==16 -#define SETWD(pos) ((pos)>>4) /* number of setword containing bit pos */ -#define SETBT(pos) ((pos)&0xF) /* position within setword of bit pos */ -#define TIMESWORDSIZE(w) ((w)<<4) -#define SETWORDSNEEDED(n) ((((n)-1)>>4)+1) /* setwords needed for n bits */ -#endif - -#if WORDSIZE==32 -#define SETWD(pos) ((pos)>>5) -#define SETBT(pos) ((pos)&0x1F) -#define TIMESWORDSIZE(w) ((w)<<5) -#define SETWORDSNEEDED(n) ((((n)-1)>>5)+1) -#endif - -#if WORDSIZE==64 -#define SETWD(pos) ((pos)>>6) -#define SETBT(pos) ((pos)&0x3F) -#define TIMESWORDSIZE(w) ((w)<<6) /* w*WORDSIZE */ -#define SETWORDSNEEDED(n) ((((n)-1)>>6)+1) -#endif - -#ifdef NAUTY_IN_MAGMA -#define BITT bs_bit -#else -#define BITT bit -#endif - -#define ADDELEMENT1(setadd,pos) (*(setadd) |= BITT[pos]) -#define DELELEMENT1(setadd,pos) (*(setadd) &= ~BITT[pos]) -#define FLIPELEMENT1(setadd,pos) (*(setadd) ^= BITT[pos]) -#define ISELEMENT1(setadd,pos) ((*(setadd) & BITT[pos]) != 0) -#define EMPTYSET1(setadd,m) *(setadd) = 0; -#define GRAPHROW1(g,v,m) ((set*)(g)+(v)) -#define ADDONEARC1(g,v,w,m) (g)[v] |= BITT[w] -#define ADDONEEDGE1(g,v,w,m) { ADDONEARC1(g,v,w,m); ADDONEARC1(g,w,v,m); } -#define EMPTYGRAPH1(g,m,n) EMPTYSET0(g,n) /* really EMPTYSET0 */ - -#define ADDELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] |= BITT[SETBT(pos)]) -#define DELELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] &= ~BITT[SETBT(pos)]) -#define FLIPELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] ^= BITT[SETBT(pos)]) -#define ISELEMENT0(setadd,pos) (((setadd)[SETWD(pos)] & BITT[SETBT(pos)]) != 0) -#define EMPTYSET0(setadd,m) \ - {setword *es; \ - for (es = (setword*)(setadd)+(m); --es >= (setword*)(setadd);) *es=0;} -#define GRAPHROW0(g,v,m) ((set*)(g) + (m)*(size_t)(v)) -#define ADDONEARC0(g,v,w,m) ADDELEMENT0(GRAPHROW0(g,v,m),w) -#define ADDONEEDGE0(g,v,w,m) { ADDONEARC0(g,v,w,m); ADDONEARC0(g,w,v,m); } -#define EMPTYGRAPH0(g,m,n) EMPTYSET0(g,(m)*(size_t)(n)) - -#if (MAXM==1) && defined(ONE_WORD_SETS) -#define ADDELEMENT ADDELEMENT1 -#define DELELEMENT DELELEMENT1 -#define FLIPELEMENT FLIPELEMENT1 -#define ISELEMENT ISELEMENT1 -#define EMPTYSET EMPTYSET1 -#define GRAPHROW GRAPHROW1 -#define ADDONEARC ADDONEARC1 -#define ADDONEEDGE ADDONEEDGE1 -#define EMPTYGRAPH EMPTYGRAPH1 -#else -#define ADDELEMENT ADDELEMENT0 -#define DELELEMENT DELELEMENT0 -#define FLIPELEMENT FLIPELEMENT0 -#define ISELEMENT ISELEMENT0 -#define EMPTYSET EMPTYSET0 -#define GRAPHROW GRAPHROW0 -#define ADDONEARC ADDONEARC0 -#define ADDONEEDGE ADDONEEDGE0 -#define EMPTYGRAPH EMPTYGRAPH0 -#endif - - -#ifdef NAUTY_IN_MAGMA -#undef EMPTYSET -#define EMPTYSET(setadd,m) {t_int _i; bsp_makeempty(setadd,m,_i);} -#endif - -#define NOTSUBSET(word1,word2) ((word1) & ~(word2)) /* test if the 1-bits - in setword word1 do not form a subset of those in word2 */ -#define INTERSECT(word1,word2) ((word1) &= (word2)) /* AND word2 into word1 */ -#define UNION(word1,word2) ((word1) |= (word2)) /* OR word2 into word1 */ -#define SETDIFF(word1,word2) ((word1) &= ~(word2)) /* - word2 into word1 */ -#define XOR(word1,word2) ((word1) ^= (word2)) /* XOR word2 into word1 */ -#define ZAPBIT(word,x) ((word) &= ~BITT[x]) /* delete bit x in setword */ -#define TAKEBIT(iw,w) {(iw) = FIRSTBITNZ(w); (w) ^= BITT[iw];} - -#ifdef SETWORD_LONGLONG -#define MSK3232 0xFFFFFFFF00000000ULL -#define MSK1648 0xFFFF000000000000ULL -#define MSK0856 0xFF00000000000000ULL -#define MSK1632 0x0000FFFF00000000ULL -#define MSK0840 0xFF0000000000ULL -#define MSK1616 0xFFFF0000ULL -#define MSK0824 0xFF000000ULL -#define MSK0808 0xFF00ULL -#define MSK63C 0x7FFFFFFFFFFFFFFFULL -#define MSK31C 0x7FFFFFFFULL -#define MSK15C 0x7FFFULL -#define MSK64 0xFFFFFFFFFFFFFFFFULL -#define MSK32 0xFFFFFFFFULL -#define MSK16 0xFFFFULL -#define MSK8 0xFFULL -#endif - -#ifdef SETWORD_LONG -#define MSK3232 0xFFFFFFFF00000000UL -#define MSK1648 0xFFFF000000000000UL -#define MSK0856 0xFF00000000000000UL -#define MSK1632 0x0000FFFF00000000UL -#define MSK0840 0xFF0000000000UL -#define MSK1616 0xFFFF0000UL -#define MSK0824 0xFF000000UL -#define MSK0808 0xFF00UL -#define MSK63C 0x7FFFFFFFFFFFFFFFUL -#define MSK31C 0x7FFFFFFFUL -#define MSK15C 0x7FFFUL -#define MSK64 0xFFFFFFFFFFFFFFFFUL -#define MSK32 0xFFFFFFFFUL -#define MSK16 0xFFFFUL -#define MSK8 0xFFUL -#endif - -#if defined(SETWORD_INT) || defined(SETWORD_SHORT) -#define MSK3232 0xFFFFFFFF00000000U -#define MSK1648 0xFFFF000000000000U -#define MSK0856 0xFF00000000000000U -#define MSK1632 0x0000FFFF00000000U -#define MSK0840 0xFF0000000000U -#define MSK1616 0xFFFF0000U -#define MSK0824 0xFF000000U -#define MSK0808 0xFF00U -#define MSK63C 0x7FFFFFFFFFFFFFFFU -#define MSK31C 0x7FFFFFFFU -#define MSK15C 0x7FFFU -#define MSK64 0xFFFFFFFFFFFFFFFFU -#define MSK32 0xFFFFFFFFU -#define MSK16 0xFFFFU -#define MSK8 0xFFU -#endif - -#if defined(SETWORD_LONGLONG) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04llx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08llx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16llx" -#endif -#endif - -#if defined(SETWORD_LONG) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04lx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08lx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16lx" -#endif -#endif - -#if defined(SETWORD_INT) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04x" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08x" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16x" -#endif -#endif - -#if defined(SETWORD_SHORT) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04hx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08hx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16hx" -#endif -#endif - -/* POPCOUNT(x) = number of 1-bits in a setword x - FIRSTBIT(x) = number of first 1-bit in non-zero setword (0..WORDSIZE-1) - or WORDSIZE if x == 0 - FIRSTBITNZ(x) = as FIRSTBIT(x) but assumes x is not zero - BITMASK(x) = setword whose rightmost WORDSIZE-x-1 (numbered) bits - are 1 and the rest 0 (0 <= x < WORDSIZE) - (I.e., bits 0..x are unselected and the rest selected.) - ALLBITS = all (numbered) bits in a setword */ - -#if WORDSIZE==64 -#define POPCOUNT(x) (bytecount[(x)>>56 & 0xFF] + bytecount[(x)>>48 & 0xFF] \ - + bytecount[(x)>>40 & 0xFF] + bytecount[(x)>>32 & 0xFF] \ - + bytecount[(x)>>24 & 0xFF] + bytecount[(x)>>16 & 0xFF] \ - + bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK3232 ? \ - (x) & MSK1648 ? \ - (x) & MSK0856 ? \ - 0+leftbit[((x)>>56) & MSK8] : \ - 8+leftbit[(x)>>48] \ - : (x) & MSK0840 ? \ - 16+leftbit[(x)>>40] : \ - 24+leftbit[(x)>>32] \ - : (x) & MSK1616 ? \ - (x) & MSK0824 ? \ - 32+leftbit[(x)>>24] : \ - 40+leftbit[(x)>>16] \ - : (x) & MSK0808 ? \ - 48+leftbit[(x)>>8] : \ - 56+leftbit[x]) -#define BITMASK(x) (MSK63C >> (x)) -#define ALLBITS MSK64 -#define SWCHUNK0(w) ((long)((w)>>48)&0xFFFFL) -#define SWCHUNK1(w) ((long)((w)>>32)&0xFFFFL) -#define SWCHUNK2(w) ((long)((w)>>16)&0xFFFFL) -#define SWCHUNK3(w) ((long)(w)&0xFFFFL) -#endif - -#if WORDSIZE==32 -#define POPCOUNT(x) (bytecount[(x)>>24 & 0xFF] + bytecount[(x)>>16 & 0xFF] \ - + bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK1616 ? ((x) & MSK0824 ? \ - leftbit[((x)>>24) & MSK8] : 8+leftbit[(x)>>16]) \ - : ((x) & MSK0808 ? 16+leftbit[(x)>>8] : 24+leftbit[x])) -#define BITMASK(x) (MSK31C >> (x)) -#define ALLBITS MSK32 -#define SWCHUNK0(w) ((long)((w)>>16)&0xFFFFL) -#define SWCHUNK1(w) ((long)(w)&0xFFFFL) -#endif - -#if WORDSIZE==16 -#define POPCOUNT(x) (bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK0808 ? leftbit[((x)>>8) & MSK8] : 8+leftbit[x]) -#define BITMASK(x) (MSK15C >> (x)) -#define ALLBITS MSK16 -#define SWCHUNK0(w) ((long)(w)&0xFFFFL) -#endif - -#if defined(SETWORD_LONGLONG) && HAVE_CLZLL -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clzll(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif -#if defined(SETWORD_LONG) && HAVE_CLZL -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clzl(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif -#if defined(SETWORD_INT) && HAVE_CLZ -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clz(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif - -#ifndef FIRSTBITNZ -#define FIRSTBITNZ FIRSTBIT -#endif - -#ifdef SYS_CRAY -#undef POPCOUNT -#undef FIRSTBIT -#undef BITMASK -#define POPCOUNT(x) _popcnt(x) -#define FIRSTBIT(x) _leadz(x) -#define BITMASK(x) _mask(65+(x)) -#endif - -#ifdef NAUTY_IN_MAGMA -#undef POPCOUNT -#undef FIRSTBIT -#undef BITMASK -#define POPCOUNT(x) bs_popcount(x) -#define FIRSTBIT(x) bs_firstbit(x) -#define BITMASK(x) bs_bitmask(x) -#endif - -#define ALLMASK(n) ((n)?~BITMASK((n)-1):(setword)0) /* First n bits */ - - /* various constants: */ -#undef FALSE -#undef TRUE -#define FALSE 0 -#define TRUE 1 - -#if SIZEOF_INT>=4 -#define NAUTY_INFINITY 0x40000002 -#else -#define NAUTY_INFINITY 0x7FFF -#endif - -/* The following four types are obsolete, use int in new code. */ -typedef int shortish; -typedef shortish permutation; -typedef int nvector,np2vector; - -/* For backward compatibility: */ -#if !HAS_MATH_INF && !defined(INFINITY) -#define INFINITY NAUTY_INFINITY -#endif - -#if MAXN > NAUTY_INFINITY-2 - #error MAXN must be at most NAUTY_INFINITY-2 -#endif - - /* typedefs for sets, graphs, permutations, etc.: */ - -typedef int boolean; /* boolean MUST be the same as int */ - -#define UPROC void /* obsolete */ - -typedef setword set,graph; -#ifdef NAUTY_IN_MAGMA -typedef graph nauty_graph; -typedef set nauty_set; -#endif - -typedef struct -{ - double grpsize1; /* size of group is */ - int grpsize2; /* grpsize1 * 10^grpsize2 */ -#define groupsize1 grpsize1 /* for backwards compatibility */ -#define groupsize2 grpsize2 - int numorbits; /* number of orbits in group */ - int numgenerators; /* number of generators found */ - int errstatus; /* if non-zero : an error code */ -#define outofspace errstatus; /* for backwards compatibility */ - unsigned long numnodes; /* total number of nodes */ - unsigned long numbadleaves; /* number of leaves of no use */ - int maxlevel; /* maximum depth of search */ - unsigned long tctotal; /* total size of all target cells */ - unsigned long canupdates; /* number of updates of best label */ - unsigned long invapplics; /* number of applications of invarproc */ - unsigned long invsuccesses; /* number of successful uses of invarproc() */ - int invarsuclevel; /* least level where invarproc worked */ -} statsblk; - -/* codes for errstatus field (see nauty.c for more accurate descriptions): */ -#define NTOOBIG 1 /* n > MAXN or n > WORDSIZE*m */ -#define MTOOBIG 2 /* m > MAXM */ -#define CANONGNIL 3 /* canong = NULL, but getcanon = TRUE */ - -/* manipulation of real approximation to group size */ -#define MULTIPLY(s1,s2,i) if ((s1 *= i) >= 1e10) {s1 /= 1e10; s2 += 10;} - -struct optionstruct; /* incomplete definition */ - -typedef struct -{ - boolean (*isautom) /* test for automorphism */ - (graph*,int*,boolean,int,int); - int (*testcanlab) /* test for better labelling */ - (graph*,graph*,int*,int*,int,int); - void (*updatecan) /* update canonical object */ - (graph*,graph*,int*,int,int,int); - void (*refine) /* refine partition */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - void (*refine1) /* refine partition, MAXM==1 */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - boolean (*cheapautom) /* test for easy automorphism */ - (int*,int,boolean,int); - int (*targetcell) /* decide which cell to split */ - (graph*,int*,int*,int,int,boolean,int,int,int); - void (*freedyn)(void); /* free dynamic memory */ - void (*check) /* check compilation parameters */ - (int,int,int,int); - void (*init)(graph*,graph**,graph*,graph**,int*,int*,set*, - struct optionstruct*,int*,int,int); - void (*cleanup)(graph*,graph**,graph*,graph**,int*,int*, - struct optionstruct*,statsblk*,int,int); -} dispatchvec; - -typedef struct optionstruct -{ - int getcanon; /* make canong and canonlab? */ -#define LABELONLY 2 /* new value UNIMPLEMENTED */ - boolean digraph; /* multiple edges or loops? */ - boolean writeautoms; /* write automorphisms? */ - boolean writemarkers; /* write stats on pts fixed, etc.? */ - boolean defaultptn; /* set lab,ptn,active for single cell? */ - boolean cartesian; /* use cartesian rep for writing automs? */ - int linelength; /* max chars/line (excl. '\n') for output */ - FILE *outfile; /* file for output, if any */ - void (*userrefproc) /* replacement for usual refine procedure */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - void (*userautomproc) /* procedure called for each automorphism */ - (int,int*,int*,int,int,int); - void (*userlevelproc) /* procedure called for each level */ - (int*,int*,int,int*,statsblk*,int,int,int,int,int,int); - void (*usernodeproc) /* procedure called for each node */ - (graph*,int*,int*,int,int,int,int,int,int); - void (*invarproc) /* procedure to compute vertex-invariant */ - (graph*,int*,int*,int,int,int,int*,int,boolean,int,int); - int tc_level; /* max level for smart target cell choosing */ - int mininvarlevel; /* min level for invariant computation */ - int maxinvarlevel; /* max level for invariant computation */ - int invararg; /* value passed to (*invarproc)() */ - dispatchvec *dispatch; /* vector of object-specific routines */ - boolean schreier; /* use random schreier method */ - void *extra_options; /* arbitrary extra options */ -#ifdef NAUTY_IN_MAGMA - boolean print_stats; /* CAYLEY specfic - GYM Sep 1990 */ - char *invarprocname; /* Magma - no longer global sjc 1994 */ - int lab_h; /* Magma - no longer global sjc 1994 */ - int ptn_h; /* Magma - no longer global sjc 1994 */ - int orbitset_h; /* Magma - no longer global sjc 1994 */ -#endif -} optionblk; - -#ifndef CONSOLWIDTH -#define CONSOLWIDTH 78 -#endif - -/* The following are obsolete. Just use NULL. */ -#define NILFUNCTION ((void(*)())NULL) /* nil pointer to user-function */ -#define NILSET ((set*)NULL) /* nil pointer to set */ -#define NILGRAPH ((graph*)NULL) /* nil pointer to graph */ - -#define DEFAULTOPTIONS_GRAPH(options) optionblk options = \ - {0,FALSE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,NULL,100,0,1,0,&dispatch_graph,FALSE,NULL} -#define DEFAULTOPTIONS_DIGRAPH(options) optionblk options = \ - {0,TRUE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,adjacencies,100,0,999,0,&dispatch_graph,FALSE,NULL} - -#ifndef DEFAULTOPTIONS -#define DEFAULTOPTIONS DEFAULTOPTIONS_GRAPH -#endif - -#ifdef NAUTY_IN_MAGMA -#define PUTC(c,f) io_putchar(c) -#else -#ifdef IS_JAVA -extern void javastream(FILE* f,char c); -#define PUTC(c,f) javastream(f,c) -#else -#define PUTC(c,f) putc(c,f) -#endif -#endif - -/* We hope that malloc, free, realloc are declared either in - or . Otherwise we will define them. We also assume that - size_t has been defined by the time we get to define malloc(). */ -#ifndef NAUTY_IN_MAGMA -#if MALLOC_DEC==2 -#include -#endif -#if MALLOC_DEC==0 -extern void *malloc(size_t); -extern void *realloc(void*,size_t); -extern void free(void*); -#endif -#endif - -/* ALLOCS(x,y) should return a pointer (any pointer type) to x*y units of new - storage, not necessarily initialised. A "unit" of storage is defined by - the sizeof operator. x and y are integer values of type int or larger, - but x*y may well be too large for an int. The macro should cast to the - correct type for the call. On failure, ALLOCS(x,y) should return a NULL - pointer. FREES(p) should free storage previously allocated by ALLOCS, - where p is the value that ALLOCS returned. */ - -#ifdef NAUTY_IN_MAGMA -#define ALLOCS(x,y) mem_malloc((size_t)(x)*(size_t)(y)) -#define REALLOCS(p,x) mem_realloc(p,(size_t)(x)) -#define FREES(p) mem_free(p) -#else -#define ALLOCS(x,y) malloc((size_t)(x)*(size_t)(y)) -#define REALLOCS(p,x) realloc(p,(size_t)(x)) -#define FREES(p) free(p) -#endif - -/* The following macros are used by nauty if MAXN=0. They dynamically - allocate arrays of size dependent on m or n. For each array there - should be two static variables: - type *name; - size_t name_sz; - "name" will hold a pointer to an allocated array. "name_sz" will hold - the size of the allocated array in units of sizeof(type). DYNALLSTAT - declares both variables and initialises name_sz=0. DYNALLOC1 and - DYNALLOC2 test if there is enough space allocated, and if not free - the existing space and allocate a bigger space. The allocated space - is not initialised. - - In the case of DYNALLOC1, the space is allocated using - ALLOCS(sz,sizeof(type)). - In the case of DYNALLOC2, the space is allocated using - ALLOCS(sz1,sz2*sizeof(type)). - - DYNREALLOC is like DYNALLOC1 except that the old contents are copied - into the new space. realloc() is assumed. This is not currently - used by nauty or dreadnaut. - - DYNFREE frees any allocated array and sets name_sz back to 0. - CONDYNFREE does the same, but only if name_sz exceeds some limit. -*/ - -#define DYNALLSTAT(type,name,name_sz) \ - static TLS_ATTR type *name; static TLS_ATTR size_t name_sz=0 -#define DYNALLOC1(type,name,name_sz,sz,msg) \ - if ((size_t)(sz) > name_sz) \ - { if (name_sz) FREES(name); name_sz = (sz); \ - if ((name=(type*)ALLOCS(sz,sizeof(type))) == NULL) {alloc_error(msg);}} -#define DYNALLOC2(type,name,name_sz,sz1,sz2,msg) \ - if ((size_t)(sz1)*(size_t)(sz2) > name_sz) \ - { if (name_sz) FREES(name); name_sz = (size_t)(sz1)*(size_t)(sz2); \ - if ((name=(type*)ALLOCS((sz1),(sz2)*sizeof(type))) == NULL) \ - {alloc_error(msg);}} -#define DYNREALLOC(type,name,name_sz,sz,msg) \ - {if ((size_t)(sz) > name_sz) \ - { if ((name = (type*)REALLOCS(name,(sz)*sizeof(type))) == NULL) \ - {alloc_error(msg);} else name_sz = (sz);}} -#define DYNFREE(name,name_sz) if (name_sz) {FREES(name); name_sz = 0;} -#define CONDYNFREE(name,name_sz,minsz) \ - if (name_sz > (size_t)(minsz)) {FREES(name); name_sz = 0;} - -/* File to write error messages to (used as first argument to fprintf()). */ -#define ERRFILE stderr - -/* Don't use OLDEXTDEFS, it is only still here for Magma. */ -#ifdef OLDEXTDEFS -#define EXTDEF_CLASS -#ifdef EXTDEFS -#define EXTDEF_TYPE 1 -#else -#define EXTDEF_TYPE 2 -#endif -#else -#define EXTDEF_CLASS static -#define EXTDEF_TYPE 2 -#endif - -extern int labelorg; /* Declared in nautil.c */ - -#ifndef NAUTY_IN_MAGMA - /* Things equivalent to bit, bytecount, leftbit are defined - in bs.h for Magma. */ -#if EXTDEF_TYPE==1 -extern setword bit[]; -extern int bytecount[]; -extern int leftbit[]; - -#else - /* array giving setwords with single 1-bit */ -#if WORDSIZE==64 -#ifdef SETWORD_LONGLONG -EXTDEF_CLASS const -setword bit[] = {01000000000000000000000LL,0400000000000000000000LL, - 0200000000000000000000LL,0100000000000000000000LL, - 040000000000000000000LL,020000000000000000000LL, - 010000000000000000000LL,04000000000000000000LL, - 02000000000000000000LL,01000000000000000000LL, - 0400000000000000000LL,0200000000000000000LL, - 0100000000000000000LL,040000000000000000LL, - 020000000000000000LL,010000000000000000LL, - 04000000000000000LL,02000000000000000LL, - 01000000000000000LL,0400000000000000LL,0200000000000000LL, - 0100000000000000LL,040000000000000LL,020000000000000LL, - 010000000000000LL,04000000000000LL,02000000000000LL, - 01000000000000LL,0400000000000LL,0200000000000LL, - 0100000000000LL,040000000000LL,020000000000LL,010000000000LL, - 04000000000LL,02000000000LL,01000000000LL,0400000000LL, - 0200000000LL,0100000000LL,040000000LL,020000000LL, - 010000000LL,04000000LL,02000000LL,01000000LL,0400000LL, - 0200000LL,0100000LL,040000LL,020000LL,010000LL,04000LL, - 02000LL,01000LL,0400LL,0200LL,0100LL,040LL,020LL,010LL, - 04LL,02LL,01LL}; -#else -EXTDEF_CLASS const -setword bit[] = {01000000000000000000000,0400000000000000000000, - 0200000000000000000000,0100000000000000000000, - 040000000000000000000,020000000000000000000, - 010000000000000000000,04000000000000000000, - 02000000000000000000,01000000000000000000, - 0400000000000000000,0200000000000000000, - 0100000000000000000,040000000000000000,020000000000000000, - 010000000000000000,04000000000000000,02000000000000000, - 01000000000000000,0400000000000000,0200000000000000, - 0100000000000000,040000000000000,020000000000000, - 010000000000000,04000000000000,02000000000000, - 01000000000000,0400000000000,0200000000000,0100000000000, - 040000000000,020000000000,010000000000,04000000000, - 02000000000,01000000000,0400000000,0200000000,0100000000, - 040000000,020000000,010000000,04000000,02000000,01000000, - 0400000,0200000,0100000,040000,020000,010000,04000, - 02000,01000,0400,0200,0100,040,020,010,04,02,01}; -#endif -#endif - -#if WORDSIZE==32 -EXTDEF_CLASS const -setword bit[] = {020000000000,010000000000,04000000000,02000000000, - 01000000000,0400000000,0200000000,0100000000,040000000, - 020000000,010000000,04000000,02000000,01000000,0400000, - 0200000,0100000,040000,020000,010000,04000,02000,01000, - 0400,0200,0100,040,020,010,04,02,01}; -#endif - -#if WORDSIZE==16 -EXTDEF_CLASS const -setword bit[] = {0100000,040000,020000,010000,04000,02000,01000,0400,0200, - 0100,040,020,010,04,02,01}; -#endif - - /* array giving number of 1-bits in bytes valued 0..255: */ -EXTDEF_CLASS const -int bytecount[] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8}; - - /* array giving position (1..7) of high-order 1-bit in byte: */ -EXTDEF_CLASS const -int leftbit[] = {8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; -#endif /* EXTDEFS */ - -#endif /* not NAUTY_IN_MAGMA */ - -#define ANSIPROT 1 -#define EXTPROC(func,args) extern func args; /* obsolete */ - -/* The following is for C++ programs that read nauty.h. Compile nauty - itself using C, not C++. */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void alloc_error(char*); -extern void breakout(int*,int*,int,int,int,set*,int); -extern boolean cheapautom(int*,int,boolean,int); -extern void doref(graph*,int*,int*,int,int*,int*,int*,set*,int*, - void(*)(graph*,int*,int*,int,int*,int*,set*,int*,int,int), - void(*)(graph*,int*,int*,int,int,int,int*,int,boolean,int,int), - int,int,int,boolean,int,int); -extern void extra_autom(int*,int); -extern void extra_level(int,int*,int*,int,int,int,int,int,int); -extern boolean isautom(graph*,int*,boolean,int,int); -extern dispatchvec dispatch_graph; -extern int itos(int,char*); -extern void fmperm(int*,set*,set*,int,int); -extern void fmptn(int*,int*,int,set*,set*,int,int); -extern void longprune(set*,set*,set*,set*,int); -extern void nauty(graph*,int*,int*,set*,int*,optionblk*, - statsblk*,set*,int,int,int,graph*); -extern void maketargetcell(graph*,int*,int*,int,set*,int*,int*,int,boolean, - int,int (*)(graph*,int*,int*,int,int,boolean,int,int,int),int,int); -extern int nextelement(set*,int,int); -extern int orbjoin(int*,int*,int); -extern void permset(set*,set*,int,int*); -extern void putstring(FILE*,char*); -extern void refine(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -extern void refine1(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -extern void shortprune(set*,set*,int); -extern int targetcell(graph*,int*,int*,int,int,boolean,int,int,int); -extern int testcanlab(graph*,graph*,int*,int*,int,int); -extern void updatecan(graph*,graph*,int*,int,int,int); -extern void writeperm(FILE*,int*,boolean,int,int); -extern void nauty_freedyn(void); -extern void nauty_check(int,int,int,int); -extern void naugraph_check(int,int,int,int); -extern void nautil_check(int,int,int,int); -extern void nautil_freedyn(void); -extern void naugraph_freedyn(void); -extern void densenauty(graph*,int*,int*,int*, - optionblk*,statsblk*,int,int,graph*); -extern void writegroupsize(FILE*,double,int); - -#ifdef __cplusplus -} -#endif - -/* ++++++ This file is automatically generated, don't edit it by hand! ++++++ */ - - -#endif /* _NAUTY_H_ */ diff --git a/tools/nauty25r9_mac/nauty.o b/tools/nauty25r9_mac/nauty.o deleted file mode 100644 index 301c1a11a8e629732ab6df5b727a78f80a0c3af5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20972 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�!3_Lk#eKo`xgBs=HtxRtVu#Mj3xJLmh8IlXh!}XHASu#C;GV_;Y$<G1*;qJ z2MeOrDypV77+MkzE!Bcep(T-UO*rDnGDkx!N;#HC@K+O%A-sHXq#;Hjk#N|_kdc*w zt5())!SD*akCcU0hL%F((%|A)Wu!_ARy9PzD7vn4X*gOLp_i@n9y3@Mt_wA;q!Ly{ z!?oeMa6Pgwii9hdq6R2nNkb&s7>U)R5>zioX?0}{GRr19)rNvdWf1S08|t*6taoEL zf?K>IeYl}UR*e$KSE*XCF&5>&-w>>cHZ*C$+R8=Y+J?wtM{7@us_T@V%Brfx;d=ZD z3B0$49qJmR&{>OD$y_~&rZ6h)yyVvW!Rt}TO=u;w%9_+fQ52d%a9%i5hQ*P}#wA>B z*#yK_HPlr`mf~Ho77SHJqT!~RN+_vnNSnX5rXDt{UmQi&Xvk?A3|EcU=UOn<6pqw4 zRD~NO4Iw2-)oD@MLWwo?k5op~Enb^Ti7i!Exgt}P_vk=w+|A5MS`dF6qUI44OK+r6 zV|vSuM&cjb29`rJrE5Q0{^jW&=6 z!t&?<`nf=+cgT7*#X_tRB7{)5sVR)&D6+A!wk9Mi5owCzM+i&EH0TWc35rO=azw}~ z!wtAaj8f)}stU>%s%xMlB=gJLDD11+AVt`sww4rgWfq4j(RO4Z69805kOF0qPRaC+ zANTn2L$7dEOsD~_CExE$|5=3J2;dK-z^9^1R423ZD3{?n-@?3=S;llTOG}&^rjdHwWW^U(lYIT1H6|gX8-^I diff --git a/tools/nauty25r9_mac/nautyW1.o b/tools/nauty25r9_mac/nautyW1.o deleted file mode 100644 index c2aff6693f6da3aeae73d0d6614725c8436057b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17416 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 IMa9~G0kjnn)Bpeg diff --git a/tools/nauty25r9_mac/nautyex1.c b/tools/nauty25r9_mac/nautyex1.c deleted file mode 100644 index 89b9f6c..0000000 --- a/tools/nauty25r9_mac/nautyex1.c +++ /dev/null @@ -1,73 +0,0 @@ -/* This program prints generators for the automorphism group of an - n-vertex polygon, where n is a number supplied by the user. - - This version uses a fixed limit for MAXN. -*/ - -#define MAXN 1000 /* Define this before including nauty.h */ -#include "nauty.h" /* which includes and other system files */ - -int -main(int argc, char *argv[]) -{ - graph g[MAXN*MAXM]; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - - int n,m,v; - - /* Default options are set by the DEFAULTOPTIONS_GRAPH macro above. - Here we change those options that we want to be different from the - defaults. writeautoms=TRUE causes automorphisms to be written. */ - - options.writeautoms = TRUE; - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) != 1 || n <= 0) /* Exit if EOF or bad number */ - break; - - if (n > MAXN) - { - printf("n must be in the range 1..%d\n",MAXN); - exit(1); - } - - /* The nauty parameter m is a value such that an array of - m setwords is sufficient to hold n bits. The type setword - is defined in nauty.h. The number of bits in a setword is - WORDSIZE, which is 16, 32 or 64. Here we calculate - m = ceiling(n/WORDSIZE). */ - - m = SETWORDSNEEDED(n); - - /* The following optional call verifies that we are linking - to compatible versions of the nauty routines. */ - - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - /* Now we create the cycle. First we zero the graph, than for - each v, we add the edge (v,v+1), where values are mod n. */ - - EMPTYGRAPH(g,m,n); - for (v = 0; v < n; ++v) ADDONEEDGE(g,v,(v+1)%n,m); - - printf("Generators for Aut(C[%d]):\n",n); - - /* Since we are not requiring a canonical labelling, the last - parameter to densenauty() is not required and can be NULL. */ - - densenauty(g,lab,ptn,orbits,&options,&stats,m,n,NULL); - - /* The size of the group is returned in stats.grpsize1 and - stats.grpsize2. */ - - printf("Automorphism group size = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/nautyex10.c b/tools/nauty25r9_mac/nautyex10.c deleted file mode 100644 index 997db7a..0000000 --- a/tools/nauty25r9_mac/nautyex10.c +++ /dev/null @@ -1,151 +0,0 @@ -/* This program demonstrates how an isomorphism is found between - two graphs, using the Moebius graph as an example. - This version uses Traces and demonstrates how to compute the - automorphism group separately before computing the canonical - labelling. Although this is slower for easy graphs like - those here, it can be faster for some very difficult graphs. -*/ - -#include "traces.h" - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab1,lab1_sz); - DYNALLSTAT(int,lab2,lab2_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(int,map,map_sz); - static DEFAULTOPTIONS_TRACES(options); - TracesStats stats; - permnode *generators; - /* Declare and initialize sparse graph structures */ - SG_DECL(sg1); SG_DECL(sg2); - SG_DECL(cg1); SG_DECL(cg2); - - int n,m,i; - - /* Read a number of vertices and process */ - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - if (n%2 != 0) - { - fprintf(stderr,"Sorry, n must be even\n"); - continue; - } - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab1,lab1_sz,n,"malloc"); - DYNALLOC1(int,lab2,lab2_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,map,map_sz,n,"malloc"); - - /* Now make the first graph */ - - SG_ALLOC(sg1,n,3*n,"malloc"); - sg1.nv = n; /* Number of vertices */ - sg1.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg1.v[i] = 3*i; /* Position of vertex i in v array */ - sg1.d[i] = 3; /* Degree of vertex i */ - } - - for (i = 0; i < n; i += 2) /* Spokes */ - { - sg1.e[sg1.v[i]] = i+1; - sg1.e[sg1.v[i+1]] = i; - } - - for (i = 0; i < n-2; ++i) /* Clockwise edges */ - sg1.e[sg1.v[i]+1] = i+2; - sg1.e[sg1.v[n-2]+1] = 1; - sg1.e[sg1.v[n-1]+1] = 0; - - for (i = 2; i < n; ++i) /* Anticlockwise edges */ - sg1.e[sg1.v[i]+2] = i-2; - sg1.e[sg1.v[1]+2] = n-2; - sg1.e[sg1.v[0]+2] = n-1; - - /* Now make the second graph */ - - SG_ALLOC(sg2,n,3*n,"malloc"); - sg2.nv = n; /* Number of vertices */ - sg2.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - } - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - sg2.e[sg2.v[i]] = (i+1) % n; /* Clockwise */ - sg2.e[sg2.v[i]+1] = (i+n-1) % n; /* Anti-clockwise */ - sg2.e[sg2.v[i]+2] = (i+n/2) % n; /* Diagonals */ - } - - /* Now we make the canonically labelled graphs by a two-step - process. The first call to Traces computes the - automorphism group. The second call computes the - canonical labelling, using the automorphism group from - the first call. - - We have declared a variable "generators" that will be - used to hold the group generators between the two calls. - It has to be initialised to NULL and its address has to - be given to Traces using options.generators. After the - second call, we need to discard the generators with a - call to freeschreier(), which also initializes it again. */ - - generators = NULL; - options.generators = &generators; - - options.getcanon = FALSE; - Traces(&sg1,lab1,ptn,orbits,&options,&stats,NULL); - options.getcanon = TRUE; - Traces(&sg1,lab1,ptn,orbits,&options,&stats,&cg1); - freeschreier(NULL,&generators); - - options.getcanon = FALSE; - Traces(&sg2,lab1,ptn,orbits,&options,&stats,NULL); - options.getcanon = TRUE; - Traces(&sg2,lab1,ptn,orbits,&options,&stats,&cg2); - freeschreier(NULL,&generators); - - /* Compare canonically labelled graphs */ - - if (aresame_sg(&cg1,&cg2)) - { - printf("Isomorphic.\n"); - if (n <= 1000) - { - /* Write the isomorphism. For each i, vertex lab1[i] - of sg1 maps onto vertex lab2[i] of sg2. We compute - the map in order of labelling because it looks better. */ - - for (i = 0; i < n; ++i) map[lab1[i]] = lab2[i]; - for (i = 0; i < n; ++i) printf(" %d-%d",i,map[i]); - printf("\n"); - } - } - else - printf("Not isomorphic.\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/nautyex2.c b/tools/nauty25r9_mac/nautyex2.c deleted file mode 100644 index 81d9f84..0000000 --- a/tools/nauty25r9_mac/nautyex2.c +++ /dev/null @@ -1,75 +0,0 @@ -/* This program prints generators for the automorphism group of an - n-vertex polygon, where n is a number supplied by the user. - - This version uses dynamic allocation. -*/ - -#include "nauty.h" -/* MAXN=0 is defined by nauty.h, which implies dynamic allocation */ - -int -main(int argc, char *argv[]) -{ - /* DYNALLSTAT declares a pointer variable (to hold an array when it - is allocated) and a size variable to remember how big the array is. - Nothing is allocated yet. */ - - DYNALLSTAT(graph,g,g_sz); - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - - int n,m,v; - set *gv; - -/* Default options are set by the DEFAULTOPTIONS_GRAPH macro above. - Here we change those options that we want to be different from the - defaults. writeautoms=TRUE causes automorphisms to be written. */ - - options.writeautoms = TRUE; - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - - /* The nauty parameter m is a value such that an array of - m setwords is sufficient to hold n bits. The type setword - is defined in nauty.h. The number of bits in a setword is - WORDSIZE, which is 16, 32 or 64. Here we calculate - m = ceiling(n/WORDSIZE). */ - - m = SETWORDSNEEDED(n); - - /* The following optional call verifies that we are linking - to compatible versions of the nauty routines. */ - - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - /* Now that we know how big the graph will be, we allocate - * space for the graph and the other arrays we need. */ - - DYNALLOC2(graph,g,g_sz,m,n,"malloc"); - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - - EMPTYGRAPH(g,m,n); - for (v = 0; v < n; ++v) ADDONEEDGE(g,v,(v+1)%n,m); - - printf("Generators for Aut(C[%d]):\n",n); - densenauty(g,lab,ptn,orbits,&options,&stats,m,n,NULL); - - printf("order = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/nautyex3.c b/tools/nauty25r9_mac/nautyex3.c deleted file mode 100644 index b71fe8c..0000000 --- a/tools/nauty25r9_mac/nautyex3.c +++ /dev/null @@ -1,82 +0,0 @@ -/* This program prints the entire automorphism group of an n-vertex - polygon, where n is a number supplied by the user. -*/ - -#include "nauty.h" /* which includes */ -#include "naugroup.h" - -/**************************************************************************/ - -void -writeautom(int *p, int n) -/* Called by allgroup. Just writes the permutation p. */ -{ - int i; - - for (i = 0; i < n; ++i) printf(" %2d",p[i]); printf("\n"); -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(graph,g,g_sz); - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - - int n,m,v; - grouprec *group; - - /* The following cause nauty to call two procedures which - store the group information as nauty runs. */ - - options.userautomproc = groupautomproc; - options.userlevelproc = grouplevelproc; - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC2(graph,g,g_sz,m,n,"malloc"); - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - - EMPTYGRAPH(g,m,n); - for (v = 0; v < n; ++v) ADDONEEDGE(g,v,(v+1)%n,m); - - printf("Automorphisms of C[%d]:\n",n); - densenauty(g,lab,ptn,orbits,&options,&stats,m,n,NULL); - - /* Get a pointer to the structure in which the group information - has been stored. If you use TRUE as an argument, the - structure will be "cut loose" so that it won't be used - again the next time nauty() is called. Otherwise, as - here, the same structure is used repeatedly. */ - - group = groupptr(FALSE); - - /* Expand the group structure to include a full set of coset - representatives at every level. This step is necessary - if allgroup() is to be called. */ - - makecosetreps(group); - - /* Call the procedure writeautom() for every element of the group. - The first call is always for the identity. */ - - allgroup(group,writeautom); - } - else - break; - } - exit(0); -} diff --git a/tools/nauty25r9_mac/nautyex4.c b/tools/nauty25r9_mac/nautyex4.c deleted file mode 100644 index 4ad30f8..0000000 --- a/tools/nauty25r9_mac/nautyex4.c +++ /dev/null @@ -1,67 +0,0 @@ -/* This program prints generators for the automorphism group of an - n-vertex polygon, where n is a number supplied by the user. - This version uses sparse form with dynamic allocation. -*/ - -#include "nausparse.h" /* which includes nauty.h */ - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - static DEFAULTOPTIONS_SPARSEGRAPH(options); - statsblk stats; - sparsegraph sg; /* Declare sparse graph structure */ - - int n,m,i; - - options.writeautoms = TRUE; - - /* Initialise sparse graph structure. */ - - SG_INIT(sg); - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - - /* SG_ALLOC makes sure that the v,d,e fields of a sparse graph - structure point to arrays that are large enough. This only - works if the structure has been initialised. */ - - SG_ALLOC(sg,n,2*n,"malloc"); - - sg.nv = n; /* Number of vertices */ - sg.nde = 2*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg.v[i] = 2*i; - sg.d[i] = 2; - sg.e[2*i] = (i+n-1)%n; /* edge i->i-1 */ - sg.e[2*i+1] = (i+n+1)%n; /* edge i->i+1 */ - } - - printf("Generators for Aut(C[%d]):\n",n); - sparsenauty(&sg,lab,ptn,orbits,&options,&stats,NULL); - - printf("Automorphism group size = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/nautyex5.c b/tools/nauty25r9_mac/nautyex5.c deleted file mode 100644 index 7de33c3..0000000 --- a/tools/nauty25r9_mac/nautyex5.c +++ /dev/null @@ -1,130 +0,0 @@ -/* This program demonstrates how an isomorphism is found between - two graphs, using the Moebius graph as an example. - This version uses sparse form with dynamic allocation. -*/ - -#include "nausparse.h" /* which includes nauty.h */ - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab1,lab1_sz); - DYNALLSTAT(int,lab2,lab2_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(int,map,map_sz); - static DEFAULTOPTIONS_SPARSEGRAPH(options); - statsblk stats; - /* Declare and initialize sparse graph structures */ - SG_DECL(sg1); SG_DECL(sg2); - SG_DECL(cg1); SG_DECL(cg2); - - int n,m,i; - - /* Select option for canonical labelling */ - - options.getcanon = TRUE; - - /* Read the number of vertices and process it */ - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - if (n%2 != 0) - { - fprintf(stderr,"Sorry, n must be even\n"); - continue; - } - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab1,lab1_sz,n,"malloc"); - DYNALLOC1(int,lab2,lab2_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,map,map_sz,n,"malloc"); - - /* Now make the first graph */ - - SG_ALLOC(sg1,n,3*n,"malloc"); - sg1.nv = n; /* Number of vertices */ - sg1.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg1.v[i] = 3*i; /* Position of vertex i in v array */ - sg1.d[i] = 3; /* Degree of vertex i */ - } - - for (i = 0; i < n; i += 2) /* Spokes */ - { - sg1.e[sg1.v[i]] = i+1; - sg1.e[sg1.v[i+1]] = i; - } - - for (i = 0; i < n-2; ++i) /* Clockwise edges */ - sg1.e[sg1.v[i]+1] = i+2; - sg1.e[sg1.v[n-2]+1] = 1; - sg1.e[sg1.v[n-1]+1] = 0; - - for (i = 2; i < n; ++i) /* Anticlockwise edges */ - sg1.e[sg1.v[i]+2] = i-2; - sg1.e[sg1.v[1]+2] = n-2; - sg1.e[sg1.v[0]+2] = n-1; - - /* Now make the second graph */ - - SG_ALLOC(sg2,n,3*n,"malloc"); - sg2.nv = n; /* Number of vertices */ - sg2.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - } - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - sg2.e[sg2.v[i]] = (i+1) % n; /* Clockwise */ - sg2.e[sg2.v[i]+1] = (i+n-1) % n; /* Anti-clockwise */ - sg2.e[sg2.v[i]+2] = (i+n/2) % n; /* Diagonals */ - } - - /* Label sg1, result in cg1 and labelling in lab1; similarly sg2. - It is not necessary to pre-allocate space in cg1 and cg2, but - they have to be initialised as we did above. */ - - sparsenauty(&sg1,lab1,ptn,orbits,&options,&stats,&cg1); - sparsenauty(&sg2,lab2,ptn,orbits,&options,&stats,&cg2); - - /* Compare canonically labelled graphs */ - - if (aresame_sg(&cg1,&cg2)) - { - printf("Isomorphic.\n"); - if (n <= 1000) - { - /* Write the isomorphism. For each i, vertex lab1[i] - of sg1 maps onto vertex lab2[i] of sg2. We compute - the map in order of labelling because it looks better. */ - - for (i = 0; i < n; ++i) map[lab1[i]] = lab2[i]; - for (i = 0; i < n; ++i) printf(" %d-%d",i,map[i]); - printf("\n"); - } - } - else - printf("Not isomorphic.\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/nautyex6.c b/tools/nauty25r9_mac/nautyex6.c deleted file mode 100644 index c406f63..0000000 --- a/tools/nauty25r9_mac/nautyex6.c +++ /dev/null @@ -1,103 +0,0 @@ -/* This program demonstrates how an isomorphism is found between - graphs of the form in the figure above, for general size. - - This version uses dense form with dynamic allocation. -*/ - -#include "nauty.h" - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab1,lab1_sz); - DYNALLSTAT(int,lab2,lab2_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(int,map,map_sz); - DYNALLSTAT(graph,g1,g1_sz); - DYNALLSTAT(graph,g2,g2_sz); - DYNALLSTAT(graph,cg1,cg1_sz); - DYNALLSTAT(graph,cg2,cg2_sz); - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - - int n,m,i; - - /* Select option for canonical labelling */ - - options.getcanon = TRUE; - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - if (n%2 != 0) - { - fprintf(stderr,"Sorry, n must be even\n"); - continue; - } - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab1,lab1_sz,n,"malloc"); - DYNALLOC1(int,lab2,lab2_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,map,map_sz,n,"malloc"); - DYNALLOC2(graph,g1,g1_sz,n,m,"malloc"); - DYNALLOC2(graph,g2,g2_sz,n,m,"malloc"); - DYNALLOC2(graph,cg1,cg1_sz,n,m,"malloc"); - DYNALLOC2(graph,cg2,cg2_sz,n,m,"malloc"); - - /* Now make the first graph */ - /* ADDEDGE() is defined above */ - - EMPTYGRAPH(g1,m,n); /* start with no edges */ - - for (i = 0; i < n-2; ++i) ADDONEEDGE(g1,i,i+2,m); - ADDONEEDGE(g1,n-2,1,m); - ADDONEEDGE(g1,n-1,0,m); - for (i = 0; i < n; i += 2) ADDONEEDGE(g1,i,i+1,m); - - /* Now make the second graph */ - - EMPTYGRAPH(g2,m,n); /* start with no edges */ - - for (i = 0; i < n-1; ++i) ADDONEEDGE(g2,i,i+1,m); - ADDONEEDGE(g2,n-1,0,m); - for (i = 0; i < n/2; ++i) ADDONEEDGE(g2,i,i+n/2,m); - - /* Label g1, result in cg1 and labelling in lab1; similarly g2. - It is not necessary to pre-allocate space in cg1 and cg2, but - they have to be initialised as we did above. */ - - densenauty(g1,lab1,ptn,orbits,&options,&stats,m,n,cg1); - densenauty(g2,lab2,ptn,orbits,&options,&stats,m,n,cg2); - - /* Compare canonically labelled graphs */ - - if (memcmp(cg1,cg2,m*sizeof(graph)*n) == 0) - { - printf("Isomorphic.\n"); - if (n <= 1000) - { - /* Write the isomorphism. For each i, vertex lab1[i] - of sg1 maps onto vertex lab2[i] of sg2. We compute - the map in order of labelling because it looks better. */ - - for (i = 0; i < n; ++i) map[lab1[i]] = lab2[i]; - for (i = 0; i < n; ++i) printf(" %d-%d",i,map[i]); - printf("\n"); - } - } - else - printf("Not isomorphic.\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/nautyex7.c b/tools/nauty25r9_mac/nautyex7.c deleted file mode 100644 index 6cb878b..0000000 --- a/tools/nauty25r9_mac/nautyex7.c +++ /dev/null @@ -1,130 +0,0 @@ -/* This program demonstrates how an isomorphism is found between - two graphs, using the Moebius graph as an example. - This version uses Traces. -*/ - -#include "traces.h" - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab1,lab1_sz); - DYNALLSTAT(int,lab2,lab2_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(int,map,map_sz); - static DEFAULTOPTIONS_TRACES(options); - TracesStats stats; - /* Declare and initialize sparse graph structures */ - SG_DECL(sg1); SG_DECL(sg2); - SG_DECL(cg1); SG_DECL(cg2); - - int n,m,i; - - /* Select option for canonical labelling */ - - options.getcanon = TRUE; - - /* Read a number of vertices and process */ - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - if (n%2 != 0) - { - fprintf(stderr,"Sorry, n must be even\n"); - continue; - } - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab1,lab1_sz,n,"malloc"); - DYNALLOC1(int,lab2,lab2_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,map,map_sz,n,"malloc"); - - /* Now make the first graph */ - - SG_ALLOC(sg1,n,3*n,"malloc"); - sg1.nv = n; /* Number of vertices */ - sg1.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg1.v[i] = 3*i; /* Position of vertex i in v array */ - sg1.d[i] = 3; /* Degree of vertex i */ - } - - for (i = 0; i < n; i += 2) /* Spokes */ - { - sg1.e[sg1.v[i]] = i+1; - sg1.e[sg1.v[i+1]] = i; - } - - for (i = 0; i < n-2; ++i) /* Clockwise edges */ - sg1.e[sg1.v[i]+1] = i+2; - sg1.e[sg1.v[n-2]+1] = 1; - sg1.e[sg1.v[n-1]+1] = 0; - - for (i = 2; i < n; ++i) /* Anticlockwise edges */ - sg1.e[sg1.v[i]+2] = i-2; - sg1.e[sg1.v[1]+2] = n-2; - sg1.e[sg1.v[0]+2] = n-1; - - /* Now make the second graph */ - - SG_ALLOC(sg2,n,3*n,"malloc"); - sg2.nv = n; /* Number of vertices */ - sg2.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - } - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - sg2.e[sg2.v[i]] = (i+1) % n; /* Clockwise */ - sg2.e[sg2.v[i]+1] = (i+n-1) % n; /* Anti-clockwise */ - sg2.e[sg2.v[i]+2] = (i+n/2) % n; /* Diagonals */ - } - - /* Label sg1, result in cg1 and labelling in lab1; similarly sg2. - It is not necessary to pre-allocate space in cg1 and cg2, but - they have to be initialised as we did above. */ - - Traces(&sg1,lab1,ptn,orbits,&options,&stats,&cg1); - Traces(&sg2,lab2,ptn,orbits,&options,&stats,&cg2); - - /* Compare canonically labelled graphs */ - - if (aresame_sg(&cg1,&cg2)) - { - printf("Isomorphic.\n"); - if (n <= 1000) - { - /* Write the isomorphism. For each i, vertex lab1[i] - of sg1 maps onto vertex lab2[i] of sg2. We compute - the map in order of labelling because it looks better. */ - - for (i = 0; i < n; ++i) map[lab1[i]] = lab2[i]; - for (i = 0; i < n; ++i) printf(" %d-%d",i,map[i]); - printf("\n"); - } - } - else - printf("Not isomorphic.\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/nautyex8.c b/tools/nauty25r9_mac/nautyex8.c deleted file mode 100644 index 33220f5..0000000 --- a/tools/nauty25r9_mac/nautyex8.c +++ /dev/null @@ -1,109 +0,0 @@ -/* This program demonstrates how an isomorphism is found between - two graphs, using the Moebius graphs as an example. - This version uses dense form with dynamic allocation. -*/ - -#include "nauty.h" - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab1,lab1_sz); - DYNALLSTAT(int,lab2,lab2_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(int,map,map_sz); - DYNALLSTAT(graph,g1,g1_sz); - DYNALLSTAT(graph,g2,g2_sz); - DYNALLSTAT(graph,cg1,cg1_sz); - DYNALLSTAT(graph,cg2,cg2_sz); - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - - int n,m,i; - size_t k; - - /* Select option for canonical labelling */ - - options.getcanon = TRUE; - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - if (n%2 != 0) - { - fprintf(stderr,"Sorry, n must be even\n"); - continue; - } - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab1,lab1_sz,n,"malloc"); - DYNALLOC1(int,lab2,lab2_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,map,map_sz,n,"malloc"); - - /* Now make the first graph */ - - DYNALLOC2(graph,g1,g1_sz,n,m,"malloc"); - EMPTYGRAPH(g1,m,n); - - for (i = 0; i < n; i += 2) /* Spokes */ - ADDONEEDGE(g1,i,i+1,m); - - for (i = 0; i < n-2; ++i) /* Cycle */ - ADDONEEDGE(g1,i,i+2,m); - ADDONEEDGE(g1,1,n-2,m); - ADDONEEDGE(g1,0,n-1,m); - - /* Now make the second graph */ - - DYNALLOC2(graph,g2,g2_sz,n,m,"malloc"); - EMPTYGRAPH(g2,m,n); - - for (i = 0; i < n; ++i) - { - ADDONEEDGE(g2,i,(i+1)%n,m); /* Rim */ - ADDONEEDGE(g2,i,(i+n/2)%n,m); /* Diagonals */ - } - - /* Create canonical graphs */ - - DYNALLOC2(graph,cg1,cg1_sz,n,m,"malloc"); - DYNALLOC2(graph,cg2,cg2_sz,n,m,"malloc"); - - densenauty(g1,lab1,ptn,orbits,&options,&stats,m,n,cg1); - densenauty(g2,lab2,ptn,orbits,&options,&stats,m,n,cg2); - - /* Compare canonically labelled graphs */ - - for (k = 0; k < m*(size_t)n; ++k) - if (cg1[k] != cg2[k]) break; - - if (k == m*(size_t)n) - { - printf("Isomorphic.\n"); - if (n <= 1000) - { - /* Write the isomorphism. For each i, vertex lab1[i] - of sg1 maps onto vertex lab2[i] of sg2. We compute - the map in order of labelling because it looks better. */ - - for (i = 0; i < n; ++i) map[lab1[i]] = lab2[i]; - for (i = 0; i < n; ++i) printf(" %d-%d",i,map[i]); - printf("\n"); - } - } - else - printf("Not isomorphic.\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/nautyex9.c b/tools/nauty25r9_mac/nautyex9.c deleted file mode 100644 index 68cc138..0000000 --- a/tools/nauty25r9_mac/nautyex9.c +++ /dev/null @@ -1,118 +0,0 @@ -/* This program demonstrates how known automorphisms can be given - to Traces. We compute the automorphism group of the circulant - graph of order n with i is adjacent to j iff j-i is a square - mod n. We need that -1 is a square so that the graph is - undirected, which means that the prime factors of n must be - congruent to 1 mod 4. (This is the Paley graph in the event - that p is a prime.) -*/ - -#include "traces.h" - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,p,p_sz); - DYNALLSTAT(boolean,issquare,issquare_sz); - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - static DEFAULTOPTIONS_TRACES(options); - TracesStats stats; - /* Declare and initialize sparse graph structures */ - SG_DECL(sg); - - int deg,n,m,i,j; - size_t k; - permnode *gens; - - /* Select option for passing generators to Traces */ - - options.generators = &gens; - - /* Read a number of vertices and process it */ - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 2) - { - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,p,p_sz,n,"malloc"); - DYNALLOC1(boolean,issquare,issquare_sz,n,"malloc"); - - /* Initialise list of automorphisms */ - - gens = NULL; - - /* Find the squares and the degree */ - - for (i = 0; i < n; ++i) issquare[i] = FALSE; - for (i = 0; i < n; ++i) issquare[(i*i)%n] = TRUE; - if (!issquare[n-1]) - { - printf("-1 must be a square mod n; try again\n"); - continue; - } - - deg = 0; - for (i = 1; i < n; ++i) if (issquare[i]) ++deg; - - /* Now make the graph */ - - SG_ALLOC(sg,n,n*deg,"malloc"); - sg.nv = n; /* Number of vertices */ - sg.nde = n*deg; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg.v[i] = i*deg; /* Position of vertex i in v array */ - sg.d[i] = deg; /* Degree of vertex i */ - } - - for (i = 0; i < n; ++i) /* Edges */ - { - k = sg.v[i]; - for (j = 1; j < n; ++j) - if (issquare[j]) sg.e[k++] = (i + j) % n; - } - - /* Add known automorphisms */ - - /* We wouldn't need freeschreier() if we were only - processing one graph, but it doesn't hurt. This - is how to properly dispose of previous generators. */ - - freeschreier(NULL,&gens); - - /* Cyclic rotation */ - for (i = 0; i < n; ++i) p[i] = (i + 1) % n; - addpermutation(&gens,p,n); - - /* Reflection about 0 */ - for (i = 0; i < n; ++i) p[i] = (n - i) % n; - addpermutation(&gens,p,n); - - /* Call Traces */ - - Traces(&sg,lab,ptn,orbits,&options,&stats,NULL); - - printf("Automorphism group size = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - - /* Traces left the automorphims we gave it, augmented by - any extra automorphims it found, in a circular list - pointed to by gens. See schreier.txt for documentation. */ - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/newedgeg b/tools/nauty25r9_mac/newedgeg deleted file mode 100644 index 787144ad777b8a935fee751bddb1dda8fe1f00a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138624 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 b5Sx=`BEpnqO)5dFqO-2d>|Vmrj`RNjY48%V diff --git a/tools/nauty25r9_mac/newedgeg.c b/tools/nauty25r9_mac/newedgeg.c deleted file mode 100644 index dde4026..0000000 --- a/tools/nauty25r9_mac/newedgeg.c +++ /dev/null @@ -1,240 +0,0 @@ -/* newedgeg.c version 1.1; B D McKay, Dec 2005. */ - -#define USAGE "newedgeg [-lq] [infile [outfile]]" - -#define HELPTEXT \ -" For each pair of non-adjacent edges, output the graph obtained\n\ - by subdividing the edges and joining the new vertices.\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -l Canonically label outputs\n\ - -q Suppress auxiliary information\n" - -/*************************************************************************/ - -#include "gtools.h" -#include "gutils.h" - -static FILE *outfile; -static nauty_counter nout; -static int outcode; - -/*************************************************************************/ - -static void -newedge(graph *g1, int m1, int n1, - int v1, int v2, int w1, int w2, - graph *g2, int m2) -/* Make g2 by subdividing edges v1-v2 and w1-w2 in g1 - and adding an edge between them. Must have m2 >= m1. */ -{ - int i,j; - setword *s1,*s2; - - s1 = g1; - s2 = g2; - for (i = 0; i < n1; ++i) - { - for (j = 0; j < m1; ++j) *(s2++) = *(s1++); - for (; j < m2; ++j) *(s2++) = 0; - } - - s2 = GRAPHROW(g2,v1,m2); - DELELEMENT(s2,v2); - ADDELEMENT(s2,n1); - - s2 = GRAPHROW(g2,v2,m2); - DELELEMENT(s2,v1); - ADDELEMENT(s2,n1); - - s2 = GRAPHROW(g2,w1,m2); - DELELEMENT(s2,w2); - ADDELEMENT(s2,n1+1); - - s2 = GRAPHROW(g2,w2,m2); - DELELEMENT(s2,w1); - ADDELEMENT(s2,n1+1); - - s2 = GRAPHROW(g2,n1,m2); - EMPTYSET(s2,m2); - ADDELEMENT(s2,v1); - ADDELEMENT(s2,v2); - ADDELEMENT(s2,n1+1); - - s2 = GRAPHROW(g2,n1+1,m2); - EMPTYSET(s2,m2); - ADDELEMENT(s2,w1); - ADDELEMENT(s2,w2); - ADDELEMENT(s2,n1); -} - -/*************************************************************************/ - -static void -na_newedge(graph *g1, int m1, int n1, boolean dolabel) -/* Make all graphs by non-adjacent edge addition. */ -{ - int n2,m2; - int v1,v2,w1,w2; - set *sv1,*sw1; - graph *gq; -#if MAXN - graph h[MAXN*MAXM]; - grapg g2[MAXN*MAXM]; -#else - DYNALLSTAT(graph,h,h_sz); - DYNALLSTAT(graph,g2,g2_sz); -#endif - - n2 = n1 + 2; - m2 = (n2 + WORDSIZE - 1) / WORDSIZE; - if (m2 < m1) m2 = m1; - -#if !MAXN - DYNALLOC2(graph,g2,g2_sz,m2,n2,"newedgeg"); - if (dolabel) DYNALLOC2(graph,h,h_sz,m2,n2,"newedgeg"); -#endif - - for (v1 = 0, sv1 = g1; v1 < n1-3; ++v1, sv1 += m1) - for (w1 = v1+1, sw1 = sv1 + m1; w1 < n1-1; ++w1, sw1 += m1) - { - for (v2 = v1; (v2 = nextelement(sv1,m1,v2)) >= 0; ) - for (w2 = w1; (w2 = nextelement(sw1,m1,w2)) >= 0; ) - { - if (v2 == w1 || v2 == w2) continue; - - newedge(g1,m1,n1,v1,v2,w1,w2,g2,m2); - - gq = g2; - - if (dolabel) - { - fcanonise(g2,m2,n2,h,NULL,FALSE); /* FIXME (loops) */ - gq = h; - } - if (outcode == SPARSE6) writes6(outfile,gq,m2,n2); - else writeg6(outfile,gq,m2,n2); - ++nout; - } - } -} - -/*************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile; - boolean badargs,dolabel,quiet; - int j,m,n,argnum; - int codetype; - graph *g; - nauty_counter nin; - char *arg,sw; - double t; - - HELP; - - infilename = outfilename = NULL; - dolabel = quiet = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('l',dolabel) - else SWBOOLEAN('q',quiet) - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A newedgeg"); - if (dolabel) fprintf(stderr," -l"); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - if (dolabel) nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = nout = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; -#if MAXN - if (n > MAXN-2) - { - fprintf(stderr,">E newedgeg: input too large\n"); - exit(1); - } -#endif - - ++nin; - - na_newedge(g,m,n,dolabel); - - FREES(g); - } - t = CPUTIME - t; - - if (!quiet) - fprintf(stderr, - ">Z " COUNTER_FMT " graphs read from %s, " - COUNTER_FMT " written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_mac/nug25.pdf b/tools/nauty25r9_mac/nug25.pdf deleted file mode 100644 index 6c405ffc05dcd04e5338235667669b3a873eefca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574391 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%0D6#E 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

      XH*A6MKpH*6Q*R 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 z⋘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 diff --git a/tools/nauty25r9_mac/planarg.c b/tools/nauty25r9_mac/planarg.c deleted file mode 100644 index ed68b77..0000000 --- a/tools/nauty25r9_mac/planarg.c +++ /dev/null @@ -1,391 +0,0 @@ -/* planarg : test for planarity and find embedding or obstruction */ - -#define USAGE "planarg [-v] [-nVq] [-p|-u] [infile [outfile]]" - -#define HELPTEXT \ -" For each input, write to output if planar.\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -v Write non-planar graphs instead of planar graphs\n\ - -V Write report on every input\n\ - -u Don't write anything, just count\n\ - -p Write in planar_code if planar (without -p, same format as input)\n\ - -k Follow each non-planar output with an obstruction in sparse6\n\ - format (implies -v, incompatible with -p)\n\ - -n Suppress checking of the result\n\ - -q Suppress auxiliary information\n\ -\n\ - This program permits multiple edges and loops\n" - -/*************************************************************************/ - -#include "gtools.h" -#include "planarity.h" - -/*************************************************************************/ - -static void -write_planarcode(FILE *f, t_ver_sparse_rep *VR, t_adjl_sparse_rep *A, - t_embed_sparse_rep *ER, int n, int ne) -/* Write the embedding to f in planar_code */ -{ - int bytes; - size_t i,j,len,k,k0; - unsigned int w; - DYNALLSTAT(unsigned char,buff,buff_sz); -#define PUT1(x) buff[j++]=(x); -#define PUT2(x) w=(x); buff[j++]=(w>>8)&0xFF; buff[j++]=w&0xff; -#define PUT4(x) w=(x); buff[j++]=(w>>24)&0xFF; buff[j++]=(w>>16)&0xff; \ - buff[j++]=(w>>8)&0xFF; buff[j++]=w&0xff; - - if (n <= 255) bytes = 1; - else if (n <= 65535) bytes = 2; - else bytes = 4; - - len = bytes * (1 + n + 2*(size_t)ne); - if (bytes == 2) len += 1; - else if (bytes == 4) len += 3; - - DYNALLOC1(unsigned char,buff,buff_sz,len,"planarg"); - - if (bytes == 1) - { - j = 0; - PUT1(n); - for (i = 0; i < n; ++i) - { - k = k0 = VR[i].first_edge; - if (k != NIL) - do - { - PUT1(A[ER[k].in_adjl].end_vertex+1); - k = ER[k].next; - } while (k != k0); - PUT1(0); - } - } - else if (bytes == 2) - { - j = 0; - PUT1(0); - PUT2(n); - for (i = 0; i < n; ++i) - { - k = k0 = VR[i].first_edge; - if (k != NIL) - do - { - PUT2(A[ER[k].in_adjl].end_vertex+1); - k = ER[k].next; - } while (k != k0); - PUT2(0); - } - } - else - { - j = 0; - PUT1(0); - PUT2(0); - PUT4(n); - for (i = 0; i < n; ++i) - { - k = k0 = VR[i].first_edge; - if (k != NIL) - do - { - PUT4(A[ER[k].in_adjl].end_vertex+1); - k = ER[k].next; - } while (k != k0); - PUT4(0); - } - } - - if (fwrite((void*)buff,1,len,f) != len) - { - fprintf(stderr,">E write_planarcode : error on writing\n"); - ABORT(">E write_planarcode"); - } -} - -/*************************************************************************/ - -static boolean -isplanar(t_ver_sparse_rep *V, int n, t_adjl_sparse_rep *A, int e, - int *c, t_ver_sparse_rep **VR, t_adjl_sparse_rep **AR, - t_embed_sparse_rep **ER, int *nbr_e_obs, - boolean planarcheck, boolean nonplanarcheck) -/* - The input graph is given as an adjacency list: - V: array of vertices - n: size of graph - A: adjacency list - e: number of edges - - If the graph is planar the embedding is stored in VR and ER; - the embedding contains e edges (nbr_e_obs not used) - - If the graph is non planar the obstruction is returned in - VR and AR together with the number of edges in nbr_e_obs. - - In all cases the number of components is return in c. - - planarcheck and nonplanarcheck determine if checking is done. - The embedding and obstruction outputs are only made if the - appropriate checking is done. -*/ -{ - t_dlcl **dfs_tree, **back_edges, **mult_edges; - int edge_pos, v, w; - boolean ans; - t_ver_edge *embed_graph; - - ans = sparseg_adjl_is_planar(V, n, A, c, - &dfs_tree, &back_edges, &mult_edges, - &embed_graph, &edge_pos, &v, &w); - - if (!ans && nonplanarcheck) - { - embedg_obstruction(V, A, dfs_tree, back_edges, - embed_graph, n, &edge_pos, - v, w, VR, AR, nbr_e_obs); - } - else if (planarcheck) - { - embedg_embedding(V, A, embed_graph, n, e, *c, edge_pos, mult_edges, - VR, ER); - } - - sparseg_dlcl_delete(dfs_tree, n); - sparseg_dlcl_delete(back_edges, n); - sparseg_dlcl_delete(mult_edges, n); - embedg_VES_delete(embed_graph, n); - - return ans; -} - -/*************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - sparsegraph sg; - boolean badargs; - boolean verbose,nonplanar,quiet; - boolean planarcode,nowrite,nocheck; - int i,j,k,n,argnum,ne,loops; - int codetype,outcode; - t_ver_sparse_rep *VR; - t_adjl_sparse_rep *AR; - t_embed_sparse_rep *ER; - int nbr_c,nbr_e_obs; - nauty_counter nin,nout,nplan; - char *arg,sw; - double t0,tp,tnp,netotalp,netotalnp; - DYNALLSTAT(t_ver_sparse_rep,V,V_sz); - DYNALLSTAT(t_adjl_sparse_rep,A,A_sz); - - HELP; - - infilename = outfilename = NULL; - quiet = nowrite = planarcode = FALSE; - verbose = nonplanar = nocheck = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('v',nonplanar) - else SWBOOLEAN('q',quiet) - else SWBOOLEAN('V',verbose) - else SWBOOLEAN('p',planarcode) - else SWBOOLEAN('u',nowrite) - else SWBOOLEAN('n',nocheck) - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - exit(1); - } - - if (planarcode && nonplanar) - { - fprintf(stderr,">E planarg: -p and -v are incompatible\n"); - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A planarg"); - if (nonplanar||planarcode||nowrite||nocheck) - fprintf(stderr," -"); - if (nonplanar) fprintf(stderr,"v"); - if (nowrite) fprintf(stderr,"u"); - if (planarcode) fprintf(stderr,"p"); - if (nocheck) fprintf(stderr,"n"); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!nowrite) - { - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (planarcode) outcode = PLANARCODE; - else if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (outcode == PLANARCODE) - writeline(outfile,PLANARCODE_HEADER); - else if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - } - - nin = nout = nplan = 0; - netotalp = netotalnp = 0.0; - SG_INIT(sg); - - tp = tnp = 0.0; - while (TRUE) - { - if (read_sg_loops(infile,&sg,&loops) == NULL) break; - n = sg.nv; - ne = (sg.nde+loops)/2; - ++nin; - - DYNALLOC1(t_ver_sparse_rep,V,V_sz,n,"planarg"); - DYNALLOC1(t_adjl_sparse_rep,A,A_sz,2*ne+1,"planarg"); - k = 0; - for (i = 0; i < n; ++i) - if (sg.d[i] == 0) - V[i].first_edge = NIL; - else - { - V[i].first_edge = k; - for (j = sg.v[i]; j < sg.v[i]+sg.d[i]; ++j) - { - A[k].end_vertex = sg.e[j]; - A[k].next = k+1; - ++k; - if (A[k-1].end_vertex == i) /* loops go in twice */ - { - A[k].end_vertex = i; - A[k].next = k+1; - k++; - } - } - A[k-1].next = NIL; - } - - if (k != 2*ne) - { - fprintf(stderr, - ">E planarg: decoding error; nin=" COUNTER_FMT "\n",nin); - fprintf(stderr,"n=%d nde=%lu ne=%d loops=%d\n", - n,(unsigned long)sg.nde,ne,loops); - exit(1); - } - - VR = NULL; - AR = NULL; - ER = NULL; - t0 = CPUTIME; - if (isplanar(V,n,A,ne,&nbr_c,&VR,&AR,&ER,&nbr_e_obs, - !nocheck||planarcode,!nocheck)) - { - ++nplan; - tp += CPUTIME - t0; - netotalp += ne; - if (!nowrite && !nonplanar) - { - if (planarcode) - write_planarcode(outfile,VR,A,ER,n,ne); - else - writelast(outfile); - ++nout; - } - if (verbose) - fprintf(stderr,"graph " COUNTER_FMT ": n=%d ne=%d planar\n", - nin,n,ne); - } - else - { - tnp += CPUTIME - t0; - netotalnp += ne; - if (!nowrite && nonplanar) - { - writelast(outfile); - ++nout; - } - if (verbose) - fprintf(stderr,"graph " COUNTER_FMT ": n=%d ne=%d non-planar\n", - nin,n,ne); - } - FREES(VR); - FREES(AR); - FREES(ER); - } - - - if (!nowrite) - { - if (!quiet) - fprintf(stderr, - ">Z " COUNTER_FMT " graphs read from %s, " - COUNTER_FMT " written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,tp+tnp); - } - else - { - fprintf(stderr, - " " COUNTER_FMT " graphs input\n " - COUNTER_FMT " graphs planar\n",nin,nplan); - fprintf(stderr," cpu = %3.2f sec. ",tp+tnp); - if (netotalp) - fprintf(stderr," planar:%.3f",1e5*tp/netotalp); - if (netotalnp) - fprintf(stderr," nonplanar:%.3f",1e5*tnp/netotalnp); - fprintf(stderr,"\n"); - } - - return 0; -} diff --git a/tools/nauty25r9_mac/planarity.c b/tools/nauty25r9_mac/planarity.c deleted file mode 100644 index a707bc4..0000000 --- a/tools/nauty25r9_mac/planarity.c +++ /dev/null @@ -1,10379 +0,0 @@ -/* planarity.c - code for planarity testing of undirected graphs. - * Method of Boyer and Myrvold, programmed by Paulette Lieby. - * The copyright of this program is owned by the Magma project. - * Distributed with nauty by permission. - ***************************************************************/ - -/* - * sparseg_adjl.c - */ - -/* - What: - ***** - - Implementing: - - Some high-level functions on the sparse graph as - an adjacency list. - In particular, testing if it is planar. - - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} - - - -/* aproto: header embed_graph_protos.h */ - - -#ifndef PLANAR_IN_MAGMA -#endif - - -boolean -sparseg_adjl_plan_and_iso (t_ver_sparse_rep *V, int n, t_adjl_sparse_rep *A, - int e, int *c, t_ver_sparse_rep **VR, t_adjl_sparse_rep **AR, - t_embed_sparse_rep **ER, int *nbr_e_obs) - /* - the input graph is given as an adjacency list: - V: array of vertices - n: size of graph - A: adjacency list - e: number of edges - - if the graph is planar the embedding is stored in VR and ER; - the embedding contains e edges - (nbr_e_obs not used) - - if the graph is non planar the obstruction is returned in - VR and AR together with the number of edges in nbr_e_obs - - in all cases is also returned the number of components (in c) - */ -{ - t_dlcl **dfs_tree, **back_edges, **mult_edges; - int edge_pos, v, w; - boolean ans; - t_ver_edge *embed_graph; - - ans = sparseg_adjl_is_planar(V, n, A, c, - &dfs_tree, &back_edges, &mult_edges, - &embed_graph, &edge_pos, &v, &w); - - if (!ans) - { - embedg_obstruction(V, A, dfs_tree, back_edges, - embed_graph, n, &edge_pos, - v, w, VR, AR, nbr_e_obs); - } - else - { - embedg_embedding(V, A, embed_graph, n, e, *c, edge_pos, mult_edges, - VR, ER); - } - - sparseg_dlcl_delete(dfs_tree, n); - sparseg_dlcl_delete(back_edges, n); - sparseg_dlcl_delete(mult_edges, n); - embedg_VES_delete(embed_graph, n); - - return ans; -} - - - -int * -sparseg_adjl_footprint (t_ver_sparse_rep *V, int n, - t_adjl_sparse_rep *A, int v) - /* - return v's footprint: - an array fp of size n where fp[i] = index of (directed) - edge [v, i] in A - */ -{ - /* - note that we won't initialise the array: - its subsequent usage doesn't require it - */ - int *fp, e; - - fp = (int *) mem_malloc(sizeof(int) * n); - - if (V[v].first_edge == NIL) - /* - do nothing - */ - return fp; - - e = V[v].first_edge; - while (e != NIL) - { - fp[A[e].end_vertex] = e; - e = A[e].next; - } - - return fp; -} - - -void -sparseg_adjl_print (t_ver_sparse_rep *V, int n, - t_adjl_sparse_rep *A, boolean user_level) -{ - int v; - - for (v = 0; v < n; v++) - { - int next; - - if (user_level) - fprintf(stdout, "%d:\t", v + 1); - else - fprintf(stdout, "%d:\t", v); - - next = V[v].first_edge; - while (next != NIL) - { - if (user_level) - fprintf(stdout, "%d ", A[next].end_vertex + 1); - else - fprintf(stdout, "%d ", A[next].end_vertex); - - next = A[next].next; - } - fprintf(stdout, "\n"); - } -} - - - - -void -sparseg_adjl_embed_print (t_ver_sparse_rep *V_e, int n, - t_adjl_sparse_rep *A, t_embed_sparse_rep *E, boolean user_level) - /* - print the embedding given by E, - edges are referred to by their index in A - - and V_e[v].first_edge is the index in E of the first edge - (in the embedding's order) incident from v - - note that E is NOT indexed by the same vertices' array - that indexes A (at the creation of the sparse graph) - */ -{ - int v; - - for (v = 0; v < n; v++) - { - int start, next; - - if (user_level) - fprintf(stdout, "%d:\t", v + 1); - else - fprintf(stdout, "%d:\t", v); - - if (V_e[v].first_edge == NIL) - { - fprintf(stdout, "\n"); - continue; - } - start = next = V_e[v].first_edge; - - if (user_level) - fprintf(stdout, "%d ", A[ E[next].in_adjl ].end_vertex + 1); - else - fprintf(stdout, "%d ", A[ E[next].in_adjl ].end_vertex); - - next = E[next].next; - - while (next != start) - /* - recall that in E edges are linked into a circular list - */ - { - if (user_level) - fprintf(stdout, "%d ", A[ E[next].in_adjl ].end_vertex + 1); - else - fprintf(stdout, "%d ", A[ E[next].in_adjl ].end_vertex); - - next = E[next].next; - } - fprintf(stdout, "\n"); - } -} - -graph * -sparseg_adjl_to_nauty_graph (t_ver_sparse_rep *V, int n, t_adjl_sparse_rep *A) - /* - write the sparse graph as a nauty graph - */ -{ - int m, v, e, i; - graph *g; - - m = (n + WORDSIZE - 1) / WORDSIZE; - g = (graph *) mem_malloc(n * m * sizeof(graph)); - for (i = (long) m * n; --i >= 0;) - g[i] = 0; - - /* - we first copy V and A's information into g - */ - for (v = 0; v < n; v++) - { - e = V[v].first_edge; - while (e != NIL) - /* - A[e].end_vertex is the next neighbour in the list, - A[e].next points to the next edge in the list - */ - { - if (A[e].end_vertex != v) /* no loops */ - { - ADDELEMENT(GRAPHROW(g, v, m), A[e].end_vertex); - } - e = A[e].next; - } - } - - return g; -} - - - -#if 0 -t_edge_sparse_rep * -sparseg_adjl_edges (t_ver_sparse_rep *V, int n, - t_adjl_sparse_rep *A, int e, boolean digraph) - /* - e is the number of edges - */ -{ - t_edge_sparse_rep *edges; - int m, u, v, pos_e; - graph *g; - - edges = (t_edge_sparse_rep *) mem_malloc(sizeof(t_edge_sparse_rep) * e); - - m = (n + WORDSIZE - 1) / WORDSIZE; - g = sparseg_adjl_to_nauty_graph(V, n, A); - - pos_e = 0; - for (u = 0; u < n; u++) - { - v = digraph == TRUE ? 0 : u + 1; - for (; v < n; v++) - { - if (ISELEMENT(GRAPHROW(g, u, m), v)) - { - t_edge_sparse_rep edge; - - edge.ends[0] = u; - edge.ends[1] = v; - edges[pos_e++] = edge; - } - } - } - ASSERT(pos_e == e); - mem_free(g); - - return edges; -} -#endif - - - -t_edge_sparse_rep * -sparseg_adjl_edges (t_ver_sparse_rep *V, int n, t_adjl_sparse_rep *A, - int e, boolean digraph) - /* - e is the number of edges - */ -{ -#if 0 - t_edge_sparse_rep *edges; - int u, v, pos_e, *loops, *foot_print; - graph *g; - - loops = (int *) mem_malloc(sizeof(int) * n); - for (v = 0; v < n; v++) - { - loops[v] = 0; - } - - edges = (t_edge_sparse_rep *) mem_malloc(sizeof(t_edge_sparse_rep) * e); - pos_e = 0; - - foot_print = (int *) mem_malloc(sizeof(int) * n); - for (u = 0; u < n; u++) - foot_print[u] = NIL; - - for (v = 0; v < n; v++) - { - int ne; - t_edge_sparse_rep edge; - - ne = V[v].first_edge; - while (ne != NIL) - { - u = A[ne].end_vertex; - if (digraph - || (!digraph && u > v)) - { - foot_print[u] = v; - } - else if (!digraph && u == v) - { - if (loops[v] == 0) - { - foot_print[u] = v; - } - - loops[v] ^= 1; - } - - ne = A[ne].next; - } - - for (u = 0; u < n; u++) - if (foot_print[u] == v) - { - edge.ends[0] = v; - edge.ends[1] = u; - edges[pos_e++] = edge; - } - } - ASSERT(pos_e == e); - mem_free(loops); - mem_free(foot_print); - - return edges; - -#endif - /* - there must be a simpler way - */ -#if 0 - typedef struct edge_list { - int size; - t_edge_sparse_rep *edges; - } t_edge_list; - - t_edge_list *edge_table; - t_edge_sparse_rep *edges; - int u, v, nbr_e, pos_e, *loops; - graph *g; - - loops = (int *) mem_malloc(sizeof(int) * n); - for (v = 0; v < n; v++) - { - loops[v] = 0; - } - - /* - now create an edge table as follows: - - there are n lists in total - - their respective size is given by size - - their contents by *edges: - - edge_table[i] will contain all the edges whose end-point is i: - these edges, by construction, will be sorted according to their - starting point - - what for? to finish off each start-vertex processing - with a bucket sort so that - the edges are sorted wrt start- & end-point - - bucket sort is linear, hence why... - */ - edge_table = (t_edge_list *) mem_malloc(sizeof(t_edge_list) * n); - for (v = 0; v < n; v++) - { - edge_table[v].size = 0; - edge_table[v].edges = NP; - } - - edges = (t_edge_sparse_rep *) mem_malloc(sizeof(t_edge_sparse_rep) * e); - - nbr_e = 0; - pos_e = 0; - for (v = 0; v < n; v++) - { - int ne, w, u; - - ne = V[v].first_edge; - while (ne != NIL) - { - u = A[ne].end_vertex; - if (digraph - || (!digraph && u > v)) - { - t_edge_sparse_rep edge; - - edge.ends[0] = v; - edge.ends[1] = u; - - /* - now stick this edge into the table: one may ponder - as to the cost of constantly reallocating memory... - some cursory tests in another context tell me that - this is pretty much ok - (and certainly better than allocating n^2 storage space) - */ - if (edge_table[u].size == 0) - { - edge_table[u].edges = (t_edge_sparse_rep *) - mem_malloc(sizeof(t_edge_sparse_rep)); - } - else - { - edge_table[u].edges = (t_edge_sparse_rep *) - mem_realloc(edge_table[u].edges, - sizeof(t_edge_sparse_rep) - * (edge_table[u].size + 1)); - } - - (edge_table[u].edges)[edge_table[u].size] = edge; - edge_table[u].size += 1; - nbr_e++; - } - else if (!digraph && u == v) - { - if (loops[v] == 0) - { - t_edge_sparse_rep edge; - - edge.ends[0] = v; - edge.ends[1] = u; - - if (edge_table[u].size == 0) - { - edge_table[u].edges = (t_edge_sparse_rep *) - mem_malloc(sizeof(t_edge_sparse_rep)); - } - else - { - edge_table[u].edges = (t_edge_sparse_rep *) - mem_realloc(edge_table[u].edges, - sizeof(t_edge_sparse_rep) - * (edge_table[u].size + 1)); - } - - (edge_table[u].edges)[edge_table[u].size] = edge; - edge_table[u].size += 1; - nbr_e++; - } - - loops[v] ^= 1; - } - - ne = A[ne].next; - } - - /* - bucket sort must take place here: - of course the whole lot is not exactly linear! - since we perform the sort n times; but we can hope for - a "good" ?? average behaviour: - - in any case this must be better that checking adjacencies - n^2 times in a sparse rep. (see edge_set_iset_assure) - */ - for (w = 0; w < n; w++) - { - if (edge_table[w].size > 0) - { - for (u = 0; u < edge_table[w].size; u++) - { - ASSERT((edge_table[w].edges)[u].ends[0] == v); - edges[pos_e++] = (edge_table[w].edges)[u]; - } - mem_free(edge_table[w].edges); - edge_table[w].size = 0; - edge_table[w].edges = NP; - } - } - } - ASSERT(nbr_e == e); - ASSERT(pos_e == e); - mem_free(loops); - mem_free(edge_table); - - return edges; -#endif - - t_edge_sparse_rep *edges; - int v, pos_e, *loops; - - edges = (t_edge_sparse_rep *) mem_malloc(sizeof(t_edge_sparse_rep) * e); - loops = (int *) mem_malloc(sizeof(int) * n); - for (v = 0; v < n; v++) - { - loops[v] = 0; - } - - pos_e = 0; - for (v = 0; v < n; v++) - { - int ne; - - ne = V[v].first_edge; - while (ne != NIL) - { - int u; - - u = A[ne].end_vertex; - if (digraph - || (!digraph && u > v)) - { - t_edge_sparse_rep edge; - - edge.ends[0] = v; - edge.ends[1] = u; - edges[pos_e++] = edge; - } - else if (!digraph && u == v) - { - if (loops[v] == 0) - { - t_edge_sparse_rep edge; - - edge.ends[0] = v; - edge.ends[1] = u; - edges[pos_e++] = edge; - } - - loops[v] ^= 1; - } - ne = A[ne].next; - } - } - ASSERT(pos_e == e); - mem_free(loops); - - return edges; - -} - -/* - * sparseg_adjl_modify.c - */ - -/* - What: - ***** - - Implementing: - - Some high-level functions on the sparse graph as - an adjacency list. - In particular, adding/removing vertices/edges. - - - NOTE: Most of the functions implicitely assume that the - graph is undirected; - this must be slightly rewritten for the general case - -- just haven't got the time right now... - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} - - -/* aproto: header embed_graph_protos.h */ - - - -#ifndef PLANAR_IN_MAGMA -#endif - - - -boolean -sparseg_adjl_add_edge (t_ver_sparse_rep *V, int n, t_adjl_sparse_rep **A, - int *size_A, int *pos, int u, int v, boolean CHECK) - /* - add the UNDIRECTED edge to the sparse graph (V, n, A) - - pos records where to add the next edge in A - - if pos + 1 == size_A, we must extend A - - we check if the edge is already in the graph iff CHECK true - - also we assume that the graph (V, n, A) is undirected - */ -{ - boolean edge_exists; - - edge_exists = FALSE; - if (CHECK) - { - edge_exists = sparseg_adjl_dir_edge_exists(V, n, *A, u, v); - - if (edge_exists) - return FALSE; - } - - if (*pos == *size_A) - { - IF_DEB( - fprintf(stdout, "realloc \n"); - ) - - *size_A += 2; /* add two directed edges */ - *A = (t_adjl_sparse_rep *) - mem_realloc(*A, sizeof(t_adjl_sparse_rep) * *size_A); - } - else if (*pos + 1 == *size_A) - { - IF_DEB( - fprintf(stdout, "realloc \n"); - ) - - *size_A += 1; /* add two directed edges */ - *A = (t_adjl_sparse_rep *) - mem_realloc(*A, sizeof(t_adjl_sparse_rep) * *size_A); - } - ASSERT(*pos + 1 < *size_A); - - sparseg_adjl_add_dir_edge(V, n, A, size_A, pos, u, v, FALSE); - sparseg_adjl_add_dir_edge(V, n, A, size_A, pos, v, u, FALSE); - - return TRUE; -} - -boolean -sparseg_adjl_add_edge_no_extend (t_ver_sparse_rep *V, int n, - t_adjl_sparse_rep *A, int size_A, int *pos, int u, int v, boolean CHECK) - /* - like sparseg_adjl_add_edge but here we are guaranteed - that pos + 1 < size_A - (unless that for some reason we attempt to add - an edge which is already there) - - this feature is required when A is part of a Magma block: - we do not want to reallocate A here - (would be done at a higher level) - - we check if the edge is already in the graph iff CHECK true - - also, we assume that we use this procedur only when dealing - with an undirected graph - */ -{ - boolean edge_added; - - edge_added = - sparseg_adjl_add_dir_edge_no_extend(V, n, A, size_A, pos, u, v, - CHECK); - - if (edge_added) - sparseg_adjl_add_dir_edge_no_extend(V, n, A, size_A, pos, v, u, - FALSE); - - return edge_added; -} - - -boolean -sparseg_adjl_add_dir_edge (t_ver_sparse_rep *V, int n, - t_adjl_sparse_rep **A, int *size_A, int *pos, int u, int v, - boolean CHECK) - /* - add the DIRECTED edge to the sparse graph (V, n, A) - - pos records where to add the next edge in A - - if pos >= size_A, we must extend A - - we check if the edge is already in the graph iff CHECK true - */ -{ - boolean edge_exists; - - edge_exists = FALSE; - if (CHECK) - { - edge_exists = sparseg_adjl_dir_edge_exists(V, n, *A, u, v); - - if (edge_exists) - return FALSE; - } - - if (*pos == *size_A) - { - *size_A += 1; /* add one directed edge */ - *A = (t_adjl_sparse_rep *) - mem_realloc(*A, sizeof(t_adjl_sparse_rep) * *size_A); - } - ASSERT(*pos < *size_A); - - sparseg_adjl_add_dir_edge_no_extend(V, n, *A, *size_A, pos, u, v, - FALSE); - - return TRUE; -} - -boolean -sparseg_adjl_add_dir_edge_no_extend (t_ver_sparse_rep *V, int n, - t_adjl_sparse_rep *A, int size_A, int *pos, int u, int v, boolean CHECK) - /* - add an edge where A is guaranteed to be be big enough - (unless that for some reason we attempt to add - an edge which is already there) - - this feature is required when A is part of a Magma block: - we do not want to reallocate A here - (would be done at a higher level) - - we check if the edge is already in the graph iff CHECK true - */ -{ - /* - given the way V and A represent the graph, it is simplest - to add the new edge at the beginning of i's adj. list - */ - int i_v; - t_adjl_sparse_rep a; - - if (CHECK && sparseg_adjl_dir_edge_exists(V, n, A, u, v)) - return FALSE; - - if (*pos >= size_A) - DIE(); - - /* - otherwise always add the edge - */ - i_v = *pos; - a.end_vertex = v; - a.next = V[u].first_edge; - A[(*pos)++] = a; - V[u].first_edge = i_v; - - return TRUE; -} - - - -boolean -sparseg_adjl_remove_edge_no_red (t_ver_sparse_rep *V, t_adjl_sparse_rep *A, - int u, int v) - /* - remove the UNDIRECTED edge from sparse graph (V, A) - if (u, v) is not an edge then nothing changes (and return FALSE) - - A will be left with "holes" - */ -{ - sparseg_adjl_remove_dir_edge_no_red(V, A, u, v); - return sparseg_adjl_remove_dir_edge_no_red(V, A, v, u); -} - - -boolean -sparseg_adjl_remove_dir_edge_no_red (t_ver_sparse_rep *V, - t_adjl_sparse_rep *A, int u, int v) - /* - remove the DIRECTED edge from the sparse graph (V, n, A) - if (u, v) is not an edge then nothing changes (and return FALSE) - - A will be left with "holes" - */ -{ - int cur_e, prev_e; - - cur_e = V[u].first_edge; - if (cur_e == NIL) - /* - (u, v) is not an edge - */ - return FALSE; - - if (A[cur_e].end_vertex == v) - { - V[u].first_edge = A[cur_e].next; - return TRUE; /* done */ - } - - while (A[cur_e].end_vertex != v) - /* - if (u, v) is an edge then this loop will terminate - */ - { - prev_e = cur_e; - cur_e = A[cur_e].next; - if (cur_e == NIL) - /* - (u, v) is not an edge - */ - return FALSE; - } - ASSERT(A[cur_e].end_vertex == v); - - A[prev_e].next = A[cur_e].next; - return TRUE; -} - -int -sparseg_adjl_remove_all_dir_edge_no_red (t_ver_sparse_rep *V, - t_adjl_sparse_rep *A, int u, int v) - /* - remove all DIRECTED edges [u, v] from the non-simple - sparse graph (V, n, A) - if (u, v) is not an edge then nothing changes; - we return the number of edges removed - - A will be left with "holes" - */ -{ - int cur_e, prev_e, e_removed; - - if (V[u].first_edge == NIL) - /* - (u, v) is not an edge - */ - return 0; - - e_removed = 0; - while (A[V[u].first_edge].end_vertex == v) - { - V[u].first_edge = A[V[u].first_edge].next; - e_removed++; - - if (V[u].first_edge == NIL) - return e_removed; - } - ASSERT(A[V[u].first_edge].end_vertex != v); - - prev_e = V[u].first_edge; - cur_e = A[prev_e].next; - while (cur_e != NIL) - { - if (A[cur_e].end_vertex == v) - { - A[prev_e].next = A[cur_e].next; - e_removed++; - cur_e = A[cur_e].next; - } - else - { - prev_e = cur_e; - cur_e = A[cur_e].next; - } - } - - return e_removed; -} - - - -void -sparseg_adjl_add_vertices (t_ver_sparse_rep **V, int n, int nmore) - /* - add nmore vertices - V is assumed to have length n - */ -{ - *V = (t_ver_sparse_rep *) - mem_realloc(*V, sizeof(t_ver_sparse_rep) * (n + nmore)); - - sparseg_adjl_add_vertices_no_extend(*V, n, nmore); -} - -void -sparseg_adjl_add_vertices_no_extend (t_ver_sparse_rep *V, int n, int nmore) - /* - add nmore vertices, - here V is assumed to have length n + nmore (ie V has already - been made bigger) - */ -{ - int v; - - for (v = n; v < n + nmore; v++) - { - V[v].first_edge = NIL; - } -} - -void -sparseg_adjl_remove_vertex (t_ver_sparse_rep **V, int n, - t_adjl_sparse_rep *A, int pos_A, int w, int *e) - /* - V is assumed to have length n: we will reallocate - V so that V will have length n-1 - - A is occupied from [0..pos-1], A will be left with holes - - we also assume that the graph can have loops and multiple edges; - further, we the edge counting implicitely assumes that graph - is undirected!!! - - this must be eventually fixed - */ -{ - int v, nv, edge, loops; - t_ver_sparse_rep *new_V; - - /* - we first count the loops if any - */ - loops = 0; - edge = (*V)[w].first_edge; - while (edge != NIL) - { - loops = A[edge].end_vertex == w ? loops + 1 : loops; - edge = A[edge].next; - } - ASSERT(loops % 2 == 0); - loops /= 2; - - /* - we recreate the vertices array - */ - new_V = (t_ver_sparse_rep *) - mem_malloc(sizeof(t_ver_sparse_rep) * (n - 1)); - - for (v = 0, nv = 0; v < n; v++, nv++) - { - if (v == w) - { - nv--; - } - else - { - new_V[nv].first_edge = (*V)[v].first_edge; - } - } - mem_free(*V); - *V = new_V; - - *e -= loops; - sparseg_adjl_remove_vertex_no_red(*V, n, A, w, e); - - /* - oops! not relabelling vertices can wreck havock! - */ - sparseg_adjl_relabel_vertex(A, pos_A, w); -} - -void -sparseg_adjl_remove_vertex_no_red (t_ver_sparse_rep *V, int n, - t_adjl_sparse_rep *A, int w, int *e) - /* - here V has already size n - 1 and has been initialised, - all what remains to do is to remove the edges incident - from w in A - - A will be left with holes - */ -{ - int v, nbr_e_removed; - - nbr_e_removed = 0; - for (v = 0; v < n - 1; v++) - { - nbr_e_removed += sparseg_adjl_remove_all_dir_edge_no_red(V, A, v, w); - } - - *e= *e - nbr_e_removed; -} - -void -sparseg_adjl_relabel_vertex (t_adjl_sparse_rep *A, int pos, int u) - /* - relabel all vertices v > u as v-1 - (required when removing a vertex) - */ -{ - int i; - - for (i = 0; i < pos; i++) - { - A[i].end_vertex = A[i].end_vertex > u ? - A[i].end_vertex - 1 : A[i].end_vertex; - } -} - -/* - * sparseg_adjl_pred.c - */ - -/* - What: - ***** - - Implementing: - - Some high-level functions on the sparse graph as - an adjacency list: predicates. - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} - - - -/* aproto: header embed_graph_protos.h */ - - -#ifndef PLANAR_IN_MAGMA -#endif - -boolean -sparseg_adjl_dir_edge_exists (t_ver_sparse_rep *V, int n, - t_adjl_sparse_rep *A, int u, int v) - /* - does the directed edge [u, v] already exist in the graph - */ -{ - int cur_e, prev_e; - - cur_e = V[u].first_edge; - if (cur_e == NIL) - return FALSE; - - if (A[cur_e].end_vertex == v) - { - return TRUE; - } - - while (A[cur_e].end_vertex != v) - { - prev_e = cur_e; - cur_e = A[cur_e].next; - if (cur_e == NIL) - /* - (u, v) is not an edge - */ - return FALSE; - } - ASSERT(A[cur_e].end_vertex == v); - return TRUE; -} - - - -boolean -sparseg_adjl_u_adj_v (t_ver_sparse_rep *V, int n, t_adjl_sparse_rep *A, - int u, int v) - /* - is u adj. to v - */ -{ - return sparseg_adjl_dir_edge_exists(V, n, A, u, v); -} - - -boolean -sparseg_adjl_sub (t_ver_sparse_rep *V1, int n1, t_adjl_sparse_rep *A1, - t_ver_sparse_rep *V2, int n2, t_adjl_sparse_rep *A2) - /* - test if the (V1, n1, A1) sparse graph is a subgraph of - the (V2, n2, A2) graph - */ -{ - int v, *fp, n, bign, i; - - n = n1 > n2 ? n2 : n1; - bign = n1 > n2 ? n1 : 0; - fp = (int *) mem_malloc(sizeof(int) * n); - for (i = 0; i < n; i++) - fp[i] = NIL; - - for (v = 0; v < n; v++) - { - int ne1, ne2; - - ne1 = V1[v].first_edge; - ne2 = V2[v].first_edge; - if (ne1 == NIL) - { - continue; - } - else if (ne2 == NIL) - { - mem_free(fp); - return FALSE; - } - - while (ne2 != NIL) - { - int u2; - - u2 = A2[ne2].end_vertex; - fp[u2] = v; - ne2 = A2[ne2].next; - } - - while (ne1 != NIL) - { - int u1; - - u1 = A1[ne1].end_vertex; - if (fp[u1] != v) - { - mem_free(fp); - return FALSE; - } - ne1 = A1[ne1].next; - } - } - mem_free(fp); - - for (v = n; v < bign; v++) - /* - those vertices must not be end points of edges: - this chcek is only necessary in the digraph case - */ - { - if (V1[v].first_edge != NIL) - return FALSE; - } - - return TRUE; -} - - - -boolean -sparseg_adjl_eq (t_ver_sparse_rep *V1, int n1, t_adjl_sparse_rep *A1, - t_ver_sparse_rep *V2, int n2, t_adjl_sparse_rep *A2) - /* - compare the two sparse graphs (V1, n1, A1) & (V2, n2, A2) - we don't know their number of edges - */ -{ - if (n1 != n2) - return FALSE; - - return sparseg_adjl_sub(V1, n1, A1, V2, n2, A2) - && sparseg_adjl_sub(V2, n2, A2, V1, n1, A1); -} - - - -/* - * sparseg_dlcl_misc.c - */ - -/* - What: - ***** - - Implementing: - - Housekeeping for an internal sparse graph representation - internal to the planarity tester and obstruction isolator. - - This sparse graph consists of an array of doubly linked circular lists - (the neighbour lists for each vertex). - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} - - -/* aproto: header embed_graph_protos.h */ - -/* aproto: beginstatic -- don't touch this!! */ -static boolean sparseg_dlcl_is_present (t_dlcl *, int, t_dlcl **); -/* aproto: endstatic -- don't touch this!! */ - - -#ifndef PLANAR_IN_MAGMA -#endif - - -void -sparseg_dlcl_delete (t_dlcl **g, int n) -{ - int i; - - for (i = 0; i < n; i++) - { - embedg_dlcl_delete(g[i]); - } - mem_free(g); -} - -void -sparseg_dlcl_print (t_dlcl **g, int n) -{ - int i; - - for (i = 0; i < n; i++) - { - fprintf(stdout,"%d:\t", i); - embedg_dlcl_print(g[i]); - } -} - - -static boolean -sparseg_dlcl_is_present (t_dlcl *l, int label, t_dlcl **p) -{ - *p = embedg_dlcl_find(l, label); - return *p == NP ? FALSE : TRUE; -} - - -boolean -sparseg_dlcl_is_adjacent (t_dlcl **g, int n, int v, int u, t_dlcl **p) - /* - is u adjacent to v - */ -{ - ASSERT(v >= 0 && v < n && u >= 0 && u < n); - return sparseg_dlcl_is_present(g[v], u, p); -} - -void -sparseg_dlcl_append_to_neigh_list (t_dlcl **g, int n, int v, int u, int in_adjl) - /* - append u to the neighbour list of v - */ -{ - t_dlcl *u_rec; - - u_rec = embedg_dlcl_rec_new(u); - u_rec->in_adjl = in_adjl; - g[v] = embedg_dlcl_rec_append(g[v], u_rec); -} - - - - -void -sparseg_dlcl_to_sparseg (t_dlcl **g, int n, int e, - t_ver_sparse_rep **V, t_adjl_sparse_rep **A) - /* - e is the number of undirected edges of g - - convert a dlcl into the standard sparseg rep. as an - adjacency list - */ -{ - int i_e, v; - - *V = (t_ver_sparse_rep *) mem_malloc(sizeof(t_ver_sparse_rep) * n); - *A = (t_adjl_sparse_rep *) mem_malloc(sizeof(t_adjl_sparse_rep) * 2 * e); - - for (v = 0; v < n; v++) - (*V)[v].first_edge = NIL; - - i_e = 0; - for (v = 0; v < n; v++) - { - t_dlcl *l, *p; - - l = p = g[v]; - if (!embedg_dlcl_is_empty(p)) - { - t_adjl_sparse_rep a; - - ASSERT((*V)[v].first_edge == NIL); - (*V)[v].first_edge = i_e; - a.end_vertex = p->info; - a.next = i_e + 1; - (*A)[i_e++] = a; - - p = embedg_dlcl_list_next(p); - while (p != l) - { - a.end_vertex = p->info; - a.next = i_e + 1; - (*A)[i_e++] = a; - - p = embedg_dlcl_list_next(p); - } - - /* - end of list for v - */ - (*A)[i_e - 1].next = NIL; - } - } - ASSERT(i_e == 2 * e); -} - -boolean -sparseg_dlcl_sub (t_dlcl **g1, int n1, t_dlcl **g2, int n2) - /* - is g2 a subgraph of g1 - - I request that both graphs have same order - - This is not used anywhere... do we need it??? - */ -{ - int n, v, *fp; - - if (n1 != n2) - return FALSE; - - n = n1; - fp = (int *) mem_malloc(sizeof(int) * n); - for (v = 0; v < n; v++) - fp[v] = NIL; - - for (v = 0; v < n; v++) - { - t_dlcl *l1, *p1, *l2, *p2; - - l1 = p1 = g1[v]; - l2 = p2 = g2[v]; - if (embedg_dlcl_is_empty(p1) && !embedg_dlcl_is_empty(p2)) - { - mem_free(fp); - return FALSE; - } - if (embedg_dlcl_is_empty(p2)) - { - continue; - } - - fp[p1->info] = v; - p1 = embedg_dlcl_list_next(p1); - while (p1 != l1) - { - fp[p1->info] = v; - p1 = embedg_dlcl_list_next(p1); - } - - if (fp[p2->info] != v) - { - mem_free(fp); - return FALSE; - } - p2 = embedg_dlcl_list_next(p2); - while (p2 != l2) - { - if (fp[p2->info] != v) - { - mem_free(fp); - return FALSE; - } - } - } - mem_free(fp); - - return TRUE; -} -/* - * VES_misc.c - */ - -/* - What: - ***** - - Implementing: - - All low-level routines for the VES structure: - - - the VES structure is solely used within the planarity tester - and obstruction isolator - - - it stores vertices, virtual vertices and edges - --more on this later-- - - - it allows for circular doubly linked lists, hence - enabling us -among other things- to store the - graph embedding if the tester is successful - - - basic features: - + the VES has exactly size 2n + 2(3n-5) : - we add at most one more edge than the max for a planar graph - (need to x by 2: we store directed edges) - + a vertex and the edges incident FROM it are linked in a doubly - linked circular list - + where a vertex is inserted between two of its outcoming edges - determines an external face walk for a bicomponent - + the twin edge is more commonly known as the inverse edge - + we have tree and back edges (from the DFS), and short-cut edges - which are added by the tester - -but short-cut edges are added in such a way as to maintain - planarity (in a local sense) - + vertices and edges can be marked (visited for example) - + they have an orientation which must be eventuall recovered - and which is set in the merge_bicomp routine - + vertices are essentially known via their DFI or DFS index - (though their label is stored too) - - blah, blah.... later then. - Have a look at embedg_planar_alg_init which initialises the VES - structure - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_DEB_SCE(x) {} -#define IF_DEB_PROPER_FACE(x) {} -#define IF_VERB(x) {} - - -/* aproto: header embed_graph_protos.h */ - -boolean -embedg_VES_is_vertex (int n, int i) - /* - is this a vertex - (relative to the "big" array of size 2n + 2(3n-5)) - */ -{ - return i < n ? TRUE : FALSE; -} - -boolean -embedg_VES_is_virtual_vertex (int n, int i) - /* - is this a virtual vertex - (relative to the "big" array of size 2n + 2(3n-5)) - - a virtual vertex is a vertex v^c which denotes the - DFS parent of the child c - - see embedg_planar_alg_init for more - */ -{ - return i >= n && i < 2*n ? TRUE : FALSE; -} - -boolean -embedg_VES_is_edge (int n, int i) - /* - is this an edge - (relative to the "big" array of size 2n + 2(3n-5)) - */ -{ - return i >= 2*n ? TRUE : FALSE; -} - -boolean -embedg_VES_is_tree_edge (t_ver_edge *embed_graph, int n, int i) - /* - is this s tree edge - */ -{ - return embedg_VES_is_edge(n, i) - && embed_graph[i].type == TE; -} - -boolean -embedg_VES_is_back_edge (t_ver_edge *embed_graph, int n, int i) - /* - is this a back edge - */ -{ - return embedg_VES_is_edge(n, i) - && embed_graph[i].type == BE; -} - -boolean -embedg_VES_is_short_cut_edge (t_ver_edge *embed_graph, int n, int i) - /* - as the name indicates... - */ -{ - return embedg_VES_is_edge(n, i) - && embed_graph[i].type == SCE; -} - -void -embedg_VES_print_vertex (int n, int v) -{ - ASSERT(embedg_VES_is_vertex(n, v)); - fprintf(stdout, "%d ", v); -} - -void -embedg_VES_print_virtual_vertex (t_ver_edge *embed_graph, int n, int v) -{ - int c; - - ASSERT(embedg_VES_is_virtual_vertex(n, v)); - c = v - n; - fprintf(stdout, "%d^%d ", embed_graph[c].DFS_parent, c); -} - -void -embedg_VES_print_any_vertex (t_ver_edge *embed_graph, int n, int v) -{ - if (embedg_VES_is_vertex(n, v)) - { - embedg_VES_print_vertex(n, v); - } - else - { - embedg_VES_print_virtual_vertex(embed_graph, n, v); - } -} - -void -embedg_VES_print_any_rec (t_ver_edge *embed_graph, int n, int r) -{ - if (embedg_VES_is_edge(n, r)) - { - embedg_VES_print_edge(embed_graph, n, r); - } - else - { - embedg_VES_print_any_vertex(embed_graph, n, r); - } -} - -void -embedg_VES_print_edge (t_ver_edge *embed_graph, int n, int e) -{ - int v, prev, cur; - - ASSERT(embedg_VES_is_edge(n, e)); - - /* - must find the vertex in the doubly linked circular list - of vertices/edges - */ - - prev = e; - cur = v = embed_graph[e].link[0]; - if (embedg_VES_is_vertex(n, v) - || embedg_VES_is_virtual_vertex(n, v)) - { - embedg_VES_print_any_vertex(embed_graph, n, v); - fprintf(stdout, ", "); - embedg_VES_print_any_vertex(embed_graph, n, - embed_graph[e].neighbour); - fprintf(stdout, "):0\n"); - } - else while (!embedg_VES_is_vertex(n, v) - && !embedg_VES_is_virtual_vertex(n, v)) - { - v = embedg_VES_get_next_in_dlcl(embed_graph, n, - cur, prev); - - if (embedg_VES_is_vertex(n, v) - || embedg_VES_is_virtual_vertex(n, v)) - { - embedg_VES_print_any_vertex(embed_graph, n, v); - fprintf(stdout, ", "); - embedg_VES_print_any_vertex(embed_graph, n, - embed_graph[e].neighbour); - fprintf(stdout, "):0\n"); - } - else - { - prev = cur; - cur = v; - } - } -} - -void -embedg_VES_print_flipped_edges (t_ver_edge *embed_graph, int n, int edge_pos) - /* - print those edges in the structure whose sign is CLOCKW, - ie which have been flipped at some stage - */ -{ - int e; - - for (e = 2*n; e <= edge_pos; e++) - { - if (!embedg_VES_is_short_cut_edge(embed_graph, n, e)) - /* - we don't care about the short-cut edges - */ - { - if (embed_graph[e].sign != CCLOCKW) - { - embedg_VES_print_edge(embed_graph, n, e); - } - } - } -} - -#if 0 -int -embedg_VES_get_edge_from_ver (t_ver_edge *embed_graph, int n, int v) - /* - not used anywhere; why is this here??? - */ -{ - int in, e; - - ASSERT(embedg_VES_is_vertex(n, v) - || embedg_VES_is_virtual_vertex(n, v)); - - in = embedg_VES_is_edge(n, embed_graph[v].link[0]) ? 0 : 1; - e = embed_graph[v].link[in]; - ASSERT(embedg_VES_is_edge(n, e)); - - return e; -} - -int -embedg_VES_get_ver_from_edge (t_ver_edge *embed_graph, int n, int e) -{ - int in, v; - - ASSERT(embedg_VES_is_edge(n, e)); - - in = embedg_VES_is_vertex(n, embed_graph[e].link[0]) - || embedg_VES_is_virtual_vertex(n, embed_graph[e].link[0]) - ? - 0 : 1; - - v = embed_graph[e].link[in]; - ASSERT(embedg_VES_is_vertex(n, v) - || embedg_VES_is_virtual_vertex(n, v)); - - return v; -} -#endif - -int -embedg_VES_get_twin_edge (t_ver_edge *embed_graph, int n, int e) - /* - the twin edge is understood as being the inverse edge - */ -{ - int twin; - - ASSERT(embedg_VES_is_edge(n, e)); - - twin = e % 2 == 0 ? e + 1 : e - 1; - ASSERT(embedg_VES_is_edge(n, twin)); - - return twin; -} - -int -embedg_VES_get_ver_from_virtual (t_ver_edge *embed_graph, int n, int vv) - /* - get v from the virtual vertex v^c - */ -{ - int v; - - ASSERT(embedg_VES_is_virtual_vertex(n, vv)); - v = embed_graph[vv - n].DFS_parent; - - return v; -} - -int -embedg_VES_get_ver (t_ver_edge *embed_graph, int n, int v) -{ - if (embedg_VES_is_virtual_vertex(n, v)) - return embedg_VES_get_ver_from_virtual(embed_graph, n, v); - - return v; -} - - -int -embedg_VES_get_next_in_dlcl (t_ver_edge *embed_graph, int n, int r, int prev) - /* - r is a (virtual) vertex or edge record in embed_graph: - get the next in the list (formed by the .link[] fields) - in the doubly linked circular list - - so that prev != next - -- NOTE: a priori these lists always contain 2 elts at least - so that there shouldn't be any problem... - --> huh? is that true? - */ -{ - return embed_graph[r].link[0] == prev ? - embed_graph[r].link[1] : embed_graph[r].link[0]; -} - - -void -embedg_VES_walk_bicomp (t_ver_edge *embed_graph, int n, int v, int vin) - /* - walk the external face of the bicomp starting - at VIRTUAL vertex v entered via vin - - this of course assumes that the "thing" rooted at - v is a bicomponent -- depending where we are at in the - tester this is not necessarily the case - -- I comment upon this in merge_bicomps.c: - embedg_VES_merge_pertinent_bicomps - */ -{ - int start, startin, s, sin; - - ASSERT(embedg_VES_is_virtual_vertex(n, v)); - - embedg_VES_print_virtual_vertex(embed_graph, n, v); - - s = NIL; - start = v; - startin = vin; - while (s != v) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, start, startin, - FALSE, 0, &s, &sin); - if (embedg_VES_is_virtual_vertex(n, s)) - { - embedg_VES_print_virtual_vertex(embed_graph, n, s); - } - else - { - embedg_VES_print_vertex(n, s); - } - start = s; - startin = sin; - } - fprintf(stdout, "\n"); -} - -void -embedg_VES_print_adj_list (t_ver_edge *embed_graph, int n, int r, - boolean consistent) - /* - print r's adjacency list - r can be a vertex or edge - - the boolean if true assumes that - the list is consistent (will determine the way we traverse the list) - - a priori we should get the same result either way - */ -{ - if (consistent) - { - int next; - - embedg_VES_print_any_rec(embed_graph, n, r); - - next = embed_graph[r].link[0]; - while (next != r) - { - embedg_VES_print_any_rec(embed_graph, n, next); - next = embed_graph[next].link[0]; - } - } - else - { - int prev, cur, next; - - embedg_VES_print_any_rec(embed_graph, n, r); - - prev = r; - cur = embed_graph[r].link[0]; - - while (cur != r) - { - embedg_VES_print_any_rec(embed_graph, n, cur); - next = embedg_VES_get_next_in_dlcl(embed_graph, n, - cur, prev); - prev = cur; - cur = next; - } - } -} - -boolean -embedg_VES_is_adj_list_consistent (t_ver_edge *embed_graph, int n, int r) - /* - checks that r's adjacency list is consistent: - ie, that either traversing it using link[0] always - or traversing it using embedg_VES_get_next_in_dlcl - gives the SAME result - */ -{ - int *list_link, *list_n_dldl, il, id, i; - - list_link = (int *) mem_malloc(sizeof(int) * 2 * n); - list_n_dldl = (int *) mem_malloc(sizeof(int) * 2 * n); - /* - must allocate 2*n space: I could have TE and SCE with same neighbour - (or BE and SCE as well) - */ - il = id = -1; - - /* - traversing the list via link[0] - */ - { - int next; - - list_link[++il] = r; - - next = embed_graph[r].link[0]; - while (next != r) - { - list_link[++il] = next; - next = embed_graph[next].link[0]; - } - } - - /* - traversing the list using embedg_VES_get_next_in_dlcl - */ - { - int prev, cur, next; - - list_n_dldl[++id] = r; - prev = r; - cur = embed_graph[r].link[0]; - - while (cur != r) - { - list_n_dldl[++id] = cur; - next = embedg_VES_get_next_in_dlcl(embed_graph, n, - cur, prev); - prev = cur; - cur = next; - } - } - - if (il != id) - { - mem_free(list_link); - mem_free(list_n_dldl); - return FALSE; - } - - for (i = 0; i <= il; i++) - { - if (list_link[i] != list_n_dldl[i]) - { - mem_free(list_link); - mem_free(list_n_dldl); - return FALSE; - } - } - - mem_free(list_link); - mem_free(list_n_dldl); - return TRUE; -} - - -boolean -embedg_VES_are_adj_lists_consistent (t_ver_edge *embed_graph, int n) - /* - checks that the adjacency list of each vertex is consistent - in the manner of embedg_VES_is_adj_list_consistent - */ -{ - int i; - - /* - it is enough to visit the vertices and virtual vertices only - (I don't think it is enough to do the vertices only --??) - */ - for (i = 0; i < 2*n; i++) - if (!embedg_VES_is_adj_list_consistent(embed_graph, n, i)) - return FALSE; - - return TRUE; -} - - - -void -embedg_VES_remove_edge (t_ver_edge *embed_graph, int n, int e) - /* - remove edge e from the embedding - */ -{ - int r1, r2, r1out, r2in, twin; - - ASSERT(embedg_VES_is_edge(n, e)); - - IF_DEB_SCE( - fprintf(stdout, "removing an SCE, enter\n"); - embedg_VES_print_edge(embed_graph, n, e); - ) - - r1 = embed_graph[e].link[0]; - r2 = embed_graph[e].link[1]; - - /* - disable e and link r1 and r2 together: - we had r1 -> e -> r2 - */ - embed_graph[e].link[0] = embed_graph[e].link[1] = e; - - r1out = embed_graph[r1].link[0] == e ? 0 : 1; - r2in = embed_graph[r2].link[0] == e ? 0 : 1; - - if (r1 == r2) - /* - this I think should never happen, but one never knows... - */ - { - embed_graph[r1].link[0] = embed_graph[r1].link[1] = r1; - } - else - { - embed_graph[r1].link[r1out] = r2; - embed_graph[r2].link[r2in] = r1; - } - - ASSERT(embedg_VES_is_adj_list_consistent(embed_graph, n, r1)); - - /* - now we must do a similar thing for the twin - (which must get reomved as well) - */ - twin = embedg_VES_get_twin_edge(embed_graph, n, e); - - IF_DEB_SCE( - fprintf(stdout, "removing an SCE, the twin\n"); - embedg_VES_print_edge(embed_graph, n, twin); - ) - - r1 = embed_graph[twin].link[0]; - r2 = embed_graph[twin].link[1]; - - embed_graph[twin].link[0] = embed_graph[twin].link[1] = twin; - - r1out = embed_graph[r1].link[0] == twin ? 0 : 1; - r2in = embed_graph[r2].link[0] == twin ? 0 : 1; - - if (r1 == r2) - { - embed_graph[r1].link[0] = embed_graph[r1].link[1] = r1; - } - else - { - embed_graph[r1].link[r1out] = r2; - embed_graph[r2].link[r2in] = r1; - } - - ASSERT(embedg_VES_is_adj_list_consistent(embed_graph, n, r1)); -} - - -void -embedg_VES_set_orientation (t_ver_edge *embed_graph, int n, int *ver_orient) - /* - using the vertices' orientation as given in ver_orient - we set the orientation for each edge in the adjacency list - for each vertex - - to do this we use the field sign which is NOT needed - anymore by the tester since by the time we call this - function we would have finished with that bit (the tester) - - sign is only set when merging bicomps - - even though we'll perform another walkdown when - recovering an obstruction (if any) no bicomp merging will occur, - so we are safe - */ -{ - int v; - - for (v = 0; v < n; v++) - { - int o, e; - - o = ver_orient[v]; - embed_graph[v].sign = o; - - e = embed_graph[v].link[0]; - - while (e != v) - /* - just as a note: note the way I get the next in the list - here (as opposed to using - embedg_VES_get_next_in_dlcl): - this is because I implicitely assume that - the adjacency lists are consistent - - Also note that edges can be SCE, it doesn't really matter - anyway (they may not have been removed yet - -- see the way we recover the obstruction: - embedg_mark_obstruction) - */ - { - embed_graph[e].sign = o; - e = embed_graph[e].link[0]; - } - } -} - - -/* - * dlcl_misc.c - */ - -/* - What: - ***** - - Implementing: - - Housekeeping for a simple doubly linked circular list: - this is a data structure ONLY used WITHIN - the planarity tester and obstruction isolator and is not to be - confused with the VES structure mentionned elsewhere. - - The VES structure is an array, while the dlcl one is a list of - pointers. - - The dlcl is especially useful as it allows for the storage - of an ordered list. - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} - - -/* aproto: header embed_graph_protos.h */ - -/* aproto: beginstatic -- don't touch this!! */ -static void embedg_dlcl_rec_free (t_dlcl *); -static void embedg_dlcl_rec_insert_right (t_dlcl *, t_dlcl *); -static void embedg_dlcl_rec_insert_left (t_dlcl *, t_dlcl *); -static void embedg_dlcl_rec_retrieve (t_dlcl *); -static void embedg_dlcl_rec_delete (t_dlcl *); -static boolean embedg_dlcl_is_singleton (t_dlcl *); -/* aproto: endstatic -- don't touch this!! */ - - -#ifndef PLANAR_IN_MAGMA -#endif - - -t_dlcl * -embedg_dlcl_rec_new (int info) - /* - create a new record with info in the global array - to insert in the list - */ -{ - t_dlcl *r; - - r = (t_dlcl *) mem_malloc(sizeof(t_dlcl)); - r->info = info; - r->in_adjl = r->twin_in_adjl = NIL; - r->mult = 1; - r->right = r; - r->left = r; - return r; -} - -static void -embedg_dlcl_rec_free (t_dlcl *r) - /* - free - */ -{ - mem_free(r); -} - -void -embedg_dlcl_rec_print (t_dlcl *r) -{ - fprintf(stdout,"%d ", r->info); -} - -void -embedg_dlcl_print (t_dlcl *l) -{ - t_dlcl *p = l; - - if (!embedg_dlcl_is_empty(p)) - { - embedg_dlcl_rec_print(p); - p = embedg_dlcl_list_next(p); - while (p != l) - { - embedg_dlcl_rec_print(p); - p = embedg_dlcl_list_next(p); - } - } - fprintf(stdout,"\n"); -} - - -static void -embedg_dlcl_rec_insert_right (t_dlcl *l, t_dlcl *r) -{ - t_dlcl *tmp_r, *tmp_l; - - tmp_r = l->right; - tmp_l = tmp_r->left; - - l->right = r; - r->right = tmp_r; - - r->left = tmp_l; - tmp_r->left = r; -} - - -static void -embedg_dlcl_rec_insert_left (t_dlcl *l, t_dlcl *r) -{ - t_dlcl *tmp_r, *tmp_l; - - tmp_l = l->left; - tmp_r = tmp_l->right; - - l->left = r; - r->left = tmp_l; - - r->right = tmp_r; - tmp_l->right = r; -} - -t_dlcl * -embedg_dlcl_rec_append (t_dlcl *l, t_dlcl *r) -{ - if (embedg_dlcl_is_empty(l)) - return r; - - embedg_dlcl_rec_insert_left(l, r); - return l; -} - -t_dlcl * -embedg_dlcl_rec_prepend (t_dlcl *l, t_dlcl *r) -{ - if (embedg_dlcl_is_empty(l)) - return r; - - embedg_dlcl_rec_insert_left(l, r); - return r; -} - -t_dlcl * -embedg_dlcl_cat (t_dlcl *l, t_dlcl *m) - /* - concatenate m to the RIGHT of the end of l - WITHOUT copying m - */ -{ - t_dlcl *h1, *h2, *e1, *e2; - - if (embedg_dlcl_is_empty(l)) - return m; - if (embedg_dlcl_is_empty(m)) - return l; - - h1 = l; - e1 = l->left; - h2 = m; - e2 = m->left; - - e1->right = h2; - h2->left = e1; - e2->right = h1; - h1->left = e2; - - return l; -} - -t_dlcl * -embedg_dlcl_find (t_dlcl *l, int info) -{ - t_dlcl *p = l; - - if (!embedg_dlcl_is_empty(p)) - { - if (p->info == info) - { - return p; - } - p = embedg_dlcl_list_next(p); - while (p != l) - { - if (p->info == info) - { - return p; - } - p = embedg_dlcl_list_next(p); - } - } - return NP; -} - -t_dlcl * -embedg_dlcl_find_with_NIL_twin_in_adjl (t_dlcl *l, int info) -{ - t_dlcl *p = l; - - if (!embedg_dlcl_is_empty(p)) - { - if (p->info == info && p->twin_in_adjl == NIL) - { - return p; - } - p = embedg_dlcl_list_next(p); - while (p != l) - { - if (p->info == info && p->twin_in_adjl == NIL) - { - return p; - } - p = embedg_dlcl_list_next(p); - } - } - return NP; -} - - - -static void -embedg_dlcl_rec_retrieve (t_dlcl *r) -{ - t_dlcl *right, *left; - - right = r->right; - left = r->left; - - left->right = right; - right->left = left; - - r->right = r; - r->left = r; -} - -static void -embedg_dlcl_rec_delete (t_dlcl *r) -{ - embedg_dlcl_rec_retrieve(r); - embedg_dlcl_rec_free(r); -} - - -t_dlcl * -embedg_dlcl_delete_first (t_dlcl *l) - /* - prune the list from the head: - - set new head to right of old head - - delete old head - */ -{ - t_dlcl *new_head; - - ASSERT(!embedg_dlcl_is_empty(l)); - if (embedg_dlcl_is_singleton(l)) - { - new_head = NP; - } - else - { - new_head = l->right; - } - embedg_dlcl_rec_delete(l); - return new_head; -} - - -t_dlcl * -embedg_dlcl_delete_rec (t_dlcl *l, t_dlcl *r) - /* - delete r from l; - if r == l, set new head to right of old head - */ -{ - if (r == l) - { - return embedg_dlcl_delete_first(l); - } - embedg_dlcl_rec_delete(r); - return l; -} - - -boolean -embedg_dlcl_is_empty (t_dlcl *l) -{ - return (l == NP) ? TRUE : FALSE; -} - - -static boolean -embedg_dlcl_is_singleton (t_dlcl *l) -{ - return (l->right == l) ? TRUE : FALSE; - /* - same as l->left == l - */ -} - -t_dlcl * -embedg_dlcl_list_next (t_dlcl *l) - /* - this assumes no choice in the direction of the walking - (always to the right) - -- good enough when deleting for example or when - the direction of the walking does not matter - */ -{ - return l->right; -} - - -t_dlcl * -embedg_dlcl_list_prev (t_dlcl *l) - /* - this assumes no choice in the direction of the walking - (always to the right) - */ -{ - return l->left; -} - -t_dlcl * -embedg_dlcl_list_last (t_dlcl *l) -{ - return embedg_dlcl_list_prev(l); -} - - - -void -embedg_dlcl_delete (t_dlcl *l) -{ - if (!embedg_dlcl_is_empty(l)) - { - while (!embedg_dlcl_is_singleton(l)) - { - t_dlcl *next; - - next = embedg_dlcl_list_next(l); - embedg_dlcl_rec_delete(next); - } - embedg_dlcl_rec_delete(l); - } -} - -t_dlcl * -embedg_dlcl_copy (t_dlcl *l) -{ - t_dlcl *p, *c; - - if (embedg_dlcl_is_empty(l)) - return NP; - - c = embedg_dlcl_rec_new(l->info); - - p = embedg_dlcl_list_next(l); - while (p != l) - { - t_dlcl *temp; - - temp = embedg_dlcl_rec_new(p->info); - temp->in_adjl = p->in_adjl; - temp->twin_in_adjl = p->twin_in_adjl; - temp->mult = p->mult; - c = embedg_dlcl_rec_append(c, temp); - p = embedg_dlcl_list_next(p); - } - return c; -} - - -int -embedg_dlcl_length (t_dlcl *l) -{ - t_dlcl *p; - int n; - - if (embedg_dlcl_is_empty(l)) - return 0; - - p = embedg_dlcl_list_next(l); - n = 1; - while (p != l) - { - n++; - p = embedg_dlcl_list_next(p); - } - return n; -} -/* - * planar_by_edge_addition.c - */ - -/* - What: - ***** - - Implementing: - - The top level for the planarity tester. - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} -#define IF_DEB_TREE(x) {} -#define IF_DEB_EDGES(x) {} -#define IF_CPU(x) {} - - -/* aproto: header embed_graph_protos.h */ - - -#ifndef PLANAR_IN_MAGMA -#endif - - -boolean -sparseg_adjl_is_planar ( - t_ver_sparse_rep *V, - int n, - t_adjl_sparse_rep *A, /* input sparse graph */ - int *nbr_c, /* size of the graph, #components - */ - t_dlcl ***dfs_tree, /* a sparse graph rep. for the dfs tree - -- vertices are as DFIs - -- and children are ordered wrt - lowpoint value - */ - t_dlcl ***back_edges, /* for each vertex v, a dlcl - of the back edges [v, x] incident to v - where x is a DESCENDANT of v - (vertices are given as DFIs) - */ - t_dlcl ***mult_edges, /* for each vertex v, a dlcl - of the back edges [v, x] incident to v - where x is a DESCENDANT of v - (vertices are given as DFIs) - */ - t_ver_edge **embed_graph, /* output graph embedding -- more on that - later - */ - int *edge_pos, /* pos. in embed_graph for addition - of the next edge */ - int *vr, - int *wr /* if graph is non planar, return - the unembedded edge - (where wr descendant of vr) - */ -) - /* - as the name indicates: is the graph planar? - */ -{ - int v; - - IF_CPU( - float sttime; float time_to_now; - ) - - - *embed_graph = - embedg_planar_alg_init(V, n, A, nbr_c, - edge_pos, dfs_tree, back_edges, mult_edges); - IF_CPU( - sttime = time_current_user(); - ) - - for (v = n - 1; v >= 0; v--) - /* - visit all vertices in descending DFI order - */ - { - t_dlcl *be_l, *te_l, *p; - - IF_DEB( - fprintf(stdout, "top level, vertex %d\n", v); - ) - - /* - find all the back edges [w, v] where w is a descendant of v - and perform a walkup from w to v - (ie determine which bicomps are pertinent) - */ - be_l = (*back_edges)[v]; - p = be_l; - - if (!embedg_dlcl_is_empty(p)) - { - int w; - - w = p->info; - IF_DEB( - fprintf(stdout, "top level, before walkup for w %d\n", w); - ) - embedg_walkup(*embed_graph, n, v, p); - - p = embedg_dlcl_list_next(p); - while (p != be_l) - { - w = p->info; - IF_DEB( - fprintf(stdout, "top level, before walkup for w %d\n", w); - ) - embedg_walkup(*embed_graph, n, v, p); - - p = embedg_dlcl_list_next(p); - } - } - - /* - perform a walkdown for each tree edge [v, c], c a descendant of v - (ie attempt to embed all back edges on the pertinent bicomps) - */ - te_l = (*dfs_tree)[v]; - p = te_l; - - if (!embedg_dlcl_is_empty(p)) - { - int c, vv; - t_merge_queue q; - - c = p->info; - vv = c + n; - IF_DEB( - fprintf(stdout, "top level, before walkdown for c %d\n", c); - ) - q = embedg_walkdown(*embed_graph, n, edge_pos, vv); - - IF_DEB( - fprintf(stdout, "top level, after walkdown for c %d, state of edges'sign\n", c); - embedg_VES_print_flipped_edges(*embed_graph, - n, *edge_pos); - ) - - /* - temp only - */ - embedg_merge_queue_delete(q); - p = embedg_dlcl_list_next(p); - while (p != te_l) - { - c = p->info; - vv = c + n; - IF_DEB( - fprintf(stdout, "top level, before walkdown for c %d\n", c); - ) - q = embedg_walkdown(*embed_graph, n, edge_pos, vv); - - IF_DEB( - fprintf(stdout, "top level, after walkdown for c %d, state of edges'sign\n", c); - embedg_VES_print_flipped_edges(*embed_graph, - n, *edge_pos); - ) - - /* - temp only - */ - embedg_merge_queue_delete(q); - - p = embedg_dlcl_list_next(p); - } - } - - - /* - check that each back edge [w, v], w a descendant of v, - has been embedded - */ - be_l = (*back_edges)[v]; - p = be_l; - - if (!embedg_dlcl_is_empty(p)) - { - int w; - - w = p->info; - IF_DEB( - fprintf(stdout, "top level, before checking embedding for w %d\n", - w); - ) - if ((*embed_graph)[w].adjacent_to == v) - /* - this edge hasn't been embedded: - the graph is non-planar - */ - { - /* - before returning we really want to ensure that - the vertices' adjacency lists are consistent - */ - ASSERT(embedg_VES_are_adj_lists_consistent( - *embed_graph, n)); - - IF_CPU( - fprintf(stdout, "CPU for tester only %f\n", - (time_current_user() - sttime)); - ) - - *vr = v; - *wr = w; - return FALSE; - } - - p = embedg_dlcl_list_next(p); - while (p != be_l) - { - w = p->info; - IF_DEB( - fprintf(stdout, "top level, before checking embedding for w %d\n", - w); - ) - if ((*embed_graph)[w].adjacent_to == v) - { - /* - before returning we really want to ensure that - the vertices' adjacency lists are consistent - */ - ASSERT(embedg_VES_are_adj_lists_consistent( - *embed_graph, n)); - - IF_CPU( - fprintf(stdout, "CPU for tester only %f\n", - (time_current_user() - sttime)); - ) - - *vr = v; - *wr = w; - return FALSE; - } - - p = embedg_dlcl_list_next(p); - } - } - } - IF_DEB_EDGES( - fprintf(stdout, "top level, total number of edges in embedding %d\n", - *edge_pos - 2 * n + 1); - ) - - - /* - before returning we really want to ensure that - the vertices' adjacency lists are consistent - */ - ASSERT(embedg_VES_are_adj_lists_consistent(*embed_graph, n)); - - IF_CPU( - fprintf(stdout, "CPU for tester only %f\n", - (time_current_user() - sttime)); - ) - - return TRUE; -} - - - -/* - * walkup.c - */ - -/* - What: - ***** - - Implementing: - - The walkup routine within the VES structure: - - Walking up from w where [w, v^c] is a (directed) - back edge to be embeeding later. - Along the way collect all the pertinent bicomps that - will need to be merged before embedding the back edges - to v^c. - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} - - - -/* aproto: header embed_graph_protos.h */ - - -#ifndef PLANAR_IN_MAGMA -#endif - - -void -embedg_walkup (t_ver_edge *embed_graph, int n, int v, t_dlcl *p) - /* - walkup from w = p->info to v: [w, v] is a back edge where w is a DFS - descendant of v - */ -{ - int w, x, xin, y, yin; - - w = p->info; - - IF_DEB( - fprintf(stdout, "walkup from %d to %d, enter\n", w, v); - ) - - embed_graph[w].adjacent_to = v; - /* - dirty trick to record some information about the BE [w, v] - which will be useful at the time of creation and insertion of - this BE: this happens in the walkdown procedure - - note that what I am doing here is safe: [w].in_adjl, - [w].twin_in_adjl, [w].mult had no use so far since w is a vertex - (and not an edge...) - */ - embed_graph[w].in_adjl = p->in_adjl; - embed_graph[w].twin_in_adjl = p->twin_in_adjl; - embed_graph[w].mult = p->mult; - - /* - set up the traversal contexts for w: one in each direction - */ - x = w; - xin = 1; - y = w; - yin = 0; - - while (x != v) - { - int vz, z, c; - - IF_DEB( - fprintf(stdout, "walkup, x %d and y %d\n", x, y); - ) - - if (embed_graph[x].visited == v - || embed_graph[y].visited == v) - { - IF_DEB( - if (embed_graph[x].visited == v) - fprintf(stdout, "walkup, x visited\n"); - else - fprintf(stdout, "walkup, y visited\n"); - ) - break; - } - - /* - set x and y as visited! - */ - embed_graph[x].visited = embed_graph[y].visited = v; - - vz = embedg_VES_is_virtual_vertex(n, x) ? x : NIL; - vz = embedg_VES_is_virtual_vertex(n, y) ? y : vz; - - if (vz != NIL) - /* - that is, x (or y) is a virtual vertex - -- in other words, we are set to find the root of the bicomp - containing w, or of the bicomp r^c such that w is in the tree - rooted by c - - consequently, by definition, vz is PERTINENT - */ - { - c = vz - n; - z = embed_graph[c].DFS_parent; - - IF_DEB( - fprintf(stdout, "walkup, vz is virtual, %d^%d\n", - z, c); - ) - - if (z != v) - /* - determine if vz externally or internally active - */ - { - if (embed_graph[c].lowpoint < v) - /* - vz is externally active: APPEND to the list - of pertinent bicomps - */ - { - IF_DEB( - fprintf(stdout, "walkup, vz is ext. active\n"); - ) - - embed_graph[z].pertinent_bicomp_list = - embedg_dlcl_rec_append( - embed_graph[z].pertinent_bicomp_list, - embedg_dlcl_rec_new(vz)); - } - else - /* - vz is internally active: PREPEND to the list - of pertinent bicomps - */ - { - IF_DEB( - fprintf(stdout, "walkup, vz is pertinent\n"); - ) - - embed_graph[z].pertinent_bicomp_list = - embedg_dlcl_rec_prepend( - embed_graph[z].pertinent_bicomp_list, - embedg_dlcl_rec_new(vz)); - } - } - - /* - continue the walkup, look if there are any other - pertinent bicomps - -- here "jump" to the next bicomp "up" - */ - x = z; - xin = 1; - y = z; - yin = 0; - } - else - /* - continue the traversal of the bicomp until one finds - its (virtual) root - */ - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, - x, xin, FALSE, 0, &x, &xin); - embedg_VES_get_succ_on_ext_face(embed_graph, n, - y, yin, FALSE, 0, &y, &yin); - } - } -} - -/* - * walkdown.c - */ - -/* - What: - ***** - - Implementing: - - The walkdown routine within the VES structure: - - walking down a bicomp rooted by a virtual vertex v^c - and attempting to embed the back edges. - This cannot be done if the walk has to stop due to the - presence of externally active vertices on both - the clockwise and the anticlockwise side of the bicomp. - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_DEB_EMBED(x) {} -#define IF_DEB_BE(x) {} -#define IF_DEB_SCE(x) {} -#define IF_VERB(x) {} - - - -/* aproto: header embed_graph_protos.h */ - - -#ifndef PLANAR_IN_MAGMA -#endif - - - -t_merge_queue -embedg_walkdown (t_ver_edge *embed_graph, int n, int *edge_pos, int vv) - /* - walkdown from the virtual vertex: - embed any back edges incident to vv if any - and merge the encountered bicomps while walking down - (very informative isn't it? :)) - - ... and return the merge queue: will be useful when - isolating the Kuratowski subgraphs - */ -{ - t_merge_queue q; - int v, c, vvout; - - ASSERT(embedg_VES_is_virtual_vertex(n, vv)); - - /* - find v and c such that v^c = vv - */ - c = vv - n; - v = embed_graph[c].DFS_parent; - - IF_DEB( - fprintf(stdout, "walkdown from %d^%d, enter\n", v, c); - ) - - IF_DEB_EMBED( - fprintf(stdout, "walkdown, embedding at start\n"); - embedg_VES_print_bigcomps(embed_graph, n); - ) - - /* - create an empty merge queue - */ - q = embedg_merge_queue_new(n); - - for (vvout = 0; vvout <= 1; vvout++) - /* - chose a direction for the walk, but walk in both - directions unless a stopping vertex is encountered - and other conditions are satisfied (see below) - */ - { - int w, win; - - embedg_VES_get_succ_on_ext_face(embed_graph, n, vv, vvout ^ 1, - FALSE, 0, &w, &win); - - IF_DEB( - fprintf(stdout, "walkdown, successor (outside while loop) from %d^%d:%d is %d:%d\n", - embed_graph[vv-n].DFS_parent, vv-n, vvout ^ 1, - w, win); - ) - - while (w != vv) - /* - is there no danger we walk the whole way back to vv - and that all the vertices along the walk are inactive? - - answer: no, because of the short-cut edges. - - Short-cut edges are precisely inserted to remove the inactive - vertices from the external face (ie they are "pushed" - to the internal face of the bicomp) - */ - { - if (embed_graph[w].adjacent_to == v) - /* - ie there is a (directed) back edge [w, v] - (would have been set in the previous walkup routine): - embed this edge, but before that, merge all the bicomps - previouslsy collected - */ - { - IF_DEB( - fprintf(stdout, "walkdown, embed BE (%d^%d:%d, %d:%d)\n", - embed_graph[vv-n].DFS_parent, vv - n, vvout, - w, win); - fprintf(stdout, "walkdown, queue before pulling elts\n"); - embedg_merge_queue_print(q); - ) - - while (!embedg_merge_queue_empty(q)) - { - int u, uin, vu, vuout; - - embedg_merge_queue_get(&q, &u, &uin, &vu, &vuout); - - IF_DEB( - fprintf(stdout, "walkdown, pull from queue (%d:%d, %d^%d:%d)\n", - u, uin, - embed_graph[vu-n].DFS_parent, vu-n, - vuout); - ) - - embedg_VES_merge_pertinent_bicomps( - embed_graph, n, - vu, vuout, u, uin); - } - IF_DEB_BE( - fprintf(stdout, "walkdown, before embed BE [%d^%d:%d, %d:%d]\n", - embed_graph[vv-n].DFS_parent, vv - n, - vvout, w, win); - embedg_VES_print_adj_list( - embed_graph, n, vv, - TRUE); - fprintf(stdout, "\n"); - embedg_VES_print_adj_list( - embed_graph, n, vv, - FALSE); - ) - - embedg_VES_embed_edge(embed_graph, n, edge_pos, - BE, vv, vvout, w, win); - - IF_DEB_BE( - fprintf(stdout, "walkdown, after embed BE [%d^%d:%d, %d:%d]\n", - embed_graph[vv-n].DFS_parent, vv - n, - vvout, w, win); - embedg_VES_print_adj_list( - embed_graph, n, vv, - TRUE); - fprintf(stdout, "\n"); - embedg_VES_print_adj_list( - embed_graph, n, vv, - FALSE); - ) - IF_DEB_EMBED( - fprintf(stdout, "walkdown, embedding after bicomp merge & back edge embedding\n"); - embedg_VES_print_bigcomps(embed_graph, n); - ) - - /* - clear the adjacent_to flag - */ - embed_graph[w].adjacent_to = n; /* "invalid" value */ - } - - if (!embedg_dlcl_is_empty(embed_graph[w].pertinent_bicomp_list)) - /* - each pertinent child bicomp of w - (pertinent: contains active (ie more back edges to embed) - elts) - must be traversed - and pushed onto the queue for later bicomp merging - */ - { - int vw, vwout, x, xin, y, yin, s, sin; - - IF_DEB( - fprintf(stdout, "walkdown, pertinent list for %d\n", - w); - embedg_dlcl_print(embed_graph[w].pertinent_bicomp_list); - ) - - /* - get the first child in the pertinent list - (see how the list is built in embedg_walkup) - - the child will eventually be removed from that list - when merging the bicomps, and surely - this bicomp (rooted at vw) will be merged (later) - because it is active and hence pushed on - the merge queue - */ - - /* - we can start by pushing the vertex (w, win) on - the merge queue - */ - embedg_merge_queue_append_vertex(&q, embed_graph, n, w, win); - - IF_DEB( - fprintf(stdout, "walkdown, push 1rst 2-tuple on queue\n"); - embedg_merge_queue_print(q); - ) - - /* - get the first child in the pertinent list - */ - vw = (embed_graph[w].pertinent_bicomp_list)->info; - - IF_DEB( - fprintf(stdout, "walkdown, get pertinent %d^%d\n", - embed_graph[vw - n].DFS_parent, vw - n); - ) - - /* - start two walks starting at vw - */ - embedg_VES_get_succ_active_on_ext_face(embed_graph, n, - v , vw, 1, - FALSE, 0, &x, &xin); - embedg_VES_get_succ_active_on_ext_face(embed_graph, n, - v, vw, 0, - FALSE, 0, &y, &yin); - - /* - because of the trick of inserting short-cut edges - at previous stages, neighbours of vw are guaranteed - to be active - - (however I'll use the more general - embedg_VES_get_succ_active_on_ext_face - instead of the restrictive - embedg_VES_get_succ_on_ext_face - because the walkdown may be used later to isolate - Kuratowski minors, in a situation where SCEs could have - been removed and thus where the successor on the - external face will no longer be guaranteed to be active) - (* actually I have decided to remove the SCE at the - very last moment hence the above pb - does not occur in the present implementation) - - - it only remains to chose the next vertex where from - to continue the walk; the choice is made in that order: - - an internally active vertex - (incident to v via a backedge but whose lowpoint - is NO less than v) - - a (externally active) pertinent vertex - (incident to v via a backedge but whose lowpoint - is less than v: ie which is also externally active) - - as a last resort, a non-pertinent externally vertex, - which is then a stopping vertex - */ - IF_DEB( - fprintf(stdout, "walkdown, x and y: %d, %d\n", x, y); - ) - - if (embedg_VES_is_ver_int_active(embed_graph, n, - v, x)) - /* - x is internally active - */ - { - IF_DEB( - fprintf(stdout, "walkdown, x is int. active\n"); - ) - - s = x; - sin = xin; - } - else if (embedg_VES_is_ver_int_active( - embed_graph, n, - v, y)) - /* - y is internally active - */ - { - IF_DEB( - fprintf(stdout, "walkdown, y is int. active\n"); - ) - - s = y; - sin = yin; - } - else if (embedg_VES_is_ver_pertinent( - embed_graph, n, - v, x)) - /* - x is pertinent - */ - { - IF_DEB( - fprintf(stdout, "walkdown, x is pertinent\n"); - ) - - s = x; - sin = xin; - } - else - /* - tough luck: y may be externally active - */ - { - IF_DEB( - fprintf(stdout, "walkdown, tough luck\n"); - ) - - s = y; - sin = yin; - } - - IF_DEB( - fprintf(stdout, "walkdown, succ. on pertinent bicomp is %d:%d\n", s, sin); - ) - - /* - set vwout to respect consistency of traversal - */ - vwout = s == x ? 0 : 1; - - /* - now that we know vwout we can push (vw, vwout) - on the merge queue, thus completing the 4-tuple - (w, win, vw, vwout) describing a bicomp merge - to occur at a later stage - */ - embedg_merge_queue_append_virtual_vertex(&q, embed_graph, n, - vw, vwout); - - IF_DEB( - fprintf(stdout, "walkdown, push on queue (%d:%d, %d^%d:%d)\n", - w, win, embed_graph[vw-n].DFS_parent, vw - n, - vwout); - embedg_merge_queue_print(q); - ) - - /* - we continue the walk - */ - w = s; - win = sin; - } - /* - at this point, w is either inactive or externally active - (w can't be pertinent: its pertinent bicomp list is empty, - and the back edge [w, v], if any, has already been embedded) - */ - else if (embedg_VES_is_ver_inactive(embed_graph, n, - v, w)) - /* - w is inactive: continue with the walk on the external face - and, insert a short cut edge so that w is removed - from the external face - */ - { - int s, sin; - - IF_DEB( - fprintf(stdout, "walkdown, %d has no pertinent bicomps and is inactive\n", w); - ) - - embedg_VES_get_succ_on_ext_face(embed_graph, n, - w, win, - FALSE, 0, &s, &sin); - - IF_DEB( - fprintf(stdout, "walkdown, successor from %d:%d is %d:%d\n", - w, win, s, sin); - ) - - /* - s is the successor of w: we embed a short circuit edge - [vv, s] if - - the bicomp is externally active (to ensure that - at a later stage this new face gets bisected: - so that we don't end up with a face of degree 2 - (parallel edges)) - - if [s, vv] is not a back edge - - CONSEQUENTLY, adding SCE edges - + does not destroy the planarity of the graph - + ensures that each face has degree > 2 so that - |E| <= 3 * |V| - 6 remains valid at all times - + that the space allocated to the edges in embed_graph - (via MAXDE(n)) is sufficient - - NOTE: - the above still allows to embed a short-cut edge - as an edge parallel to a tree edge OR a back edge - (which then has been embedded previously - so that [w].adjacent has been cleared) - - but again, since the degree of the face will be - > 2, that's ok - - recall that c = vv - n - */ - if (embed_graph[c].lowpoint < v - /* - bicomp rooted at vv is externally active - */ - && embed_graph[s].adjacent_to != v) - /* - [s, vv] is not a back edge - */ - { - IF_DEB_SCE( - fprintf(stdout, "walkdown, before embed SCE [%d^%d:%d, %d:%d]\n", - embed_graph[vv-n].DFS_parent, vv - n, - vvout, s, sin); - embedg_VES_print_adj_list( - embed_graph, n, vv, - TRUE); - fprintf(stdout, "\n"); - embedg_VES_print_adj_list( - embed_graph, n, vv, - FALSE); - - ) - - embedg_VES_embed_edge(embed_graph, - n, edge_pos, - SCE, vv, vvout, s, sin); - /* - note also that the addition of short cut edges - does not change the fact that the graph is planar - (when it is, so we never run into the problem - of creating/adding too many edges to embed-graph) - */ - IF_DEB_SCE( - fprintf(stdout, "walkdown, after embed SCE [%d^%d:%d, %d:%d]\n", - embed_graph[vv-n].DFS_parent, vv - n, - vvout, s, sin); - embedg_VES_print_adj_list( - embed_graph, n, vv, - TRUE); - fprintf(stdout, "\n"); - embedg_VES_print_adj_list( - embed_graph, n, vv, - FALSE); - - ) - IF_DEB( - fprintf(stdout, "walkdown, embed SCE [%d^%d:%d, %d:%d]\n", - embed_graph[vv-n].DFS_parent, vv - n, - vvout, s, sin); - ) - - } - /* - continue the walk - */ - w = s; - win = sin; - } - else - /* - w is non-pertinent and externally active: - it is a stopping vertex: - we stop here and see if we can walk in the other direction - */ - { - IF_DEB( - fprintf(stdout, "walkdown, %d is externally active\n", w); - ) - break; - } - } - if (!embedg_merge_queue_empty(q)) - /* - mumm.... don't understand this one... let's see: - the queue constains pertinent bicomps collected during one of - the traversal of the external face, so that once - a stopping vertex has been encountered and the queue - is not empty, this means that we will be unable - to embed any remaining back edges: - - it is important to remember that when w is a stopping vertex - there is no choice left, since we walk the pertinent - bicomp in both directions at once, and always choose - the "best" possible vertex - (see the choice strategy: (a) internally active, (b) pertinent, - (c) the rest) - */ - { - IF_DEB( - fprintf(stdout, "walkdown, merge queue is not empty\n"); - ) - break; - } - } - - /* - and return the merge queue - */ - return q; -} - - - - -/* - * merge_queue_misc.c - */ - -/* - What: - ***** - - Implementing: - - The merge queue stores the pertinent bicomps waiting to - be merged before a subsequent back edge embedding. - See walkdown.c - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} - - - -/* aproto: header embed_graph_protos.h */ - - -#ifndef PLANAR_IN_MAGMA -#endif - -t_merge_queue -embedg_merge_queue_new (int n) - /* - create a merge queue of 4 * (n-1) elts: - we can only have at most n-1 virtual vertices, - and for each of those we need to store 4 bits of info - */ -{ - t_merge_queue q; - - q.start = q.end = 0; - q.b = (int *) mem_malloc(sizeof(int) * 4 * (n - 1)); - - return q; -} - -void -embedg_merge_queue_delete (t_merge_queue q) -{ - mem_free(q.b); -} - - -boolean -embedg_merge_queue_empty (t_merge_queue q) -{ - return q.start == q.end ? TRUE : FALSE; -} - -void -embedg_merge_queue_print (t_merge_queue q) -{ - int i; - - for (i = q.start; i < q.end; i++) - { - fprintf(stdout, "%d:%d ", q.b[i], q.b[i+1]); - ++i; - } - fprintf(stdout, "\n"); -} - -void -embedg_merge_queue_append (t_merge_queue *q, t_ver_edge *embed_graph, - int n, int v, int vin, int vv, int vvout) - /* - append the 4-tuple (v, vin, vv, vvout) - where v is a vertex and vv is its virtual counterpart - - we don't do much here, most of the work is done - when pulling a bicomp/4-tuple from the queue - */ -{ - /* - is this really necessary? - YES!!! - */ - ASSERT((*q).end < 4 * (n - 2)); - ASSERT(embedg_VES_is_vertex(n, v)); - ASSERT(embedg_VES_is_virtual_vertex(n, vv)); - ASSERT(embed_graph[vv - n].DFS_parent == v); - - (*q).b[(*q).end++] = v; - (*q).b[(*q).end++] = vin; - (*q).b[(*q).end++] = vv; - (*q).b[(*q).end++] = vvout; -} - -void -embedg_merge_queue_append_vertex (t_merge_queue *q, t_ver_edge *embed_graph, - int n, int v, int vin) - /* - same as above but were we only append the 2-tuple (v, vin), - appending the 2-tuple (vv, vvout) at a later stage - (see embedg_merge_queue_append_virtual_vertex) - */ -{ - ASSERT((*q).end < 4 * (n - 2)); - ASSERT(embedg_VES_is_vertex(n, v)); - - (*q).b[(*q).end++] = v; - (*q).b[(*q).end++] = vin; - - IF_DEB( - fprintf(stdout, "merge_queue_append_vertex, after, end is %d\n", - (*q).end); - ) -} - -void -embedg_merge_queue_append_virtual_vertex (t_merge_queue *q, - t_ver_edge *embed_graph, int n, int vv, int vvout) - /* - counterpart to embedg_merge_queue_append_vertex: - here we append the 2-tuple (vv, vvout), vv = v^c, - where the 2-tuple (v, vin) is already in the queue - (see embedg_merge_queue_append_vertex) - */ -{ - ASSERT(!embedg_merge_queue_empty(*q)); - ASSERT(embedg_VES_is_virtual_vertex(n, vv)); - ASSERT(embed_graph[vv - n].DFS_parent == (*q).b[(*q).end - 2]); - - (*q).b[(*q).end++] = vv; - (*q).b[(*q).end++] = vvout; - - IF_DEB( - fprintf(stdout, "merge_queue_append_virtual_vertex, after, end is %d\n", - (*q).end); - ) -} - -void -embedg_merge_queue_get (t_merge_queue *q, int *v, int *vin, int *vv, int *vvout) - /* - pulling out a 4-tuple from the beginning of the FIFO queue - */ -{ - ASSERT(!embedg_merge_queue_empty((*q))); - - *v = (*q).b[(*q).start++]; - *vin = (*q).b[(*q).start++]; - *vv = (*q).b[(*q).start++]; - *vvout = (*q).b[(*q).start++]; -} - -void -embedg_merge_queue_prune (t_merge_queue *q, int *v, - int *vin, int *vv, int *vvout) - /* - pulling out a 4-tuple from the end of the FIFO queue - */ -{ - ASSERT(!embedg_merge_queue_empty((*q))); - - *vvout = (*q).b[--((*q).end)]; - *vv = (*q).b[--((*q).end)]; - *vin = (*q).b[--((*q).end)]; - *v = (*q).b[--((*q).end)]; -} - -/* - * vertex_activity.c - */ - -/* - What: - ***** - - Implementing: - - Determining a vertex's activity. This takes place within - the VES structure. - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} - - - -/* aproto: header embed_graph_protos.h */ - - -#ifndef PLANAR_IN_MAGMA -#endif - - - - -boolean -embedg_VES_is_ver_pertinent (t_ver_edge *embed_graph, int n, int v, int w) - /* - is w pertinent (wrt v) - - the field adjacent_to = v: means there is a back edge [w, v] - - or w has a non empty pertinent_bicomp_list - */ -{ - boolean ans; - - ans = embed_graph[w].adjacent_to == v ? TRUE : FALSE; - - if (ans) - return TRUE; - else - return embedg_dlcl_is_empty(embed_graph[w].pertinent_bicomp_list) ? - FALSE : TRUE; -} - -boolean -embedg_VES_is_ver_ext_active (t_ver_edge *embed_graph, int n, int v, int w) - /* - is w externally active (wrt v) - this is the case when either w's least_ancestor < v - or the first member of w's separated_DFS_child_list has lowpoint < v - (the vertices in separated_DFS_child_list are ordered by lowpoint) - - why? because w's separated_DFS_child_list may be empty - (due to prior bicomp merging say) and so its children are in effect - inactive - */ -{ - boolean ans; - - ans = embed_graph[w].least_ancestor < v ? TRUE : FALSE; - - if (ans) - return TRUE; - else - { - if (embedg_dlcl_is_empty(embed_graph[w].separated_DFS_child_list)) - { - return FALSE; - } - else - { - int c; - - c = (embed_graph[w].separated_DFS_child_list)->info; - return embed_graph[c].lowpoint < v ? TRUE : FALSE; - } - } -} - - -boolean -embedg_VES_is_ver_int_active (t_ver_edge *embed_graph, int n, int v, int w) - /* - is w internally active (wrt v): - this happens when w is pertinent but NOT externally active - */ -{ - return embedg_VES_is_ver_pertinent(embed_graph, n, v, w) - && !embedg_VES_is_ver_ext_active(embed_graph, n, v, w); -} - -boolean -embedg_VES_is_ver_inactive (t_ver_edge *embed_graph, int n, int v, int w) - /* - is w inactive (wrt v), that is w nor pertinent nor externally activ - */ -{ - return !embedg_VES_is_ver_pertinent(embed_graph, n, v, w) - && !embedg_VES_is_ver_ext_active(embed_graph, n, v, w); -} - -/* - * merge_bicomps.c - */ - -/* - What: - ***** - - Implementing: - - In the VES structure, merging two bicomponents. - That is, merging the virtual vertex v^c with the - actual vertex v while merging their respective - adjacency lists. - This must be done in a very specific manner so as to able to - determine the subsequent internal/external faces. - Also, great care must be taken so that the resulting - adj. list for v is consistent (wrt to the direction - of traversal). - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_DEB_ADJL(x) {} -#define IF_VERB(x) {} - - - -/* aproto: header embed_graph_protos.h */ - - -void -embedg_VES_merge_simple_bicomps (t_ver_edge *embed_graph, int n, int vv, - int vvout, int v, int vin) - /* - merge the bicomp rooted at vv (vv a virtual vertex) with - its counterpart v so that the resulting adjacency list for v - is consistent and is the union of the adjacency lists for vv and v - - we treat the case that the bicomp may be flipped (vvout == vin) - here - */ -{ - int c, edge, twin, root_edge, cur, prev; - int vout, vvin, e1, e2, e3, e4, e1out, e3out, e4in; - - /* - find c such that [v^c, c] is the root edge of the bicomp - rooted at vv = v^c - */ - c = vv - n; - ASSERT(embed_graph[c].DFS_parent == v); - - IF_DEB( - fprintf(stdout, "merge_simple_bicomp, start: merge\n"); - embedg_VES_print_virtual_vertex(embed_graph, n, vv); - fprintf(stdout, ":%d & ", vvout); - embedg_VES_print_vertex(n, v); - fprintf(stdout, ":%d\n", vin); - ) - - IF_DEB_ADJL( - fprintf(stdout, "merge_simple_bicomp, adj. list for %d (before)\n", vv); - embedg_VES_print_adj_list(embed_graph, n, vv, - TRUE); - fprintf(stdout, "\n"); - embedg_VES_print_adj_list(embed_graph, n, vv, - FALSE); - fprintf(stdout, "\n"); - - fprintf(stdout, "merge_simple_bicomp, adj. list for %d (before)\n", v); - embedg_VES_print_adj_list(embed_graph, n, v, - TRUE); - fprintf(stdout, "\n"); - embedg_VES_print_adj_list(embed_graph, n, v, - FALSE); - ) - /* - find all edges incident to vv and (re)set all references - to incidence to vv to incidence to v - - by the same token, find the root_edge [v^c, c] - - MOREVOVER, when vin == vvout, the bicomp (rooted by v^v = vv) - will be flipped: - we must invert the links of all the edges incident - to vv so that their further union with v's adjacency list - results in a consistent adjacency list for v! - - we do everything in one go - */ - - /* - very careful here: a root edge must ALSO be a TE - (because the same edge could have been added as a SCE) - */ - - root_edge = NIL; - edge = embed_graph[vv].link[vvout]; - ASSERT(embedg_VES_is_edge(n, edge)); - if (embed_graph[edge].neighbour == c - && embedg_VES_is_tree_edge(embed_graph, n, edge)) - { - root_edge = edge; - } - - if (vin == vvout) - /* - invert the links - */ - { - int in, out; - - in = embed_graph[edge].link[0]; - out = embed_graph[edge].link[1]; - embed_graph[edge].link[0] = out; - embed_graph[edge].link[1] = in; - } - /* - get the twin and set the neighbour there to v (was vv originally) - */ - twin = embedg_VES_get_twin_edge(embed_graph, n, edge); - ASSERT(embed_graph[twin].neighbour == vv); - embed_graph[twin].neighbour = v; - - prev = vv; - cur = edge; - while (edge != vv) - { - edge = - embedg_VES_get_next_in_dlcl(embed_graph, n, - cur, prev); - - if (embedg_VES_is_edge(n, edge)) - /* - get the twin again (and invert the links if need be) - */ - { - if (embed_graph[edge].neighbour == c - && embedg_VES_is_tree_edge(embed_graph, n, edge)) - { - root_edge = edge; - } - - if (vin == vvout) - { - int in, out; - - in = embed_graph[edge].link[0]; - out = embed_graph[edge].link[1]; - embed_graph[edge].link[0] = out; - embed_graph[edge].link[1] = in; - } - - twin = - embedg_VES_get_twin_edge(embed_graph, n, edge); - ASSERT(embed_graph[twin].neighbour == vv); - embed_graph[twin].neighbour = v; - - prev = cur; - cur = edge; - } - else - { - ASSERT(edge == vv); - /* - only one vertex in the whole circular list - */ - } - } - ASSERT(root_edge != NIL); - - /* - and now union the adjacency lists of v and vv: - - let e1 be the edge record used to enter v - e2 exit v - e3 enter vv - e4 exit vv : - - e1 -> v -> e2 - e3 -> vv -> e4 - - the union of the list is done in such a way that - - e1 and e4 are consecutive in v's adjacency list: - they are now in the internal face - - e3 is now the edge record used to enter v: - it is on the external face (along with e2) : - - e1 -> e4 - e3 -> v -> e2 - - (note that this does not assume that e1 & e2 are distinct - or that e3 & e4 are distinct) - */ - /* - I must not forget the case where v is a lone vertex: - this is the case where v has no DFS ancestor, ie when - v is the root of a tree in the DFS forest - */ - - e1 = embed_graph[v].link[vin]; - vout = 1 ^ vin; - e2 = embed_graph[v].link[vout]; - - if (e1 != v) - { - ASSERT(e2 != v); - ASSERT(embedg_VES_is_edge(n, e1)); - ASSERT(embedg_VES_is_edge(n, e2)); - } - - e4 = embed_graph[vv].link[vvout]; - ASSERT(embedg_VES_is_edge(n, e4)); - - vvin = 1 ^ vvout; - e3 = embed_graph[vv].link[vvin]; - ASSERT(embedg_VES_is_edge(n, e3)); - - /* - must take care of the adjacency list's consistency of traversal - (will be important only when recovering the embedding) - */ - if (e1 == e2) - { - ASSERT(embed_graph[e1].link[0] == embed_graph[e1].link[1]); - if (vin == vvout) - /* - the bicomp will be flipped: - must take 1 ^ vvout - difficult to explain -- later... - */ - { - e1out = 1 ^ vvout; - } - else - { - e1out = vvout; - } - } - else - { - e1out = embed_graph[e1].link[0] == v ? 0 : 1; - } - if (e3 == e4) - { - ASSERT(embed_graph[e3].link[0] == embed_graph[e3].link[1]); - e3out = 1 ^ vin; - e4in = vin; - } - else - { - e4in = embed_graph[e4].link[0] == vv ? 0 : 1; - e3out = embed_graph[e3].link[0] == vv ? 0 : 1; - } - - IF_DEB( - fprintf(stdout, "merge_simple_bicomp, before union of lists, e1\n"); - embedg_VES_print_edge(embed_graph, n, e1); - fprintf(stdout, "merge_simple_bicomp, e3\n"); - embedg_VES_print_edge(embed_graph, n, e3); - fprintf(stdout, "merge_simple_bicomp, e4\n"); - embedg_VES_print_edge(embed_graph, n, e4); - ) - - /* - make e1 and e4 consecutive in the adjacency list - */ - embed_graph[e1].link[e1out] = e4; - embed_graph[e4].link[e4in] = e1; - embed_graph[e3].link[e3out] = v; - embed_graph[v].link[vin] = e3; - - IF_DEB( - fprintf(stdout, "merge_simple_bicomp, after union of lists, e1\n"); - embedg_VES_print_edge(embed_graph, n, e1); - fprintf(stdout, "merge_simple_bicomp, e3\n"); - embedg_VES_print_edge(embed_graph, n, e3); - fprintf(stdout, "merge_simple_bicomp, e4\n"); - embedg_VES_print_edge(embed_graph, n, e4); - ) - - /* - also, want to "disable" vv links, meaning then that - vv is no longer a root of a bicomp - */ - embed_graph[vv].link[0] = embed_graph[vv].link[1] = vv; - - IF_DEB_ADJL( - fprintf(stdout, "merge_simple_bicomp, adj. list for %d (after)\n", vv); - embedg_VES_print_adj_list(embed_graph, n, vv, - TRUE); - fprintf(stdout, "\n"); - embedg_VES_print_adj_list(embed_graph, n, vv, - FALSE); - fprintf(stdout, "\n"); - - fprintf(stdout, "merge_simple_bicomp, adj. list for %d (after)\n", v); - embedg_VES_print_adj_list(embed_graph, n, v, - TRUE); - fprintf(stdout, "\n"); - embedg_VES_print_adj_list(embed_graph, n, v, - FALSE); - ) - - ASSERT(embedg_VES_is_adj_list_consistent(embed_graph, n, v)); - - /* - finally, give an orientation to the (formerly) root edge [vv, c] - to keep traversal consistent (when recovering embedding) - */ - if (vin == vvout) - /* - flip: set the sign of the root edge to clockwise - - note: a bicomp is merged only once, so there is no need to - "flip" the root_edge's sign: it is set once at initialisation - and then changed here if need be. - */ - { - embed_graph[root_edge].sign = CLOCKW; - - IF_VERB( - fprintf(stdout, "merge_simple_bicomp, flip for %d, sign is now %d for %d of type %d\n", - c, embed_graph[root_edge].sign, root_edge, embed_graph[root_edge].type); - embedg_VES_print_edge(embed_graph, n, root_edge); - ) - } -} - - - -void -embedg_VES_merge_pertinent_bicomps (t_ver_edge *embed_graph, int n, - int vv, int vvout, int v, int vin) - /* - the bicomps to be merged are pertinent: on top (and before) - performing a simple merge, there are several things to do - related to the merging to pertinent bicomps - */ -{ - /* - a note of caution: - it is (very) likely that after a bicomp merge the resulting - bicomp is not biconnected (and hence traversal of the external face - of the bicomp via embedg_VES_get_succ_on_ext_face is non-sensical) - - remembering that a PERTINENT bicomp merge is ALWAYS followed - by a back edge embedding we see that the end result is then a bicomp - where again traversal of the external face - via embedg_VES_get_succ_on_ext_face will make sense - */ - t_dlcl *pertinent_list, *head, *rep_in_parent_list, *parent_list; - int c; - - /* - find c such that [v^c, c] is the root edge of the bicomp - rooted at vv = v^c - */ - c = vv - n; - ASSERT(embed_graph[c].DFS_parent == v); - - /* - two things to do first: - - remove vv from head of pertinent_bicomp_list of v - - remove c from separated_DFS_child_list of v - - one may ask the point of this since the separated_DFS_child_list - seems to mirror pertinent_bicomp_list: but this is not exactly so: - + pertinent_bicomp_list is ordered according to the activity - of the (virtual) vertices - + separated_DFS_child_list is ordered according to the vertices' - lowpoint values - in effect, it could (almost?*) be said that these two lists - are in reverse order (the *almost bit would warrant some thinking here) - */ - - /* - remove vv from head of pertinent_bicomp_list of v - */ - pertinent_list = head = embed_graph[v].pertinent_bicomp_list; - ASSERT(!embedg_dlcl_is_empty(pertinent_list)); - ASSERT(head->info == vv); - - IF_DEB( - fprintf(stdout, "merge_pertinent_bicomp, start: merge\n"); - embedg_VES_print_virtual_vertex(embed_graph, n, vv); - fprintf(stdout, ":%d & ", vvout); - embedg_VES_print_vertex(n, v); - fprintf(stdout, ":%d\n", vin); - ) - - IF_DEB( - fprintf(stdout, "merge_pertinent_bicomp, pertinent bicomp_list of %d (before)\n", v); - embedg_dlcl_print(embed_graph[v].pertinent_bicomp_list); - ) - - - embed_graph[v].pertinent_bicomp_list = - embedg_dlcl_delete_first(pertinent_list); - - IF_DEB( - fprintf(stdout, "merge_pertinent_bicomp, pertinent bicomp_list of %d (after)\n", v); - embedg_dlcl_print(embed_graph[v].pertinent_bicomp_list); - ) - - /* - vv = v^c: remove c from separated_DFS_child_list of v - */ - rep_in_parent_list = embed_graph[c].rep_in_parent_list; - ASSERT(!embedg_dlcl_is_empty(rep_in_parent_list)); - - parent_list = embed_graph[v].separated_DFS_child_list; - ASSERT(!embedg_dlcl_is_empty(parent_list)); - embed_graph[v].separated_DFS_child_list = - embedg_dlcl_delete_rec(parent_list, rep_in_parent_list); - - /* - that's it, it remains to merge, ie. union the adjacency list, - and flipping the bicomp if necessary - */ - embedg_VES_merge_simple_bicomps(embed_graph, n, - vv, vvout, v, vin); -} - - - - - - -/* - * embed_edge.c - */ - -/* - What: - ***** - - Implementing: - - Embedding an edge so that it lies on the external face of a bicomp. - We work here with the VES structure. - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_DEB_EMBED(x) {} -#define IF_VERB(x) {} - - -/* aproto: header embed_graph_protos.h */ - - -void -embedg_VES_embed_edge (t_ver_edge *embed_graph, int n, int *edge_pos, - int edge_type, int vv, int vvout, int w, int win) - /* - embed the edge (vv, w) (vv a virtual vertex, w a vertex) between - vv and the edge vvout - and the edge win and w - - so that after the embedding, one exits vv via (vv, w) and - enters w via the twin (w, vv) - */ -{ - int temp, tempin, tempout; - - ASSERT(edge_type == BE || edge_type == SCE); - ASSERT(embedg_VES_is_virtual_vertex(n, vv)); - ASSERT(embedg_VES_is_vertex(n, w)); - - IF_DEB( - fprintf(stdout, "embed_edge, (%d:%d)\n", vv, w); - ) - - /* - first, set the edge [vv, w] with the appropriate info - - when [vv, w] is a back edge there is some more work to do - (see the walkup procedure for the extra information we need - to copy here - */ - (*edge_pos)++; - ASSERT(*edge_pos < 2*n + 2 * MAXE(n)); - embed_graph[*edge_pos].neighbour = w; - embed_graph[*edge_pos].type = edge_type; - embed_graph[*edge_pos].sign = CCLOCKW; - if (edge_type == BE) - { - ASSERT(embed_graph[w].adjacent_to == - embed_graph[vv - n].DFS_parent); - - /* - PLUS: originally when the back edge [w, vv] was - created (in the dfs preprocessing stage), it carried in - .in_adjl the index of this directed edge in the - adjacency list - - but now, note that we are actually inserting the - directed edge [vv, w] in vv's adjacency list, - meaning that in_adjl and twin_in_adjl - must be exchanged! - */ - embed_graph[*edge_pos].in_adjl = embed_graph[w].twin_in_adjl; - embed_graph[*edge_pos].twin_in_adjl = embed_graph[w].in_adjl; - - ASSERT(embed_graph[w].mult % 2 == 0); - /* - the original graph is always undirected: - we store its number of undirected edges - */ - embed_graph[*edge_pos].mult = embed_graph[w].mult / 2; - } - - /* - insert this edge between vertex record for vv - and edge record vv.link[vvout] - */ - temp = embed_graph[vv].link[vvout]; - - if (embed_graph[temp].link[0] == embed_graph[temp].link[1]) - /* - this needs special treatment to ensure consistency of - orientation - */ - { - ASSERT(embed_graph[temp].link[0] == vv); - tempin = 1 ^ vvout; - } - else - { - tempin = embed_graph[temp].link[0] == vv ? 0 : 1; - } - - IF_DEB( - fprintf(stdout, "embed_edge, edge out of vv\n"); - embedg_VES_print_edge(embed_graph, n, temp); - ) - - embed_graph[vv].link[vvout] = *edge_pos; - embed_graph[temp].link[tempin] = *edge_pos; - /* - the links for *edge_pos must also be "consistent" - */ - embed_graph[*edge_pos].link[vvout] = temp; - embed_graph[*edge_pos].link[vvout ^ 1] = vv; - - /* - now create/set the twin edge, the directed edge [w, vv] - */ - (*edge_pos)++; - ASSERT(*edge_pos < 2*n + 2 * MAXE(n)); - embed_graph[*edge_pos].neighbour = vv; - embed_graph[*edge_pos].type = edge_type; - embed_graph[*edge_pos].sign = CCLOCKW; - if (edge_type == BE) - { - embed_graph[*edge_pos].in_adjl = embed_graph[w].in_adjl; - embed_graph[*edge_pos].twin_in_adjl = embed_graph[w].twin_in_adjl; - embed_graph[*edge_pos].mult = embed_graph[w].mult / 2; - } - - /* - and insert the twin edge between edge record w.link[win] - and vertex record for w - */ - temp = embed_graph[w].link[win]; - - if (embed_graph[temp].link[0] == embed_graph[temp].link[1]) - /* - again, special treatment to ensure consistency of orientation - */ - { - ASSERT(embed_graph[temp].link[0] == w); - tempout = 1 ^ win; - } - else - { - tempout = embed_graph[temp].link[0] == w ? 0 : 1; - } - - IF_DEB( - fprintf(stdout, "embed_edge, edge in of w\n"); - embedg_VES_print_edge(embed_graph, n, temp); - ) - - embed_graph[w].link[win] = *edge_pos; - embed_graph[temp].link[tempout] = *edge_pos; - /* - and consistent orientation - */ - embed_graph[*edge_pos].link[win] = temp; - embed_graph[*edge_pos].link[win ^ 1] = w; -} - - - -void -embedg_VES_add_edge (t_ver_edge *embed_graph, int n, int *edge_pos, - int v, int w, boolean MARK, int mark) - /* - add the edge (v, w): this is DIFFERENT from - embedg_VES_embed_edge in the sense - that the present function will only be used - when building the Kuratowski homeomorphs: - - that is, we are in a situation where the graph is NON planar - - consequently it doesn't matter much where in the adjacency - lists of v & w the edge is added: - let's say that we always add it at the beginning - - for our sanity's sake, we'll ensure that the resulting - adjacency lists remain consistent! - - and we add the edge as a BE! - PLUS we mark it with mark in MARK true - */ -{ - int temp; - - ASSERT(embedg_VES_is_vertex(n, v) || - embedg_VES_is_virtual_vertex(n, v)); - ASSERT(embedg_VES_is_vertex(n, w) || - embedg_VES_is_virtual_vertex(n, w)); - - IF_DEB( - fprintf(stdout, "add_edge, (%d:%d)\n", v, w); - ) - - /* - not sure this is the best place to do this: mark the endpoints - */ - if (MARK) - { - embed_graph[v].visited = mark; - embed_graph[w].visited = mark; - } - - /* - first, set the edge [v, w] with the appropriate info - */ - (*edge_pos)++; - ASSERT(*edge_pos < 2*n + 2 * MAXE(n)); - embed_graph[*edge_pos].neighbour = w; - embed_graph[*edge_pos].type = BE; - /* - the edge's orientation will be the same as the vertex - */ - embed_graph[*edge_pos].sign = embed_graph[v].sign; - /* - and mark the edge - */ - if (MARK) - { - embed_graph[*edge_pos].visited = mark; - } - - /* - insert this edge between vertex record for v - and edge record v.link[1] - */ - temp = embed_graph[v].link[1]; - - IF_DEB( - fprintf(stdout, "add_edge, edge out of v\n"); - embedg_VES_print_edge(embed_graph, n, temp); - ) - - embed_graph[v].link[1] = *edge_pos; - embed_graph[temp].link[0] = *edge_pos; - /* - the links for *edge_pos must also be "consistent" - */ - embed_graph[*edge_pos].link[1] = temp; - embed_graph[*edge_pos].link[0] = v; - - /* - now create/set the twin edge, the directed edge [w, v] - */ - (*edge_pos)++; - ASSERT(*edge_pos < 2*n + 2 * MAXE(n)); - embed_graph[*edge_pos].neighbour = v; - embed_graph[*edge_pos].type = BE; - embed_graph[*edge_pos].sign = embed_graph[w].sign; - if (MARK) - { - embed_graph[*edge_pos].visited = mark; - } - - /* - insert this edge between vertex record for w - and edge record w.link[1] - */ - temp = embed_graph[w].link[1]; - - IF_DEB( - fprintf(stdout, "add_edge, edge out of w\n"); - embedg_VES_print_edge(embed_graph, n, temp); - ) - - embed_graph[w].link[1] = *edge_pos; - embed_graph[temp].link[0] = *edge_pos; - /* - and consistent orientation - */ - embed_graph[*edge_pos].link[1] = temp; - embed_graph[*edge_pos].link[0] = w; -} - - -/* - * recover.c - */ - -/* - What: - ***** - - Implementing: - - From the VES data structure recover either the embedding ot - the obstruction into the - - t_sparseg_ver_struct, - t_sparseg_adjl_struct, - t_sparseg_embed_struct - - data types. - - - (This is no even quite true: for some obscure reason - I recover the obstruction as a dlcl[] structure to be - converted later. - The obvious reason being that it is easier to check as such. - Maybe I leave it as it is...) - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_DEB_EMBED_MULT(x) {} -#define IF_DEB_EMBED_LOOPS(x) {} -#define IF_DEB_EMBED(x) {} -#define IF_DEB_CHECK_EMBED(x) {} -#define IF_DEB_FACES(x) {} -#define IF_VERB(x) {} -#define IF_DEB_SCE(x) {} -#define IF_DEB_OBS(x) {} -#define IF_DEB_CHECK_OBS(x) {} -#define IF_CPU(x) {} - - - -/* aproto: header embed_graph_protos.h */ - -/* aproto: beginstatic -- don't touch this!! */ -static void embedg_recover_embedding_embed_mult - (t_dlcl **, t_embed_sparse_rep *, int, int, int, int, int *, boolean *, int *); -static void embedg_recover_embedding_embed_loops - (t_dlcl **, t_embed_sparse_rep *, int, int, int *, boolean *); -static t_dlcl **embedg_get_reduced_obs (t_dlcl **, int); -static boolean embedg_is_red_obs_K33 (t_dlcl **, int); -static boolean embedg_is_red_obs_K5 (t_dlcl **, int); -/* aproto: endstatic -- don't touch this!! */ - - -#ifndef PLANAR_IN_MAGMA -#endif - -void -embedg_recover_embedding ( - t_ver_sparse_rep *V, - t_adjl_sparse_rep *A, /* input (original sparse graph) */ - t_ver_edge *embed_graph, - int n, - int nbr_e, - t_dlcl **mult_edges, - t_ver_sparse_rep **vertices, - t_embed_sparse_rep **embedding -) - /* - recover the embedding - to prepare for the final Magma type for sparse & embedded graph - - we assume that all vertices/edges have been given their - orientation - - at this stage we also embed the multiple edges and loops - which were set aside in mult_edges by - sparseg_adjl_dfs_preprocessing: - - as it turns out the last bit is pretty hairy! - */ -{ - /* - the idea is to return an array of vertices and an array - representing the embedding - (careful: need to weedout the SCE) - - vertices: (*vertices)[i].first_edge contains index - to first edge in embedding - - embedding: a doubly linked circular list of edges, - for each record/edge e = (*embedding)[i]: - e.in_adjl: index in A of e - e.next: next edge in CLOCKW - (as an index in the embedding) - e.prev: previous edge in CLOCKW - (as an index in embedding) - e.inv: inverse edge (as an index in embedding) - e.mark: a mark for this edge - - let's say that this new array is a slimmed down version of embed_graph - - one issue to address: - - for edge e, find its index in A: this should be found - in either the embed_graph[v] record of the mult_edges[v] record - */ - int index_embed, v, mult, w, v_w_in_embed, new_first_edge; - boolean set_next; - - IF_DEB( - fprintf(stdout, "in recover emb.\n"); - sparseg_dlcl_print(mult_edges, n); - ); - - *vertices = (t_ver_sparse_rep *) - mem_malloc(sizeof(t_ver_sparse_rep) * n); - *embedding = (t_embed_sparse_rep *) - mem_malloc(sizeof(t_embed_sparse_rep) * 2 * nbr_e); - - index_embed = 0; - set_next = TRUE; - for (v = 0; v < n; v++) - { - int v_l, orient, in, out, e, cur_e, next_e; - - /* - we take v's label - */ - v_l = embed_graph[v].label; - - /* - first let's deal with the isolated vertex case: those - that refer to self - */ - if (embed_graph[v].link[0] == v) - { - int temp_index_embed; - - ASSERT(embed_graph[v].link[1] == v); - - /* - there may be [v, v] loops for this vertex, must check this - */ - temp_index_embed = index_embed - 1; - /* - temp_index_embed is pre-increased below - */ - embedg_recover_embedding_embed_loops(mult_edges, *embedding, - nbr_e, v, - &temp_index_embed, - &set_next); - - if (temp_index_embed > index_embed - 1) - /* - must fix beginning and end of adjacency list: - */ - { - (*vertices)[v_l].first_edge = index_embed; - (*embedding)[temp_index_embed].next = - (*vertices)[v_l].first_edge; - (*embedding)[(*vertices)[v_l].first_edge].prev = - temp_index_embed; - - index_embed = temp_index_embed; - index_embed += 1; - } - else - { - (*vertices)[v_l].first_edge = NIL; - } - continue; - } - - /* - get v's orientation, and from this decide the way in which - v's adjacency list will be traversed - (recall that the list is supposed to be consistent, so no bad - surprises) - */ - orient = embed_graph[v].sign; - in = orient == CCLOCKW ? 0 : 1; - out = 1 ^ in; - - e = embed_graph[v].link[out]; - while (embedg_VES_is_short_cut_edge(embed_graph, n, e)) - { - e = embed_graph[e].link[out]; - } - ASSERT(embedg_VES_is_edge(n, e) - && !embedg_VES_is_short_cut_edge(embed_graph, n, e)); - /* - strictly speaking there should be no SCEs left at this stage... - - if there are SCEs in v's list, it must be the case that - the list also contains tree or back edges... - */ - - (*vertices)[v_l].first_edge = index_embed; - - IF_DEB_EMBED( - fprintf(stdout, "recov. embed. DFI %d vertex %d at %d (edges) and %d (embedding)\n", - v, v_l, index_e, (*vertices)[v_l].first_edge); - ) - - cur_e = e; - while (TRUE) - { - next_e = embed_graph[cur_e].link[out]; - while (embedg_VES_is_short_cut_edge(embed_graph, n, next_e)) - { - next_e = embed_graph[next_e].link[out]; - } - ASSERT(!embedg_VES_is_short_cut_edge(embed_graph, n, next_e)); - - if (next_e == v) - /* - end of adjacency list - */ - { - break; - } - - ASSERT(embedg_VES_is_edge(n, next_e)); - - (*embedding)[index_embed].in_adjl = embed_graph[cur_e].in_adjl; - (*embedding)[index_embed].next = index_embed + 1; /* next in adj. - list */ - (*embedding)[index_embed].mark = NIL; /* mark */ - - /* - cur_e's twin is trickier: - we'll use twin's label field to store cur_e's index in - the embedding - - if cur_e's label != NIL this means that cur_e's twin - is already stored in edges/embedding and consequently - that cur_e.label = index of its twin (in the embedding) - - note that it is safe to do so since an edge's label - has no meaning - */ - if (embed_graph[cur_e].label != NIL) - { - (*embedding)[index_embed].inv = embed_graph[cur_e].label; - - /* - but fix the twin by the same token - */ - (*embedding)[embed_graph[cur_e].label].inv = index_embed; - ASSERT((*embedding)[embed_graph[cur_e].label].in_adjl == - embed_graph[cur_e].twin_in_adjl); - } - else - /* - we store cur_e's index in the embedding in twin's label - */ - { - int twin; - - twin = embedg_VES_get_twin_edge(embed_graph, n, cur_e); - embed_graph[twin].label = index_embed; - } - - /* - so the only thing we couldn't update yet is - (*embedding)[index_embed].prev, cur_e previous edge in the list - - but we can do this for next_e - */ - (*embedding)[index_embed + 1].prev = index_embed; - - /* - we check if there are any multiple edges or loops - to embed - */ - w = embed_graph[cur_e].neighbour; - mult = embed_graph[cur_e].mult - 1; - /* - one was for the TE or BE edge - */ - - if (index_embed == (*vertices)[v_l].first_edge) - /* - when looking for multiple edges/loops - we must temporarily "close" this ordered - list of vertices when in presence of the first - edge in the list: - - not doing this would mean that - (*embedding)[(*vertices)[v_l].first_edge].prev - contains some irrelevant value which may cause - (major) trouble when embedding inverses of - multiple edges... - */ - { - (*embedding)[(*vertices)[v_l].first_edge].prev = index_embed; - } - - embedg_recover_embedding_embed_mult(mult_edges, *embedding, - nbr_e, v, w, mult, - &index_embed, &set_next, - &new_first_edge); - embedg_recover_embedding_embed_loops(mult_edges, *embedding, - nbr_e, v, &index_embed, - &set_next); - set_next = TRUE; - - /* - yes, it may be the case that (*vertices)[v_l].first_edge - change while in embedg_recover_embedding_embed_mult - -- see that function for more - */ - (*vertices)[v_l].first_edge = new_first_edge == NIL ? - (*vertices)[v_l].first_edge : new_first_edge; - - /* - that's all, we proceed to read a new edge in the list - */ - index_embed += 1; - cur_e = next_e; - } - - /* - now next_e = v so that cur_e is the last edge in v's adjacency list - we must deal with this case separately - */ - - /* - fix cur_e in embedding (and its twin) - */ - (*embedding)[index_embed].in_adjl = embed_graph[cur_e].in_adjl; - - /* - we temporarily set next of cur_e in to index_embed + 1 - */ - (*embedding)[index_embed].next = index_embed + 1; - (*embedding)[index_embed].mark = NIL; /* mark */ - - /* - fix cur_e's twin - */ - if (embed_graph[cur_e].label != NIL) - { - (*embedding)[index_embed].inv = embed_graph[cur_e].label; - (*embedding)[embed_graph[cur_e].label].inv = index_embed; - ASSERT((*embedding)[embed_graph[cur_e].label].in_adjl == - embed_graph[cur_e].twin_in_adjl); - } - else - { - int twin; - - twin = embedg_VES_get_twin_edge(embed_graph, n, cur_e); - embed_graph[twin].label = index_embed; - } - - /* - we temporarily set the next record's prev field: - but we can do that only if we haven't processed - all the edges yet - */ - if (index_embed < 2 * nbr_e - 1) - { - (*embedding)[index_embed + 1].prev = index_embed; - - /* - again, check if there are any multiple edges/loops - to embed - */ - w = embed_graph[cur_e].neighbour; - mult = embed_graph[cur_e].mult - 1; - /* - one was for the TE or BE edge - */ - v_w_in_embed = index_embed; - - if (index_embed == (*vertices)[v_l].first_edge) - /* - same comment as above - */ - { - (*embedding)[(*vertices)[v_l].first_edge].prev = index_embed; - } - - embedg_recover_embedding_embed_mult(mult_edges, *embedding, - nbr_e, v, w, mult, - &index_embed, &set_next, - &new_first_edge); - embedg_recover_embedding_embed_loops(mult_edges, *embedding, - nbr_e, v, &index_embed, - &set_next); - - /* - same comment as above - */ - (*vertices)[v_l].first_edge = new_first_edge == NIL ? - (*vertices)[v_l].first_edge : new_first_edge; - } - - /* - to finish off, we must set: - - cur_e's next field: - next of cur_e in the list is ... vertices[v_l].first_edge - - cur_e's next's previous field... - */ - if (set_next) - /* - set_next (poorly named) is used to indicate which - edges must be updated to "close off" the list: - - if set_next is TRUE, we are in the standard case - where the last edge in the ordered adj. list - is at index_embed - - if set_next is FALSE, the last edge in the ordered adj. list - is at v_w_in_embed: because it could have happened - (in embedg_recover_embedding_embed_mult only) - that the edges have been "wedged" between - v_w_in_embed.prev and v_w_in_embed, - leaving v_w_in_embed the last in the list - */ - { - (*embedding)[index_embed].next = (*vertices)[v_l].first_edge; - (*embedding)[(*vertices)[v_l].first_edge].prev = index_embed; - } - else - { - (*embedding)[v_w_in_embed].next = (*vertices)[v_l].first_edge; - (*embedding)[(*vertices)[v_l].first_edge].prev = v_w_in_embed; - } - set_next = TRUE; - - /* - a simple check - */ - ASSERT(embedg_dlcl_is_empty(mult_edges[v])); - - /* - we can process another vertex - */ - index_embed += 1; - } - /* - when this is done there are a few things that must hold - */ - ASSERT(index_embed == 2 * nbr_e); -} - - -static void -embedg_recover_embedding_embed_mult (t_dlcl **mult_edges, - t_embed_sparse_rep *embedding, int nbr_e, int v, int w, - int mult, int *index_embed, boolean *set_next, int *first_edge) - /* - see if the directed edge [v, w] is multiple: if so embed it - in embedding - - moreover if there are any [v, v] loops do that too - */ -{ - /* - we take care of multiple edges: for tree edges and back - edges their multiplicity is indicated by the - embed_graph[cur_e].mult field (which records the number - of undirected edges) - - for loops hovewer this information is stored in the mult - field of the FIRST encountered neighbour v in v's neighbour - list - */ - t_dlcl *p; - int v_w_in_embed, v_w_prev; - boolean do_twins, start, do_first_edge; - - IF_DEB_EMBED_MULT( - fprintf(stdout, "in recover emb. mult, v %d w %d mult %d\n", - v, w, mult); - ) - - /* - the current index_embed value is the edge [v, w]: - I must record this value as it will be needed - later - */ - v_w_in_embed = *index_embed; - start = TRUE; - *set_next = TRUE; - do_twins = FALSE; - *first_edge = NIL; - do_first_edge = FALSE; - v_w_prev = NIL; - while (mult > 0) - { - ASSERT(!embedg_dlcl_is_empty(mult_edges[v])); - p = embedg_dlcl_find(mult_edges[v], w); - /* - note that using embedg_dlcl_find to always find - the first in the list with p->info == w - is ok here since any previous such records would - have been deleted/removed from the list - */ - ASSERT(p != NP); - /* - otherwise we couldn't have mult > 0 ! - */ - - *index_embed += 1; - - /* - once again I must use a similar sort of trick as in the - main function to deal with the inverse edge: - - the inverse edge is to be found in mult_edges[w]: - if p->twin_in_adjl (which was initialised to NIL - and has NOT been set in the DFS preprocessing), - if p->twin_in_adjl != NIL, then - a. its inverse in mult_edges[w] has already been embedded - in *embedding - b. its index there is stored in p->twin_in_adjl - precisely - */ - if (p->twin_in_adjl != NIL) - { - if (! start) - /* - if the first the multiple edges' inverse is already - stored, then this is true for ALL of them - */ - { - ASSERT(do_twins == TRUE); - } - do_twins = TRUE; - } - else - /* - similarly, if the first the multiple edges' inverse is - not already stored, then this is true for ALL of them - */ - { - ASSERT(do_twins == FALSE); - } - - embedding[*index_embed].in_adjl = p->in_adjl; - embedding[*index_embed].mark = NIL; - - /* - as we will see do_twins has to be treated differently - */ - if (!do_twins) - /* - this is pretty standard as works as the - main recover function - */ - { - t_dlcl *i_m_l, *i_p; - - embedding[*index_embed].next = *index_embed + 1; - - /* - we store the current index in the embedding in - the twin/inverse's twin_in_adjl field - */ - i_p = i_m_l = mult_edges[w]; - ASSERT(!embedg_dlcl_is_empty(i_m_l)); - i_p = embedg_dlcl_find_with_NIL_twin_in_adjl(i_m_l, v); - ASSERT(i_p != NP); - ASSERT(i_p->twin_in_adjl == NIL); - - i_p->twin_in_adjl = *index_embed; - - /* - to finish off this bit we set embedding[*index_embed + 1].prev - - but I can only set this prev field if I haven't reached - the end of the embedding[] array: this is why we needed - nbr_e (total number of edges to embed) as input - */ - - if (*index_embed < 2 * nbr_e - 1) - { - embedding[*index_embed + 1].prev = *index_embed; - } - } - else - /* - how to insert the inverses of multiple edges already - in the embedding: - - if one studies how the twin_in_adjl field has been - set while dealing with the inverses of the - present multiple edges one sees that - the latter must be inserted in counter clockwise - order (assuming that the inverses were inserted - in clockwise order) - - this is necessariy to ensure a correct matching between - the edge and its inverse - */ - { - - embedding[*index_embed].inv = p->twin_in_adjl; - - /* - fix the twin by the same token - */ - embedding[p->twin_in_adjl].inv = *index_embed; - - /* - general (reverse) insertion for these edges - */ - embedding[*index_embed].prev = *index_embed + 1; - embedding[*index_embed].next = *index_embed - 1; - - /* - ok, that was the easy bit, things are a bit more complicated - below... - */ - if (start) - /* - the edges are "wedged" between - embedding[v_w_in_embed].prev and v_w_in_embed, - - hence the following - */ - { - v_w_prev = embedding[v_w_in_embed].prev; - if (v_w_prev == v_w_in_embed) - /* - in this case the first edge in the adj. list - of the vertex whose first_edges is v_w_in_embed - will be changed - (because we insert in reverse order) - */ - { - do_first_edge = TRUE; - } - - embedding[*index_embed].next = v_w_in_embed; - embedding[v_w_in_embed].prev = *index_embed; - - ASSERT(embedding[embedding[*index_embed].inv].prev == - embedding[v_w_in_embed].inv); - ASSERT(embedding[embedding[v_w_in_embed].inv].next == - embedding[*index_embed].inv); - } - - if (mult == 1) - /* - last inv. edge in this list to add - */ - { - ASSERT(v_w_prev != NIL); - - /* - must fix embedding[v_w_prev].next appropriately - (and embedding[*index_embed].prev) - - this may be overwritten later on, but not necessarily so - - the next_set flag will enable us to decide - which edge ends this adjacency list: see above - */ - - embedding[*index_embed].prev = v_w_prev; - embedding[v_w_prev].next = *index_embed; - *set_next = FALSE; - - ASSERT(embedding[embedding[*index_embed].inv].prev == - embedding[*index_embed - 1].inv); - ASSERT(embedding[embedding[*index_embed - 1].inv].next == - embedding[*index_embed].inv); - - if (do_first_edge) - /* - the first edge is the last one added - */ - { - *first_edge = *index_embed; - } - - embedding[v_w_in_embed].next = *index_embed + 1; - if (*index_embed < 2 * nbr_e - 1) - { - embedding[*index_embed + 1].prev = v_w_in_embed; - } - } - - ASSERT(embedding[embedding[*index_embed].inv].prev == - embedding[embedding[*index_embed].next].inv); - } - - /* - to finish off this bit we delete the p record from m_l - and set embedding[*index_embed + 1].prev - */ - mult_edges[v] = embedg_dlcl_delete_rec(mult_edges[v], p); - - mult--; - start = FALSE; - } - /* - conclusion: sevral days to get this working! *sigh* - */ -} - - - - -static void -embedg_recover_embedding_embed_loops (t_dlcl **mult_edges, - t_embed_sparse_rep *embedding, int nbr_e, int v, - int *index_embed, boolean *set_next) - /* - embed the [v, v] loops - */ -{ - /* - the loops' multiplicity is stored in the mult - field of the FIRST encountered neighbour v in v's neighbour - list - */ - t_dlcl *p; - int nbr_loops; - - /* - have a look if there are any [v. v] loops - */ - p = embedg_dlcl_find(mult_edges[v], v); - if (p == NP) - { - return; - } - - /* - when there are loops to add to the adjaceny list, - edge insertion resume in the "normal" clockwaise saya, way: - so we reset set_next to true - */ - *set_next = TRUE; - - nbr_loops = p->mult; - ASSERT(nbr_loops % 2 == 0); - /* - we counted directed edges - */ - nbr_loops /= 2; - - IF_DEB_EMBED_LOOPS( - fprintf(stdout, "in recover emb. loops, nbr_loops [v, v] %d\n", - nbr_loops); - ) - - while (nbr_loops > 0) - /* - a loop requires to embed two directed edges - */ - { - p = embedg_dlcl_find(mult_edges[v], v); - ASSERT(p != NP); - - *index_embed += 1; - - embedding[*index_embed].in_adjl = p->in_adjl; - embedding[*index_embed].next = *index_embed + 1; - embedding[*index_embed].mark = NIL; - embedding[*index_embed].inv = *index_embed + 1; - embedding[*index_embed + 1].prev = *index_embed; - - mult_edges[v] = embedg_dlcl_delete_rec(mult_edges[v], p); - - IF_DEB_EMBED_LOOPS( - fprintf(stdout, "in recover emb. loops, mid\n"); - embedg_dlcl_print(mult_edges[v]); - ); - - /* - now do the "inverse" loop - */ - p = embedg_dlcl_find(mult_edges[v], v); - ASSERT(p != NP); - - *index_embed += 1; - - embedding[*index_embed].in_adjl = p->in_adjl; - embedding[*index_embed].next = *index_embed + 1; - embedding[*index_embed].mark = NIL; - embedding[*index_embed].inv = *index_embed - 1; - - if (*index_embed < 2 * nbr_e - 1) - { - embedding[*index_embed + 1].prev = *index_embed; - } - mult_edges[v] = embedg_dlcl_delete_rec(mult_edges[v], p); - - nbr_loops--; - - IF_DEB_EMBED_LOOPS( - fprintf(stdout, "in recover emb. loops, end\n"); - embedg_dlcl_print(mult_edges[v]); - ); - } -} - - - - -void -embedg_recov_embed_walk_proper_face (int n, int e, t_adjl_sparse_rep *A, - t_embed_sparse_rep *embedding, boolean MARK, int mark) - /* - do a proper face walk in the recovered embedding starting - at index e in the embedding - */ -{ - int cur, next; - - IF_DEB_FACES( - fprintf(stdout, "recov. emb. proper face walk\n"); - fprintf(stdout, "[-, %d] ", - A[embedding[e].in_adjl].end_vertex); - ) - - cur = e; - next = NIL; - while (next != e) - /* - to get the next in a proper face traversal: - get the previous of the cur's inverse - */ - { - int inv; - - inv = embedding[cur].inv; - next = embedding[inv].prev; - - ASSERT(embedding[next].mark != mark); - - if (MARK) - { - embedding[next].mark = mark; - } - - cur = next; - IF_DEB_FACES( - fprintf(stdout, "[-, %d] ", - A[embedding[cur].in_adjl].end_vertex); - ) - } - IF_DEB_FACES( - fprintf(stdout, "\n"); - ) -} - - - -boolean -embedg_check_recov_embedding (int n, int nbr_e, int nbr_comp, - t_ver_sparse_rep *vertices, t_adjl_sparse_rep *A, - t_embed_sparse_rep *embedding) - /* - check if the recovered embedding is a valid embedding - SHOULD ONLY be use after creation, that is, after having - recovered the embedding from the VES structure - (because of the mark MIN_EMBED_MARK we use) - */ -{ - int v, e, f; - - f = 0; - /* - do all the edges in embedding: - careful: we have 2 * nbr_e to visit (the edge and its inverse!) - */ - for (e = 0; e < 2 * nbr_e; e++) - { - /* - we check if the current edge is marked: if not, we - traverse a proper face bordered by this edge - */ - if (embedding[e].mark != MIN_EMBED_MARK) - /* - we --hopefully-- perform this check only after creation - where mark == NIL - */ - { - embedg_recov_embed_walk_proper_face(n, e, A, embedding, - TRUE, MIN_EMBED_MARK); - f++; - } - } - - /* - must also count a face for each isolated vertex - */ - for (v = 0; v < n; v++) - { - if (vertices[v].first_edge == NIL) - f++; - } - - IF_DEB_CHECK_EMBED( - fprintf(stdout, "recovered embedding, n: %d\t e: %d\t C: %d\t f: %d\n", - n, nbr_e, nbr_comp, f); - ) - - return f == 2 * nbr_comp + nbr_e - n ? TRUE : FALSE; -} - - -t_dlcl ** -embedg_recover_obstruction (t_ver_edge *embed_graph, int n, minor m, int *nbr_e) - /* - recover the obstruction as a t_dlcl * structure: - and return the number of edges: lets say we agree on returning - the number of undirected edges - -- I don't know yet which way to do, directed or undirected??? - - so far in the algorithm we only dealt with DFIs, - but now, we retrieve the obstruction not wrt DFIs but - wrt the vertices' labels - */ -{ - /* - so I am looking, in embed_graph, for the vertices and edges - marked MARK_MINORS(n) - */ - - int v; - t_dlcl **obs; - - obs = (t_dlcl **) mem_malloc(sizeof(t_dlcl *) * n); - for (v = 0; v < n; v++) - obs[v] = NP; - - *nbr_e = 0; - for (v = 0; v < 2*n; v++) - /* - must check real vertices as well as virtual vertices - */ - { - int e; - - if (embed_graph[v].link[0] == v) - /* - isolated vertex case - */ - { - ASSERT(embed_graph[v].link[1] == v); - continue; - } - - e = embed_graph[v].link[0]; - while (e != v) - { - ASSERT(embedg_VES_is_edge(n, e)); - if (embed_graph[e].visited == MARK_MINORS(n)) - { - int cur_v, neigh; - - /* - virtual vertices may still hang around - */ - /* - let's get the "actual" v: - note that the statement below is safe since if v were - not a valid virtual vertex (ie [v - n].DFS_parent = n) - it would have an empty - adjacency list and we wouldn't be there anyway - */ - cur_v = embedg_VES_get_ver(embed_graph, n, v); - - neigh = embedg_VES_get_ver(embed_graph, n, - embed_graph[e].neighbour); - - /* - again, cur_v and neigh are DFIs, - we want vertex labels at this stage - */ - cur_v = embed_graph[cur_v].label; - neigh = embed_graph[neigh].label; - sparseg_dlcl_append_to_neigh_list(obs, n, cur_v, neigh, - embed_graph[e].in_adjl); - (*nbr_e)++; - } - e = embed_graph[e].link[0]; - } - } - - IF_DEB_OBS( - fprintf(stdout, "recovering the obstruction\n"); - sparseg_dlcl_print(obs, n); - ); - - ASSERT(*nbr_e % 2 == 0); - *nbr_e /= 2; - - return obs; -} - - -static t_dlcl ** -embedg_get_reduced_obs (t_dlcl **obs, int n) - /* - reduce the obstruction by removing all degree 2 vertices - (so that they become isolated vertices) - */ -{ - t_dlcl **reduced; - int v; - - reduced = (t_dlcl **) mem_malloc(sizeof(t_dlcl *) * n); - for (v = 0; v < n; v++) - { - reduced[v] = embedg_dlcl_copy(obs[v]); - } - - for (v = 0; v < n; v++) - { - t_dlcl *n_l, *n_l_b, *p, *new_n_v, *n_l_x, *b_in_n_x; - int a, b, n_x; - - n_l = reduced[v]; - while (!embedg_dlcl_is_empty(n_l) - && embedg_dlcl_list_last(n_l) == embedg_dlcl_list_next(n_l)) - /* - pick out which vertices have deg 2 - */ - { - a = n_l->info; - b = embedg_dlcl_list_next(n_l)->info; - /* - we remove the edge (v, b), or rather, we identify v and b: - b will then be an isolated vertex - - fix v's neighbour list: all of b's neighbours - are now v's neighbours - */ - reduced[v] = n_l = - embedg_dlcl_delete_rec(n_l, embedg_dlcl_list_last(n_l)); - - p = n_l_b = reduced[b]; - ASSERT(!embedg_dlcl_is_empty(n_l_b)); - n_x = p->info; - if (n_x != v) - { - new_n_v = embedg_dlcl_rec_new(n_x); - reduced[v] = n_l = embedg_dlcl_cat(n_l, new_n_v); - - /* - and in n_x neighbour list, we must replace b by v - */ - n_l_x = reduced[n_x]; - b_in_n_x = embedg_dlcl_find(n_l_x, b); - b_in_n_x->info = v; - } - /* - and do this for all of b's neighbours - */ - p = embedg_dlcl_list_next(p); - while (p != n_l_b) - { - n_x = p->info; - if (n_x != v) - { - new_n_v = embedg_dlcl_rec_new(n_x); - reduced[v] = n_l = embedg_dlcl_cat(n_l, new_n_v); - n_l_x = reduced[n_x]; - b_in_n_x = embedg_dlcl_find(n_l_x, b); - b_in_n_x->info = v; - } - p = embedg_dlcl_list_next(p); - } - embedg_dlcl_delete(reduced[b]); - reduced[b] = NP; - } - } - - IF_DEB_CHECK_OBS( - fprintf(stdout, "reducing the obstruction\n"); - sparseg_dlcl_print(reduced, n); - ) - - /* - now check no degree 2 vertices are left - */ - for (v = 0; v < n; v++) - { - t_dlcl *n_l; - - n_l = reduced[v]; - if (!embedg_dlcl_is_empty(n_l)) - { - ASSERT(embedg_dlcl_list_last(n_l) != embedg_dlcl_list_next(n_l)); - } - } - - return reduced; -} - -static boolean -embedg_is_red_obs_K33 (t_dlcl **reduced, int n) - /* - check if the (reduced) obstruction is indeed K33 - */ -{ - int v, order, vs[6], i, b1[3]; - - /* - check that order == 6 and that the obstruction is cubic - */ - order = 0; - for (v = 0; v < n; v++) - { - if (!embedg_dlcl_is_empty(reduced[v])) - { - if (order == 6) - { - return FALSE; - } - order++; - vs[order - 1] = v; - - if (embedg_dlcl_length(reduced[v]) != 3) - { - return FALSE; - } - } - } - if (order != 6) - { - return FALSE; - } - - /* - check if bipartite - */ - v = vs[0]; - ASSERT(!embedg_dlcl_is_empty(reduced[v])); - b1[0] = reduced[v]->info; - b1[1] = embedg_dlcl_list_next(reduced[v])->info; - b1[2] = embedg_dlcl_list_prev(reduced[v])->info; - - for (i = 1; i < 6; i++) - { - t_dlcl *n_v; - - v = vs[i]; - n_v = reduced[v]; - ASSERT(!embedg_dlcl_is_empty(n_v)); - if (n_v->info == b1[0] - || embedg_dlcl_list_next(n_v)->info == b1[0] - || embedg_dlcl_list_prev(n_v)->info == b1[0]) - { - if ((n_v->info != b1[1] - && embedg_dlcl_list_next(n_v)->info != b1[1] - && embedg_dlcl_list_prev(n_v)->info != b1[1]) - && - (n_v->info != b1[2] - && embedg_dlcl_list_next(n_v)->info != b1[2] - && embedg_dlcl_list_prev(n_v)->info != b1[2])) - { - return FALSE; - } - } - else - { - if ((n_v->info == b1[1] - || embedg_dlcl_list_next(n_v)->info == b1[1] - || embedg_dlcl_list_prev(n_v)->info == b1[1]) - || - (n_v->info == b1[2] - || embedg_dlcl_list_next(n_v)->info == b1[2] - || embedg_dlcl_list_prev(n_v)->info == b1[2])) - { - return FALSE; - } - } - } - - return TRUE; -} - - -static boolean -embedg_is_red_obs_K5 (t_dlcl **reduced, int n) - /* - check if the (reduced) obstruction is indeed K5 - */ -{ - int v, order; - - /* - check that order == 5 and that the obstruction is quadric - */ - order = 0; - for (v = 0; v < n; v++) - { - if (!embedg_dlcl_is_empty(reduced[v])) - { - if (order == 5) - { - return FALSE; - } - order++; - - if (embedg_dlcl_length(reduced[v]) != 4) - { - return FALSE; - } - } - } - - return TRUE; -} - - -boolean -embedg_check_recov_obs (t_dlcl **obs, int n, minor m) - /* - check if the recovered obstruction is one of K33 or K5 - */ -{ - t_dlcl **reduced; - boolean ans; - - reduced = embedg_get_reduced_obs(obs, n); - if (m != MINOR_E5) - { - ans = embedg_is_red_obs_K33(reduced, n); - } - else - { - ans = embedg_is_red_obs_K5(reduced, n); - } - - sparseg_dlcl_delete(reduced, n); - return ans; -} -/* - * obstruction.c - */ - -/* - What: - ***** - - Implementing: - - The graph is not planar: we recover the obstruction from the VES structure - and check it as well. - (Some of these checks will disappear later) - - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} -#define IF_DEB_OBS(x) {} -#define IF_DEB_CHECK_OBS(x) {} -#define IF_CPU(x) {} -#define IF_DEB_MINOR(x) {} - - -/* aproto: header embed_graph_protos.h */ - -void -embedg_obstruction ( - t_ver_sparse_rep *V, - t_adjl_sparse_rep *A, /* the input graph as a sparse graph */ - t_dlcl **dfs_tree, /* a sparse graph rep. for the dfs tree - -- vertices are as DFIs - -- and children are ordered wrt - lowpoint value - */ - t_dlcl **back_edges, /* for each vertex v, a dlcl - of the back edges [v, x] incident to v - where x is a DESCENDANT of v - (vertices are given as DFIs) - */ - t_ver_edge *embed_graph, /* output of tester */ - int n, /* size of the graph */ - int *edge_pos, /* pos. in embed_graph for addition - of the next edge */ - int v, - int w_in, /* the unembedded directed back edge - [w_in, v] - */ - t_ver_sparse_rep **OV, /* the obstruction as an adjacency list */ - t_adjl_sparse_rep **OA, - int *nbr_e_obs /* obstruction's #edges */ -) - - /* - the graph is non planar: we must mark & recover the K33 or K5 - homeomorph - */ -{ - int *ver_orient; - minor m; - t_dlcl **obs; - - /* - this is magma code - must be removed - */ - float sttime, time_to_now; - - IF_CPU( - sttime = time_current_user(); - ) - - /* - we will NOT remove the short-cut edges at this stage: - we'll have to perform another walkdown in embedg_iso_is_minor_A - so - 1. saves time when looking for ext. active vertices - 2. more importantly this enables us to ascertain that the number of - edges in embed_graph (even after completing whichever obstruction - applying in this case) will NEVER be > 3*n - 5!!! - 3. SCEs are then removed in embedg_iso_is_minor_A - (obligatory path for every possible case) - */ - - /* - we must compute each vertex's orientation (wrt flipped bicomps) - and set the edges' orientation: - - the other day I was wondering why this was necessary in this - instance (because after all we won't get an embedding): - orientation is required bacause later in the piece we - do a proper face traversal (I guess for Minor C testing) - */ - ver_orient = embedg_vertices_orientation(embed_graph, n); - embedg_VES_set_orientation(embed_graph, n, ver_orient); - mem_free(ver_orient); - - m = embedg_mark_obstruction(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, w_in); - - /* - get the obstruction - */ - obs = embedg_recover_obstruction(embed_graph, n, m, nbr_e_obs); - - /* - and check it - */ - if (!embedg_check_recov_obs(obs, n, m)) - { - sparseg_dlcl_delete(obs, n); - DIE(); - } - - sparseg_dlcl_to_sparseg(obs, n, *nbr_e_obs, OV, OA); - sparseg_dlcl_delete(obs, n); - - /* - just for the sake of it, chcek if the obstruction is - a subgraph of the input graph - */ - if (!sparseg_adjl_sub(*OV, n, *OA, V, n, A)) - { - DIE(); - } - - IF_DEB_OBS( - sparseg_adjl_print(*V, n, *A, FALSE); - ) - - IF_CPU( - fprintf(stdout, "CPU for obstruction recovering %f\n", - (time_current_user() - sttime)); - ) -} - - - - - - - -minor -embedg_mark_obstruction ( - t_dlcl **dfs_tree, /* a sparse graph rep. for the dfs tree - -- vertices are as DFIs - -- and children are ordered wrt - lowpoint value - */ - t_dlcl **back_edges, /* for each vertex v, a dlcl - of the back edges [v, x] incident to v - where x is a DESCENDANT of v - (vertices are given as DFIs) - */ - t_ver_edge *embed_graph, /* output of tester */ - int n, /* size of the graph */ - int *edge_pos, /* pos. in embed_graph for addition - of the next edge */ - int v, - int w_in /* the unembedded directed back edge - [w_in, v] - */ -) - /* - the graph is non planar: we must mark & recover the K33 or K5 - homeomorph - */ -{ - int c, vr, x, y, w; - int *path_v, *path_e, nbr_v, entry_in_path_e; - boolean px_attached_high, py_attached_high, is_minor_D; - minor m; - - - IF_CPU( - float sttime; float time_to_now; - - sttime = time_current_user(); - ) - - - /* - find c such that v^c is the root of the biconnected - component on which the walkdown failed - */ - c = embedg_iso_get_c_of_v(embed_graph, n, v, w_in); - - /* - now: decide which minor we are dealing with and mark the - appropriate one (vertices/edges marked as MARK_MINOR(n) - in embed_graph) - */ - if (embedg_iso_is_minor_A(embed_graph, n, edge_pos, v, c, &vr)) - { - embedg_mark_minor_A(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, c, vr); - - IF_DEB_MINOR( - fprintf(stdout, "Minor A\n"); - ) - - return MINOR_A; - } - - /* - get the externally active vertices x & y and the pertinent w - on the external face of the bicomp rooted by v^c - - and determine if minor B - */ - if (embedg_iso_is_minor_B(embed_graph, n, edge_pos, v, c, - &x, &y, &w)) - { - embedg_mark_minor_B(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, c, - x, y, w); - IF_DEB_MINOR( - fprintf(stdout, "Minor B\n"); - ) - - IF_CPU( - fprintf(stdout, "CPU for obstruction isolation %f\n", - time_current_user() - sttime); - ) - - return MINOR_B; - } - - /* - the remaining cases: must get the highest x-y path - - it will be containing in path_v (vertices), path_e (edges) - */ - embedg_iso_get_highest_x_y_path(embed_graph, n, MARK_EXT_FACE(n), - MARK_EXT_FACE_L(n), - MARK_EXT_FACE_R(n), - v, c, x, y, w, - &path_v, &path_e, - &nbr_v, &entry_in_path_e, - &px_attached_high, - &py_attached_high, - &is_minor_D); - - /* - we are in the minor C case if either one of p_x or p_y - is attached high - */ - if (px_attached_high || py_attached_high) - { - embedg_mark_minor_C(dfs_tree, back_edges, embed_graph, n, edge_pos, - v, c, x, y, w, - path_v, path_e, nbr_v, - px_attached_high, py_attached_high); - IF_DEB_MINOR( - fprintf(stdout, "Minor C\n"); - ) - - mem_free(path_v); - mem_free(path_e); - - IF_CPU( - fprintf(stdout, "CPU for obstruction isolation %f\n", - time_current_user() - sttime); - ) - - return MINOR_C; - } - - if (is_minor_D) - { - embedg_mark_minor_D(dfs_tree, back_edges, embed_graph, n, edge_pos, - v, c, x, y, w, - path_v, path_e, nbr_v, entry_in_path_e); - IF_DEB_MINOR( - fprintf(stdout, "Minor D\n"); - ) - - mem_free(path_v); - mem_free(path_e); - - IF_CPU( - fprintf(stdout, "CPU for obstruction isolation %f\n", - time_current_user() - sttime); - ) - - return MINOR_D; - } - - /* - finally, the minor E case - */ - m = embedg_mark_minor_E(dfs_tree, back_edges, embed_graph, n, edge_pos, - v, c, x, y, w, - path_v, path_e, nbr_v); - switch (m) - { - case MINOR_E1: - IF_DEB_MINOR( - fprintf(stdout, "Minor E1\n"); - ) - break; - case MINOR_E2: - IF_DEB_MINOR( - fprintf(stdout, "Minor E2\n"); - ) - break; - case MINOR_E3: - IF_DEB_MINOR( - fprintf(stdout, "Minor E3\n"); - ) - break; - case MINOR_E4: - IF_DEB_MINOR( - fprintf(stdout, "Minor E4\n"); - ) - break; - case MINOR_E5: - IF_DEB_MINOR( - fprintf(stdout, "Minor E5\n"); - ) - break; - } - - mem_free(path_v); - mem_free(path_e); - - IF_CPU( - fprintf(stdout, "CPU (scaled) for obstruction isolation %f\n", - (time_current_user() - sttime) / e); - ) - - return m; -} -/* - * isolator.c - */ - -/* - What: - ***** - - Implementing: - - The graph is non planar: we isolate the obstruction. - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} -#define IF_DEB_TREE(x) {} -#define IF_DEB_EDGES(x) {} -#define IF_CPU(x) {} -/* #define IF_DEB_MINOR(x) {x} -- Not Used */ - - -/* aproto: header embed_graph_protos.h */ - -#ifndef PLANAR_IN_MAGMA -#endif - - - - -int -embedg_iso_get_c_of_v (t_ver_edge *embed_graph, int n, int v, int w) - /* - the edge [v, w] (w a descendant of v) remains unembedded - after the walkdown returns - - find c such that v^c is the root of the biconnected - component on which the walkdown failed - */ -{ - /* - how to do this??? easy! follow the DFS tree path as given - by the field DFS_parent - */ - - int u; - - u = embed_graph[w].DFS_parent; - while (embed_graph[u].DFS_parent != v) - { - u = embed_graph[u].DFS_parent; - } - /* - this is guaranteed to succeed given the structure of the DFS tree - and the fact that there exists a back edge [w, v] - */ - - return u; -} - - -boolean -embedg_iso_is_minor_A (t_ver_edge *embed_graph, int n, - int *edge_pos, int v, int c, int *vr) - /* - determines if the obstruction is a minor A - */ -{ - /* - to do this we again call the walkdown routine with v^c as input, - the walkdown routine will fail (since there will be an - un-embedded back edge incident to v and to a vertex - in the subtree rooted by v^c) - - the obstruction is a minor A if the merge queue returned by the - walkdown is non-empty, if this is the case we return - the bicomp last appended to the queue - */ - int vv; - t_merge_queue q; - - vv = c + n; - - q = embedg_walkdown(embed_graph, n, edge_pos, vv); - /* - we MUST remove the SCEs here: this is the only place where it - will be done when looking for and recovering an obstruction - - this is safe since this very function applies to ALL cases! - */ - embedg_remove_SCE(embed_graph, n, *edge_pos); - - if (!embedg_merge_queue_empty(q)) - /* - the bicomp of interest is the last in the queue - */ - { - int r, rin, vrout; - - embedg_merge_queue_prune(&q, &r, &rin, vr, &vrout); - embedg_merge_queue_delete(q); - return TRUE; - } - else - { - embedg_merge_queue_delete(q); - return FALSE; - } -} - - -void -embedg_iso_get_x_y_w (t_ver_edge *embed_graph, int n, int v, int r, - int c, int mark, int mark_l, int mark_r, int *x, int *y, int *w) - /* - the obstruction is one of minor B, C, D, E. - - get the externally active vertices x & y along the - external face paths starting at r^c - - get a pertinent vertex w along the lower external - face path between x and y - - external activity and pertinence are wrt v - - all the vertices on the external face r^c...x...w - and r^c...y...w will be marked (the visited field) - */ -{ - int vr, vrin, x_y[4]; - int s, sin, cur, curin; - - vr = c + n; - - /* - find x and y first: - - note that we mark the vertices on the external face r^c...x - and r^c...y - - more on that below - */ - embed_graph[vr].visited = mark; - for (vrin = 0; vrin <= 1; vrin++) - { - int m; - - m = vrin == 0 ? mark_l : mark_r; - embedg_VES_get_succ_ext_active_on_ext_face(embed_graph, n, v, - vr, vrin, - TRUE, m, - &s, &sin); - x_y[vrin] = s; - x_y[vrin + 2] = sin; - /* - note the bizarre way I store the active vertex - and the direction out of which to continue a walk - on the lower external face as described above - */ - } - *x = x_y[0]; - *y = x_y[1]; - - /* - next get the pertinent w on the lower external face from x to y - */ - cur = x_y[0]; - curin = x_y[2]; - embedg_VES_get_succ_pertinent_on_ext_face(embed_graph, n, v, - cur, curin, - TRUE, mark_l, w, &sin); - - /* - now all the vertices r^c...x...w and r^c...y have been marked, - it remains to mark the vertices on the y...w external face path - - (will need to be able to distinguish the external face later on) - - Note the way the external face is marked (needed when recovering - the highest x-y path): - mark_l for the path v^c...x...w - mark_r for the path v^c...y - mark for the lower external face y...w - */ - cur = x_y[1]; - curin = x_y[3]; - s = n; - while (s != *w) - { - embedg_VES_get_succ_pertinent_on_ext_face(embed_graph, n, v, - cur, curin, - TRUE, mark, &s, &sin); - cur = s; - curin = sin; - } - - IF_DEB( - fprintf(stdout, "get x, y & w: the external face\n"); - fprintf(stdout, "%d\t", vr); - cur = vr; - curin = 0; - while (s != vr) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, - cur, curin, - FALSE, 0, &s, &sin); - cur = s; - curin = sin; - fprintf(stdout, "%d\t", s); - } - fprintf(stdout, "\n"); - ) -} - - - - -boolean -embedg_iso_is_minor_B (t_ver_edge *embed_graph, int n, int *edge_pos, - int v, int c, int *x, int *y, int *w) - /* - determines if the obstruction is a minor B and return x, y - (ext. active) and w (pertinent) - */ -{ - /* - get x & y the ext. active vertices on the (external face) - path out of v^c, - and w the pertinent vertex on the lower external face x-y - - PLUS mark the whole external face with MARK_EXT_FACE(n) - */ - embedg_iso_get_x_y_w(embed_graph, n, v, v, c, - MARK_EXT_FACE(n), - MARK_EXT_FACE_L(n), MARK_EXT_FACE_R(n), - x, y, w); - - if (embedg_dlcl_is_empty(embed_graph[*w].pertinent_bicomp_list)) - /* - w has no pertinent child bicomp: not a minor B - */ - return FALSE; - else - { - t_dlcl *pert_l; - int l; - - pert_l = embed_graph[*w].pertinent_bicomp_list; - l = embedg_dlcl_list_last(pert_l)->info; - /* - if w has an ext. active pertinent child bicomp then minor B - - note that we need to know if w has an ext. active AND pertinent - bicomp child: so it is NOT good enough to test - w's separated_DFS_child_list as is done in - embedg_VES_is_ver_ext_active!!!!!!!!! - - PLUS: l is actually a VIRTUAL vertex: to check its lowpoint - I must take its DFS child l - n !!!!!!!! - */ - ASSERT(embedg_VES_is_virtual_vertex(n, l)); - l = l - n; - return embed_graph[l].lowpoint < v ? TRUE : FALSE; - } -} - -void -embedg_iso_get_highest_x_y_path ( - t_ver_edge *embed_graph, - int n, - int mark, - int mark_l, - int mark_r, - int v, - int c, - int x, - int y, - int w, - int **path_v, /* stack of vertices in x-y path */ - int **path_e, /* stack of egdes in x-y path */ - int *nbr_v, /* number of vertices in path_v */ - int *entry_in_path_e, /* the in direction for the FIRST edge in - path_e: needed later on *sigh* - */ - boolean *px_attached_high, - boolean *py_attached_high, - boolean *is_minor_D -) - /* - the obstruction is one of minor C, D, E. - - we want to recover the highest x-y path: - the obstructing path attached to the external faces v^c - x - w - and v^c - y - w - - while doing all this we also determine if the case is a minor C - or a minor D - */ -{ - /* - the path is obtained by walking the proper face starting at v - where ALL the edges incident to v^c BUT the ones bordering - the external face have been removed - - I won't I don't think remove these edges, but instead I'll be - implementing an "avoidance" walk - */ - - int vv, s, sin, p_x, p_y, cur_v, cur_vin; - int e, ein, s_e, s_ein; - boolean avoid_vv; - - /* - must start the walk at edge embed_graph[v^c].link[1 ^ 0], - (vvin = 0 is in direction of x, see embedg_iso_get_x_y_w) - */ - vv = c + n; - e = embed_graph[vv].link[1]; - ein = 0; /* because of adjacency list consistency */ - - *path_v = (int *) mem_malloc(sizeof(int) * n); - *path_e = (int *) mem_malloc(sizeof(int) * n); - (*nbr_v) = -1; - - /* - recall that in embedg_iso_get_x_y_w we did mark - (with mark, mark_l, mark_r) - ALL the vertices lying on the external face walk starting - & ending at v^c: we will use this fact to enable us - to decide if a vertex is on the external face - (as opposed to being on the internal face) - */ - - s = embed_graph[e].neighbour; - ASSERT(embed_graph[s].visited == mark_l); - /* - this must be the case since s lies on the external face - starting at v^c in x's direction - -- we push s onto the stack - */ - (*path_v)[++(*nbr_v)] = s; - - /* - start the proper face walk which "avoids" v^c since the - internal edges incident to v^c are supposed to have - been removed - - please read on - */ - avoid_vv = FALSE; - while (TRUE) - { - boolean av; - - av = - embedg_VES_get_succ_on_proper_face_with_avoidance( - embed_graph, n, - e, ein, vv, - FALSE, 0, - &s, &s_e, &s_ein); - avoid_vv = av == TRUE ? av : avoid_vv; - if (embed_graph[s].visited == mark_l) - /* - means that s is still on the external face: - empty the path's stack and push s - */ - { - (*nbr_v) = -1; - (*path_v)[++(*nbr_v)] = s; - e = s_e; - ein = s_ein; - } - else if (*nbr_v == 0) - /* - s is the first encountered vertex after - path_v[0] which does not - lie on the external face v^c...c...w - - given the way we pushed things on the vertex stack, path_v[0] - will be the point of attachement of the x-y path - on the v^c...x...w external face - - path_e[0] will contain nothing: a dummy - - path_e[1] will be the first edge in the x-y path - (and entry_in_path will give the in-direction to this edge) - - oh yes!, we break the loop at this point if - the vertex s lies on the v^c...y...w external face - */ - { - ASSERT(embed_graph[(*path_v)[0]].visited == mark_l); - /* - the first vertex on the path must be on the - v^c...x...w external face - */ - (*path_v)[++(*nbr_v)] = s; - /* - and now we also push the edge on the edge stack - - I'll need this later to initiate a proper face walk - starting at the first vertex/edge in the x-y path, - which is the same as starting from s_e - */ - (*path_e)[*nbr_v] = s_e; - *entry_in_path_e = s_ein; - e = s_e; - ein = s_ein; - - /* - since we are at the start of the path, we must not - forget to reset avoid_vv - */ - avoid_vv = FALSE; - - if (embed_graph[s].visited == mark_r - || embed_graph[s].visited == mark) - /* - we have reached the v^c...y...w external face: - we can stop here - */ - { - break; - } - - /* - if not finished yet, - we also mark s (and path_v[0]) as visited: - later on we'll need to recognise which of the vertices - in path have already been encountered - (in case of encountering a cut-vertex due to the - "removal" of the "internal" edges incidnet ot v^c) - - note that we mark s as visited iff s if not already - on the v^c..y..w external face - */ - - ASSERT(embedg_VES_is_vertex(n, (*path_v)[0])); - ASSERT(embedg_VES_is_vertex(n, s)); - - embed_graph[s].visited = MARK_X_Y_PATH(n); - } - else if (embed_graph[s].visited == MARK_X_Y_PATH(n)) - /* - this means that s is a cut vertex on the internal - face walk: pop all the vertices from path - until s's last occurrence in path - */ - { - ASSERT((*nbr_v) >= 0); - while ((*path_v)[(*nbr_v)] != s) - { - (*nbr_v)--; - ASSERT((*nbr_v) >= 0); - /* - note that s should be somewhere in path! - */ - } - /* - note also that popping from path_v also implies - popping from path_e - */ - e = s_e; - ein = s_ein; - } - else - /* - we push s and s_e on their respective stacks - */ - { - (*path_v)[++(*nbr_v)] = s; - (*path_e)[*nbr_v] = s_e; - e = s_e; - ein = s_ein; - - if (embed_graph[s].visited == mark_r - || embed_graph[s].visited == mark) - /* - again, s lies on the v^c...y...w external face: - we end the walk: path_v now contains the highest x-y path - - note that there can be no conflict between - mark_r or mark and MARK_X_Y_PATH(n) since - we mark with MARK_X_Y_PATH iff the vertex - is NOT marked with mark_r/mark! - */ - { - break; - } - else - /* - we must mark this vertex as MARK_X_Y_PATH since we aren't - finished yet - */ - { - embed_graph[s].visited = MARK_X_Y_PATH(n); - } - } - } - - /* - there is only one thing remaining to do: see if p_x or - p_y are attached high - (ie closer to v^c than x or y resp.) - - we walk the external face starting at v^c in y's direction - (again see embedg_iso_get_x_y_w) - */ - *px_attached_high = TRUE; - p_x = (*path_v)[0]; - /* - p_y denotes the attachement point of the x-y path - on the v^c...y...w external face - */ - - s = n; - cur_v = vv; - cur_vin = 0; - while (s != p_x) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, - cur_v, cur_vin, - FALSE, 0, &s, &sin); - if (s == x) - { - *px_attached_high = FALSE; - break; - } - cur_v = s; - cur_vin = sin; - } - - *py_attached_high = TRUE; - p_y = (*path_v)[*nbr_v]; - /* - p_y denotes the attachement point of the x-y path - on the v^c...y...w external face - */ - - s = n; - cur_v = vv; - cur_vin = 1; - while (s != p_y) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, - cur_v, cur_vin, - FALSE, 0, &s, &sin); - if (s == y) - { - *py_attached_high = FALSE; - break; - } - cur_v = s; - cur_vin = sin; - } - - /* - now we are in the minor C case if either p_x or p_y are - attached high - - the minor D case: - this happens when there is a path v^c - z where z lies - on the x-y path - - that is, when - - either v^c has been effectively "avoided" within the - embedg_VES_get_succ_on_proper_face_with_avoidance function - BUT ONLY if this "avoidance" happened AFTER having - encountered the very first vertex on the x-y path! - - or when a cut vertex has been encountered on the x-y path: - separable components on this walk can only occur - if one walks the face while skipping the edges incident to v^c - - in any case this means that checking the return from - the embedg_VES_get_succ_on_proper_face_with_avoidance function - is enough: this is the purpose of avoid_vv. - */ - - *is_minor_D = !(*px_attached_high || *py_attached_high) && avoid_vv; - - - IF_DEB( - int i; - - fprintf(stdout, "x-y path\t"); - for (i = 0; i <= *nbr_v; i++) - fprintf(stdout, "%d\t", (*path_v)[i]); - fprintf(stdout, "\n"); - ) -} - - -/* - * embedg_misc.c - */ - -/* - What: - ***** - - Implementing: - - Some high level routinse for the VES structure. - See VES_misc.c. - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} -#define IF_DEB_TREE(x) {} - - - -/* aproto: header embed_graph_protos.h */ - -#ifndef PLANAR_IN_MAGMA -#endif - - - - -void -embedg_VES_delete (t_ver_edge *embed_graph, int n) -{ - int i; - - for (i = 0; i < n; i++) - { - embedg_dlcl_delete(embed_graph[i].separated_DFS_child_list); - /* - embedg_dlcl_delete(embed_graph[i].rep_in_parent_list); - - NO!!! this points to something in separated_DFS_child_list - */ - embedg_dlcl_delete(embed_graph[i].pertinent_bicomp_list); - } - mem_free(embed_graph); -} - - - -void -embedg_VES_print (t_ver_edge *embed_graph, int n) -{ - int i; - - fprintf(stdout, "vertices\n"); - for (i = 0; i < n; i++) - { - t_ver_edge rec; - - rec = embed_graph[i]; - - fprintf(stdout, "\nDFI\t%d\tlabel\t%d\n", i, rec.label); - fprintf(stdout, "DFS parent\t%d\tleast_a\t%d\tlowpoint\t%d\n", - rec.DFS_parent, rec.least_ancestor, rec.lowpoint); - fprintf(stdout, "separated_DFS_child_list\n"); - embedg_dlcl_print(rec.separated_DFS_child_list); - } - - fprintf(stdout, "\nvirtual vertices\n"); - for (i = n; i < 2*n; i++) - { - int c; - - c = i - n; - fprintf(stdout, "%d^%d\t", embed_graph[c].DFS_parent, c); - } - fprintf(stdout, "\n"); - - embedg_VES_print_bigcomps(embed_graph, n); -} - - -void -embedg_VES_print_bigcomps (t_ver_edge *embed_graph, int n) - /* - walking the external faces of all the bicomp; for testing only - */ -{ - int i; - - fprintf(stdout, "bicomponents\n"); - /* - to get to the bicomps, it makes sense to start at the - virtual vertices???? - */ - for (i = n + 1; i < 2*n; i++) - /* - a note of caution: there is no virtual vertex at - embed_graph[n] since that would mean a virtual vertex x^0 - which makes no sense (0 is the root of the dfs_tree) - */ - { - embedg_VES_walk_bicomp(embed_graph, n, i, 0); - } - fprintf(stdout, "\n"); -} -/* - * planar_alg_init.c - */ - -/* - What: - ***** - - Implementing: - - Initialising the embed_graph aka VES data structure from the information - collected from the DFS. - - The embed_graph/VES data structure is an array consisting of vertices, - virtual vertices and edges; - vertices, virtual vertices and edges share a common record structure; - one of the particular features is that any vertex is linked - together with its incident edges into a doubly circular linked list. - - See also VES_misc.c. - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_DEB_DFS(x) {} -#define IF_VERB(x) {} -#define IF_DEB_TREE(x) {} -#define IF_CPU(x) {} - - -/* aproto: header embed_graph_protos.h */ - -/* aproto: beginstatic -- don't touch this!! */ -static void embedg_init_insert_TE (t_ver_edge *, int, int *, t_dlcl *); -/* aproto: endstatic -- don't touch this!! */ - -#ifndef PLANAR_IN_MAGMA -#endif - - -t_ver_edge * -embedg_planar_alg_init ( - t_ver_sparse_rep *V, - int n, - t_adjl_sparse_rep *A, /* input sparse graph */ - int *nbr_c, /* size of the graph, #components*/ - int *edge_pos, /* pos in the struct where the last edge - has been inserted - */ - t_dlcl ***dfs_tree, /* a sparse graph rep. for the dfs tree - -- vertices are as DFIs - */ - t_dlcl ***back_edges, /* for each vertex v, a dlcl - of the back edges [v, x] incident to v - where x is a DESCENDANT of v - -- vertices are as DFIs - */ - t_dlcl ***mult_edges /* for each vertex v, a dlcl - of the back edges [v, x] incident to v - where x is a DESCENDANT of v - -- vertices are as DFIs - */ -) - /* - initialising embed_graph, the fundamental data structure - underpinning the tester and obstruction isolator - - from there on, a vertex is exclusively referred to by its DFI!! - -- so forget about labels - */ -{ - int *dfs_nbr; /* dfs numbering for each vertex */ - int *dfs_order; /* vertices in dfs order */ - int *lowpoint; /* lowpoint value for each DFI */ - int *dfs_parent; /* for each DFI, its DFS ancestor - as a DFI (DFS index) - */ - int *least_a; /* for each DFI, its least ancestor's DFI - (via a back edge exclusively) - */ - - t_ver_edge *embed_graph; - int i; - - - IF_CPU( - float sttime; float time_to_now; - - sttime = time_current_user(); - ) - - ASSERT(n >= 1); - - /* - DFS and lowpoint calculations + ordering - */ - sparseg_adjl_dfs_preprocessing(V, n, A, nbr_c, - &dfs_nbr, &dfs_order, &lowpoint, - dfs_tree, back_edges, - &dfs_parent, &least_a, mult_edges); - - IF_CPU( - fprintf(stdout, "CPU for DFS only %f\n", - (time_current_user() - sttime)); - sttime = time_current_user(); - ) - - IF_DEB_DFS( - fprintf(stdout, "DFS indices\n"); - for (i = 0; i < n; i++) - fprintf(stdout, "%d ", dfs_nbr[i]); - fprintf(stdout, "\n"); - - fprintf(stdout, "DFS order\n"); - for (i = 0; i < n; i++) - fprintf(stdout, "%d ", dfs_order[i]); - fprintf(stdout, "\n"); - - fprintf(stdout, "lowpoint values\n"); - for (i = 0; i < n; i++) - fprintf(stdout, "%d ", lowpoint[i]); - fprintf(stdout, "\n"); - ); - - IF_VERB( - fprintf(stdout, "DFS parent\n"); - for (i = 0; i < n; i++) - fprintf(stdout, "%d ", dfs_parent[i]); - fprintf(stdout, "\n"); - ); - - IF_VERB( - fprintf(stdout, "least ancestors\n"); - for (i = 0; i < n; i++) - fprintf(stdout, "%d ", least_a[i]); - fprintf(stdout, "\n"); - ); - - IF_VERB( - for (i = 0; i < n; i++) - { - fprintf(stdout, "the list of children ordered by lowpoint for %d\n", - i); - embedg_dlcl_print((*dfs_tree)[i]); - } - ); - - IF_DEB_DFS( - fprintf(stdout, "the tree edges\n"); - sparseg_dlcl_print(*dfs_tree, n); - - fprintf(stdout, "the back edges\n"); - sparseg_dlcl_print(*back_edges, n); - - fprintf(stdout, "multiple edges\n"); - sparseg_dlcl_print(*mult_edges, n); - ); - - /* - create the data structure for the embedded graph: - it will have (max) size 2*n + 2 * MAXE(n) - - we will see that that number of edges is sufficient - even when later adding short-cut edges (see embedg_walkdown) - */ - embed_graph = (t_ver_edge *) mem_malloc(sizeof(t_ver_edge) - * (2*n + 2 * MAXE(n))); - /* - initialisation - */ - for (i = 0; i < 2*n + 2 * MAXE(n); i++) - /* - some fields are initialised to n as n is actually - an "invalid" value - */ - { - t_ver_edge rec; - - rec.label = NIL; - rec.DFS_parent = n; - rec.least_ancestor = n; - rec.lowpoint = n; - rec.separated_DFS_child_list = NP; - rec.rep_in_parent_list = NP; - rec.pertinent_bicomp_list = NP; - rec.adjacent_to = n; - rec.visited = n; - rec.neighbour = n; - rec.in_adjl = NIL; - rec.twin_in_adjl = NIL; - rec.mult = 0; - rec.type = NIL; - rec.sign = NILSIGN; - /* - make the links refer back to self - */ - rec.link[0] = rec.link[1] = i; - - embed_graph[i] = rec; - } - - /* - embed_graph[0..n-1]: the n vertices - ATTENTION: the vertices are stored according to their DFS numbering - */ - for (i = 0; i < n; i++) - { - t_ver_edge rec; - - rec = embed_graph[i]; - - rec.label = dfs_order[i]; - rec.DFS_parent = dfs_parent[i]; - rec.least_ancestor = least_a[i]; - rec.lowpoint = lowpoint[i]; - rec.separated_DFS_child_list = embedg_dlcl_copy((*dfs_tree)[i]); - - IF_VERB( - fprintf(stdout, "the list of children ordered by lowpoint for DFI %d\n", - i); - embedg_dlcl_print(rec.separated_DFS_child_list); - ); - - embed_graph[i] = rec; - } - - /* - one more thing to do for these vertices: - fix the rep_in_parent_list field - */ - for (i = 1; i < n; i++) - { - t_dlcl *parent_list, *rep; - int parent; - - parent = embed_graph[i].DFS_parent; /* careful: this is a DFI */ - /* - recall that the vertices in embed_graph are accessed via their DFI - */ - - if (parent != n) - /* - when parent == n this means that i the root of a DFS tree - in the disconnected graph - */ - { - parent_list = embed_graph[parent].separated_DFS_child_list; - rep = embedg_dlcl_find(parent_list, i); - ASSERT(rep != NP); - embed_graph[i].rep_in_parent_list = rep; - } - } - - /* - embed_graph[n..2*n-1]: the n virtual vertices - do I need to do anything here????? - - no - I don't think so - - let's try to explain what virtual vertices are: - let v^c be a virtual vertex: - - it is at position c + n in the array, - - c is the DFS child of v, - - v can be retrieved by taking embed_graph[c].DFS_parent, - - v^c is said virtual as long as the bicomp rooted by v^c is not - merged with the vertex v - - once v is merged (identified?) with v^c, then v^c - is of no relevance anymore - - below we will see that we embed all the tree edges as singleton - bicomps (bicomponent): (0^1, 1), (1^2, 2) etc...: - this is what virtual vertices are there for: - to distinguish them from their "real" counterpart with - which they will be ultimately merged - - the primary reason for this is: - while testing for planarity virtual vertices are the roots of bicomps - */ - - /* - now the edges: - we actually embed the tree edges so that each tree edge - forms a (singleton) biconnected component - - embedding an edge in effect means creating the - doubly linked circular list of [virtual] vertices & the edges incident - to it - - this list is built using the links 0 & 1 in embed_graph[i] - */ - - /* - for each tree edge (v,u) we embed (v^u, u) (v^u is the virtual vertex) - - CAREFUL: when talking about vertex v say, - we mean the vertex with DFI v, and NOT the vertex with label v - ************************************************************** - */ - *edge_pos = 2*n - 1; - /* - edge_pos will tell us where to insert the next edge in embed_graph[] - */ - for (i = 0; i < n; i++) - { - t_dlcl *te_l, *p; - - te_l = (*dfs_tree)[i]; - p = te_l; - - if (!embedg_dlcl_is_empty(p)) - { - /* - the test below is a bit stupid... well... - */ - ASSERT(embed_graph[p->info].DFS_parent == i); - - embedg_init_insert_TE(embed_graph, n, edge_pos, p); - p = embedg_dlcl_list_next(p); - while (p != te_l) - { - ASSERT(embed_graph[p->info].DFS_parent == i); - embedg_init_insert_TE(embed_graph, n, edge_pos, p); - - p = embedg_dlcl_list_next(p); - } - } - } - - mem_free(dfs_nbr); - mem_free(dfs_order); - mem_free(lowpoint); - - mem_free(dfs_parent); - mem_free(least_a); - - IF_CPU( - fprintf(stdout, "CPU for remainder of initialisation %f\n", - (time_current_user() - sttime)); - ) - - return embed_graph; -} - - -static void -embedg_init_insert_TE (t_ver_edge *embed_graph, int n, int *edge_pos, t_dlcl *p) - /* - init and insert a tree edge in embed graph: - - the tree edge will form a singleton bicomponent (v^c, c) - where c is p->info and v is c.DFS_parent - */ -{ - int c, v; - - c = p->info; - v = embed_graph[c].DFS_parent; - ASSERT(v >= 0 && v < n); - - /* - now (v, c) is a tree edge; embed the directed edge [v^c, c] - - -- and recall that v^c is a virtual vertex, at position c + n - in embed_graph, and that vertex c is at position c - */ - - /* - first, set this edge with the appropriate info - */ - (*edge_pos)++; - ASSERT(*edge_pos < 2*n + 2 * MAXE(n)); - embed_graph[*edge_pos].neighbour = c; - embed_graph[*edge_pos].in_adjl = p->in_adjl; - embed_graph[*edge_pos].twin_in_adjl = p->twin_in_adjl; - - ASSERT(p->mult % 2 == 0); - /* - we want the number of undirected edges - */ - embed_graph[*edge_pos].mult = p->mult / 2; - embed_graph[*edge_pos].type = TE; - embed_graph[*edge_pos].sign = CCLOCKW; - - /* - link this with vertex v^c in a doubly linked circular list - */ - embed_graph[c + n].link[0] = - embed_graph[c + n].link[1] = *edge_pos; - embed_graph[*edge_pos].link[0] = - embed_graph[*edge_pos].link[1] = c + n; - - /* - now create/set the twin edge, the directed edge [c, v^c] - */ - (*edge_pos)++; - ASSERT(*edge_pos < 2*n + 2 * MAXE(n)); - embed_graph[*edge_pos].neighbour = c + n; - embed_graph[*edge_pos].in_adjl = p->twin_in_adjl; - embed_graph[*edge_pos].twin_in_adjl = p->in_adjl; - embed_graph[*edge_pos].mult = p->mult / 2; - embed_graph[*edge_pos].type = TE; - embed_graph[*edge_pos].sign = CCLOCKW; - - /* - and link it with vertex c in a doubly linked circular list - */ - embed_graph[c].link[0] = embed_graph[c].link[1] = *edge_pos; - embed_graph[*edge_pos].link[0] = - embed_graph[*edge_pos].link[1] = c; -} -/* - * dfs_preprocessing.c - */ - -/* - What: - ***** - - Implementing: - - A DFS as an initialisation step for the planarity tester. - This is an especially beefed up DFS that collects lots of - marginal information: - - - a DFS tree as a list of DFS children for each vertex - - the DFS children are sorted according to their lowpoint value - - a back_edge structure as a list of descendants v for each - vertex u such that [v, u] is a back edge - - a multiple edges structure which stores multiple (directed) edges - NOT in the DFS tree nor in the back_edge struc, and loops - - - the vertices in DFS order - - the DFS index (DFI) for each vertex - - the lowpoint value for each vertex - - the number of components of the (possibly disconnected) graph - - for each vertex, its DFS parent - - for each vertex v, its least ancestor u such that [v, u] - is a back edge - - ALL info above (except the vertices in DFS order) is given - in terms of the vertices' DFIs and NOT their labels. - - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -/* - There are some dodgy things which need some thought; it would be nice - to fix them so that the code get's cleaner: - - - we do store in_adj (and twin_in_adjl) for each directed edge: - - + this is ONLY needed at the time of recovering the embedding - (see embedg_recover_embedding) and its sole use is to establish - a link between an edge in the embedding structure - t_embed_sparse_rep *E and the corresponding edge - in the t_adjl_sparse_rep *A struc. - - + well, I cannot recall why I thought this correspondence - was needed in the first place and it might well be the case - that there is no use for it; in which case recovering the - embedding is simplified - (we would store the end-vertex in the embedding's edges instead - of their index in the adjacency list) - - - there are some non-linear bits in the DFS below: when searching - for an already existing tree/back/multiple edge. - I couldn't fix this in less then one hour so I leave it as it is... - for now. - - This shouldn't be a major issue, overall timings of the planarity - tester do not show this non-linear "bump"... - - - also, this algorithm has been growing incrementally and I now - realise that I am using some redundant data structures: - for example visited[] and the vertex and could be dispensed with... - ...more things to clean up... - - Paulette 07/02/02 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} -#define IF_DEB_TREE(x) {} - - -/* aproto: header embed_graph_protos.h */ - -#ifndef PLANAR_IN_MAGMA -#endif - - -void -sparseg_adjl_dfs_preprocessing ( - t_ver_sparse_rep *V, - int n, /* size of the graph */ - t_adjl_sparse_rep *A, /* input sparse graph */ - int *c, /* nbr of components */ - int **dfs_nbr, /* dfs numbering for each vertex */ - int **dfs_order, /* vertices in dfs order */ - int **lowpoint, /* lowpoint value for each DFI */ - t_dlcl ***dfs_tree, /* a sparse graph rep. for the dfs tree: - for each DFI, a list of its children's - DFI ordered wrt their lowpoint values - */ - t_dlcl ***back_edges, /* for each DFI v, a dlcl - of the back edges [v, x] incident to v - where x is a DESCENDANT of v */ - int **dfs_parent, /* for each DFI its DFS ancestor */ - int **least_a, /* for each DFI, its least ancestor's DFI - via a back edge exclusively */ - t_dlcl ***mult_edges /* for each DFI v, a dlcl - of the multiple directed - edges NOT included - in either dfs_tree or back_edges - */ -) - - /* - in ALL the returned info above BUT dfs_order[] we store - the vertices' DFIs (DFS indices) and NOT their labels! - - -- shuffling between labels and vertices can then be done - via dfs_nbr[] and dfs_order[] - */ -{ - int pos_v_stack, pos_e_stack, dfs_n; - int *visited, *vertex_stack, *edge_stack, *lowpoint_order; - int *TE_in_adjl, *TE_twin_in_adjl, *TE_mult; - int v, lp, cur, cur_e, next; - t_dlcl **temp, *lowpoint_list, **new_dfs_tree; - - /* - create the dfs tree as a sparse graph - */ - *dfs_tree = (t_dlcl **) mem_malloc(sizeof(t_dlcl *) * n); - /* - the DFS numbering for the vertices - */ - *dfs_nbr = (int *) mem_malloc(sizeof(int) * n); - /* - the vertices as ordered by their DFS index - */ - *dfs_order = (int *) mem_malloc(sizeof(int) * n); - /* - the lowpoint value for each DFI - */ - *lowpoint = (int *) mem_malloc(sizeof(int) * n); - - /* - the (directed) back edges - */ - *back_edges = (t_dlcl **) mem_malloc(sizeof(t_dlcl *) * n); - - - /* - the DFS parent for each DFI - */ - *dfs_parent = (int *) mem_malloc(sizeof(int) * n); - /* - the least ancestor (via a back edge exlusively) for each DFI - */ - *least_a = (int *) mem_malloc(sizeof(int) * n); - - /* - the (directed) multiple edges - */ - *mult_edges = (t_dlcl **) mem_malloc(sizeof(t_dlcl *) * n); - - /* - the vertices visited while DFS - */ - visited = (int *) mem_malloc(sizeof(int) * n); - /* - stack of vertices: last current vertex - */ - vertex_stack = (int *) mem_malloc(sizeof(int) * n); - /* - stack of (tree) edges: last added tree edge - */ - edge_stack = (int *) mem_malloc(sizeof(int) * n); - - /* - the following will be used in order to recreate the dfs_tree - so that the DFS children of each DFI are ordered - according to their lowpoint value - */ - lowpoint_order = (int *) mem_malloc(sizeof(int) * n); - temp = (t_dlcl **) mem_malloc(sizeof(t_dlcl *) * n); - new_dfs_tree = (t_dlcl **) mem_malloc(sizeof(t_dlcl *) * n); - - /* - finally, three more holding arrays: a trick to remember which - tree edges we are talking about: - - when constructing dfs_tree, back_edges, mult_edges - - we NEED to record the index in A (the adjacency list) - of some of the edges and their twins/inverses - we are currently storing in either of these structures - - we also need to record the number of multiple (directed) - edges we encounter when the graph is not simple - - this is easy to do when storing back edges and multiple edges, - and tree edges also: but this lattest set of neighbour lists (dfs_tree) - is subsequently reordered so that DFS children are ordered - wrt lowpoint values; - - consequently the info about position in adjacency list - and edge multiplicity are lost in the ordering process - - the two following arrays will remember the info we'll need later - - more about this below - */ - TE_in_adjl = (int *) mem_malloc(sizeof(int) * n); - TE_twin_in_adjl = (int *) mem_malloc(sizeof(int) * n); - TE_mult = (int *) mem_malloc(sizeof(int) * n); - - - /* - initialization of the data structures - */ - for (v = 0; v < n; v++) - { - (*dfs_tree)[v] = (*back_edges)[v] = (*mult_edges)[v] = NP; - visited[v] = TE_mult[v] = 0; - (*dfs_parent)[v] = (*least_a)[v] = n; - temp[v] = new_dfs_tree[v] = NP; - TE_in_adjl[v] = TE_twin_in_adjl[v] = NIL; - /* - note that in the 3rd last statement n is considered - as an "invalid" value; - will be if importance in the overall algorithm - */ - } - - /* - the DFS tree is rooted at vertex 0 - */ - dfs_n = -1; - pos_v_stack = -1; - pos_e_stack = -1; - *c = 0; - for (v = 0; v < n; v++) - { - if (visited[v]) - /* - we come only at this level when looking for - a new subtree (when graph is disconnected) - */ - { - continue; - } - else - { - (*c)++; - } - - cur = v; - visited[cur] = 1; - (*dfs_nbr)[cur] = ++dfs_n; - (*lowpoint)[(*dfs_nbr)[cur]] = dfs_n; - (*dfs_order)[dfs_n] = cur; - - cur_e = V[cur].first_edge == NIL ? NIL : V[cur].first_edge; - while (TRUE) - { - if (cur_e != NIL) - { - t_dlcl *existing_e; - - next = A[cur_e].end_vertex; - if (!visited[next]) - /* - adding tree edges (careful: directed edges) - - AND tree edges are stored as - [dfs_nbr[u], dfs_nbr[cv]] - instead of [u, cv]: that is we store the edges - according to the vertices' DFIs - */ - { - IF_DEB_TREE( - io_printf("add tree edge %d\t%d\n", - cur+1, next+1); - ); - - (*dfs_nbr)[next] = ++dfs_n; - (*lowpoint)[(*dfs_nbr)[next]] = dfs_n; - (*dfs_order)[dfs_n] = next; - - sparseg_dlcl_append_to_neigh_list(*dfs_tree, n, - (*dfs_nbr)[cur], - (*dfs_nbr)[next], - NIL); - TE_in_adjl[(*dfs_nbr)[next]] = cur_e; - TE_mult[(*dfs_nbr)[next]]++; - - /* - we push cur and the edge (cur, cur_e) on their - respective stacks - */ - vertex_stack[++pos_v_stack] = cur; - edge_stack[++pos_e_stack] = cur_e; - - /* - and mark next as visited - */ - visited[next] = 1; - - /* - update dfs_parent (always deal with DFIs rembember!) - */ - (*dfs_parent)[(*dfs_nbr)[next]] = (*dfs_nbr)[cur]; - - /* - the DFS goes one level deeper - */ - cur = next; - cur_e = V[cur].first_edge == NIL ? - NIL : V[cur].first_edge; - } - /* - the next three tests deal with multiple edges - and loops: apart from storing these (DIRECTED) edges - in mult_edges, we also need to update - the multipliciaty information about these edges - */ - else if (sparseg_dlcl_is_adjacent(*dfs_tree, n, - (*dfs_nbr)[cur], - (*dfs_nbr)[next], - &existing_e)) - /* - [cur, next] is a tree edge - */ - { - sparseg_dlcl_append_to_neigh_list(*mult_edges, n, - (*dfs_nbr)[cur], - (*dfs_nbr)[next], - cur_e); - TE_mult[(*dfs_nbr)[next]]++; - - cur_e = A[cur_e].next; /* next in cur's adjacency list */ - } - else if (sparseg_dlcl_is_adjacent(*back_edges, n, - (*dfs_nbr)[next], - (*dfs_nbr)[cur], - &existing_e)) - /* - [cur, next] is a back edge - */ - { - sparseg_dlcl_append_to_neigh_list(*mult_edges, n, - (*dfs_nbr)[cur], - (*dfs_nbr)[next], - cur_e); - (existing_e->mult)++; - - cur_e = A[cur_e].next; /* next in cur's adjacency list */ - } - else if (next == cur) - /* - the case of a loop - */ - { - if (sparseg_dlcl_is_adjacent(*mult_edges, n, - (*dfs_nbr)[next], - (*dfs_nbr)[cur], - &existing_e)) - /* - in this case we must update the multiplicity - of this edge: note that the elt. in cur's - neighbours list that gets updated is the first - in the list - - dodgy??? certainly, but can't think - of a better way to do this - - eventually it will happen that even myself - won't understand what I am doing.......... - */ - { - (existing_e->mult)++; - } - sparseg_dlcl_append_to_neigh_list(*mult_edges, n, - (*dfs_nbr)[cur], - (*dfs_nbr)[next], - cur_e); - - cur_e = A[cur_e].next; /* next in cur's adjacency list */ - } - else if (sparseg_dlcl_is_adjacent(*dfs_tree, n, - (*dfs_nbr)[next], - (*dfs_nbr)[cur], - &existing_e)) - /* - [next, cur] is a tree edge: - that is, [cur, next] is [next, cur]'s twin/inverse: - - 1. if it is the first time one encounters - [cur, next] (as it would always be the case - for a simple graph) then all I need to do - is to update the tree edge's multiplicity, - and the twin info in TE_[] - - 2. if [cur, next] is actually a multiple edge, - then I'll need to store it in mult_edges; - and I update the tree edge's multiplicity too. - No twin info will be required here. - Why? see how recover.c embeds the multiple - edges in the planar embedding. - - 3. how do I know it is the first time I encounter - [cur, next]?: - when TE_twin_in_adjl = NIL - - 4. finally, note that the present counting scheme - implies that the mult field always holds - the number of directed edges: - ie, if [a, b] is a tree edge, [a, b].mult = 2 - because we would have counted [a, b] and [b, a] - - this applies to tree edges, back edges, and loops - */ - { - ASSERT(TE_in_adjl[(*dfs_nbr)[cur]] != NIL); - if (TE_twin_in_adjl[(*dfs_nbr)[cur]] == NIL) - { - TE_twin_in_adjl[(*dfs_nbr)[cur]] = cur_e; - } - else - { - sparseg_dlcl_append_to_neigh_list(*mult_edges, n, - (*dfs_nbr)[cur], - (*dfs_nbr)[next], - cur_e); - } - - TE_mult[(*dfs_nbr)[cur]]++; - - cur_e = A[cur_e].next; /* next in cur's adjacency list */ - } - else if (sparseg_dlcl_is_adjacent(*back_edges, n, - (*dfs_nbr)[cur], - (*dfs_nbr)[next], - &existing_e)) - /* - [next, cur] is a back edge: [cur, next] is its inverse: - we proceed as for the tree edge case above - */ - { - ASSERT(existing_e->in_adjl != NIL); - if (existing_e->twin_in_adjl == NIL) - { - existing_e->twin_in_adjl = cur_e; - } - else - { - sparseg_dlcl_append_to_neigh_list(*mult_edges, n, - (*dfs_nbr)[cur], - (*dfs_nbr)[next], - cur_e); - } - - (existing_e->mult)++; - - cur_e = A[cur_e].next; /* next in cur's adjacency list */ - } - /* - the next bit concludes the DFS: it deals with the case - where a back edge needs to be added - */ - else - /* - that is, next is visited and neither - the tree edge [next, cur] nor - the back edge [next, cur] exist: - - this implies that [cur, next] is a back edge - that must be added to the back_edges structure - (with dfs_nbr(next) < dfs_nbr(cur)) - */ - { - IF_DEB_TREE( - io_printf("add back edge %d\t%d\n", - cur+1, next+1); - ); - - ASSERT(visited[next]); - ASSERT((*dfs_nbr)[cur] > (*dfs_nbr)[next]); - - sparseg_dlcl_append_to_neigh_list(*back_edges, n, - (*dfs_nbr)[next], - (*dfs_nbr)[cur], - cur_e); - - /* - update cur's lowpoint - */ - (*lowpoint)[(*dfs_nbr)[cur]] = - (*dfs_nbr)[next] < (*lowpoint)[(*dfs_nbr)[cur]] ? - (*dfs_nbr)[next] : (*lowpoint)[(*dfs_nbr)[cur]]; - - /* - update least_a (of cur) - (always deal with DFIs remember!) - */ - (*least_a)[(*dfs_nbr)[cur]] = - (*dfs_nbr)[next] < (*least_a)[(*dfs_nbr)[cur]] ? - (*dfs_nbr)[next] : (*least_a)[(*dfs_nbr)[cur]]; - - /* - get the next edge in cur's adjacency list - */ - cur_e = A[cur_e].next; - } - } - - if (cur_e == NIL) - /* - we are either at a leaf or have finished scanning - cur's adjacency list: backtrack - */ - { - if (pos_v_stack == -1) /* no previous vertex */ - { - /* - no edge left on the stack: DFS ends for - this subtree: - we visit the next vertex - */ - ASSERT(pos_e_stack == -1); - break; - } - else - { - int prev_e; - /* - Otherwise backtrack and pop cur from the stack - as well as the last tree edge added to the tree. - We use next to get a new lowpoint value for cur: - This value will be min(lowpoint(cur), lowpoint(next)). - */ - cur = vertex_stack[pos_v_stack--]; - prev_e = edge_stack[pos_e_stack--]; - next = A[prev_e].end_vertex; - (*lowpoint)[(*dfs_nbr)[cur]] = - (*lowpoint)[(*dfs_nbr)[cur]] - < (*lowpoint)[(*dfs_nbr)[next]] ? - (*lowpoint)[(*dfs_nbr)[cur]] - : (*lowpoint)[(*dfs_nbr)[next]]; - - cur_e = A[prev_e].next; - } - /* - we proceed with DFS - */ - } - } - } - mem_free(vertex_stack); - mem_free(edge_stack); - - /* - just for the sake of it, check that all vertices have - been visited - */ -#ifdef ASSERTIONS - for (v = 0; v < n; v++) - { - ASSERT(visited[v]); - } -#endif - mem_free(visited); - - /* - we now order the DFIs wrt lowpoint values: - use bucket sort (linear time) - */ - /* - for each lowpoint value, collect the DFIs (in a t_dlcl) - with that lowpoint value - (IMPORTANT: we want the DFIs since the aim is to rewrite dfs_tree - which stores DFIs and not labels!) - */ - for (v = 0; v < n; v++) - /* - v is taken as a DFI here - */ - { - t_dlcl *r; - - r = embedg_dlcl_rec_new(v); - temp[(*lowpoint)[v]] = - embedg_dlcl_rec_append(temp[(*lowpoint)[v]], r); - } - - /* - concatenate these lists now - */ - lowpoint_list = temp[0]; - for (lp = 1; lp < n; lp++) - { - lowpoint_list = embedg_dlcl_cat(lowpoint_list, temp[lp]); - } - ASSERT(embedg_dlcl_length(lowpoint_list) == n); - - lowpoint_order[0] = lowpoint_list->info; - for (lp = 1; lp < n; lp++) - { - lowpoint_list = embedg_dlcl_list_next(lowpoint_list); - lowpoint_order[lp] = lowpoint_list->info; - } - embedg_dlcl_delete(lowpoint_list); - mem_free(temp); - - IF_DEB( - fprintf(stdout, "dfs_preprocessing, lowpoint_order\n"); - for (lp = 0; lp < n; lp++) - fprintf(stdout, "%d ", lowpoint_order[lp]); - fprintf(stdout, "\n"); - fprintf(stdout, "dfs_preprocessing, lowpoint\n"); - for (lp = 0; lp < n; lp++) - fprintf(stdout, "%d ", (*lowpoint)[lp]); - fprintf(stdout, "\n"); - ) - - /* - we now use this order to rewrite dfs_tree such that - the DFS children of each vertex are ordered wrt lowpoint values - */ - for (lp = 0; lp < n; lp ++) - /* - for each DFI in lowpoint_order[] I know its DFS_parent - from dfs_parent[] -- the rest is then trivial - */ - { - int parent; - - v = lowpoint_order[lp]; - /* - lowpoint_order stores DFIs as does dfs_parent, so the lot - makes sense - */ - parent = (*dfs_parent)[v]; - if (parent != n) - /* - v may be the root of a DFS tree - */ - { - t_dlcl *temp; - - temp = embedg_dlcl_rec_new(v); - - /* - this is where the TE_ holding arrays are useful *sigh* - */ - ASSERT(TE_in_adjl[v] != NIL); - temp->in_adjl = TE_in_adjl[v]; - - ASSERT(TE_twin_in_adjl[v] != NIL); - temp->twin_in_adjl = TE_twin_in_adjl[v]; - - ASSERT(TE_mult[v] != 0 && TE_mult[v] % 2 == 0); - temp->mult = TE_mult[v]; - - new_dfs_tree[parent] = - embedg_dlcl_rec_append(new_dfs_tree[parent], temp); - } - } - mem_free(lowpoint_order); - mem_free(TE_in_adjl); - mem_free(TE_twin_in_adjl); - mem_free(TE_mult); - - /* - some checks are in order here - */ -#ifdef ASSERTIONS - for (v = 0; v < n; v++) - { - ASSERT(embedg_dlcl_length((*dfs_tree)[v]) - == embedg_dlcl_length(new_dfs_tree[v])); - - IF_DEB( - fprintf(stdout, "dfs_preprocessing dfs_tree for %d\n", v); - embedg_dlcl_print((*dfs_tree)[v]); - fprintf(stdout, "dfs_preprocessing new_dfs_tree for %d\n", v); - embedg_dlcl_print(new_dfs_tree[v]); - ); - } -#endif - - sparseg_dlcl_delete(*dfs_tree, n); - *dfs_tree = new_dfs_tree; -} - -/* - * embedding.c - */ - -/* - What: - ***** - - Implementing: - - The graph is planar: we recover the embedding from the VES structure - and check it as well. - (Some of these checks will disappear later) - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_DEB_EMBED(x) {} -#define IF_DEB_CHECK_EMBED(x) {} -#define IF_DEB_FACES(x) {} -#define IF_VERB(x) {} -#define IF_DEB_SCE(x) {} -#define IF_CPU(x) {} - - -/* aproto: header embed_graph_protos.h */ - - -#ifndef PLANAR_IN_MAGMA -#endif - -void -embedg_embedding (t_ver_sparse_rep *V, t_adjl_sparse_rep *A, - t_ver_edge *embed_graph, int n, int e, int nbr_c, - int edge_pos, t_dlcl **mult_edges, t_ver_sparse_rep **vertices, - t_embed_sparse_rep **embedding) - /* - recovering the embedding for the (planar) graph - - - the embedding is returned in vertices and embedding, vertices - indexes embedding, the ordered list of edges - - edges in the embedding are given as their index in A, the graph's - adajacency list - - the nbr of edges in the embedding is given as nbr_e_embed: - this may be different form the original number of edges when the graph - iss not simple - */ -{ - int *ver_orient, nbr_comp, nbr_e_embed; - - IF_CPU( - float sttime; float time_to_now; - - sttime = time_current_user(); - ) - - IF_DEB( - fprintf(stdout, "embedding, begin, which edges have been flipped\n"); - embedg_VES_print_flipped_edges(embed_graph, n, edge_pos); - ) - - IF_DEB( - fprintf(stdout, "embedding, before removing SCE\n"); - embedg_VES_print_bigcomps(embed_graph, n); - ) - - /* - several things to do: - 1. removing the short-cut edges - */ - embedg_remove_SCE(embed_graph, n, edge_pos); - - IF_DEB( - fprintf(stdout, "embedding, after removing SCE\n"); - embedg_VES_print_bigcomps(embed_graph, n); - ) - - /* - 2. computing each vertex's orientation (wrt flipped bicomps) - */ - ver_orient = embedg_vertices_orientation(embed_graph, n); - - - /* - 3. merging the remaining virtual vertices with their - non-virtual counterpart - */ - nbr_comp = embedg_merge_remaining_virtual(embed_graph, n); - /* - actually there is no need to return the nbr of components - from the above function - but let's do it for the sake of it and for possible checking - */ - ASSERT(nbr_c == nbr_comp); - - IF_DEB( - fprintf(stdout, "embedding, after merging of remaining vertices\n"); - ) - - /* - 4. to be on the safe side: check that the embedding is a valid one - - for now, we DIE if not - */ - - if (!embedg_is_embed_valid(embed_graph, n, nbr_comp, edge_pos, - ver_orient, &nbr_e_embed)) - { - mem_free(ver_orient); - DIE(); - } - mem_free(ver_orient); - - ASSERT(nbr_e_embed <= e); - /* - when the graph is not simple, multiple edges and loops are - not in embed_graph[]: they will be added to the final - embedding in embedg_recover_embedding below - */ - - /* - 5. recover the embedding in preparation for the Magma type, - and check it as well - */ - embedg_recover_embedding(V, A, embed_graph, n, e, - mult_edges, vertices, embedding); - if (!embedg_check_recov_embedding(n, e, nbr_comp, - *vertices, A, *embedding)) - { - mem_free(*vertices); - mem_free(*embedding); - - IF_CPU( - fprintf(stdout, "CPU for embedding recovering %f\n", - time_current_user() - sttime); - ) - - DIE(); - } - - IF_DEB_EMBED( - fprintf(stdout, "embedding, original graph and embedding\n"); - sparseg_adjl_print(V, n, A, FALSE); - fprintf(stdout, "\n"); - sparseg_adjl_embed_print(*vertices, n, A, *embedding, - FALSE); - ) - - IF_CPU( - fprintf(stdout, "CPU for embedding recovering %f\n", - time_current_user() - sttime); - ) -} - - -void -embedg_remove_SCE (t_ver_edge *embed_graph, int n, int edge_pos) - /* - remove all the short-cut edges from the embedding - */ -{ - int i, c; - - c = 0; - for (i = 2*n; i <= edge_pos; i += 2) - /* - and edge and its twin occupy consecutive positions in embed_graph: - need only to examine one out of two - (removing an edge also entails removing its twin of course - */ - { - if (embedg_VES_is_short_cut_edge(embed_graph, n, i)) - { - IF_DEB_SCE( - fprintf(stdout, "remove SCE\n"); - embedg_VES_print_edge(embed_graph, n, i); - ) - - embedg_VES_remove_edge(embed_graph, n, i); - c++; - } - } - - IF_DEB_SCE( - fprintf(stdout, "nbr of SCE edges removed %d\n", c); - ) -} - - -int * -embedg_vertices_orientation (t_ver_edge *embed_graph, int n) - /* - for each vertex return its orientation from the - bicomps in embed_graph: - perform a DFS of each bicomp - */ -{ - int i, vv, prod_sign; - int *stack, *ver_orient, to_prev; - - /* - the whole lot makes sense iff the adjacency lists are consistent: - this is a very important issue and it might be the case - that the ASSERT warrants replacement by a DIE - (the check is linear - I think) - */ - ASSERT(embedg_VES_are_adj_lists_consistent(embed_graph, n)); - - ver_orient = (int *) mem_malloc(sizeof(int) * n); - for (i = 0; i < n; i++) - { - ver_orient[i] = CCLOCKW; - } - - /* - create the stack for the DFS - */ - stack = (int *) mem_malloc(sizeof(int) * 3*n); - to_prev = -1; - - IF_DEB( - fprintf(stdout, "vertex orientation, one line (of vert.) for each bicomp\n"); - ) - - /* - now visit all the bicomps, ie, all the virtual vertices - in embed_graph - */ - for (vv = n; vv < 2*n; vv++) - { - int c, cur, cur_e; - boolean NEW_BICOMP; - - if (embed_graph[vv].link[0] == vv) - /* - means that vv is disabled and is not the root of a bicomp - */ - { - continue; - } - - c = vv - n; - IF_DEB( - fprintf(stdout, "%d ", c); - ) - /* - orientation for c (vv is as yet unembedded) is CCLOCKW - - now find the orientation of all its DFS descendants - */ - - if (embed_graph[c].DFS_parent == n) - /* - this means that actually c is an isolated vertex: - we initialise the sign to CCLOCKW - */ - { - prod_sign = CCLOCKW; - } - else - /* - we initialise the sign to CCLOCKW to the sign of c's parent - */ - { - prod_sign = ver_orient[embed_graph[c].DFS_parent]; - } - - /* - we must not forget to set c's sign!! - (won't be done below) - */ - ver_orient[c] = prod_sign; - - NEW_BICOMP = FALSE; - cur = c; - cur_e = embed_graph[cur].link[0]; - ASSERT(embedg_VES_is_edge(n, cur_e)); - - ASSERT(to_prev == -1); - while (TRUE) - { - while (!embedg_VES_is_tree_edge(embed_graph, n, cur_e) - || !embedg_VES_is_vertex(n, - embed_graph[cur_e].neighbour) - || embed_graph[cur_e].neighbour <= cur) - /* - want to find a tree edge [cur, u] - where u is a descendant of cur - */ - { - cur_e = embed_graph[cur_e].link[0]; - - while (cur_e == cur) - /* - back to the vertex where we started from: - no edge has been found: - cur is a leaf, backtrack - */ - { - if (to_prev == -1) - { - NEW_BICOMP = TRUE; - break; - } - prod_sign = stack[to_prev--]; - cur_e = stack[to_prev--]; - /* - must advance one more edge - */ - cur_e = embed_graph[cur_e].link[0]; - cur = stack[to_prev--]; - } - if (NEW_BICOMP) - { - break; - } - } - - if (NEW_BICOMP) - { - break; - } - else - /* - now cur_e is the edge we were looking for, get its sign - */ - { - /* - push on stack the current vertex, the edge where we - stopped the DFS, AND the sign carried by that vertex - - and go down one level in the DFS - */ - stack[++to_prev] = cur; - stack[++to_prev] = cur_e; - stack[++to_prev] = prod_sign; - - cur = embed_graph[cur_e].neighbour; - prod_sign *= embed_graph[cur_e].sign; - ver_orient[cur] = prod_sign; - - cur_e = embed_graph[cur].link[0]; - ASSERT(embedg_VES_is_edge(n, cur_e)); - - IF_DEB( - fprintf(stdout, "%d with sign %d\n", cur, prod_sign); - ) - } - } - - IF_DEB( - fprintf(stdout, "\n"); - ) - } - - IF_DEB( - fprintf(stdout, "vertex orientation\n"); - for (i = 0; i < n; i++) - { - fprintf(stdout, "%d ", ver_orient[i]); - } - fprintf(stdout, "\n"); - ) - - mem_free(stack); - return ver_orient; -} - - -int -embedg_merge_remaining_virtual (t_ver_edge *embed_graph, int n) - /* - after the short-cut edges have been removed and the vertices' - orientation computed, one finishes by merging all - remaining virtual vertices with their virtual counterpart - (without flip of course) - - and use this routine to return the number of disconnected - components of the graph - */ -{ - /* - at this stage it is easy to see that all remaining - virtual vertices are DFS roots (if the graph is not connected) - or cut vertices - */ - - int vv, nbr_comp; - - nbr_comp = 0; - for (vv = n; vv < 2*n; vv++) - { - int v, c; - - - c = vv - n; - v = embed_graph[c].DFS_parent; - - /* - must fish out which virtual vertices are actual roots - of DFS trees (esp. for the disconnected graph case): - roots of DFS trees are those virtual vertices for which - v = embed_graph[c].DFS_parent = n - */ - if (v == n) - { - nbr_comp++; - continue; - } - - if (embed_graph[vv].link[0] == vv) - /* - means that vv is disabled and is not the root of a bicomp - */ - { - continue; - } - - embedg_VES_merge_simple_bicomps(embed_graph, n, - vv, 1, v, 0); - /* - note: - since v is a cut vertex in this intance the bicomp - rooted by vv will be merged without flip; - therefore we could have done - embedg_VES_merge_simple_bicomps(embed_graph, n, - vv, 0, v, 1) - as well, the important thing being that vin != vvout - (see embedg_VES_merge_simple_bicomps) - */ - } - - return nbr_comp; -} - - -int -embedg_nbr_faces (t_ver_edge *embed_graph, int n, int edge_pos, - int *ver_orient, int *nbr_e_embed) - /* - count the number of faces and the number of edges of the embedding - */ -{ - int v, e, f, total_e; - - IF_DEB_FACES( - int v; - - fprintf(stdout, "nbr of faces, the vertices' adj. lists\n"); - for (v = 0; v < n; v++) - embedg_VES_print_adj_list(embed_graph, n, - v, TRUE); - ) - - /* - the following is no more than a quick check -- certainly - not very useful -- or could be done elsewhere - */ - total_e = 0; - for (e = 2*n; e <= edge_pos; e++) - { - if (!embedg_VES_is_short_cut_edge(embed_graph, n, e)) - { - total_e++; - } - } - ASSERT(total_e % 2 == 0); - *nbr_e_embed = total_e / 2; - - /* - I now set each edge's orientation - - QUESTION: do I really need to do this??? - so far, when doing a proper face traversal, the way in which - the adjacency list of an edge must be traversed is given - by the vertex's (in that list) orientation... - So this seems sensible to me huh? - */ - embedg_VES_set_orientation(embed_graph, n, ver_orient); - - /* - I will be using the visited field to enable me to check - if all edges have been traversed - - let's be smart (?!): so far the visited field has been used - and set in the following circumstances: - + initialisation: set to n - + walkup: set to whatever DFI of interest - - so here we set it to MARK_EMBED(n) - */ - f = 0; - for (e = 2*n; e <= edge_pos; e++) - { - if (!embedg_VES_is_short_cut_edge(embed_graph, n, e) - /* - arrghh!!! I must also skip the SCE!!! - */ - && embed_graph[e].visited != MARK_EMBED(n)) - { - int ein; - - IF_DEB_FACES( - fprintf(stdout, "nbr of faces, edges not visited\n"); - embedg_VES_print_edge(embed_graph, n, e); - ) - - ein = embed_graph[e].sign == CCLOCKW ? 0 : 1; - /* - the way I enter e in dependent on its sign: - all the proper face traversal must obviously be done - with the same orientation! - */ - embedg_VES_walk_proper_face(embed_graph, n, e, - ein, - TRUE, - MARK_EMBED(n)); - f++; - } - } - - /* - counting the faces by traversing all the edges does not - account of the face defined by isolated vertices - -- we do that now - - we only need to check which vertices refer to self, ie with - no incident edges - */ - for (v = 0; v < n; v++) - { - if (embed_graph[v].link[0] == v) - { - ASSERT(embed_graph[v].link[1] == v); - f++; - } - } - - return f; -} - - -boolean -embedg_is_embed_valid (t_ver_edge *embed_graph, int n, int nbr_comp, - int edge_pos, int *ver_orient, int *nbr_e_embed) - /* - use Euler's formula to assertain that the embedding is a valid - embedding: - - f = 2 * nbr_comp + nbr_e_embed - n - - */ -{ - int v, f; - - f = embedg_nbr_faces(embed_graph, n, edge_pos, ver_orient, nbr_e_embed); - - IF_DEB_CHECK_EMBED( - fprintf(stdout, "embedding, n: %d\t e: %d\t C: %d\t f: %d\n", - n, nbr_e, nbr_comp, f); - ) - - return f == 2 * nbr_comp + *nbr_e_embed - n ? TRUE : FALSE; -} -/* - * ext_face_walk.c - */ - -/* - What: - ***** - - Implementing the external face walk of a bicomponent. - The concept of an external face --in the context of the VES - data structure-- makes only sense when talking - about a bicomp. - - Recall that a vertex is linked together with the edges - incident from it in a circular (doubly) linked list - (this is the VES structure). - - One particular feature is that if a vertex v is on - the external face of a component and if in the list - we have edges e1, e2 such as e1 -> v -> e2 - then e1 and e2 border the external face. - - In other words, in the circular list of vertex v and edges, - v is ALWAYS between the two edges bordering the external face - - Of course, when v is (maybe) pushed into the internal face - (by embedding of some edge) then we don't care about this any more - (for v that is). - - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} - - -/* aproto: header embed_graph_protos.h */ - - -void -embedg_VES_get_succ_on_ext_face (t_ver_edge *embed_graph, int n, int v, - int vin, boolean MARK, int mark, int *s, int *sin) - /* - find the successor s of v (entered via vin) on the external face - -- also return the direction in which s has been entered - - if MARK true mark the succ. vertex and the edges traversed - with mark (the visited field) - */ -{ - int e, twin; - int vout, ein, eout, tout; - - ASSERT(embedg_VES_is_vertex(n, v) - || embedg_VES_is_virtual_vertex(n, v)); - - IF_DEB( - fprintf(stdout, "get_succ_on_ext_face, of %d:%d\n", v, vin); - ) - - /* - find the direction out of the vertex, and get the edge - */ - vout = vin == 0 ? 1 : 0; - e = embed_graph[v].link[vout]; - if (embedg_VES_is_virtual_vertex(n, v) && e == v) - /* - this can happen if a virtual vertex has been "disabled" - - -- this should not never happen since we can only walk - on the external face of a bicomp! - */ - { - *s = v; - *sin = vin; - return; - } - - /* - otherwise we must have an edge: - note that it is entirely irrelevant if I walk SCEs: - those are precisely there to "jump" over inactive vertices - */ - ASSERT(embedg_VES_is_edge(n, e)); - - /* - get the twin edge - */ - twin = embedg_VES_get_twin_edge(embed_graph, n, e); - - IF_DEB( - fprintf(stdout, "get_succ_on_ext_face, edge [%d, %d]\n", - v, embed_graph[e].neighbour); - fprintf(stdout, "get_succ_on_ext_face, twin edge [%d, %d]\n", - embed_graph[e].neighbour, embed_graph[twin].neighbour); - ) - /* - find which of twin's link links a vertex - */ - tout = embedg_VES_is_vertex(n, embed_graph[twin].link[0]) - || embedg_VES_is_virtual_vertex(n, - embed_graph[twin].link[0]) - ? - 0 : 1; - - /* - get this vertex: this is v's successor on the external face - */ - *s = embed_graph[twin].link[tout]; - - /* - one more thing to do: find the direction in which s was entered - */ - *sin = embed_graph[*s].link[0] == twin ? 0 : 1; - - IF_DEB( - fprintf(stdout, "get_succ_on_ext_face, succ is %d:%d\n", - *s, *sin); - ) - /* - a special case: when the bicomp is a singleton bicomp - (ie a single edge) - */ - if (embed_graph[*s].link[0] == (embed_graph[*s].link[1])) - { - ASSERT(embed_graph[*s].link[0] = twin); - *sin = vin; - } - - /* - finally, mark the vertex and edges if so requested - */ - if (MARK) - { - embed_graph[*s].visited = mark; - embed_graph[e].visited = mark; - embed_graph[twin].visited = mark; - } -} - -void -embedg_VES_get_succ_active_on_ext_face (t_ver_edge *embed_graph, int n, - int v, int w, int win, boolean MARK, int mark, int *s, int *sin) - /* - find the ACTIVE (wrt v) successor s of w (entered via win) - on the external face - -- also return the direction in which s has been entered - - if MARK true mark the succ. vertex (and the edge) - with mark (the visited field) - */ -{ - /* - simply repeatedly calls embedg_VES_get_succ_on_ext_face - until an active vertex is found - */ - ASSERT(embedg_VES_is_vertex(n, w) - || embedg_VES_is_virtual_vertex(n, w)); - - embedg_VES_get_succ_on_ext_face(embed_graph, n, - w, win, MARK, mark, s, sin); - while (embedg_VES_is_ver_inactive(embed_graph, n, v, *s)) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, - *s, *sin, MARK, mark, s, sin); - } - ASSERT(!embedg_VES_is_ver_inactive(embed_graph, n, v, *s)); -} - -void -embedg_VES_get_succ_ext_active_on_ext_face (t_ver_edge *embed_graph, int n, - int v, int w, int win, boolean MARK, int mark, int *s, int *sin) - /* - find the externally active (wrt v) successor s of w (entered via win) - on the external face - -- also return the direction in which s has been entered - - if MARK true mark the succ. vertex (and the edge) - with mark (the visited field) - */ -{ - ASSERT(embedg_VES_is_vertex(n, w) - || embedg_VES_is_virtual_vertex(n, w)); - - embedg_VES_get_succ_on_ext_face(embed_graph, n, - w, win, MARK, mark, s, sin); - while (!embedg_VES_is_ver_ext_active(embed_graph, n, v, *s)) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, - *s, *sin, MARK, mark, s, sin); - } - ASSERT(embedg_VES_is_ver_ext_active(embed_graph, n, v, *s)); -} - -void -embedg_VES_get_succ_pertinent_on_ext_face (t_ver_edge *embed_graph, int n, - int v, int w, int win, boolean MARK, int mark, int *s, int *sin) - /* - find the pertinent (wrt v) successor s of w (entered via win) - on the external face - -- also return the direction in which s has been entered - - if MARK true mark the succ. vertex (and the edge) - with mark (the visited field) - */ -{ - ASSERT(embedg_VES_is_vertex(n, w) - || embedg_VES_is_virtual_vertex(n, w)); - - embedg_VES_get_succ_on_ext_face(embed_graph, n, - w, win, MARK, mark, s, sin); - while (!embedg_VES_is_ver_pertinent(embed_graph, n, v, *s)) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, - *s, *sin, MARK, mark, s, sin); - } - ASSERT(embedg_VES_is_ver_pertinent(embed_graph, n, v, *s)); -} - -/* - * mark_kur.c - */ - -/* - What: - ***** - - Implementing: - - Marking the Kuratowski obstruction (in the VES structure): - this we do once we know which minor we are talking about - (see isolator.c). - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_VERB(x) {} -#define IF_DEB_TREE(x) {} -#define IF_DEB_EDGES(x) {} -#define IF_CPU(x) {} - - - -/* aproto: header embed_graph_protos.h */ - -/* aproto: beginstatic -- don't touch this!! */ -static void embedg_VES_walk_mark_part_ext_face (t_ver_edge *, int, int, int, int, int, int); -static void embedg_VES_walk_mark_ext_face (t_ver_edge *, int, int, int); -static void embedg_VES_walk_mark_part_proper_face (t_ver_edge *, int, int, int, int, int); -static boolean embedg_VES_is_part_ext_face_marked (t_ver_edge *, int, int, int, int, int, int); -static void embedg_get_u_x (t_ver_edge *, int, int, int, int *); -static int embedg_get_least_neigh (t_dlcl **, t_dlcl **, int, int, int); -static void embedg_add_mark_u_x (t_dlcl **, t_dlcl **, t_ver_edge *, int, int *, int, int, int *, int); -static void embedg_mark_tree_path (t_ver_edge *, int, int, int, int); -static void embedg_add_mark_v_w (t_dlcl **, t_dlcl **, t_ver_edge *, int, int *, int, int, int); -static void embedg_add_mark_v_w_for_B (t_dlcl **, t_dlcl **, t_ver_edge *, int, int *, int, int, int *, int); -static void embedg_mark_x_y_path (t_ver_edge *, int, int *, int *, int, int); -/* aproto: endstatic -- don't touch this!! */ - -#ifndef PLANAR_IN_MAGMA -#endif - - - -static void -embedg_VES_walk_mark_part_ext_face (t_ver_edge *embed_graph, int n, - int v, int vin, int from, int to, int mark) - /* - walk & mark the external face: - walk in the direction vin -> v -> vout and mark - */ -{ - int cur, curin, next, nextin; - - embed_graph[from].visited = mark; - embed_graph[to].visited = mark; - - IF_DEB( - fprintf(stdout, "part. ext face marked\t"); - fprintf(stdout, "%d\t", from); - ) - - next = cur = v; - curin = vin; - while (next != from) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, cur, curin, - FALSE, 0, &next, &nextin); - cur = next; - curin = nextin; - } - next = n; - while (next != to) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, cur, curin, - TRUE, mark, &next, &nextin); - cur = next; - curin = nextin; - - IF_DEB( - fprintf(stdout, "%d\t", next); - ) - } - IF_DEB( - fprintf(stdout, "\n"); - ) -} - -static void -embedg_VES_walk_mark_ext_face (t_ver_edge *embed_graph, int n, int v, int mark) - /* - walk & mark the external face, starting & ending at vertex v - */ -{ - embedg_VES_walk_mark_part_ext_face(embed_graph, n, v, 0, v, v, - mark); -} - - - -static void -embedg_VES_walk_mark_part_proper_face (t_ver_edge *embed_graph, int n, - int from_e, int from_ein, int to, int mark) - /* - walk & mark a proper face starting at EDGE from_e and ending - at VERTEX to - - walk in the direction from_ein -> from_e -> to and mark - everything in between - */ -{ - int s, cur_e, cur_ein, next_e, next_ein; - - next_e = s = n; /* this is an invalid value for an edge/vertex */ - - cur_e = from_e; - cur_ein = from_ein; - while (s != to) - { - ASSERT(embedg_VES_is_edge(n, cur_e)); - ASSERT(!embedg_VES_is_short_cut_edge(embed_graph, - n, cur_e)); - - embedg_VES_get_succ_on_proper_face(embed_graph, n, - cur_e, cur_ein, - TRUE, mark, - &s, &next_e, &next_ein); - cur_e = next_e; - cur_ein = next_ein; - } -} - - - -static boolean -embedg_VES_is_part_ext_face_marked (t_ver_edge *embed_graph, int n, int v, - int vin, int from, int to, int mark) - /* - simple check to see if all the vertices on the external - face walk starting at vin -> v -> vout are marked - (with mark) - */ -{ - int cur, curin, next, nextin; - - if (embed_graph[from].visited != mark || embed_graph[to].visited != mark) - return FALSE; - - cur = v; - curin = vin; - next = n; - while (next != from) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, cur, curin, - FALSE, 0, &next, &nextin); - cur = next; - curin = nextin; - } - while (next != to) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, cur, curin, - FALSE, 0, &next, &nextin); - if (embed_graph[next].visited != mark) - return FALSE; - - cur = next; - curin = nextin; - } - - return TRUE; -} - - -boolean -embedg_VES_is_ext_face_marked (t_ver_edge *embed_graph, int n, int v, int mark) - /* - simple check to see if all the vertices on the external - face walk starting/ending at v are marked (with mark) - */ -{ - return embedg_VES_is_part_ext_face_marked(embed_graph, n, v, 0, - v, v, mark); -} - - -static void -embedg_get_u_x (t_ver_edge *embed_graph, int n, int v, int x, int *u_x) - /* - x is an externally active vertex (wrt v): - we want u_x, the lowest point of "attachement" for - the unembedded directed edge [x, u_x] - */ -{ - int c; - t_dlcl *child_list; - - ASSERT(embedg_VES_is_ver_ext_active(embed_graph, n, v, x)); - if (embed_graph[x].least_ancestor < v) - /* - then there is a single unembedded back edge (u_x, x), - u_x an ancestor of v - */ - { - *u_x = embed_graph[x].least_ancestor; - return; - } - - /* - else there is a tree path x to d_x and an - unembedded back edge (u_x, d_x) - - get the lowpoint of the first elt. in separated_DFS_child_list of x - */ - child_list = embed_graph[x].separated_DFS_child_list; - ASSERT(!embedg_dlcl_is_empty(child_list)); - c = child_list->info; - *u_x = embed_graph[c].lowpoint; -} - -static int -embedg_get_least_neigh (t_dlcl **dfs_tree, t_dlcl **back_edges, - int n, int v, int c) - /* - get the least neighbour of v >= c, ie a vertex in the sub tree - rooted by c - - somehow this must always succeed - */ -{ - int least_n; - t_dlcl *tree_l, *back_l, *p; - - /* - neighbours are found in either dfs_tree[v] or back_edges[v] - */ - - tree_l = dfs_tree[v]; - back_l = back_edges[v]; - ASSERT(!embedg_dlcl_is_empty(tree_l) || !embedg_dlcl_is_empty(back_l)); - - least_n = n; /* ok, invalid value for any neighbour */ - p = tree_l; - if (!embedg_dlcl_is_empty(p)) - { - if (p->info >= c) - { - least_n = p->info < least_n ? p->info : least_n; - } - p = embedg_dlcl_list_next(p); - while (p != tree_l) - { - if (p->info >= c) - { - least_n = p->info < least_n ? p->info : least_n; - } - p = embedg_dlcl_list_next(p); - } - } - p = back_l; - if (!embedg_dlcl_is_empty(p)) - { - if (p->info >= c) - { - least_n = p->info < least_n ? p->info : least_n; - } - p = embedg_dlcl_list_next(p); - while (p != back_l) - { - if (p->info >= c) - { - least_n = p->info < least_n ? p->info : least_n; - } - p = embedg_dlcl_list_next(p); - } - } - - ASSERT(least_n >= c); - /* - this is so because of the context where this function is called from - */ - return least_n; -} - -static void -embedg_add_mark_u_x (t_dlcl **dfs_tree, t_dlcl **back_edges, - t_ver_edge *embed_graph, int n, int *edge_pos, int v, - int x, int *u_x, int mark) - /* - marking a Kuratowski homeomorph: - - marking and adding the unembedded dotted edge (u, x), - x an ext. active vertex wrt v - */ -{ - int c, d_x; - t_dlcl *child_list; - - ASSERT(embedg_VES_is_ver_ext_active(embed_graph, n, v, x)); - if (embed_graph[x].least_ancestor < v) - /* - then there is a single unembedded back edge (u_x, x), - u_x an ancestor of v - */ - { - *u_x = embed_graph[x].least_ancestor; - embed_graph[x].visited = mark; - embed_graph[*u_x].visited = mark; - embedg_VES_add_edge(embed_graph, n, edge_pos, *u_x, x, - TRUE, mark); - return; - } - - /* - else there is a tree path x to d_x and an - unembedded back edge (u_x, d_x) - - get the lowpoint of the first elt. in separated_DFS_child_list of x - */ - child_list = embed_graph[x].separated_DFS_child_list; - ASSERT(!embedg_dlcl_is_empty(child_list)); - c = child_list->info; - *u_x = embed_graph[c].lowpoint; - - /* - search for the least neighbour of *u_x >= c, - that is in the subtree rooted by c - */ - d_x = embedg_get_least_neigh(dfs_tree, back_edges, n, *u_x, c); - ASSERT(d_x >= c); - /* - this must be true since u_x is incident to a descendant of x - (remember: x is externally active) - */ - - /* - mark the DFS tree path from d_x to x - */ - embedg_mark_tree_path(embed_graph, n, d_x, x, mark); - /* - add the unembedded (u_x, d_x) edge - */ - embedg_VES_add_edge(embed_graph, n, edge_pos, *u_x, d_x, - TRUE, mark); -} - -static void -embedg_mark_tree_path (t_ver_edge *embed_graph, int n, int d_x, int x, int mark) - /* - marking the DFS tree path d_x...x where x is an ancestor of d_x - */ -{ - int cur_v, te, twe; - - ASSERT(d_x >= x); - - cur_v = d_x; - - while (cur_v != x) - { - embed_graph[cur_v].visited = mark; - te = embed_graph[cur_v].link[0]; - ASSERT(embedg_VES_is_edge(n, te)); - while (!embedg_VES_is_tree_edge(embed_graph, n, te) - || (embed_graph[te].neighbour > cur_v - && embed_graph[te].neighbour != cur_v + n)) - /* - want to find a tree edge incident to an ancestor of d_x: - given that d_x..x is a tree path, we MUST find such an edge! - - note also that I must take account of the fact that - [te].neighbour could be a virtual vertex, in which case - it can only be cur_v + n! - */ - { - te = embed_graph[te].link[0]; - } - ASSERT(embedg_VES_is_tree_edge(embed_graph, n, te)); - ASSERT(embed_graph[te].neighbour == embed_graph[cur_v].DFS_parent - || embed_graph[te].neighbour == cur_v + n); - - embed_graph[te].visited = mark; - twe = embedg_VES_get_twin_edge(embed_graph, n, te); - embed_graph[twe].visited = mark; - - /* - want only to deal with real vertices instead of virtual vertices - */ - cur_v = embed_graph[te].neighbour < cur_v ? - embed_graph[te].neighbour : embed_graph[cur_v].DFS_parent; - } - embed_graph[x].visited = MARK_MINORS(n); -} - - -static void -embedg_add_mark_v_w (t_dlcl **dfs_tree, t_dlcl **back_edges, - t_ver_edge *embed_graph, int n, int *edge_pos, int v, int w, int mark) - /* - marking a Kuratowski homeomorph: - - marking and adding the unembedded dotted edge (v, w), - w is pertinent wrt v - */ -{ - int vw, c, d_w; - t_dlcl *bicomp_list; - - if (embed_graph[w].adjacent_to == v) - /* - then there is a single unembedded back edge (v, w) - w an ancestor of w - */ - { - embed_graph[v].visited = mark; - embed_graph[w].visited = mark; - embedg_VES_add_edge(embed_graph, n, edge_pos, v, w, - TRUE, mark); - return; - } - - /* - else there is a tree path w to d_w and an - unembedded back edge (v, d_w) - - get the last elt in w's bicomp list - */ - bicomp_list = embed_graph[w].pertinent_bicomp_list; - ASSERT(!embedg_dlcl_is_empty(bicomp_list)); - vw = (embedg_dlcl_list_last(bicomp_list))->info; - c = vw - n; - - /* - search for the least neighbour of v >= c, - that is in the subtree rooted by c - */ - d_w = embedg_get_least_neigh(dfs_tree, back_edges, n, v, c); - ASSERT(d_w >= c); - /* - this must be true since v is incident to a descendant of w - (remember: w is pertinent) - */ - - /* - mark the DFS tree path from d_w to w - */ - embedg_mark_tree_path(embed_graph, n, d_w, w, mark); - /* - add the unembedded (d_w, v) edge - */ - embedg_VES_add_edge(embed_graph, n, edge_pos, d_w, v, - TRUE, mark); -} - - -static void -embedg_add_mark_v_w_for_B (t_dlcl **dfs_tree, t_dlcl **back_edges, - t_ver_edge *embed_graph, int n, int *edge_pos, int v, int w, - int *u_z, int mark) - /* - marking a Kuratowski homeomorph: - - marking and adding the unembedded dotted edge (v, w) for minor B: - w is pertinent wrt v - */ -{ - int vz, z, d_z, d_w; - t_dlcl *bicomp_list; - - /* - get the last elt in w's bicomp list - */ - bicomp_list = embed_graph[w].pertinent_bicomp_list; - ASSERT(!embedg_dlcl_is_empty(bicomp_list)); - vz = (embedg_dlcl_list_last(bicomp_list))->info; - z = vz - n; - - /* - get the lowpoint of z - */ - *u_z = embed_graph[z].lowpoint; - - /* - search for the least neighbour of *u_z >= z, - that is in the subtree rooted by c - */ - d_z = embedg_get_least_neigh(dfs_tree, back_edges, n, *u_z, z); - ASSERT(d_z >= z); - /* - this must be true since u_z is incident to z or a descendant of z - */ - - /* - now do the same for neighbours of v - */ - d_w = embedg_get_least_neigh(dfs_tree, back_edges, n, v, z); - ASSERT(d_w >= z); - /* - this must be true since v is incident to a descendant of w - (remember: w is pertinent) - */ - - /* - mark the DFS tree path from d_w to w - */ - embedg_mark_tree_path(embed_graph, n, d_w, w, mark); - /* - mark the DFS tree path from d_z to z - */ - embedg_mark_tree_path(embed_graph, n, d_z, z, mark); - /* - add & mark the edges (u_z, d_z), (v, d_w) - */ - embedg_VES_add_edge(embed_graph, n, edge_pos, *u_z, d_z, - TRUE, mark); - embedg_VES_add_edge(embed_graph, n, edge_pos, v, d_w, - TRUE, mark); -} - -static void -embedg_mark_x_y_path (t_ver_edge *embed_graph, int n, int *path_v, - int *path_e, int nbr_v, int mark) -{ - int i; - - /* - have a look at embedg_iso_get_highest_x_y_path - to see that path_e[0] is a dummy - - (note: path_v and path_e contain nbr_v + 1 elts!) - */ - embed_graph[path_v[0]].visited = mark; - for (i = 1; i <= nbr_v; i++) - { - int e, twin; - - embed_graph[path_v[i]].visited = mark; - e = path_e[i]; - twin = embedg_VES_get_twin_edge(embed_graph, n, e); - embed_graph[e].visited = - embed_graph[twin].visited = mark; - } -} - -void -embedg_mark_minor_A (t_dlcl **dfs_tree, t_dlcl **back_edges, - t_ver_edge *embed_graph, int n, int *edge_pos, int v, int c, int vr) -{ - int r, r_c, x, y, w, u_x, u_y, u; - - ASSERT(embedg_VES_is_virtual_vertex(n, vr)); - r_c = vr - n; - r = embed_graph[r_c].DFS_parent; - - /* - find the ext. active x & y, and the pertinent w, - and mark the external face of the bicomp rooted at vr - */ - embedg_iso_get_x_y_w(embed_graph, n, v, r, r_c, - MARK_MINORS(n), - MARK_MINORS(n), MARK_MINORS(n), &x, &y, &w); - - /* - mark the edges (u, x), (u, y), (v, w) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, x, &u_x, - MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, y, &u_y, - MARK_MINORS(n)); - embedg_add_mark_v_w(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, w, - MARK_MINORS(n)); - - /* - mark the tree path from r to min(u_x, u_y) - */ - u = u_x <= u_y ? u_x : u_y; - embedg_mark_tree_path(embed_graph, n, r, u, MARK_MINORS(n)); - - IF_DEB( - fprintf(stdout, "mark minor A\n"); - fprintf(stdout, "v %d\t c %d\t r %d\t r_c %d\t x %d\t y %d\t w %d\t u_x %d\t u_y %d\n", - v, c, r, r_c, x, y, w, u_x, u_y); - ) -} - -void -embedg_mark_minor_B (t_dlcl **dfs_tree, t_dlcl **back_edges, - t_ver_edge *embed_graph, int n, int *edge_pos, int v, - int c, int x, int y, int w) -{ - int vv, u_x, u_y, vz, u_z, u_max, u_min; - - vv = c + n; - - /* - mark the external face of the bicomp rooted by v^c - */ - embedg_VES_walk_mark_ext_face(embed_graph, n, vv, MARK_MINORS(n)); - ASSERT(embedg_VES_is_ext_face_marked(embed_graph, n, vv, - MARK_MINORS(n))); - - /* - mark the edges (u, x), (u, y) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, x, &u_x, - MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, y, &u_y, - MARK_MINORS(n)); - - /* - mark the dotted edges (v, w), (v, u) - */ - embedg_add_mark_v_w_for_B(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, w, - &u_z, MARK_MINORS(n)); - - /* - mark the tree path from max(u_x, u_y, u_z) to min(u_x, u_y, u_z) - */ - u_max = u_x > u_y ? u_x : u_y; - u_max = u_max > u_z ? u_max : u_z; - u_min = u_x < u_y ? u_x : u_y; - u_min = u_min < u_z ? u_min : u_z; - embedg_mark_tree_path(embed_graph, n, u_max, u_min, MARK_MINORS(n)); - - IF_DEB( - fprintf(stdout, "mark minor B\n"); - fprintf(stdout, "v %d\t c %d\t x %d\t y %d\t w %d\t u_x %d\t u_y %d\t u_z %d\n", - v, c, x, y, w, u_x, u_y, u_z); - ) -} - -void -embedg_mark_minor_C (t_dlcl **dfs_tree, t_dlcl **back_edges, - t_ver_edge *embed_graph, int n, int *edge_pos, int v, - int c, int x, int y, int w, int *path_v, int *path_e, - int nbr_v, boolean px_attached_high, boolean py_attached_high) -{ - int vv, p_x, p_y, u_x, u_y, u; - - vv = c + n; - p_x = path_v[0]; - p_y = path_v[nbr_v]; - /* - see embedg_iso_get_highest_x_y_path for the above - */ - - if (px_attached_high) - /* - mark the external face: - - from v^c to p_y if py_attached_high - - from v^c to y if !py_attached_high - - not too sure about that one.... - - from v^c to p_y: so vvin = 0, - in x's direction - */ - { - if (py_attached_high) - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 0, - vv, p_y, MARK_MINORS(n)); - else - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 0, - vv, y, MARK_MINORS(n)); - } - else - /* - symmetric case: - mark the external face from v^c to p_x: so vvin = 1, - in y's direction - */ - { - if (px_attached_high) - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 1, - vv, p_x, MARK_MINORS(n)); - else - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 1, - vv, x, MARK_MINORS(n)); - } - - /* - mark the edges (u, x), (u, y), (v, w) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, x, &u_x, - MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, y, &u_y, - MARK_MINORS(n)); - embedg_add_mark_v_w(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, w, - MARK_MINORS(n)); - - /* - mark the tree path from v to min(u_x, u_y) - */ - u = u_x <= u_y ? u_x : u_y; - embedg_mark_tree_path(embed_graph, n, v, u, MARK_MINORS(n)); - - /* - finally, mark the x-y path, ie the vertices in path_v - and the edges in path_e - */ - embedg_mark_x_y_path(embed_graph, n, path_v, path_e, nbr_v, - MARK_MINORS(n)); - - IF_DEB( - fprintf(stdout, "mark minor C p_x high %d\t p_y high %d\n", - px_attached_high, py_attached_high); - fprintf(stdout, "v %d\t c %d\t x %d\t y %d\t w %d\t p_x %d\t p_y %d\t u_x %d\t u_y %d\n", - v, c, x, y, w, p_x, p_y, u_x, u_y); - ) -} - -void -embedg_mark_minor_D (t_dlcl **dfs_tree, t_dlcl **back_edges, - t_ver_edge *embed_graph, int n, int *edge_pos, int v, - int c, int x, int y, int w, int *path_v, int *path_e, - int nbr_v, int entry_in_path_e) -{ - int i, vv, p_x, p_y, u_x, u_y, u; - - vv = c + n; - p_x = path_v[0]; - p_y = path_v[nbr_v]; - /* - see embedg_iso_get_highest_x_y_path for the above - */ - - /* - mark the lower external face from x to y: we can walk in - either direction - */ - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 0, - x, y, MARK_MINORS(n)); - - /* - mark the internal path which goes from the x-y path to v - - since I haven't stored those vertices/edges I assume - that a proper face walk should suffice - - BUT a walk that say starts at p_x and ends at vv, - that is, a walk starting at path_e[1] entered from entry_in_path_e - (recall that path_e[0] is a dummy) - */ - embedg_VES_walk_mark_part_proper_face(embed_graph, n, - path_e[1], entry_in_path_e, - vv, MARK_MINORS(n)); - - /* - a note of caution here: - ALWAYS mark external/internal faces before adding any other edges: - since adding edges destroys the faces' consistency - (adding edges makes no sense of face since we are in a non-planar - situation) - */ - /* - mark the edges (u, x), (u, y), (v, w) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, x, &u_x, - MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, y, &u_y, - MARK_MINORS(n)); - embedg_add_mark_v_w(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, w, - MARK_MINORS(n)); - - /* - mark the tree path from v to min(u_x, u_y) - */ - u = u_x <= u_y ? u_x : u_y; - embedg_mark_tree_path(embed_graph, n, v, u, MARK_MINORS(n)); - - /* - mark the x-y path, ie the vertices in path_v - and the edges in path_e - */ - embedg_mark_x_y_path(embed_graph, n, path_v, path_e, nbr_v, - MARK_MINORS(n)); - - IF_DEB( - fprintf(stdout, "mark minor D\n"); - fprintf(stdout, "v %d\t c %d\t x %d\t y %d\t w %d\t p_x %d\t p_y %d\t u_x %d\t u_y %d\n", - v, c, x, y, w, p_x, p_y, u_x, u_y); - ) -} - - - - -minor -embedg_mark_minor_E (t_dlcl **dfs_tree, t_dlcl **back_edges, - t_ver_edge *embed_graph, int n, int *edge_pos, int v, - int c, int x, int y, int w, int *path_v, int *path_e, int nbr_v) - /* - while marking minor E return which of the minors we are dealing with - */ -{ - int vv, p_x, p_y, u_x, u_y, u_w, u, u_max, u_min; - - vv = c + n; - p_x = path_v[0]; - p_y = path_v[nbr_v]; - /* - see embedg_iso_get_highest_x_y_path for the above - */ - - if (!embedg_VES_is_ver_ext_active(embed_graph, n, v, w)) - /* - minor E1 case: we must find an ext. active z, distinct from w, - on the external face p_x..w..p_y - */ - { - int s, sin, cur, curin, z, u_z, u_xy; - - s = n; - /* - start searching at vv entered from 0 (in x's direction) - -- we MUST reach p_x - hopefully! :) - */ - cur = vv; - curin = 0; - while (s != p_x) - /* - first advance to p_x: we are sure of reaching it - */ - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, - cur, curin, - FALSE, 0, &s, &sin); - cur = s; - curin = sin; - } - - /* - continue the walk on the external face: - stop if either s is ext. active OR s == w - - we'll mark the lot later on - */ - while ( - !(embedg_VES_is_ver_ext_active(embed_graph, n, v, - s) - && s != p_x) - && s != w) - { - embedg_VES_get_succ_on_ext_face(embed_graph, n, cur, curin, - FALSE, 0, &s, &sin); - cur = s; - curin = sin; - } - /* - now we must decide which symmetry we are in - */ - if (embedg_VES_is_ver_ext_active(embed_graph, n, v, s)) - /* - z is between x and w (recall that w is NOT ext. active) - */ - { - z = s; - ASSERT(z != w); - - /* - mark the external face from v^c to y in x's direction - */ - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 0, - vv, y, MARK_MINORS(n)); - /* - add/mark dotted edge (u, y) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, y, &u_xy, MARK_MINORS(n)); - } - else - /* - this is the symmetric case: must find z between w and p_y - */ - { - ASSERT(s == w); - embedg_VES_get_succ_ext_active_on_ext_face(embed_graph, n, - v, cur, curin, - FALSE, 0, - &s, &sin); - /* - and z is distinct from p_y! - */ - z = s; - ASSERT(z != p_y); - - /* - mark the external face from v^c to x in y's direction - */ - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 1, - vv, x, MARK_MINORS(n)); - /* - add/mark dotted edge (u, x) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, x, &u_xy, MARK_MINORS(n)); - } - /* - now the marked bits which are common to both cases: - dotted edges (u, z), (v, w), the x-y path, - the tree path (v, min(u_xy, u_z)) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, z, &u_z, MARK_MINORS(n)); - embedg_add_mark_v_w(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, w, - MARK_MINORS(n)); - - embedg_mark_x_y_path(embed_graph, n, path_v, path_e, nbr_v, - MARK_MINORS(n)); - - u = u_z <= u_xy ? u_z : u_xy; - embedg_mark_tree_path(embed_graph, n, v, u, MARK_MINORS(n)); - - IF_DEB( - fprintf(stdout, "mark minor E1\n"); - fprintf(stdout, "v %d\t c %d\t x %d\t y %d\t z %d\t w %d\t p_x %d\t p_y %d\t u_xy %d\t u_z %d\n", - v, c, x, y, z, w, p_x, p_y, u_xy, u_z); - ) - - return MINOR_E1; - } - - /* - in all other cases we get u_x, u_y, u_w back - from the ext. active vertices x, y, w resp. - - again, I CANNOT embed these edges now since that would destroy - my external/internal faces - */ - - embedg_get_u_x(embed_graph, n, v, x, &u_x); - embedg_get_u_x(embed_graph, n, v, y, &u_y); - embedg_get_u_x(embed_graph, n, v, w, &u_w); - - if (u_w > u_x && u_w > u_y) - /* - minor E2 case: - we mark the whole external face rooted by v^c - and the tree path (v, min(u_x, u_y)) - */ - { - embedg_VES_walk_mark_ext_face(embed_graph, n, vv, - MARK_MINORS(n)); - u = u_x <= u_y ? u_x : u_y; - embedg_mark_tree_path(embed_graph, n, v, u, MARK_MINORS(n)); - - /* - embed dotted edges (u, x), (u, y) & (u, w) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, x, &u_x, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, y, &u_y, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, w, &u_w, MARK_MINORS(n)); - - IF_DEB( - fprintf(stdout, "mark minor E2\n"); - fprintf(stdout, "v %d\t c %d\t x %d\t y %d\t w %d\t p_x %d\t p_y %d\t u_x %d\t u_y %d\t u_w %d\n", - v, c, x, y, w, p_x, p_y, u_x, u_y, u_w); - ) - - return MINOR_E2; - } - - /* - two more things common to all remaining cases: - - mark the dotted edge (v, w) (but we MUST do that later) - - mark the x-y path - */ - embedg_mark_x_y_path(embed_graph, n, path_v, path_e, nbr_v, - MARK_MINORS(n)); - - if (u_x < u_y && u_w < u_y) - /* - minor E3 case: one of the symmetric cases: - the external face rooted at v_c from vv to x (in x's direction) - the external face rooted at v_c from y to w (in y's direction) - the (v, min(u_w, u_x)) tree path - */ - { - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 0, - vv, p_x, MARK_MINORS(n)); - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 1, - y, w, MARK_MINORS(n)); - - u = u_x <= u_w ? u_x : u_w; - embedg_mark_tree_path(embed_graph, n, v, u, MARK_MINORS(n)); - - /* - embed dotted edges (u, x), (u, y), (u, w), (v, w) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, x, &u_x, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, y, &u_y, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, w, &u_w, MARK_MINORS(n)); - embedg_add_mark_v_w(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, w, - MARK_MINORS(n)); - - IF_DEB( - fprintf(stdout, "mark minor E3/a\n"); - fprintf(stdout, "v %d\t c %d\t x %d\t y %d\t w %d\t p_x %d\t p_y %d\t u_x %d\t u_y %d\t u_w %d\n", - v, c, x, y, w, p_x, p_y, u_x, u_y, u_w); - ) - - return MINOR_E3; - } - if (u_y < u_x && u_w < u_x) - /* - minor E3 case: the other symmetric case: - the external face rooted at v_c from vv to y (in y's direction) - the external face rooted at v_c from x to w (in x's direction) - the (v, min(u_w, u_y)) tree path - */ - { - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 1, - vv, p_y, MARK_MINORS(n)); - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 0, - x, w, MARK_MINORS(n)); - - u = u_y <= u_w ? u_y : u_w; - embedg_mark_tree_path(embed_graph, n, v, u, MARK_MINORS(n)); - - /* - embed dotted edges (u, x), (u, y), (u, w), (v, w) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, x, &u_x, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, y, &u_y, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, w, &u_w, MARK_MINORS(n)); - embedg_add_mark_v_w(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, w, - MARK_MINORS(n)); - - IF_DEB( - fprintf(stdout, "mark minor E3/b\n"); - fprintf(stdout, "v %d\t c %d\t x %d\t y %d\t w %d\t p_x %d\t p_y %d\t u_x %d\t u_y %d\t u_w %d\n", - v, c, x, y, w, p_x, p_y, u_x, u_y, u_w); - ) - - return MINOR_E3; - } - - if (p_x != x) - /* - minor E4 case: one of the symmetric cases: - the external face rooted at v_c from vv to w (in x's direction) - the external face rooted at v_c from vv to p_y (in y's direction) - the tree path from max(u_x, u_y, u_w) to min(u_x, u_y, u_w) - */ - { - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 0, - vv, w, MARK_MINORS(n)); - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 1, - vv, p_y, MARK_MINORS(n)); - - u_max = u_x > u_y ? u_x : u_y; - u_max = u_max > u_w ? u_max : u_w; - u_min = u_x < u_y ? u_x : u_y; - u_min = u_min < u_w ? u_min : u_w; - embedg_mark_tree_path(embed_graph, n, u_max, u_min, MARK_MINORS(n)); - - /* - embed dotted edges (u, x), (u, y), (u, w), (v, w) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, x, &u_x, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, y, &u_y, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, w, &u_w, MARK_MINORS(n)); - embedg_add_mark_v_w(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, w, - MARK_MINORS(n)); - - IF_DEB( - fprintf(stdout, "mark minor E4/a\n"); - fprintf(stdout, "v %d\t c %d\t x %d\t y %d\t w %d\t p_x %d\t p_y %d\t u_x %d\t u_y %d\t u_w %d\n", - v, c, x, y, w, p_x, p_y, u_x, u_y, u_w); - ) - - return MINOR_E4; - } - if (p_y != y) - /* - minor E4 case: the other symmetric case: - the external face rooted at v_c from vv to w (in y's direction) - the external face rooted at v_c from vv to x (in x's direction) - (here p_x = x!) - the tree path from max(u_x, u_y, u_w) to min(u_x, u_y, u_w) - */ - { - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 1, - vv, w, MARK_MINORS(n)); - embedg_VES_walk_mark_part_ext_face(embed_graph, n, vv, 0, - vv, x, MARK_MINORS(n)); - - u_max = u_x > u_y ? u_x : u_y; - u_max = u_max > u_w ? u_max : u_w; - u_min = u_x < u_y ? u_x : u_y; - u_min = u_min < u_w ? u_min : u_w; - embedg_mark_tree_path(embed_graph, n, u_max, u_min, MARK_MINORS(n)); - - /* - embed dotted edges (u, x), (u, y), (u, w), (v, w) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, x, &u_x, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, y, &u_y, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, w, &u_w, MARK_MINORS(n)); - embedg_add_mark_v_w(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, w, - MARK_MINORS(n)); - - IF_DEB( - fprintf(stdout, "mark minor E$/b\n"); - fprintf(stdout, "v %d\t c %d\t x %d\t y %d\t w %d\t p_x %d\t p_y %d\t u_x %d\t u_y %d\t u_w %d\n", - v, c, x, y, w, p_x, p_y, u_x, u_y, u_w); - ) - - return MINOR_E4; - } - - /* - this is the last case for minor E: when the homeomorph is K5 - - mark the whole external face rooted at v^c - mark the tree path from v to min(u_x, u_y, u_w) - */ - - embedg_VES_walk_mark_ext_face(embed_graph, n, vv, MARK_MINORS(n)); - - u = u_x < u_y ? u_x : u_y; - u = u < u_w ? u : u_w; - embedg_mark_tree_path(embed_graph, n, v, u, MARK_MINORS(n)); - - /* - embed dotted edges (u, x), (u, y), (u, w), (v, w) - */ - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, x, &u_x, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, y, &u_y, MARK_MINORS(n)); - embedg_add_mark_u_x(dfs_tree, back_edges, - embed_graph, n, edge_pos, - v, w, &u_w, MARK_MINORS(n)); - embedg_add_mark_v_w(dfs_tree, back_edges, - embed_graph, n, edge_pos, v, w, - MARK_MINORS(n)); - - IF_DEB( - fprintf(stdout, "mark minor E5\n"); - fprintf(stdout, "v %d\t c %d\t x %d\t y %d\t w %d\t p_x %d\t p_y %d\t u_x %d\t u_y %d\t u_w %d\n", - v, c, x, y, w, p_x, p_y, u_x, u_y, u_w); - ) - - return MINOR_E5; -} -/* - * proper_face_walk.c - */ - -/* - What: - ***** - - Implementing a proper face walk within the VES structure. - This is obviously not the same as an external face walk, - but is simply the standard face walk in a planar embedding. - - Not much to say, if only to emphasize that for our - purposes here we assume: - - 1. the short-cut edges have been removed from the VES structure - 2. each vertex/edge has been given its orientation - 2. the adjacency lists (vertex + plus its incident edges) - are consistent: (and this is IMPORTANT) - that is, the way to traverse an adj. list (ie what - constitute previous and next in the list which actually - is a planar embedding at this stage) is indicated - by the vertex/edge's orientation - - - try to explain this better another time.... sorry... - - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - from - - Simplified O(n) Planarity Algorithms (draft) - ************************************ - - John Boyer JBoyer@PureEdge.com, jboyer@acm.org - Wendy Myrvold wendym@csr.uvic.ca - - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - authors: - ******** - - Paulette Lieby (Magma), Brendan McKay (ANU) - - Started October 2001 -*/ - - -#include "planarity.h" - -#define IF_DEB(x) {} -#define IF_DEB_PROPER_FACE(x) {} -#define IF_VERB(x) {} - - - -/* aproto: header embed_graph_protos.h */ - - - - -boolean -embedg_VES_get_succ_on_proper_face_with_avoidance (t_ver_edge *embed_graph, - int n, int e, int ein, int a, boolean MARK, int mark, int *s, - int *next_e, int *next_ein) - /* - find the successor s of embed_graph[e].neighbour - (entered via ein) on a proper face traversal - which avoids (the vertex) a if a != n - - also returns the edge next_e such that - embed_graph[next_e].neighbour = s (to allow for continuation - of the walk) - - assumes that short-cut edges have been removed and that each - edge/vertex has been given its orientation - - and (more importantly) assumes that adjacency lists are consistent - - this function has been written especially to retrieve the highest - x-y path for the isolator; - (see embedg_iso_get_highest_x_y_path) - but as I discovered later (when marking an internal face - as for minor D) this function is general purpose - - PLUS: return true if the proper face walk has to skip an edge - incident to a (ie had to "avoid" a) - - PLUS: mark s & next_e if so requested - */ -{ - int eout; - int twin, twinout; - boolean avoid_a; - - ASSERT(embedg_VES_is_edge(n, e)); - ASSERT(!embedg_VES_is_short_cut_edge(embed_graph, n, e)); - - IF_DEB( - fprintf(stdout, "get_succ_on_proper_face, \n"); - ) - - avoid_a = FALSE; - /* - find the direction out of the edge - */ - eout = 1 ^ ein; - - /* - get the twin edge - */ - twin = embedg_VES_get_twin_edge(embed_graph, n, e); - - /* - for each edge we must set the way to get to the next - in the adjacency list: - adjacency lists are traversed according to the vertex/edges - orientation (one unique orientation per list of course) - */ - if (embed_graph[e].sign != embed_graph[twin].sign) - /* - invert traversal - */ - { - twinout = 1 ^ eout; - } - else - /* - traversal is identical - */ - { - twinout = eout; - } - - /* - now, we want the edge previous to twin in twin's adjacency list, - ie link[1 ^ twinout] - */ - *next_e = embed_graph[twin].link[1 ^ twinout]; - /* - next_e could be a vertex, I need an edge - */ - if (embedg_VES_is_vertex(n, *next_e) - || embedg_VES_is_virtual_vertex(n, *next_e)) - /* - at this stage all virtual vertices should have - been disabled BUT the vertices rooting the bicomps!!! - */ - { - *next_e = embed_graph[*next_e].link[1 ^ twinout]; - } - ASSERT(embedg_VES_is_edge(n, *next_e)); - ASSERT(!embedg_VES_is_short_cut_edge(embed_graph, n, e)); - *s = embed_graph[*next_e].neighbour; - - if (*s == a) - /* - want to avoid this vertex, so must get yet previous - edge in adjacency list - */ - { - avoid_a = TRUE; - - *next_e = embed_graph[*next_e].link[1 ^ twinout]; - if (embedg_VES_is_vertex(n, *next_e) - || embedg_VES_is_virtual_vertex(n, *next_e)) - { - *next_e = embed_graph[*next_e].link[1 ^ twinout]; - } - ASSERT(embedg_VES_is_edge(n, *next_e)); - ASSERT(!embedg_VES_is_short_cut_edge(embed_graph, n, e)); - } - *s = embed_graph[*next_e].neighbour; - ASSERT(*s != a); - - /* - finally (again, because lists are consistent) - */ - *next_ein = 1 ^ twinout; - - /* - now mark s and next_e if required - */ - if (MARK) - { - embed_graph[*s].visited = - embed_graph[*next_e].visited = mark; - /* - ouuh... must mark the twin as well.... - but ONLY when we mark the minors.... - that is poor design, can we do better???? - -- don't think so... - - (when we mark when counting the faces, we MUST only - mark the edge and NOT its twin) - */ - if (mark == MARK_MINORS(n)) - { - twin = - embedg_VES_get_twin_edge(embed_graph, n, *next_e); - embed_graph[twin].visited = mark; - } - } - - return avoid_a; -} - - - -void -embedg_VES_get_succ_on_proper_face (t_ver_edge *embed_graph, int n, int e, - int ein, int MARK, int mark, int *s, int *next_e, int *next_ein) - /* - same as above but without avoidance - */ -{ - boolean avoid; - - avoid = - embedg_VES_get_succ_on_proper_face_with_avoidance( - embed_graph, n, - e, ein, n, - MARK, mark, - s, next_e, next_ein); - ASSERT(avoid == FALSE); -} - - -void -embedg_VES_walk_proper_face (t_ver_edge *embed_graph, int n, int e, - int ein, boolean MARK, int mark) - /* - traversing a proper face starting at edge e which has been entered - via ein - - -- we mark the visited edges with mark if so requested - - assumes that short-cut edges have been removed and that each - edge/vertex has been given its orientation - */ -{ - int s, cur_e, cur_ein, next_e, next_ein; - - next_e = n; /* this is an invalid value for an edge */ - - IF_DEB_PROPER_FACE( - fprintf(stdout, "proper face traversal\n"); - ) - - cur_e = e; - cur_ein = ein; - while (next_e != e) - { - ASSERT(embedg_VES_is_edge(n, cur_e)); - ASSERT(!embedg_VES_is_short_cut_edge(embed_graph, - n, cur_e)); - IF_DEB_PROPER_FACE( - embedg_VES_print_edge(embed_graph, n, cur_e); - ) - - embedg_VES_get_succ_on_proper_face(embed_graph, n, - cur_e, cur_ein, - MARK, mark, - &s, &next_e, &next_ein); - cur_e = next_e; - cur_ein = next_ein; - } - - /* - note that by doing so we would have marked e and the first of e's - endpoints since by exiting the loop e = next_e and s is the - actual starting vertex of the walk - */ -} - - - - - diff --git a/tools/nauty25r9_mac/planarity.h b/tools/nauty25r9_mac/planarity.h deleted file mode 100644 index 6329d5d..0000000 --- a/tools/nauty25r9_mac/planarity.h +++ /dev/null @@ -1,458 +0,0 @@ -/* - data structures and stuff for the planarity algorithm - - Paulette Lieby, Brendan McKay - October 2001 -*/ - -#ifndef _PLANARITY_H_ -#define _PLANARITY_H_ - - - -/* The following line must be uncommented for compiling into Magma. */ -/* #define PLANAR_IN_MAGMA */ - - -#ifdef PLANAR_IN_MAGMA -#include "defs.h" -#include "system.h" /* includes "system_math.h" - and more - */ -#else -/* not PLANAR_IN_MAGMA */ -#include -#include -#include -#include - -#undef FALSE -#undef TRUE -#define FALSE 0 -#define TRUE 1 - -#define NP NULL - -#define ASSERT(x) assert(x) -#define DIE() exit(0) - -#define mem_malloc malloc -#define mem_realloc realloc -#define mem_free free - -#include "naututil.h" -#ifdef CPUDEFS -CPUDEFS -#endif -#define time_current_user() CPUTIME - -#endif /* not PLANAR_IN_MAGMA */ - -#include "nauty.h" - - - - - -/* - max number of edges (and directed edges) for the embed_graph - data structure: - 1 more than for a (possibly) planar graph to allow search for obstructions - - 1. if the graph is planar the embedding cannot possibly contain - more than 3*n - 6 edges (including the short cut edges) - 2. if the graph is non planar, when retrieving and marking the - obstruction, we introduce EXACTLY one edge crossing -*/ -#define MAXE(n) ((n) > 1 ? 3*(n) - 5 : 0) -#define MAXDE(n) (6*(n) - 10) - -#define NIL -1 -#define CUTV -2 /* obviously used in diff. circ. than NILSIGN */ -#define NILSIGN -2 -#define CCLOCKW 1 -#define CLOCKW -1 -#define TE 1 -#define BE 2 -#define SCE 3 - -/* - various "marks" for various purposes, ONLY for the t_ver_edge str - - note: do NOT use a mark in {0,..,n} since those values are - used either while initialising or in the walkup procedure -*/ -#define MARK_EMBED(n) ((n)+1) -#define MARK_EXT_FACE(n) ((n)+2) -#define MARK_EXT_FACE_L(n) ((n)+3) -#define MARK_EXT_FACE_R(n) ((n)+4) -#define MARK_X_Y_PATH(n) ((n)+5) -#define MARK_MINORS(n) ((n)+6) -#define MIN_EMBED_MARK 0 /* ONLY for the t_embed_sparse_rep str */ - - -typedef enum -{ - MINOR_A, - MINOR_B, - MINOR_C, - MINOR_D, - MINOR_E, - MINOR_E1, - MINOR_E2, - MINOR_E3, - MINOR_E4, - MINOR_E5, - NBR_MINORS -} minor; - - -/* - a basic doubly linked circular list storing - vertices/edges from the "big" 2*n + 2(3*n-5) array of vertices/edges - - only used internally in the planarity tester: especially - where ordering of the vertices is important -*/ -typedef struct dlcl { - int info; - /* - info is: - - position in "big" array - */ - int in_adjl; /* if relevant, the pos in the adjl. list - of this edge - */ - int twin_in_adjl; /* if relevant, the pos in the adjl. list - of the twin of this edge - */ - int mult; /* if relevant, #occurences if this edge - (when graph is not simple - */ - struct dlcl * right; - struct dlcl * left; -} t_dlcl; - - -/* - a common structure for both (virtual) vertex & edge -*/ -typedef struct ver_edge { - /* vertex data */ - int label; - int DFS_parent; - int least_ancestor; - int lowpoint; - t_dlcl * separated_DFS_child_list; - t_dlcl * rep_in_parent_list; - t_dlcl * pertinent_bicomp_list; - int adjacent_to; - int visited; - /* edge data */ - int neighbour; - int in_adjl; - int twin_in_adjl; - int mult; - int type; - int sign; - /* link the lot in a doubly linked circular list */ - /* links indicate positions in the array of vertices/edges */ - int link[2]; -} t_ver_edge; - - -/* - data structure for the merge queue -*/ -typedef struct merge_queue { - int start, end; - int *b; -} t_merge_queue; - - - -/* - data structure for the sparse graph representation: - the array of vertices -*/ -typedef struct ver_sparse_rep { - int first_edge; /* can be index into an adj. list - or an embedding */ -} t_ver_sparse_rep; - -/* - data structure for the sparse graph representation: - a record in the adjacency list -*/ -typedef struct adjl_sparse_rep { - int end_vertex; - int next; /* next in list as an index in the adj. list */ -} t_adjl_sparse_rep; - -/* - data structure for the sparse graph representation: - a record in the embedding -*/ -typedef struct embed_sparse_rep { - int in_adjl;/* index of edge in adj. list */ - int next; /* next edge in embedding */ - int prev; /* previous edge in embedding */ - int inv; /* inverse edge */ - int mark; /* a spot for marking */ -} t_embed_sparse_rep; - -/* - data structure for the sparse graph representation: - a record an individual edge -*/ -typedef struct edge_sparse_rep { - int ends[2]; -} t_edge_sparse_rep; - -/* - data structure for the sparse graph representation: - a record for a component -*/ -typedef struct comp_sparse_rep { - int nbr_v; /* nbr of vertices */ - int *v; /* the actual vertices */ -} t_comp_sparse_rep; - -typedef struct graph_sparse_rep { - t_ver_sparse_rep *V; - int n; - t_adjl_sparse_rep *A; - int size_A; - int pos_A; - int nbr_e; /* ALWAYS # directed edges */ -} t_graph_sparse_rep; - -/* - * embed_graph_protos.h - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* aproto: file embed_graph/sparseg_adjl_pred.c */ -extern boolean sparseg_adjl_dir_edge_exists (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, int); -extern boolean sparseg_adjl_u_adj_v (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, int); -extern boolean sparseg_adjl_sub (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, t_ver_sparse_rep *, int, t_adjl_sparse_rep *); -extern boolean sparseg_adjl_eq (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, t_ver_sparse_rep *, int, t_adjl_sparse_rep *); -/* aproto: endfile */ -/* aproto: file embed_graph/VES_misc.c */ -extern boolean embedg_VES_is_vertex (int, int); -extern boolean embedg_VES_is_virtual_vertex (int, int); -extern boolean embedg_VES_is_edge (int, int); -extern boolean embedg_VES_is_tree_edge (t_ver_edge *, int, int); -extern boolean embedg_VES_is_back_edge (t_ver_edge *, int, int); -extern boolean embedg_VES_is_short_cut_edge (t_ver_edge *, int, int); -extern void embedg_VES_print_vertex (int, int); -extern void embedg_VES_print_virtual_vertex (t_ver_edge *, int, int); -extern void embedg_VES_print_any_vertex (t_ver_edge *, int, int); -extern void embedg_VES_print_any_rec (t_ver_edge *, int, int); -extern void embedg_VES_print_edge (t_ver_edge *, int, int); -extern void embedg_VES_print_flipped_edges (t_ver_edge *, int, int); -extern int embedg_VES_get_edge_from_ver (t_ver_edge *, int, int); -extern int embedg_VES_get_ver_from_edge (t_ver_edge *, int, int); -extern int embedg_VES_get_twin_edge (t_ver_edge *, int, int); -extern int embedg_VES_get_ver_from_virtual (t_ver_edge *, int, int); -extern int embedg_VES_get_ver (t_ver_edge *, int, int); -extern int embedg_VES_get_next_in_dlcl (t_ver_edge *, int, int, int); -extern void embedg_VES_walk_bicomp (t_ver_edge *, int, int, int); -extern void embedg_VES_print_adj_list (t_ver_edge *, int, int, boolean); -extern boolean embedg_VES_is_adj_list_consistent (t_ver_edge *, int, int); -extern boolean embedg_VES_are_adj_lists_consistent (t_ver_edge *, int); -extern void embedg_VES_remove_edge (t_ver_edge *, int, int); -extern void embedg_VES_set_orientation (t_ver_edge *, int, int *); -/* aproto: endfile */ -/* aproto: file embed_graph/embed_edge.c */ -extern void embedg_VES_embed_edge (t_ver_edge *, int, int *, int, int, int, int, int); -extern void embedg_VES_add_edge (t_ver_edge *, int, int *, int, int, boolean, int); -/* aproto: endfile */ -/* aproto: file embed_graph/embedg_misc.c */ -extern void embedg_VES_delete (t_ver_edge *, int); -extern void embedg_VES_print (t_ver_edge *, int); -extern void embedg_VES_print_bigcomps (t_ver_edge *, int); -/* aproto: endfile */ -/* aproto: file embed_graph/ext_face_walk.c */ -extern void embedg_VES_get_succ_on_ext_face (t_ver_edge *, int, int, int, boolean, int, int *, int *); -extern void embedg_VES_get_succ_active_on_ext_face (t_ver_edge *, int, int, int, int, boolean, int, int *, int *); -extern void embedg_VES_get_succ_ext_active_on_ext_face (t_ver_edge *, int, int, int, int, boolean, int, int *, int *); -extern void embedg_VES_get_succ_pertinent_on_ext_face (t_ver_edge *, int, int, int, int, boolean, int, int *, int *); -/* aproto: endfile */ -/* aproto: file embed_graph/isolator.c */ -extern int embedg_iso_get_c_of_v (t_ver_edge *, int, int, int); -extern boolean embedg_iso_is_minor_A (t_ver_edge *, int, int *, int, int, int *); -extern void embedg_iso_get_x_y_w (t_ver_edge *, int, int, int, int, int, int, int, int *, int *, int *); -extern boolean embedg_iso_is_minor_B (t_ver_edge *, int, int *, int, int, int *, int *, int *); -extern void embedg_iso_get_highest_x_y_path (t_ver_edge *, int, int, int, int, int, int, int, int, int, int **, int **, int *, int *, boolean *, boolean *, boolean *); -/* aproto: endfile */ -/* aproto: file embed_graph/mark_kur.c */ -extern boolean embedg_VES_is_ext_face_marked (t_ver_edge *, int, int, int); -extern void embedg_mark_minor_A (t_dlcl **, t_dlcl **, t_ver_edge *, int, int *, int, int, int); -extern void embedg_mark_minor_B (t_dlcl **, t_dlcl **, t_ver_edge *, int, int *, int, int, int, int, int); -extern void embedg_mark_minor_C (t_dlcl **, t_dlcl **, t_ver_edge *, int, int *, int, int, int, int, int, int *, int *, int, boolean, boolean); -extern void embedg_mark_minor_D (t_dlcl **, t_dlcl **, t_ver_edge *, int, int *, int, int, int, int, int, int *, int *, int, int); -extern minor embedg_mark_minor_E (t_dlcl **, t_dlcl **, t_ver_edge *, int, int *, int, int, int, int, int, int *, int *, int); -/* aproto: endfile */ -/* aproto: file embed_graph/merge_bicomps.c */ -extern void embedg_VES_merge_simple_bicomps (t_ver_edge *, int, int, int, int, int); -extern void embedg_VES_merge_pertinent_bicomps (t_ver_edge *, int, int, int, int, int); -/* aproto: endfile */ -/* aproto: file embed_graph/merge_queue_misc.c */ -extern t_merge_queue embedg_merge_queue_new (int); -extern void embedg_merge_queue_delete (t_merge_queue); -extern boolean embedg_merge_queue_empty (t_merge_queue); -extern void embedg_merge_queue_print (t_merge_queue); -extern void embedg_merge_queue_append (t_merge_queue *, t_ver_edge *, int, int, int, int, int); -extern void embedg_merge_queue_append_vertex (t_merge_queue *, t_ver_edge *, int, int, int); -extern void embedg_merge_queue_append_virtual_vertex (t_merge_queue *, t_ver_edge *, int, int, int); -extern void embedg_merge_queue_get (t_merge_queue *, int *, int *, int *, int *); -extern void embedg_merge_queue_prune (t_merge_queue *, int *, int *, int *, int *); -/* aproto: endfile */ -/* aproto: file embed_graph/obstruction.c */ -extern void embedg_obstruction (t_ver_sparse_rep *, t_adjl_sparse_rep *, t_dlcl **, t_dlcl **, t_ver_edge *, int, int *, int, int, t_ver_sparse_rep **, t_adjl_sparse_rep **, int *); -extern minor embedg_mark_obstruction (t_dlcl **, t_dlcl **, t_ver_edge *, int, int *, int, int); -/* aproto: endfile */ -/* aproto: file embed_graph/post_dfs_preproc.c */ -extern t_dlcl *sparseg_order_wrt_lowpoint (int, int *, int *, t_dlcl *); -extern int *sparseg_find_least_ancestor (int, t_dlcl **); -extern int *sparseg_find_dfs_parent (int, t_dlcl **); -/* aproto: endfile */ -/* aproto: file embed_graph/proper_face_walk.c */ -extern boolean embedg_VES_get_succ_on_proper_face_with_avoidance (t_ver_edge *, int, int, int, int, boolean, int, int *, int *, int *); -extern void embedg_VES_get_succ_on_proper_face (t_ver_edge *, int, int, int, int, int, int *, int *, int *); -extern void embedg_VES_walk_proper_face (t_ver_edge *, int, int, int, boolean, int); -/* aproto: endfile */ -/* aproto: file embed_graph/vertex_activity.c */ -extern boolean embedg_VES_is_ver_pertinent (t_ver_edge *, int, int, int); -extern boolean embedg_VES_is_ver_ext_active (t_ver_edge *, int, int, int); -extern boolean embedg_VES_is_ver_int_active (t_ver_edge *, int, int, int); -extern boolean embedg_VES_is_ver_inactive (t_ver_edge *, int, int, int); -/* aproto: endfile */ -/* aproto: file embed_graph/walkdown.c */ -extern t_merge_queue embedg_walkdown (t_ver_edge *, int, int *, int); -/* aproto: endfile */ -/* aproto: file embed_graph/sparseg_dlcl_misc.c */ -extern void sparseg_dlcl_delete (t_dlcl **, int); -extern void sparseg_dlcl_print (t_dlcl **, int); -extern boolean sparseg_dlcl_is_adjacent (t_dlcl **, int, int, int, t_dlcl **); -extern void sparseg_dlcl_append_to_neigh_list (t_dlcl **, int, int, int, int); -extern void sparseg_dlcl_to_sparseg (t_dlcl **, int, int, t_ver_sparse_rep **, t_adjl_sparse_rep **); -extern boolean sparseg_dlcl_sub (t_dlcl **, int, t_dlcl **, int); -/* aproto: endfile */ -/* aproto: file embed_graph/walkup.c */ -extern void embedg_walkup (t_ver_edge *, int, int, t_dlcl *); -/* aproto: endfile */ -/* aproto: file embed_graph/dfs_preprocessing.c */ -extern void sparseg_adjl_dfs_preprocessing (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int *, int **, int **, int **, t_dlcl ***, t_dlcl ***, int **, int **, t_dlcl ***); -/* aproto: endfile */ -/* aproto: file embed_graph/planar_by_edge_addition.c */ -extern boolean sparseg_adjl_is_planar (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int *, t_dlcl ***, t_dlcl ***, t_dlcl ***, t_ver_edge **, int *, int *, int *); -/* aproto: endfile */ -/* aproto: file embed_graph/recover.c */ -extern void embedg_recover_embedding (t_ver_sparse_rep *, t_adjl_sparse_rep *, t_ver_edge *, int, int, t_dlcl **, t_ver_sparse_rep **, t_embed_sparse_rep **); -extern void embedg_recov_embed_walk_proper_face (int, int, t_adjl_sparse_rep *, t_embed_sparse_rep *, boolean, int); -extern boolean embedg_check_recov_embedding (int, int, int, t_ver_sparse_rep *, t_adjl_sparse_rep *, t_embed_sparse_rep *); -extern t_dlcl **embedg_recover_obstruction (t_ver_edge *, int, minor, int *); -extern boolean embedg_check_recov_obs (t_dlcl **, int, minor); -/* aproto: endfile */ -/* aproto: file embed_graph/planar_alg_init.c */ -extern t_ver_edge *embedg_planar_alg_init (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int *, int *, t_dlcl ***, t_dlcl ***, t_dlcl ***); -/* aproto: endfile */ -/* aproto: file embed_graph/dlcl_misc.c */ -extern t_dlcl *embedg_dlcl_rec_new (int); -extern void embedg_dlcl_rec_print (t_dlcl *); -extern void embedg_dlcl_print (t_dlcl *); -extern t_dlcl *embedg_dlcl_rec_append (t_dlcl *, t_dlcl *); -extern t_dlcl *embedg_dlcl_rec_prepend (t_dlcl *, t_dlcl *); -extern t_dlcl *embedg_dlcl_cat (t_dlcl *, t_dlcl *); -extern t_dlcl *embedg_dlcl_find (t_dlcl *, int); -extern t_dlcl *embedg_dlcl_find_with_NIL_twin_in_adjl (t_dlcl *, int); -extern t_dlcl *embedg_dlcl_delete_first (t_dlcl *); -extern t_dlcl *embedg_dlcl_delete_rec (t_dlcl *, t_dlcl *); -extern boolean embedg_dlcl_is_empty (t_dlcl *); -extern t_dlcl *embedg_dlcl_list_next (t_dlcl *); -extern t_dlcl *embedg_dlcl_list_prev (t_dlcl *); -extern t_dlcl *embedg_dlcl_list_last (t_dlcl *); -extern void embedg_dlcl_delete (t_dlcl *); -extern t_dlcl *embedg_dlcl_copy (t_dlcl *); -extern int embedg_dlcl_length (t_dlcl *); -/* aproto: endfile */ -/* aproto: file embed_graph/sparseg_adjl.c */ -extern boolean sparseg_adjl_plan_and_iso (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, int *, t_ver_sparse_rep **, t_adjl_sparse_rep **, t_embed_sparse_rep **, int *); -extern int *sparseg_adjl_footprint (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int); -extern void sparseg_adjl_print (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, boolean); -extern void sparseg_adjl_embed_print (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, t_embed_sparse_rep *, boolean); -extern graph *sparseg_adjl_to_nauty_graph (t_ver_sparse_rep *, int, t_adjl_sparse_rep *); -extern t_edge_sparse_rep *sparseg_adjl_edges (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, boolean); -/* aproto: endfile */ -/* aproto: file embed_graph/embedding.c */ -extern void embedg_embedding (t_ver_sparse_rep *, t_adjl_sparse_rep *, t_ver_edge *, int, int, int, int, t_dlcl **, t_ver_sparse_rep **, t_embed_sparse_rep **); -extern void embedg_remove_SCE (t_ver_edge *, int, int); -extern int *embedg_vertices_orientation (t_ver_edge *, int); -extern int embedg_merge_remaining_virtual (t_ver_edge *, int); -extern int embedg_nbr_faces (t_ver_edge *, int, int, int *, int *); -extern boolean embedg_is_embed_valid (t_ver_edge *, int, int, int, int *, int *); -/* aproto: endfile */ -/* aproto: file embed_graph/sparseg_adjl_modify.c */ -extern boolean sparseg_adjl_add_edge (t_ver_sparse_rep *, int, t_adjl_sparse_rep **, int *, int *, int, int, boolean); -extern boolean sparseg_adjl_add_edge_no_extend (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, int *, int, int, boolean); -extern boolean sparseg_adjl_add_dir_edge (t_ver_sparse_rep *, int, t_adjl_sparse_rep **, int *, int *, int, int, boolean); -extern boolean sparseg_adjl_add_dir_edge_no_extend (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, int *, int, int, boolean); -extern boolean sparseg_adjl_remove_edge_no_red (t_ver_sparse_rep *, t_adjl_sparse_rep *, int, int); -extern boolean sparseg_adjl_remove_dir_edge_no_red (t_ver_sparse_rep *, t_adjl_sparse_rep *, int, int); -extern int sparseg_adjl_remove_all_dir_edge_no_red (t_ver_sparse_rep *, t_adjl_sparse_rep *, int, int); -extern void sparseg_adjl_add_vertices (t_ver_sparse_rep **, int, int); -extern void sparseg_adjl_add_vertices_no_extend (t_ver_sparse_rep *, int, int); -extern void sparseg_adjl_remove_vertex (t_ver_sparse_rep **, int, t_adjl_sparse_rep *, int, int, int *); -extern void sparseg_adjl_remove_vertex_no_red (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, int *); -extern void sparseg_adjl_relabel_vertex (t_adjl_sparse_rep *, int, int); -/* aproto: endfile */ -/* aproto: file embed_graph/sparseg_adjl_misc.c */ -extern void sparseg_adjl_assign_V (t_ver_sparse_rep *, t_ver_sparse_rep *, int); -extern t_ver_sparse_rep *sparseg_adjl_dup_V (t_ver_sparse_rep *, int); -extern void sparseg_adjl_assign_A (t_adjl_sparse_rep *, t_adjl_sparse_rep *, int); -extern t_adjl_sparse_rep *sparseg_adjl_dup_A (t_adjl_sparse_rep *, int); -extern void sparseg_embed_assign_E (t_embed_sparse_rep *, t_embed_sparse_rep *, int); -extern t_embed_sparse_rep *sparseg_embed_dup_E (t_embed_sparse_rep *, int); -extern void sparseg_adjl_underlying_undir (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, t_ver_sparse_rep **, t_adjl_sparse_rep **, int *, int *); -extern void sparseg_adjl_edge_union (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, t_ver_sparse_rep *, t_adjl_sparse_rep *, boolean, t_ver_sparse_rep **, t_adjl_sparse_rep **, int *, int *); -extern void sparseg_adjl_add_edges (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, int *, t_ver_sparse_rep *, t_adjl_sparse_rep *, boolean, int *); -/* aproto: endfile */ -/* aproto: file embed_graph/degree.c */ -extern int *sparseg_adjl_degree_seq (t_ver_sparse_rep *, int, t_adjl_sparse_rep *); -/* aproto: endfile */ -/* aproto: file embed_graph/neighbours.c */ -extern void sparseg_adjl_vertex_out_neighbours (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, int **, int *); -extern void sparseg_adjl_vertex_in_neighbours (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, int **, int *); -/* aproto: endfile */ -/* aproto: file embed_graph/misc.c */ -extern void sparseg_comp_delete (t_comp_sparse_rep *, int); -extern void sparseg_comp_print (t_comp_sparse_rep *, int); -/* aproto: endfile */ -/* aproto: file embed_graph/dfs_things.c */ -extern void sparseg_adjl_dfs_things (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, boolean, int *, t_ver_sparse_rep **, t_adjl_sparse_rep **, int *, int **, int **, int **, int **, int **, int *, int **, int *, t_comp_sparse_rep **); -extern void sparseg_adjl_dfs_add_vertex_to_comp (t_comp_sparse_rep **, int *, int); -extern void sparseg_adjl_dfs_create_new_comp (t_comp_sparse_rep **, int *); -extern void sparseg_adjl_from_comps_to_sparseg_adjl (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, t_comp_sparse_rep *, int, t_graph_sparse_rep **); -extern void sparseg_adjl_from_start_comp_to_sparseg_adjl (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int *, t_graph_sparse_rep **); -/* aproto: endfile */ -/* aproto: file embed_graph/dfs_for_digraph.c */ -extern void sparseg_adjl_dfs_digraph (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, int, int, t_ver_sparse_rep **, t_adjl_sparse_rep **, int *, int **, int **, int **, int **, int **, int *, t_comp_sparse_rep **); -/* aproto: endfile */ -/* aproto: file embed_graph/bfs.c */ -extern void sparseg_adjl_bfs (t_ver_sparse_rep *, int, t_adjl_sparse_rep *, boolean, int, t_ver_sparse_rep **, t_adjl_sparse_rep **, int *); -/* aproto: endfile */ -/* aproto: file embed_graph/faces.c */ -extern void sparseg_adjl_walk_proper_face (int, t_adjl_sparse_rep *, t_embed_sparse_rep *, int, boolean, int, int *, t_edge_sparse_rep *); -extern void sparseg_adjl_get_face_edges (int, t_adjl_sparse_rep *, int, t_embed_sparse_rep *, int, t_edge_sparse_rep **, int *, boolean, int); -/* aproto: endfile */ - -#ifdef __cplusplus -} -#endif - -#endif /* _PLANARITY_H_ */ diff --git a/tools/nauty25r9_mac/ranlabg b/tools/nauty25r9_mac/ranlabg deleted file mode 100644 index c04262863f1bcb00cd9cd17caf249e0f184e4198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117912 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 CjAT0i diff --git a/tools/nauty25r9_mac/ranlabg.c b/tools/nauty25r9_mac/ranlabg.c deleted file mode 100644 index 14e8d36..0000000 --- a/tools/nauty25r9_mac/ranlabg.c +++ /dev/null @@ -1,184 +0,0 @@ -/* ranlabg.c version 1.1; B D McKay, Nov 10, 2009. */ - -#define USAGE "ranlabg [-q] [-f#] [-S#] [infile [outfile]]" - -#define HELPTEXT \ -" Randomly relabel graphs.\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -f# Don't relabel the first # vertices.\n\ - -m# Output # randomly labelled copies of each input (default 1).\n\ - -S# Set random number seed (taken from clock otherwise).\n\ -\n\ - -q Suppress auxiliary information.\n" - -/*************************************************************************/ - -#include "gtools.h" - -/**************************************************************************/ - -static void -ranrelabel(graph *g, int fixed, int m, int n, graph *h) -/* h := random labelling of g, fixing some initial vertices */ -{ - int i,j,w,imin; -#if MAXN - int perm[MAXN]; -#else - DYNALLSTAT(int,perm,perm_sz); - DYNALLOC1(int,perm,perm_sz,n,"ranlabg"); -#endif - - for (i = 0 ; i < n; ++i) perm[i] = i; - - if (fixed >= 0 && fixed < n) imin = fixed; - else imin = 0; - - for (i = imin; i < n-1; ++i) - { - j = i + KRAN(n-i); - w = perm[i]; - perm[i] = perm[j]; - perm[j] = w; - } - - updatecan(g,h,perm,0,m,n); -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - boolean badargs,quiet,Sswitch,fswitch,mswitch; - int j,m,n,argnum,fixed; - int codetype,outcode; - graph *g; - nauty_counter nin; - int mult; - char *arg,sw; - double t; - long seed; -#if MAXN - graph h[MAXN*MAXM]; -#else - DYNALLSTAT(graph,h,h_sz); -#endif - - HELP; - - infilename = outfilename = NULL; - mswitch = quiet = fswitch = Sswitch = FALSE; - - argnum = 0; - badargs = FALSE; - - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('q',quiet) - else SWINT('f',fswitch,fixed,"ranlabg -f") - else SWINT('m',mswitch,mult,"ranlabg -m") - else SWLONG('S',Sswitch,seed,"ranlabg -S") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!Sswitch) INITSEED; - if (!mswitch) mult = 1; - if (!fswitch) fixed = 0; - - if (!quiet) - { - fprintf(stderr,">A ranlabg"); - fprintf(stderr," -S%ld",seed); - if (fswitch) fprintf(stderr,"f%d",fixed); - if (mswitch) fprintf(stderr,"m%d",mult); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - ran_init(seed); - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nautil_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"ranlabg"); -#endif - for (j = 0; j < mult; ++j) - { - ranrelabel(g,fixed,m,n,h); - if (outcode == SPARSE6) writes6(outfile,h,m,n); - else writeg6(outfile,h,m,n); - } - FREES(g); - } - t = CPUTIME - t; - - if (!quiet) - fprintf(stderr, - ">Z " COUNTER_FMT - " graphs relabeled from %s to %s; %3.2f sec.\n", - nin,infilename,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_mac/rng.c b/tools/nauty25r9_mac/rng.c deleted file mode 100644 index 691ea61..0000000 --- a/tools/nauty25r9_mac/rng.c +++ /dev/null @@ -1,131 +0,0 @@ -/* rng.c - This file contains the code for a high-quality random number - generator written by Don Knuth. The auxilliary routine - ran_arr_cycle() has been modified slightly, and ran_init() is new. - - To use it: - - 0. #include "rng.h" (or "naututil.h" if you are using nauty) - - 1. Call ran_init(seed), where seed is any long integer. - This step is optional, but if you don't use it you - will always get the same sequence of random numbers. - - 2. For each random number, use the NEXTRAN macro. It will - give a random value in the range 0..2^30-1. Alternatively, - KRAN(k) will have a random value in the range 0..k-1. - KRAN(k) actually gives you NEXTRAN mod k, so it is not - totally uniform if k is very large. In that case, you - can use the slightly slower GETKRAN(k,var) to set the - variable var to a better random number from 0..k-1. - - Brendan McKay, July 2002. Fixed Nov 2002 on advice of DEK. - -*/ - -/* This program by D E Knuth is in the public domain and freely copyable - * AS LONG AS YOU MAKE ABSOLUTELY NO CHANGES! - * It is explained in Seminumerical Algorithms, 3rd edition, Section 3.6 - * (or in the errata to the 2nd edition --- see - * http://www-cs-faculty.stanford.edu/~knuth/taocp.html - * in the changes to Volume 2 on pages 171 and following). */ - -/* N.B. The MODIFICATIONS introduced in the 9th printing (2002) are - included here; there's no backwards compatibility with the original. */ - -/* If you find any bugs, please report them immediately to - * taocp@cs.stanford.edu - * (and you will be rewarded if the bug is genuine). Thanks! */ - -/************ see the book for explanations and caveats! *******************/ -/************ in particular, you need two's complement arithmetic **********/ - -#define KK 100 /* the long lag */ -#define LL 37 /* the short lag */ -#define MM (1L<<30) /* the modulus */ -#define mod_diff(x,y) (((x)-(y))&(MM-1)) /* subtraction mod MM */ - -long ran_x[KK]; /* the generator state */ - -#ifdef __STDC__ -void ran_array(long aa[],int n) -#else -void ran_array(aa,n) /* put n new random numbers in aa */ - long *aa; /* destination */ - int n; /* array length (must be at least KK) */ -#endif -{ - int i,j; - for (j=0;j=MM) ss-=MM-2; /* cyclic shift 29 bits */ - } - x[1]++; /* make x[1] (and only x[1]) odd */ - for (ss=seed&(MM-1),t=TT-1; t; ) { - for (j=KK-1;j>0;j--) x[j+j]=x[j], x[j+j-1]=0; /* "square" */ - for (j=KK+KK-2;j>=KK;j--) - x[j-(KK-LL)]=mod_diff(x[j-(KK-LL)],x[j]), - x[j-KK]=mod_diff(x[j-KK],x[j]); - if (is_odd(ss)) { /* "multiply by z" */ - for (j=KK;j>0;j--) x[j]=x[j-1]; - x[0]=x[KK]; /* shift the buffer cyclically */ - x[LL]=mod_diff(x[LL],x[KK]); - } - if (ss) ss>>=1; else t--; - } - for (j=0;j=0? *ran_arr_ptr++: ran_arr_cycle()) - -long -ran_arr_cycle(void) -/* Modified by BDM to automatically initialise - if no explicit initialisation has been done */ -{ - if (ran_arr_ptr==&ran_arr_dummy) - ran_start(314159L); /* the user forgot to initialize */ - - ran_array(ran_arr_buf,QUALITY); - - ran_arr_buf[KK]=-1; - ran_arr_ptr=ran_arr_buf+1; - return ran_arr_buf[0]; -} diff --git a/tools/nauty25r9_mac/rng.h b/tools/nauty25r9_mac/rng.h deleted file mode 100644 index 7160486..0000000 --- a/tools/nauty25r9_mac/rng.h +++ /dev/null @@ -1,37 +0,0 @@ -/* rng.h : definitions for using Don Knuth's random number generator. - - To use it: - 1. Call ran_init(seed) with any long seed. (Optional, - but you will always get the same sequence otherwise.) - 2. Use NEXTRAN to get the next number (0..2^30-1). - Alternatively, use KRAN(k) to get a random number 0..k-1. - For large k, KRAN(k) is not quite uniform. In that case - use GETKRAN(k,var) to set the variable var to a better - random number 0..k-1. - - Some of these definitions are also in naututil.h. -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -extern long *ran_arr_ptr; -long ran_arr_cycle(void); -void ran_init(long seed); -void ran_array(long *aa, int n); - -#ifdef __cplusplus -} -#endif - -#define MAXRAN (0x3fffffffL) /* Values are 0..MAXRAN */ -#define NEXTRAN (*ran_arr_ptr>=0 ? *ran_arr_ptr++ : ran_arr_cycle()) -#define KRAN(k) (NEXTRAN%(k)) -#define RANREAL ((NEXTRAN+0.5)/(MAXRAN+1.0)) /* Uniform (0,1) */ - -#define MAXSAFE(k) (((MAXRAN+1)/(k))*(k)) -#define GETKRAN(k,var) {long __getkran; \ - do {__getkran = NEXTRAN;} while (__getkran >= MAXSAFE(k)); \ - var = __getkran % (k);} -#define INITRANBYTIME ran_init((long)time(NULL)) diff --git a/tools/nauty25r9_mac/runalltests b/tools/nauty25r9_mac/runalltests deleted file mode 100644 index bfdf4e0..0000000 --- a/tools/nauty25r9_mac/runalltests +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/sh -# Run all nauty checks - -runonetest() { -cmd="$1" -in="$2" -ok="$3" -printf "%s %s %s " "$cmd" "$in" "$ok" - -if [ "X$in" = "X" ] ; then - in=/dev/null -elif [ ! -r "$in" ] ; then - echo "File $in not found or not readable." - exit 1 -fi - -if [ ! -r "$ok" ] ; then - echo "File $ok not found or not readable." - exit 1 -fi - -out1=`mktemp runtest.XXXXXX` -out2=`mktemp runtest.XXXXXX` - -eval $cmd <"$in" 2>$out2 >$out1 -LC_COLLATE=C sort $out2 >>$out1 -if ./naucompare "$out1" "$ok" ; then - rm $out1 $out2 -else - echo "Output file is $out1" - rm $out2 - fails=`expr $fails + 1` -fi -} - -fails=0 - -runonetest ./dreadtest nautest1.dre nautest1a.ans -runonetest "./dreadtest -o As" nautest1.dre nautest1b.ans -runonetest "./dreadtest -o At" nautest1.dre nautest1c.ans -runonetest ./dreadtestS nautest1.dre nautest1a.ans -runonetest "./dreadtestS -o As" nautest1.dre nautest1b.ans -runonetest ./dreadtestW nautest1.dre nautest1a.ans -runonetest "./dreadtestW -o As" nautest1.dre nautest1b.ans -runonetest ./dreadtestL nautest1.dre nautest1a.ans -runonetest "./dreadtestL -o As" nautest1.dre nautest1b.ans -runonetest ./dreadtestL1 nautest1.dre nautest1a.ans -runonetest "./dreadtestL1 -o As" nautest1.dre nautest1b.ans -runonetest ./dreadtest4K nautest1.dre nautest1a.ans -runonetest "./dreadtest4K -o As" nautest1.dre nautest1b.ans -runonetest "./dreadtest4K -o At" nautest1.dre nautest1c.ans - -runonetest ./dreadtest nautest2.dre nautest2a.ans -runonetest "./dreadtest -o As" nautest2.dre nautest2b.ans -runonetest "./dreadtest -o At" nautest2.dre nautest2c.ans -runonetest ./dreadtestS nautest2.dre nautest2a.ans -runonetest "./dreadtestS -o As" nautest2.dre nautest2b.ans -runonetest ./dreadtestW nautest2.dre nautest2a.ans -runonetest "./dreadtestW -o As" nautest2.dre nautest2b.ans -runonetest "./dreadtestW -o At" nautest2.dre nautest2c.ans -runonetest ./dreadtestL nautest2.dre nautest2a.ans -runonetest "./dreadtestL -o As" nautest2.dre nautest2b.ans -runonetest "./dreadtestL -o At" nautest2.dre nautest2c.ans -runonetest ./dreadtest1 nautest2.dre nautest2a.ans -runonetest "./dreadtest1 -o As" nautest2.dre nautest2b.ans -runonetest ./dreadtestS1 nautest2.dre nautest2a.ans -runonetest "./dreadtestS1 -o As" nautest2.dre nautest2b.ans -runonetest ./dreadtestW1 nautest2.dre nautest2a.ans -runonetest "./dreadtestW1 -o As" nautest2.dre nautest2b.ans -runonetest ./dreadtestL1 nautest2.dre nautest2a.ans -runonetest "./dreadtestL1 -o As" nautest2.dre nautest2b.ans -runonetest ./dreadtest4K nautest2.dre nautest2a.ans -runonetest "./dreadtest4K -o As" nautest2.dre nautest2b.ans - -runonetest "./geng -ud1D7t 11" "" nautesta.ans -runonetest "./geng -cd1f 10 | ./labelg -q" "" nautestb.ans -runonetest "./genrang -r3 114 100 | ./countg --nedDr -q" "" nautestc.ans - -echo " " -echo $fails tests failed diff --git a/tools/nauty25r9_mac/schreier.c b/tools/nauty25r9_mac/schreier.c deleted file mode 100644 index db00491..0000000 --- a/tools/nauty25r9_mac/schreier.c +++ /dev/null @@ -1,1124 +0,0 @@ -/* schreier.c - procedures for manipulating a permutation group using - * the random schreier algorithm. There is a separate file schreier.txt - * which describes the usage. - * - * Written for nauty and traces, Brendan McKay 2010-2013. - */ - -#include "schreier.h" - -TLS_ATTR long long multcount = 0; -TLS_ATTR long long filtercount = 0; - -static permnode id_permnode; - /* represents identity, no actual content, doesn't need TLS_ATTR */ -#define ID_PERMNODE (&id_permnode) - -#if !MAXN -DYNALLSTAT(int,workperm,workperm_sz); -DYNALLSTAT(int,workperm2,workperm2_sz); -DYNALLSTAT(int,workpermA,workpermA_sz); -DYNALLSTAT(int,workpermB,workpermB_sz); -DYNALLSTAT(set,workset,workset_sz); -DYNALLSTAT(set,workset2,workset2_sz); -#else -static TLS_ATTR int workperm[MAXN]; -static TLS_ATTR int workperm2[MAXN]; -static TLS_ATTR int workpermA[MAXN]; -static TLS_ATTR int workpermB[MAXN]; -static TLS_ATTR set workset[MAXM]; -static TLS_ATTR set workset2[MAXM]; -#endif - -static TLS_ATTR schreier *schreier_freelist = NULL; - /* Freelist of scheier structures connected by next field. - * vec, pwr and orbits fields are assumed allocated. */ -static TLS_ATTR permnode *permnode_freelist = NULL; - /* Freelist of permnode structures connected by next field. - * p[] is assumed extended. */ - -static TLS_ATTR int schreierfails = SCHREIERFAILS; - -#define TMP - -static boolean filterschreier(schreier*,int*,permnode**,boolean,int,int); -#define PNCODE(x) ((int)(((size_t)(x)>>3)&0xFFFUL)) - -/* #define TESTP(id,p,n) testispermutation(id,p,n) */ -#define TESTP(id,p,n) - -/************************************************************************/ - -static void -testispermutation(int id, int *p, int n) -/* For debugging purposes, crash with a message if p[0..n-1] is - not a permutation. */ -{ - int i,m; - DYNALLSTAT(set,seen,seen_sz); - - for (i = 0; i < n; ++i) - if (p[i] < 0 || p[i] > n) break; - - if (i < n) - { - fprintf(stderr,">E Bad permutation (id=%d): n=%d p[%d]=%d\n", - id,n,i,p[i]); - exit(1); - } - - m = SETWORDSNEEDED(n); - DYNALLOC1(set,seen,seen_sz,m,"malloc seen"); - EMPTYSET(seen,m); - - for (i = 0; i < n; ++i) - { - if (ISELEMENT(seen,p[i])) - { - fprintf(stderr, - ">E Bad permutation (id=%d): n=%d p[%d]=%d is a repeat\n", - id,n,i,p[i]); - exit(1); - } - ADDELEMENT(seen,p[i]); - } -} - -/************************************************************************/ - -int -schreier_fails(int nfails) -/* Set the number of consecutive failures for filtering; - * A value of <= 0 defaults to SCHREIERFAILS. - * The function value is the previous setting. */ -{ - int prev; - - prev = schreierfails; - - if (nfails <= 0) schreierfails = SCHREIERFAILS; - else schreierfails = nfails; - - return prev; -} - -/************************************************************************/ - -static void -clearfreelists(void) -/* Clear the schreier and permnode freelists */ -{ - schreier *sh,*nextsh; - permnode *p,*nextp; - - nextsh = schreier_freelist; - while (nextsh) - { - sh = nextsh; - nextsh = sh->next; - free(sh->vec); - free(sh->pwr); - free(sh->orbits); - free(sh); - } - schreier_freelist = NULL; - - nextp = permnode_freelist; - while (nextp) - { - p = nextp; - nextp = p->next; - free(p); - } - permnode_freelist = NULL; -} - -/************************************************************************/ - -static permnode -*newpermnode(int n) -/* Allocate a new permode structure, with initialized next/prev fields */ -{ - permnode *p; - - while (permnode_freelist) - { - p = permnode_freelist; - permnode_freelist = p->next; - if (p->nalloc >= n && p->nalloc <= n+100) - { - p->next = p->prev = NULL; - p->mark = 0; - return p; - } - else - free(p); - } - - p = (permnode*) malloc(sizeof(permnode)+(n-2)*sizeof(int)); - - if (p == NULL) - { - fprintf(ERRFILE,">E malloc failed in newpermnode()\n"); - exit(1); - } - - p->next = p->prev = NULL; - p->nalloc = n; - - return p; -} - -/************************************************************************/ - -static schreier -*newschreier(int n) -/* Allocate a new schreier structure, with initialised next field */ -{ - schreier *sh; - - while (schreier_freelist) - { - sh = schreier_freelist; - schreier_freelist = sh->next; - if (sh->nalloc >= n && sh->nalloc <= n+100) - { - sh->next = NULL; - return sh; - } - else - { - free(sh->vec); - free(sh->pwr); - free(sh->orbits); - free(sh); - } - } - - sh = (schreier*) malloc(sizeof(schreier)); - - if (sh == NULL) - { - fprintf(ERRFILE,">E malloc failed in newschreier()\n"); - exit(1); - } - - sh->vec = (permnode**) malloc(sizeof(permnode*)*n); - sh->pwr = (int*) malloc(sizeof(int)*n); - sh->orbits = (int*) malloc(sizeof(int)*n); - - if (sh->vec == NULL || sh->pwr == NULL || sh->orbits == NULL) - { - fprintf(ERRFILE,">E malloc failed in newschreier()\n"); - exit(1); - } - - sh->next = NULL; - sh->nalloc = n; - - return sh; -} - -/************************************************************************/ - -void -freeschreier(schreier **gp, permnode **gens) -/* Free schreier structure and permutation ring. Assume this is everything. */ -/* Use NULL for arguments which don't need freeing. */ -{ - schreier *sh,*nextsh; - permnode *p,*nextp; - - if (gp && *gp) - { - nextsh = *gp; - while (nextsh) - { - sh = nextsh; - nextsh = sh->next; - sh->next = schreier_freelist; - schreier_freelist = sh; - } - *gp = NULL; - } - - if (gens && *gens) - { - p = *gens; - do - { - nextp = p->next; - p->next = permnode_freelist; - permnode_freelist = p; - p = nextp; - } while (p != *gens); - *gens = NULL; - } -} - -/************************************************************************/ - -permnode* -findpermutation(permnode *pn, int *p, int n) -/* Return a pointer to permutation p in the circular list, - * or NULL if it isn't present. */ -{ - permnode *rn; - int i; - - if (!pn) return NULL; - - rn = pn; - do - { - for (i = 0; i < n; ++i) - if (rn->p[i] != p[i]) break; - if (i == n) return rn; - rn = rn->next; - } while (rn != pn); - - return NULL; -} - -/************************************************************************/ - -void -addpermutation(permnode **ring, int *p, int n) -/* Add new permutation to circular list, marked. - * and return pointer to it in *ring. */ -{ - permnode *pn,*rn; - - pn = newpermnode(n); - rn = *ring; - - memcpy(pn->p,p,n*sizeof(int)); - - if (!rn) - pn->next = pn->prev = pn; - else - { - pn->next = rn->next; - pn->prev = rn; - rn->next = pn->next->prev = pn; - } - - pn->refcount = 0; - pn->mark = 1; - *ring = pn; -} - -/************************************************************************/ - -static void -addpermutationunmarked(permnode **ring, int *p, int n) -/* Add new permutation to circular list, not marked. - * and return pointer to it in *ring. */ -{ - TESTP(3,p,n); - addpermutation(ring,p,n); - (*ring)->mark = 0; -} - -/************************************************************************/ - -boolean -addgenerator(schreier **gp, permnode **ring, int *p, int n) -/* Add new permutation to group, unless it is discovered to be - * already in the group. It is is possible to be in the group - * and yet this fact is not discovered. - * Return TRUE if the generator (or an equivalent) is added or the - * group knowledge with the current partial base is improved. */ -{ - TESTP(2,p,n); - return filterschreier(*gp,p,ring,FALSE,-1,n); -} - -/************************************************************************/ - -boolean -condaddgenerator(schreier **gp, permnode **ring, int *p, int n) -/* Add new permutation to group, unless it is discovered to be - * already in the group. It is is possible to be in the group - * and yet this fact is not discovered, but this version will - * always notice if this permutation precisely is present. - * Return TRUE if the generator (or an equivalent) is added or the - * group knowledge with the current partial base is improved. */ -{ - TESTP(4,p,n); - if (findpermutation(*ring,p,n)) - return FALSE; - else - return filterschreier(*gp,p,ring,FALSE,-1,n); -} - -/************************************************************************/ - -static void -delpermnode(permnode **ring) -/* Delete permnode at head of circular list, making the next node head. */ -{ - permnode *newring; - - if (!*ring) return; - - if ((*ring)->next == *ring) - newring = NULL; - else - { - newring = (*ring)->next; - newring->prev = (*ring)->prev; - (*ring)->prev->next = newring; - } - - (*ring)->next = permnode_freelist; - permnode_freelist = *ring; - - *ring = newring; -} - -/************************************************************************/ - -void -deleteunmarked(permnode **ring) -/* Delete all permutations in the ring that are not marked */ -{ - permnode *pn,*firstmarked; - - pn = *ring; - firstmarked = NULL; - - while (pn != NULL && pn != firstmarked) - { - if (pn->mark) - { - if (!firstmarked) firstmarked = pn; - pn = pn->next; - } - else - delpermnode(&pn); - } - - *ring = pn; -} - -/************************************************************************/ - -static void -clearvector(permnode **vec, permnode **ring, int n) -/* clear vec[0..n-1], freeing permnodes that have no other references - * and are not marked */ -{ - int i; - - for (i = 0; i < n; ++i) - if (vec[i]) - { - if (vec[i] != ID_PERMNODE) - { - --(vec[i]->refcount); - if (vec[i]->refcount == 0 && !vec[i]->mark) - { - *ring = vec[i]; - delpermnode(ring); - } - } - vec[i] = NULL; - } -} - -/************************************************************************/ - -static void -initschreier(schreier *sh, int n) -/* Initialise schreier structure to trivial orbits and empty vector */ -{ - int i; - - sh->fixed = -1; - for (i = 0; i < n; ++i) - { - sh->vec[i] = NULL; - sh->orbits[i] = i; - } -} - -/************************************************************************/ - -void -newgroup(schreier **sh, permnode **ring, int n) -/* Make the trivial group, allow for ring to be set elsewhere */ -{ - *sh = newschreier(n); - initschreier(*sh,n); - if (ring) *ring = NULL; -} - -/************************************************************************/ - -static void -applyperm(int *wp, int *p, int k, int n) -/* Apply the permutation p, k times to each element of wp */ -{ - int i,j,cyclen,kk,m; - - TESTP(1,p,n); - - if (k <= 5) - { - if (k == 0) - return; - else if (k == 1) - for (i = 0; i < n; ++i) wp[i] = p[wp[i]]; - else if (k == 2) - for (i = 0; i < n; ++i) wp[i] = p[p[wp[i]]]; - else if (k == 3) - for (i = 0; i < n; ++i) wp[i] = p[p[p[wp[i]]]]; - else if (k == 4) - for (i = 0; i < n; ++i) wp[i] = p[p[p[p[wp[i]]]]]; - else if (k == 5) - for (i = 0; i < n; ++i) wp[i] = p[p[p[p[p[wp[i]]]]]]; - } - else if (k <= 19) - { -#if !MAXN - DYNALLOC1(int,workpermA,workpermA_sz,n,"applyperm"); -#endif - for (i = 0; i < n; ++i) workpermA[i] = p[p[p[i]]]; - for (; k >= 6; k -= 6) - for (i = 0; i < n; ++i) wp[i] = workpermA[workpermA[wp[i]]]; - if (k == 1) - for (i = 0; i < n; ++i) wp[i] = p[wp[i]]; - else if (k == 2) - for (i = 0; i < n; ++i) wp[i] = p[p[wp[i]]]; - else if (k == 3) - for (i = 0; i < n; ++i) wp[i] = workpermA[wp[i]]; - else if (k == 4) - for (i = 0; i < n; ++i) wp[i] = p[workpermA[wp[i]]]; - else if (k == 5) - for (i = 0; i < n; ++i) wp[i] = p[p[workpermA[wp[i]]]]; - } - else - { - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(int,workpermA,workpermA_sz,n,"applyperm"); - DYNALLOC1(int,workpermB,workpermB_sz,n,"applyperm"); - DYNALLOC1(set,workset2,workset2_sz,m,"applyperm"); -#endif - - EMPTYSET(workset2,m); - - /* We will construct p^k in workpermB one cycle at a time. */ - - for (i = 0; i < n; ++i) - { - if (ISELEMENT(workset2,i)) continue; - if (p[i] == i) - workpermB[i] = i; - else - { - cyclen = 1; - workpermA[0] = i; - for (j = p[i]; j != i; j = p[j]) - { - workpermA[cyclen++] = j; - ADDELEMENT(workset2,j); - } - kk = k % cyclen; - for (j = 0; j < cyclen; ++j) - { - workpermB[workpermA[j]] = workpermA[kk]; - if (++kk == cyclen) kk = 0; - } - } - } - for (i = 0; i < n; ++i) wp[i] = workpermB[wp[i]]; - } -} - -/************************************************************************/ - -static boolean -filterschreier(schreier *gp, int *p, permnode **ring, - boolean ingroup, int maxlevel, int n) -/* Filter permutation p up to level maxlevel of gp. - * Use ingroup=TRUE if p is known to be in the group, otherwise - * at least one equivalent generator is added unless it is proved - * (nondeterministically) that it is in the group already. - * maxlevel < 0 means no limit, maxlevel=0 means top level only, etc. - * Return TRUE iff some change is made. */ -{ - int i,j,j1,j2,lev; - int ipwr; - schreier *sh; - int *orbits,*pwr; - permnode **vec,*curr; - boolean changed,lchanged,ident; -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"filterschreier"); -#endif - -++filtercount; - - memcpy(workperm,p,n*sizeof(int)); - - if (*ring && p == (*ring)->p) - { - ingroup = TRUE; - curr = *ring; - } - else - curr = NULL; - - /* curr is the location of workperm in ring, if anywhere */ - - sh = gp; - changed = FALSE; - if (maxlevel < 0) maxlevel = n+1; - - for (lev = 0; lev <= maxlevel; ++lev) - { - for (i = 0; i < n; ++i) if (workperm[i] != i) break; - ident = (i == n); - if (ident) break; - - lchanged = FALSE; - orbits = sh->orbits; - vec = sh->vec; - pwr = sh->pwr; - for (i = 0; i < n; ++i) - { - j1 = orbits[i]; - while (orbits[j1] != j1) j1 = orbits[j1]; - j2 = orbits[workperm[i]]; - while (orbits[j2] != j2) j2 = orbits[j2]; - - if (j1 != j2) - { - lchanged = TRUE; - if (j1 < j2) orbits[j2] = j1; - else orbits[j1] = j2; - } - } - if (lchanged) - for (i = 0; i < n; ++i) orbits[i] = orbits[orbits[i]]; - - if (lchanged) changed = TRUE; - - if (sh->fixed >= 0) - { - for (i = 0; i < n; ++i) - if (vec[i] && !vec[workperm[i]]) - { - changed = TRUE; - ipwr = 0; - for (j = workperm[i]; !vec[j] ; j = workperm[j]) ++ipwr; - - for (j = workperm[i]; !vec[j] ; j = workperm[j]) - { - if (!curr) - { - if (!ingroup) addpermutation(ring,workperm,n); - else addpermutationunmarked(ring,workperm,n); - ingroup = TRUE; - curr = *ring; - } - vec[j] = curr; - pwr[j] = ipwr--; - ++curr->refcount; - } - } - - j = workperm[sh->fixed]; - - while (j != sh->fixed) - { - applyperm(workperm,vec[j]->p,pwr[j],n); - ++multcount; - curr = NULL; - j = workperm[sh->fixed]; - } - sh = sh->next; - } - else - break; - } - - if (!ident && !ingroup) - { - changed = TRUE; - addpermutation(ring,p,n); - } - - return changed; -} - -/************************************************************************/ - -boolean -expandschreier(schreier *gp, permnode **ring, int n) -/* filter random elements until schreierfails failures. - * Return true if it ever expanded. */ -{ - int i,j,nfails,wordlen,skips; - boolean changed; - permnode *pn; -#if !MAXN - DYNALLOC1(int,workperm2,workperm2_sz,n,"expandschreier"); -#endif - - pn = *ring; - if (pn == NULL) return FALSE; - - nfails = 0; - changed = FALSE; - - for (skips = KRAN(17); --skips >= 0; ) pn = pn->next; - - memcpy(workperm2,pn->p,n*sizeof(int)); - - while (nfails < schreierfails) - { - wordlen = 1 + KRAN(3); - for (j = 0; j < wordlen; ++j) - { - for (skips = KRAN(17); --skips >= 0; ) pn = pn->next; - for (i = 0; i < n; ++i) workperm2[i] = pn->p[workperm2[i]]; - } - if (filterschreier(gp,workperm2,ring,TRUE,-1,n)) - { - changed = TRUE; - nfails = 0; - } - else - ++nfails; - } - - return changed; -} - -/************************************************************************/ - -int* -getorbits(int *fix, int nfix, schreier *gp, permnode **ring, int n) -/* Get a pointer to the orbits for this partial base. The pointer - * remains valid until pruneset(), getorbits(), getorbitsmin() - * or grouporder() is called with an incompatible base (neither a - * prefix nor an extension). The contents of the array pointed to - * MUST NOT BE MODIFIED by the calling program. - */ -{ - int k; - schreier *sh,*sha; - - sh = gp; - for (k = 0; k < nfix; ++k) - { - if (sh->fixed != fix[k]) break; - sh = sh->next; - } - - if (k == nfix) return sh->orbits; - - sh->fixed = fix[k]; - clearvector(sh->vec,ring,n); - sh->vec[fix[k]] = ID_PERMNODE; - - for (sha = sh->next; sha ; sha = sha->next) clearvector(sha->vec,ring,n); - - for (++k; k <= nfix; ++k) - { - if (!sh->next) sh->next = newschreier(n); - sh = sh->next; - initschreier(sh,n); - if (k < nfix) - { - sh->fixed = fix[k]; - sh->vec[fix[k]] = ID_PERMNODE; - } - else - sh->fixed = -1; - } - - if (*ring) expandschreier(gp,ring,n); - return sh->orbits; -} - -/************************************************************************/ - -int -getorbitsmin(int *fix, int nfix, schreier *gp, permnode **ring, - int **orbits, int *cell, int ncell, int n, boolean changed) -/* If the basis elements fix[0..nfix-1] are minimal in their orbits, - * as far as we know, return value nfix and set *orbits to point - * to orbits fixing fix[0..nfix-1]. If fix[i] is seen to be not - * minimal for some i <= nfix-1, return i and set *orbits to point - * to orbits fixing fix[0..i-1]. If the partial base is already - * known, or fix[0..nfix-1] can already be seen to be non-minimal, - * do this work without more filtering. This shortcut is turned - * off if changed==TRUE. Otherwise, filter until schreierfails - * failures. - * The pointer returned remains valid until pruneset(), getorbits(), - * getorbitsmin() or grouporder() is called with an incompatible base - * (neither a prefix nor an extension). The contents of the array - * pointed to MUST NOT BE MODIFIED by the calling program. - * If cell != NULL, return early if possible when cell[0..ncell-1] - * are all in the same orbit fixing fix[0..nfix-1]. Otherwise - * cell,ncell play no part in the computation. - */ -{ - schreier *sh,*sha; - int *fixorbs; - int i,j,k,icell,nfails,wordlen,skips; - permnode *pn; -#if !MAXN - DYNALLOC1(int,workperm2,workperm2_sz,n,"expandschreier"); -#endif - - sh = gp; - k = 0; - if (!changed) - for (k = 0; k < nfix; ++k) - { - if (sh->orbits[fix[k]] != fix[k]) - { - *orbits = sh->orbits; - return k; - } - if (sh->fixed != fix[k]) break; - sh = sh->next; - } - - if (k == nfix) - { - *orbits = sh->orbits; - return nfix; - } - - sh->fixed = fix[k]; - clearvector(sh->vec,ring,n); - sh->vec[fix[k]] = ID_PERMNODE; - - for (sha = sh->next; sha ; sha = sha->next) clearvector(sha->vec,ring,n); - - for (++k; k <= nfix; ++k) - { - if (!sh->next) sh->next = newschreier(n); - sh = sh->next; - initschreier(sh,n); - if (k < nfix) - { - sh->fixed = fix[k]; - sh->vec[fix[k]] = ID_PERMNODE; - } - else - sh->fixed = -1; - } - *orbits = fixorbs = sh->orbits; - - if (cell) - { - for (icell = 1; icell < ncell; ++icell) - if (fixorbs[cell[icell]] != fixorbs[cell[0]]) break; - - if (icell >= ncell) return nfix; - } - - if (*ring) - { - pn = *ring; - - nfails = 0; - - for (skips = KRAN(17); --skips >= 0; ) pn = pn->next; - - memcpy(workperm2,pn->p,n*sizeof(int)); - - while (nfails < schreierfails) - { - wordlen = 1 + KRAN(3); - for (j = 0; j < wordlen; ++j) - { - for (skips = KRAN(17); --skips >= 0; ) pn = pn->next; - for (i = 0; i < n; ++i) workperm2[i] = pn->p[workperm2[i]]; - } - if (filterschreier(gp,workperm2,ring,TRUE,-1,n)) - { - nfails = 0; - sh = gp; - for (k = 0; k < nfix; ++k) - { - if (sh->orbits[fix[k]] != fix[k]) - { - *orbits = sh->orbits; - return k; - } - sh = sh->next; - } - if (cell) - { - for ( ; icell < ncell; ++icell) - if (fixorbs[cell[icell]] != fixorbs[cell[0]]) break; - - if (icell >= ncell) return nfix; - } - } - else - ++nfails; - } - } - - return nfix; -} - -/************************************************************************/ - -void -pruneset(set *fixset, schreier *gp, permnode **ring, set *x, int m, int n) -/* Remove from x any point not minimal for the orbits for this base. - * If the base is already known, just provide the orbits without - * more filtering. Otherwise, filter until schreierfails failures. - */ -{ - int i,k; - schreier *sh,*sha; - int *orbits; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"pruneset"); -#endif - for (i = 0; i < m; ++i) workset[i] = fixset[i]; - - sh = gp; - while (sh->fixed >= 0 && ISELEMENT(workset,sh->fixed)) - { - DELELEMENT(workset,sh->fixed); - sh = sh->next; - } - - k = nextelement(workset,m,-1); - if (k < 0) - orbits = sh->orbits; - else - { - sh->fixed = k; - clearvector(sh->vec,ring,n); - sh->vec[k] = ID_PERMNODE; - - for (sha = sh->next; sha ; sha = sha->next) - clearvector(sha->vec,ring,n); - - while ((k = nextelement(workset,m,k)) >= 0) - { - if (!sh->next) sh->next = newschreier(n); - sh = sh->next; - initschreier(sh,n); - sh->fixed = k; - sh->vec[k] = ID_PERMNODE; - } - if (!sh->next) sh->next = newschreier(n); - sh = sh->next; - initschreier(sh,n); - sh->fixed = -1; - - if (*ring) expandschreier(gp,ring,n); - orbits = sh->orbits; - } - - for (k = -1; (k = nextelement(x,m,k)) >= 0; ) - if (orbits[k] != k) DELELEMENT(x,k); -} - -/************************************************************************/ - -int -schreier_gens(permnode *ring) -/* Returns the number of generators in the ring */ -{ - int j; - permnode *pn; - - if (!ring) j = 0; - else for (j = 1, pn = ring->next; pn != ring; pn = pn->next) ++j; - - return j; -} - -/************************************************************************/ - -void -dumpschreier(FILE *f, schreier *gp, permnode *ring, int n) -/* Dump the whole schreier structure to file f. */ -{ - schreier *sh; - permnode *pn; - int i,j,jj,k; - - - fprintf(f,"Schreier structure n=%d; ",n); - - jj = -1; - for (j = 0, sh = gp; sh; sh = sh->next) - { - ++j; - if (sh->fixed < 0 && jj < 0) jj = j; - } - fprintf(f," levels=%d (%d used); ",j,jj); - - if (!ring) j = 0; - else for (j = 1, pn = ring->next; pn != ring; pn = pn->next) ++j; - fprintf(f,"gens=%d; ",j); - - for (j = 0, sh = schreier_freelist; sh; sh = sh->next) ++j; - for (k = 0, pn = permnode_freelist; pn; pn = pn->next) ++k; - fprintf(f,"freelists: %d,%d\n",j,k); - - if (ring) - { - fprintf(f,"Generators:\n"); - pn = ring; - do - { - fprintf(f," %03x ref=%lu mk=%d alloc=%d p=",PNCODE(pn), - pn->refcount,pn->mark,pn->nalloc); - for (i = 0; i < n; ++i) fprintf(f," %d",pn->p[i]); - fprintf(f,"\n"); - pn = pn->next; - } while (pn != ring); - } - - if (gp) - { - fprintf(f,"Levels:\n"); - for (sh = gp; sh; sh = sh->next) - { - fprintf(f,"fixed=%2d alloc=%d vec=",sh->fixed,sh->nalloc); - for (i = 0; i < n; ++i) - { - if (sh->vec[i] == ID_PERMNODE) fprintf(f," %d=e",i); - else if (sh->vec[i]) - { - k = sh->pwr[i]; - j = (sh->vec[i])->p[i]; - fprintf(f," %03x",PNCODE(sh->vec[i])); - if (k == 1) - fprintf(f,"(%d,%d)",i,j); - else - { - fprintf(f,"^%d",k); - while (--k >= 1) j = (sh->vec[i])->p[j]; - fprintf(f,"(%d,%d)",i,j); - } - } - } - fprintf(f,"\n Orb="); - j = 0; - for (i = 0; i < n; ++i) - { - fprintf(f," %d",sh->orbits[i]); - if (sh->orbits[i] == i) ++j; - } - fprintf(f," [%d]\n",j); - if (sh->fixed < 0) break; - } - } -} - -/************************************************************************/ - -void -grouporder(int *fix, int nfix, schreier *gp, permnode **ring, - double *grpsize1, int *grpsize2, int n) -/* process the base like in getorbits(), then return the product of the - * orbits along the base, using the largest orbit at the end if the - * base is not complete. -*/ -{ - schreier *sh; - int i,j,k,fx; - int *orb; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"grouporder"); -#endif - - getorbits(fix,nfix,gp,ring,n); - expandschreier(gp,ring,n); - expandschreier(gp,ring,n); - *grpsize1 = 1.0; *grpsize2 = 0; - - for (i = 0, sh = gp; i < nfix; ++i, sh = sh->next) - { - orb = sh->orbits; - fx = orb[sh->fixed]; - k = 0; - for (j = fx; j < n; ++j) if (orb[j] == fx) ++k; - MULTIPLY(*grpsize1,*grpsize2,k); - } - - orb = sh->orbits; - k = 1; - for (i = 0; i < n; ++i) - if (orb[i] == i) - workperm[i] = 1; - else - { - ++workperm[orb[i]]; - if (workperm[orb[i]] > k) k = workperm[orb[i]]; - } - MULTIPLY(*grpsize1,*grpsize2,k); -} - -/***************************************************************************** -* * -* schreier_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -schreier_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in schreier.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in schreier.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in schreier.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: schreier.c version mismatch\n"); - exit(1); - } -} - -/************************************************************************/ - -void -schreier_freedyn(void) -{ -#if !MAXN - DYNFREE(workperm,workperm_sz); - DYNFREE(workperm2,workperm2_sz); - DYNFREE(workpermA,workpermA_sz); - DYNFREE(workpermB,workpermB_sz); - DYNFREE(workset,workset_sz); - DYNFREE(workset2,workset2_sz); -#endif - clearfreelists(); -} diff --git a/tools/nauty25r9_mac/schreier.h b/tools/nauty25r9_mac/schreier.h deleted file mode 100644 index b53b758..0000000 --- a/tools/nauty25r9_mac/schreier.h +++ /dev/null @@ -1,68 +0,0 @@ -/* schreier.h - Version 1.2 (January 2013) */ - -#ifndef _SCHREIER_H_ /* only process this file once */ -#define _SCHREIER_H_ - -#include "nauty.h" -#include "naurng.h" - -typedef struct permnodestruct -{ - struct permnodestruct *prev,*next; /* prev&next in circular list */ - unsigned long refcount; /* number of references */ - int nalloc; /* size of p[] in ints, - <= 0 for a perm marker */ - int mark; /* a mark, 0 unless changed */ - int p[2]; /* actual vector, extended to - nalloc enties */ -} permnode; - -typedef struct schreierlevel -{ - struct schreierlevel *next; /* down one level, if any */ - int fixed; /* fixed at next level, -1 if none */ - /* Invariant: next=NULL => fixed = -1 */ - int nalloc; /* size of vec[] and orbits[] */ - permnode **vec; /* vec[i]^pwr[i] is edge label, */ - int *pwr; /* transitive closure maps i->fixed */ - int *orbits; /* vector of orbits */ - permnode *marker; /* points to marker for this level */ -} schreier; - -#define SCHREIERFAILS 10 - /* Default number of Schreier failures before giving up. */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* See separate file schreier.txt for a description of usage. */ - -extern void freeschreier(schreier **gp, permnode **gens); -extern void addpermutation(permnode **ring, int *p, int n); -extern permnode *findpermutation(permnode *gens, int *p, int n); -extern boolean addgenerator(schreier **gp, permnode **gens, int *p, int n); -extern boolean - condaddgenerator(schreier **gp, permnode **gens, int *p, int n); -extern boolean expandschreier(schreier *gp, permnode **gens, int n); -extern int *getorbits(int *fix, int nfix, - schreier *gp, permnode **gens, int n); -extern int getorbitsmin(int *fix, int nfix, schreier *gp, permnode **gens, - int **orbits, int *cell, int ncell, int n, boolean changed); -extern void pruneset(set *fixset, schreier *gp, permnode **gens, - set *x, int m, int n); -extern void newgroup(schreier **gp, permnode **gens, int n); -extern void schreier_freedyn(void); -extern int schreier_fails(int nfails); -extern void dumpschreier(FILE *f, schreier *gp, permnode *gens, int n); -extern int schreier_gens(permnode *gens); -extern void deleteunmarked(permnode **gens); -extern void grouporder(int *fix, int nfix, schreier *gp, permnode **gens, - double *grpsize1, int *grpsize2, int n); -extern void schreier_check(int wordsize, int m, int n, int version); - -#ifdef __cplusplus -} -#endif - -#endif /* _SCHREIER_H_ */ diff --git a/tools/nauty25r9_mac/schreier.o b/tools/nauty25r9_mac/schreier.o deleted file mode 100644 index aa508536d9fd2988ecf49c255ec63d8beb9e38bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20536 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 DB(aS& diff --git a/tools/nauty25r9_mac/schreier.txt b/tools/nauty25r9_mac/schreier.txt deleted file mode 100644 index fee021f..0000000 --- a/tools/nauty25r9_mac/schreier.txt +++ /dev/null @@ -1,132 +0,0 @@ - -Instructions for using schreier.c - May 12, 2010. -------------------------------------------------- - -Declarations: - #include "schreier.h" - - schreier *gp; /* This will point to the Schreier structure */ - permnode *gens; /* This will point to the stored generators */ - -Initialising group: - - newgroup(&gp, &gens, n); - - This creates the two structures needed for a trivial group - of degree n. In the case that &gens == NULL, it creates the - scheier structure only. This enables a previous set of - generators to be used to initialise a new group; - -Adding a generator p[0..n-1] : - - There are three options: - - addpermutation(&gens, p, n); - - This just adds p to the stored generators without updating - the Schreier structure. - - addgenerator(&gp, &gens, p, n); - - This filters p through the Schreier structure once, adding - either p or an equivalent generator if it is not found to - be in the group already. It is possible that the generator - can be added even though it is not needed, even if it is - identical to a previous generator. It returns a boolean - value which is FALSE if p was found to be in the group and - useless, otherwise it returns TRUE. - - condaddgenerator(&gp, &gens, p, n); - - This is the same as addgenerator() except that it guarantees - to never add a generator which is identical to a previous - generator. However, it still might not notice if it is in - the group generated by the previous generators. - -Updating the Schreier structure: - - At any moment, a partial base is known (initially empty) and some - partial Schreier vectors and orbits relative to that partial base. - To make the Schreier vectors and orbits more likely to be complete, - you can filter random group elements through it: - - expandschreier(gp, &gens, n); - - Filter random elements until schreierfails consecutive - failures occur. Uses the existing partial base and does - not attempt to extend it. - - schreier_fails(fails); - - Change the value of schreierfails (default 10). The previous - is returned as the function value. - -Orbits of stabiliser of partial base fix[0..nfix-1]: - - getorbits(fix, nfix, gp, &gens, n); - - If fix[0..nfix-1] is a prefix of the partial base held - internally, the existing orbits are returned immediately - without changing the Schreier structure. (Call - expandschreier() first if this is not good enough.) - - Otherwise, the Schreier structure is modified to use the - partial base fix[0..nfix-1], keeping as much information - as possible. Then expandschreier() is called and the - orbits are returned. - The function value points to an int array containing the orbits. - The orbits are in nauty format (orbits[i] is the least vertex in - the same orbit as vertex i). Since a randomised algorithm is used, - correctness is not guaranteed. However, the partition returned is - guaranteed to be finer than the true orbits partition. - - getorbitsmin(fix, nfix, gp, &gens, &orbits, cell, ncell, n); - - If the basis elements fix[0..nfix-1] are minimal in their - orbits, as far as we know, return value nfix and set *orbits - to point to orbits fixing fix[0..nfix-1]. If fix[i] is seen - to be not minimal for some i <= nfix-1, return i and set - *orbits to point to orbits fixing fix[0..i-1]. If the partial - base is already known, or fix[0..nfix-1] can already be seen - to be non-minimal, do this work without more filtering. - - Otherwise, filter until schreierfails failures, or until - cell[0..ncell-1] is a subset of an orbit. This last test - is omitted if cell=NULL. - The pointer &orbits remains valid until getorbits() or - getorbitsmin() is called with an incompatible base (neither - a prefix nor an extension). - - For both getorbits() and getorbitsmin(), the orbits vector whose - address is returned MUST NOT BE MODIFIED by the calling program. - The pointer will remain valid until getorbits(), getorbitsmin(), - pruneset() or grouporder() is called for a base that is neither a - prefix nor an extension of this base. During that time it will - contain the orbits of some group (not necessarily the full group) - fixing this base. - -Finishing: - - deleteunmarked(&gens); - - Delete some redundant generators. Those left are guaranteed - to generate the group. This invalidates the Schreier - structure, so call freeschreier(&gp, NULL) afterwards. - - freeschreier(&gp, &gens); - - Free these two structures. Do this before using (gp,gens) - for another group. - - schreier_freedyn(); - - Frees all the dynamic memory allocated by the Schreier code. - This is optional since the same dynamic memory will be reused - if you have a new group. - -Getting information: - - schreier_gens(gens) - - Return the number of stored generators. - - grouporder(fix, nfix, gp, &gens, &grpsize1, &grpsize2, n); - - Make an estimate of the group size using the base or - base-less-one fix[0..nfix-1]. grpsize1 is double and - grpsize2 is int, as in nauty.h. The value returned is - the product of the orbit sizes at each level times the - largest orbit size at the end. Correct with some - probability. - - dumpschreier(FILE* f, gp, gens, n); - - Write to file f a complete description of the structures. - - permnode *findpermutation(permnode *gens, int *p, int n) - - return a pointer to the permnode in the circular list which - is identical to p, if it exists. Otherwise return NULL. diff --git a/tools/nauty25r9_mac/schreierW.o b/tools/nauty25r9_mac/schreierW.o deleted file mode 100644 index c83504e715c5acd7133618ae6d8ce87238837c45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20136 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 z 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 tJh2s_N7>^v4N5z@y{hRbBeF@-gegLNZZG8 -#endif -#if HAVE_SYS_WAIT_H -#include -#else -#if !HAVE_PID_T -typedef int pid_t; -#endif -#endif - -#if !PIPE_DEC -int pipe(int*); -#endif - -#if !FDOPEN_DEC -FILE *fdopen(int, const char*); -#endif - -#if SORT_NEWKEY == 0 -#define SORTCOMMAND SORTPROG,SORTPROG,"-u","+0","-1" -#define VSORTCOMMAND1 SORTPROG,SORTPROG -#define VSORTCOMMAND2 SORTPROG,SORTPROG,"+0","-1","+2" - -#define SORTCOMMANDT SORTPROG,SORTPROG,"-T",tempdir,"-u","+0","-1" -#define VSORTCOMMANDT1 SORTPROG,SORTPROG,"-T",tempdir -#define VSORTCOMMANDT2 SORTPROG,SORTPROG,"-T",tempdir,"+0","-1","+2" -#else -#define SORTCOMMAND SORTPROG,SORTPROG,"-u","-k","1,1" -#define VSORTCOMMAND1 SORTPROG,SORTPROG -#define VSORTCOMMAND2 SORTPROG,SORTPROG,"-k","1,1","-k","3" - -#define SORTCOMMANDT SORTPROG,SORTPROG,"-T",tempdir,"-u","-k","1,1" -#define VSORTCOMMANDT1 SORTPROG,SORTPROG,"-T",tempdir -#define VSORTCOMMANDT2 SORTPROG,SORTPROG,"-T",tempdir,"-k","1,1","-k","3" -#endif - -static struct invarrec -{ - void (*entrypoint)(graph*,int*,int*,int,int,int,int*, - int,boolean,int,int); - char *name; -} invarproc[] - = {{NULL, "none"}, - {twopaths, "twopaths"}, - {adjtriang, "adjtriang"}, - {triples, "triples"}, - {quadruples, "quadruples"}, - {celltrips, "celltrips"}, - {cellquads, "cellquads"}, - {cellquins, "cellquins"}, - {distances, "distances"}, - {indsets, "indsets"}, - {cliques, "cliques"}, - {cellcliq, "cellcliq"}, - {cellind, "cellind"}, - {adjacencies, "adjacencies"}, - {cellfano, "cellfano"}, - {cellfano2, "cellfano2"}, - {refinvar, "refinvar"} - }; - -#define NUMINVARS ((int)(sizeof(invarproc)/sizeof(struct invarrec))) - -/**************************************************************************/ - -static pid_t -beginsort(FILE **sortin, FILE **sortout, char *tempdir, - boolean vdswitch, boolean keep) -/* begin sort process, open streams for i/o to it, and return its pid */ -{ - int pid; - int inpipe[2],outpipe[2]; - - if (pipe(inpipe) < 0 || pipe(outpipe) < 0) - gt_abort(">E shortg: can't create pipes to sort process\n"); - - if ((pid = fork()) < 0) gt_abort(">E shortg: can't fork\n"); - - if (pid > 0) /* parent */ - { - close(inpipe[0]); - close(outpipe[1]); - if ((*sortin = fdopen(inpipe[1],"w")) == NULL) - gt_abort(">E shortg: can't open stream to sort process\n"); - if ((*sortout = fdopen(outpipe[0],"r")) == NULL) - gt_abort(">E shortg: can't open stream from sort process\n"); - } - else /* child */ - { - SET_C_COLLATION; - - close(inpipe[1]); - close(outpipe[0]); - if (dup2(inpipe[0],0) < 0 || dup2(outpipe[1],1) < 0) - gt_abort(">E shortg: dup2 failed\n"); - - if (tempdir == NULL) - { - if (vdswitch) - if (keep) execlp(VSORTCOMMAND2,NULL); - else execlp(VSORTCOMMAND1,NULL); - else - execlp(SORTCOMMAND,NULL); - } - else - { - if (vdswitch) - if (keep) execlp(VSORTCOMMANDT2,NULL); - else execlp(VSORTCOMMANDT1,NULL); - else - execlp(SORTCOMMANDT,NULL); - } - gt_abort(">E shortg: can't start sort process\n"); - } - - return pid; -} - -/**************************************************************************/ - -static void -tosort(FILE *f, char *cdstr, char *dstr, nauty_counter index) -/* write one graph to sort process - cdstr = canonical string - dstr = optional original string - index = optional index number */ -{ - int i; - char buff[30]; - - for (i = 0; cdstr[i] != '\n'; ++i) {} - cdstr[i] = '\0'; - writeline(f,cdstr); - - if (dstr != NULL) - { - writeline(f," "); - for (i = 0; dstr[i] != '\n'; ++i) {} - dstr[i] = '\0'; - writeline(f,dstr); - } - - if (index > 0) - { -#if LONG_LONG_COUNTERS - sprintf(buff,"\t%11llu\n",index); -#else - sprintf(buff,"\t%10lu\n",index); -#endif - writeline(f,buff); - } - else - writeline(f,"\n"); -} - -/**************************************************************************/ - -static boolean -fromsort(FILE *f, char **cdstr, char **dstr, nauty_counter *index) -/* read one graph from sort process */ -{ - int j; - char *s; - - if ((s = gtools_getline(f)) == NULL) return FALSE; - - *cdstr = s; - for (j = 0; s[j] != ' ' && s[j] != '\t' && s[j] != '\n'; ++j) {} - - if (s[j] == ' ') - { - s[j] = '\0'; - *dstr = &s[j+1]; - for (++j; s[j] != '\t' && s[j] != '\n'; ++j) {} - } - else - *dstr = NULL; - - if (s[j] == '\t') - { -#if LONG_LONG_COUNTERS - if (sscanf(&s[j+1],"%llu",index) != 1) -#else - if (sscanf(&s[j+1],"%lu",index) != 1) -#endif - gt_abort(">E shortg: index field corrupted\n"); - } - else - *index = 0; - s[j] = '\0'; - - return TRUE; -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - FILE *sortin,*sortout; - int status,loops; - char *dstr,*cdstr,*prevdstr,*prevcdstr; - char sw,*fmt; - boolean badargs,quiet,vswitch,dswitch,keep,format,uswitch; - boolean iswitch,Iswitch,Kswitch,Tswitch; - boolean sswitch,gswitch,Sswitch,tswitch; - nauty_counter numread,prevnumread,numwritten,classsize; - int m,n,i,ii,argnum,line; - int outcode,codetype; - int inv,mininvarlevel,maxinvarlevel,invararg; - long minil,maxil; - pid_t sortpid; - graph *g; - char *arg,*tempdir; - sparsegraph sg,sh; - DEFAULTOPTIONS_TRACES(traces_opts); - TracesStats traces_stats; -#if MAXN - graph h[MAXN*MAXM]; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; -#else - DYNALLSTAT(graph,h,h_sz); - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); -#endif - - HELP; - - nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - infilename = outfilename = NULL; - dswitch = format = quiet = vswitch = keep = uswitch = FALSE; - sswitch = gswitch = Sswitch = Tswitch = FALSE; - tswitch = iswitch = Iswitch = Kswitch = FALSE; - tempdir = NULL; - inv = 0; - - /* parse argument list */ - - argnum = 0; - badargs = FALSE; - - for (i = 1; !badargs && i < argc; ++i) - { - arg = argv[i]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('q',quiet) - else SWBOOLEAN('v',vswitch) - else SWBOOLEAN('k',keep) - else SWBOOLEAN('d',dswitch) - else SWBOOLEAN('u',uswitch) - else SWBOOLEAN('s',sswitch) - else SWBOOLEAN('g',gswitch) - else SWBOOLEAN('S',Sswitch) - else SWBOOLEAN('t',tswitch) - else SWINT('i',iswitch,inv,"shortg -i") - else SWINT('K',Kswitch,invararg,"shortg -K") - else SWRANGE('I',":-",Iswitch,minil,maxil,"shortg -I") - else if (sw == 'f') - { - format = TRUE; - fmt = arg; - break; - } - else if (sw == 'T') - { - Tswitch = TRUE; - tempdir = arg; - break; - } - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (strcmp(SORTPROG,"no_sort_found") == 0) - gt_abort(">E shortg: no sort program known\n"); - - if (uswitch && outfilename != NULL) - gt_abort(">E shortg: -u and outfile are incompatible\n"); - - if (sswitch && gswitch) - gt_abort(">E shortg: -s and -g are incompatible\n"); - - if (Tswitch && *tempdir == '\0') - gt_abort(">E shortg: -T needs a non-empty argument\n"); - - if (tswitch && (format || Sswitch)) - gt_abort(">E shortg: -t is incompatible with -S and -f \n"); - - if (argnum == 1 && !uswitch) outfilename = infilename; - - if (iswitch && (inv > 16)) - gt_abort(">E shortg: -i value must be 0..16\n"); - if (Sswitch && iswitch && (inv != 8)) - gt_abort(">E shortg: only distances (-i8) is available with -S"); - - if (iswitch && inv == 0) iswitch = FALSE; - - if (iswitch) - { - if (Iswitch) - { - mininvarlevel = minil; - maxinvarlevel = maxil; - } - else - mininvarlevel = maxinvarlevel = 1; - if (!Kswitch) invararg = 3; - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A shortg"); - if (uswitch || keep || vswitch || format || Tswitch - || tswitch || sswitch || gswitch || Sswitch || iswitch) - fprintf(stderr," -"); - if (sswitch) fprintf(stderr,"s"); - if (gswitch) fprintf(stderr,"g"); - if (Sswitch) fprintf(stderr,"S"); - if (tswitch) fprintf(stderr,"t"); - if (keep) fprintf(stderr,"k"); - if (vswitch) fprintf(stderr,"v"); - if (dswitch) fprintf(stderr,"d"); - if (uswitch) fprintf(stderr,"u"); - if (iswitch) - fprintf(stderr,"i=%s[%d:%d,%d]",invarproc[inv].name, - mininvarlevel,maxinvarlevel,invararg); - if (format) fprintf(stderr,"f%s",fmt); - if (format && Tswitch) fprintf(stderr," -"); - if (Tswitch) fprintf(stderr,"T%s",tempdir); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - } - - /* open input file */ - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (sswitch || (!gswitch && (codetype&SPARSE6))) outcode = SPARSE6; - else outcode = GRAPH6; - -#if defined(SIG_IGN) && defined(SIGPIPE) - signal(SIGPIPE,SIG_IGN); /* process pipe errors ourselves */ -#endif - - /* begin sort in a subprocess */ - - sortpid = beginsort(&sortin,&sortout,(Tswitch?tempdir:NULL), - dswitch||vswitch,keep); - - /* feed input graphs, possibly relabelled, to sort process */ - - numread = 0; - - if (Sswitch) - { - SG_INIT(sg); - SG_INIT(sh); - while (TRUE) - { - if (read_sg_loops(infile,&sg,&loops) == NULL) break; - dstr = readg_line; - ++numread; - n = sg.nv; -#if MAXN - if (n > MAXN) gt_abort(">E shortg: graph larger than MAXN read\n"); -#endif - m = SETWORDSNEEDED(n); - SG_ALLOC(sh,n,sg.nde,"shortg"); - fcanonise_inv_sg(&sg,m,n,&sh,format?fmt:NULL, - iswitch?distances_sg:NULL, - mininvarlevel,maxinvarlevel,invararg,loops>0); - sortlists_sg(&sh); - if (outcode == SPARSE6) cdstr = sgtos6(&sh); - else cdstr = sgtog6(&sh); - - tosort(sortin,cdstr,keep ? dstr : NULL,vswitch ? numread : 0); - } - } - else if (tswitch) - { - SG_INIT(sg); - SG_INIT(sh); - traces_opts.getcanon = TRUE; - traces_opts.writeautoms = FALSE; - traces_opts.verbosity = 0; - traces_opts.outfile = stdout; - - while (TRUE) - { - if (read_sg_loops(infile,&sg,&loops) == NULL) break; - if (loops > 0) gt_abort(">E shortg: Traces does not allow loops\n"); - ++numread; - n = sg.nv; -#if MAXN - if (n > MAXN) gt_abort(">E shortg: graph larger than MAXN read\n"); -#endif - DYNALLOC1(int,lab,lab_sz,n,"traces@shortg"); - DYNALLOC1(int,ptn,ptn_sz,n,"traces@shortg"); - DYNALLOC1(int,orbits,orbits_sz,n,"traces@shortg"); - SG_ALLOC(sh,n,sg.nde,"labelg"); - for (ii = 0; ii < n; ++ii) { lab[ii] = ii; ptn[ii] = 1; } - ptn[n-1] = 0; - Traces(&sg,lab,ptn,orbits,&traces_opts,&traces_stats,&sh); - sortlists_sg(&sh); - if (outcode == SPARSE6) cdstr = sgtos6(&sh); - else cdstr = sgtog6(&sh); - tosort(sortin,cdstr,keep ? dstr : NULL,vswitch ? numread : 0); - } - } - else - { - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - dstr = readg_line; - ++numread; - loops = loopcount(g,m,n); -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"shortg"); -#endif - fcanonise_inv(g,m,n,h,format?fmt:NULL, - invarproc[inv].entrypoint,mininvarlevel,maxinvarlevel, - invararg, loops>0); - if (outcode == SPARSE6) cdstr = ntos6(h,m,n); - else cdstr = ntog6(h,m,n); - - tosort(sortin,cdstr,keep ? dstr : NULL,vswitch ? numread : 0); - FREES(g); - } - } - fclose(sortin); - fclose(infile); - - /* open output file */ - - if (uswitch) - outfilename = ""; - else if (outfilename == NULL || outfilename[0] == '-' || is_pipe) - { - outfile = stdout; - outfilename = "stdout"; - } - else - { - if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr, - ">E shortg: can't open %s for writing\n",outfilename); - gt_abort(NULL); - } - } - - if (!uswitch && (codetype&HAS_HEADER)) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - if (!quiet) -#if LONG_LONG_COUNTERS - fprintf(stderr, - ">Z %6llu graphs read from %s\n",numread,infilename); -#else - fprintf(stderr, - ">Z %6lu graphs read from %s\n",numread,infilename); -#endif - - /* collect output from sort process and write to output file */ - - prevcdstr = prevdstr = NULL; - numwritten = 0; - if (dswitch) - { - classsize = 0; - while (fromsort(sortout,&cdstr,&dstr,&numread)) - { - if (classsize == 0 || strcmp(cdstr,prevcdstr) != 0) - classsize = 1; - else - { - ++classsize; - if (classsize == 2) - { - ++numwritten; - if (!uswitch) - { - writeline(outfile,keep ? prevdstr : prevcdstr); - writeline(outfile,"\n"); - } - if (keep) - { - ++numwritten; - if (!uswitch) - { - writeline(outfile,keep ? dstr : cdstr); - writeline(outfile,"\n"); - } - } - if (vswitch) - { - fprintf(stderr,"\n"); -#if LONG_LONG_COUNTERS - fprintf(stderr,"%3llu : %3llu %3llu", - numwritten,prevnumread,numread); -#else - fprintf(stderr,"%3lu : %3lu %3lu", - numwritten,prevnumread,numread); -#endif - line = 1; - } - } - else - { - if (keep) - { - ++numwritten; - if (!uswitch) - { - writeline(outfile,keep ? dstr : cdstr); - writeline(outfile,"\n"); - } - } - if (vswitch) - { - if (line == 15) - { - line = 0; - fprintf(stderr,"\n "); - } -#if LONG_LONG_COUNTERS - fprintf(stderr," %3llu",numread); -#else - fprintf(stderr," %3lu",numread); -#endif - ++line; - } - } - } - if (prevcdstr) FREES(prevcdstr); - prevcdstr = stringcopy(cdstr); - if (prevdstr) FREES(prevdstr); - if (keep) prevdstr = stringcopy(dstr); - prevnumread = numread; - } - if (vswitch) fprintf(stderr,"\n\n"); - } - else if (vswitch) - { - while (fromsort(sortout,&cdstr,&dstr,&numread)) - { - if (numwritten == 0 || strcmp(cdstr,prevcdstr) != 0) - { - ++numwritten; - if (!uswitch) - { - writeline(outfile,keep ? dstr : cdstr); - writeline(outfile,"\n"); - } - fprintf(stderr,"\n"); -#if LONG_LONG_COUNTERS - fprintf(stderr,"%3llu : %3llu",numwritten,numread); -#else - fprintf(stderr,"%3lu : %3lu",numwritten,numread); -#endif - line = 1; - } - else - { - if (line == 15) - { - line = 0; - fprintf(stderr,"\n "); - } -#if LONG_LONG_COUNTERS - fprintf(stderr," %3llu",numread); -#else - fprintf(stderr," %3lu",numread); -#endif - ++line; - } - if (prevcdstr) FREES(prevcdstr); - prevcdstr = stringcopy(cdstr); - } - fprintf(stderr,"\n\n"); - } - else - { - while (fromsort(sortout,&cdstr,&dstr,&numread)) - { - ++numwritten; - if (!uswitch) - { - writeline(outfile,keep ? dstr : cdstr); - writeline(outfile,"\n"); - } - } - } - - fclose(sortout); - if (!uswitch) fclose(outfile); - - if (!quiet) - { -#if LONG_LONG_COUNTERS - if (uswitch) - fprintf(stderr,">Z %6llu graphs produced\n",numwritten); - else - fprintf(stderr, - ">Z %6llu graphs written to %s\n",numwritten,outfilename); -#else - if (uswitch) - fprintf(stderr,">Z %6lu graphs produced\n",numwritten); - else - fprintf(stderr, - ">Z %6lu graphs written to %s\n",numwritten,outfilename); -#endif - } - - /* check that the subprocess exitted properly */ - - while (wait(&status) != sortpid) {} - -#if (defined(WIFSIGNALED) || defined(WTERMSIG)) && defined(WEXITSTATUS) -#ifdef WIFSIGNALED - if (WIFSIGNALED(status) && WTERMSIG(status) != 0) -#else - if (WTERMSIG(status) != 0) -#endif - { - fprintf(stderr,">E shortg: sort process killed (signal %d)\n", - WTERMSIG(status)); - gt_abort(NULL); - } - else if (WEXITSTATUS(status) != 0) - { - fprintf(stderr, - ">E shortg: sort process exited abnormally (code %d)\n", - WEXITSTATUS(status)); - gt_abort(NULL); - } -#endif - - exit(0); -} diff --git a/tools/nauty25r9_mac/showg b/tools/nauty25r9_mac/showg deleted file mode 100644 index a93b57527abf989325e5e9643d723bf842133687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22032 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 -#include - -/* gtools.h : General header for gtools programs. */ - -#ifndef MAXN -#define MAXN 0 -#endif -#define G6LEN(n) (((n)*((n)-1)/2+5)/6+(n<=SMALLN?1:4)) - /* Exact length of graph6 code except for \n\0 */ - -/* Remove errno: too hard to get portable without configuration - * #if defined(__unix) || defined(__unix__) || defined(unix) || \ - defined(__ppc__) -#include -#else -int errno = 0; -#endif -#define ABORT(msg) {if (errno != 0) perror(msg); exit(1);} -*/ - -/* extern long ftell(FILE*); Should be in stdio.h */ - -#define BIAS6 63 -#define MAXBYTE 126 -#define SMALLN 62 -#define TOPBIT6 32 -#define C6MASK 63 - -#define GRAPH6_HEADER ">>graph6<<" -#define SPARSE6_HEADER ">>sparse6<<" - -#define GRAPH6 1 -#define SPARSE6 2 -#define UNKNOWN_TYPE 256 -#define HAS_HEADER 512 - -#define ARG_OK 0 -#define ARG_MISSING 1 -#define ARG_TOOBIG 2 -#define ARG_ILLEGAL 3 - -#define MAXARG 2000000000L -#define NOLIMIT (MAXARG+1L) - -#define SWBOOLEAN(c,boool) if (sw==c) boool=TRUE; -#define SWINT(c,boool,val,id) if (sw==c) \ - {boool=TRUE;arg_int(&arg,&val,id);} -#define SWRANGE(c,boool,val1,val2,id) if (sw==c) \ - {boool=TRUE;arg_range(&arg,&val1,&val2,id);} - -#define FREES free -#define ALLOCS calloc - -#define DYNALLSTAT(type,name,name_sz) static type *name; static size_t name_sz=0 -#define DYNALLOC1(type,name,name_sz,sz,msg) \ - if ((size_t)(sz) > name_sz) \ - { if (name_sz) FREES(name); name_sz = (sz); \ - if ((name=(type*)ALLOCS(sz,sizeof(type))) == NULL) alloc_error(msg);} -#define DYNALLOC2(type,name,name_sz,sz1,sz2,msg) \ - if ((size_t)(sz1)*(size_t)(sz2) > name_sz) \ - { if (name_sz) FREES(name); name_sz = (size_t)(sz1)*(size_t)(sz2); \ - if ((name=(type*)ALLOCS((sz1),(sz2)*sizeof(type))) == NULL) alloc_error(msg);} -#define DYNFREE(name,name_sz) if (name_sz) {FREES(name); name_sz = 0;} -#define DYNREALLOC(type,name,name_sz,sz,msg) \ - {if ((size_t)(sz) > name_sz) \ - { if ((name = (type*)realloc(name,(sz)*sizeof(type))) == NULL) \ - alloc_error(msg); else name_sz = (sz);}} - -#define alloc_error gt_abort - -#ifdef __STDC__ -#include -#include -#else -#include -extern char *calloc(); -extern char *malloc(); -extern char *realloc(); -#endif - -#ifdef __alpha -typedef unsigned int setword; -#else -typedef unsigned long setword; -#endif -typedef setword set; -typedef setword graph; -typedef int boolean; - -static setword bit[32]= - {020000000000,010000000000,04000000000,02000000000, - 01000000000,0400000000,0200000000,0100000000,040000000, - 020000000,010000000,04000000,02000000,01000000,0400000, - 0200000,0100000,040000,020000,010000,04000,02000,01000, - 0400,0200,0100,040,020,010,04,02,01}; -static int leftbit[] = - {8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; -static int labelorg = 0; - -#define WORDSIZE 32 -#define FIRSTBIT(x) ((x) & 037777600000 ? ((x) & 037700000000 ? \ - leftbit[((x)>>24) & 0377] : 8+leftbit[(x)>>16]) \ - : ((x) & 0177400 ? 16+leftbit[(x)>>8] : 24+leftbit[x])) -#define BITMASK(x) (017777777777 >> (x)) /* setword whose rightmost - WORDSIZE-x-1 (numbered) bits are 1 and the rest 0 (0 <= x < WORDSIZE) */ -#define TIMESWORDSIZE(w) ((w)<<5) -#define SETWD(pos) ((pos)>>5) -#define SETBT(pos) ((pos)&037) -#define ISELEMENT(setadd,pos) (((setadd)[SETWD(pos)] & bit[SETBT(pos)]) != 0) -#define ADDELEMENT(setadd,pos) ((setadd)[SETWD(pos)] |= bit[SETBT(pos)]) -#define GRAPHROW(g,v,m) ((set*)(g) + (long)(v) * (long)(m)) - -#define FALSE 0 -#define TRUE 1 - -/************************************************************************/ - -#ifndef SEEK_SET -#define SEEK_SET 0 -#define SEEK_CUR 1 -#define SEEK_END 2 -#endif - -#ifndef SEEK_CUR -#define SEEK_CUR SEEK_CURRENT -#endif - -static long ogf_linelen; - -/************************************************************************/ - -static void -gt_abort(char *msg) /* Write message and halt. */ -{ - if (msg) fprintf(stderr,"%s",msg); - exit(1); -} - -/***************************************************************************** -* * -* itos(i,s) converts the int i to a nul-terminated decimal character * -* string s. The value returned is the number of characters excluding * -* the nul. * -* * -* GLOBALS ACCESSED: NONE * -* * -*****************************************************************************/ - -static int -itos(int i, char *s) -{ - int digit,j,k; - char c; - int ans; - - if (i < 0) - { - k = 0; - i = -i; - j = 1; - s[0] = '-'; - } - else - { - k = -1; - j = 0; - } - - do - { - digit = i % 10; - i = i / 10; - s[++k] = digit + '0'; - } - while (i); - - s[k+1] = '\0'; - ans = k + 1; - - for (;j < k; ++j, --k) - { - c = s[j]; - s[j] = s[k]; - s[k] = c; - } - - return(ans); -} - -/***************************************************************************** -* * -* nextelement(set1,m,pos) = the position of the first element in set set1 * -* which occupies a position greater than pos. If no such element exists, * -* the value is -1. pos can have any value less than n, including negative * -* values. * -* * -* GLOBALS ACCESSED: none * -* * -*****************************************************************************/ - -static int -nextelement(set *set1, int m, int pos) -{ - setword setwd; - int w; - - if (pos < 0) - { - w = 0; - setwd = set1[0]; - } - else - { - w = SETWD(pos); - setwd = set1[w] & BITMASK(SETBT(pos)); - } - - for (;;) - { - if (setwd != 0) - return(TIMESWORDSIZE(w) + FIRSTBIT(setwd)); - if (++w == m) return -1; - setwd = set1[w]; - } -} - -/********************************************************************* -opengraphfile(filename,codetype,assumefixed,position) - opens and positions a file for reading graphs. - - filename = the name of the file to open - (NULL means stdin, assumed already open) - codetype = returns a code for the format. - This is a combination of SPARSE6, GRAPH6, - UNKNOWN_TYPE and HAS_HEADER. If a header is - present, that overrides the data. If there is - no header, the first graph is examined. - assumefixed = nonzero if files other than stdin should be assumed to - be seekable and have equal record sizes. - Ignored if there is a sparse6 header or the first - graph has sparse6 format. - position = the number of the record to position to - (the first is number 1; 0 and -NOLIMIT also mean - to position at start) - - If the file starts with ">", there must be a header, either - GRAPH6_HEAD or SPARSE6_HEAD. Otherwise opengraphfile() fails. - - The value returned is a file pointer or NULL. - If assumedfixed is not zero and position > 1, the global variable - ogf_linelen is set to the length (including \n) of the length of the - first record. - -**********************************************************************/ - -static FILE* -opengraphfile(char *filename, int *codetype, int assumefixed, long position) -{ - FILE *f; - int c,firstc; - long i,l,pos,pos1,pos2; - boolean bad_header; - - if (filename == NULL) - f = stdin; - else - { - f = fopen(filename,"r"); - if (f == NULL) - { - fprintf(stderr,">E opengraphfile: can't open %s\n",filename); - return NULL; - } - } - - firstc = c = getc(f); - if (c == EOF) - { - *codetype = GRAPH6; - return f; - } - - if (c != '>') - { - *codetype = firstc == ':' ? SPARSE6 : GRAPH6; - ungetc(c,f); - } - else - { - bad_header = FALSE; - if ((c = getc(f)) == EOF || c != '>') - bad_header = TRUE; - if (!bad_header && - ((c = getc(f)) == EOF || (c != 'g' && c != 's'))) - bad_header = TRUE; - if (!bad_header && c == 'g') - { - if ((c = getc(f)) == EOF || c != 'r' || - (c = getc(f)) == EOF || c != 'a' || - (c = getc(f)) == EOF || c != 'p' || - (c = getc(f)) == EOF || c != 'h' || - (c = getc(f)) == EOF || c != '6' || - (c = getc(f)) == EOF || c != '<' || - (c = getc(f)) == EOF || c != '<') - bad_header = TRUE; - else - *codetype = GRAPH6 | HAS_HEADER; - } - else if (!bad_header && c == 's') - { - if ((c = getc(f)) == EOF || c != 'p' || - (c = getc(f)) == EOF || c != 'a' || - (c = getc(f)) == EOF || c != 'r' || - (c = getc(f)) == EOF || c != 's' || - (c = getc(f)) == EOF || c != 'e' || - (c = getc(f)) == EOF || c != '6' || - (c = getc(f)) == EOF || c != '<' || - (c = getc(f)) == EOF || c != '<') - bad_header = TRUE; - else - *codetype = SPARSE6 | HAS_HEADER; - } - if (bad_header) - { - fprintf(stderr,">E opengraphfile: illegal header in %s\n", - filename == NULL ? "stdin" : filename); - *codetype = UNKNOWN_TYPE | HAS_HEADER; - return NULL; - } - } - - if (position <= 1) return f; - - if (filename == NULL || !assumefixed || (*codetype&SPARSE6) - || firstc == ':') - { - l = 1; - while ((c = getc(f)) != EOF) - { - if (c == '\n') - { - ++l; - if (l == position) break; - } - } - if (l == position) return f; - - fprintf(stderr, - ">E opengraphfile: can't find line %ld in %s\n",position, - filename == NULL ? "stdin" : filename); - return NULL; - } - else - { - pos1 = ftell(f); - if (pos1 < 0) - { - fprintf(stderr,">E opengraphfile: error on first ftell\n"); - return NULL; - } - - for (i = 1; (c = getc(f)) != EOF && c != '\n'; ++i) {} - ogf_linelen = i; - - if (c == EOF) - { - fprintf(stderr, - ">E opengraphfile: required record no present\n"); - return NULL; - } - - pos2 = ftell(f); - if (pos2 < 0) - { - fprintf(stderr,">E opengraphfile: error on second ftell\n"); - return NULL; - } - - pos = pos1 + (position-1)*(pos2-pos1); - if (fseek(f,pos,SEEK_SET) < 0) - { - fprintf(stderr,">E opengraphfile: seek failed\n"); - return NULL; - } - } - - return f; -} - -/*********************************************************************/ - -static char* -showg_getline(FILE *f) /* read a line with error checking */ - /* includes \n (if present) and \0. - Immediate EOF causes NULL return. */ -{ - DYNALLSTAT(char,s,s_sz); - int c; - long i; - - DYNALLOC1(char,s,s_sz,500,"showg_getline"); - - i = 0; - while ((c = getc(f)) != EOF && c != '\n') - { - if (i == s_sz-2) DYNREALLOC(char,s,s_sz,s_sz+1000,"showg_getline"); - s[i++] = c; - } - - if (i == 0 && c == EOF) return NULL; - - if (c == '\n') s[i++] = '\n'; - s[i] = '\0'; - return s; -} - -/****************************************************************************/ - -static int -graphsize(char *s) -/* Get size of graph out of graph6 or sparse6 string. */ -{ - char *p; - int n; - - if (s[0] == ':') p = s+1; - else p = s; - n = *p++ - BIAS6; - - if (n > SMALLN) - { - n = *p++ - BIAS6; - n = (n << 6) | (*p++ - BIAS6); - n = (n << 6) | (*p++ - BIAS6); - } - return n; -} - -/****************************************************************************/ - -static void -stringtograph(char *s, graph *g, int m) - /* Convert string (graph6 or sparse6 format) to graph. */ - /* Assumes g is big enough to hold it. */ -{ - char *p; - int n,i,j,k,v,x,nb; - unsigned long ii; - set *gi,*gj; - - n = graphsize(s); - - p = s + 1 + (s[0] == ':'); - if (n > SMALLN) p += 3; - - if (TIMESWORDSIZE(m) < n) - gt_abort(">E stringtograph: impossible m value\n"); - - if (n == 0) return; - - for (ii = 0; ii < m*(unsigned long)n; ++ii) g[ii] = 0; - - if (s[0] != ':') /* graph6 format */ - { - k = 1; - for (j = 1; j < n; ++j) - { - gj = GRAPHROW(g,j,m); - - for (i = 0; i < j; ++i) - { - if (--k == 0) - { - k = 6; - x = *(p++) - BIAS6; - } - - if (x & TOPBIT6) - { - gi = GRAPHROW(g,i,m); - ADDELEMENT(gi,j); - ADDELEMENT(gj,i); - } - x <<= 1; - } - } - } - else /* sparse6 format */ - { - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) - {} - - k = 1; - v = 0; - for (;;) - { - if (--k == 0) - { - k = 6; - if (*p == '\n' || *p == '\0') break; - else x = *p - BIAS6; - ++p; - } - else - x <<= 1; - - if (x & TOPBIT6) ++v; - j = 0; - for (i = 0; i < nb; ++i) - { - if (--k == 0) - { - k = 6; - if (*p == '\n' || *p == '\0') break; - else x = *p - BIAS6; - ++p; - } - else - x <<= 1; - if (x & TOPBIT6) j = (j << 1) | 1; - else j <<= 1; - } - if (i < nb) break; - if (j > v) - v = j; - else if (v < n) - { - ADDELEMENT(GRAPHROW(g,v,m),j); - ADDELEMENT(GRAPHROW(g,j,m),v); - } - } - } -} - -/***********************************************************************/ - -static graph* /* read graph into nauty format */ -readg(FILE *f, graph *g, int reqm, int *pm, int *pn) - /* graph6 and sparse6 formats are supported */ - /* f = an open file */ - /* g = place to put the answer (NULL for dynamic allocation) */ - /* reqm = the requested value of m (0 => compute from n) */ - /* pm = the actual value of m */ - /* pn = the value of n */ -{ - char *s,*p,*readg_line; - int m,n,readg_code; - - if ((readg_line = showg_getline(f)) == NULL) return NULL; - - s = readg_line; - if (s[0] == ':') - { - readg_code = SPARSE6; - p = s + 1; - } - else - { - readg_code = GRAPH6; - p = s; - } - - while (*p >= BIAS6 && *p <= MAXBYTE) - ++p; - if (*p == '\0') - gt_abort(">E showg: missing newline\n"); - else if (*p != '\n') - gt_abort(">E showg: illegal character\n"); - - n = graphsize(s); - if (readg_code == GRAPH6 && p - s != G6LEN(n)) - { - fprintf(stderr,"p-s=%d G6LEN(%d)=%d\n",(int)(p-s),n,G6LEN(n)); - gt_abort(">E showg: truncated graph6 line\n"); - } - - if (reqm > 0 && TIMESWORDSIZE(reqm) > n) - gt_abort(">E showg: reqm too small\n"); - else if (reqm > 0) - m = reqm; - else - m = (n + WORDSIZE - 1) / WORDSIZE; - - if (g == NULL) - { - if ((g = (graph*)ALLOCS(n,m*sizeof(graph))) == NULL) - gt_abort(">E showg: malloc failed\n"); - } - - *pn = n; - *pm = m; - - stringtograph(s,g,m); - return g; -} - -/**************************************************************************/ - -static int -longvalue(char **ps, long *l) -{ - boolean neg,pos; - long sofar,last; - char *s; - - s = *ps; - pos = neg = FALSE; - if (*s == '-') - { - neg = TRUE; - ++s; - } - else if (*s == '+') - { - pos = TRUE; - ++s; - } - - if (*s < '0' || *s > '9') - { - *ps = s; - return (pos || neg) ? ARG_ILLEGAL : ARG_MISSING; - } - - sofar = 0; - - for (; *s >= '0' && *s <= '9'; ++s) - { - last = sofar; - sofar = sofar * 10 + (*s - '0'); - if (sofar < last || sofar > MAXARG) - { - *ps = s; - return ARG_TOOBIG; - } - } - *ps = s; - *l = neg ? -sofar : sofar; - return ARG_OK; -} - -/*************************************************************************/ - -static void -arg_int(char **ps, int *val, char *id) -{ - int code; - long longval; - - code = longvalue(ps,&longval); - *val = longval; - if (code == ARG_MISSING || code == ARG_ILLEGAL) - { - fprintf(stderr,">E %s: missing argument value\n",id); - gt_abort(NULL); - } - else if (code == ARG_TOOBIG || *val != longval) - { - fprintf(stderr,">E %s: argument value too large\n",id); - gt_abort(NULL); - } -} - -/************************************************************************/ - -static void -arg_range(char **ps, long *val1, long *val2, char *id) -{ - int code; - char *s; - - s = *ps; - code = longvalue(&s,val1); - if (code != ARG_MISSING) - { - if (code == ARG_ILLEGAL) - { - fprintf(stderr,">E %s: bad range\n",id); - gt_abort(NULL); - } - else if (code == ARG_TOOBIG) - { - fprintf(stderr,">E %s: value too big\n",id); - gt_abort(NULL); - } - } - else if (*s != ':' && *s != '-') - { - fprintf(stderr,">E %s: missing value\n",id); - gt_abort(NULL); - } - else - *val1 = -NOLIMIT; - - if (*s == ':' || *s == '-') - { - ++s; - code = longvalue(&s,val2); - if (code == ARG_MISSING) - *val2 = NOLIMIT; - else if (code == ARG_TOOBIG) - { - fprintf(stderr,">E %s: value too big\n",id); - gt_abort(NULL); - } - else if (code == ARG_ILLEGAL) - { - fprintf(stderr,">E %s: illegal range\n",id); - gt_abort(NULL); - } - } - else - *val2 = *val1; - - *ps = s; -} - -/************************************************************************/ - -#define LABELORG 0 /* number of first vertex (any integer >= 0) */ -#define LINELEN 78 /* max characters per line (0 = no limit) */ - -static FILE *infile,*outfile; -static long nin; -extern int labelorg; - -/***************************************************************************** -* * -* putsetx(f,set1,curlenp,linelength,m,compress,start) writes the set * -* set1 to file f using at most linelength characters per line (excluding * -* '\n'). Set elements less than or equal to start are ignored. * -* *curlenp is the number of characters on the line so far; it is updated. * -* A range j1,j1+1,...,j2 for j2-j1>=2 is written as "j1:j2" if compress * -* is nonzero (eg. TRUE); otherwise each element is written separately. * -* No final '\n' is written. labelorg is used. * -* * -* FUNCTIONS CALLED: nextelement(),itos() * -* * -*****************************************************************************/ - -static void -putsetx(FILE *f, set *set1, int *curlenp, int linelength, int m, - boolean compress, int start) -{ - int slen,j1,j2; - char s[40]; - boolean first; - - first = TRUE; - j1 = start; - while ((j1 = nextelement(set1,m,j1)) >= 0) - { - j2 = j1; - if (compress) - { - while (nextelement(set1,m,j2) == j2 + 1) - ++j2; - if (j2 == j1+1) - j2 = j1; - } - slen = itos(j1 + labelorg,s); - if (j2 >= j1 + 2) - { - s[slen] = ':'; - slen += 1 + itos(j2 + labelorg,&s[slen+1]); - } - - if (*curlenp + slen + 1 >= linelength && linelength > 0) - { - fprintf(f,"\n "); - *curlenp = 1; - } - if (first) - { - fprintf(f,"%s",s); - *curlenp += slen; - first = FALSE; - } - else - { - fprintf(f," %s",s); - *curlenp += slen + 1; - } - j1 = j2; - } -} - -/***************************************************************************** -* * -* STOLEN FROM naututil.c * -* putgraphx(f,g,linelength,m,n) writes a list of the edges of g to f * -* using at most linelength characters per line (excluding '\n'). * -* If triang, only write the upper triangle. * -* labelorg is used. * -* * -*****************************************************************************/ - -static void -putgraphx(FILE *f, graph *g, int linelength, boolean triang, int m, int n) -{ - int i,curlen; - set *pg; - - for (i = 0, pg = g; i < n; ++i, pg += m) - { - fprintf(f,"%3d : ",i + labelorg); - curlen = 7; - putsetx(f,pg,&curlen,linelength,m,FALSE,triang ? i-1 : -1); - fprintf(f,";\n"); - } -} - -/***************************************************************************/ - -static void -putedges(FILE *f, graph *g, int linelength, int m, int n) - /* write list of edges */ -{ - int i,j,curlen,ne; - char s[20]; - set *pg; - - ne = 0; - for (i = 0, pg = g; i < n; ++i, pg += m) - { - for (j = i-1; (j = nextelement(pg,m,j)) >= 0;) - ++ne; - } - - fprintf(f,"%d %d\n",n,ne); - curlen = 0; - for (i = 0, pg = g; i < n; ++i, pg += m) - { - for (j = i-1; (j = nextelement(pg,m,j)) >= 0;) - { - if (curlen > 0 && curlen > linelength - 10 && linelength > 0) - { - fprintf(f,"\n"); - curlen = 0; - } - if (curlen > 0) - { - fprintf(f," "); - curlen += 2; - } - curlen += itos(i+labelorg,s); - fprintf(f,"%s",s); - fprintf(f," "); - curlen += 1 + itos(j+labelorg,s); - fprintf(f,"%s",s); - } - } - fprintf(f,"\n"); -} - -/***************************************************************************/ - -static void -putcgraph(FILE *f, graph *g, int linelength, int m, int n) - /* write compressed form */ -{ - int i,curlen; - int semicolons; - char s[20]; - set *pg; - - curlen = itos(n,s)+2; - fprintf(f,";n%sg",s); - - semicolons = 0; - for (i = 0, pg = g; i < n; ++i, pg += m) - { - if (nextelement(pg,m,i-1) >= 0) - { - while (semicolons > 0) - { - if (curlen >= linelength-1 && linelength > 0) - { - fprintf(f,"\n "); - curlen = 1; - } - fprintf(f,";"); - ++curlen; - --semicolons; - } - putsetx(f,pg,&curlen,linelength,m,FALSE,i-1); - semicolons = 1; - } - else - ++semicolons; - } - fprintf(f,".\n"); -} - -/**************************************************************************/ - -static void -putam(FILE *f, graph *g, int linelength, boolean space, boolean triang, - int m, int n) /* write adjacency matrix */ -{ - set *gi; - int i,j; - boolean first; - - for (i = 0, gi = (set*)g; i < n - (triang!=0); ++i, gi += m) - { - first = TRUE; - for (j = triang ? i+1 : 0; j < n; ++j) - { - if (!first && space) putc(' ',f); - else first = FALSE; - if (ISELEMENT(gi,j)) putc('1',f); - else putc('0',f); - } - putc('\n',f); - } -} - -/**************************************************************************/ -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - graph *g; - int m,n,codetype; - int argnum,j; - char *arg,sw; - boolean badargs; - long maxin,pval1,pval2; - boolean fswitch,pswitch,cswitch,dswitch; - boolean aswitch,lswitch,oswitch,Fswitch; - boolean Aswitch,eswitch,tswitch,qswitch; - int linelength; - char *infilename,*outfilename; - - if (argc > 1 && (strcmp(argv[1],"-help") == 0 - || (strcmp(argv[1],"--help") == 0))) - { - printf("Usage: %s\n\n%s",USAGE,HELPTEXT); - exit(0); - } - - if (sizeof(setword) < 4) - { - fprintf(stderr,">E showg: setword too small\n"); - fprintf(stderr," Please report this to bdm@cs.anu.edu.au\n"); - exit(1); - } - - fswitch = pswitch = cswitch = dswitch = FALSE; - aswitch = lswitch = oswitch = Fswitch = FALSE; - Aswitch = eswitch = tswitch = qswitch = FALSE; - infilename = outfilename = NULL; - linelength = LINELEN; - labelorg = 0; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('a',aswitch) - else SWBOOLEAN('A',Aswitch) - else SWBOOLEAN('c',cswitch) - else SWBOOLEAN('d',dswitch) - else SWBOOLEAN('e',eswitch) - else SWBOOLEAN('f',fswitch) - else SWBOOLEAN('F',Fswitch) - else SWBOOLEAN('t',tswitch) - else SWBOOLEAN('q',qswitch) - else SWRANGE('p',pswitch,pval1,pval2,"showg -p") - else SWINT('l',lswitch,linelength,"showg -l") - else SWINT('o',oswitch,labelorg,"listo -o") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (labelorg < 0) gt_abort(">E showg: negative origin forbidden.\n"); - - if ((aswitch!=0) + (Aswitch!=0) + (eswitch!=0) - + (dswitch!=0) + (cswitch!=0) > 1) - gt_abort(">E showg: -aAecd are incompatible\n"); - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - fprintf(stderr,"Use showg -help to see a list of the options.\n"); - exit(1); - } - - if (!pswitch || pval1 < 1) pval1 = 1; - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,fswitch, - pswitch ? pval1 : 1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - nin = 0; - if (!pswitch || pval2 == NOLIMIT) - maxin = NOLIMIT; - else if (pval1 < 1) maxin = pval2; - else maxin = pval2 - pval1 + 1; - while (nin < maxin || maxin == NOLIMIT) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - - if (Fswitch && nin > 1) fprintf(outfile,"\f"); - - if (cswitch) - putcgraph(outfile,g,linelength,m,n); - else if (dswitch) - { - if (qswitch) - fprintf(outfile,"%d\n",n); - else - { - fprintf(outfile,"\n!Graph %ld.\n",pval1+nin-1); - fprintf(outfile,"n=%d $=%d g\n",n,labelorg); - } - putgraphx(outfile,g,linelength,tswitch,m,n); - if (!qswitch) fprintf(outfile,"$$\n"); - } - else - { - if (qswitch) - { - if (!eswitch) fprintf(outfile,"%d\n",n); - } - else fprintf(outfile,"\nGraph %ld, order %d.\n", - pval1+nin-1,n); - if (aswitch|Aswitch) - putam(outfile,g,linelength,Aswitch,tswitch,m,n); - else if (eswitch) - putedges(outfile,g,linelength,m,n); - else - putgraphx(outfile,g,linelength,tswitch,m,n); - } - FREES(g); - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/sorttemplates.c b/tools/nauty25r9_mac/sorttemplates.c deleted file mode 100644 index e549c4d..0000000 --- a/tools/nauty25r9_mac/sorttemplates.c +++ /dev/null @@ -1,438 +0,0 @@ -/* sorttemplates.c version 1.0, May 11, 2010. - * Author: Brendan McKay; bdm@cs.anu.edu.au - * - * This file contains templates for creating in-place sorting procedures - * for different data types. It cannot be compiled separately but - * should be #included after defining a few preprocessor variables. - * SORT_OF_SORT and SORT_NAME are required, the rest have defaults. - * - * SORT_OF_SORT = 1: Creates a procedure - * static void SORT_NAME(SORT_TYPE1 *x, int n) - * which permutes x[0..n-1] so that x[0] <= ... <= x[n-1]. - * SORT_OF_SORT = 2: Creates a procedure - * static void SORT_NAME(SORT_TYPE1 *x, SORT_TYPE2 *y, int n) - * which permutes x[0..n-1] so that x[0] <= ... <= x[n-1] - * and also permutes y[0..n-1] by the same permutation. - * SORT_OF_SORT = 3: Creates a procedure - * static void SORT_NAME(SORT_TYPE1 *x, SORT_TYPE2 *y, int n) - * which permutes x[0..n-1] so that y[x[0]] <= ... <= y[x[n-1]]. - * The array y[] is not changed. - * - * SORT_NAME = the name of the procedure to be created - * - * SORT_TYPE1 = type of the first or only array (default "int") - * This can be any numeric type for SORT_OF_SORT=1,2, but - * should be an integer type for SORT_OF_SORT=3. - * SORT_TYPE2 = type of the second array if needed (default "int") - * This can be any assignable type (including a structure) for - * SORT_OF_SORT=2, but must be a numeric type for SORT_OF_SORT=3. - * - * SORT_MINPARTITION = least number of elements for using quicksort - * partitioning, otherwise insertion sort is used (default "11") - * SORT_MINMEDIAN9 = least number of elements for using the median of 3 - * medians of 3 for partitioning (default "320") - * SORT_FUNCTYPE = type of sort function (default "static void") - * - * This file can be included any number of times provided the value - * of SORT_NAME is different each time. - */ - -#define SORT_MEDIAN_OF_3(a,b,c) \ - ((a) <= (b) ? ((b) <= (c) ? (b) : (c) <= (a) ? (a) : (c)) \ - : ((a) <= (c) ? (a) : (c) <= (b) ? (b) : (c))) - -#if !defined(SORT_OF_SORT) || !defined(SORT_NAME) - #error Either SORT_OF_SORT or SORT_NAME is undefined -#endif - -#if (SORT_OF_SORT < 1) || (SORT_OF_SORT > 3) - #error Unknown value of SORT_OF_SORT -#endif - -#ifndef SORT_TYPE1 -#define SORT_TYPE1 int -#endif - -#ifndef SORT_TYPE2 -#define SORT_TYPE2 int -#endif - -#ifndef SORT_MINPARTITION -#define SORT_MINPARTITION 10 -#endif - -#ifndef SORT_MINMEDIAN9 -#define SORT_MINMEDIAN9 320 -#endif - -#ifndef SORT_FUNCTYPE -#define SORT_FUNCTYPE static void -#endif - -#define SORT_SWAP1(x,y) tmp1 = x; x = y; y = tmp1; -#define SORT_SWAP2(x,y) tmp2 = x; x = y; y = tmp2; - -/*******************************************************************/ - -#if SORT_OF_SORT == 1 -SORT_FUNCTYPE -SORT_NAME(SORT_TYPE1 *x, int n) -{ - int i,j; - int a,d,ba,dc,s,nn; - SORT_TYPE1 tmp1,v,v1,v2,v3; - SORT_TYPE1 *x0,*xa,*xb,*xc,*xd,*xh,*xl; - struct {SORT_TYPE1 *addr; int len;} stack[40]; - int top; - - top = 0; - if (n > 1) - { - stack[top].addr = x; - stack[top].len = n; - ++top; - } - - while (top > 0) - { - --top; - x0 = stack[top].addr; - nn = stack[top].len; - - if (nn < SORT_MINPARTITION) - { - for (i = 1; i < nn; ++i) - { - tmp1 = x0[i]; - for (j = i; x0[j-1] > tmp1; ) - { - x0[j] = x0[j-1]; - if (--j == 0) break; - } - x0[j] = tmp1; - } - continue; - } - - if (nn < SORT_MINMEDIAN9) - v = SORT_MEDIAN_OF_3(x0[0],x0[nn/2],x0[nn-1]); - else - { - v1 = SORT_MEDIAN_OF_3(x0[0],x0[1],x0[2]); - v2 = SORT_MEDIAN_OF_3(x0[nn/2-1],x0[nn/2],x0[nn/2+1]); - v3 = SORT_MEDIAN_OF_3(x0[nn-3],x0[nn-2],x0[nn-1]); - v = SORT_MEDIAN_OF_3(v1,v2,v3); - } - - xa = xb = x0; xc = xd = x0+(nn-1); - for (;;) - { - while (xb <= xc && *xb <= v) - { - if (*xb == v) - { - *xb = *xa; *xa = v; ++xa; - } - ++xb; - } - while (xc >= xb && *xc >= v) - { - if (*xc == v) - { - *xc = *xd; *xd = v; --xd; - } - --xc; - } - if (xb > xc) break; - SORT_SWAP1(*xb,*xc); - ++xb; - --xc; - } - - a = xa - x0; - ba = xb - xa; - if (ba > a) s = a; else s = ba; - for (xl = x0, xh = xb-s; s > 0; --s) - { - *xl = *xh; *xh = v; ++xl; ++xh; - } - d = xd - x0; - dc = xd - xc; - if (dc > nn-1-d) s = nn-1-d; else s = dc; - for (xl = xb, xh = x0 + (nn-s); s > 0; --s) - { - *xh = *xl; *xl = v; ++xl; ++xh; - } - - if (ba > dc) - { - if (ba > 1) - { - stack[top].addr = x0; stack[top].len = ba; ++top; - } - if (dc > 1) - { - stack[top].addr = x0+(nn-dc); stack[top].len = dc; ++top; - } - } - else - { - if (dc > 1) - { - stack[top].addr = x0+(nn-dc); stack[top].len = dc; ++top; - } - if (ba > 1) - { - stack[top].addr = x0; stack[top].len = ba; ++top; - } - } - } -} -#endif - -#if SORT_OF_SORT == 2 -SORT_FUNCTYPE -SORT_NAME(SORT_TYPE1 *x, SORT_TYPE2 *y, int n) -{ - int i,j; - int a,d,ba,dc,s,nn; - SORT_TYPE2 tmp2,*y0,*ya,*yb,*yc,*yd,*yl,*yh; - SORT_TYPE1 tmp1,v,v1,v2,v3; - SORT_TYPE1 *x0,*xa,*xb,*xc,*xd,*xh,*xl; - struct {SORT_TYPE1 *addr; int len;} stack[40]; - int top; - - top = 0; - if (n > 1) - { - stack[top].addr = x; - stack[top].len = n; - ++top; - } - - while (top > 0) - { - --top; - x0 = stack[top].addr; - y0 = y + (x0-x); - nn = stack[top].len; - - if (nn < SORT_MINPARTITION) - { - for (i = 1; i < nn; ++i) - { - tmp1 = x0[i]; - tmp2 = y0[i]; - for (j = i; x0[j-1] > tmp1; ) - { - x0[j] = x0[j-1]; - y0[j] = y0[j-1]; - if (--j == 0) break; - } - x0[j] = tmp1; - y0[j] = tmp2; - } - continue; - } - - if (nn < SORT_MINMEDIAN9) - v = SORT_MEDIAN_OF_3(x0[0],x0[nn/2],x0[nn-1]); - else - { - v1 = SORT_MEDIAN_OF_3(x0[0],x0[1],x0[2]); - v2 = SORT_MEDIAN_OF_3(x0[nn/2-1],x0[nn/2],x0[nn/2+1]); - v3 = SORT_MEDIAN_OF_3(x0[nn-3],x0[nn-2],x0[nn-1]); - v = SORT_MEDIAN_OF_3(v1,v2,v3); - } - - xa = xb = x0; xc = xd = x0+(nn-1); - ya = yb = y0; yc = yd = y0+(nn-1); - for (;;) - { - while (xb <= xc && *xb <= v) - { - if (*xb == v) - { - *xb = *xa; *xa = v; ++xa; - SORT_SWAP2(*ya,*yb); ++ya; - } - ++xb; ++yb; - } - while (xc >= xb && *xc >= v) - { - if (*xc == v) - { - *xc = *xd; *xd = v; --xd; - SORT_SWAP2(*yc,*yd); --yd; - } - --xc; --yc; - } - if (xb > xc) break; - SORT_SWAP1(*xb,*xc); - SORT_SWAP2(*yb,*yc); - ++xb; ++yb; - --xc; --yc; - } - - a = xa - x0; - ba = xb - xa; - if (ba > a) s = a; else s = ba; - for (xl = x0, xh = xb-s, yl = y0, yh = yb-s; s > 0; --s) - { - *xl = *xh; *xh = v; ++xl; ++xh; - SORT_SWAP2(*yl,*yh); ++yl; ++yh; - } - d = xd - x0; - dc = xd - xc; - if (dc > nn-1-d) s = nn-1-d; else s = dc; - for (xl = xb, xh = x0+(nn-s), yl = yb, yh = y0+(nn-s); s > 0; --s) - { - *xh = *xl; *xl = v; ++xl; ++xh; - SORT_SWAP2(*yl,*yh); ++yl; ++yh; - } - - if (ba > dc) - { - if (ba > 1) - { - stack[top].addr = x0; stack[top].len = ba; ++top; - } - if (dc > 1) - { - stack[top].addr = x0+(nn-dc); stack[top].len = dc; ++top; - } - } - else - { - if (dc > 1) - { - stack[top].addr = x0+(nn-dc); stack[top].len = dc; ++top; - } - if (ba > 1) - { - stack[top].addr = x0; stack[top].len = ba; ++top; - } - } - } -} -#endif - -#if SORT_OF_SORT == 3 -SORT_FUNCTYPE -SORT_NAME(SORT_TYPE1 *x, SORT_TYPE2 *y, int n) -{ - int i,j; - int a,d,ba,dc,s,nn; - SORT_TYPE2 tmp2,v,v1,v2,v3; - SORT_TYPE1 tmp1,*x0,*xa,*xb,*xc,*xd,*xh,*xl; - struct {SORT_TYPE1 *addr; int len;} stack[40]; - int top; - - top = 0; - if (n > 1) - { - stack[top].addr = x; - stack[top].len = n; - ++top; - } - - while (top > 0) - { - --top; - x0 = stack[top].addr; - nn = stack[top].len; - - if (nn < SORT_MINPARTITION) - { - for (i = 1; i < nn; ++i) - { - tmp1 = x0[i]; - tmp2 = y[tmp1]; - for (j = i; y[x0[j-1]] > tmp2; ) - { - x0[j] = x0[j-1]; - if (--j == 0) break; - } - x0[j] = tmp1; - } - continue; - } - - if (nn < SORT_MINMEDIAN9) - v = SORT_MEDIAN_OF_3(y[x0[0]],y[x0[nn/2]],y[x0[nn-1]]); - else - { - v1 = SORT_MEDIAN_OF_3(y[x0[0]],y[x0[1]],y[x0[2]]); - v2 = SORT_MEDIAN_OF_3(y[x0[nn/2-1]],y[x0[nn/2]],y[x0[nn/2+1]]); - v3 = SORT_MEDIAN_OF_3(y[x0[nn-3]],y[x0[nn-2]],y[x0[nn-1]]); - v = SORT_MEDIAN_OF_3(v1,v2,v3); - } - - xa = xb = x0; xc = xd = x0+(nn-1); - for (;;) - { - while (xb <= xc && y[*xb] <= v) - { - if (y[*xb] == v) - { - SORT_SWAP1(*xa,*xb); ++xa; - } - ++xb; - } - while (xc >= xb && y[*xc] >= v) - { - if (y[*xc] == v) - { - SORT_SWAP1(*xc,*xd); --xd; - } - --xc; - } - if (xb > xc) break; - SORT_SWAP1(*xb,*xc); - ++xb; - --xc; - } - - a = xa - x0; - ba = xb - xa; - if (ba > a) s = a; else s = ba; - for (xl = x0, xh = xb-s; s > 0; --s) - { - SORT_SWAP1(*xl,*xh); ++xl; ++xh; - } - d = xd - x0; - dc = xd - xc; - if (dc > nn-1-d) s = nn-1-d; else s = dc; - for (xl = xb, xh = x0 + (nn-s); s > 0; --s) - { - SORT_SWAP1(*xl,*xh); ++xl; ++xh; - } - - if (ba > dc) - { - if (ba > 1) - { - stack[top].addr = x0; stack[top].len = ba; ++top; - } - if (dc > 1) - { - stack[top].addr = x0+(nn-dc); stack[top].len = dc; ++top; - } - } - else - { - if (dc > 1) - { - stack[top].addr = x0+(nn-dc); stack[top].len = dc; ++top; - } - if (ba > 1) - { - stack[top].addr = x0; stack[top].len = ba; ++top; - } - } - } -} -#endif - -#undef SORT_NAME -#undef SORT_OF_SORT diff --git a/tools/nauty25r9_mac/splay.c b/tools/nauty25r9_mac/splay.c deleted file mode 100644 index cad93e8..0000000 --- a/tools/nauty25r9_mac/splay.c +++ /dev/null @@ -1,413 +0,0 @@ -/* splay.c - code for splay trees Version of August 18, 2001. - * Author: Brendan McKay bdm@cs.anu.edu.au - - This file is not meant to be compiled separately, but to be - #included into other programs. Use it like this: - - 1. Define a node type SPLAYNODE. It must be a structure that - contains at least the pointer fields left, right and parent of - type SPLAYNODE*. - Also define a macro SPLAYNODESIZE giving the size of an object - of type SPLAYNODE, unless sizeof(SPLAYNODE) is adequate. - - 2. Declare a variable of type SPLAYNODE* to point to the root - of the tree, and initialise it to NULL. - - 3. Declare SCAN_ARGS to be the additional arguments needed for - splay_scan(), including a leading comma. - - 4. Declare ACTION(p) for what splay_scan() should do for node p. - - 5. Declare INSERT_ARGS to be the additional arguments needed - for splay_insert(), including a leading comma. - - 6. Declare COMPARE(p) to compare INSERT_ARGS or LOOKUP_ARGS to the - contents of node p. <0, 0, >0 if INSERT_ARGS is greater, equal, - less, than p. This has to be an expression with a value, so you will - need to make it a procedure call if the comparison is complicated. - - If you are using something like strcmp, the correct order is - strcmp( INSERT_ARGS, p ). - - 7. Declare PRESENT(p) for what to do if INSERT_ARGS is already - present, in node p. There is a spare int variable i available. - Typically, this might update some data in the node p. - - 8. Declare NOT_PRESENT(p) for what to do if INSERT_ARGS is not - in the tree and p is a fresh node to hold it. No need to set - the left, right, and parent fields. Use i here too if you like. - Typically, this might initialise the data in node p. - - PRESENT(p) and NOT_PRESENT(p) should not manipulate the - tree pointers. However, each of them can include a - return if you don't want to change the tree. In the - case of NOT_PRESENT(p), do free(p) before returning. - - In the case of PRESENT(p), it is also legal to delete the - node from the tree using SCAN_DELETE(to_root,p). In that - case you MUST return immediately afterwards. - - 9. Declare LOOKUP_ARGS to be the additional arguments needed - for splay_lookup(), including a leading comma. The default - for LOOKUP_ARGS is to be the same as INSERT_ARGS. - - 10. #include "splay.c" - - - Calls: - - Suppose "root" is name of the variable described in step 2. - - There is no need to initialise the tree. Step 2 did that already. - - To insert something in the tree: - splay_insert(&root, ...stuff...) - where "stuff" is the stuff you want to insert, declared as INSERT_ARGS. - If the key (some part of the stuff decided by you) is present in an - existing tree node p, PRESENT(p) is executed. Otherwise, a new tree - node p is created and NOT_PRESENT(p) is executed. - - To look up something in the tree: - splay_lookup(&root, ...stuff...) - where "stuff" is the stuff you want to find, declared as LOOKUP_ARGS. - It will return a pointer to the tree node with the right key, or NULL - if there is no such tree node. - - To do something for each node of the tree: - splay_scan(root, ...stuff...) - where "stuff" is anything you like (including nothing). This will - execute ACTION(p) for each node p in inorder. - - To delete the node p (which MUST be in the tree: - splay_delete(&root, p) - Nothing happens if p is NULL, so you can use - splay_delete(&root, splay_lookup(&root, ...stuff...)) - to delete a node, if any, containing stuff. - - It is possible to have splay trees of several types in the same - program. Just include "splay.c" several times, with the procedure - names SPLAY, SPLAY_SCAN, SPLAY_LOOKUP, SPLAY_INSERT, SPLAY_DELETE - defined to distinct names. You have to redefine them all even if - you aren't using them all. -*/ - -#define S_A 0 -#define S_L 1 -#define S_R 2 -#define S_LL 3 -#define S_LR 4 -#define S_RL 5 -#define S_RR 6 - -#ifndef SPLAYNODESIZE -#define SPLAYNODESIZE sizeof(SPLAYNODE) -#endif - -#ifndef LOOKUP_ARGS -#define LOOKUP_ARGS INSERT_ARGS -#endif - -#ifndef SPLAY -#define SPLAY splay -#define SPLAY_SCAN splay_scan -#define SPLAY_LOOKUP splay_lookup -#define SPLAY_INSERT splay_insert -#define SPLAY_DELETE splay_delete -#endif - -/*********************************************************************/ - -void -SPLAY_SCAN(SPLAYNODE *root SCAN_ARGS) -/* Do ACTION(p) for each node of the tree, in inorder. Nonrecursive! */ -{ - int code; - SPLAYNODE *p; - - p = root; - code = S_A; - - while (p) - { - switch (code) /* deliberate flow-ons */ - { - case S_A: - if (p->left) - { - p = p->left; - break; - } - case S_L: - ACTION(p); - if (p->right) - { - p = p->right; - code = S_A; - break; - } - case S_R: - if (p->parent && p->parent->left == p) code = S_L; - else code = S_R; - p = p->parent; - break; - } - } -} - -/*********************************************************************/ - -static void -SPLAY(SPLAYNODE *p) -/* Splay the node p. It becomes the new root. */ -{ - SPLAYNODE *q,*r,*s; - SPLAYNODE *a,*b,*c; - int code; - -#define LCHILD(x,y) {(x)->left = y; if (y) (y)->parent = x;} -#define RCHILD(x,y) {(x)->right = y; if (y) (y)->parent = x;} - - while (p->parent) - { - a = p->left; - b = p->right; - q = p->parent; - if (q->left == p) - { - code = S_L; - c = q->right; - } - else - { - code = S_R; - c = q->left; - } - r = q->parent; - if (r) - { - if (r->left == q) code = (code == S_L ? S_LL : S_LR); - else code = (code == S_L ? S_RL : S_RR); - s = r->parent; - p->parent = s; - if (s) - { - if (s->left == r) s->left = p; - else s->right = p; - } - } - else - { - p->parent = NULL; - } - - switch (code) - { - case S_L: - RCHILD(p,q); - LCHILD(q,b); - break; - case S_R: - LCHILD(p,q); - RCHILD(q,a); - break; - case S_LL: - RCHILD(p,q); - RCHILD(q,r); - LCHILD(q,b); - LCHILD(r,c); - break; - case S_RR: - LCHILD(p,q); - LCHILD(q,r); - RCHILD(r,c); - RCHILD(q,a); - break; - case S_LR: - LCHILD(p,q); - RCHILD(p,r); - RCHILD(q,a); - LCHILD(r,b); - break; - case S_RL: - LCHILD(p,r); - RCHILD(p,q); - RCHILD(r,a); - LCHILD(q,b); - break; - } - } -} - -/*********************************************************************/ - -void -SPLAY_INSERT(SPLAYNODE **to_root INSERT_ARGS) -/* Do insertion operation. On return, the object being inserted - is at the root of the tree regardless of whether a new node - needed to be created for it. */ -{ - int i,cmp; - SPLAYNODE *p,*ppar,*new_node; - - p = *to_root; - cmp = 0; - - while (p != NULL) - { - cmp = COMPARE(p); - if (cmp == 0) - { - PRESENT(p); - SPLAY(p); - *to_root = p; - return; - } - else if (cmp < 0) - { - ppar = p; - p = p->left; - } - else - { - ppar = p; - p = p->right; - } - } - - if ((new_node = (SPLAYNODE*)malloc(SPLAYNODESIZE)) == NULL) - { - fprintf(stderr,">E malloc failed in splay_insert()\n"); - exit(1); - } - - NOT_PRESENT(new_node); - - new_node->left = new_node->right = NULL; - - if (cmp == 0) - { - *to_root = new_node; - new_node->parent = NULL; - } - else if (cmp < 0) - { - ppar->left = new_node; - new_node->parent = ppar; - } - else - { - ppar->right = new_node; - new_node->parent = ppar; - } - - SPLAY(new_node); - *to_root = new_node; -} - -/*********************************************************************/ - -SPLAYNODE* -SPLAY_LOOKUP(SPLAYNODE **to_root LOOKUP_ARGS) -/* Do a look-up operation. If found, return a pointer to the - node containing it. If not, return NULL. */ -{ - int i,cmp; - SPLAYNODE *p; - - p = *to_root; - cmp = 0; - - while (p != NULL) - { - cmp = COMPARE(p); - if (cmp == 0) - { - SPLAY(p); - *to_root = p; - return p; - } - else if (cmp < 0) - p = p->left; - else - p = p->right; - } - - return NULL; -} - -/*********************************************************************/ - -void -SPLAY_DELETE(SPLAYNODE **to_root, SPLAYNODE *p) -/* Remove node p from the tree and free it. */ -{ - SPLAYNODE *q; - - if (p == NULL) return; - - SPLAY(p); - *to_root = p; - - /* Now we have to delete the root. */ - - /* No right child (includes no children). */ - - if (!p->right) - { - *to_root = p->left; - if (p->left) p->left->parent = NULL; - free(p); - return; - } - - /* right child but no left child */ - - if (!p->left) - { - *to_root = p->right; - p->right->parent = NULL; - free(p); - return; - } - - /* both children exist */ - - for (q = p->left; q->right; q = q->right) {} - - if (q->left) q->left->parent = q->parent; - if (q->parent == p) q->parent->left = q->left; - else q->parent->right = q->left; - - q->left = p->left; - q->right = p->right; - q->parent = NULL; - if (p->left) p->left->parent = q; - if (p->right) p->right->parent = q; - *to_root = q; - free(p); -} - -/*********************************************************************/ - -/* The following shows the tree structure for debugging purposes. - If you define SPLAY_DUMP you must also define DUMP_ARGS, - DUMP_LEFT, DUMP_RIGHT and DUMP_ACTION(p). */ - -#ifdef SPLAY_DUMP -void -SPLAY_DUMP(SPLAYNODE *p DUMP_ARGS) -{ - int i; - - if (p == NULL) return; - - if (p->right && p->right->parent != p) - fprintf(stderr,"parent misaligned at %p-%p ************\n",p,p->right); - if (p->left && p->left->parent != p) - fprintf(stderr,"parent misaligned at %p-%p ************\n",p,p->left); - - SPLAY_DUMP(p->right DUMP_RIGHT); - DUMP_ACTION(p); - SPLAY_DUMP(p->left DUMP_LEFT); -} -#endif diff --git a/tools/nauty25r9_mac/subdivideg b/tools/nauty25r9_mac/subdivideg deleted file mode 100644 index b9874be8ecc54ef679bc7d92c6b6e4eab1c33ae0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117864 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

      WiwkjU?%s2 z%zE#jdf6l07&puVM*Y!&0ds>HosAkxVC-|L>R6liCY!@x4AP@$)<>sREj9?uFA-5i4XUh+1hd~ zax`gTPy#w0w2@>95~?CaNUm;nt}SQF1Hq#!3-$ROi7&c2w4XF;%Q4Lie+_lhVL102 z&gK#<7&tXtA0Fg2>l3Y^UKl^Ch0`4Ck0$DBTEiVBt?+HhhWKPwJ`d9E@dDdEYE-=X ziVM~jJP0Oj<#h(j?P^g6%C+S?M0$PLj-+?^*nj+ylt0!WTiqGmr;!Y zzMAb?wHtU0NoylVduY`iq=H(HG}gZ^rl~}$uKj$iZtl<{n;j*Gb+cYK*D<8Rmv`oW z8?es&E4uRQs|111bF}huZ|%{Id)0W8(4NFv@1X6uhe}#~#Ygp306EMZbAJ;b>?>a9 zt!>@7*JpkRoWAiyGE1wSWl!!QuX)t#Iix*5l16Cn!z0sPO}#Eo(iJL6(i9qUW_^4Y z9M;)*(VaW~Dy2Ww+`d-nFZg<7$&9Yt4Y03u@~86m!G4D(goSdlQ>XjzeORZhynvR% zrX?JDyHkY~hu)qAr_67(IaKdvkD)DUT-@$Ta%7|8SKZx}2<>{dKEF z_2xFlhfyO&uka^ywAnV1_;?#j7Fb}=WD(uSlG}JT_{j0ml?C&U+q@~Jv_Q0|MtIX~ zqcqPJZQ)I<8jOkt1Dl~yv60m@t+L)ov})BCz$r%Lm{Y6%Z!#Fl+<(GXQs>92$qta; zToj~Kx3Pc}1;jjNJ3x5_<_XY7JFxj6#I3Ep# z4g7KY91E(3$d2 zN~JZkAt~_C-b8ikPJ}-WIyd>9Ck)%5o0MjyC3WUjS|rh`xIEOSL@{jV{v6}IS;l)H z+J8R7yri}L7)Y^Ho73LW7RpS3k49S{I!eYE(;5*D{VjP0qJ@*maoYY$(2NJPKTc~4 znxFe4dq*=n*B{L`Dq4-`sP{@*neP)V;a8KO%EhAy3G6&y5j``9fv znmv#Wy4k9e+h4IY;M{KH7VL1=;d&5oCUnoc;pKFtcjTk*grn^RkYjF%>>3@kT#YbH z{qgKT#YTSxo)Od9{N~@7Q{N6a+XA_+Ca<|4I6rX6B;bsS?WDeMIJX(OuFa&<7MJ_9 zm7|JeDzBCeURZdY5=_76Lrh1J<}|^yPAxSMOxsax%wy)7sz+-!ga@Qhgq|ULGbW_a z%w*O#q`tamL**s4>o@LE?MYx)qQyI?Be$`nRWIJ4ww33uh+pb0-ryA|pV?8nUfybrloIUSD5cxdsQ2{OL5y|watSllKs{`icmnJeV`@fW}mLxxA$d?;~ zW)nk4H{WNAAa)OMEE9~V`?`6e9`(iQF4B4j&8;n0y8wMj>`h{`Qc(;x!_+oeypZ@~ zb0uClMUjo)hLL!0v9@xO(?~SQESjS&UmrO(H~gu3_t0v-3vj@k)21yyCukm#>4~{` zqMD1hB9}_^NE37MsnOcP`C!#ne$5$asE-^QU3n|vEaw0D4Yss#5|Lzv4arir@am{$t?#kL)t)Kk24Mz4-y+ts~%EXVia`#YXQ{1clC}D>k{*{EkJfPy|NH}JPTP6GgR6c3e$Jo&B6lWinL#D5(^2JN--Q1l8MfjOvlfX1#%S!WXx>C6$g0DyYl@N+YM{nF!8PNvJb|# z)ilOaovfUza%8+69U_YnoEh#KhO|^G0Eu=KC!@zPlhg$)a#>SbLX(5eQ$gqFpd2A6 z13`1AU`=7{D_Q@i6XOV@eh+gFActaqB$m+#9|X)9ec^?mc|2S|rAmc;%UXwYi+_Anx zPrQvK;YhRZRhZWiG!K;2G0S|(ShpvW$Z;HxWjU2xb{v3Ry7)zTlcaqo)`ZW6J(vgR z2PI1nHx3Nt=n2=W{I6!7NHlr&hqtf=?!}l<=Wk|b0)fknR{716Ip`_lnmU6<>$n@TtAa=C>{I8*@V@zX|#NiaOouSMBfCuQ|nL=P?G; z`OI4c`=C!}^4T~1LZAX+y(OOz?^MUe&j14tHVspL8sL;iD7FN>Q~u2P-cvuRXAF zkLp$l!3USlY0Eth9~_hoB*)xk@gc>VMbYwN^Z`WQcr=4)*5w{I57_Hpucy)6rafOO zz3gG~Y|x^`($N)kKt_Gde#>+ZOM(WiItPIEPf*CLsjtSn@nGIaO8ZmayAQ8OH%FW#(!rwfe&3g4V zlJD~5dqna*EcuolL4hBbeD{^N5uN(6Qpirl+781qzK?Y?+cx#5Eb-`LDBfk?V+%f3 z8G{|7Wla)(!VdpX!uQ$X^%A~~aJs&a+QrbFdLs4{v1&$E=VK8|PwzZmbfa!=)@9q^ zq*@!FMa32IA`>hsuCXdj#WjxXOR2bia}z5Sv`H~IE`KY}1xMREdL4AUyY=Wh+=rpWvhadFUgiaz|Uu-VV*_mh!_bQ*)Ji5Gg z1dX8zDoG?7bkD}{Dw%Q7U;r+cmSsvL6vlcI*#jDVlvTXq(*; z!d;s>nnarJZxN}l2$7FY#`+x2Z=WWrgyp_lP)6!FNKn`0xE@cr$waVLn42FRJ6f+D z=k()G-2Qz!O>Y|Ktg=l_bBCH+>SH}4bpnwk;cP4c_GdR`J+Q+rGP~o`$eC3IRL8}g zAoa1nojF{Bpm*n|+s2*3mz{~edm4IN!JBe@C9UQbl;m?}EEfH^Ui9OD8CiM6u*hPl*>Z_&84<}Tsi65jqwCQn0rSxo@wfGwyXrf# zjU@qR%xmt3$M73nYt-~?)~e?qzJpk0pN)ViU=6)s0_|+&^^g~aG})qh)!w4=yoZTw z_KoPAD+1Y`OM;~$|ZH}bBRsK zr$~!4u{NBqIwiXcM$o{>o;6jId^N3JlYg75hGIX}R<=1e=ru>Q7sb+;+jh3h&ch6l z&5k-rb5V90UfOfL!4^^q>E5alvOMWppZxpyYa4u?O}ZS1(aqJ`!kf_t{D}rsftPhp zgSPM*G1!#k>9 zUiOhP5qTYF*q#XVd4E$Pbv5K|xlk!RUyUyls-x6Q+ zL8rgsUDRdcp*m)ZE5!f3{*%#0eQcl;Q}2GG%S>|Qa#48J!!d_p@B{w&O))k4^S+L^ zuix|DY;VwfCulZ{iB%?wiA2YiV;>HfrPmRb{i?V5M3M~S6Q&KC9k{ZGQG&|0djQsV ztLdV*;4|N2t1SCdB~AuAh|!x|Mc0c=IakRPdd(kMofRLYHxW#UlpE|}FCxWTlqplZ zMQK9CTZB|u%^dLiN>ss`?Q@@KKgGySehbQUS);P12^(@}NE>farnvDIWy%|GQJTQ< z79nv~=NjgFy7Z0~P()d!5F<;C912qE&y4@F0F( zz$$1%CcKO-9naSpizh~1=liTt^L5V$+Vg(^$nQBZtA`B7c5xM2j0u7L(X!wBLTW|C!_2 zmM^`Od{H*)q!3EfBU|qEn@4>$7!m4`F2mIM2yJBt_UM{_B;`v7GUUw6O2E9|C1BDK z+wvt~u9KR?huNQTY;vqb9EZ#2HNjlN#aNysM3LJie{6E9hNtACwsOCd)$++CJ^Rl} zkI$Jv;%zFgZ9*&rJv+2#OOZbDY~&@K$|}R)47kXqIklc++QJxWqLNGLGKp0)>-c7o zNxMeABz%onnv7WTwRu_)OGnNsmKu~;DvV*+Y7106$+4+ZqhFWZozo1oMzp7`y}p@J zT?6KR|B;VHb@fMQBadbCX-7(RC6N1G+~|PmQ)W1k zO0N+a8(1h@-T$Woz&ZM>`ShD_<9_gcVsQEi_dz60#RVbuhY!X6>cjXp^cm8W7Mm}& zUA-0yY2xknpHd0E$=9XK4#VW1Qfqu@vwU>wH9pi?+3rxx?CXZdzAIiqZc$_Rr!*S{ zlqPL_-4v2e-NuI|t4c`WL5yV-f-c)tNOua!fnc$Ev9a===mtyQD(osZitEQLa5?oHiW5W} zUS@WE$L~CV718TC9R4X@{dEq`!6VpIt(H)!CQ+3lby6XPjEX3mj-icTQ^HY5wka0qK$6|3}Rccjzv?<&B5#h=gVcPlp|t8Ib-&? z&mqrXJ_jfZ-(dS|hIXQX|7+y@nM#`*%>U~^cty^OY0rL}(1d8^SBCxDWfybE?Q!>X zL7gcdIiWbYjmNFKD6fV8e9V=Yxwr0;wEaB#q$d$Ew-09+%c)OYxQ@xh@Ep~uUlc|b zJ~>;9;(&n#)X>JY$-Zy#Q6sXu8|UOgZsD9OIfUg5^_QbqVK-ApJX@dVEpv?K>2{2! ztqk0aRE#(%M2@*;UYVw^b;6c8B}ZA7dUhKPg|2|-gPA)S$&S$s)XcrJGuFpqk2ytU z%+2PSShKR3W2D;|dzQnem;)4Nt7ZH#@uInwSWbW0zID6v&*oeAhpT1$Z?VN&mwZ?2 zt6Ods|D|MM3)pqx?9OlRqaf@2WI@e_xi!`XV*kkOa4#X`8M_oW-g|OyLD>ns?_-nB zj-UHPQuT@b_L%6QsxHd~-x+oJ2Cdf^go8^zh$7ki&NQK zpU?PX`S24_|Gm+WLu8_k|AbMo)#!FH!hDOY@!_OIW1NHkW7*(2<>JzfEigg?cW4pm zO!^M{C%bF$aZ_VD;bR}lfTaSZeqohm%xwl{8{o&wt9XjZUwrUnFHGR4MA=X z=@l?>OxWc_1r}!*N9baimB(1F+C-fnldNHt4uy&_wXSQGz(Evacb*s>UOQv4b?0*@ zxWd88I|qo`ejcmmbDZ|K`kxrdC(hH16Kv1ycX--nZVWm%(@MKZ!c%dWtTFtF#-Qi8 z_Uu$zy}gA#5g)l&4*32m2)J9t%2R&cwNGbByW49%eI=?r8=LI7%O3EgsOv4E8y}<% zUKk(ZJI9~DLJm`M(FbSAju?q`G$V52D7zAytbQwm^3tzKNtNI0MsS=2@BAL;lS@Yu zZ1R53jT%~dwH?mJ&!~aREBIkg!b$= z=sH@1-BD=`4eB|wzMm40vS?Dg%Jn7a)h)5Rdx|93kGpE7u!QqhTnXpz+L%b3ZXdeM zZ=TRCRwe4BUZ5z4$s4av7aPoSR)mE+`iRUFS3jPLhAn={`&oq}Y| zZ%k6#*QRzUz(Q?W<*3=|m_0V;XB1{Un={+=pVn<6@Tt1}8J$?K|9jv1J^9|;xL&_6 zN6+1<=QeA#KOkj=Xv}ajLr`1vT|P|TCPrS$@ckf&i6I&x>K0-HezKn#T+NlXteCZUM0jts|GT6EM>)P`F_Oe z(Ry@~wn$F5P=c6J7V{QUO0B_(Rg{065=#!J)^mm#d>H}AT6{S6y}I}SH63)#2ML^d zeJx|yZ9@8DYRTXl9cQ+1e|YENbgq<9@k|OoAkOd==&XzC>5R+)(YO8g3^G+<=ltU{ z-xlE46ma@T%Qb^;ZP6!omQ{9FAufG@oU63L4A~%UD4#h30=Q>m2c`GwLc8{WUl; zDk_*%O`EBJ6@0UPcVEV8zMi{|YI}2!=gL_H`?xWV8jl7>&MsF>RV>srX>a+Ka@J%*bhxyaBlb3>37Ll3U6_0>t!k{F0Rk4WoP{@oE%-2uFdu&H)~3%i3*ax^nq*Hj<2c~U#U)=dsL()Af6kT3#xT!E zl)y8dc!Amh*%{m863%b7#!~PO#Q^He339ose7JG1*%&`xY?XfoUdd%*u+`hM4xOvj zelvaA5pCjsC&n-js<|gc%q@zTw;_hZJ`iJ0$e}F?RRtjDMyUXKwB?RCiwAaacE&Cx zi#1W;sReVaIVOiX+gZ};EW)H0mRhO8{%$t&kFzItRbK{GW_@Lb#WD-1U0e8;$)kRk zOhPgP`EtKVO+t%F$e4sIA~GkTJ>W@ALQ_d)Qu%+KgqHsEN$5yyD&@%t$?(xS61y`M zot%XJ^iL+CBe8-MWcnm@Bz93MIynh_Q%yoe$w_GSStg;iS&9-|xY8$~jl`Zl2@UR= zgqGo;r6wV5(awK80ezOV-*?SFSN`kyXDQ|>HUD%Dl*pV-S>XXN&2+y#O8h3AE{y4k z&rHof06D`K%9QeFI6IwL`nLaufhQ@lh(UVQWuVcPs~Ja}%G8W=2&QFR`Z#X=AZ8Yy zxnE5>T$dnYFrDpt8x|HI1D@{zm6n55N>L9Z?&mB+p4W8_{L@>&5ofc7b6fkQm1D&q z5OB%HB+TryRLwqbQys>sOg+^9oM~@%O+CLMiK%C1VB}-vT8-F?Cq}(PSscV>U#ogf z%{xqoGVj<|_XR1%ZYr5~v})Pp>zaEgJZv(7!g z!D}N{-mK=HMhOqM!_P^0h#mfPAmM&?c(TOj+u@@U@3Oh%?P87ZKZOPH8$tJDzdu^1u31$bYFq)P7vR8i3c_IT%ADN52w2hc&nD zE)YLYo$48CN2!%kyc$)+p#@sU(N3`0LakWjz?MG~jd+|4`Yp{w@0T1x~%TLFnfM zVA9EP)>G*5TLbJFV|_M*(L2Yq`8{hZ%l-3@tMa-B@-5 zlbbU?ExP7y#0{{bo_n3b?o@4#qBq&KDTP*QvzW_nsm<-HQ?>b^6XMH@r8dd)MGLxD z*M$aPEmiyFEvorF2SU9TbSJL5E*zH*mH*QkQ}(=o)rUH9qJ~Rb6$>`lo-4wF^r~XP zh9puCu+zJSw%jnMK1os!>KjTfm#JH|l_;HmR5<`(#4hY{@uf82Qo{L!c_6s5_S ze_VJ(dw#z#{eqdabAuvD5tKWdgAd#NNANLh4QO86bT8BwTv)w5G+@E`)f+Oplqpy}2z~O|?+l>>L2K@t=$IQv5!g@fey(eVQsujQOV&zYozD zd|m31#_sDRgAB%224j<9I@_mV&!N$_4^DB%1jLEltke*D{Fq{p5e*9B^-hTMfrx)d zreAeN=@P~H9T~qV`9@hAMXNp>>S5x)ayT{^e6+LlT?mKr(o2#hp<-`~Wsw;09LI8R zxhE;S!&Y5SRbyWqMJ~=yNPSN`a9+B*pG_**k6~m=I>5F6g&ax!MA380&5%)|^nWpw zN1t)(^G03l2p^0!0$I{33!4jJ5ih#)f`W5v3-AeJ>};KVAY~nYj)G#tI36JQB8l>F zkNHQxQ^6_a3o)Ks?jILP4j5j5I5bmN{hn z(r=9$Ld`JuTkaa-rIzR7P0xkFruz{h;@wH9uv4_^Z-b2QiK*`=?e9BM-w)W|V^iO^ z@;(1JGTd1?g7sZ~b9sRXbWkk5G{s6isI^oWwns8W(tSzVdsA_appvCrd;U7sFgP*D zk(D}aVKHA!7h3fl1jKm+`}hj8e+OLQHQoQ@du-8Ud6O zGB1!u^UaZO+E#89e*7Zx6kIKNZjtB;OfK&GBm`z7h4~I5V%I9n!xR)7Hf1+RNYIY7 z(OxUxNwj?h?ORs~+Jvx?Lfc;eKszRdwt$G(P8<-e{#zB4pgkfXLHjWYQ2T{^gO>e^ zvib|jFaxwkMgQMQyye~^FSao{X8y zXuVZskS6$!gwmTpaK)}sXiF57pnX_Ef_8+BwnDy>XbT1H8{7e8^>?TYf_8$0($VTf z#6HAYVfEi8oTsQQ5-35tn*^GmpL{3LuEgypR-w@TnhepgTn!-HpvnOA1OOE`93eIK ztin7m1t{F`ffVCR#A9+_m8?&bsM%^ket&#+|FwSMVx2n*j95ZjD z9qMW3y=#XG%)Dkh^q`qnPe{B3tipY0*j>^f)|1r(cWT&xea*Zd5h`h=0bQ(;ZZz|x zZV1MKG!^?ZhtUt12U+U5pRp6l2|i^9hY<|h!4U*!+ChWh;{;hhO%WW^>YmQgBR4og zSx2^*?rC<)Z8aIO6YbbLO}CFwr0jEO7Ow$XMebEp+kA#CLPh0)ptU4%K8pjkI1i001;{6`sFpV_RsTopQjWngGm$a+d@7C(CmIc8RQ2FRE*XC z`(RT?Rxbnzt=`PHmG>e~Gf*_pYfdS`k3P7`;4431hKeu~hy}Rxc`)IMG*4dmlW_^9 z?K_y*X!$nDyj4e`5Se#Hr* zr77?n(W+k{fNTD75*dsX`SW$$gJ{Bdns{v=Mqk7?6-P1waZ zw^yIbCkNzvPzX*RP5f`}2-C<7eovcLZQyAZo$1s)2ib?$f(?l}v$^<4WM8-9{UH|@ zrF?~L$IwOGiNej))^JRb!#VknE85wDkq(#k>=9P_+$IgAYrSE4H`0mT^*IuPdAH_D0DQDf<;|=s@SRd@C6BKak-RDKk}Mcigk)5sH+R%6I4jt8g0H zEQ0h~0v0WOhF9!{H5}S18%u(t>QWeNuPD6YqSU$GHG7Idd}Q80QYsGyEcaT$(m5{u zCO12ktFg#ijZJ@Z`9R@c-hGqr5y`h2l$LuFT9-zJEv2$%M?rVV72w^WIK z{hmZer|j=ooH2eHX6egy5Ql^RQ=!p-nEUC6^Xt2dnH4q?lWNaO70+ zMse1Sy6`V?|5PY9%YMcSS__1xCif5d0@aJW)DUlWFOnGk7@Srzi1*f;;1*30b&ttp zZ>$LDNSToD2u(vV>jx+zEl<4)ClPPu-NuI({{j>xua&ohSE6ts&q&#No{p-))U*gl zTD-Hpt%6!kCqA#*{C7ZAer~x>D3~&#kHs^Y#uH&0H!^}hBV?FHIl*mq(3oHL1o_G- zpt5i5Bu!6-8;Fs~H!IN=`y^LIjkTjhK7`81eu!_YuvDI<*YHG~^hLnHgX|lzdna<` zIw>NWH-uN0OlgahZ2;aO%ips83ZnF4Ua@w&Y}-Q}6*<_VMBh!cYW*ObFGBfMs15w4w~q9FnE&Z2<< zd#dtr62vQ0m0~GZQ6TEu6o>{}*jr_V&3TX5XM?eYaMxV0f*beq`ha-`dv{NxnlT-Z zH4^R+Ja_$^*llKv`zX5Tv^GA#FGs`$DD zJ-$t$CuoST3$*3dcv*!9NM$&mqL;0_fqX#sFvuPvH5@48!b=R@?|TQiUDWI?>MOXY zOdC4R%XV$>?_L}miO@4DxCq9|TP#SO`YGyd;Lq0U*;BL}Y8jHugZ;|K;ZqjPRc1f>ZOm3ff_Yf+- zQ}CLDH`%XNNr*mD*gz-9#j7cqmpN&BNa4myt7AbyD z{gZiwzbV)DKlc&|GU(KAHH|}~*tH*@u>E+ex;TTBbXUdqa-TEQS4XAb|3nUz_j2+d zt>R4?o$8kig8X{KJ;T^5s6ea0t9tK#e$636erfsTs2Bz+#&}eW$*34y@sXdyCn^Sx zN6N1h6{Bfa80*P8zlqsuT5ZsCOd4FP7D|25DMeX&^hvy<+lp~j?xq(XMAfJZm2h@6 zG=R|%%9}CPay>I+EJKCs_Wt>YF7BiOU-3yU2Y5Ogx}V7wYSZTX8J2NuhB@gN?-RUF z@IJ-+)C?mcrhqyY6>pyiw+YvLGclLReuVTWJ@|=ui!0*@YXvy?1-@Zc zHE3j<0OjDFBj9+@%S+Tav6Fn%E_;0p*}dec9Ap)KLvV40fw?zP_zji~tdlqt$q5$I z-AIyET0`U;!lyV?V4FS?dz15a6kdA)13>2oc$~O(uxV%pm#{U&wvxZ%186)&Hc!D~ zt>!I?M^jyjd|bwWgRd$`vfM*?GOoe;GFXK;>;5+(ko~ckpVf}K4R18@OotbIF7+&^ z7gs@!u2ryu=FTHOH~w^Z&9bixp}|d9_1T8=dA<-dH|kQE2r$M2B-0l*HdIw@Fl${ua~LCB$&{#M5)JeY3sp zeA_C0go0HAAB+9E7p!1%t3X0CPog--b72MH3Ez@~x^~6epg0WlLG5<__rer^mHP%J z@tOJj6oY#>A&HHY=k(w#j@Q#JJmIzG)P)Ol2By`I=J%W2lD@!(z~O~U9!OUaupR9fyQd2vmH72af({RLNRCeMM^oF%;arbNBh zys{|CiNb|P6K#6p9S%$K8*idgq?y4?;8Jz(43&5_A6hN>G zptKWUxB#rO0s3_Te2g+<7qN#>?8i31T8ZV4RgOg403Qj!92;Ow7r>u70bUV+J8gg; zbOC&=6W~Sx7-<8H=mIG31Q;y<7uo=qcL7}832>DF9Nn#|d43W=ndX)Lccwl5+&ub1 znNPZBqdgW;C#6*$#v|2^FOc|w#H+C%dkx&SR(UI-wDFegUtJsvk4MTzDU$G)E}KXQ zeO{h<*YQMF;ZqP>$Y3D#Buc9ixd&t4Vm5;n4-sSPJ*}tn6V2w+`6vY!kc;DUvf)wq zE~zL-3v5JYz0Xuz4|-ycs%F>vB~#z!ek7l{2Im5u1B!AqEZnA>$7R$ZsNC~Fnm+1U zVyRKLl2GTUo0cCbdk|1Z=z2A%WIkX(Z7{b6&37ThC;kpo84SmL>{35WoB7P+I#AZs zcYNkvYg&HLY^S)dfkOt~2y5yUn6y&FOI+#EiQUs*)qywHFc8D9BZ{R zO|UZ^=|-mIcGPu5*&8g;(!UeW21~SbrvSVt0MTiX@da!VYqH_H3kp7;v_Ct9Yon!q zk_`9RQGX{&xnN?WDSaV@a-l$s0m5r>+i=wV?XSW;-3HqA>TqAkb5pUN*rtFx*&ZP?kpRY)& zRrXaogG(~}SVg&?6xUa}XQZ!9IfJM7a%|V%7;v5XXl8%U|8yzrrq*+tS;(nHTwBn( zT<$I#YcJxQoRLUgS#}|dxJP7!%hpFbX#Hvpfl?y|?r;_aJz6N}F89lA+582}`(H*i zS?afBv0?g_!NwB=gS~e9AA(FDb#ND&%dgd|@T=<8|6$U+mMYI{4St9(tMCDNmKMs> zJrOV~&(HJBwcCBNcB?#X?Z!gqw6z=OJc4zpwcCMM3920v<2$(C$YJF#u_z_n0Sc4# zS|7qA2s5=0<)!BQB1OnJo}#HG%-~|&0WQ8uICyKTM%|)&I_3;&c7H^&Xo_)9 zq--l;N7XQZRs#fhyk}LfX7?(hNpQ^Ynxk%s6Y&RuaH zO5fm#6dHyAV$tkHVaBSPTx7Ct&RAq(1i~#!Et!L6EcU@5=8q@w(_}#tsMtfbPJ(Ql z<@yzDalOKRX9jj#KxR>S6Jaaw0#a$}S}$K-kNa7$X*Kt&k6qy~d$V$VL)DcK z^JkJE??=4&O+oJK9{wGpV$@=D`0JQunbO9S;Po_A?qv^*a_s9XM!N4KtVRD$kyK)| zRLCm54N$9avpn;9@=O%|p}T0qEF*xk35=AzLJD+>OIgyAZ@Iq#0)eX~k`W*k5`LS^ z8({lTNc=HMdY{ac)TCa8-FaDgy?}zy|E4U=h~MXxDD>GM3*=?yeWAe1me`q1Uci5Y zG_^Z`ik>L!$(QN=h$LB>jpi~A-anRGa67mVl(R(o|049qg7043vgE9bCU5j=^iWZ zDiWxy*VDmoQ9-$M)CatoFGfVl?f?>~@Y1Ra!S@@!N?NUgMP`9*;x8kj@(V=W3Mt7P ze82tr6R&3XFL=tIT7A=9R^9@@XEeL?#9XXZru$(4;w}mrXcb;g_!Xzu^AQVobf~3b zAs+|Zy!~R@NC>4jg(LyTBAu-+u1HVY|=RIB;TufN6Jo7 zh9fkT7S1CBJvoC2&dbR&?;uZjqz|vyIJ>!5NkUR#rbT0Xirf>%x>CYc;fn&{XCdgG z3`U0U7SxUem-_CAl>LY_o3|1~T6u5rgtxXy&S>d&Ua?6(rNb)ReH1l$22mc@{5d)N zCIm6@-q;y zv(EH=SHoW6#bekuuB>J*$`jJ*+D+ ztZ>>tJ5aHUHhz`7lX9=zrS8iiw;WsGw??^zCUy_kjroso4Q1Z*0yOB#-J&E=$`ZMg z`+7*DMSceb$rgE;ptQ($c+(=+lPR-Bp16n>@x3|H_g&f|d>f$G3XD}aS#q$y!;7AE z5-C>vL?PTVZcMV3b?d~4Yl2A_dhSh=}DERJ$8~CJS=x3kx8RUm0F&6>6^Nz z-@>YMQ#;V;3X)$LRQ~SizX~j(NtG=p;OT#Yr!`f~EBy};jFer*6FKVXzn6eS@8Ip} zzmR8TzS+N;ce8s9Px-S-M}S)@@)Te6pm;c$quB0bs>jSAnr@nzL0?6mQ${wK9NMD4 z%FVl$d#aF!9OA{^Ek|{%;fuL=GdbOkEZoX`R~c`Q0zG5#>pbiE|2}&#-{8jzWNu4UkI{>GU9uFDpdn;%{#4dShd3!lkZt@obKo;eN|t3t!H~k$Czx=Oo?}epA3+ zPm`=#G3?fJv#NlF_Q_4~hW1unWdCSyF211Y{&(WoP6`NgH*!VY2tZDb~a@X)mKQT(}MhbaCAZQ?gl-*U_53#e6x^vEtk}xOPrRP3;R9o=e&5fqXX)lPf5jTB z-}9ce;X^*p`Z?!%@!*K}P3>1yojcAf_(@m$B^!PTo%)cF5$b8KkL-3T11C4vR&=*q z-!{8564Z}ozAmjM?gV8id`89a=dIy?F^50zIiP)4elNn=WK?*ccS$~8(c7I!AC;M3 zoZ#Y9&-(D%JB0nJL3QT+RJU<-L$)T&;4iqw+%UsSIYfxu+a#{3wgn-81DWN%RJ`#$ z&9h5|yG1Fukce1#orwOjY{C_cM9<CycwkF@Qp*HulaxZ=$`cQ(-HxjLM zxt9{y%YEpS%|FMD`Z)ZPxWu{h;hjB>Y>!U4a9Hh>yjQqEjsp=$vB;_3=CLQ=(W6s2 z>;Jh?zjvUqs)G`xmDviuj-P%xHL%HBy3FBen=?S+UogeJY{8v*%WCg*F9R1lPcT#~ z4kvr9;4ko28Ou?C;%=Uns_R$v0E=wZzw{oqvw_Kv#pxfB^pDwm=&z&Il4)%x{N2PZ z@GYz69=Px;q4T-_o$`va?zUjm;24FbXl_fkuq9I-WJ_9Gr0ja>|y0 zz3{UVqgIGZO5~%CKyicoI7FH~QR~&+-kTb)wyelfhug{iFb84<8}2xvhq-2^x?57_+ddr{5BOpPUb?u-`z`#BEC6 zDdvrzYjbQ;;NhgaL;ae=Hn>DP~3%@q! z%I+Tgn&@qAd-9#=IA@^Z)R-o3*`JVhb#sQKwcnTpUKkX{98(LYlACkQ!l6jT$~{zz zTO&@otZBcf9M5?pVb(b=&z3Z1-M==CS@)!WY)=1ZS8#iIV%d_Zw_% zpnc69)IJX$Q{uEs-gPqew*gm-jlt}dP`{KsO7izZlA1iS@ag#IBV~y9CfswDdadE} znc#nqIBIsyS3Hb@g)vU6J`aV!D*YjTMPBFOr_M)|+dXh$I)5G6A@U>D8%D)?#zg1z zqvXe_f6*V=^hcrHA2R(&f9#+?bo%4yzv_=W3+WG$7~Vp=KhzXt_ea#5=Njqzg|=un zBeqj$JcwshXItHo{xK>2L+8WphxVV5ea2$x;?8`RlG@eA%t7Vc=cwdIuB2qNFJ_eQ zN(0;N8^nf`*1pobuhP#};V68HoClxkYlgqu*}(nM_>cHZhR@)3&L921^Sc(6pAAaR z2mg}a+dr2kElx6MAs32pnLd@Q?cztInTLZkgK__3P6}V%$X zP3&ALSM=Q2F7!a@zYP2DjjUSy<_8?OWb-9h!H*fZ7vd-{zuPtvZ=Tf5Jde28b`ao` z_XuHT=HG+U5&JuF%*=Na2P~U~TJ<4@6w}xU4oCT;Q&xAR`M(7`ABq1{RX=~!+k6)N zlv8-VPYC9gCK2gp zn@^gUPuRQRx=_F8n9L`^Gv<>k{>6N!Ca7EA&tghf^b6x0cWf}kc~B=7fk?wuuQpSSPl`QzpDA@|O?=bn4k z-@eRY(9D1YT)^-kGGJDltgS_lnFXeMUHEj;wAJLOlwp+H3HKD)mBP>yaB8#6T{wfAtnY0$_aT1NT~4|J9{uutDlOZF(%p zzXaU%_a8zIn3pKfO=XuS+^Cc$Z*fjHo`PiK9^lDRfx~I)^ z>XEUIvY6M{S+Q4GoE;um84`m8vkJBm2mpI&ubs%K0B%SgH3hO@gt7|iCEelL;>DJ_ zFxmee=SeR=FpJ>?j7Tf+AYfEQx#-3dht%cGHZJu4X4dYVgR+Di9$#B9^d$wk*Z@kj z6Q9p`7g7a!$0m!@c@VvEm9#qYAV-|T_nORDbQWbCzP)nnt8o8;;PM$CX_fc(MG9e- zTu(I4VaOHo5Fnr{JXN^OjbWE3Qq~QRl9(?=0=Zl8ursGMWePP4`Lo~RH8)lqzA_6( zxzDRMdNu!kFVc4Oi^XC9r_?!v5rL>d>BeirlohZVX~0zD7Cj;cDZv~Bkr)x+pJdLs zSXqO=PxnpVSfjCHn-*v^r;jqWbnMas7*ReU6XrF0q4Llof2W#zownf5a&6UWp6ANf z^E^hE^kR_d6O+9h(=DOWt2Mm#GiBW}?#8&E;-Wl4kpf&q89O~EcD`;_$--M(w!NOZ zlR|-Ius_pt%8Y5(Y?=5daD*@q&>sGX@ktR~h> zGpb(YGh#wIX5W{x3*Hp-bFcY?jFMTD{bu90Kc4c1|>zHH!W?P+xvpEsMmK|`&GQl`EYI1jpyp+ z6SdF5d3D#*)>X7+R9&w&L6tmXYK^LG+$g}3+;85<%_M8sOh`{uU^N5ey@0VgK#akL zqrKSMBfRGS43Ku9Gqbb>&&gUCi1@!F4E#BKO;3+VtN0(+DtiJPx_iJIa&Wv(29GPf zrt?YNIEKE&yRZui^?Z-vTqyTk^vKoSRU5_ZBrUuXk)VZ8@(*4Za2z9?%99`w zFGf#)37Bfa+MkCNN`YU2$iJ*XL~`F^9R|q^L|(NUFeCF@WvNzY{0vHrt|gE2?U?^7$0i2 zlLSG!+pyoKtM9ju=BK^h9`j*5aekWV{#h2Wa=qaoJv_Lfo5ZSiC+VBad3TF@hq^6z zy;Q@upsjQuL|<^1u`Sk5QlypkA%9kI3sSMj^zV}6!^~N|E<;T=aF#t!0YlA<`>@B@ zRC>N@&tvS24LRZQ5en(7v`={bW@VJ{m0^4F5X^DsgR@&F+ zZt_v!Gd^U{5-P_VDP?PJ#maJF)ixcL%`TB6)L+Xba6 z^p!jxKKJmUr7M%aJ?3b(U-78$Aaj(*7%kbt$TeuX%~Os3#%R!H7pY|NCu!&ky7%6{ zA$H{n?Xi!BN`E}YsUCBn>Gl{`82#fNNWS{P1M@6+6fi#0U0()V>-2^%da0Pt25FbE zGXBz7t4-Y{{H!F*lr%OSJN%LCCxa2^<6@-ugw#?oGCQ`oJG5X&#qsWrEr_EI6E!uQ z5ir)oMtIB|kI~;}4D&~R$_&)AQ!h8(+{3|;j$Ll5Tf>c~HddMq&hE8DD4adD$NBV_ zqhudtAFwII%f86>d;?!ycviri!6-)C+tfhobp}I^XPyNbZvi-f&^3 zQ}5}(td7kUYyz-%^Gl#*ix}UY?=cI98g3u9Z!+aFCbok4Bad;Wak=aO@rdzsuU7~m zsNiq%4Uc)IdATgtk342EA;=$Qh<6U9fg7FXBaE@sY5bi07%dEPl^Prks=sm_xP$^xc3CG2n+WHCCmCj>YJ41yOvA<)Vox5J+@DFRNbg1Vj5|r!;)z)Q!jcDd=C>Pl4_3Rj~(C;3Kd8Cm%n@ZaLeqdqHp*I;MKzi1(t~ zQ93yJ;eb(NefVGT58DXPSG5ll3vIzdMDt)|!A2bZ(uY7v-SuY4&44zciI7n-Nh^4& zM~0mHjzCcG9}+PHwW9;`yTVSRA$Ad+5NwLCS~++;BJ@c&GOz}C3TWi)wMJvZF(~Yf z{;cc`Bo*Nc$aRZf2VF7{c{4U7c_06{`l@x_gsdb&!gQD%FZ_)~I+@Q2es>Qly+1)w z2ov|lkUJm)&2XOQ(lfo#JWxQ_3k77k&Y8YJDfEv`gbDrCJ$;xb{mk;c-DRBH+nX|Q z6k^-w8QWbA8`>QW4ecl2-XPCh;FdFE{Su!9I|!}wqfg{w@u{bvM-d7)h4PQiLDmd= zI&T*=>D^Yg!IbsyNgr1n7$yl+j8z`to^TlpV=WOD|N21?#(Ac1m>C=^Mjc|tmI*aS z{?hL07vnx0=RdseJ58u~zoYDHWm)KIbgc0hr$H!{k|AviJm=;U_zRgi=()yD#ece6 z%f^uCz-a6Sw3iSEq+mJTQRg)Qh}HU=SHKD*u|&@?cw3zP8Qdk}#%8B`P4RAs#~d6v zD^?9lnS>;~mhp-*U=ttpLT3ac<8aRRzpnNTWx@Q0qU$C_vbR8wyN}M!;&v-S$@|BX z^_rwWQ*sC=;m1QTK3*-ygS~y0mU9)CLE5x7ZQ6FNKR@~p0ukf^Qt|+9UE!?(@>;s< zi*EGtK`+sjpiI3k(kr(XWeEF=lU;VRo}b;q4prc0BuXdXg(TT?H75H{uDeb>zmyZ= z*7L6r9S5JtVemPmhKUwZB@gA9J|H5xX8 zoa7L6%Zw!`enCqmi%IIv)i(!cx-+;g3P$d65cS^h)rijm@qq)88+Nb)tOA~`lA<_L zhRNES4{_j8F=dkag#b^JBDtffTo)w5V#8;kcVbOd?CIi_dTakctSiFuZP|6D=hXSl z!e+f=t6o*uOrj)#4veF?J(gwDYhu@}3|U0xei7ZStkZ^5Gw+Nswyh- zL~a=BFnu*Rl?^yT$l*B)y=b@Lkb<8|!EQ}z7QKy~cL7WQKkDQMV_b!6e>!~`AR1|3JqN}|pE zH6pu|lPUYd_!180Qn8D_kY$-Y=&+X4Zzy*nAHYVwp}T=+4flVgM@FvQo|d*0(antZ zO~@+`Yu9I_Q;`RMQx9ge|BK?(`I7d(Zy)`|ZdoDmuB+m`WW16siSoy!JfDTM?4zHc zS;fypf1*B+SPy9*bMdeCQdOC(AK@-Kg-V#L@03#h5f>=_ujhGC`CU5#=2YTxUq@<& zoAQF8C<&XE@nXO{cR81!8*+IszIa;2e3~M)2x&*yIvfa26Xp+OtNo@ZQ{r}Rdqt!W z7d*^c_zhiv{Eq_2Dcu-y7iIAF>{wtqmJ+fhXo1`TEO~eY6Y;Yhu*{NmVQo|=T_MHt zRBC~U3Ac$*K2I7U9s-vDGNz1xdv8(J%$AISd+1n+Vk8wWEWR;pXGD8!Z6iofy?ub( zN;u)PsiA`3PYyZ%;&T_w)vES$j;5N!KVt7SXm9sxWA>4?&onZcxhp@~jr6coC&j?h zG_r#OBSb5Od65iS25(KmjMk|6vUE%imepe!pNx~fJwi*^5z#qNP|*#OBiS#h6@{%- z_(WTt@iSR;5J;$KVHZgXm(Mhu_XpgEXYZ3Y{)-Bur~ozjhS>L^k6oxOFSuV@-iiHB z71|(qSE_%)sqwj2X*Gj5GAi_)>|YtI7|m2NX=?P=$iI?b$&qgXIa?!tmph_$mEc|b zpNxFrKmYB>=g?AezOOpEO|j7Tf8R+U&F?=;;V02~@XZ z17jgNA&=iHENR`mJ@f==-7g?z5TIi-9~ajZ@g(|>rE*Y4-pqYMT=zO@k=*uPO?g$zO$VPboeX7$8 zfNv8YL=Nb|=ufQgZeu@9juc)N_3<0qZBqBWM-fKdXxI3%fMl^a3J>So4O`^f@U-gN zfBP)?Z4paGcn?5P%Z1S|l|XqJLH7Z5EXzJf<5(h$)oSO-HpLH!YQ!3|9D9Wb#U zk2s|xbBNF!#}B^NDWTy@Cxx*Lt=R}`H^2l*tBy%Kl1!-EtQD4AY@ePml!92#Ka97yf4ioC{H|8Y7q#rOi}lMhn2d^vLf+?-FlbTr?I-sNa4Ff?S^QEMS|+Udy-H^a=oMC4F_? zOLFJFD>y`$?CmQ4CsMM2`{3-4tRwk*>+)OXnDD9-VO`{` zsgyxWtD5zH{RGMEHAQQ{ARGq^22lpGl9oh#u8qU?F{FYYV;dRewMbO$tbQ&&uZ#wLOC%u$duM4NqC0!;2TI$f7=!mr4tf8?cASny zRKZ*okwT)97cAB)YiTY16s(*JCv)6knTeCIf_#wOlCT23nIx>(W_53{d~8z4Sx06u zKUA`uf^kOSGjDLJNd1V;Y!qU$IRKf3syoU3sfVV$(1q;MxT;GJ<-Q+*RG82MZZ5u^7+B*km9Zxn@GK_`$j7=;1 z!!JChy*+kP79IGK+8!<31DM~WZL&jA#{PJNGT9%-4i$9lnl>rj6n&OVe3a4X%RkWQ zpQX`;7geLbNo{m3Wi&dkXQRiJCDW$p#6+Wa{XnC?kVfyc8V#m4`heA_r)Q&owHrMw z>GV`jJE1L49R2~yqNiDnZsR^N{Cum?cPUF5{xrMM=d4D(#Dj-2E29$B;~crT@&CnC zWBdJAi%TySgkYeK=xcvfb8#&-*c?|zoA}KPgUL?q1)y^PJ z)eOjM-dbOJ4GLZ}<1AXR;V%{^KKIbyl%i`YK_~+LD0m9|DP^cN9AyV%Vy=>M9sx1< zJuEZ^S9doW8<0)C>8a@Ir7Z~aIRpVD!MTq+KC)vgmyn&6n)c>u3+~{FvAyBwSq<$& z99(g;m|pGft1Y;i2hvB;e!v@ULV5e8t=7l zamM9Iu?P93I4qVKV|~VVuu!qD>*$FI*2vtOGM&$g<3CBh3u=w*4Q;%Vp9-Q zG&2jYnCQgGzL-z;PcxV1a$gZmhtX*kK1TEO%WyvC>28UghL%V{)?n!K?>8I7a!i(N zf_vyv3|Y&5?JxShSZedLRl?p|0gBh z(Kw>_x7MlOD2^CPYa_SZA8L^tQ6Beu(8or}96jW$;3S=vsGvBt87pGHlBa0Sysl$* zQR#I-B3&7sD0_WK?ah84ZwB9HNb0teAhf7li02eCu%l21Ehuq>98In_NNYY-@UfbP z;egyA0`t0~*!yzyyD>|d2;%k{Ln{c2>2>W7&ql}un~Z>B#uC>y|e1Fr7__Z?T7S^epEZuMzdS7)Ef3$F&|4P(?0k!7qL8uS+vM#^LsHLQ)&yMV{{W zc~q!!TIq-ud5WXtCv;~dw-zw> zyx%xvW-sugBaPdugf4MsFAt-4axNF6T@)@1s5r{GhTdlu_PZLxr%PvjhI0X#xS_y; z#u}|=JTn}dD3Q`AmlY&QaFBq$;=}4&#OT{-hlnPWEMi)}QarUg5jfi{nbSUxQCdIM z#*(7@W#GowU=XHfPWcfzhr!S>uLDRky?(q|uu>9qVFd*D^DPoc+Yl(f5J&snjNCq_ z=q;MZ8@Vg_QtTW(YYl0entSZLrVZc#vHr(syJSusl(TpAUBlStTFuS)J;W~8U(ZT& zqEm3p5tCnue%!93I%Q^*HR`dGbr$>fMp@?e?@qGt2L7*L56~WcT>;Y5YX8g=Cbku9 zfJ&)q7W0UY!t>DXf(}y7C#TRoNQ*o`ecpdd2vWBC5PFHho6q>fazIJ&OM0jmD%H8A z=i^gRaMKVS(UMe{%Q0byUbxUa#;Ol?gqVM zBRIo4#QC|+ejDRB*25w_{2nvZ*xfkO7;rbYV=GC>^ct{@(=lh!7$s`CLN_zU2}KDp z>f*#)A@?9()DKohD{`o@?J&k$A3bxiym~Zf9D?UOg9gQ^h1|`?0qyM!jo*=b5n+wY z;Ld8ikj6*ajh{o~BYvoHiLABi1!?(9nr+5!3|5xeQ*$12R&%b%IhZ59Vv)~*U&Mv?kem-M7xVl2SZ1BJeB>Q8?hkq2OoRC?7>~p1 zJY3z+1|(_A`vrLh`KRcen_^u$Fa>{zDG8dWF_#mYPI83r~9Q#rzB#S*>4!PUTygWJJ!mp1G4zZ7&fkx zUiXX1#fZp(Medf|FDn0Xa1M-%h==sh8iAlt2@nTOdmVYVZ(9>z%y7j`8I*6du zX%7rNu2vghgZo3f*?jyIKJ=JivQuF%pXt)O*D`}o(z=Pf0e4rj2%>eAvqLW*RsB;H z0bx%XKSlUB?HTyIrsL{&fB4c&6yn$yk-TUh=ZH=r{d9e)RSLNcaH{U^g#{*lJsLmi z{h{2)%Pg8>ht{+k(mH%H_A)7tB3FrJ2n`9uf6_W9j+W%8yzZlA1P&}&632Bk zodZ5xBZ-f@mE~dK5xweI(Ipl-NYSyP*7KH{k1{`ist_Kl6eXt#IBrv*2xx+I>jVJ$Sj3cAG;d2ViTf zI(36R1l|bu^BQ{*#K$J6_h(|9;L$@f>RFPdM!^f{U*^f;0h#7e3wd;Ui*v5(vD&~F z>X8SWW$oQQsEWO^jN`hUE7^Sk_jYaWJ+kxUj7Taf_wZ`b(`pM`lmfl5NrdX^?p2Jl zkHiZ(9=$ie$C36qQg;5^)+Ei~U`u>k23sj5GH>}DXRn!yD0U5mqX~h35hbQ`o(};c zBKj5M&1}=_{;2dEOqwT!a$j;gpA7$q!j~WbC@+h}vJ>t3K%o{y2|8MNsMY?869>Ob z56NaO%ZIqpA9~-j63Po|{b20QRD1*perZsMFnqcOmy-wXpIi;DV9d1;Dkg6L5TGA0 zI>P$NIHr&}VNiv1{|*}a4V!d-gKAj185?7>Fw(lk<_C!Qh1Suc;N8c<7b~)T8x~h} z<0a=@=tGa0y$C2!$C(y_2KqmCP71!{Lt52!tUxe?vEKUK;!C?%h0v!(~(NOQ} z!@~m>}-$U=Ow6t6dnnp&SDlo+^61v-nfHeW9Q%!rceq?i0e@bu4@j6skF6v1^;pbr9np z1z93vF8UMX`Vive69#ROD9q!;I{I6P^$0tF_i%#LO=k-vkVULRJg++e-1LiZ;s|*K zxM^yCnAZ~X$z*=3JDSjl&WY9yl>Hxs$_McF`#G-wtk`$Mq1M$`BK@A@*z++|qVbO< zsCA5z+Py!%Yq1i-!YP&X*DWfL5j!AkTVv_G@yahs- zs20o(=g``G@mIr&jA0djMzc?|@qjCk#IAMW^FUP)6~Yg@zm!=HV!&22hLa#RatVA- z#uFMc6+`82HX5|xT4?(jb7&J&S9wpXi3&LnW~bl5VNx3^#31x5>P{>I+aCG}PFXOW zNUavLaBA}~^Oj`fgWt=fAQ=%JrYgHhpkNV#fZ(E-TmH)L*e~QRh^@I9Tngn5=unh9 zVPKCXD0e*{w3wCMG?DGWM~Pt)`!DEq9eVx5&6m^6Iu4e-HxvFJ3!9R9fz-;9wOgxt zUC8#+gqE@opA7&NJ|GqlPZlLfb7453#B&*kwxIMYk(3=T|3;B6tbh8&dike{gL}Py zTBhOy6btZ?{B^ZSrgn!g0w?RY*Q;tSdg~ix@YWx|qJ{}c5SkT;NEM9V&+tXdvAUnnnkVNL0osGLMh_mmR~T!+S4EyW(AS*xw2 z2s5TUpSz{>$0O=d7`!g1s+XcHGZ7}M^Rl zZVxp?u}(g;p)(NTy;O#i-m-a zWUmsQhh67u#S4Z=^hSdVsYAM}4WHN5MdK@uI*9&$v{%uo=pLD6Xh!^koT^}`ej|lc3Hoyi`=KRAZexp zR@_!JN%c9Hymp0G#LvH_*$QP>fG7BBo1&XJFn2I)pq>C;bOVusM@Oty@QwAX^@j#8 z1lts0dh5g{luSeovp@TR=VxI&EspgX2jmRT=xJ}Jl{m+DJAcnyEKSOChnpq z*DhrLANUS>p1||(+hg6xcDC%X9(oPC zt6}t1#jBi+Z?V-Fl zY^-{HsP%eY{Plpm{#RaSSb0!`{9{MiX}^g1aDxA+UU5JVgl@|j0Suj)qgCyMs+5ep zqcyE+y`nHNt}&+$vJo4UxH76i3wViC-^xCGsVS3E*Uk^ApKLI{-; ztPdLR*aj{g(Q6}uYtHTXm(uMGjo!j<%K+^FMW_IS#$Lj{K}Xe#Wm)*YnAtsyi8jRW zZ2c<87t7*I)f)15dCMH~4=zFXx1w((G92=;KMDemTb%9FYQ>s_M9#`^6o0s>p~AmT zbQiv;RSDdhY8FH>FPY6dmW|ac?#eA2t1Be7%5clB4E797J|nV5He+%0(i$1~jK$I? ztIxhAeEmG$j~kkF7ZpL?wSsW|Y1x$x>Iol^KOSAdAZ+_G%eL&;?5IeKE@u^2Ofs{h zRN5?+MCgHFsE52O)!r<8hO)OhHoF~8+2{U5t2qT&W*Ku>rd4_h!G^r=^Aq&-6$h?o zkae&zSoOUxXb*PBYyNjmFtnEyz7p#KIGwRvg6>ZdcA`SQ{~>DEBk+UqnXy7BYV0kt zz;gA`S*BX;EUKf)9U6Ur-}rlB-*KFC%cckzdm#3`u>6qM$mN6eYQ?|6XbnRuAJJ4l zRH^lX^+Z$^lPWXgU%bhdds7a+EQk9L2{7I3)vEt}xvaVnaCo__R(pAT9<^wFycnwR zh4Hqbif@T+iG(b0Un;y7L@+5-xR`4_u?Bc`dK)r`-@~v=kb#=JXjVAbp^r77COrxy5Tty+&XXaxVMBq z5>uF)#pQ{e6hQJhVx!O4kvd+uqJ`koImkZ?Z=$g~Y0TYX*)QGngZ4|CuwUB5K9lyb zU)q7pw0jkk?k2MLTf%8wt>#C*tV1-N%3(looGYDV1a#tMu}9iq^8@H{UdPfZB2wk- zdkIdH;U$KDU&ZTm6n_-UQ0y^4EXA$<-`kH@9GHc2O>6`G2Ju4qoMj$Z2L!W8^qyvc z=ENMs_s2k}limFbb;SDpQZ5+fkr%_VN?8;KbwT&>`)?PcX|X60@^(Hf5W9I8ZzxlR zC-`lFvmw%mfHSl%(hFZ5rnSmmum3;f5Mb`#L`%`{-WGV)n**R*5}h(%PMlaA&Zy?&G8P#VoAe4^i^Dk#>dMq7f=j1FvR}6h z>au5|Psli(YEWscvO!3Hv7K!f`1Uy=geB~ZZxIpq5P#v@*gfJKRJ=&V3jf7!_%-i- z2=I3|gn{YKU$YxC>%8u*?7ywH{Tym^e1neRmnU5ckHeDAgW0W8;Mw+Y#;E^;A>Bka z@YU>GdU6dtQHFFq;Wzelud{V~*wbw(eo^T{683bzwLtLW(9d!DBc8wVdbS!8LbjSf zC@^e%pDKf>`hYnT41D*XxcRErEJKiil)T?75InFaugV3tL}Rt?-k?=L7xELmhfx9) z4-3j#O#T)iO?44+W`qcEBhmF$vQa=LqAW26%%Tlc(5FP-mvZ7k$Zr+G6u{DpeK;VfE)_&3|5_laQh(|39W^}|*s~0o6dfSZd zEh?uKi5Z<3q12hV6_y!Ya0Rv(Pb;mZUtAzY@Evfnvz#mb4=9~NftS0GUmH61bJ;J; z9Zr4Cw*B03v7c)qcA3w8RI9lPICTPK`yM_Xq#~DZ#q>Y(guT%k41LNBuVr7NHubw# zJ#e)VhJ)Fu$VKE0uk$3juR=D&xqsr`->?s+{Ilpmidf}mD55H9d(H5w@Icmd;9mvr zeqbDl&U^!n3^K93ib*d8)_5YVoowv)a=Vh1u~x$CfGKrpis&6JffA2ZIeHHX60%r){X3@|ZiYAr2RxVY#3LkBxKRQNdi zuITc~q*Wu!b`{ZF;`}a320gSBBmWn|ry?qR3V?;yhNxvARFn_&Qg?UG-tKiDE;$o} zGl^99Ke1faIR;UL*e%%+cFv#_YR<-|J>g6Ffo+H~bY+#@B-UpNx@$ET(+HZwT5~Y2`s;0ZeaQP( zmwWKM(t*$*Z|U9ZtGYpjs2M+v^-=PEmJEGI?mRF8>YDJ|?fa1sB-dMyRH~0+LokeP z$xrDXKgA>5AL?xu&hwOaUCEX#8&7DCQIz5>sw78yHqbT%%{=VHBu;F%d%gXe{)~0+ zHjZhvBnC?(;7@R^v8J750!)Hx!XKL8#Ky|Km77dn$6I~9xX@n&Pz`P%7-Z~R_jb%m zYCm8s?r*i=w4W0Q}Vbp44IfZ0>&j|he0(WY#VX&yH!n>D3b5|{vIdQ=RN;-O4)i|7#{ zfiQT4Hi@0a;#%~D*~id~bW5It-@1GEgF!u{xpQkv&$Hz-C-I|rTR7W8oC}1w_-@zZ z-!65(z5k=wS>b*@^CXXPlGo61U&n*G#Ti?XT>pTf9MSz4P`I`ST}S-*dHWmMF#^HK z=slk{H3sFN)sAFa6D1%|?FqDZRpJ5-90q|2d3DV1YDD~xW4E!UVW zeR&*IA0#gttCErM{Q0YjE+k$-4iCgu1R-9l2*4xG`8bL^_+tWI^b&C6YQxi|me3*( z4q|#ntj4!lIsvgEO}2|DgMNwA_0-7VKf~bYKURGUL~`f*T%QCZGeLY$SYJWML#P?) zc}JVOQFIq;IyNAf=J55>JGKXicbP-q1C1+H-y3cC*aO~>8p=DAM36bzL;3SlxjUUK zQPZTX|6t1cd*m()&pRCd8uG-EHoV5}b-;2Rw>yuPUHZ+~w95Ax2fC1sZ55rzEkm*? z4WygNaEP5#Iw596;y6_#j+ctW@idQ_?lJqatRAD6EUSb75IeK~PsNfP>LwXo3O-M5 z!DEiceSQ+Y^ON~Mj{EVM{LbVz|HpAZo?SO7o8SB&mn|8h=u8fsA?DEMWv>9=AUOlB z!;-tx@7m^9(F3+(>qsOCi5{TUJ_}5+7lpHoL0!=J1S9^*EGC*5R}{D0jt$IEu+^h> zl*hF?82PCqh@pBSs-i!?3F|N7x?#r$=kF9*@H`|r4-Vj_7E!d zg`ndD`Gn6!SjCncioLFnA%A3FkmHl|1Www*bAMWGj#WE8KbF3is);!YMLkvyXXF%F$53Q1Q2!=LFATkyC zz(O@%BOdyoF?O@O!rMA67N47Zi?bmgkrcr3k3fCfA35qM9j2OlCCO-TSa*K$oCz{|$a0X}5zG z3L&&sGa?1Qzb3t~P`2QAKj59nx_fX)`IpsE^Kq-A6~`2QKh{f8#ahiCFf+jv$UK|u zzghHDmwR35Afw(F$$YAQ3#wf(0JpHM$SUeeQzN@$NRjW^Fes>^`go z4;x>$AK^Y_zU^kr>zp{zy4%3(C^qVQ;Pox|&ekG9OjBpgXlP$5_cmS!D5LMI$52#} z7;PImExeAEDp8dS=7Z0_l<>;)!M@v#RAPpP-p#NR%w-aZ_En_!XkrJ!oCSp!uXwJB{>VB~_g8^POc23EU| z2-?QbZN5mgl@=Wz);e>b(c3sxf*)8oc-MnL_sONhlIM|FwZ%Jr2wNYye{U>b9`rVP zdnEOqG|}vgz0m_c+xQxgIf~W7DJ>8_xDcUZ6Dj^<4`GTd3PDJMjvb)sfjKfxE%2#A)PQaqQv+();JTfml~G%*}A%9N7!iB=lU!a?fyy7uK70syOuXV0OK%LN8w9t5A{f>jd%4#nmV0a( z>AXS21LLc$l}!+yHAS%t`GxTJ8-;@r1txHCa%HFWVP)IMvk9(HD?3J3_Iz2{{v5`1 z12brKoD~lKe=SfsH}wSluIif;1n(MCoG5fyM`KE+IYBV4F~vr@4Btk&>w3~-Y)m-~ zz@5@t;3T0ajZxeUqsYkNnLu#CsPpK zd`8j7Eo25*7v3YtUWMHMLH-?m3>Ia^^jDSne#TV0cVKyQf(WiLXi*$3;z1D~)^Qav zcU)p!Eoy9ji7l$ALB#&$BUXSyqu22g4mf@k27~xlksl5D(ebFhm{l|2s&>n- zV=vHUl=G31Sx+HQit&?k&XW472}Fo#!Z)e(dPT{rY2m&+Tr%G6TwZ(wpU6_57@uCa zT#tlTMfXbs#wz4yun=bwf%;qrC}@E7iN8L{C#t2!n@~bl1Z2s<^0WKswRD08Zs#!} zp@%z=_6A0WSIjn5^j)cTiBv-p2XQ<)_(!ekIM4zr>$GQ+t4hw>9=e3+oO@H{4?XCs zt4NcLAymM85Q?%4A?$T|h)glax`&0{SEPXrNV(v3@7HQ}(_6~IrxG9U%7$ZSHSGV9 zFLKL(D?JTey}d?0Qy(5IMseho*8V|&TQacS#)s9CpdaI1xLWjM_<*b;5I(U{e_1R; zR?!ht=$Xl8_PVJdpjFkr(sL$7rnN}4q?G3=@p`csk$9{-B^ijsj}gUTojDl0_+1hq z)=z|3LZl*%(z6P1NGC|ej@f(AFtsT8WPA8=W~xVwSTkb_iYQADpZ)~;_B{Hl^zd&b z%Cn{X49b;2DOz$*Tn~R1ci_Vw^Nap@l=6Y;4ibC$+PAObz35d`^o!0ImBNRZ2l-ok znUu>_x36RE>nQtrv3(t8U-RtiAa%7w>nnohgM(11vw}V}3^#!a_MxHCYA3SMh>ahR zKu@dnx8m`70{KWZ4-ysVAQ{z2p+baYq@#ja_L)4sEcSO7A z9w7cbKhZ;;u9>=a_a1IK8qYEd9{1jr@ZCSb`po<-VS+9 z+SoBu+l?2*J&pWs;y2&l{UyKG@%vqPMo@s_AG@@w^ST8F$io3|2uGsbvz_76z&(4o ze$4d%-Hg%t*Yd%=+qxaXC7xWB8O2`IJSKPVk}mp0b$#&&6A zGdCNhjZNIFmNs})7E~`ae&efm=$fz1Pr|-TOt9MLveNjuM;^v8$aS2hb#-EOOaKdv zw1=V$2(JjF4_)VXZw_b^pw1cs#>b$g*;A|q^|oeW=Tz%7cDuxQu*Z1{UE8InUnRlE z{Mv-gfzWw@^t^aGM7n^8W1gBbiQ^aEf7q#C|_{|@nolPGWBTWw^ULF)Z-+FlzF9Z3hS75!IFc;alkiyrkm&b|< zU~GVl9l;3h(exk_Q<3Q2JA~XVSsXNO9UIpGd`_9)Aha-0N#d87(#&j{iD988+4rbU z8&X{c5j0B%1d#dplF5z!ju!QXz33N!w_&tQJEFDf!yWuw%4|o= z)Xyj|WmF1-3viwb$hTn1fjVHvX^hi?9Uk7WYH*~q*rqjs1Hp6udzTZQWoBf+vve^&%2`_CKNTu5?sVeCA zZe1EXL%pJIbLB7le;H;}(b+UFJpp)tjHP+4wuJGr<(KN_RnS*rkT_Q8D{#q$thwkj zrWgeuE7Be61l#r4S%QsI@bP%V`qFc(ceDN-A&8@BGpW^}NTEEBgQq7{S;oau zCZQTWRiQY<$cwk5{h`|^qtVlTpwW}0(aWqxI|L-e8y#yk8k4eQqnh35zn+gb`mt0v zp{H9Yi+(hd2gZ=b)J9{fEMr;EMpxEYJ-y9pRMBJ`Ih$xXbD-;>5y(@O5c38&uH?^I z9mt1CpU1rVB}vwHKVIv&9ZL!V5Cf#%7gjEVX31qBegRf41BCM4XGJvceKwKH0Q1pN z{?OOFMlOS97=~AE&eF=0BkTEt`3xjK4)$?`H4PZM{J3V`MtGWzwuJ0{YHP%MI_AP6 zy02HF`wK;MKSV_L*`5~fvt9Ha8;!O9?p}<7PnAqPbyl}UmW1o!VKqZb0k4Eug5Alu z4C)Wp2?f7Lkg{mNa}O$Tn3NwHTPr?8RZzHc#8&))<`LR>5z5f{+ViBY`qps_sUhYb z1c7+-W?+=pc!5G>+G30^a6Cm_M+$G$#%yfP;@kcDgJmsyn?Bsx_BO-y3KgO< zt!MzcHsaKaGo%Er*&33r@4(DvD`?R&vjGI*!g4WdHxupZwMtCuSs~4fjEF3Ff9G#c z_%k(>T}dAD@$TFOS_CM{tW2+;5*qxd*!kSU4-5=*F|r0pBS0Im6O-v@&_-*^2mF%H zidEPH?yW^v@V(pz#v^i#Jc2_#oE))N&BEo8X{R~ViUuMVyd0+fr5IT|HrU=~2x7!{ zw%~D+tOVRUXaB*Reldx(vXx%D9{+PS)K-0E+yPzh*e@Zw zmKPb>bLnrjOgNnFywTZni~6t#ECqvO=1t#XJi;)M*J|#D|EnmeObct`!gsM72R*Ik zbYTj==f3i9=nJvGNP&`V79Xe}Bt!tgGc$e;0Vkx_wF*ICHD*J}NkZ7&`b$Ab=Uygt zZ1anIDbkIMA5%nCVa8YyG7v<@=m2K{v#kCnPs=Xg9DJ(w_#F%mBO6328AsSVFo+Zv z^;2$U4h8VB*$VY$v(1rd@VYM{x30FVQ|$gZ9xRNK|4SJD*|VlZZmD%nirnz1b8;l` zD25L)pKEP=f8+Q)w2Kv<<8|NPr5dSsbhdaDfWX#iDEn@y*L|t>e51DPn4_gdK9`1K z5v`v@u_gtD$>~D%c!uZa4W(9Ybfa1``SZ`!JCbttx&jb`MHk`J!|I zW7t~g`fcJuO zQAj2>jq)>C1kQ@iffObD5KVn5)Ksdk+J_WGmsm}$<{skzbEc21*;ZR`QWkG3AZ-;0 zS&KA9GFuS#Qq1!Oon=%~kyYJ^-wc6s91?*qduU5a1U`IhW)Drm1MG=v@P;PTK}|~d zJz|M{Dy<)&3le()@8S{PDA6q@InW${&G*o&t1dECD`ev~!xkDdQ2RQG7rK^M%Xp*` z%h??1kiMJ!_H$kd#}IwwQMNbsRs0ljX$c1;n(Pme4LDi_>vi;ta|O}MjoAH)Nh`4s zig)4l%&neYB8R!noUzJHc8Pb2D`VqyC=ZO}$<>i;4-3Rs=}U{+4v|7A|B?3z;J|-a z^=E%{zX6*gcC5RK(OLOgjX^3XYHGN0t5}_j*gpG*0OHuz@7oU&mlXR_&YHE-2RH?? z(l>GrTaDl<93|s0XFHFgul~2%KJQ31d;7di5!+`aMN|c0nZZ>A+-VK}h{ON$xia}* z)$qYZ5p3qU~1vR6Q!OdtD-j|k{c{wi7W6bwT z#1EWkG=zmrd%wd1xWu^eeL`7Ai>rkd{xT>b>`L0iAvt{p4x{Uf$syJQ3H%^^P<|lF z*U%y!E2)3t!2V8I z^mf`~V9&^NdtgP@Cl(|=kutC!CBO1nU1DH(IhzDwX(f~HCAzq!M8;jLV;jhPbDPcW z#oTg2hzb{oWX!k&E6J*96t&OIlHml~+CMmn4j4x(O7hZ5;dVzlRrRGwxEqd=R<)#;M!L zD8>X)dx$z?)vZV7VUTqz^N`0azD+ta28xfQjA}DjNS!;@Kj3g=?K$Nv0zGp=}_>w*eKcAca1yB5T06r7p@P;l$}e-RkEcGkqYl zXkU9boP=VxlJK3gHA|W^rxU(4cZFp0#y~!vN)!79E8GoppO}wMdrI)qA#8~j*$Bm+ zSTA-k3@I3oC^*V=(YF{9{ZVJ?BC+ZzEA$L2a#*`Hy020%Bo;|JNr_vBZ z*r+C%V2c>Tu>gCl}U#~my)iF`z6vbUPa{q2*PGe!Tfs_++4t@af;g`rkC zYJ_=n9n^7n7S8akPO1vxkaL&6O$4j?WG4luGwRiTIK{|KG`?2?B_Vu?rAxlzlVvwz zf3A4tqEq=uH8zsf7-USV-jhgKJbSdCNOZJdK4%@VY~nI;kUzuhv&Dx0T7N7#e#(nK z-NXMjMo|x}Q1X}6v3|sVhcj)TPiGJbyAQ*lNkP%WVoTW;`6;HQ${01`?Wl+D zxNT#reumhppVZ>5wWTqufA|(z46PCMP|X)3s69k4y1ef8GWp*3_G6H+IPE19<%AMY zi6Cplc2S0~#q$6J1;|1aLV=HohOUvb6Rrlu3y!cX`SQwyjM4{Lvs zGcQq2fZW0vr~?o>#M5e2m`gn?c#%e{6fB|A3F9?Shfb_StjBJ6-y11RH!!AHV~4qn zWcLRA+R2{GCj?DsQ`-!6!+@ko+*Arx)HwEf&aHyLh>vDwZ%xKBEXfIEWn-=rY$HvH z@a~$o&5{lK=5$kkzYX3!?yY6HR=7!`*364#s`bLFUP5bN=1)=-NRC!F###i9L@wb; z4$KYR_`bHl4KM1;u4YL+X}^p-CVGCO z*y`|0xNfsbz8g0zD1p1m)u6Oj!e!NoefS_5B}B#wL77-+@s2j{RoQe7Liem=bug&H zB-e8O5c_1Tb2+t*$eQ^u@=^%$q92XZa-2)}6IhZnUhD6Ckw1YKbAk~xX`GwcA^I_l ze&B;MhucBwR-_nw0291jt|Pz!1s0(10xnERg_sAsa$F*twC+&&b)Ak?7 z8ShJP#&W#*-*hOv85g}tWOsL9l|}YgHFuSNrVR`LIC$9UN(juU5g!q-ecmrQFJ^8V zVUofUMN*>Dm=QT2Dmakebk^$~ZFab%dR581Ts zSF?Mu|Jp=ZJ)%4H*?5>tFn5W>(`hl29DOS28q#dY9E>^k~tAae7 zk@8Th?qcJfaQ;=$IpVaori3ykZ4$y}EFdOz6VCQIF4&Bk=CRou9 zt*Y&7rr3&tt2jD~OcTLcFqHipBoZo!8!-e04if5@?CMGUmeM})v!Jhd4HYFagtA)# zp?0p4&NnjnWgDNEqm5&6$pzC6*4l$*hO^#Z<=j+s3T}=Pa0G)P31Pb_mS2ak>_sDe zyixd~zxzF}`-@T)elGcauMzXQzSU}$u`jW8_ZY1n*P-H>z-a+OEQJMxy^g3AWf^!5 zcoE123}T4_%o9s9#T-mlj7}?5R-?bFDSR1Vvt&ddYuhBliN!pUEFu|eUZKs9J1O_j z6@YJCF=LZc@V#+J1_X!3n2f{LNC~*L6~k8=(7Y0nHTC`2$uyGkz896ghkS%JkBQV) zwp|(__G|tGW{LH-enVgZW5R9LQYKJ}zOqL|qmNIFXk-O6ay8@KRlX|9bfw6*lJnV9 z9#ejxRn05z+TcOO?7a^>Ucx>h-ggOB;3D&=F6K0$qtsKF>tf2H*9BxzM$VGw4WFXw z?1=u7BHhTCL6OB=E0x&*#Gbqy-BrP$ja^_7n5{!J9sGf&J<@d7WYzQqDNXmWnm)T{ z(<^6NO;=b=Glfe{yekj+@SBZX4yy#|mZL`|;AW|CEVsgF2(;%`7>%pAwfF)c#{uL) zhObgL)73&EpHc@hLGQ6RL@|Vd%COw81%@sJ$&L!9=r)uXsN zRi51yf2LJ`-Iv2ojMHtHKyBl6>*t&VZ2)9B2@7F>p#{%5e^1!_jS{igp*bT3z5I@K zZiw;l60K@Jhth8m9?I$CI(}pLfTO=e{PiuyIyBy1FoXx+)jjy9c>5llv??6}77QYC za$L5T-NJN28cBT0LIR&dKW)eA8%$Ws?z8CI(53#W!b5~|>28SJXCLk3#4obxITbOD z@W0L#a>@%<1dQe&nc=$EBmF3S1!`7^g>J8Fw^mcZRx~yty03YdJ0z$+ zdmQnl-9)+o#B=NdRc+z(+`CK84rD>P2y_;1Dn~ameQuV8*gu-LDR#D!UqY{t3jU-* zDv1nPYK?M3z!S373pI&!)9CQx_36Wht!5pE6sz-;^DEOzW%if~(>EhWt7+%#wr_^- zl=ex2`#QZRHrXj^5t<~oZ9U028$GUiKY8#hf}br{2CF~@*46&}FZKK{1IBib(iT{r zx;M#pFyyr$d@(9;mjSkm(*E;CsqQ1~7;S7{B zu~UGdr~nHW&~7Iy%^MOM=n~NX_39uM)S_Ud6b;smUBQ#s(4jNcMVSU-cwEgM#}g@qI94<%WXb5;M#fuy@gAImCo`iNa(9* zz8=oT=7&{aQ579WGJAdFcOLemKvuz3Z2-H)2nQuvm&GB= z1V_hv=>th8pm(5If_3o81Ui*tBl;`$TDJrO@GY8P6xZQGj*R)RR`ZP5r4v%c1tEVg z=geY)5ej)6tsY0c9m5f1C$OfyM!4S`3+$*P*51s(14NK!u>fm}JjxxDUl{KQY*Lky z<2C!EL3_j-$?YYKZ-*7X*%v8D_c)G|K?1|8$MWy?NOF{IHh)WsZV}!X zhyrdAV55$pw%`|>zXUJK8I@o>xl6es;u2=|IgvEl^fCNwAapVlj%c#*(a1!{cp^o^ z)4q}9X~~HK+?Ug>E$B_tk{^5r18wuTNF>n!`i6sTOXXne;b7U^N>B&;S=n0-oEff% zc^qhUr-1I*U=t05`}l(dkG5sAWYVFRcCUGc#oZchUK6Y2XF+iS+kuDB2Cr)k0ZV_F zsojEY5M5ebly5f*Yg-LxTb(1V!rUU9;zuCjw|Lvzs3!Cm-K*wS;5Pa=@}%vAG{oD? z>)HjQpbU=E!}a9;PTAl8DSz9n_}fO%g3Jm5|N07>OCWs4<=$az`vLA&7w)#7?0%%_ zvShKd6^EPnU6f^JlicP>#pK#Ix@FlTM04Vyu(?+;Fu_7Ln=3S?&F1#R*Z&c}i|TAE z+m`9<%f|LAsg^C4bvEl&1jG;4g>&^RDAORPAbXvVllf3HePuNA!36z^QL)4zsj>V+ zY&ymwYG$xP83(Qgm(+YmTvf@5Ahgc^of#1xBZV1ZQ$Rk&{-o$f;Ya@ejITP2u&kI~ zJ#HzZ>rqCh##zl)aaLj6waVW?DX2qEoYm|a#9mr$Ekyt=;;c55UMhiKx)teHdb$dR z9;e^4Q)!32Zepo|Jkh|AKbgxguE5%`x+&eUG#y zxvY&bcS}8VWzor2`!jpCUun1B5>_2oyo)CH5~ObeaFs^ZlZU znBFSJQ$6Jsff`#Lf}^t0Dqg#t#h4e7Mq-x}F*eHtX}OkL!h#66CzqWgNrzyrtLJYW z@eLX>e?C&tA+OxUfv6NE1X_39MQ)pWk=t8#cPS>3^te04B9Z_TSQm-UFSi-yBaQ+%53jAd0_41Xby&m--_U8d9qr4#G`^m(n&|foe}uBL=m9e3&$u)gxCSS2zUm zs^=eO)mD>UORE&Ej2}J?IET3n#T)s*lmGi>*3Hz0;bt?eiD3>~BY!rC+st}x;A&=e zbE~+J$X(8z?{>r}zCb$HVZ!&_wkgXP9LD$j`S1C&zVml%@aL0_3cKJ| zrd9;y;_|W>N@AN;q+TY;D(Sc2Cf4a$$Mud)dj48Ht4SUmnq+#9bi9b8RTZ%W!c?ndOcpw$&x)gDV7gxyuWY+#7G zMT7{zbog=h@*fajX;ouXl^IJACs`W$Dl0NkQ5G?HkBdXkspd6KT;PejyKFT?iDY$1 zlgueDYrmTXkGY$*spu4%&7#Mgn5)Xq^^*Fjq7gfijo}ZKI0~&8xiMiwF!Pv|f@}r9 z5>9vXESgpEb~kYseSQ?+tR>?ODdis({*b8fd#O-jRd_U6L5i&wekT=fuqqhI3JVhz z>ZHPGtHMKe1)`iM@csAW;Z6zB31xhDE;e>=ozJI~AKqn&@{v-04&|0n-q$~g8|6L4 zUCMszDc>X>Y|vOI3kK|tWZZU(phO=gjqlKs8O-tC@ex*xUAmdE8AY#Hear%rp`eEF z5f0Qw$8Ym6`YS$!`NvCA(Y9U;Q=}Uiiz%Wi=!pM9GL^K_c6bOXxA}+@Q8z_DxtkQ@ z!5n!cRa9_9U!GW*^X;2?KVaD{28QNgtcX$JEn>EaH%b7H7P0<9d)XdcKL#{Wu_`s_ zDX;hcWqk6M@wK-`BqpitviKy;=FZBK}ynGE_B3h}-XApts%Xxz>O=lwCd*;`&6$*WILs|WpQd7kLf z!o$+S=z(?%pXyd1jq2p^;?pbC`{u_MPG{ z>z9a8gjF8024V#V%ObZga_7)nlJhZM#_~5F5{#A1=fwp4jF$R^S{pS|7G}so>&5V9 z32;TYD|Cld!}wJ6GI@^Kf@pZ>QlPht&y+ssE$MRc8lge4fi2?)TV*|-;jp7eex2tJ zZI(bz;?{hy0KqLr)VcWG(WCL~oFD7PAbj;Qg+L%w@PB9WfgEX!HsKK2m}jz^PH>5B z;-Fba@fWh2&ZeGqgsNYK0zdqd0@jK&%58N8M_@1E;C*IMx* z%MUE!fzN0b)&g~dZDNi-%pXDtm$8fkDwbYTW&a>_9P>9hvBrDR&o7lDf)*EFXrtc( zsTL^|8ws9%r=GG1bEMcd2%U8U6MPTG&*=1G_$B75%GUc(4BZ*m%$ISF3CKIfbBaI1 z;rg$9M;D2*nIoCUo`BmPm#4#tKVF~Ls?1!yn(rfgoJcdGbpBd(I9m)YmpB5Nm+)p2 zxAP#V1M!B|^dAB|e`x+*?cp4Elh7a4g{^Qt6S= z*^h?f=^Ktn`i9Ehd_QPT%|WtS9TYEpV@7LB)eRtb`6}%xv9ebCF~9ug)I5{{0khvU znnu!Dhs)N}sqM2JL*JUt*Eu?0VLbIT**|)GpFkv`Mhe}{;ji4AicT*%namz3`HPI) z*R3FwVuDVz*B8Vj`U&*w5><0XYtc;-QQ+tN5o>>RX^yv~mqq>XA2yxkhQksFtHATf ztNw{;$Pw3(6!@-(CU!~1iG-uQy5d5M{>d0XpLO_3j%zEhW}kYuSTi5R8$i?ISJpSry!yg z$S6e4PuxXK*%4U2CQD6$yu{tP^^f+}gLoic#ROXRm;`ntElH&q8iK4V=?Ie$Y6zNz z4L%}3WX`_yh2(lI>jII z@g?v4JP$6nmcx$(c$&Kp$fsNf{gG)^&XnB@a9do3J7Xyb&zzTcSYAFR2FfjsE5$xo+dA z0$MV>QfihgiaxE1GYaK*6^i_i$bbAtSry2<6_~F^#^hcv+i7Ps3-?ng#LQ2&xg3{d z|Cxc(V%F{}!0PvAV}L(25g0DBAyZ=XPD}_qVk9tsC~4kZ*!dRCb0)?YdYHU<#c%Tl ze~eNl#hvo|3TtLW>4Vax@pyPWGtpbC`FooBycLoGKzl3Q2}XPzuZ`d9ubj*;q0Oz6 znJX#g3H@4aW>Ol98%07W#_0VLxq-q;-N0uz>$4S;XZ9)}vJiNW4 z@ff?QY@vr6!u`Jf(u*&?hzTGni0IjO)b~cxnb>1%db0wNjC=aXGM%u;{?4=S&Fa71 zV{@pTvd0vD(*J|~rSo25{v{d*80x{~j#9fR_eSa7+Nk#exo!tZ9Rq#JPLk3upRw7!K?Ih39I0TH3QumX>U}nbOq;a}&uhoqY#9PuPR-fTf z^v&V&akZo8+Wm;ONSTrGi2N3NXw3Qvg3o6DF&&sl2RI#GI=+^xzW$~NVWShQ4rC=dkeC7&J$PrDb(~g)zJHuj zzweuao6Iowa04hlq0-52jmrlFfWpxMHyG{_W#q~x4=hPUHk4yCM1Nw1Ph9a`dQ%! zwPH}Pgoh?VaH5H%MbxS|nM@`RNiyR+Fj&D+NM#(N@u0V8YfWpbRF5{bYOxO;KpvuS z!b3r@8a+NH#79I0e3AQKYp-u!fShx=zh7@}3C#EH|9-Z<8QZU@L?85Ek`eNlFn4ZcW zH0bQutvETFj(=N>$V)&{$lmWO-iN7R=vv4cu{|U(pcws<`GbIg8z*sr_+2=yv?QE& zN8hSxg*$nSg=|AM$6+T*5go^dv!Zaq3U<2P&%U@{+omBC+UeT6a0r&Tku^lN#f2{g z*Kq!^gBxdo*;=--x=Pj*&d6S>dUKf2*}*=TavZM5Lxd!M0H-PGS>JYB7C2fO%r@X$ zidJjNc(LH?$mA6~kX=9qj9_#Mg&w`$>V6qRIM?B7Z7|seJ)N9D(@A0gO`B8N5adw( z9VfT{3FBvcQc1!oGt1WQ%XFgPRB)dw%=q3wF-u)#cVXDZ1679yM#a*FYpi|igKu>Y zPYRI_bE^MC270~weY9B=l9Qo3OOohwi13GuWPA6obtJftUK{==l&V3HBuXWvPvc_} zeRvX1!fEt6)y%_C7|>r1V2YISnP!x4X)3nc-bSlWG!e6Z+Fjq?KK_IH3ia`axJPC! zIaG?r6BTJ9iq}`XiTaw7(=387no=jPNKCI6Bw$M0e5L0+B)kA0$XO>KQILE`ib5c&`J^4NS6(WV62%SAchy*6AK=e=YRvgP)@Gz8A?D34&- zlErkBSa%8E6gbDqwq*OKSh*V!|9l8Dx8L&}&Gm!wkX;IUH*LUg=}Q2ykf;{BUwGr> z)AYH6a>oXJBG;)vWsJVek`|7@%RaEbukT4LV4aV?zZ}2Q5o#o|7WlfaZx4PW;Pzwu zlIJJ=J&0?&aVtYkIfkq%thX!rv}jFkA(%-n&Y-&ESpp$Q4){*dr~KRx-jF{Hy@ujNJ}d zt1(g9!*o2^_!VTNUHq$T_hKLJ%0S_wD54HN)>9ClU&>pe_%OsaJsh^gUW;t^t|h+% z>0a&@A4m#a0(>{y66-JYy*#rbycP0ld>LaQ;b+KoX*hdbQ4YLgTjGL-wwc!A^WMCl1Mn%3J zB)inS_$+?=lAhnVzRmA@te4PA$ui93v{Ev=q;)|xS9fyyQ2EN53m-V#n69eBk)Qi* zcP{0mf07@wj-WjJWLWI0GuU9n_K*QY*v%HFOwy4DpLxCjVZ@czPy%ysfdB+rG&QT( zPWZ;DTV>%n`Q}FTb!>&}dVYd$Y!vi~!w|tk;ZpB{odfA^%GT8? zSj0X=Opw`K1~ZEII2Umr>_E$lV27OZHrUCR!0)`Psl(G62CfQ0!EB3$X2SZo)5-hF z(!b7Y)_PwQ>?LF!Nzxgn<|dP_HWr#m2N zE^VD_=xv$1V`EU9g;P$RfwJ-BZoBik43gJDB9TNteBZ9OW3fFp)!+)YKYPV2{b%2Y z}pN~r;SLJi&7wL#2xM+~` z|MCAx{KBx#_0nRv1Y2CN z*h(^&*&TYm!eZ74jETV$v3OAoef7y-P-~gL9vc~Om0NjuG8X7A=4qBn=MD^5IDeZS zj{+y*v_(vmTueH6QJWG=HWQft!%8gX*OlapR$H-K2``#oSMvNycDQdfeEF@IU!xG< z^#)(ILn)`Qcm4=`2jWX?Mh@=WdC*!Kxe`md-`~(PG-bRnbB80t>9S{talZ!w^gwl7 zmmF;l0;Z^a;RT8`Nub6LHt%*6l8=f^Z|>>mY4Lq|IG{C%UEjDTZ`QCHaBri(NPze)a0ZFDMuU9z>5=3E79U+Q_aY z8h!&KB9`arS{}MAtYk&70P6tFQ=tY9qLAk2D@cLUSsQz3CTrEhCoNlGpH}#_NbqG` z3rW2*8k|Hu^wkAFz$1lTSi_E#Miv-_*4u3@6VY~x3#aD<^Kty2bk#R{G7*OQD-N}t zZj^>q_s?m?DLkv4N{PM;<@Lvk!SR(wu0YR)@<@az(3-Uw65eUytvnzk`d4J)q5Ch2 zk=li`ONq0DIwGhE<}%)evz&-G(FJA#p$nkgdVJ95-_YVGy6@eTClv9qveqdVvB$}) z$|L=f*5l3o%4-VX#L-_X@=1fyT;Gl7w=cE7meA=O|E(eC4`4bHL(W4$oZq((%J2H% z-Q9EqRlK_*ADGynu%8&8N?CRo#4#b*Sl5VcgB#HVK;_s{>|%l*Bv*bnZY%0U?U#o8 z2~SKP8FkcIqv|iz)B<3NiL1rvi_C$~)h0Qi0cr!2WW8T|v+gwgg@@lS{P4~MKa6u5 zZoVJ=l@4y$iey`7TM9p&KVoX+^2e;GyGvbo+at~Buamd;3`uE!lD|Tnr1p25;bChz znYt^^zUjr;68U9d*U?e1fQAMz3#a9535+iWXJuP*f))98WfVii!I_TNmuvF<#f8>q zp{Urm8e5od{;2x{wCb`*A#-|NFx$hk+ejExLZ>Cn#`p{VqP9in8`wct87SY&63R z@+onDv>z1QAD`d!eP;g>?Jf4zP)(M7hb6`#_`h)n@qfciemIBu;p!300482^Kr69; zZ-IqKJ|D&;MH>J2vgZFTrb#w_Fcxz&P)uPCaFNLY@*!B0m<7a9^WXtf+Mn=)PbK(4 z7*qMdV%*VW@`E29#1HNo^8YA(lCw?xAolHmB^)e2px*{^IfY)*w2#`M9+p(EQBgA3y(jMysdl>W7WP` zgj+$@AXs7MCMDDGM>GiYc`C0=BK~y~ZSeaB2OmK53MbI8GUsgcHY~btN5?P5sU39Q zB-T2f$J!Aec~ExxcH5%gp}5e`eg%?l9IJZcKwN6mS%wo6`0hu!e@|byg{!kr2RQzq zKS@}yo){Pg#W=_lZTaQ-(6xkNusweTMo#dD_%50O8CtZUwDsCG1zK?(8kf3zBFU4k$V(c9$#eV6jy|(-Tq;ZK`rmzH3gkc{)Tyuc=@CzJ9X{ z*i@Q1`b)mpU<`&toI;6<4ZurG+X(jFx*iK$hciQj>bn5)&W*!R{`FA$`D!#4{cnod z!_62EZvuzcjK*}+e!TbFF;9mlAU~LfRvBO&4IEh+#Pwg-<=_h&H)2Mn+%T1^p}7Lm zvXZkv)bQt6T3C@f9+>Bf;S8wlbgmffEN`r6_%e9P)dHKVa~k zQuq~r&)CD0N>M~Cc;e#)CRFt5!_f3zA>j1XE)<(2_)}CQMMPMgwRHaHBFI{kZzeSNO|}hTX;G#McGsu zD9|o~y4#xIK$PG?e9F_&`QdYl*OkcHC)UNGY3c6ZuN-{eEU1KD7#+v<8Vv~eM#GLy z{bdGY@;4e4XdKD|Exh>mS-Ji`BdhrLS$XpJ8I{LOo4=`W>|1OC5jHa0;0}SMMCudw zOr}23TwK;V{>3w~!W3^mIO-`c5*TLgN1c<{#Ga#^RIs?buy|Fgb$M zeY9M9Car_-z??%noa6H!R!!_VHv0yAmY|A)y**d}pWO+st>XtHDjb4~QyVWvJZ0e? ziUoRQJCeiWL}`4OuZ7A~@H2$@Y&<3ZAqS%`(SZnwkIA_g;MEdk&7{Eb$@jmLmMy2e z7v8Sa-U1jJ-O|2``=ESVM2B<-KkI?|f*W7Y0(6@Kx4&_AlXp`5Ma2@;wyZiNiW@kfx37FU7{Ssl%s5F2#{`w35&| zz8wBzc7&xqwBW3=RzH+Dk+(SgiX+FfU(Am&1ODimsp7tugYWa59;B$3Px*^L8E?|; zXb|-|8>dw4qDX9uXu%V?9Z0#Qua9_c`ymV@)nI<3Je()ei_FAbb9q?j#VLy5c3Q{3 zHV!#_7-fY9lI_mNF#&@yLKUE48dE6csrfh|H&zD4phbN|9oiX@3vYCp{Pf7U<UJz#vGCHje!)#dx=SK?-MA8F8aCa%$Co|!+3|U4= ze9SdZVZ?FL@MSpt89LwC_6(M$xbXGhww}>7Z7JzZL406SW7(2edH8cgsrAO(QH~em zB`SS5=YCJ@iCmq+!sZ+Q^d)xM>?7JHd9aMlK(bJc-aio@Zafzu zUcuo&=uxx;v>PQX33tVA+f7y=6y)G<$F{wfjMf6#nQK?7_d=)@AbVIjDOsNw>05ST z@z-`|ExJ%~YuSiCY#85T%g-AAT^fM4ls*etCjH%ldpQQ4082OyePl2>rpPZLDaQI+ z-eOz>vI{yHw$`2K8rZE_9Nt`CF2J4+z&4Tt?}Bcx+m6F7mIK%kG9hCZHj^ya1xaZT+G4x9A4l=| z`@Z!$9B=Y^_)YBN{JL*l_{-5aB{g&On}L2~cVTg3Vqzb3VO|FbPM_IQY}tz4LEjFM z#KJzS?-IPz${P=7*;!cDVYS`E=dN#uIY&ot`4Z+lw%>)6`1GLnZeEWKIeTp1!|%t~ zm@p>m0gU%P+aB9>tDupVOD$_!IKQ}W9W%qU$cU9s-tR$eZx6mREIm2Yy#5C15lbNG z{-RPatY2eG0ER5KL(76ZX84N2H-p30S$Qz;IW;Z+eO4S#K72)F`2BpdBKD;h9tdtg z)?P%`)>BITk-vf8VBYi%LH-7Q3KLsXCKoCk>6CJ;C-Dmh@2~g>n*y|~(s~Z&7BDD! zf5oeD`yph1hB?;7?!^+QmSO$?rX>D=;)iq^J4X7Wqi<>zxME4!o%9Qhc)COmc>atp70QidkBz+b=t$V2@m(g zJuD>;4{HxUF+D_1`G6Pz@G;|MekqHb2k~=$>}K*wa%jIc7_sZg0H(AG@A8(tI8P(E z1qFTt5zrsl+~pisUto9=y>M?@PV5{CN-W8n!H*H-W(jgl@pZFT>unkFC()OVP1+o@ zKYKc&#m8*OzV9s@Ju%!~zX}u5g*dzKQ2O5owpx4&Grft=gF#hLYP_q&78FK$^*{&21o zMO}idmbE^;9uZ=o7`hfhM7bY*bKjp`aC~kUmhZr?+9ONGa{}QdL4L1W6r}vX3);-u z{d5QGvsD1Myu#xNVq3H^ifA!nE!nsND+e{UudwxO7jAjFCGN6lBgJ95;DSPJfzRaw z!M{aXDO-_yqX;~j&+?~2hqY}hWg^*@aM9j%mS?Mxi9mxrau3IC58tzq^9$StFNB$n zz>5X5J#a`c+qag|MoCB~TPb}cOR+@mr7U5B0H?{BVGJ(c*76dns&D=CL=RibN&xU3 zo>@fQzfs6PkHUOJ%tRlm4BO1Eoe4H^Ke2CgyWQSc4A$Tg;{5EN4bYvXU~j}om(IR! z3dEqKzGt)<~V5X&ZN7-GV3F;NNM)iu1RqhDB?r8mKO5_AJ{B&pfU$o>@K2GJ9pFdK0;?oxX8i$0Iq3e1$dWa*&F-wc)o8^! zb4yke4QSKd!u=Np-@w-f_{3aW%V0QT>0{3rB1YCOyvioIcR+9R))%N>keruqCX8K& z;3mIsj%Sfm9;I*#C#mNCkjLe852G|%vwlIgg{yNd24;^l)#53id=KTH**EenylLwqZoLA#*;i*H)9Yjc zl~wl^GNII}dp((G#Or>JOdzl7eu_*EGCfMBMl!XN=_h3RUu0TBCYei5n&KIfMN~WvH)I}!J+N=AROtfB7cYsWj$wWs@b)QS7)5$c7 zOa){*l}s0sX$YAvBU3J!t|b#yX&trM?!9Q6bxb#ygMH=T!7 z_Y9d{AkzzEqDy0ullWi3RHX`tI!S+IM}Gw+7=ri@?VkTkY`!l{`y)?Cg@5FS%=D%o z#gUFpdvc?N;3K)G`!~Z;*sT8x;g1x5dU|HMlr{#fqt5@)rhl~Ik5s<&@|xwQveT#c z(bnJ5=KpBJA8q;n(di#;{*P3@>Gf^aJJmf4;PJ*^h@VOo$=i@OZ)b(s^h(LmACZmz zsQKV8#Lr{Fi42C&;-7+a%E-^LX6RZp9PJqwN#;ZHE|Rw)?|+Iyg(R~@@;2msEb~X~ z$U>e*kMbicShzT&?WF}rF9h>$hpK~PlbpK{JVmyw0FC@OpOuCqF zlRoL#v^V*{Be|#hH^Z5H+VZP0Nl#We%vz;HwJ>9<<&TQvL8~#Y~r>AG8Yxbjmboxh||09(zy}V|*&2i&j zz5M@Z`X6om9jSiP>)Wh%bH31HU9b5a$>RXE3G=7jRY=}N@;2oCuP{c2q^w2qHst-U zP<9fLaN987XV=DTyyrEGiKv? z10MBFHT4Z{;~GyeK!(|~l~L}T<2C|yZbO3j>pe|ItsA_kOGuRL?#*WVAu$Ln(r0)#| zbkucDKT@f4JFDG3qaGC-_ zf4~=XQFKUHT~KUN34~Rk!pLfc7?eLyUEf4cluO;HraGI>3>Y4-yD6ohs2X*_1%9v7 z=Xak!c{0pQQZ`;~jBE&+WOsR*hKhu|wa$ikO`|Y6!L*3H4Nj!#aCxfT+(7&kwQdnrXgNp~gmDIR zn+-U90nT+=B-9v>G73$entC+HhWaM7lm==Khsm_t=kxfGN#xk)N5c-d8yXIkFQ5B{ zV7(6o@VQ+cU$xQXF{lZ(d+U1>#NXq z8jZQmhM;a=KJ??-iAG~R+?r}>D4_663UM;qfve8xbGiaE+xbdpYm0UQpSoWu>&@ zIgW#PhQ}Q?rnr~!hxXFo1{va>4pXjFPlqX4s;9%0jXfQvbnIrfC$B3tzQdF-)zd*` z9O+MV8w}UMMhpr`9gCb(t|rWF$Hm8BEUg` z%or&|qcM4kF|zvmMiuyv#wjDKb8}U)dlR`g);EoUpOMwyYaFe8HYNEq{bPdgG}TVI zY*twr$L8^BJ^`a9J59O#N3%*0{kPGElTIRy;6qTR!9CaAV5o_Pp$r#h7d6RHe*6rN zuc|(vF!40It0#fp)$V3PouhJ9fW7Gf#O-TT)nILE)W|Ufc#Iu4X6(5&ZtyQh%3Xa! zTK34|5c!)nugTe1?=pBSUj-!pQZYQ{*Mt9wPdQ-il0BpiK-5AJ)j^F^>}9;t)kw)4!Yik&-8hrZCh)S9 zJ!kdxPM5pMRj;8?Pfs!&Xw+zKntt>aa8^#t@zO4gDojsva#gjv3G+QQax)`Gr~(~% zYAu*{hp31uqBI%^KSTR0S&Nt;Qsa`Vhj)YpmHC5_vpgagLCAo_JI9 zE>_=?b>(jMf_Q#cozGqG_MsTTCNN0>HB)S8C<0p^1g}m#lez)-4?lo`u4@GS?&{I7 zt_88RhZ>(79FaeOagMuouDTeUq|b?A#Xm6@p93Qc&TGbKQZt1(@y0n66SrkDc&C8R zuU2K$2gx^gwkadeP4a>fiakwn!z-dvdITA*u0ue4_{{KC!Tp+%)w98X`8+`{*gq8Q z+sJ2@KZ$$^t3!|vj5ydS(~EL?y$$oc)blZRr*sh-mBE>rK1Yq_vGY(~D0mY%aq_}z z5zzQ#`BH&=eAAoOZt!Q>d{vg^bd_OoS~4wz2Usn=&|I{`fqubiTFKC6T5HKu7pWl@ zwzCurSD9^yxD#*VRAuQfl&UygS$oe=mfo={vj|$BmE)8pG*xBxPE{Ed(^O{1G$dQ1 zEbX%(PP+mN=U1tW(A6q4{~DE1c@4D4uTd874JxD8hq(MIqsy->#%)lnyiH{mEL0iZ zg%H9nQd#*e%F+gn$mkMfDY#2znvW$C4Q;uvofEP~Pbl zOFr};y_Z=sI%fb^Sgb`eEl@4d#2A7k=r8l8A1O<7z9l~|JEsla{#opG?*He{A~z_2 zV3)}Ia(Q1T?>c$=!zUaqOX;Uiw4K8vx99R-{&2hNu<~VADSQ%A6^r<#&kEJl5Hx3~3kDEzV0HAta z1LSsrV3h+RX<9gI)A9NWIOeLG+&&NNd=nTVHV=9673p*#{SFYcr)7f#+GJk=dv`OI z(P6#{<{DRn$L}UoNhls&9if_rpudjXyo6{`mn7h1(M%R3i6#)T5b{E38mJ+>SmR*8 zMX1e0enQI_k*thRyC9BpIRg^#a``$Kl6aZn3WmX^hRQh@ygkYf_MQbeH)U@XhJ8c|&+t-uCNj5dbz{19U^ zF_sYy)Hk}h`0a#(5L+>Abj4a6DocIG(O8Fyal3*6w?nIlsJV^mCXag9q6@giQmaB4 ze)V~VPu*^9Qah~;>b`zXwYs0XSuM)(s_i-T>dyW(>M#AP)rbA7kmEU|rSV{HKz){* zSO@>z0GE1Y0Iy_bI90>~jTM(C*c4E2=Bo@Scl^pS2TCE-j##R)G&fWAo`z+*WF-i- z(c-JR-UHvi>t9>rAi*~k|C9Vo)n0^U(+2e+a{G7|guffIyz1>N7PP6KXHyDp^_9ix z52&U6;QK1X98h;FoRp&w)I6**!F{a-R%b#B)j z^+73H*wia^>%>NcwuYH0KqYo_X|rDCY1R%eq#{T%gx?(r)t35wJU z0~E6Pq?NK1wR&A@A8vMvdeLb1p(q_e1az=Ui`ryW+pJdAwa}uhs)Kfvb55+zpn5#p zt#BK92Bh$Nt*Df*;ja@utSZzBe;LT}y;*TNl=|&Jl>uMB%7Xt#vJmAx?Dd!A^?dbQ z7A@*CVIRx2s@{h!7RubK~&MJ3<$5*Rf16^2*tNzwcSJ-bUdGeX*Q#<=n|8(g7{WQA3 z-%yBJhx(wO+wW{-f!pu%RAvLkxiA|;l?rF;R(WqW$hDDD?cGGrDDJL+SwFXtIrJ($ zJMpB(x;9%^pF@T7xC$L=$sm<6Pi@JrZ*ZtTAX6RNK?n7Ew#p=7O!d4bwLe=o+5_1v zhEsnS2x{GyfoQwv!h(!|&*@OV$Vm|fy=g;32nIZj>WLf{`lzRJkiDN$sLtCdR5ON0 zH;K>H=A0W@)}mgsfrh_^FbM3+F$GKe;2!!d1=d1twYWc3#DmCB`@<9r zDjVvd{(iMNS45Y;%R?sNgmBCG`6xf1CC?ZFxAjL6O#zGgYEZqp75S#Beye|=NxhHy z?touJ{~SVCSv1?4TkluBd2aO|gMy9Tc;JQkNF&OAU!`Z;4o+z&KX%DH(gLXqj{3utwfl{`;MPA}UT6O1u#9+670KBT74N&h; z52#fS4Ztw*4$9yDJ_T~9CkLqA+UYrR+D%R$u@ij%=K$4<1UmPS1;%i%uDtgLc+}H* zIuCmWsL&vI`6VPnoT-I*>Zh=XK1dd3c^=5qC47jY|6L|g;xT&m>gVI|3(7;>NkV31 zG7)OAC4fXjcJ-fc3$WnyFTLxCE-%El>DhG$J=hXTXdk3W@Gywewu9YYBX?7xtkw@AJ+5FANqpVaYAcm=Cwyeq zsQ(&7!cg^%O-FGTji>bxy?;JPI^(@)XYH?3q)|K(X*Egzf&muhs|Rf)T-0;oyYSih zck+|$W2G%Y;&n(k`Ub_-+eOdNH}q^fz_ItyvwdL}p3yt9EYP-4pTK`d8`*@~>Dl=h zJ$w1t@f6$tm7ZOA(hLJu?TP#*cQXcvCiN7u6MdeXJJyo39*ES&d_9$Hh4b=X_k;7| zhv?bcOV9oM41L1({A|OM=BjG9x_vOusjY*pY8kt=^K&`*(0{$Bbr_*xl|`KyZCUM> z_N=a)UTepoPOH&j?aFTN-<#vDtgPtB?#&Agtc+TsmQG7S$l7M9sO&f?G&q!5*=Fgr z^k#M)?`^jfwOc|NAzMMOwae0eJghAtOS`qQvY@SBD7(WN`o6cTf3Kx7l+k95W_4t> zTcg%4Tbr#Sl-ZRL&FSdZk=t(V$mqy`bw=;WZ6|tr2ew%%+cS(di?<`gfR&|#{$;dh z_hxn4ItLihoX+gZu8e|cKlSAsd8C>?89$8U{5J%4WEh1X*-@F%ch!J~`l^}p`~i34 zn2P`v+PQWZ1Ycdv+VgR+BOG0%F?b}#9Y58W4!a@u&bKu#G~IV=JXLU8ftD-bEGG8v zEz-DBaIZt-IfT&?J4K#0*TmOrcRKcl-5WHfTSEwU3BFTsZ1sj4d7CcJu4+R$pb_kvz_mk6e_+z7V`eogQ_g5MFmOz_8o zebiwNd|4?wJ;7Y;U1bYPU5Ij$C zm*86k#{@4D+$(so;QfN{6s+*EfTpG%5Ns9vsNfvIPYcc${G8xng4YN(1ivD9gkbO{ zOutcr_XsW!d_eF7!C;-)|75{K1Q!W51WyxumSDT!LcwK%rwgtS{6oQ)3!W|bD#7)F zD+SLLTqigr*ef_9xLNR0!6Cs92wp7sH-g&)KOuOT;HL$*3w~bka=~i_cL?qjyh8AH z!BN3)3tlgHx8P2}p9|h07<>`aze{i~W@GA4F~LIw_X;)y?-x8;u)0^buW^EN1Wy*6 zFZg1?!vxO|YzVFrJW6m-aDiZOZJfUeg6|YuB>3lo>jXa{*eke0aI@gQ2@VOSqf>dj z5&VkaHo;wjmkItzaJ%3y1TPod58MmI*C9Axa8&Rqf-9cZ^cw+ev*e?vYJOw_W6Vdw zk4zU_bdL6ah2VVB;6j)h!6E375%vr2eO2RI1beZzLGFtMchqS7@1}d5#t#Tqk8Avh z>0k79{wTOY^nzBI{$JDnHwzA3p!4@%g1w(>_YVZ;<8(gC&(~)7vo+4a21OhAiN(TC z3==#`@Myva*!8uJ?+1e0x->2ptlBlU3+|nzXhXotZ<)iXFF1Sei|3z><&etUOwWfQCj&HNz0=vd<3T`jZ{&$=1 zS8MmZfREnokt8EdiI&}P9f-4303hoek?GxN}oAz(*ujyHNtH$3E-0_9RhTy2Q=kE#5|99>F z1HsTC!2I5b`362d5No0RuQ;%*q)-6>ezqw)1-c!}R{x>xA-Fkf)n9__zHup#x; zCO9hJGxrNFaOv=mm{{`LA-Jnp$M?M8q6r$WC5-$pll*TH+%EVH@lQ+4RNvi#^Bo%R z6>RDU9uREm31&m_kK6OJ+W&Eck=}BN|3qovyG zAD5>~(*KL#b_u@@82O~E@?U2fek~2ZorXV4!`XSM@g0|jho|8))9~48czhb3l7>st za77xvG7VRz;o3CZl!k+8_$O%?E1@a$i=^RYX}CQNFHgfAX?R5%em)JaOT!z}@T+N< zmX4C^`@J;$aT?y6h7Y7+uvID(KXhM}g&)+G)d2kR@EeHVApCf|zr*s7$MD{BrQ4brp1R z`YZZJ=E+bF-eQcE>N?t(QJ@?w2;~J|pK^GxW!@(aehBU$EXRIhS3o&5g76Iyr0f%M zBy9yz4lJmWoF1Y^N7X#+5n>@IgzgjrHtyA)Kc@D4M(K})=bGS6H;qLyc%6$_C}?_A zb1A=L9S~e82b<5;W>e@vf_dbWGUN3599}Hv$3b`w>z2#nAh=h1bQ^}zh34n>*JEiPwq}!1ra-+mP)DgawD8XXX+G;;II!o7 zTfWx^jRZy zW)j-^JU5al;H=_PBASskD63FUhsuMa*5%XwWRHO~Vd)^!gD@uT@6J=n8x~YzP*SR|= z8)ndW<|t&MB*iKA#R-RtQXDRd$DYUnk^+^?Arga(2519^(3)|iNI(fuK1|^raEioI zdb3s=zz7^y7J#`H4HD!f1FH?N3Aw06JCCc^K*=jE=}j_|z!|MISxO6-CZ2_j7TjWp zOp#^+#|547;nX2xi8;JFMEXY_ume}N?K0w>#u!m(8?*znNJ7L89itQ-17K1;(2{Ba z(v9@wDbpgI4w6Dg^lz?S>gO1}s0EoVjD`&JI1MtI!(-e?a!_3w)*^v1uAhVHNc4Zq ziAf7_O@ugDV2P^H8>=1lel6yQK}sP8u7Y|}XK-LH&^jbsky?3#jar`sN@J9xMjQ~7 zr1|7%jH^b`{%oc`)i6|#64(^klZ~#ABrjr->?Z&fkwhGXQd}|Hv%*obpLuCsWV1Fg zGg{>Xri3DhLm$9FFR1W1JW1+Vj+CQg;3hg;+_8BiiElr4;3OiZAKs!T!u^ls(QGnB z(xe$j=Zv6BYJ+GaF%;WcG<3+CwG~fp+N{scU~4&9g6vuCN!}P@6C36oe%8E7jATMc zv)ws_mr7uf_a{Q=xh!c*J;p`m_4J!4mONV#CmB}=lm4a^!bkzoRQw_{RKch-Be~dM`g3xVOPHCYiL(U22gFrY(ws;G#F5bNOBmT-+=0C@2Mw(*&5+cd z&t9};T&YXDHIRy)7)cLJ8>PlLgbeR=0FMlcY)v#21IO-gXq8oH#mXoP^;lL@P0^EO z1=SQAtvSn9T4`1rNo7`>SYZ}p7O~x;$7*V@n!2k=TC1Y38dp?>ffPLXg&_jn5K4F4 z)$r6>s181c2<&uClHRGKhD%4o1#5&l8nue4saxvsvQnu-^kJzdAr-`~eWQK2pfyD; WgVYEeeo++_9Z^#`^dK!@^}hiE9Kcfm diff --git a/tools/nauty25r9_mac/subdivideg.c b/tools/nauty25r9_mac/subdivideg.c deleted file mode 100644 index 424fe9c..0000000 --- a/tools/nauty25r9_mac/subdivideg.c +++ /dev/null @@ -1,225 +0,0 @@ -/* subdivideg.c version 1.0; B D McKay, May 2011. */ - -#define USAGE "subdivideg [-k#] [-q] [infile [outfile]]" - -#define HELPTEXT \ -" Make the subdivision graphs of a file of graphs.\n\ - -k# Subdivide each edge by # new vertices (default 1)\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -q Suppress auxiliary information.\n" - -/*************************************************************************/ - -#include "gtools.h" - -/**************************************************************************/ - -static void -subdivisiongraph(sparsegraph *g, int k, sparsegraph *h) -/* h := subdivision graph of g, k new vertices per edge */ -{ - DYNALLSTAT(size_t,eno,eno_sz); /* edge number */ - int *ge,*gd,*he,*hd; - size_t *gv,*hv; - int gnv,hnv; - size_t i,j,l,gnde,hnde,num; - size_t hi,lo,mid,w; - - if (k == 0) - { - copy_sg(g,h); - return; - } - - sortlists_sg(g); - SG_VDE(g,gv,gd,ge); - gnv = g->nv; - gnde = g->nde; - DYNALLOC1(size_t,eno,eno_sz,gnde,"subdivideg"); - - hnv = gnv + k*(gnde/2); - if (hnv <= 0 || (gnde > 0 && ((size_t)(hnv-gnv))/(gnde/2) != k)) - gt_abort(">E subdivideg: output graph too large\n"); - hnde = gnde * (k+1); - if (hnde/(k+1) != gnde) - gt_abort(">E subdivideg: output graph too large\n"); - - num = 0; - for (i = 0; i < gnv; ++i) - { - for (j = gv[i]; j < gv[i]+gd[i]; ++j) - { - if (ge[j] == i) - gt_abort(">E subdivideg can't handle loops\n"); - else if (ge[j] > i) - eno[j] = num++; - else - { - lo = gv[ge[j]]; - hi = lo + gd[ge[j]] - 1; - while (lo <= hi) - { - mid = lo + (hi-lo)/2; - if (ge[mid] == i) break; - else if (ge[mid] < i) lo = mid+1; - else hi = mid-1; - } - if (lo > hi) - gt_abort(">E subdivideg : binary search failed\n"); - eno[j] = eno[mid]; - } - } - } - - SG_ALLOC(*h,hnv,hnde,"subdivideg"); - h->nv = hnv; - h->nde = hnde; - SG_VDE(h,hv,hd,he); - - for (i = 0; i < gnv; ++i) - { - hd[i] = gd[i]; - hv[i] = gv[i]; - } - for (i = gnv; i < hnv; ++i) - { - hd[i] = 2; - hv[i] = gnde + 2*(i-gnv); - } - - for (i = 0; i < gnv; ++i) - { - for (j = gv[i]; j < gv[i]+gd[i]; ++j) - if (ge[j] > i) - { - w = gnv + k*eno[j]; - he[j] = w; - he[hv[w]] = i; - for (l = 1; l < k; ++l) - { - he[hv[w]+1] = w+1; - he[hv[w+1]] = w; - ++w; - } - } - else - { - w = gnv + k*eno[j] + k - 1; - he[j] = w; - he[hv[w]+1] = i; - } - } -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - boolean badargs,quiet,kswitch; - int j,m,n,argnum,kvalue; - int codetype,outcode; - SG_DECL(g); SG_DECL(h); - nauty_counter nin; - char *arg,sw; - static graph *gq; - double t; - - HELP; - - infilename = outfilename = NULL; - quiet = kswitch = FALSE; - kvalue = 1; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('q',quiet) - else SWINT('k',kswitch,kvalue,"subdivideg -k") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A subdivideg"); - if (kswitch) fprintf(stderr," -k%d",kvalue); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nin = 0; - t = CPUTIME; - while (read_sg(infile,&g)) - { - ++nin; - - subdivisiongraph(&g,kvalue,&h); - if (outcode == SPARSE6) writes6_sg(outfile,&h); - else writeg6_sg(outfile,&h); - } - t = CPUTIME - t; - - if (!quiet) - { - fprintf(stderr,">Z " COUNTER_FMT - " graphs converted from %s to %s in %3.2f sec.\n", - nin,infilename,outfilename,t); - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/sumlines.c b/tools/nauty25r9_mac/sumlines.c deleted file mode 100644 index 52f726b..0000000 --- a/tools/nauty25r9_mac/sumlines.c +++ /dev/null @@ -1,1597 +0,0 @@ -/* sumlines.c - total the numbers appearing in various input lines. */ -/* B. D. McKay. Version of Aug 3, 2009. */ - -#ifndef GMP -#define GMP 1 /* Non-zero if gmp multi-precise integers are allowed. - In this case you need the GNU multi-precision library, - available with -lgmp if it is installed. */ -#endif - -#define USAGE \ -"sumlines [-w] [-v] [-d] [-n] [-f fmtfile]... file file file ..." - -#define HELPTEXT \ -" Sum lines matching specified formats.\n\ -\n\ - Any number of input files can be given. \"-\" means stdin.\n\ - If there are no files given, just stdin is assumed.\n\ - File names can contain wildcards, in which case all matching files\n\ - are used in numerically sorted order.\n\ -\n\ - Formats are read from four sources in this order:\n\ - (1) Any files mentioned with -f on the command line (any number).\n\ - (2) The file named in the environment variable SUMLINES.FMT (if any)\n\ - (3) The file sumlines.fmt in the current directory (if it exists)\n\ - (4) The file sumlines.fmt in the home directory (if it exists)\n\ - All these are read if they exist and the results concatenated.\n\ - Formats exactly matching earlier formats (except perhaps for flags)\n\ - are not used.\n\ -\n\ - Each format occupies exactly two lines. The first line gives a\n\ - list of flags (DEFAULT FINAL ERROR UNIQUE COUNT CONTINUE NUMERIC\n\ - SILENT ENDFILE P=# separated by spaces, commas or |s).\n\ - The second line gives the format itself.\n\ -\n\ - Example. This totals the summary lines of autoson runs:\n\ - DEFAULT # comment \n\ - cpu=%fu,%fs,%fx pf=%d\n\ - There can also be blank lines and lines with only comments, but\n\ - not between the flags line and the format itself.\n\ -\n\ - -d don't read sumlines.fmt or ~/sumlines.fmt or $SUMLINES.FMT \n\ - -w suppresses warning messages about no matching lines or no\n\ - matching final lines.\n\ - -n don't write the number of matching lines for each format.\n\ - -v produces a list of all the formats.\n" - -#define DEFAULT 0 /* No special flags */ -#define FINAL 1 /* At least one of these must be in each input file */ -#define ERROR 2 /* Must be none of these */ -#define UNIQUE 4 /* The %s and %c parts must be unique over all inputs */ -#define COUNT 8 /* The output only states how many lines matched */ -#define CONTINUE 16 /* Try to match later formats too */ -#define NUMERIC 32 /* Use numerical comparison (see numstrcmp() below) */ -#define SILENT 64 /* Don't report, just check */ -#define ENDFILE 128 /* Usually appears at end of output */ - -/* The formats are tried against each input line one at a time, and the - first one that matches is accepted. The entire line must match. - If the CONTINUE flag is present, the input line is also matched - against further formats. - - Except in the case of formats with the COUNT flag, each format that - matches any lines produces output giving the total value of each of the - integers %d or real numbers %f in the lines which match. If there are - any %s or %c controls in the format, the output is given separately for - each value of the matching strings which appear in the input lines. - %m is like %d but allows arbitrarily large integers. - %x is like %d but the maximum rather than the sum is accumulated. - %p is like %d but the value is accumulated modulo some base. - - In the case of the COUNT flag, the program only reports the number of - input lines which matched the format. - - If a format has the UNIQUE flag, no two input lines may match with the - same values of the %s and %c controls present. Otherwise a warning - message is written for each duplicate match. - - The sequence P=# where # is an integer value defines the base for the - %p directive. There can be no spaces in the sequence "P=#". The - default base is 2. - - %d - matches an integer (small enough for 64 bits) - %x - same as %d but accumulates maximum rather than the sum - %p - same as %d but accumulates the value modulo a base - %m - matches a integer of unbounded size (if GMP!=0) - %f - matches a real number of the form ddddd.ddd or -ddddd.ddd - %v - same as %f but reports the average rather than the sum - %sx - matches a string, where 'x' is any character. - If 'x' is not a space, match zero or more characters from the - current position up but not including the first 'x'. - If 'x' is a space, match one or more characters from the current - position up to and including the first non-space character - which is followed by a space. - %c - matches a non-white character - %% - matches the character '%' - % - (with a space following the '%') matches zero or more spaces or - tabs, as many as appear in the input. In the output, this - sequence appears as one space. - % - (appearing exactly at the end of the format) matches zero or - more spaces at the end of the line. In the output, nothing. - %*d, %*m, %*x, %*p, %*f, %*sx, %*c - these are similar to the versions - without the '*' except that the value is ignored (not used for - summing, and not used to divide the output). In the output, - this field appears as a single character '*'. - %# - matches an unsigned integer. For each format containing this - control, a report is made of any breaks or duplicates in the - sequence of matching numbers. (So this is useful for checking a - sequence of case numbers.) At most one %# may appear in each format. - %l - matches a list of arbitrarily many (%d sized) integers - - At least one FINAL format must match in each file or a warning is given - (unless -w is used, in which case no warning is given). - - A format marked ENDFILE will cause sumlines to act as if it started - reading from a new input file. This can have some effects on the - order of output lines. -*/ - -#define HAS(i,flgs) ((format[i].flags&(flgs)) != 0) - -#include -#include -#include -#include -#include -#include -#include -#include - -#if GMP -#include -#endif - -#if defined(__alpha) -typedef long integer; -#define DOUT "%ld" /* Formats used to output %d/%x/%p,%f,%v quantities */ -#define FOUT "%.2f" -#define VOUT "%.4f" -#elif defined(__sun) || defined(__GNUC__) || (__STDC_VERSION__ > 199900L) -typedef long long integer; -#define DOUT "%lld" -#define FOUT "%.2f" -#define VOUT "%.4f" -#else -typedef long long integer; -#define DOUT "%Ld" -#define FOUT "%.2f" -#define VOUT "%.4f" -#endif - -static char *dout,*fout,*vout; -static integer maxint; /* set by find_maxint() */ - - -#define INCR(x,inc) \ - {if ((x) > 0 && maxint-(x) < (inc) || (x) < 0 && (maxint)+(x) < -(inc)) \ - {fprintf(stderr,">E overflow with %%d or %%p format\n"); exit(1);} \ - x += (inc);} /* x += inc with safety check */ - -typedef int boolean; -#define FALSE 0 -#define TRUE 1 - -typedef struct -{ - int nvals; - integer *val; -} integerlist; - -typedef union -{ - double f; - integer d; - integerlist *l; -#if GMP - mpz_t *m; -#endif -} number; - -#define D 0 /* Code for "integer" */ -#define F 1 /* Code for "real" */ -#define M 2 /* Code for "multiprecision integer" */ -#define X 3 /* Code for "integer, take maximum" */ -#define V 4 /* Code for "real, take average" */ -#define P 5 /* Code for "integer, modulo some base" */ -#define LD 6 /* Code for "list of integer" */ - -#define MAXLINELEN 100000 /* Maximum input line size - (longer lines are broken in bits) */ -#define MAXVALUES 16 /* Maximum total number of - %d,%x,%p,%m,%v,%f or %l items in a format */ - -#define MAXFORMATS 1000 - -static struct fmt_st -{ - integer pmod; - int flags; - char *fmt; -} format[MAXFORMATS]; - -typedef struct countrec -{ - struct countrec *left,*right,*parent; - char *fmt; - unsigned long count; - number total[MAXVALUES]; -} countnode; - -static countnode *count_root[MAXFORMATS]; -static unsigned long matching_lines[MAXFORMATS]; -static integer total_position[MAXFORMATS]; -static integer lastseq[MAXFORMATS]; - -#if GMP -static mpz_t mp_value[MAXVALUES]; -#endif - -static integerlist il[MAXVALUES]; - -#define A 0 -#define L 1 -#define R 2 -#define LL 3 -#define LR 4 -#define RL 5 -#define RR 6 - -#ifndef GLOB_BRACE /* Allow {} processing -- Linux extension */ -#define GLOB_BRACE 0 -#endif - -#ifndef GLOB_TILDE /* Allow ~ processing -- Linux extension */ -#define GLOB_TILDE 0 -#endif - -#ifndef GLOB_NOMATCH -#define GLOB_NOMATCH 0 /* Some versions don't have a special return for this */ -#endif - -#define GLOB_FLAGS (GLOB_ERR|GLOB_NOSORT|GLOB_BRACE|GLOB_TILDE) - -#define HELP if (argc > 1 && (strcmp(argv[1],"-help")==0 \ - || strcmp(argv[1],"--help")==0)) \ - { printf("\nUsage: %s\n\n%s",USAGE,HELPTEXT); return 0;} - -/****************************************************************************/ - -static int -numstrcmp(char *s1, char *s2) -/* Same behaviour as strcmp(), except that when an unsigned integer is - found in each string, the numerical values are compared instead of - the ascii values. Overflow is impossible. Leading spaces before - numbers are considered part of the numbers. A number in one string - is considered less than a non-number in the other string. */ -{ - int c1,c2; - char *a1,*a2; - - while (1) - { - for (a1 = s1; *a1 == ' '; ++a1) {} - if (isdigit(*a1)) - { - for (s1 = a1+1; isdigit(*s1); ++s1) {} - } - else - { - a1 = s1; - ++s1; - } - - for (a2 = s2; *a2 == ' '; ++a2) {} - if (isdigit(*a2)) - { - for (s2 = a2+1; isdigit(*s2); ++s2) {} - } - else - { - a2 = s2; - ++s2; - } - - if (!isdigit(*a1)) - { - if (!isdigit(*a2)) - { - if (*a1 < *a2) return -1; - if (*a1 > *a2) return 1; - if (*a1 == '\0') return 0; - } - else - return 1; - } - else - { - if (!isdigit(*a2)) - return -1; - else - { - for (; *a1 == '0'; ++a1) {} - for (; *a2 == '0'; ++a2) {} - - if (s1-a1 < s2-a2) return -1; - if (s1-a1 > s2-a2) return 1; - for (; a1 < s1 && *a1 == *a2; ++a1, ++a2) {} - if (a1 < s1) - { - if (*a1 < *a2) return -1; - else return 1; - } - } - } - } -} - -/****************************************************************************/ - -static void -writeline(char *outf, number *val, unsigned long count) -/* Write an output line with the given format and values */ -{ - int i,n; - - n = 0; - - for (; *outf != '\0'; ++outf) - { - if (*outf == '%') - { - ++outf; - if (*outf == '%' || *outf == '#') - putchar(*outf); - else if (*outf == 'd' || *outf == 'x' || *outf == 'p') - printf(dout,val[n++].d); - else if (*outf == 'f') - printf(fout,val[n++].f); - else if (*outf == 'v') - printf(vout,val[n++].f/count); - else if (*outf == 'l') - { - for (i = 0; i < val[n].l->nvals; ++i) - { - if (i > 0) printf(" "); - printf(dout,val[n].l->val[i]); - } - ++n; - } -#if GMP - else if (*outf == 'm') - mpz_out_str(NULL,10,*(val[n++].m)); -#endif - else - { - fprintf(stderr,">E unknown output format %%%c\n",*outf); - exit(1); - } - } - else - putchar(*outf); - } -} - -/*********************************************************************/ - -static void -print_counts(countnode *root, boolean printcounts) -/* Use a non-recursive inorder traversal to print the tree */ -{ - int code; - countnode *p; - - p = root; - code = A; - - while (p) - { - switch (code) /* deliberate flow-ons */ - { - case A: - if (p->left) - { - p = p->left; - break; - } - case L: - if (printcounts) printf("%5lu: ",p->count); - writeline(p->fmt,p->total,p->count); - if (p->right) - { - p = p->right; - code = A; - break; - } - case R: - if (p->parent && p->parent->left == p) code = L; - else code = R; - p = p->parent; - break; - } - } -} - -/*********************************************************************/ - -static void -print_common(countnode *root) -/* Print the common ends of the formats in the tree */ -{ - int code; - countnode *p; - char *s0,*s1,*t0,*t1; - int i,comm0,comm1,minlen,maxlen; - - if (root == NULL) return; - - p = root; - code = A; - - s0 = s1 = p->fmt; - while (*s1 != '\0') ++s1; - comm0 = comm1 = minlen = maxlen = s1-s0; - - while (p) - { - switch (code) /* deliberate flow-ons */ - { - case A: - if (p->left) - { - p = p->left; - break; - } - case L: - t0 = t1 = p->fmt; - for (i = 0; i < comm0; ++i) - if (s0[i] != t0[i]) break; - comm0 = i; - - while (*t1 != '\0') ++t1; - for (i = 1; i <= comm1; ++i) - if (s1[-i] != t1[-i]) break; - comm1 = i-1; - if (t1-t0 < minlen) minlen = t1-t0; - if (t1-t0 > maxlen) maxlen = t1-t0; - - if (p->right) - { - p = p->right; - code = A; - break; - } - case R: - if (p->parent && p->parent->left == p) code = L; - else code = R; - p = p->parent; - break; - } - } - - if (comm0 + comm1 > minlen) comm1 = minlen - comm0; - - for (i = 0; i < comm0; ++i) - printf("%c",s0[i]); - if (comm0 + comm1 < maxlen) printf("*"); - for (i = comm1; i > 0; --i) - printf("%c",s1[-i]); -} - -/*********************************************************************/ - -static void -splay(countnode *p) -/* Splay the node p. It becomes the new root. */ -{ - countnode *q,*r,*s; - countnode *a,*b,*c,*d; - int code; - -#define LCHILD(x,y) {(x)->left = y; if (y) (y)->parent = x;} -#define RCHILD(x,y) {(x)->right = y; if (y) (y)->parent = x;} - - while (p->parent) - { - a = p->left; - b = p->right; - q = p->parent; - if (q->left == p) - { - code = L; - c = q->right; - } - else - { - code = R; - c = q->left; - } - r = q->parent; - if (r) - { - if (r->left == q) code = (code == L ? LL : LR); - else code = (code == L ? RL : RR); - s = r->parent; - p->parent = s; - if (s) - { - if (s->left == r) s->left = p; - else s->right = p; - } - } - else - { - p->parent = NULL; - } - - switch (code) - { - case L: - RCHILD(p,q); LCHILD(q,b); break; - case R: - LCHILD(p,q); RCHILD(q,a); break; - case LL: - RCHILD(p,q); RCHILD(q,r); LCHILD(q,b); LCHILD(r,c); break; - case RR: - LCHILD(p,q); LCHILD(q,r); RCHILD(r,c); RCHILD(q,a); break; - case LR: - LCHILD(p,q); RCHILD(p,r); RCHILD(q,a); LCHILD(r,b); break; - case RL: - LCHILD(p,r); RCHILD(p,q); RCHILD(r,a); LCHILD(q,b); break; - } - } -} - -/*********************************************************************/ - -static void -add_one(countnode **to_root, char *fmt, integer pmod, int nval, - number *val, int *valtype, int which, boolean numcompare) -/* Add one match to the node with the given format, creating it if it is new. - The tree is then splayed to ensure good efficiency. */ -{ - int i,j,cmp,len; - countnode *p,*ppar,*new_node; - integer w; - - p = *to_root; - cmp = 0; - - while (p != NULL) - { - cmp = (numcompare ? numstrcmp(fmt,p->fmt) : strcmp(fmt,p->fmt)); - if (cmp == 0) - { - if (HAS(which,UNIQUE) && p->count == 1) - printf("ERROR: Multiple matches for %s",fmt); - for (i = 0; i < nval; ++i) - if (valtype[i] == D) - {INCR(p->total[i].d,val[i].d);} - else if (valtype[i] == X) - {if (val[i].d > p->total[i].d) p->total[i].d = val[i].d;} - else if (valtype[i] == P) - {w = val[i].d % pmod; INCR(p->total[i].d,w); - p->total[i].d %= pmod;} - else if (valtype[i] == LD) - { - if (p->total[i].l->nvals < val[i].l->nvals) - { - if ((p->total[i].l->val - = (integer*)realloc(p->total[i].l->val, - sizeof(integer)*val[i].l->nvals)) - == NULL) - { - fprintf(stderr,"Malloc failed\n"); - exit(1); - } - } - for (j = 0; j < p->total[i].l->nvals && - j < val[i].l->nvals; ++j) - INCR(p->total[i].l->val[j],val[i].l->val[j]); - if (p->total[i].l->nvals < val[i].l->nvals) - { - for (j = p->total[i].l->nvals; - j < val[i].l->nvals; ++j) - p->total[i].l->val[j] = val[i].l->val[j]; - p->total[i].l->nvals = val[i].l->nvals; - } - } -#if GMP - else if (valtype[i] == M) - mpz_add(*(p->total[i].m),*(p->total[i].m),*(val[i].m)); -#endif - else - p->total[i].f += val[i].f; /* F and V */ - ++p->count; - splay(p); - *to_root = p; - return; - } - else if (cmp < 0) - { - ppar = p; - p = p->left; - } - else - { - ppar = p; - p = p->right; - } - } - - if ((new_node = (countnode*)malloc(sizeof(countnode))) == NULL) - { - fprintf(stderr,">E malloc failed in add_one()\n"); - exit(1); - } - - if ((new_node->fmt = (char*)malloc(strlen(fmt)+1)) == NULL) - { - fprintf(stderr,">E malloc failed in add_one()\n"); - exit(1); - } - - new_node->count = 1; - strcpy(new_node->fmt,fmt); - for (i = 0; i < nval; ++i) - { -#if GMP - if (valtype[i] == M) - { - if ((new_node->total[i].m - = (mpz_t*)malloc(sizeof(mpz_t))) == NULL) - { - fprintf(stderr,"Malloc failed\n"); - exit(1); - } - mpz_init_set(*(new_node->total[i].m),*(val[i].m)); - } - else -#endif - if (valtype[i] == LD) - { - if ((new_node->total[i].l - = (integerlist*)malloc(sizeof(integerlist))) == NULL) - { - fprintf(stderr,"Malloc failed\n"); - exit(1); - } - if ((new_node->total[i].l->val - = (integer*)malloc(sizeof(integer)*val[i].l->nvals)) == NULL) - { - fprintf(stderr,"Malloc failed\n"); - exit(1); - } - new_node->total[i].l->nvals = val[i].l->nvals; - for (j = 0; j < val[i].l->nvals; ++j) - new_node->total[i].l->val[j] = val[i].l->val[j]; - } - else - new_node->total[i] = val[i]; - } - - new_node->left = new_node->right = NULL; - - if (cmp == 0) - { - *to_root = new_node; - new_node->parent = NULL; - } - else if (cmp < 0) - { - ppar->left = new_node; - new_node->parent = ppar; - } - else - { - ppar->right = new_node; - new_node->parent = ppar; - } - - splay(new_node); - *to_root = new_node; -} - -/****************************************************************************/ - -static int -scanline(char *s, char *f, number *val, int *valtype, - integer *seqno, char *outf) -/* Perform sscanf-like scan of line. - The whole format must match. outf is set to be an output format - with unassigned values replaced by '*' and %s replaced by what - it matches. Assigned values except %s are put into val[] with - their types in valtype[]. The number of values (not counting %#) - is returned. - Integers matching %# are put into *seqno, with an error if there - are more than one, and -1 if there are none. - If the format doesn't match, -1 is returned. - WARNING: the gmp and ilist values are pointers to static data, - so they need to be copied if the values array is copied. - See the comments at the start of the program for more information. -*/ -{ - int n; /* Number of values assigned */ - int fracdigits,digit; - boolean doass,neednonsp,neg,oflow,badgmp; - integer ival; - double dval,digval; - char ends,*saves; - static boolean gmp_warning = FALSE; - integer *ilist; - size_t ilist_sz; - int nilist; -#if GMP - char mp_line[MAXLINELEN+1],*mp; -#endif - - n = 0; - *seqno = -1; - badgmp = oflow = FALSE; - - while (*f != '\0') - { - if (*f == '%') - { - ++f; - if (*f == '*') - { - doass = FALSE; - ++f; - } - else - doass = TRUE; - - if (*f == '%') - { - if (!doass) - { - fprintf(stderr,"Bad format item %%*\n"); - exit(1); - } - if (*s++ != '%') return -1; - ++f; - *outf++ = '%'; - *outf++ = '%'; - } - else if (*f == '\n') - { - if (!doass) - { - fprintf(stderr,"Bad format item %%*\n"); - exit(1); - } - while (*s != '\0') - { - if (*s != ' ' && *s != '\n') return -1; - ++s; - } - --s; - } - else if (*f == 'c') - { - if (*s == ' ' || *s == '\t' || *s == '\n') return -1; - if (doass) *outf++ = *s; - else *outf++ = '*'; - ++f; - ++s; - } - else if (*f == 's') - { - ends = *(f+1); - if (ends == ' ') - { - while (*s == ' ' || *s == '\t') - { - if (doass) *outf++ = *s; - ++s; - } - } - while (*s != '\n' && *s != ends) - { - if (doass) *outf++ = *s; - ++s; - } - if (!doass) *outf++ = '*'; - ++f; - } -#if GMP - else if (*f == 'd' || *f == 'x' || *f == 'p') - { -#else - else if (*f == 'd' || *f == 'x' || *f == 'p' || *f == 'm') - { - if (*f == 'm' && !gmp_warning) - { - fprintf(stderr, - ">W not compiled with GMP, treating %%m like %%d\n"); - gmp_warning = TRUE; - } -#endif - while (*s == ' ' || *s == '\t') ++s; - if (!isdigit(*s) && *s != '-' && *s != '+') return -1; - neg = (*s == '-'); - if (*s == '-' || *s == '+') ++s; - ival = 0; - while (isdigit(*s)) - { - digit = *s++ - '0'; - if (ival > (maxint-digit)/10) - oflow = TRUE; - else - ival = ival*10 + digit; - } - if (doass) - { - *outf++ = '%'; - if (*f == 'd' || *f == 'm') - { - *outf++ = 'd'; - valtype[n] = D; - } - else if (*f == 'x') - { - *outf++ = 'x'; - valtype[n] = X; - } - else - { - *outf++ = 'p'; - valtype[n] = P; - } - val[n++].d = (neg ? -ival : ival); - } - else - *outf++ = '*'; - ++f; - } - else if (*f == 'l') - { - nilist = 0; - if ((ilist = (integer*)malloc(200*sizeof(integer))) - == NULL) - { - fprintf(stderr,"Malloc failed\n"); - exit(1); - } - ilist_sz = 200; - for (;;) - { - saves = s; - while (*s == ' ' || *s == '\t') ++s; - if (!isdigit(*s) && *s != '-' && *s != '+') - { - s = saves; - break; - } - neg = (*s == '-'); - if (*s == '-' || *s == '+') ++s; - ival = 0; - while (isdigit(*s)) - { - digit = *s++ - '0'; - if (ival > (maxint-digit)/10) - oflow = TRUE; - else - ival = ival*10 + digit; - } - if (neg) ival = -ival; - if (nilist == ilist_sz) - { - if ((ilist - = (integer*)realloc((void*)ilist, - (ilist_sz+500)*sizeof(integer))) - == NULL) - { - fprintf(stderr,"Malloc failed\n"); - exit(1); - } - ilist_sz += 500; - } - ilist[nilist++] = ival; - } - if (doass) - { - valtype[n] = LD; - val[n].l = &il[n]; - val[n].l->nvals = nilist; - if (val[n].l->val) free(val[n].l->val); - val[n].l->val = ilist; - ++n; - *outf++ = '%'; - *outf++ = 'l'; - } - else - { - free(ilist); - *outf++ = '*'; - } - ++f; - } -#if GMP - else if (*f == 'm') - { - while (*s == ' ' || *s == '\t') ++s; - if (!isdigit(*s) && *s != '-' && *s != '+') return -1; - mp = mp_line; - if (*s == '-') *mp++ = *s++; - else if (*s == '+') s++; - while (isdigit(*s)) *mp++ = *s++; - *mp = '\0'; - if (doass) - { - valtype[n] = M; - val[n].m = &mp_value[n]; - if (mpz_set_str(mp_value[n],mp_line,10) < 0) - badgmp = TRUE; - ++n; - *outf++ = '%'; - *outf++ = 'm'; - } - else - *outf++ = '*'; - ++f; - } -#endif - else if (*f == '#') - { - while (*s == ' ' || *s == '\t') ++s; - if (!isdigit(*s)) return -1; - ival = 0; - while (isdigit(*s)) - { - digit = *s++ - '0'; - if (ival > (maxint-digit)/10) - oflow = TRUE; - else - ival = ival*10 + digit; - } - if (*seqno >= 0) - { - fprintf(stderr, - ">E %%# can only be used once per format\n"); - exit(1); - } - *seqno = ival; - *outf++ = '#'; - ++f; - } - else if (*f == 'f' || *f == 'v') - { - while (*s == ' ' || *s == '\t') ++s; - - if (!isdigit(*s) && *s != '.' && *s != '-' && *s != '+') - return -1; - neg = (*s == '-'); - if (*s == '-' || *s == '+') ++s; - dval = 0.0; - while (isdigit(*s)) dval = dval*10.0 + (*s++ - '0'); - if (*s == '.') - { - digval = 1.0; - ++s; - while (isdigit(*s)) - { - digval /= 10.0; - dval += (*s++ - '0') * digval; - } - } - if (doass) - { - valtype[n] = (*f == 'f' ? F : V); - val[n++].f = (neg ? -dval : dval); - *outf++ = '%'; - *outf++ = *f; - } - else - *outf++ = '*'; - ++f; - } - else if (*f == ' ') - { - while (*s == ' ' || *s == '\t') ++s; - *outf++ = ' '; - ++f; - } - else - { - fprintf(stderr,"Bad format item %%%c\n",*f); - exit(1); - } - } - else - { - if (*s != *f) return -1; - *outf++ = *f; - ++s; - ++f; - } - } - - if (*s != '\0') return -1; - - *outf = '\0'; - - if (oflow) - { - fprintf(stderr,"Integer too large\n"); - exit(1); - } - if (badgmp) - { - fprintf(stderr,"Illegal multiprecision integer\n"); - exit(1); - } - - return n; -} - -/****************************************************************************/ - -#if 0 -find_maxint(void) -{ -/* Put the maximum possible integer value into maxint. */ -/* Old version. */ - integer x; - - x = 1; - while (x > 0) x <<= 1; - x -= 1; - - if (x <= 0) - { - fprintf(stderr,">E find_maxint() failed\n"); - exit(1); - } - - maxint = x; -} -#else -void -find_maxint(void) -{ -/* Put the maximum possible integer value into maxint. */ -/* New version with no integer overflow. */ - integer x,y; - - x = ((integer)1) << (8*sizeof(integer) - 2); - y = x - 1; - x += y; - - if (x <= 0) - { - fprintf(stderr,">E find_maxint() failed\n"); - exit(1); - } - - maxint = x; -} -#endif - -/****************************************************************************/ - -static void -sort_formats(int *order, int numformats) -/* Make order[0..numformats-1] a permutation of 0..numformats-1 being - a good order to display the results. */ -{ - double score[MAXFORMATS]; - int h,i,j,iw; - - for (i = 0; i < numformats; ++i) - { - if (matching_lines[i] == 0) - score[i] = -1.0; - else - score[i] = i + - ((100.0*total_position[i]) / matching_lines[i]) * numformats; - order[i] = i; - } - - j = numformats / 3; - h = 1; - do - h = 3 * h + 1; - while (h < j); - - do - { - for (i = h; i < numformats; ++i) - { - iw = order[i]; - for (j = i; score[order[j-h]] > score[iw]; ) - { - order[j] = order[j-h]; - if ((j -= h) < h) break; - } - order[j] = iw; - } - h /= 3; - } - while (h > 0); -} - -/****************************************************************************/ - -static void -read_formats(char *filename, int *numformatsp, boolean mustexist) -/* Read formats from the given file. */ -{ - FILE *f; - int i,c,flags,ignore; - char flagname[52]; - char line[MAXLINELEN+3]; - integer pmod; - char *s; - boolean oflow,badpmod; - int digit; - - if (strcmp(filename,"-") == 0) - f = stdin; - else if ((f = fopen(filename,"r")) == NULL) - { - if (mustexist) - { - fprintf(stderr,">E Can't open %s for reading.\n",filename); - exit(1); - } - return; - } - - line[MAXLINELEN+2] = '\0'; - - for (;;) - { - if ((c = getc(f)) == EOF) break; - - while (c == ' ' || c == '\t') c = getc(f); - if (c == '\n') continue; - if (c == EOF) break; - - if (c == '#') - { - while (c != '\n' && c != EOF) c = getc(f); - continue; - } - - ungetc(c,f); - - flags = 0; - pmod = 2; - for (;;) - { - while ((c = getc(f)) == ' ' - || c == '|' || c == ',' || c == '\t') {} - if (c == '#') - while (c != '\n' && c != EOF) c = getc(f); - if (c == '\n' || c == EOF) break; - - ungetc(c,f); - - /* There appear to be some issues with the [ flag in fscanf, - * as to whether a null is appended. We'll take no chances. */ - for (i = 0; i < 52; ++i) flagname[i] = '\0'; - ignore = fscanf(f,"%50[A-Za-z0-9=]",flagname); - - if (strcmp(flagname,"DEFAULT") == 0) {} - else if (strcmp(flagname,"FINAL") == 0) flags |= FINAL; - else if (strcmp(flagname,"ERROR") == 0) flags |= ERROR; - else if (strcmp(flagname,"UNIQUE") == 0) flags |= UNIQUE; - else if (strcmp(flagname,"COUNT") == 0) flags |= COUNT; - else if (strcmp(flagname,"CONTINUE") == 0) flags |= CONTINUE; - else if (strcmp(flagname,"NUMERIC") == 0) flags |= NUMERIC; - else if (strcmp(flagname,"SILENT") == 0) flags |= SILENT; - else if (strcmp(flagname,"ENDFILE") == 0) flags |= ENDFILE; - else if (flagname[0] == 'P' && flagname[1] == '=') - { - pmod = 0; - oflow = FALSE; - badpmod = (flagname[2] == '\0'); - for (s = flagname+2; *s != '\0'; ++s) - { - if (isdigit(*s)) - { - digit = *s - '0'; - if (pmod > (maxint-digit)/10) - oflow = TRUE; - else - pmod = pmod*10 + digit; - } - else - badpmod = TRUE; - } - if (badpmod) - { - fprintf(stderr,">E Bad value for P= directive: %s\n", - flagname+2); - exit(1); - } - else if (oflow) - { - fprintf(stderr,">E Value for P= is too large\n"); - exit(1); - } - - } - else - { - fprintf(stderr,">E Unknown flag \"%s\" in %s\n", - flagname,filename); - exit(1); - } - } - - if (fgets(line,MAXLINELEN,f) == NULL) - { - fprintf(stderr,">E Missing format in %s\n",filename); - exit(1); - } - - for (i = 0; i < *numformatsp; ++i) - if (strcmp(line,format[i].fmt) == 0) break; - if (i < *numformatsp) continue; - - if (*numformatsp == MAXFORMATS) - { - fprintf(stderr,">E Increase MAXFORMATS\n"); - exit(1); - } - - format[*numformatsp].flags = flags; - format[*numformatsp].pmod = pmod; - if ((format[*numformatsp].fmt - = (char*)malloc(strlen(line)+1)) == NULL) - { - fprintf(stderr,">E malloc() failed in read_formats()\n"); - exit(1); - } - strcpy(format[*numformatsp].fmt,line); - ++*numformatsp; - } - - if (f != stdin) fclose(f); -} - -/****************************************************************************/ - -static void -read_local_formats(int *numformatsp) -/* Read formats from sumlines.fmt in current directory */ -{ - read_formats("sumlines.fmt",numformatsp,FALSE); -} - -/****************************************************************************/ - -static void -read_global_formats(int *numformatsp) -/* Read formats from sumlines.fmt in home directory */ -{ - struct passwd *pwd; - char filename[257+12]; - - if ((pwd = getpwuid(getuid())) < 0) - { - fprintf(stderr,">E Can't find home directory\n"); - exit(1); - } - - sprintf(filename,"%s/sumlines.fmt",pwd->pw_dir); - - read_formats(filename,numformatsp,FALSE); -} - -/****************************************************************************/ - -static void -read_env_formats(int *numformatsp) -/* Read formats from $SUMLINES.FMT if it exists */ -{ - char *filename; - - if ((filename = getenv("SUMLINES.FMT")) != 0) - read_formats(filename,numformatsp,FALSE); -} - -/****************************************************************************/ - -static boolean -readoneline(FILE *f, char *line, int size, int *nulls) -/* Get a line. Read at most size-1 chars until EOF or \n. - If \n is read, it is stored. Then \0 is appended. - *nulls is set to the number of NUL chars (which are also stored). */ -{ - int i,c; - - *nulls = 0; - for (i = 0; i < size-1; ++i) - { - c = getc(f); - if (c == EOF) break; - line[i] = c; - if (c == '\0') ++*nulls; - if (c == '\n') {++i; break;} - } - line[i] = '\0'; - - return i > 0; -} - -/****************************************************************************/ - -static int -pnumstrcmp(const void *a, const void *b) -/* numstrcmp on strings pointed at by a and b */ -{ - return numstrcmp(*(char**)a,*(char**)b); -} - -/****************************************************************************/ - -static void -doglob(char *patt, glob_t *globlk) -/* Find all files matching the given pattern, numeric sorting. - Give a warning message if there are none. */ -{ - int ret; - - ret = glob(patt,GLOB_FLAGS,NULL,globlk); - - if (ret != 0) globlk->gl_pathc = 0; - - if (ret == GLOB_NOSPACE) - { - fprintf(stderr,"ERROR: ran out of space during glob()\n"); - exit(1); - } - if (ret == GLOB_ERR) - { - fprintf(stderr,"ERROR: during glob(%s)\n",patt); - exit(1); - } - if (ret != 0 && ret != GLOB_NOMATCH) - { - fprintf(stderr,"ERROR: value %d from glob(%s)\n",ret,patt); - exit(1); - } - - - if (globlk->gl_pathc == 0) printf("WARNING: no files match %s\n",patt); - - if (globlk->gl_pathc >= 2) - qsort(globlk->gl_pathv,globlk->gl_pathc,sizeof(char*),pnumstrcmp); -} - -/****************************************************************************/ - -int -main(int argc, char *argv[]) -{ - int i,j,nvals,argnum; - number val[MAXVALUES]; - int valtype[MAXVALUES]; - char line[MAXLINELEN+2]; - char outf[MAXLINELEN+MAXVALUES+6]; - unsigned long matched,unmatched,finalmatched; - unsigned long errorlines,totalerrorlines; - unsigned long line_number,nullcount,numfiles,ifile; - char *filename; - FILE *infile; - int numformats,firstarg,nulls; - boolean havefinal,nowarn,listformats,readfiles; - integer seq; - int order[MAXFORMATS]; - glob_t globlk,globlk_stdin,*pglob; - char *glob_stdin_v[2]; - boolean printcounts; - - HELP; - - find_maxint(); - - firstarg = 1; - numformats = 0; - nowarn = FALSE; - listformats = FALSE; - readfiles = TRUE; - printcounts = TRUE; - - globlk_stdin.gl_pathc = 1; - globlk_stdin.gl_pathv = glob_stdin_v; - glob_stdin_v[0] = "-"; - glob_stdin_v[1] = NULL; - - dout = DOUT; - fout = FOUT; - vout = VOUT; - - for (; firstarg < argc; ++firstarg) - { - if (argv[firstarg][0] == '-' && argv[firstarg][1] == 'f') - { - if (argv[firstarg][2] != '\0') - read_formats(&argv[firstarg][2],&numformats,TRUE); - else if (firstarg == argc - 1) - { - fprintf(stderr,">E No argument for -f\n"); - exit(1); - } - else - { - ++firstarg; - read_formats(argv[firstarg],&numformats,TRUE); - } - } - else if (strcmp(argv[firstarg],"-w") == 0) - nowarn = TRUE; - else if (strcmp(argv[firstarg],"-v") == 0) - listformats = TRUE; - else if (strcmp(argv[firstarg],"-d") == 0) - readfiles = FALSE; - else if (strcmp(argv[firstarg],"-n") == 0) - printcounts = FALSE; - else if (strcmp(argv[firstarg],"-V") == 0) - vout = argv[++firstarg]; - else if (strcmp(argv[firstarg],"-F") == 0) - fout = argv[++firstarg]; - else if (strcmp(argv[firstarg],"-D") == 0) - dout = argv[++firstarg]; - else - break; - } - -#if GMP - for (i = 0; i < MAXVALUES; ++i) mpz_init(mp_value[i]); -#endif - for (i = 0; i < MAXVALUES; ++i) - { - il[i].nvals = 0; - il[i].val = NULL; - } - - if (readfiles) read_local_formats(&numformats); - if (readfiles) read_env_formats(&numformats); - if (readfiles) read_global_formats(&numformats); - - if (listformats) - { - printf("%d formats:\n",numformats); - for (i = 0; i < numformats; ++i) - printf("%03x %s",format[i].flags,format[i].fmt); - } - - if (numformats == 0) - { - fprintf(stderr,">E No formats\n"); - exit(1); - } - - havefinal = FALSE; - for (i = 0; i < numformats; ++i) - { - count_root[i] = NULL; - matching_lines[i] = 0; - total_position[i] = 0; - if (HAS(i,FINAL)) havefinal = TRUE; - } - - unmatched = totalerrorlines = 0; - numfiles = 0; - - for (argnum = firstarg; - argnum < (argc == firstarg ? argc+1 : argc); ++argnum) - { - if (argnum >= argc || strcmp(argv[argnum],"-") == 0) - pglob = &globlk_stdin; - else - { - pglob = &globlk; - doglob(argv[argnum],pglob); - } - - for (ifile = 0; ifile < pglob->gl_pathc; ++ifile) - { - matched = finalmatched = errorlines = 0; - ++numfiles; - - if (strcmp(pglob->gl_pathv[ifile],"-") == 0) - { - filename = "stdin"; - infile = stdin; - } - else - { - filename = pglob->gl_pathv[ifile]; - if ((infile = fopen(filename,"r")) == NULL) - { - fprintf(stderr,">E Can't open %s\n",filename); - exit(1); - } - } - - line_number = 0; - nullcount = 0; - while (readoneline(infile,line,MAXLINELEN,&nulls)) - { - nullcount += nulls; - line[MAXLINELEN] = '\n'; - line[MAXLINELEN+1] = '\0'; - if (line[0] == '\n') continue; - ++line_number; - - for (i = 0; i < numformats; ++i) - { - nvals - = scanline(line,format[i].fmt,val,valtype,&seq,outf); - if (nvals >= 0) - { - if (HAS(i,ENDFILE)) line_number = 0; - ++matched; - if (HAS(i,FINAL)) ++finalmatched; - if (HAS(i,ERROR)) ++errorlines; - ++matching_lines[i]; - total_position[i] += line_number; - add_one(&count_root[i],outf,format[i].pmod,nvals, - val,valtype,i,HAS(i,NUMERIC)); - if (matching_lines[i] > 1 && seq >= 0 - && seq != lastseq[i]+1) - { - printf("WARNING: Sequence number"); - if (seq == lastseq[i]) - { - printf(" "); - printf(dout,seq); - printf(" is repeated.\n"); - } - else if (seq != lastseq[i]+2) - { - printf("s "); - printf(dout,lastseq[i]+1); - printf("-"); - printf(dout,seq-1); - printf(" are missing.\n"); - } - else - { - printf(" "); - printf(dout,seq-1); - printf(" is missing.\n"); - } - } - lastseq[i] = seq; - if (!HAS(i,CONTINUE)) break; - } - } - - if (i == numformats) ++unmatched; - } - if (errorlines != 0) - printf("ERRORS: Error lines in file %s\n",filename); - else if (matched == 0 && !nowarn) - printf("WARNING: No matching lines in file %s\n",filename); - else if (finalmatched == 0 && havefinal && !nowarn) - printf("WARNING: No final lines in file %s\n",filename); - if (nullcount > 0) - printf("WARNING: %ld NULs found in file %s\n", - nullcount,filename); - if (infile != stdin) fclose(infile); - - totalerrorlines += errorlines; - } - if (pglob == &globlk) globfree(pglob); - } - - sort_formats(order,numformats); - - for (j = 0; j < numformats; ++j) - { - i = order[j]; - if (HAS(i,SILENT)) continue; - - if (HAS(i,COUNT)) - { - if (matching_lines[i] > 0) - printf("%5lu lines matched ",matching_lines[i]); - print_common(count_root[i]); - } - else - print_counts(count_root[i],printcounts); - } - - if (unmatched > 0) - printf("%5lu non-empty lines not matched\n",unmatched); - if (argc > firstarg) printf("%5lu files read altogether\n",numfiles); - if (totalerrorlines > 0) printf("%5lu errors found\n",totalerrorlines); - - exit(0); -} diff --git a/tools/nauty25r9_mac/test.txt b/tools/nauty25r9_mac/test.txt deleted file mode 100644 index d252d98..0000000 --- a/tools/nauty25r9_mac/test.txt +++ /dev/null @@ -1,2382 +0,0 @@ -I???C@oB_ -I???E?oB_ -I???E?w`_ -I???E?wH_ -I???E?w@o -I???F?[o_ -I???F?[c_ -I??CA?_F? -I??CAA_F? -I??CA?oB? -I??CA?ob? -I??CA?oJ? -I??CA?oBG -I??CAAoR? -I??CAAoB_ -I??CA?wp? -I??CA?wh? -I??CA?wL? -I??CA?w`_ -I??CE@_F? -I??CE?oR? -I??CE?oJ? -I??CE?oBG -I??CE@oB_ -I??CE?wp? -I??CE?wX? -I??CE?wL? -I??CE?wP_ -I??CE?w`O -I??CB@_F? -I??CB@Ob? -I??CB@OJ? -I??CB?W`? -I??CB?Wp? -I??CB?WX? -I??CB?WT? -I??CB?W`_ -I??CB?W`O -I??CB?WPO -I??CB?WDO -I??CB?W@W -I??CBBOBO -I??CB@oBO -I??CBAWX? -I??CBAWP_ -I??CBAWD_ -I??CBAW`O -I??CBAWPO -I??CBAW@o -I??CB@Wh? -I??CB@Wd? -I??CB@WL? -I??CB@W`_ -I??CB@W`O -I??CB@WHO -I??CB@WDO -I??CB?[w? -I??CB?[s? -I??CB?[[? -I??CB?[e? -I??CB?[U? -I??CB?[F? -I??CB?[o_ -I??CB?[c_ -I??CB?[oO -I??CB?[WO -I??CB?[cO -I??CB?[_o -I??CBAQBO -I??CCD_F? -I??CCDoR? -I??CBb_B_ -I??CB`ob? -I??CBbGH_ -I??CBbGB_ -I??CB`gd? -I??CB`g`_ -I??CBaKB_ -I??CB`Kk? -I??CB`Ki? -I??CB`KM? -I??CB`Kg_ -I??EE?oJ? -I??EE?oBG -I??EE?wp? -I??EE?wL? -I??ED@_F? -I??ED@OJ? -I??ED?WX? -I??ED?WT? -I??ED?WF? -I??ED?WH_ -I??ED?WD_ -I??ED?W@o -I??ED?W`G -I??ED?WPG -I??ED?WDG -I??ED?W@g -I??ED@Wp? -I??ED@WL? -I??ED@W@o -I??ED?[w? -I??ED?[[? -I??ED?[U? -I??ED?[F? -I??ED?[g_ -I??ED?[W_ -I??ED?[K_ -I??ED?[_o -I??ED?[Oo -I??ED?[Co -I??E@_Ko? -I??E@_Kw? -I??E@_Ki? -I??E@_Ko_ -I??E@_Kg_ -I??E@_KK_ -I??E@_KI_ -I??E@_K_o -I??E@_KAo -I??E@_K?w -I??E@b_B_ -I??E@b_BO -I??E@bGp? -I??E@bGL? -I??E@bGH_ -I??E@bGHO -I??E@bG@o -I??E@agT? -I??E@agP_ -I??E@agD_ -I??E@agB_ -I??E@ag@o -I??E@aK[? -I??E@aKY? -I??E@aKM? -I??E@aKR? -I??E@aKJ? -I??E@aKW_ -I??E@aKK_ -I??E@aKQ_ -I??E@aKI_ -I??E@aKB_ -I??E@aKoO -I??E@aKWO -I??E@aKKO -I??E@aKQO -I??E@aK_o -I??E@aKOo -I??E@aKGo -I??E@aKAo -I??E@aIHO -I??E@_i`O -I??E@_MoO -I??E@_MgO -I??E@_MKO -I??E@_MaO -I??ED`KK_ -I??ED`KI_ -I??E@r_p? -I??E@qoB_ -I??E@owp? -I??E@ow`_ -I??E@rCp? -I??E@rCo_ -I??E@rCK_ -I??E@qcU? -I??E@qcT? -I??E@qcS_ -I??E@qcE_ -I??E@qcP_ -I??E@qcD_ -I??E@osq? -I??E@osb? -I??E@oso_ -I??E@osa_ -I??E@osB_ -I??FCpSJ? -I??F?z_w? -I??F?z_F? -I??F?zOs? -I??F?zOJ? -I?AA@?OA? -I?AA@?Oa? -I?AA@?Oq? -I?AA@?Ob? -I?AA@AOQ? -I?AA@AOq? -I?AA@AOY? -I?AA@AOe? -I?AA@AOU? -I?AA@AOF? -I?AA@AOQ_ -I?AA@AOaG -I?AA@?Wo? -I?AA@?Wc? -I?AA@?WE? -I?AA@?W`? -I?AA@?Ww? -I?AA@?Ws? -I?AA@?We? -I?AA@?Wp? -I?AA@?Wd? -I?AA@?WoG -I?AA@?WcG -I?AA@?WEG -I?AA@?W`G -I?AA@ACU? -I?AA@BOq? -I?AA@BOJ? -I?AA@BOB_ -I?AA@BOIO -I?AA@AW[? -I?AA@AWU? -I?AA@AWX? -I?AA@AWT? -I?AA@AWF? -I?AA@AWW_ -I?AA@AWS_ -I?AA@AWP_ -I?AA@ASQ_ -I?AAD@Oq? -I?AAD@Oi? -I?AAD@OM? -I?AAD@OJ? -I?AAD@OaO -I?AAD?oq? -I?AAD?oi? -I?AAD?oe? -I?AAD?oU? -I?AAD?oF? -I?AAD?oQ_ -I?AAD?oaG -I?AAD?WW? -I?AAD?WS? -I?AAD?WE? -I?AAD?WH? -I?AAD?WO_ -I?AAD?Ww? -I?AAD?Ws? -I?AAD?Wk? -I?AAD?W[? -I?AAD?We? -I?AAD?WU? -I?AAD?WM? -I?AAD?Wp? -I?AAD?Wh? -I?AAD?WX? -I?AAD?WL? -I?AAD?Wo_ -I?AAD?WW_ -I?AAD?WS_ -I?AAD?WoO -I?AAD?WcO -I?AAD?WoG -I?AAD?WgG -I?AAD?WWG -I?AAD?WcG -I?AAD?WSG -I?AAD?WKG -I?AAD?WEG -I?AAD?W`G -I?AAD?WHG -I?AAD?WOg -I?AAD?W_W -I?AAD?cU? -I?AADBOQO -I?AAD@oq? -I?AAD@oa_ -I?AAD@oB_ -I?AAD@oaO -I?AAD@oQO -I?AAD@Ww? -I?AAD@Ws? -I?AAD@Wk? -I?AAD@Wp? -I?AAD@Wh? -I?AAD@WL? -I?AAD@Wo_ -I?AAD@Wg_ -I?AAD@Wc_ -I?AAD@WK_ -I?AAD@WE_ -I?AAD@WH_ -I?AAD@WoO -I?AAD@W_o -I?AAD?ww? -I?AAD?ws? -I?AAD?wk? -I?AAD?wU? -I?AAD?wp? -I?AAD?wT? -I?AAD?wF? -I?AAD?wo_ -I?AAD?wS_ -I?AAD?wP_ -I?AAD?woO -I?AAD?wcO -I?AAD?wSO -I?AAD?wPO -I?AAD?wDO -I?AAD?wOo -I?AAD?sQ_ -I?AAD@Qq? -I?AAD@Qi? -I?AAD@QaO -I?AA@_oq? -I?AA@_oM? -I?AA@_ob? -I?AA@_go? -I?AA@_gc? -I?AA@_gE? -I?AA@_gw? -I?AA@_gs? -I?AA@_gk? -I?AA@_ge? -I?AA@_gM? -I?AA@_gp? -I?AA@_gh? -I?AA@_gd? -I?AA@_goO -I?AA@_ggO -I?AA@_gcO -I?AA@_gaO -I?AA@_gIO -I?AA@_gEO -I?AA@_g`O -I?AA@_g_W -I?AA@_gGW -I?AA@_gCW -I?AA@b_EO -I?AA@b_BO -I?AA@aoaO -I?AA@aoQO -I?AA@aoBO -I?AA@bGw? -I?AA@bGL? -I?AA@bGH_ -I?AA@bGB_ -I?AA@bGoO -I?AA@bGKO -I?AA@bGPO -I?AA@bGHO -I?AA@bGBO -I?AA@bG@o -I?AA@agw? -I?AA@agk? -I?AA@agU? -I?AA@agT? -I?AA@agR? -I?AA@agF? -I?AA@agS_ -I?AA@agQ_ -I?AA@agP_ -I?AA@agoO -I?AA@aggO -I?AA@agcO -I?AA@agSO -I?AA@agaO -I?AA@agQO -I?AA@agEO -I?AA@ag`O -I?AA@agPO -I?AA@agDO -I?AA@agBO -I?AA@agOo -I?AA@_wk? -I?AA@_wq? -I?AA@_wM? -I?AA@_wp? -I?AA@_wb? -I?AA@_woO -I?AA@_wKO -I?AA@_waO -I?AA@_w`O -I?AA@bCq? -I?AA@bCIO -I?AA@bCAo -I?AA@acQO -I?AA@acEO -I?AA@aK[? -I?AA@aKW_ -I?AA@aKQ_ -I?AA@aKoO -I?AA@aKgO -I?AA@aKWO -I?AA@aKKO -I?AA@aKaO -I?AA@aKQO -I?AA@aK`O -I?AA@aKOo -I?AACH_M? -I?AACGoY? -I?AACGoM? -I?AACGob? -I?AACGoQ_ -I?AACGoaG -I?AACGoQG -I?AACGoIG -I?AACHAM? -I?AACHoq? -I?AACHob? -I?AACHoI_ -I?AACGw[? -I?AACGwM? -I?AACGwp? -I?AACGwh? -I?AACGwo_ -I?AACGwW_ -I?AACGw`O -I?AAF?Uq? -I?AAD`oB_ -I?AAD`gw? -I?AAD`gF? -I?AAD`gD_ -I?AAD`cR? -I?AAD_sQ_ -I?AAD`Kp? -I?AAD_kS_ -I?AAD`Io_ -I?AA@r_w? -I?AA@r_p? -I?AA@r_D_ -I?AA@qok? -I?AA@qoR? -I?AA@qoQ_ -I?AA@qoP_ -I?AA@owM? -I?AA@owp? -I?AA@rCo_ -I?AA@qcS_ -I?AEB?oq? -I?AEB?oi? -I?AEB?oY? -I?AEB?oe? -I?AEB?oF? -I?AEB?oI_ -I?AEB?oaO -I?AEB?oaG -I?AEB?WH? -I?AEB?Ww? -I?AEB?Ws? -I?AEB?Wk? -I?AEB?W[? -I?AEB?We? -I?AEB?WU? -I?AEB?WM? -I?AEB?Wp? -I?AEB?Wh? -I?AEB?WX? -I?AEB?WT? -I?AEB?WL? -I?AEB?Wo_ -I?AEB?Wg_ -I?AEB?WW_ -I?AEB?Wc_ -I?AEB?WoO -I?AEB?WgO -I?AEB?WcO -I?AEB?WoG -I?AEB?WgG -I?AEB?WWG -I?AEB?WcG -I?AEB?WSG -I?AEB?WKG -I?AEB?WEG -I?AEB?W`G -I?AEB?WPG -I?AEB?WHG -I?AEB?W_g -I?AEB?WOg -I?AEB?W_W -I?AEB?ww? -I?AEB?ws? -I?AEB?w[? -I?AEB?wp? -I?AEB?wX? -I?AEB?wF? -I?AEB?wo_ -I?AEB?wg_ -I?AEB?wW_ -I?AEB?wP_ -I?AEB?wH_ -I?AEB?woO -I?AEB?wgO -I?AEB?wcO -I?AEB?w`O -I?AEB?wPO -I?AEB?wDO -I?AEB?w_o -I?AEB?wOo -I?AEB?wGo -I?AEB?wCo -I?AEB?w@o -I?AEB?sq? -I?AEB?saO -I?AE@b_Ao -I?AE@aoQO -I?AE@aoAo -I?AE@`oa_ -I?AE@`oaO -I?AE@`oBO -I?AE@`oAo -I?AE@bGWO -I?AE@bGPO -I?AE@`gw? -I?AE@`gs? -I?AE@`gk? -I?AE@`g[? -I?AE@`gF? -I?AE@`gg_ -I?AE@`gW_ -I?AE@`gc_ -I?AE@`gK_ -I?AE@`ga_ -I?AE@`gH_ -I?AE@`gD_ -I?AE@`gB_ -I?AE@`goO -I?AE@`ggO -I?AE@`gcO -I?AE@`gaO -I?AE@`gEO -I?AE@`g`O -I?AE@`gPO -I?AE@`gDO -I?AE@`gBO -I?AE@`g_o -I?AE@`gOo -I?AE@`gGo -I?AE@`gCo -I?AE@`gAo -I?AE@`g@o -I?AE@_ww? -I?AE@_wk? -I?AE@_w[? -I?AE@_wq? -I?AE@_wM? -I?AE@_wp? -I?AE@_wR? -I?AE@_wg_ -I?AE@_woO -I?AE@_wgO -I?AE@_wKO -I?AE@_waO -I?AE@_wQO -I?AE@_w`O -I?AE@_wPO -I?AE@_w_o -I?AE@`caO -I?AE@`cEO -I?AE@`Kw? -I?AE@`Kk? -I?AE@`Kq? -I?AE@`Kg_ -I?AE@`Ka_ -I?AE@`KoO -I?AE@`KgO -I?AE@`KKO -I?AE@`KaO -I?AE@`KPO -I?AE@`K_o -I?AE@_pq? -I?AE@_pa_ -I?AE@`Hw? -I?AE@`Hq? -I?AE@`Hp? -I?AE@`Hg_ -I?AE@`Ha_ -I?AE@`HH_ -I?AE@`HB_ -I?AE@_hs? -I?AE@_hp? -I?AE@_hg_ -I?AE@_hc_ -I?AEAGoq? -I?AEAGoM? -I?AEAGoaG -I?AEAGoIG -I?AEAGww? -I?AEAGwM? -I?AEAGwp? -I?AEAGwo_ -I?AEB`K`_ -I?AEB_kw? -I?AEB_ks? -I?AEB_kp? -I?AEB_kh? -I?AEB_kg_ -I?AEB_kc_ -I?AE@pow? -I?AE@pok? -I?AE@po[? -I?AE@pog_ -I?AE@poW_ -I?AE@poa_ -I?AE@poB_ -I?AE@owM? -I?AE@owp? -I?AE@owg_ -I?AE@pcw? -I?AE@pcp? -I?AE@pcX? -I?AE@pcg_ -I?AEEGwP_ -I?ABBAOq? -I?ABBAOY? -I?ABBAOe? -I?ABBAOF? -I?ABBAOaG -I?ABB?Wc? -I?ABB?WE? -I?ABB?Ww? -I?ABB?W[? -I?ABB?We? -I?ABB?WU? -I?ABB?Wd? -I?ABB?WW_ -I?ABB?WoG -I?ABB?WWG -I?ABB?WcG -I?ABB?WSG -I?ABB?WEG -I?ABB?W`G -I?ABB?WOg -I?ABBAWw? -I?ABBAWs? -I?ABBAW[? -I?ABBAWp? -I?ABBAWX? -I?ABBAWF? -I?ABBAWo_ -I?ABBAWW_ -I?ABBASq? -I?ABBASY? -I?ABA_oY? -I?ABA_ob? -I?ABA_oE_ -I?ABAaGK? -I?ABAaGw? -I?ABAaGk? -I?ABAaG[? -I?ABAaGq? -I?ABAaGi? -I?ABAaGY? -I?ABAaGM? -I?ABAaGp? -I?ABAaGb? -I?ABAaGR? -I?ABAaGJ? -I?ABAaGo_ -I?ABAaGg_ -I?ABAaGc_ -I?ABAaGS_ -I?ABAaGK_ -I?ABAaGa_ -I?ABAaGI_ -I?ABAaGE_ -I?ABAaG`_ -I?ABAaGB_ -I?ABAaG_o -I?ABAaGOo -I?ABAaGGo -I?ABAaGAo -I?ABAaGoG -I?ABAaGgG -I?ABAaG_g -I?ABA_gc? -I?ABA_gE? -I?ABA_gw? -I?ABA_gk? -I?ABA_g[? -I?ABA_ge? -I?ABA_gU? -I?ABA_gd? -I?ABA_go_ -I?ABA_gW_ -I?ABA_gS_ -I?ABA_gE_ -I?ABA_goO -I?ABA_ggO -I?ABA_gWO -I?ABA_gcO -I?ABA_gKO -I?ABA_gaO -I?ABA_gQO -I?ABA_gIO -I?ABA_gEO -I?ABA_g`O -I?ABA_g_o -I?ABA_gOo -I?ABA_gGo -I?ABA_gCo -I?ABA_gAo -I?ABA_g_W -I?ABA_gOW -I?ABA_gCW -I?ABA_g?w -I?ABAaoq? -I?ABAaoa_ -I?ABAaoB_ -I?ABAaoAo -I?ABAagw? -I?ABAags? -I?ABAagk? -I?ABAag[? -I?ABAagq? -I?ABAagY? -I?ABAagp? -I?ABAagX? -I?ABAagT? -I?ABAagF? -I?ABAago_ -I?ABAagg_ -I?ABAagc_ -I?ABAagS_ -I?ABAaga_ -I?ABAagE_ -I?ABAag`_ -I?ABAagD_ -I?ABAagB_ -I?ABAagoO -I?ABAaggO -I?ABAagWO -I?ABAagcO -I?ABAagaO -I?ABAag`O -I?ABAagPO -I?ABAagHO -I?ABAagDO -I?ABAagBO -I?ABAag_o -I?ABAagOo -I?ABAagCo -I?ABAagAo -I?ABAag@o -I?ABA_ww? -I?ABA_wk? -I?ABA_w[? -I?ABA_wY? -I?ABA_wp? -I?ABA_wb? -I?ABA_wo_ -I?ABA_wc_ -I?ABA_wS_ -I?ABA_wK_ -I?ABA_wa_ -I?ABA_w`_ -I?ABA_w_o -I?ABA_wOo -I?ABA_wAo -I?ABAacq? -I?ABAaca_ -I?ABAacAo -I?ABAaKw? -I?ABAaK[? -I?ABAaKq? -I?ABAaKp? -I?ABAaKo_ -I?ABAaKg_ -I?ABAaKc_ -I?ABAaKS_ -I?ABAaKK_ -I?ABAaKa_ -I?ABAaKE_ -I?ABAaK`_ -I?ABAaK_o -I?ABAaKOo -I?ABAaKGo -I?ABAaKAo -I?ABA_qaO -I?ABAaIs? -I?ABAaIoO -I?ABAaIgO -I?ABAaIcO -I?ABAaIaO -I?ABAaI`O -I?ABAaIHO -I?ABAaIDO -I?ABAaIBO -I?ABA_Ys? -I?ABA_Y[? -I?ABA_YgO -I?ABA_YIO -I?ABA_Y`O -I?AB?r_w? -I?AB?r_X? -I?AB?r_F? -I?AB?r_o_ -I?AB?r_W_ -I?AB?r_c_ -I?AB?r_E_ -I?AB?r_`_ -I?AB?r_D_ -I?AB?r_oO -I?AB?r_WO -I?AB?r_EO -I?AB?r_DO -I?AB?r__o -I?AB?r_Co -I?AB?r_@o -I?AB?rOs? -I?AB?rO[? -I?AB?rOT? -I?AB?rOJ? -I?AB?rOo_ -I?AB?rOc_ -I?AB?rOS_ -I?AB?rOa_ -I?AB?rOI_ -I?AB?rOH_ -I?AB?rOB_ -I?AB?rO_o -I?AB?rOGo -I?AB?rO@o -I?AB?pow? -I?AB?po[? -I?AB?poY? -I?AB?poU? -I?AB?poW_ -I?AB?poc_ -I?AB?poa_ -I?AB?poE_ -I?AB?po`_ -I?AB?poWO -I?AB?poSO -I?AB?poaO -I?AB?po`O -I?AB?po_o -I?AB?poOo -I?AB?poCo -I?AB?poAo -I?AB?rCw? -I?AB?rCM? -I?AB?rCo_ -I?AB?rCg_ -I?AB?rCc_ -I?AB?rCK_ -I?AB?rCE_ -I?AB?rC`_ -I?AB?rCoO -I?AB?rCgO -I?AB?rCKO -I?AB?rCEO -I?AB?rC`O -I?AB?rC_o -I?AB?rCGo -I?AB?rCCo -I?AB?rAgO -I?AB?rAcO -I?AB?rAHO -I?AB?rADO -I?AB?pacO -I?AB?paEO -I?AB?pa`O -I?AB?qQoO -I?AB?qQcO -I?AB?qQPO -I?AB?pQgO -I?AB?pQSO -I?AB?pQaO -I?AB?pQIO -I?AB?pQ`O -I?AB?oYoO -I?AB?oYWO -I?AB?oYEO -I?AB?oY`O -I?AB?qEoO -I?AB?qEcO -I?AB?qE`O -I?ABEag[? -I?ABEagX? -I?ABE_kw? -I?ABE_kg_ -I?ABE_kc_ -I?ABE_kE_ -I?ABBbGi? -I?ABBbGh? -I?ABBaSY? -I?ABBaKw? -I?ABBaK[? -I?ABBaKp? -I?ABBaKo_ -I?ABBaKW_ -I?ABBaKa_ -I?ABBaK`_ -I?ABCr_W_ -I?ABCpow? -I?ABCpos? -I?ABCpo[? -I?ABCpoY? -I?ABCpoX? -I?ABCpoo_ -I?ABCpoW_ -I?ABCpoc_ -I?ABCpoa_ -I?ABCpoB_ -I?ABCpcw? -I?ABCpcp? -I?ABCpcX? -I?ABCpco_ -I?ABCpcW_ -I?ABCpcc_ -I?ABCpcE_ -I?ABCpc`_ -I?ABCpcD_ -I?ABCpSX? -I?ABCpSd? -I?ABCpSo_ -I?ABCpSg_ -I?ABCpSa_ -I?ABCpSI_ -I?ABCpS`_ -I?ABCpSP_ -I?ABCpSH_ -I?ABCpSD_ -I?ABCpSB_ -I?ABCo[e? -I?ABCo[o_ -I?ABCo[W_ -I?ABArOc_ -I?ABAqow? -I?ABAqos? -I?ABAqo[? -I?ABAqoY? -I?ABAqoX? -I?ABAqoo_ -I?ABAqog_ -I?ABAqoW_ -I?ABAqoc_ -I?ABAqoa_ -I?ABAqo`_ -I?ABAqoB_ -I?ABAqWU? -I?ABAqWo_ -I?ABAqWg_ -I?ABAqWE_ -I?ABAqW`_ -I?ABAqWH_ -I?ABAoww? -I?ABAow[? -I?ABAowU? -I?ABAow`_ -I?ABAqcw? -I?ABAqc[? -I?ABAqcp? -I?ABAqco_ -I?ABAqcg_ -I?ABAqcW_ -I?ABAqcE_ -I?ABAqc`_ -I?ABAqSp? -I?ABAqSo_ -I?ABAqSg_ -I?ABAqSc_ -I?ABAqSI_ -I?ABAqS`_ -I?ABEC[p? -I?ABCdgw? -I?ABCc[d? -I?ABAegw? -I?ABAcw[? -I?AB?to[? -I?ACJ@Oq? -I?ACJ@OM? -I?ACJ@Ob? -I?ACJ@OaO -I?ACJ@OEO -I?ACJ@OAW -I?ACJ?WW? -I?ACJ?Ww? -I?ACJ?Ws? -I?ACJ?W[? -I?ACJ?Wp? -I?ACJ?W`_ -I?ACJ?WoO -I?ACJ?WWO -I?ACJ?WcO -I?ACJ?WSO -I?ACJ?WEO -I?ACJ?W`O -I?ACJ?W_W -I?ACJ?WOW -I?ACJ@oY? -I?ACJ@ob? -I?ACJ@oaO -I?ACJ@Ww? -I?ACJ@WM? -I?ACJ@Wp? -I?ACJ@Wh? -I?ACJ@Wd? -I?ACJ@W`_ -I?ACJ@WoO -I?ACJ@WgO -I?ACJ@WcO -I?ACJ@WKO -I?ACJ@WEO -I?ACJ@W`O -I?ACJ@Pb? -I?ACJ?Xp? -I?ACJ?X`_ -I?ACJ`ob? -I?ACJ`gp? -I?ACJ`gd? -I?ACJ`g`_ -I?AFCpcX? -I?ABbbGk? -I?ABbaK[? -I?ABeOs[? -I?ABeOsh? -I?ABeOsL? -I?ABeOkp? -I?ABbROk? -I?ABbQW[? -I?ABbPWM? -I?ABbQS[? -I?ABbQSp? -I?BE@_oq? -I?BE@_oi? -I?BE@_gE? -I?BE@_gw? -I?BE@_gs? -I?BE@_gk? -I?BE@_ge? -I?BE@_gM? -I?BE@_gp? -I?BE@_gh? -I?BE@_gd? -I?BE@_goO -I?BE@_ggO -I?BE@_gcO -I?BE@_gaO -I?BE@_gIO -I?BE@_gEO -I?BE@_g`O -I?BE@_g_W -I?BE@_gGW -I?BE@_gCW -I?BE@aoQO -I?BE@_ww? -I?BE@_wk? -I?BE@_wq? -I?BE@_wM? -I?BE@_wp? -I?BE@_wh? -I?BE@_woO -I?BE@_wgO -I?BE@_wKO -I?BE@_waO -I?BE@_w`O -I?BE@_pq? -I?BE@_hs? -I?BE@_hp? -I?BE@oww? -I?BE@owM? -I?BE@owp? -I?BE@owh? -I?BDB?Ww? -I?BDB?Ws? -I?BDB?Wp? -I?BDB?Wh? -I?BDB?WL? -I?BDB?WoG -I?BDB?WcG -I?BDB?WEG -I?BDB?W`G -I?BDB?WHG -I?BDA_oq? -I?BDA_oY? -I?BDA_oJ? -I?BDA_gE? -I?BDA_gw? -I?BDA_gs? -I?BDA_gk? -I?BDA_g[? -I?BDA_ge? -I?BDA_gU? -I?BDA_gp? -I?BDA_gh? -I?BDA_gX? -I?BDA_gL? -I?BDA_gb? -I?BDA_gR? -I?BDA_gJ? -I?BDA_gF? -I?BDA_g`_ -I?BDA_gP_ -I?BDA_gD_ -I?BDA_goO -I?BDA_ggO -I?BDA_gWO -I?BDA_gcO -I?BDA_gKO -I?BDA_gaO -I?BDA_gQO -I?BDA_gIO -I?BDA_gEO -I?BDA_g`O -I?BDA_gPO -I?BDA_gHO -I?BDA_gDO -I?BDA_gBO -I?BDA_g_o -I?BDA_gOo -I?BDA_gGo -I?BDA_gCo -I?BDA_gAo -I?BDA_g@o -I?BDA_g_W -I?BDA_gOW -I?BDA_gCW -I?BDA_g@W -I?BDA_ww? -I?BDA_wk? -I?BDA_wq? -I?BDA_wi? -I?BDA_wp? -I?BDA_wh? -I?BDA_wX? -I?BDA_wL? -I?BDA_wo_ -I?BDA_wW_ -I?BDA_wc_ -I?BDA_wS_ -I?BDA_wK_ -I?BDA_wQ_ -I?BDA_w`_ -I?BDA_wP_ -I?BDA_wH_ -I?BDA_wD_ -I?BDA_wB_ -I?BDA_w_o -I?BDA_wGo -I?BDA_wAo -I?BDA_w@o -I?BDA_sAo -I?BDA_qBO -I?BDA_Ys? -I?BDA_Y[? -I?BDA_Yp? -I?BDA_YT? -I?BDA_YPO -I?BDA_YHO -I?BD?r_L? -I?BD?r_HO -I?BD?pow? -I?BD?pos? -I?BD?po[? -I?BD?poq? -I?BD?poY? -I?BD?poe? -I?BD?poh? -I?BD?poX? -I?BD?pod? -I?BD?poL? -I?BD?poF? -I?BD?po`_ -I?BD?poD_ -I?BD?poB_ -I?BD?pooO -I?BD?poWO -I?BD?pocO -I?BD?poSO -I?BD?poaO -I?BD?po`O -I?BD?poHO -I?BD?poDO -I?BD?poBO -I?BD?po@o -I?BD?pWw? -I?BD?pWs? -I?BD?pWk? -I?BD?pW[? -I?BD?pWe? -I?BD?pWU? -I?BD?pWM? -I?BD?pWh? -I?BD?pWd? -I?BD?pWT? -I?BD?pWF? -I?BD?pWo_ -I?BD?pWc_ -I?BD?pWS_ -I?BD?pWE_ -I?BD?pW`_ -I?BD?pWH_ -I?BD?pWD_ -I?BD?pWoO -I?BD?pWgO -I?BD?pWWO -I?BD?pWcO -I?BD?pWEO -I?BD?pW`O -I?BD?pWPO -I?BD?pWHO -I?BD?pWDO -I?BD?pW_o -I?BD?pWOo -I?BD?pWGo -I?BD?pW@o -I?BD?pcw? -I?BD?pck? -I?BD?pco_ -I?BD?pcE_ -I?BD?pcgO -I?BD?pcCo -I?BD?pSs? -I?BD?pSS_ -I?BD?pSI_ -I?BD?pSE_ -I?BD?pSGo -I?BD?ose? -I?BD?osg_ -I?BD?osQ_ -I?BD?osE_ -I?BD?osgO -I?BD?oscO -I?BD?osOo -I?BD?osAo -I?BD?o[k? -I?BD?o[E_ -I?BD?o[gO -I?BD?o[WO -I?BD?o[EO -I?BD?o[Oo -I?BD?o[Go -I?BD?p`w? -I?BD?p`h? -I?BD?p`X? -I?BD?p``_ -I?BD?p`D_ -I?BD?pPw? -I?BD?pPq? -I?BD?pPp? -I?BD?pPh? -I?BD?pPT? -I?BD?pPJ? -I?BD?pPo_ -I?BD?pPc_ -I?BD?pPS_ -I?BD?pP`_ -I?BD?pPH_ -I?BD?pPB_ -I?BD?oXw? -I?BD?oXh? -I?BD?oXX? -I?BD?oX`_ -I?BD?oXP_ -I?BDApoi? -I?BDApoh? -I?BDApod? -I?BDApoL? -I?BDApog_ -I?BDApoc_ -I?BDApoH_ -I?BDAoww? -I?BDAows? -I?BDAowU? -I?BDAowh? -I?BDAowX? -I?BDAowT? -I?BDAowL? -I?BDAowF? -I?BDAow`_ -I?BDAowD_ -I?BD@hWw? -I?BD@hWi? -I?B@eQo[? -I?B@eQoX? -I?B@eQoL? -I?B@eQoW_ -I?B@eQoK_ -I?B@eQoQ_ -I?B@eQoP_ -I?B@eOww? -I?B@eOwq? -I?B@eOwi? -I?B@eOwp? -I?B@eOwL? -I?B@eOwJ? -I?B@eOw`_ -I?B@eOwB_ -I?B@dRO[? -I?B@dROL? -I?B@dROW_ -I?B@dROK_ -I?B@dROQ_ -I?B@dROH_ -I?B@dRG[? -I?B@dRGW_ -I?B@dRGS_ -I?B@dRGH_ -I?B@dPgs? -I?B@dPgq? -I?B@dPgo_ -I?B@dPWw? -I?B@dPWq? -I?B@dPWi? -I?B@dPWY? -I?B@dPWL? -I?B@dPWJ? -I?B@dPW`_ -I?B@dPWB_ -I?B@eGwM? -I?B@eGwK_ -I?B@dHWk? -I?B@dHW[? -I?B@dHWg_ -I?B@dHWK_ -I?B@`jGw? -I?B@`jGo_ -I?B@`jGK_ -I?B@cZ_W_ -I?B@cXow? -I?B@cXok? -I?B@cXo[? -I?B@cXoM? -I?B@cXoo_ -I?B@cXoK_ -I?B@cXgq? -I?B@cXgo_ -I?B@`ZOk? -I?B@`ZOK_ -I?B@`ZGq? -I?B@`ZGo_ -I?B@`Yga_ -I?B@`YWk? -I?B@`YWi? -I?B@`YWe? -I?B@`YWM? -I?B@`YWK_ -I?B@`WYM? -I?BFE_wL? -I?BDf?[[? -I?BDd`K[? -I?BDeOw[? -I?BDeOwL? -I?BDeOkY? -I?BDdPW[? -I?B@t`gs? -I?B@t`ge? -I?B@t`gd? -I?B@pr_s? -I?B@pr_e? -I?B@pr_F? -I?BEL_w[? -I?BEHowM? -I?BDM_w[? -I?BDKpo[? -I?BeeOwM? -I?Bcu`gM? -I?`@?aGW? -I?`@?aGP? -I?`@?aG[? -I?`@?aGq? -I?`@?aGp? -I?`@?aGX? -I?`@?aGaG -I?`@?b_w? -I?`@?b_s? -I?`@?b_Y? -I?`@?b_F? -I?`@?b_B_ -I?`@?b_EO -I?`@?bGw? -I?`@?bGp? -I?`@?bGK_ -I?`@?bGH_ -I?`@C_WW? -I?`@C_Ws? -I?`@C_Wq? -I?`@C_We? -I?`@C_WX? -I?`@C_WcO -I?`@Cb_WO -I?`@Cb_HO -I?`@CbOWO -I?`@CbOPO -I?`@C`ow? -I?`@C`os? -I?`@C`o[? -I?`@C`oY? -I?`@C`oh? -I?`@C`od? -I?`@C`oL? -I?`@C`ob? -I?`@C`o`_ -I?`@C`oB_ -I?`@C`ooO -I?`@C`oWO -I?`@C`oQO -I?`@C`o`O -I?`@C`oPO -I?`@C`oHO -I?`@C`oBO -I?`@C`o@o -I?`@CbGWO -I?`@CbGQO -I?`@CaWEO -I?`@C`Ww? -I?`@C`Ws? -I?`@C`Wk? -I?`@C`W[? -I?`@C`We? -I?`@C`WU? -I?`@C`Wp? -I?`@C`Wh? -I?`@C`Wd? -I?`@C`WF? -I?`@C`Wg_ -I?`@C`WoO -I?`@C`WgO -I?`@C`W`O -I?`@CbCWO -I?`@CbCSO -I?`@CbCPO -I?`@C`cw? -I?`@C`cs? -I?`@C`ck? -I?`@C`c[? -I?`@C`cq? -I?`@C`ce? -I?`@C`cp? -I?`@C`co_ -I?`@C`cW_ -I?`@C`cc_ -I?`@C`cE_ -I?`@C`coO -I?`@C`cgO -I?`@C`c_o -I?`@C`Sw? -I?`@C`Ss? -I?`@C`Sk? -I?`@C`S[? -I?`@C`Sq? -I?`@C`Si? -I?`@C`SU? -I?`@C`Sp? -I?`@C`Sg_ -I?`@C`SI_ -I?`@C`SoO -I?`@C`SgO -I?`@C`SWO -I?`@C`SSO -I?`@C`SQO -I?`@C`SIO -I?`@C`SPO -I?`@C`SGo -I?`@CPOK? -I?`@CPOD? -I?`@CPOG_ -I?`@CPOw? -I?`@CPOs? -I?`@CPOk? -I?`@CPO[? -I?`@CPOq? -I?`@CPOi? -I?`@CPOe? -I?`@CPOp? -I?`@CPOX? -I?`@CPOd? -I?`@CPOT? -I?`@CPOL? -I?`@CPOg_ -I?`@CPOW_ -I?`@CPOK_ -I?`@CPOaO -I?`@CPOoG -I?`@CPOWG -I?`@CPCs? -I?`@CPCe? -I?`@CPCK_ -I?`@CPow? -I?`@CPos? -I?`@CPoq? -I?`@CPoe? -I?`@CPop? -I?`@CPoh? -I?`@CPob? -I?`@CPoD_ -I?`@CPoaO -I?`@CPcs? -I?`@CPck? -I?`@CPc[? -I?`@CPce? -I?`@CPSw? -I?`@CPSs? -I?`@CPSq? -I?`@CPSi? -I?`@CPSe? -I?`@CPSp? -I?`@CPSg_ -I?`@CPSK_ -I?`@CPSaO -I?`@Eao[? -I?`@EagY? -I?`@EagX? -I?`@E`gh? -I?`@E`gg_ -I?`@E_ww? -I?`@E_ws? -I?`@E_wk? -I?`@E_w[? -I?`@E_wq? -I?`@E_wh? -I?`@E_wJ? -I?`@EaKR? -I?`@E_kw? -I?`@E_kY? -I?`@E_kU? -I?`@E_kJ? -I?`@E_ko_ -I?`@E_kQ_ -I?`@E_kB_ -I?`@E_[w? -I?`@E_[s? -I?`@E_[q? -I?`@E_[Y? -I?`@E_[U? -I?`@EaaX? -I?`@EaaW_ -I?`@E_qw? -I?`@E_qs? -I?`@E_qk? -I?`@E_qq? -I?`@E_qi? -I?`@E_qY? -I?`@E_qg_ -I?`@E_iw? -I?`@E_iq? -I?`@E_ii? -I?`@E_iY? -I?`@E_iU? -I?`@E_iM? -I?`@E_ih? -I?`@E_iJ? -I?`@E_ig_ -I?`@Cr_Y? -I?`@CrCR? -I?`@Cpcw? -I?`@Cpcs? -I?`@Cpck? -I?`@Cpcq? -I?`@Cpci? -I?`@Cpco_ -I?`@Cpcg_ -I?`@CpcW_ -I?`@CpSw? -I?`@CpSs? -I?`@CpSq? -I?`DAao[? -I?`DAaoW_ -I?`DAaoS_ -I?`DAaoQ_ -I?`DAaoP_ -I?`DAaoD_ -I?`DAaoWO -I?`DAaoQO -I?`DAaoHO -I?`DAaoBO -I?`DAaoOo -I?`DAaoCo -I?`DAao@o -I?`DAag[? -I?`DAagT? -I?`DAagI_ -I?`DAagWO -I?`DAagQO -I?`DA`gk? -I?`DA`gi? -I?`DA`gd? -I?`DA`gc_ -I?`DA`ggO -I?`DA`gcO -I?`DA`gaO -I?`DA`gIO -I?`DA`g`O -I?`DA`g_o -I?`DA_ww? -I?`DA_ws? -I?`DA_wk? -I?`DA_w[? -I?`DA_wi? -I?`DA_wY? -I?`DA_wM? -I?`DA_wp? -I?`DA_wh? -I?`DA_wd? -I?`DA_wL? -I?`DA_wJ? -I?`DA_wo_ -I?`DA_wc_ -I?`DA_w`_ -I?`DA_woO -I?`DA_wgO -I?`DA_wWO -I?`DA_wcO -I?`DA_wKO -I?`DA_waO -I?`DA_wIO -I?`DA_w`O -I?`DA_wHO -I?`DA_w_o -I?`DAaQWO -I?`D@_Ww? -I?`D@_Ws? -I?`D@_Wk? -I?`D@_Wi? -I?`D@_Wg_ -I?`D@_Wc_ -I?`D@bO[? -I?`D@bOW_ -I?`D@bOK_ -I?`D@bOD_ -I?`D@bOWO -I?`D@bOQO -I?`D@bOIO -I?`D@bOHO -I?`D@bOBO -I?`D@bOOo -I?`D@bOCo -I?`D@bO@o -I?`D@`od? -I?`D@`oo_ -I?`D@`oc_ -I?`D@`ooO -I?`D@`ocO -I?`D@`oQO -I?`D@`o`O -I?`D@`o_o -I?`D@`oOo -I?`D@bG[? -I?`D@bGL? -I?`D@bGI_ -I?`D@bGWO -I?`D@bGSO -I?`D@bGIO -I?`D@bGHO -I?`D@bGDO -I?`D@bGOo -I?`D@bG@o -I?`D@`gs? -I?`D@`gq? -I?`D@`gd? -I?`D@`go_ -I?`D@`gQ_ -I?`D@`gE_ -I?`D@`goO -I?`D@`gQO -I?`D@aW[? -I?`D@aWX? -I?`D@aWK_ -I?`D@aWI_ -I?`D@aWE_ -I?`D@aWWO -I?`D@aWIO -I?`D@`Ww? -I?`D@`Ws? -I?`D@`Wk? -I?`D@`W[? -I?`D@`WY? -I?`D@`We? -I?`D@`WU? -I?`D@`WM? -I?`D@`Wp? -I?`D@`Wh? -I?`D@`WX? -I?`D@`Wd? -I?`D@`WL? -I?`D@`WJ? -I?`D@`Wo_ -I?`D@`Wg_ -I?`D@`WW_ -I?`D@`Wc_ -I?`D@`WK_ -I?`D@`W`_ -I?`D@`WH_ -I?`D@`WoO -I?`D@`WgO -I?`D@`W`O -I?`D@_ws? -I?`D@_we? -I?`D@_wp? -I?`D@_wc_ -I?`D@_wQ_ -I?`D@_wE_ -I?`D@bC[? -I?`D@bCY? -I?`D@bCW_ -I?`D@bCS_ -I?`D@bCWO -I?`D@bCSO -I?`D@bCQO -I?`D@bCIO -I?`D@bCPO -I?`D@bCOo -I?`D@`cs? -I?`D@`co_ -I?`D@`cS_ -I?`D@`cP_ -I?`D@`coO -I?`D@`cQO -I?`D@`c_o -I?`D@`cOo -I?`D@`Sw? -I?`D@`Ss? -I?`D@`Sk? -I?`D@`S[? -I?`D@`Sq? -I?`D@`Si? -I?`D@`SY? -I?`D@`SU? -I?`D@`SM? -I?`D@`Sp? -I?`D@`SX? -I?`D@`So_ -I?`D@`Sg_ -I?`D@`SW_ -I?`D@`Sc_ -I?`D@`SS_ -I?`D@`SK_ -I?`D@`SQ_ -I?`D@`SI_ -I?`D@`SE_ -I?`D@`SP_ -I?`D@`SoO -I?`D@`SgO -I?`D@`SWO -I?`D@`SSO -I?`D@`SaO -I?`D@`SQO -I?`D@`SIO -I?`D@`SPO -I?`D@`S_o -I?`D@`SOo -I?`D@`SGo -I?`D@`SAo -I?`D@bAWO -I?`D@`aoO -I?`D@POD? -I?`D@POw? -I?`D@POs? -I?`D@POk? -I?`D@POq? -I?`D@POi? -I?`D@POe? -I?`D@POp? -I?`D@POd? -I?`D@POT? -I?`D@POg_ -I?`D@POoG -I?`D@PSw? -I?`D@PSs? -I?`D@PSk? -I?`D@PSq? -I?`D@PSi? -I?`D@PSp? -I?`D@PSg_ -I?`DF?[J? -I?`DF?[P_ -I?`DF?[H_ -I?`DF?[B_ -I?`DE_w[? -I?`DE_wW_ -I?`DE_wS_ -I?`DE_wQ_ -I?`DE_wI_ -I?`DE_wE_ -I?`DE_s[? -I?`DE_sT? -I?`DE_sL? -I?`DE_sJ? -I?`DE_sK_ -I?`DE_sP_ -I?`DE_sH_ -I?`DE_sD_ -I?`DD`gQ_ -I?`DD`W[? -I?`DD_wE_ -I?`DD`S[? -I?`DD`SS_ -I?`DD`SP_ -I?`DB`We? -I?`DB`WM? -I?`DB`Wh? -I?`DB`Wc_ -I?`DB_sq? -I?`DB_so_ -I?`DB`Ki? -I?`DB`KI_ -I?`DB`KE_ -I?`DB`K`_ -I?`DB`KH_ -I?`DB_kq? -I?`DB_kd? -I?`DB_ko_ -I?`DB_ka_ -I?`DB_kQ_ -I?`DB_k`_ -I?`DB_kP_ -I?`DB_kB_ -I?`DB_[w? -I?`DB_[i? -I?`DB_[Y? -I?`DB_[U? -I?`DB_[M? -I?`DB_[p? -I?`DB_[h? -I?`DB_[d? -I?`DB_[b? -I?`DB_[o_ -I?`DB_[c_ -I?`DEOwW_ -I?`DEOsY? -I?`DEOsR? -I?`DEOsW_ -I?`DEOsQ_ -I?`DDPoQ_ -I?`DDPWW_ -I?`DDPSX? -I?`DDPSI_ -I?`D@poo_ -I?`D@poc_ -I?`D@poa_ -I?`D@poE_ -I?`D@pgo_ -I?`D@pcs? -I?`D@pcq? -I?`D@pcR? -I?`D@pco_ -I?`D@pca_ -I?`D@pcQ_ -I?`D@pSw? -I?`D@pSs? -I?`D@pS[? -I?`D@pSY? -I?`D@pSM? -I?`D@pSp? -I?`D@pSX? -I?`D@pSo_ -I?`D@pSc_ -I?`DEGwY? -I?`DEGwS_ -I?`DEGwQ_ -I?`DEGwI_ -I?`DEGwP_ -I?`DAhoi? -I?`DAho`_ -I?`DAhgi? -I?`DAhgJ? -I?`DAhgg_ -I?`DAhg`_ -I?`DAhcg_ -I?`DAhSc_ -I?`DDDWY? -I?`DCdo[? -I?`DCcwM? -I?`@`b_s? -I?`@`b_U? -I?`@`b_F? -I?`@`b_o_ -I?`@`b__o -I?`@`b_Co -I?`@`bGw? -I?`@`bGk? -I?`@`bG[? -I?`@`bGi? -I?`@`bGp? -I?`@`bGh? -I?`@`bGL? -I?`@`bGg_ -I?`@`bGW_ -I?`@`bGK_ -I?`@`ags? -I?`@`age? -I?`@`agT? -I?`@`ago_ -I?`@`aga_ -I?`@`ag_o -I?`@`agCo -I?`@f@Wk? -I?`@f@Wg_ -I?`@f@W`_ -I?`@f?kU? -I?`@f?ko_ -I?`@f?kQ_ -I?`@f?[w? -I?`@f?[s? -I?`@f?[k? -I?`@f?[i? -I?`@f?[Y? -I?`@f?[o_ -I?`@f?[g_ -I?`@f?[c_ -I?`@f?[Q_ -I?`@d`oo_ -I?`@d`gU? -I?`@d`gF? -I?`@d`gQ_ -I?`@d`gE_ -I?`@dbC[? -I?`@dbCK_ -I?`@dbCQ_ -I?`@d`cT? -I?`@d`cS_ -I?`@d`Kw? -I?`@d`Kk? -I?`@d`K[? -I?`@d`Kq? -I?`@d`Ki? -I?`@d`KY? -I?`@d`KM? -I?`@d`Kp? -I?`@d`KX? -I?`@d`Ko_ -I?`@d`Kg_ -I?`@d`KW_ -I?`@d`KK_ -I?`@d`Ka_ -I?`@d`KQ_ -I?`@d`KI_ -I?`@d`KP_ -I?`@eQoM? -I?`@eQoK_ -I?`@eQoP_ -I?`@eQc[? -I?`@eQcR? -I?`@eQcW_ -I?`@eQcS_ -I?`@eQcD_ -I?`@dR_Q_ -I?`@dRO[? -I?`@dROM? -I?`@dROL? -I?`@dROE_ -I?`@dRGW_ -I?`@dRC[? -I?`@dRCR? -I?`@dRCW_ -I?`@dRCS_ -I?`@dPcs? -I?`@dPcq? -I?`@dPco_ -I?`@dPSw? -I?`@dPSk? -I?`@dPSe? -I?`@dPSo_ -I?`@dPSg_ -I?`@dPSW_ -I?`@dPSa_ -I?`@eCwk? -I?`@eEKR? -I?`@eCki? -I?`@eCkY? -I?`@eCkJ? -I?`@eCkF? -I?`@dDos? -I?`@dDgq? -I?`@dDWq? -I?`@dDWi? -I?`@dDWU? -I?`@dDWM? -I?`@dCwe? -I?`@dDSw? -I?`@dDS[? -I?`@dDSp? -I?`@dDKw? -I?`@dDKq? -I?`@dDKi? -I?`@dDKY? -I?`@dDKU? -I?`@dDKX? -I?`@`f_s? -I?`@`fGp? -I?`@`ege? -I?`@cTok? -I?`@cVCR? -I?`@cTcw? -I?`@cTcp? -I?`CR?oD? -I?`CR?ow? -I?`CR?os? -I?`CR?ok? -I?`CR?o[? -I?`CR?oq? -I?`CR?oi? -I?`CR?oe? -I?`CR?op? -I?`CR?oh? -I?`CR?oX? -I?`CR?od? -I?`CR?oT? -I?`CR?oL? -I?`CR?oa_ -I?`CR?ooO -I?`CR?ogO -I?`CR?oWO -I?`CR?oSO -I?`CR?oKO -I?`CR?ooG -I?`CR?oWG -I?`CR?oSG -I?`CR?cs? -I?`CR?c[? -I?`CR?ce? -I?`CR@oi? -I?`CR@oe? -I?`CR@oa_ -I?`CRAWWO -I?`CRAWOo -I?`CR@ce? -I?`CR?sw? -I?`CR?ss? -I?`CR?s[? -I?`CR?sq? -I?`CR?si? -I?`CR?se? -I?`CR?sp? -I?`CR?sh? -I?`CR?sa_ -I?`CR?soO -I?`CR?sSO -I?`CR@Pi? -I?`CR@Pa_ -I?`CP_ow? -I?`CP_ok? -I?`CP_o[? -I?`CP_oq? -I?`CP_oi? -I?`CP_op? -I?`CP_oa_ -I?`CP_ogO -I?`CP_oKO -I?`CP`ow? -I?`CP`ok? -I?`CP`o[? -I?`CP`oq? -I?`CP`oi? -I?`CP`op? -I?`CP`oL? -I?`CP`ob? -I?`CP`oa_ -I?`CP`ooO -I?`CP`ogO -I?`CP`oWO -I?`CP`oKO -I?`CP`oaO -I?`CP`o`O -I?`CP`oPO -I?`CPbCY? -I?`CPbCR? -I?`CPbCQO -I?`CP`cw? -I?`CP`cs? -I?`CP`ck? -I?`CP`c[? -I?`CP`cq? -I?`CP`ci? -I?`CP`ce? -I?`CP`cp? -I?`CP`ca_ -I?`CP`coO -I?`CP`cgO -I?`CP`cWO -I?`CP`ccO -I?`CP`cSO -I?`CP`caO -I?`CP`cPO -I?`CP``s? -I?`CP``q? -I?`CP``i? -I?`CP``e? -I?`CP``b? -I?`CP``a_ -I?`CP_pq? -I?`CP_pi? -I?`CP_pp? -I?`CP_pa_ -I?`CP`Dw? -I?`CP`Dq? -I?`CP`Di? -I?`CP`Da_ -I?`CQGoK? -I?`CQGow? -I?`CQGok? -I?`CQGoq? -I?`CQGoi? -I?`CQGoa_ -I?`CQGooG -I?`CQGogG -I?`CQGoKG -I?`CQGoaG -I?`CR`oi? -I?`CR`oa_ -I?`CR_sw? -I?`CR_s[? -I?`CR_sq? -I?`CR_si? -I?`CR_sa_ -I?`CRHoi? -I?`CRHob? -I?`CRHoa_ -I?`FBOsb? -I?`FAqcJ? -I?`FAosh? -I?`Df?[L? -I?`Dd`K[? -I?`Db_ks? -I?`Db_kU? -I?`Db_kF? -I?`DeOs[? -I?`DeOkX? -I?`D`pcs? -I?`D`pcp? -I?`DeGwM? -I?`EV?sJ? -I?`DU`SF? -I?`DU_sJ? -I?`DU_kX? -I?`DT`S[? -I?`DT`SY? -I?`DUOsX? -I?`DTPSX? -I?bB@_Ww? -I?bB@_Ws? -I?bB@_Wq? -I?bB@_Wi? -I?bB@_Wp? -I?bB@_Wh? -I?bB@_Wc_ -I?bB@aW[? -I?bB@aWY? -I?bB@aWU? -I?bB@aWL? -I?bB@aWR? -I?bB@aWF? -I?bB@aWW_ -I?bB@aWS_ -I?bB@aWK_ -I?bB@aWQ_ -I?bB@aWI_ -I?bB@aWP_ -I?bB@aWWO -I?bB@aWSO -I?bB@`Wk? -I?bB@`Wi? -I?bB@`Wd? -I?bB@`WL? -I?bB@`WJ? -I?bB@`WF? -I?bB@`Wg_ -I?bB@`Wc_ -I?bB@`WK_ -I?bB@`WI_ -I?bB@`WE_ -I?bB@`WH_ -I?bB@`WgO -I?bB@`WIO -I?bB@_ws? -I?bB@_wq? -I?bB@_wU? -I?bB@_wp? -I?bB@_wd? -I?bB@_wT? -I?bB@_wR? -I?bB@_wF? -I?bB@_wc_ -I?bB@_wS_ -I?bB@_wD_ -I?bB@_wB_ -I?bB@_wcO -I?bB@aSS_ -I?bB@aSK_ -I?bB@aSGo -I?bB@aSAo -I?bB@`SK_ -I?bB@`SgO -I?bB@`SKO -I?bB@`SIO -I?bB@`Qk? -I?bB@`QL? -I?bB@`QaO -I?bBDHWI_ -I?bBBIWI_ -I?b@f@WL? -I?b@f@WJ? -I?b@f@WF? -I?b@f@WH_ -I?b@f?wS_ -I?b@f?[[? -I?b@d`gS_ -I?b@d`I[? -I?b@b_wQ_ -I?b@b_w`_ -I?b@ePoL? -I?b@ePoJ? -I?b@ePoB_ -I?b@eOw[? -I?b@eOwX? -I?b@eOwP_ -I?b@bPoF? -I?b@dHW[? -I?b@dHWU? -I?b@bDWh? -I?b@bDWJ? -I?b@bCwq? -I?b@bCwe? -I?b@bCwU? -I?b@bCwp? -I?b@bCwd? -I?b@bCwR? -I?b@bC[k? -I?b@`fG[? -I?b@`fGR? -I?b@`dgU? -I?b@`dgd? -I?b@aToJ? -I?bAP_ow? -I?bAP_ok? -I?bAP_oq? -I?bAP_oi? -I?bAP_op? -I?bAP_ogO -I?bAP_oKO -I?bAP_pq? -I?bAP_pp? -I?bFB_wF? -I?bEHow[? -I?`bCaW[? -I?`bCaWX? -I?`bCaWT? -I?`bCaWR? -I?`bCaWEO -I?`bC`Wk? -I?`bC`We? -I?`bC`WM? -I?`bC`Wd? -I?`bC`Wb? -I?`bC`WF? -I?`bC`W`_ -I?`bC`WH_ -I?`bC`WD_ -I?`bC`WgO -I?`bC`W`O -I?`bCqW[? -I?`bCqWX? -I?`bCqWT? -I?`af?wd? -I?`af?wF? -I?`af?w`_ -I?`af?wB_ -I?`ad_wb? -I?`ad_w`_ -I?`abagd? -I?`abaga_ -I?`abag`_ -I?`aeQoM? -I?`aeQoF? -I?`adQoF? -I?`adQoQ_ -I?`adQW[? -I?`adQWX? -I?`adQWT? -I?`adQWL? -I?`adQWP_ -I?`aeGwk? -I?`aeGwg_ -I?`adIW[? -I?`adHWk? -I?`adHWg_ -I?`adGws? -I?`adGwq? -I?`adGwe? -I?`adGwU? -I?`adGwo_ -I?`adGwc_ -I?`adGwQ_ -I?`adGYs? -I?`acgwg_ -I?`acgiw? -I?`aaigk? -I?`aaigc_ -I?`a`jGk? -I?`a`jGe? -I?`a`jGg_ -I?`a`jGK_ -I?`a`igs? -I?`a`igo_ -I?`a`iIs? -I?`a`iI[? -I?`acYoU? -I?`bfAWF? -I?`cu`oJ? -I?`cspoX? -I?`bM_we? -I?`cm`gM? -I?`cmPoM? -I?`amQoM? -I?`c]`oM? -I?aJBAW[? -I?aJBAWX? -I?aJBAWW_ -I?aJBAWP_ -I?aJA_ow? -I?aJA_o[? -I?aJA_oq? -I?aJA_ob? -I?aJA_oo_ -I?aJA_oW_ -I?aJA_oc_ -I?aJA_oS_ -I?aJAaoY? -I?aJAaoM? -I?aJAaoR? -I?aJAaoJ? -I?aJAaoS_ -I?aJAaoK_ -I?aJAaoQ_ -I?aJAaoI_ -I?aJAaoE_ -I?aJAaoB_ -I?aJAaoOo -I?aJAaoAo -I?aJA`ok? -I?aJA`oi? -I?aJA`ob? -I?aJA`oc_ -I?aJAagS_ -I?aJAagOo -I?aJAagCo -I?aJAaKOo -I?aJA`Qe? -I?aJA`Qb? -I?aJA_qs? -I?aJA_q[? -I?aJA_qq? -I?aJA_qi? -I?aJA_qb? -I?aJA_qWO -I?aJA_qaO -I?aJB`oe? -I?aJB`ob? -I?aJEOsW_ -I?aJEOqX? -I?aJCpoX? -I?aJCpoT? -I?aJCpoD_ -I?aJCXoW_ -I?aJAdoi? -I?aKZ`o[? -ICOcaOcw? -ICOcaOcs? -ICOcaOcc_ -ICOcaQoY? -ICOcaQoR? -ICOcaQoQ_ -ICOcaQoQO -ICOcaQc[? -ICOcaQcY? -ICOcaQcX? -ICOcaQcL? -ICOcaQcQO -ICOcaQQQO -ICOce_kJ? -ICOce_kW_ -ICOce_kI_ -ICOcePcM? -ICOcePcL? -ICOcePcJ? -ICOcbPce? -ICOcbPcc_ -ICOcbPKk? -ICOfBaKF? -ICOf@pSb? -ICOef?kF? -ICOedPKL? -ICOedO[X? -ICQR@QSY? -ICQR@QSW_ -ICQRD_kQ_ -ICQRD_iR? -ICQRChgI_ diff --git a/tools/nauty25r9_mac/testg.c b/tools/nauty25r9_mac/testg.c deleted file mode 100644 index d061878..0000000 --- a/tools/nauty25r9_mac/testg.c +++ /dev/null @@ -1,935 +0,0 @@ -/* testg.c : Find properties of graphs. This is the source file for - both pickg (select by property) and countg (count by property). - Version of Nov 10, 2009. */ -/* TODO - write a header if input has one */ -/* TODO - USERDEF should be long, not int */ -/* TODO - Cast pointers might be too big for long */ - -#define USAGE \ - "[pickg|countg] [-fp#:#q -V] [--keys] [-constraints -v] [ifile [ofile]]" - -#define HELPTEXT \ -" countg : Count graphs according to their properties.\n\ - pickg : Select graphs according to their properties.\n\ -\n\ - ifile, ofile : Input and output files.\n\ - '-' and missing names imply stdin and stdout.\n\ -\n\ - Miscellaneous switches:\n\ - -p# -p#:# Specify range of input lines (first is 1)\n\ - -f With -p, assume input lines of fixed length\n\ - (only used with a file in graph6 format)\n\ - -v Negate all constraints\n\ - -V List properties of every input matching constraints.\n\ - -q Suppress informative output.\n\ -\n\ - Constraints:\n\ - Numerical constraints (shown here with following #) can take\n\ - a single integer value, or a range like #:#, #:, or :#. Each\n\ - can also be preceded by '~', which negates it. (For example,\n\ - -~D2:4 will match any maximum degree which is _not_ 2, 3, or 4.)\n\ - Constraints are applied to all input graphs, and only those\n\ - which match all constraints are counted or selected.\n\ -\n\ - -n# number of vertices -e# number of edges\n\ - -d# minimum degree -D# maximum degree\n\ - -m# vertices of min degree -M# vertices of max degree\n\ - -r regular -b bipartite\n\ - -z# radius -Z# diameter\n\ - -g# girth (0=acyclic) -Y# total number of cycles\n\ - -T# number of triangles -K# number of maximal independent sets\n\ - -H# number of induced cycles\n\ - -E Eulerian (all degrees are even, connectivity not required)\n\ - -a# group size -o# orbits -F# fixed points -t vertex-transitive\n\ - -c# connectivity (only implemented for 0,1,2).\n\ - -i# min common nbrs of adjacent vertices; -I# maximum\n\ - -j# min common nbrs of non-adjacent vertices; -J# maximum\n\ -\n\ - Sort keys:\n\ - Counts are made for all graphs passing the constraints. Counts\n\ - are given separately for each combination of values occuring for\n\ - the properties listed as sort keys. A sort key is introduced by\n\ - '--' and uses one of the letters known as constraints. These can\n\ - be combined: --n --e --r is the same as --ne --r and --ner.\n\ - The order of sort keys is significant.\n" - - -#include "gtools.h" -#include "gutils.h" - -/* -How to add a new property: - - 1. Add entries to constraint[], following the examples there. - If several things are computed at the same time, link them - together such as for z and Z. It doesn't matter which is - first, provided the prereq field points to the first one. - - 2. Add code to compute() to compute the value(s) of the parameter. - Probably this means calling an external procedure then setting - some VAL() and COMPUTED() values. - - 3. Update HELPTEXT. - -External user-defined parameters: - A general integer-valued parameter can be compiled into this program - if USERDEF is defined as the function name at compile time. In this - case the parameter is selected using the letter 'Q'. The name of the - parameter is "userdef" unless USERDEFNAME is defined. The function - is called with the parameters (graph *g, int m, int n) and must return - an integer value. -*/ - -#ifdef USERDEF -int USERDEF(graph*,int,int); -#endif -#ifndef USERDEFNAME -#define USERDEFNAME "userdef" -#endif - -/**********************************************************************/ - -#define BOOLTYPE 0 -#define INTTYPE 1 -#define GROUPSIZE 2 -#define INTVECTOR 3 - -#undef CMASK -#define CMASK(i) (1L << (i)) - -static struct constraint_st /* Table of Constraints */ -{ - char symbol; - int needed; /* 1 = sortkey, 2 = constraint; 3 = both */ - boolean computed; - boolean inverse; - unsigned long prereq; /* Must be earlier, must be <= bits in long */ - long lo,hi; - char *id; - int valtype; - long val; /* Might be a cast pointer */ -} constraint[] = { -#define I_n 0 - {'n',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"n",INTTYPE,0}, /* always known */ -#define I_e 1 - {'e',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"e",INTTYPE,0}, -#define I_d 2 - {'d',0,FALSE,FALSE,CMASK(I_e),-NOLIMIT,NOLIMIT,"mindeg",INTTYPE,0}, -#define I_D 3 - {'D',0,FALSE,FALSE,CMASK(I_e),-NOLIMIT,NOLIMIT,"maxdeg",INTTYPE,0}, -#define I_E 4 - {'E',0,FALSE,FALSE,CMASK(I_e),-NOLIMIT,NOLIMIT,"eulerian",BOOLTYPE,0}, -#define I_r 5 - {'r',0,FALSE,FALSE,CMASK(I_e),-NOLIMIT,NOLIMIT,"regular",BOOLTYPE,0}, -#define I_b 6 - {'b',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"bipartite",BOOLTYPE,0}, -#define I_z 7 - {'z',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"radius",INTTYPE,0}, -#define I_Z 8 - {'Z',0,FALSE,FALSE,CMASK(I_z),-NOLIMIT,NOLIMIT,"diameter",INTTYPE,0}, -#define I_a 9 - {'a',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"groupsize",GROUPSIZE,0}, -#define I_o 10 - {'o',0,FALSE,FALSE,CMASK(I_a),-NOLIMIT,NOLIMIT,"orbits",INTTYPE,0}, -#define I_t 11 - {'t',0,FALSE,FALSE,CMASK(I_o),-NOLIMIT,NOLIMIT,"transitive",BOOLTYPE,0}, -#define I_c 12 - {'c',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"connectivity",INTTYPE,0}, -#define I_F 13 - {'F',0,FALSE,FALSE,CMASK(I_a),-NOLIMIT,NOLIMIT,"fixedpts",INTTYPE,0}, -#define I_g 14 - {'g',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"girth",INTTYPE,0}, -#define I_Y 15 - {'Y',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"cycles",INTTYPE,0}, -#define I_i 16 - {'i',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"minadjcn",INTTYPE,0}, -#define I_I 17 - {'I',0,FALSE,FALSE,CMASK(I_i),-NOLIMIT,NOLIMIT,"maxadjcn",INTTYPE,0}, -#define I_j 18 - {'j',0,FALSE,FALSE,CMASK(I_i),-NOLIMIT,NOLIMIT,"minnoncn",INTTYPE,0}, -#define I_J 19 - {'J',0,FALSE,FALSE,CMASK(I_i),-NOLIMIT,NOLIMIT,"maxnoncn",INTTYPE,0}, -#define I_T 20 - {'T',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"triang",INTTYPE,0}, -#define I_K 21 - {'K',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"maxlcliq",INTTYPE,0}, -#define I_H 22 - {'H',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,"induced cycles",INTTYPE,0}, -#define I_m 23 - {'m',0,FALSE,FALSE,CMASK(I_e),-NOLIMIT,NOLIMIT,"minverts",INTTYPE,0}, -#define I_M 24 - {'M',0,FALSE,FALSE,CMASK(I_e),-NOLIMIT,NOLIMIT,"maxverts",INTTYPE,0}, -#define I_Q 25 -#ifdef USERDEF - {'Q',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,USERDEFNAME,INTTYPE,0} -#else - {' ',0,FALSE,FALSE,0,-NOLIMIT,NOLIMIT,USERDEFNAME,INTTYPE,0} -#endif -}; - -#define NUMCONSTRAINTS (sizeof(constraint)/sizeof(struct constraint_st)) -#define SYMBOL(i) (constraint[i].symbol) -#define ISNEEDED(i) (constraint[i].needed > 0) -#define NEEDED(i) (constraint[i].needed) -#define ISKEY(i) ((constraint[i].needed & 1) != 0) -#define ISCONSTRAINT(i) (constraint[i].needed > 1) -#define INVERSE(i) (constraint[i].inverse) -#define COMPUTED(i) (constraint[i].computed) -#define PREREQ(i) (constraint[i].prereq) -#define LO(i) (constraint[i].lo) -#define HI(i) (constraint[i].hi) -#define VAL(i) (constraint[i].val) -#define VALTYPE(i) (constraint[i].valtype) -#define ID(i) (constraint[i].id) - -#define INBOUNDS0(i) ((LO(i) == -NOLIMIT || VAL(i) >= LO(i)) \ - && (HI(i) == NOLIMIT || VAL(i) <= HI(i))) -#define INBOUNDS(i) (VALTYPE(i) == GROUPSIZE \ - ? group_in_range((group_node*)VAL(i),LO(i),HI(i)) \ - : INBOUNDS0(i)) - -static boolean docount,dofilter; - -#define MAXKEYS 20 /* Maximum number of keys to sort by */ - -/* splay_st is the generic structure of a splay tree node. The - data[] field has varying lengths according to need. This program - uses two splay trees: one for counts and one for large data items. -*/ - -typedef struct splay_st -{ - struct splay_st *left,*right,*parent; - long data[1]; -} splay_node; - -typedef struct node_st /* variant for count tree */ -{ - struct splay_st *left,*right,*parent; - unsigned long count; - long val[MAXKEYS]; -} count_node; - -typedef struct value_st /* variant for value tree */ -{ - struct splay_st *left,*right,*parent; - size_t size; - long data[1]; -} value_node; - -#define TOSPLAY(p) ((SPLAYNODE*)(p)) -#define TOVALUE(p) ((value_node*)(p)) -#define TOCOUNT(p) ((count_node*)(p)) -#define SPLAYNODE splay_node -#define SPLAYNODESIZE new_val_sz -#define SCAN_ARGS , FILE *f -#define ACTION(p) {fprintf(f,"%9ld graphs : ",TOCOUNT(p)->count); \ - printkeyvals(f,TOCOUNT(p)->val); fprintf(f,"\n");} -#define INSERT_ARGS , boolean isvalue, SPLAYNODE *new_val, size_t new_val_sz -#define COMPARE(p) (isvalue ? \ - compare_value_node(TOVALUE(new_val),TOVALUE(p)) \ - : compare_count_node(TOCOUNT(new_val),TOCOUNT(p))) -#define PRESENT(p) {if (!isvalue) ++TOCOUNT(p)->count;} -#define NOT_PRESENT(p) {memcpy((void*)p,(void*)new_val,SPLAYNODESIZE); \ - if (!isvalue) TOCOUNT(p)->count = 1;} - -static void printkeyvals(FILE*,long*); -static int compare_count_node(count_node*,count_node*); -static int compare_value_node(value_node*,value_node*); - -static splay_node *count_root = NULL; -static splay_node *value_root = NULL; -static int key[MAXKEYS]; -static int numkeys; - -#include "splay.c" /* Procedures for splay tree management */ - -typedef struct grpsize_st -{ - struct splay_st *left,*right,*parent; - size_t size; - double groupsize1; - long groupsize2; -} group_node; - -/**********************************************************************/ - -static int -compare_count_node(count_node *a, count_node *b) -/* Usual type of comparison */ -{ - int i; - group_node *sza,*szb; - - for (i = 0; i < numkeys; ++i) - { - if (VALTYPE(key[i]) == GROUPSIZE) - { - sza = (group_node*)a->val[i]; - szb = (group_node*)b->val[i]; - if (sza->groupsize2 < szb->groupsize2) return -1; - else if (sza->groupsize2 > szb->groupsize2) return 1; - else if (sza->groupsize1 < szb->groupsize1) return -1; - else if (sza->groupsize1 > szb->groupsize1) return 1; - } - else if (a->val[i] < b->val[i]) return -1; - else if (a->val[i] > b->val[i]) return 1; - } - - return 0; -} - -/**********************************************************************/ - -static int -compare_value_node(value_node *a, value_node *b) -/* Usual type of comparison */ -{ - size_t minsize; - int cmp; - - if (a->size < b->size) minsize = a->size; - else minsize = b->size; - cmp = memcmp(a->data,b->data,minsize); - if (cmp != 0) return cmp; - - if (a->size < minsize) return -1; - else if (a->size > minsize) return 1; - else return 0; -} - -/**********************************************************************/ - -static void -write_group_size(FILE *f, group_node *sz) -{ - double sz1; - int sz2; - - sz1 = sz->groupsize1; - sz2 = sz->groupsize2; - - if (sz2 == 0) - fprintf(f,"%.0f",sz1+0.1); - else - { - while (sz1 >= 10.0) - { - sz1 /= 10.0; - ++sz2; - } - fprintf(f,"%12.10fe%d",sz1,sz2); - } -} - -/**********************************************************************/ - -static void -add_one(void) -/* Add current graph to count. */ -{ - int i; - count_node new_val; - - for (i = 0; i < numkeys; ++i) - new_val.val[i] = VAL(key[i]); - - splay_insert(&count_root,FALSE,TOSPLAY(&new_val), - sizeof(splay_node)+numkeys*sizeof(long)); -} - -/**********************************************************************/ - -static void -printthesevals(FILE *f) -{ - int i,ki; - - for (i = 0; i < numkeys; ++i) - { - ki = key[i]; - if (i > 0) fprintf(f,"; "); - - if (VALTYPE(ki) == BOOLTYPE) - { - if (!VAL(ki)) fprintf(f,"not %s",ID(ki)); - else fprintf(f,"%s",ID(ki)); - } - else if (VALTYPE(ki) == GROUPSIZE) - { - fprintf(f,"%s=",ID(ki)); - write_group_size(f,(group_node*)VAL(ki)); - } - else - fprintf(f,"%s=%ld",ID(ki),VAL(ki)); - } -} - -/**********************************************************************/ - -static void -printkeyvals(FILE *f, long *val) -{ - int i,ki; - - for (i = 0; i < numkeys; ++i) - { - ki = key[i]; - if (i > 0) fprintf(f,"; "); - - if (VALTYPE(ki) == BOOLTYPE) - { - if (!val[i]) fprintf(f,"not %s",ID(ki)); - else fprintf(f,"%s",ID(ki)); - } - else if (VALTYPE(ki) == GROUPSIZE) - { - fprintf(f,"%s=",ID(ki)); - write_group_size(f,(group_node*)val[i]); - } - else - fprintf(f,"%s=%ld",ID(ki),val[i]); - } -} - -/**********************************************************************/ - -static void -groupstats(graph *g, int m, int n, group_node *sz, - int *numorbits, int *fixedpts) -/* Find the automorphism group of the undirected graph g. - Return the group size and number of orbits and fixed points. */ -{ -#if MAXN - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int count[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - int i; - int fixed; - int numcells,code; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - -#if !MAXN - DYNALLOC1(int,lab,lab_sz,n,"groupstats"); - DYNALLOC1(int,ptn,ptn_sz,n,"groupstats"); - DYNALLOC1(int,orbits,orbits_sz,n,"groupstats"); - DYNALLOC1(int,count,count_sz,n,"groupstats"); - DYNALLOC1(set,active,active_sz,m,"groupstats"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"groupstats"); -#endif - - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n-1] = 0; - - if (m == 1) - refine1(g,lab,ptn,0,&numcells,count,active,&code,1,n); - else - refine(g,lab,ptn,0,&numcells,count,active,&code,m,n); - - if (numcells >= n-1) - { - *numorbits = numcells; - *fixedpts = (numcells == n ? n : n-2); - sz->groupsize1 = n + 1.0 - numcells; - sz->groupsize2 = 0; - } - else - { - options.getcanon = FALSE; - options.defaultptn = FALSE; - - EMPTYSET(active,m); - nauty(g,lab,ptn,active,orbits,&options,&stats, - workspace,4*m,m,n,NULL); - *numorbits = stats.numorbits; - sz->groupsize1 = stats.grpsize1; - sz->groupsize2 = stats.grpsize2; - for (i = 0; i < n; ++i) count[i] = 0; - fixed = stats.numorbits; - for (i = 0; i < n; ++i) - if (++count[orbits[i]] == 2) --fixed; - *fixedpts = fixed; - } -} - -/**********************************************************************/ - -static void -compute(graph *g, int m, int n, int code) -/* Compute property i assuming the prerequisites are known. */ -{ - int mind,maxd,mincount,maxcount; - int rad,diam; - unsigned long ned; - boolean eul; - group_node sz; - int norbs,fixedpts; - int minadj,maxadj,minnon,maxnon; - - switch (code) - { - case I_e: - degstats(g,m,n,&ned,&mind,&mincount,&maxd,&maxcount,&eul); - VAL(I_e) = ned; - VAL(I_d) = mind; - VAL(I_D) = maxd; - VAL(I_E) = eul; - VAL(I_r) = mind == maxd; - VAL(I_m) = mincount; - VAL(I_M) = maxcount; - COMPUTED(I_e) = COMPUTED(I_d) = COMPUTED(I_D) = TRUE; - COMPUTED(I_E) = COMPUTED(I_r) = TRUE; - COMPUTED(I_m) = COMPUTED(I_M) = TRUE; - break; - - case I_b: - VAL(I_b) = isbipartite(g,m,n); - COMPUTED(I_b) = TRUE; - break; - - case I_g: - VAL(I_g) = girth(g,m,n); - COMPUTED(I_g) = TRUE; - break; - - case I_K: - VAL(I_K) = maxcliques(g,m,n); - COMPUTED(I_K) = TRUE; - break; - - case I_z: - case I_Z: - diamstats(g,m,n,&rad,&diam); - VAL(I_z) = rad; - VAL(I_Z) = diam; - COMPUTED(I_z) = COMPUTED(I_Z) = TRUE; - break; - - case I_a: - groupstats(g,m,n,&sz,&norbs,&fixedpts); - sz.size = sizeof(long) + sizeof(double); - splay_insert(&value_root,TRUE,TOSPLAY(&sz),sizeof(group_node)); - VAL(I_a) = (long)value_root; - VAL(I_o) = norbs; - VAL(I_t) = norbs == 1; - VAL(I_F) = fixedpts; - COMPUTED(I_a) = COMPUTED(I_o) = TRUE; - COMPUTED(I_F) = COMPUTED(I_t) = TRUE; - break; - - case I_c: - if (isbiconnected(g,m,n)) VAL(I_c) = 2; - else if (isconnected(g,m,n)) VAL(I_c) = 1; - else VAL(I_c) = 0; - COMPUTED(I_c) = TRUE; - break; - - case I_n: - case I_d: - case I_D: - case I_E: - case I_r: - case I_o: - case I_t: - case I_m: - case I_M: - fprintf(stderr,">E Property %d should be known already\n",code); - exit(1); - - case I_Y: - VAL(I_Y) = cyclecount(g,m,n); - COMPUTED(I_Y) = TRUE; - break; - - case I_H: - VAL(I_H) = indcyclecount(g,m,n); - COMPUTED(I_H) = TRUE; - break; - - case I_T: - VAL(I_T) = numtriangles(g,m,n); - COMPUTED(I_T) = TRUE; - break; - - case I_i: - case I_I: - case I_j: - case I_J: - commonnbrs(g,&minadj,&maxadj,&minnon,&maxnon,m,n); - VAL(I_i) = minadj; - VAL(I_I) = maxadj; - VAL(I_j) = minnon; - VAL(I_J) = maxnon; - COMPUTED(I_i) = COMPUTED(I_I) = TRUE; - COMPUTED(I_j) = COMPUTED(I_J) = TRUE; - break; - -#ifdef USERDEF - case I_Q: - VAL(I_Q) = USERDEF(g,m,n); - COMPUTED(I_Q) = TRUE; - break; -#endif - - default: - fprintf(stderr,">E Property %d is uncomputable\n",code); - exit(1); - } -} - -/**********************************************************************/ - -static boolean -group_in_range(group_node *sz, long lo, long hi) -/* Test if the group size is in the given range */ -{ - double sz1; - int sz2; - - if (lo != -NOLIMIT) - { - sz1 = sz->groupsize1; - sz2 = sz->groupsize2; - - while (sz2 >= 0 && sz1 < lo) - { - --sz2; - sz1 *= 10.0; - } - if (sz2 < 0) return FALSE; - } - - if (hi != NOLIMIT) - { - sz1 = sz->groupsize1; - sz2 = sz->groupsize2; - - while (sz2 >= 0 && sz1 <= hi) - { - --sz2; - sz1 *= 10.0; - } - if (sz2 >= 0) return FALSE; - } - - return TRUE; -} - -/**********************************************************************/ - -static boolean -selected(graph *g, int m, int n) -/* See if g is selected by the constraints */ -{ - int i; - - VAL(I_n) = n; - COMPUTED(I_n) = TRUE; - - for (i = 0; i < NUMCONSTRAINTS; ++i) - if (ISNEEDED(i)) - { - if (!COMPUTED(i)) compute(g,m,n,i); - - if (ISCONSTRAINT(i)) - { - if (INBOUNDS(i)) - { - if (INVERSE(i)) return FALSE; - } - else - { - if (!INVERSE(i)) return FALSE; - } - } - } - - return TRUE; -} - -/**********************************************************************/ - -static void -decodekeys(char *s) -/* Extract key symbols from -- string */ -{ - int i,j,k; - - for (i = 0; s[i] != '\0'; ++i) - { - for (j = 0; j < NUMCONSTRAINTS; ++j) - if (s[i] == SYMBOL(j)) break; - if (j == NUMCONSTRAINTS) - { - fprintf(stderr,">E unknown sort key %c\n",s[i]); - exit(1); - } - - for (k = 0; k < numkeys; ++k) if (key[k] == j) break; - - if (k == numkeys) - { - if (numkeys == MAXKEYS) - { - fprintf(stderr, - ">E too many sort keys, increase MAXKEYS\n"); - exit(1); - } - key[numkeys++] = j; - NEEDED(j) |= 1; - } - } -} - -/**********************************************************************/ - -int -main(int argc, char *argv[]) -{ - graph *g; - int m,n,codetype; - char *infilename,*outfilename; - FILE *infile,*outfile,*countfile; - int outcode; - long nin,nout; - int argnum,i,j; - char *arg,sw,*baseptr,*bp; - boolean badargs; - long pval1,pval2,maxin; - boolean fswitch,pswitch,Vswitch,vswitch,qswitch; - unsigned long cmask; - boolean havecon,neg,doflush; - double t; - - HELP; - - if (sizeof(void*) > sizeof(long)) - { - fprintf(stderr,">E %s cannot run on this machine.\n",argv[0]); - exit(1); - } - vswitch = qswitch = fswitch = pswitch = FALSE; - doflush = Vswitch = FALSE; - infilename = outfilename = NULL; - numkeys = 0; - havecon = FALSE; - - baseptr = argv[0]; - for (bp = baseptr; *bp != '\0'; ++bp) - if (*bp == '/' || *bp == '\\') baseptr = bp+1; - - docount = strncmp("countg",baseptr,6) == 0; - dofilter = !docount; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('q',qswitch) - else SWBOOLEAN('f',fswitch) - else SWBOOLEAN('v',vswitch) - else SWBOOLEAN('V',Vswitch) - else SWBOOLEAN('9',doflush) - else SWRANGE('p',":-",pswitch,pval1,pval2,"-p") - else if (sw == '-') - { - docount = TRUE; - decodekeys(arg); - while (*arg != '\0') ++arg; - } - else - { - if (sw == '~') - { - neg = TRUE; - sw = *arg++; - } - else neg = FALSE; - - for (i = 0; i < NUMCONSTRAINTS; ++i) - if (sw == SYMBOL(i)) - { - NEEDED(i) |= 2; - if (VALTYPE(i) == INTTYPE - || VALTYPE(i) == GROUPSIZE) - arg_range(&arg,":-",&LO(i),&HI(i),ID(i)); - else - LO(i) = HI(i) = 1; - if (neg) INVERSE(i) = TRUE; - havecon = TRUE; - break; - } - if (i == NUMCONSTRAINTS) badargs = TRUE; - } - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (vswitch && !havecon) - { - fprintf(stderr,">E -v is illegal with no constraints\n"); - exit(1); - } - - for (j = NUMCONSTRAINTS; --j >= 0;) - if (ISNEEDED(j)) - { - cmask = PREREQ(j); - for (i = 0; cmask != 0; ++i, cmask >>= 1) - if (cmask & 1) NEEDED(i) |= 1; - } - - if (vswitch) - { - for (j = 0; j < NUMCONSTRAINTS; ++j) - if (ISCONSTRAINT(j)) INVERSE(j) = !INVERSE(j); - } - - if (!qswitch) - { - fprintf(stderr,">A %s",argv[0]); - if (fswitch || pswitch) - fprintf(stderr," -"); - if (fswitch) fprintf(stderr,"f"); - if (pswitch) writerange(stderr,'p',pval1,pval2); - - if (numkeys > 0) - { - fprintf(stderr," --"); - for (j = 0; j < numkeys; ++j) - fprintf(stderr,"%c",SYMBOL(key[j])); - } - - if (havecon) fprintf(stderr," -"); - for (j = 0; j < NUMCONSTRAINTS; ++j) - if (ISCONSTRAINT(j)) - { - if (INVERSE(j)) fprintf(stderr,"~"); - if (VALTYPE(j) == BOOLTYPE) - fprintf(stderr,"%c",SYMBOL(j)); - else - writerange(stderr,(int)SYMBOL(j),LO(j),HI(j)); - } - - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,fswitch, - pswitch ? pval1 : 1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (dofilter) countfile = stderr; - else countfile = outfile; - -/* Output line is always the same as the input line - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; -*/ - - nin = nout = 0; - if (!pswitch || pval2 == NOLIMIT) maxin = NOLIMIT; - else if (pval1 < 1) maxin = pval2; - else maxin = pval2 - pval1 + 1; - t = CPUTIME; - while (nin < maxin || maxin == NOLIMIT) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - - for (j = 0; j < NUMCONSTRAINTS; ++j) COMPUTED(j) = FALSE; - - if (selected(g,m,n)) - { - if (dofilter) - { - writelast(outfile); - if (doflush) fflush(outfile); - } - if (Vswitch) - { - fprintf(countfile,"Graph %6ld : ",nin); - printthesevals(countfile); - fprintf(countfile,"\n"); - } - else if (docount) - add_one(); - - ++nout; - } - FREES(g); - } - t = CPUTIME - t; - - if (docount && !Vswitch) - { - splay_scan(count_root,countfile); - if (qswitch || !dofilter) - { - fprintf(countfile,"%9ld graphs altogether",nout); - if (nin != nout) fprintf(countfile," from %ld read",nin); - fprintf(countfile,"; cpu=%.3f sec\n",t); - } - } - - if (!qswitch && dofilter) - fprintf(stderr, - ">Z %ld graphs read from %s; %ld written to %s; %.3f sec\n", - nin,infilename,nout,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_mac/traces.c b/tools/nauty25r9_mac/traces.c deleted file mode 100644 index f2b77c7..0000000 --- a/tools/nauty25r9_mac/traces.c +++ /dev/null @@ -1,9401 +0,0 @@ -/****************************************************************************** - * * - * This is the main file for traces() version 2.0, which is included into * - * nauty() version 2.5. * - * * - * nauty is Copyright (1984-2014) Brendan McKay. All rights reserved. * - * Subject to the waivers and disclaimers in nauty.h. * - * Traces is Copyright (2008-2014) Adolfo Piperno. All rights reserved. * - * * - * CHANGE HISTORY * - * 28-Dec-12 : final changes for version 2.0 * - * 29-Mar-13 : bug correction in automorphism mode * - * 21-May-13 : bug correction (coloured lists) * - * 29-Jun-13 : bug correction (coloured lists and cycles) * - * 07-Dec-13 : bug correction in automorphism mode (wrong group size * - * due to randomness in Schreier-Sims orbit computation) * - * bug correction (discrete initial partition) * - * 15-Feb-14 : CPUDEFS removed (already declared in gtools.h) * - *****************************************************************************/ - -#include "traces.h" -#define SORT_OF_SORT 3 -#define SORT_NAME sortindirect -#include "sorttemplates.c" - -typedef struct Candidate { - boolean sortedlab; - int *invlab; - int *lab; - int code; - int do_it; - int indnum; - int name; - int vertex; - struct Candidate *next; - struct searchtrie *stnode; - unsigned int firstsingcode; - unsigned int pathsingcode; - unsigned int singcode; -} Candidate; - -typedef struct Partition { - int *cls; - int *inv; - int active; - int cells; - int code; -} Partition; - -typedef struct trielist { - struct searchtrie *triearray; - struct trielist *prev; - struct trielist *next; -} trielist; - -typedef struct TracesVars { - char digstring[25]; - double autchk; - double expaths; - double schreier1; - double schreier2; - double schreier3; - int *currorbit; - int *orbits; - int answ; - int brkstpcount; - int compstage; - int cand_level; - int canlist; - int digits; - int expathlength; - int firstpathlength; - int fromlevel; - int indivend; - int indivstart; - int linelgth; - int mark; - int maxtreelevel; - int maxspineorblevel; - int name; - struct searchtrie *gotonode; - struct searchtrie *newgotonode; - struct searchtrie *newst_stage1; - int newindex; - int nextlevel; - int nfix; - int finalnumcells; - int samepref; - int smalldeglevel; - int specialgens; - int stackmark; - int steps; - int strategy; - trielist *strielist; - int strienext; - int tcell_sz; - int tcell; - int tcellevel; - int tcellexpath_sz; - int tcellexpath; - int tcellfromlevel; - int tolevel_tl; - int tolevel; - int treedepth; - int trienext; - int triepos; - TracesOptions *options; - TracesStats *stats; - unsigned int singlongcode; -} TracesVars; - -typedef struct TracesInfo { - boolean autofound; - boolean exitfromref; - boolean identitygroup; - boolean minimalinorbits; - boolean newtc; - boolean thegraphisparse; - boolean thegrouphaschanged; - boolean thereisnextlevel; - boolean useTempOrbits1; - boolean useTempOrbits2; -} TracesInfo; - -typedef struct TracesSpine { - boolean thetracexists; - boolean thexpathexists; - Candidate *listend; - Candidate *liststart; - int ccend; - int ccstart; - int idx; - int listcounter; - int stpend; - int stpstart; - int tgtcell; - int tgtend; - int tgtfrom; - int tgtpos; - int tgtsize; - int trcend; - int trcstart; - int updates; - unsigned long keptcounter; - unsigned long levelcounter; - Partition *part; - unsigned int singcode; -} TracesSpine; - -typedef struct trie { - int value; - struct trie *first_child; - struct trie *next_sibling; -} trie; - -typedef struct searchtrie { - int index; - int name; - int vtx; - int level; - struct searchtrie *father; - struct searchtrie *first_child; - struct searchtrie *last_child; - struct searchtrie *next_sibling; - struct searchtrie *goes_to; -} searchtrie; - -typedef struct pair { - int fst; - int snd; -} pair; - - -static int traces_refine(sparsegraph*, Candidate*, int, int, Partition*, - struct TracesVars*, struct TracesInfo*, boolean); -static void traces_refine_notrace(sparsegraph*, Candidate*, int, int, Partition*, - struct TracesVars*, struct TracesInfo*); -static void traces_refine_maketrie(sparsegraph*, Candidate*, int, int, Partition*, - struct TracesVars*, struct TracesInfo*); -static int traces_refine_comptrie(sparsegraph*, Candidate*, int, int, Partition*, - struct TracesVars*, struct TracesInfo*); -static int traces_refine_sametrace(sparsegraph*, Candidate*, int, int, Partition*, - struct TracesVars*, struct TracesInfo*); -static int traces_refine_refine(sparsegraph*, Candidate*, int, int, Partition*, - struct TracesVars*, struct TracesInfo*); -static void quickSort(int*, int); -static struct Candidate* NewCandidate(int, Candidate**, int); -static int FreeList(Candidate*, int); -static int FixBase(int*, struct TracesVars*, Candidate*, int, int); -static void factorial(double*, int*, int); -static void factorial2(double*, int*, int); -static int CheckForAutomorphisms(sparsegraph*, Candidate*, Candidate*, - struct TracesVars*, struct TracesInfo*, int, int, Partition*); -static int CheckForSingAutomorphisms(sparsegraph*, Candidate*, Partition*, Candidate*, - struct TracesVars*, struct TracesInfo*, - int, int); -static int CheckForMatching(sparsegraph*, Candidate*, Candidate*, Partition*, struct TracesVars*, struct TracesInfo*, int, int); -static void Individualize(Partition*, Candidate*, int, int, int, int); -static boolean TreeFyTwo(sparsegraph*, int, int, Candidate*, Candidate*, Partition*, int, struct TracesVars*, struct TracesInfo*); -static void ExperimentalStep(sparsegraph*, Partition*, Candidate*, TracesVars*, TracesInfo*, int, int); -static boolean TargetCell(sparsegraph*, Candidate*, Partition*, int, TracesVars*, int); -static boolean TargetCellFirstPath(sparsegraph*, Candidate*, Partition*, int, TracesVars*); -static boolean TargetCellExpPath(sparsegraph*, Candidate*, Partition*, int, TracesVars*); -static boolean SelectNextLevel(sparsegraph*, int, TracesVars*); -static void CopyCand(Candidate*, Candidate*, int); -static struct trie* trie_new(int, struct TracesVars*); -static struct trie* trie_make(trie*, int, int, struct TracesVars*); -static struct trie* trie_comp(trie*, int); -static void RemoveFromLevel(int, int, int, boolean); -static void CompStage0(sparsegraph*, Partition*, Partition*, Candidate*, Candidate*, - int, int, struct TracesVars*, struct TracesInfo*); -static void CompStage1(sparsegraph*, Partition*, Partition*, Candidate*, Candidate*, - int, int, - struct TracesVars*, struct TracesInfo*); -static void CompStage2(sparsegraph*, Partition*, Partition*, Candidate*, Candidate*, - int, int, - struct TracesVars*, struct TracesInfo*); -static void grouporderplus(sparsegraph*, int*, int, Candidate*, schreier*, permnode**, - double*, int*, int, TracesVars*, TracesInfo*); - -static boolean Prefix(Candidate*, Candidate*, int); -static boolean findperm(permnode*, int*, int, TracesVars*); -static int spinelementorbsize(int*, int*, int, int); -static void Propagate(sparsegraph*, Candidate*, Partition*, int, int, int); -static trielist* searchtrie_new(int, TracesVars*); -static searchtrie* searchtrie_make(Candidate*, Candidate*, int, TracesVars*); -static boolean lookup(searchtrie*); -static int* findcurrorbits(schreier*, int); - -static const unsigned int fuzz1[] = {037541, 061532, 005257, 026416}; -static const unsigned int fuzz2[] = {006532, 070236, 035523, 062437}; - -#define FUZZ1(x) ((x) ^ fuzz1[(x)&3]) -#define FUZZ2(x) ((x) ^ fuzz2[(x)&3]) - -#define STATS_INIT stats_arg->grpsize1 = 1; \ -stats_arg->grpsize2 = 0; \ -stats_arg->numorbits = n; \ -stats_arg->treedepth= 0; \ -stats_arg->numgenerators = 0; \ -stats_arg->numnodes = 1; \ -stats_arg->interrupted = 0; \ -stats_arg->canupdates = 0; \ -stats_arg->peaknodes = 0; \ - -#define TIME_INIT tv->autchk = 0; \ -tv->expaths = 0; \ -tv->schreier1 = 0; \ -tv->schreier2 = 0; \ -tv->schreier3 = 0; - -#define MASHCOMM(l, i) ((l) + FUZZ1(i)) -#define MASHNONCOMM(l, i) (FUZZ2(l) + (i)) -#define MASH(l, i) ((((l) ^ 065435) + (i)) & 077777) -#define MASH1(l, i) ((l + (i*i)) & 077777) -#define CLEANUP(l) ((int)((l) % 0x7FFF)) -#define SS(n, sing, plur) (n), ((n) == 1?(sing):(plur)) - -#define SETMARK(Arr, Mrk) if (Mrk > (NAUTY_INFINITY-2)) { memset(Arr, 0, n*sizeof(int)); Mrk = 0; } Mrk++; - -#define COPYNODE(W, V) \ -memcpy(W->lab, V->lab, n*sizeof(int)); \ -memcpy(W->invlab, V->invlab, n*sizeof(int)); \ -W->code = V->code; \ -W->singcode = V->singcode; \ -W->do_it = V->do_it; - -#define NEXTLINE fprintf(outfile, "\n"); - -#define PRINTCHAR(c) fprintf(outfile, "%s", c); - -#define PRINTCAND(V, Lev) PRINTCHAR(" ") for (tmp=1; tmp<=Lev; tmp++) {fprintf(outfile, tv->digstring, V->lab[Spine[tmp].tgtpos]+labelorg);} - -#define PRINTCANDBIG(V, Lev) PRINTCHAR(" ") \ -for (tmp=1; tmp<=5; tmp++) {fprintf(outfile, tv->digstring, V->lab[Spine[tmp].tgtpos]+labelorg);} \ -fprintf(outfile, "... "); \ -for (tmp=Lev-4; tmp<=Lev; tmp++) {fprintf(outfile, tv->digstring, V->lab[Spine[tmp].tgtpos]+labelorg);} - -#define LINE(K, c) PRINTCHAR(c) for (tmp=1; tmp<=K; tmp++) {fprintf(outfile, c);} - -#define TRACE_CHECK(Tr, Ind, Arg, End) TracePos = Tr+Ind; \ -if (newtrace) { \ -*TracePos = Arg; \ -} \ -else { \ -if (Ind < *End) { \ -if (*TracePos != Arg) { \ -if (*TracePos > Arg) { \ -return FALSE; \ -} \ -else { \ -*TracePos = Arg; \ -newtrace = TRUE; \ -} \ -} \ -} \ -else { \ -*TracePos = Arg; \ -newtrace = TRUE; \ -} \ -} \ -Ind++; - -#define SAMETRACE_CHECK(Tr, Ind, Arg, End) TracePos = Tr+Ind; \ -if (Ind < *End) { \ -if (*TracePos != Arg) { \ -return FALSE; \ -} \ -} \ -else { \ -return FALSE; \ -} \ -Ind++; - -#define NEWPART(P) P = malloc(sizeof(*(P))); \ -if (P == NULL) { \ -fprintf(ERRFILE, "\nError, memory not allocated.\n"); \ -exit(1); \ -} \ -P->cls = malloc(n*sizeof(int)); \ -if (P->cls == NULL) { \ -fprintf(ERRFILE, "\nError, memory not allocated.\n"); \ -exit(1); \ -} \ -P->inv = malloc(n*sizeof(int)); \ -if (P->inv == NULL) { \ -fprintf(ERRFILE, "\nError, memory not allocated.\n"); \ -exit(1); \ -} \ -P->code = -1; \ -P->cells = 0; - -#define NEWPARTSPINE(Lev) if (Lev > 3) { \ -Spine[Lev].part = malloc(sizeof(*(Spine[Lev].part))); \ -if (Spine[Lev].part == NULL) { \ -fprintf(ERRFILE, "\nError, memory not allocated.\n"); \ -exit(1); \ -} \ -Spine[Lev].part->cls = Spine[Lev-3].part->cls; \ -Spine[Lev].part->inv = Spine[Lev-3].part->inv; \ -Spine[Lev-3].part->cls = Spine[Lev-3].part->inv = NULL; \ -Spine[Lev].part->code = -1; \ -Spine[Lev].part->cells = 0; \ -} \ -else { \ -NEWPART(Spine[Lev].part) \ -} - -#define FREEPART(Part) if (Part) { \ -if (Part->cls) free(Part->cls); \ -if (Part->inv) free(Part->inv); \ -free(Part); \ -} - -#define FREECAND(Cand) if (Cand) { \ -free(Cand->lab); \ -free(Cand->invlab); \ -free(Cand); \ -} - - -#define COPYPART(P, Q) memcpy(P->cls, Q->cls, n*sizeof(int)); \ -memcpy(P->inv, Q->inv, n*sizeof(int)); \ -P->cells = Q->cells; \ -P->code = Q->code; \ - -#define ADDTONEXTLEVEL if (SpineTL->listend) { \ -(SpineTL->listend)->next = NewCandidate(n, &GarbList, TRUE); \ -if ((tv->compstage < 2) && (SpineTL->listcounter <= (NAUTY_INFINITY-2))) SpineTL->listcounter++; \ -SpineTL->listend = (SpineTL->listend)->next; \ -CopyCand(SpineTL->listend, NextCand, n); \ -} \ -else { \ -SpineTL->liststart = NewCandidate(n, &GarbList, TRUE); \ -if (tv->compstage < 2) SpineTL->listcounter = 1; \ -SpineTL->listend = SpineTL->liststart; \ -CopyCand(SpineTL->liststart, NextCand, n); \ -} - -#define ORBITSIZES memset(OrbSize, 0, n*sizeof(int)); \ -for (i=0; iorbits[i]]++; \ -} - -#define CURRORBITSIZES memset(CurrOrbSize, 0, n*sizeof(int)); \ -for (i=SpineTL->tgtcell; itgtend; i++) { \ -CurrOrbSize[tv->currorbit[CurrCand->lab[i]]]++; \ -} - -#define EXITFROMSTAGE0REFINE PRINT_LINE_PLUS(tv->tolevel) \ -if (tv->options->verbosity >= 2) fprintf(outfile, "-=="); \ -CurrCand->indnum--; \ -RemoveFromLevel(tv->tolevel, tv->treedepth, tv->strategy, FALSE); \ -tv->compstage = 1; \ -trieroot = trie_new(n, tv); \ -trieref = trieroot; \ -tv->nextlevel = tv->maxtreelevel = tv->fromlevel; \ -ti->thereisnextlevel = TRUE; \ -ti->exitfromref = TRUE; \ -return; - -#define EXITFROMSTAGE0EXPATH2 PRINT_LINE_PLUS(tv->tolevel) \ -if (tv->options->verbosity >= 2) fprintf(outfile, "=-="); \ -tv->compstage = 1; \ -trieroot = trie_new(n, tv); \ -trieref = trieroot; \ -tv->nextlevel = tv->maxtreelevel = tv->tolevel; \ -ti->thereisnextlevel = TRUE; \ -ti->exitfromref = FALSE; \ -return; - -#define EXITFROMSTAGE0EXPATH1 PRINT_RETURN PRINT_LINE_PLUS(tv->tolevel) \ -if (tv->options->verbosity >= 2) fprintf(outfile, "==-"); \ -if (SpineTL->liststart) { \ -AuxCand = SpineTL->liststart; \ -SpineTL->liststart = NewCandidate(n, &GarbList, TRUE); \ -CopyCand(SpineTL->liststart, NextCand, n); \ -SpineTL->liststart->next = AuxCand; \ -} \ -else { \ -SpineTL->liststart = NewCandidate(n, &GarbList, TRUE); \ -SpineTL->listend = SpineTL->liststart; \ -SpineTL->liststart->next = NULL; \ -CopyCand(SpineTL->liststart, NextCand, n); \ -} \ -tv->compstage = 1; \ -trieroot = trie_new(n, tv); \ -trieref = trieroot; \ -tv->nextlevel = tv->maxtreelevel = tv->tolevel; \ -ti->thereisnextlevel = TRUE; \ -ti->exitfromref = FALSE; \ -return; - -#define UPDATE_LINELGTH if (tv->options->verbosity >= 2) { \ -if (tv->tolevel < 12) { \ -tv->linelgth = (tv->digits+1)*tv->tolevel+16; \ -} \ -else { \ -tv->linelgth = (tv->digits+1)*10+20; \ -} \ -} - -#define PRINT_LINE if ((tv->options->verbosity >= 1) && (tv->strategy == 0)) { \ -if (!ti->newtc) \ -{ \ -if (tv->options->verbosity >= 2) { LINE(tv->linelgth, "-"); \ -NEXTLINE} \ -} \ -ti->newtc = FALSE; \ -} - - -#define PRINT_LINE_PLUS(Lev) if ((tv->options->verbosity >= 1) && (tv->strategy == 0)) { \ -if (!ti->newtc) \ -{ \ -if (tv->options->verbosity >= 2) { LINE(tv->linelgth, "-"); \ -fprintf(outfile, " ");} \ -fprintf(outfile, "level %d: %d cell%s; target cell: %d; %d orbit%s; %lu node%s (%lu kept); %d update%s;", \ -Lev, SS(Spine[Lev].part->cells, "", "s"), Spine[Lev].tgtsize, SS(tv->stats->numorbits, "", "s"), \ -SS(Spine[Lev].levelcounter, "", "s"), Spine[Lev].keptcounter, SS(Spine[Lev].updates, "", "s")); \ -NEXTLINE \ -} \ -ti->newtc = FALSE; \ -} - -#define PRINT_CANDIDATE(Cand, Lev) { \ -for (tmp = Cand->name, cu = 0; tmp > 0; tmp /= 10, ++cu) {} \ -for (tmp = Lev, cu1 = 0; tmp > 0; tmp /= 10, ++cu1) {} \ -cu = 14-cu-cu1; \ -LINE(cu, "-") \ -fprintf(outfile, " %d, %d) ", Lev % 10000, Cand->name % 10000000); \ -if (Lev < 12) { \ -PRINTCAND(Cand, Lev) \ -} \ -else { \ -PRINTCANDBIG(Cand, Lev) \ -} \ -PRINTCHAR("| ") \ -fprintf(outfile, "{%x, %x} ", Cand->code, Cand->singcode); \ -} - -#define PRINT_EXPPATHSTEP(Cand, Boo) if (tv->options->verbosity >= 2) { \ -if ((tv->tolevel_tl-tv->tolevel < 6) || (NextPart->cells == tv->finalnumcells)) { \ -fprintf(outfile, "%d ", Cand->lab[SpineTL_tl->tgtpos]+labelorg); \ -if (tv->options->verbosity >= 2) {if (Boo) fprintf(outfile, "{%x} ", Cand->code); else fprintf(outfile, "{interr.(%d)} ", NextPart->cells);} \ -else { if (!Boo) fprintf(outfile, "{interr.(%d)} ", NextPart->cells);} \ -if ((NextPart->cells == tv->finalnumcells) || (tv->tolevel_tl == tv->smalldeglevel)) { \ -fprintf(outfile, "(%d) ", tv->tolevel_tl); \ -} \ -} \ -else { \ -if (tv->tolevel_tl-tv->tolevel == 6) { \ -fprintf(outfile, "... "); \ -} \ -} \ -} - -#define PRINT_RETURN if (tv->options->verbosity >= 2) { \ -fprintf(outfile, "\n"); \ -} - -#define PRINT_FROM_VERB(Verb) if (tv->options->verbosity >= Verb) { \ -fprintf(outfile, "FROM: "); \ -PRINTCAND(CurrCand, tv->fromlevel) \ -fprintf(outfile, " do_it: %d, indnum: %d, stnode->index: %d ", CurrCand->do_it, CurrCand->indnum, CurrCand->stnode->index); \ -PRINT_RETURN \ -} - -#define PRINT_NOTMIN_VERB(Verb) if (tv->options->verbosity >= Verb) { \ -fprintf(outfile, " is NOT minimal in orbits (1, %d) [%d]; ", gom_level, CurrCand->lab[Spine[gom_level+1].tgtpos]+labelorg); \ -fprintf(outfile, "at lev %d, orb[%d] = %d.\n", gom_level+1, CurrCand->lab[Spine[gom_level+1].tgtpos]+labelorg, tv->currorbit[CurrCand->lab[Spine[gom_level+1].tgtpos]]+labelorg); } - -#define PRINT_SKIPPED_VERB(Verb) if (tv->options->verbosity >= Verb) \ -fprintf(outfile, " skipped (0) (orbit[%d] = %d)\n", \ -NextCand->vertex+labelorg, tv->currorbit[NextCand->vertex]+labelorg); - -#define PRINT_REFINE_VERB(Verb) if (tv->options->verbosity >= Verb) \ -fprintf(outfile, " REFINE (orbit[%d] = %d)\n", NextCand->vertex+labelorg, tv->currorbit[NextCand->vertex]+labelorg); - -#define PRINT_INDIV_VERB(Verb) if (tv->options->verbosity >= Verb) { \ -PRINTCAND(CurrCand, tv->fromlevel) \ -fprintf(outfile, "| "); \ -fprintf(outfile, tv->digstring, NextCand->vertex+labelorg); \ -} - -#define SPECIALGENERATORS if (tv->options->generators) addpermutation(ring, AUTPERM, n); \ -tv->stats->numgenerators++; \ -tv->specialgens++; \ -if (tv->options->writeautoms) { \ -fprintf(outfile, "Gen #%d: ", tv->stats->numgenerators); \ -writeperm(outfile, AUTPERM, tv->options->cartesian, tv->options->linelength, n); \ -} \ -if (tv->options->userautomproc) { \ -(*tv->options->userautomproc)(tv->stats->numgenerators, AUTPERM, n); \ -} - -#define UPDATEMIN(A, B) if (B < A) A = B; - -#if !MAXN -DYNALLSTAT(int, AUTPERM, AUTPERM_sz); -DYNALLSTAT(int, BreakSteps, BreakSteps_sz); -DYNALLSTAT(int, CurrOrbSize, CurrOrbSize_sz); -DYNALLSTAT(int, CurrRefCells, CurrRefCells_sz); -DYNALLSTAT(int, fix, fix_sz); -DYNALLSTAT(int, IDENTITY_PERM, IDENTITY_PERM_sz); -DYNALLSTAT(int, Markers, Markers_sz); -DYNALLSTAT(int, MarkHitVtx, MarkHitVtx_sz); -DYNALLSTAT(int, MultRefCells, MultRefCells_sz); -DYNALLSTAT(int, NghCounts, NghCounts_sz); -DYNALLSTAT(int, OrbSize, OrbSize_sz); -DYNALLSTAT(int, RefCells, RefCells_sz); -DYNALLSTAT(searchtrie*, RefPath, RefPath_sz); -DYNALLSTAT(int, SplCls, SplCls_sz); -DYNALLSTAT(int, SplCnt, SplCnt_sz); -DYNALLSTAT(int, SplPos, SplPos_sz); -DYNALLSTAT(int, StackMarkers, StackMarkers_sz); -DYNALLSTAT(int, TheTrace, TheTrace_sz); -DYNALLSTAT(int, TheTraceCC, TheTraceCC_sz); -DYNALLSTAT(int, TheTraceSplNum, TheTraceSplNum_sz); -DYNALLSTAT(int, TheTraceSteps, TheTraceSteps_sz); -DYNALLSTAT(int, TEMPLAB, TEMPLAB_sz); -DYNALLSTAT(int, TEMPINVLAB, TEMPINVLAB_sz); -DYNALLSTAT(int, WorkArray, WorkArray_sz); -DYNALLSTAT(int, WorkArray1, WorkArray1_sz); -DYNALLSTAT(int, WorkArray2, WorkArray2_sz); -DYNALLSTAT(int, WorkArray3, WorkArray3_sz); -DYNALLSTAT(int, WorkArray4, WorkArray4_sz); -DYNALLSTAT(int, WorkArray5, WorkArray5_sz); -DYNALLSTAT(int, TreeStack, TreeStack_sz); -DYNALLSTAT(TracesSpine, Spine, Spine_sz); -DYNALLSTAT(trie*, TrieArray, TrieArray_sz); -#else -static TLS_ATTR int AUTPERM[MAXN]; -static TLS_ATTR int BreakSteps[MAXN]; -static TLS_ATTR int CurrOrbSize[MAXN]; -static TLS_ATTR int CurrRefCells[MAXN]; -static TLS_ATTR int fix[MAXN]; -static TLS_ATTR int IDENTITY_PERM[MAXN]; -static TLS_ATTR int Markers[MAXN]; -static TLS_ATTR int MarkHitVtx[MAXN]; -static TLS_ATTR int MultRefCells[MAXN]; -static TLS_ATTR int NghCounts[MAXN]; -static TLS_ATTR int OrbSize[MAXN]; -static TLS_ATTR int RefCells[MAXN]; -static TLS_ATTR searchtrie* RefPath[MAXN]; -static TLS_ATTR int SplCls[MAXN]; -static TLS_ATTR int SplCnt[MAXN]; -static TLS_ATTR int SplPos[MAXN]; -static TLS_ATTR int StackMarkers[MAXN]; -static TLS_ATTR int TheTrace[MAXN]; -static TLS_ATTR int TheTraceCC[MAXN]; -static TLS_ATTR int TheTraceSplNum[MAXN]; -static TLS_ATTR int TheTraceSteps[MAXN]; -static TLS_ATTR int TEMPLAB[MAXN]; -static TLS_ATTR int TEMPINVLAB[MAXN]; -static TLS_ATTR int WorkArray[MAXN]; -static TLS_ATTR int WorkArray1[MAXN]; -static TLS_ATTR int WorkArray2[MAXN]; -static TLS_ATTR int WorkArray3[MAXN]; -static TLS_ATTR int WorkArray4[MAXN]; -static TLS_ATTR int WorkArray5[MAXN]; -static TLS_ATTR int TreeStack[MAXN]; -static TLS_ATTR TracesSpine Spine[MAXN]; -static TLS_ATTR trie* TrieArray[MAXN]; -#endif - -static TLS_ATTR FILE *outfile; - -/* Brendan's SCHREIER */ -static TLS_ATTR schreier *gpB; /* This will point to the Schreier structure */ -static TLS_ATTR permnode *gensB; /* This will point to the stored generators */ - -static TLS_ATTR Candidate *GarbList, *SpOrd, *SpCyc, *SpSwp; -static TLS_ATTR Partition *SpPart1, *SpPart2; -static TLS_ATTR TracesSpine *SpineTL, *SpineFL, *SpineTL_tl; -static TLS_ATTR trie *trieroot, *trieref; -static TLS_ATTR int *TempOrbits = NULL; - -static int -given_gens(sparsegraph *g, permnode *gens, int *orbits, boolean digraph) -/* Check if the permutations in the list gens are automorphisms, - * also set mark and refcount fields and initialise orbits. */ -{ - int i, m, n, norbs; - permnode *pn; - - n = g->nv; - for (i = 0; i < n; ++i) orbits[i] = i; - memcpy(IDENTITY_PERM, orbits, n*sizeof(int)); - norbs = n; - - if (!gens) return norbs; - - m = SETWORDSNEEDED(n); - pn = gens; - do { - if (!isautom_sg((graph*)g, pn->p, digraph, m, n)) { - fprintf(ERRFILE, "Input permutation is not an automorphism\n"); - exit(1); - } - norbs = orbjoin(orbits, pn->p, n); - pn->mark = 1; - pn->refcount = 0; - pn = pn->next; - } while (pn != gens); - - return norbs; -} - -void -Traces(sparsegraph *g_arg, int *lab, int *ptn, - int *orbits_arg, TracesOptions *options_arg, TracesStats *stats_arg, - sparsegraph *canong_arg) -{ - int i, j, cu, cu1; - int temp, tmp; - trielist *STStart, *STAux; - searchtrie *TrieNode; - - if (g_arg->nv > (NAUTY_INFINITY-2)) - { - fprintf(ERRFILE, "Traces: need n <= %d, but n=%d\n\n", - NAUTY_INFINITY-2, g_arg->nv); - return; - } - - struct TracesVars *tv = malloc(sizeof(struct TracesVars)); - if (tv == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - struct TracesInfo *ti = malloc(sizeof(struct TracesInfo)); - if (ti == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - - Partition *CurrPart, *NextPart; - Candidate *CurrCand, *NextCand; - Candidate *BestCand, *AuxCand; - - const int n = g_arg->nv; - const int m = SETWORDSNEEDED(n); - trieroot = NULL; - NextCand = GarbList = NULL; - - tv->canlist = 0; - tv->compstage = 0; - tv->expathlength = n; - tv->finalnumcells = n; - tv->firstpathlength = 0; - tv->linelgth = 0; - tv->name = 0; - tv->maxspineorblevel = 0; - tv->nfix = 0; - tv->options = options_arg; - tv->orbits = orbits_arg; - tv->smalldeglevel = n; - tv->specialgens = 0; - tv->stats = stats_arg; - tv->treedepth = 0; - tv->gotonode = NULL; - - if (tv->options->strategy == 0) { - tv->steps = n; - tv->strategy = 0; - } - else { - tv->strategy = 1; - tv->steps = tv->options->strategy; - if (tv->steps > n) { - tv->steps = n; - } - } - -#if !MAXN - DYNALLOC1(int, AUTPERM, AUTPERM_sz, n, "Traces"); - DYNALLOC1(int, BreakSteps, BreakSteps_sz, n, "Traces"); - DYNALLOC1(int, CurrOrbSize, CurrOrbSize_sz, n, "Traces"); - DYNALLOC1(int, CurrRefCells, CurrRefCells_sz, n, "Traces"); - DYNALLOC1(int, fix, fix_sz, n, "Traces"); - DYNALLOC1(int, IDENTITY_PERM, IDENTITY_PERM_sz, n, "Traces"); - DYNALLOC1(int, Markers, Markers_sz, n, "Traces"); - DYNALLOC1(int, MarkHitVtx, MarkHitVtx_sz, n, "Traces"); - DYNALLOC1(int, MultRefCells, MultRefCells_sz, n, "Traces"); - DYNALLOC1(int, NghCounts, NghCounts_sz, n, "Traces"); - DYNALLOC1(int, OrbSize, OrbSize_sz, n, "Traces"); - DYNALLOC1(int, RefCells, RefCells_sz, n, "Traces"); - DYNALLOC1(int, SplCls, SplCls_sz, n, "Traces"); - DYNALLOC1(int, SplCnt, SplCnt_sz, n, "Traces"); - DYNALLOC1(int, SplPos, SplPos_sz, n, "Traces"); - DYNALLOC1(int, StackMarkers, StackMarkers_sz, n, "Traces"); - DYNALLOC1(int, TheTrace, TheTrace_sz, n+10, "Traces"); - DYNALLOC1(int, TheTraceCC, TheTraceCC_sz, n, "Traces"); - DYNALLOC1(int, TheTraceSplNum, TheTraceSplNum_sz, n, "Traces"); - DYNALLOC1(int, TheTraceSteps, TheTraceSteps_sz, n+10, "Traces"); - DYNALLOC1(int, TEMPLAB, TEMPLAB_sz, n+10, "Traces"); - DYNALLOC1(int, TEMPINVLAB, TEMPINVLAB_sz, n+10, "Traces"); - DYNALLOC1(int, WorkArray, WorkArray_sz, n, "Traces"); - DYNALLOC1(int, WorkArray1, WorkArray1_sz, n, "Traces"); - DYNALLOC1(int, WorkArray2, WorkArray2_sz, n, "Traces"); - DYNALLOC1(int, WorkArray3, WorkArray3_sz, n, "Traces"); - DYNALLOC1(int, WorkArray4, WorkArray4_sz, n, "Traces"); - DYNALLOC1(int, WorkArray5, WorkArray5_sz, n, "Traces"); - DYNALLOC1(int, TreeStack, TreeStack_sz, n, "Traces"); - DYNALLOC1(TracesSpine, Spine, Spine_sz, n, "Traces"); - DYNALLOC1(trie*, TrieArray, TrieArray_sz, n, "Traces"); -#endif - - outfile = (tv->options->outfile == NULL ? stdout : tv->options->outfile); - - SpOrd = SpCyc = SpSwp = NULL; - SpPart1 = SpPart2 = NULL; - - if (tv->options->verbosity >= 2) { - for (i = n, tv->digits = 0; i > 0; i /= 10, ++tv->digits) {} - sprintf(tv->digstring, "%s%dd ", "%", tv->digits); - } - -#define PERMSTACK WorkArray1 -#define CYCLES WorkArray1 -#define HitCls WorkArray2 -#define CYCOLR WorkArray2 -#define HitVtx WorkArray3 -#define CYLGTH WorkArray3 -#define CStack WorkArray4 -#define CYMULT WorkArray4 -#define HitCount WorkArray5 -#define ElmHitCll WorkArray5 -#define CYCPOS WorkArray5 -#define CYCHIT AUTPERM -#define LGHATTR RefCells -#define CYCREP MultRefCells -#define TempOrbSize TEMPLAB -#define AutomCount TEMPINVLAB - - /* Initialize group and statistics */ - STATS_INIT - if (tv->options->verbosity >= 2) { - TIME_INIT - } - - if (tv->options->generators) { - tv->stats->numorbits = given_gens(g_arg, *tv->options->generators, orbits_arg, tv->options->digraph); - newgroup(&gpB, NULL, n); - gensB = *tv->options->generators; - expandschreier(gpB, &gensB, n); - ti->thegrouphaschanged = TRUE; - ti->identitygroup = FALSE; - } - else { - newgroup(&gpB, &gensB, n); - for (i = 0; i < n; ++i) orbits_arg[i] = i; - memcpy(IDENTITY_PERM, orbits_arg, n*sizeof(int)); - tv->stats->numorbits = n; - ti->thegrouphaschanged = FALSE; - ti->identitygroup = TRUE; - } - tv->currorbit = gpB->orbits; - - memset(fix, 0, n*sizeof(int)); - memset(TheTraceCC, 0, n*sizeof(int)); - /* ran_init(1234); any long int as an argument */ - - /* The graph is sparse? */ - if (g_arg->nde < n || g_arg->nde / n < n / (g_arg->nde / n)) { - ti->thegraphisparse = TRUE; - } - else { - ti->thegraphisparse = FALSE; - } - - /* Initialize candidate, partition, cells, orbits */ - NEWPART(Spine[0].part); - Spine[0].part->code = -1; - - NEWPART(NextPart); - CurrPart = Spine[0].part; - - CurrCand = NewCandidate(n, &GarbList, TRUE); - memset(CurrPart->inv, 0, n*sizeof(int)); - - CurrCand->singcode = 0; - TempOrbits = NULL; - STStart = NULL; - - if (tv->options->defaultptn) { - memcpy(CurrCand->lab, IDENTITY_PERM, n*sizeof(int)); - memcpy(CurrCand->invlab, IDENTITY_PERM, n*sizeof(int)); - CurrPart->cells = 1; - CurrPart->cls[0] = n; - TheTrace[0] = 0; - } - else { - memcpy(CurrCand->lab, lab, n*sizeof(int)); - CurrPart->cells = 0; - j = 0; - for (i = 0; i < n; i++) { - if (j) { - CurrPart->inv[i] = j; - } - CurrCand->invlab[CurrCand->lab[i]] = i; - if (!ptn[i]) { - CurrPart->cls[j] = i-j+1; - if (CurrPart->cls[j] == 1) { - CurrCand->singcode = MASHCOMM(CurrCand->singcode, CurrCand->lab[j]); - } - TheTrace[CurrPart->cells++] = j; - j = i+1; - } - } - } - - /* Initialization of Spine structure */ - SpineFL = Spine; - SpineFL->tgtcell = SpineFL->tgtpos = 0; - SpineFL->tgtend = n; - SpineFL->trcstart = 0; - SpineFL->trcend = CurrPart->active = CurrPart->cells; - SpineFL->ccstart = SpineFL->ccend = 0; - SpineFL->stpstart = SpineFL->stpend = 0; - SpineFL->thetracexists = FALSE; - SpineFL->liststart = SpineFL->listend = CurrCand; - SpineFL->levelcounter = 1; - SpineFL->keptcounter = 1; - SpineFL->updates = 1; - - /* Further initializations */ - tv->mark = tv->stackmark = 1073741825; - tv->maxtreelevel = 0; - tv->tolevel = 0; - tv->tcell = 0; - UPDATE_LINELGTH - - /* First refinement */ - traces_refine(g_arg, CurrCand, m, n, CurrPart, tv, ti, FALSE); - - CurrCand->name = 0; - - if (CurrPart->cells == n) { - tv->stats->canupdates++; - /* CANONICAL FORM ? */ - if (tv->options->getcanon) { - memcpy(lab, CurrCand->lab, n*sizeof(int)); - if (canong_arg) memcpy(CurrPart->inv, CurrCand->invlab, n*sizeof(int)); - } - } - else { - STStart = searchtrie_new(n, tv); - CurrCand->stnode = tv->strielist->triearray; - NextCand = NewCandidate(n, &GarbList, TRUE); - SpineFL->listcounter = 1; - tv->tcellevel = 0; - ti->newtc = FALSE; - ti->exitfromref = FALSE; - Spine[1].levelcounter = 0; - Spine[1].updates = 0; - - do { - tv->fromlevel = tv->tolevel; - SpineFL = Spine+tv->fromlevel; - - if (CurrCand) { - switch (tv->compstage) { - case 0: CompStage0(g_arg, CurrPart, NextPart, CurrCand, NextCand, m, n, tv, ti); - break; - case 1: - if (!TempOrbits) { - memcpy(WorkArray1, tv->currorbit, n*sizeof(int)); - TempOrbits = WorkArray1; - } - memset(TempOrbSize, 0, n*sizeof(int)); - for (i=SpineTL->tgtcell; itgtend; i++) { - TempOrbSize[TempOrbits[CurrCand->lab[i]]]++; - } - CompStage1(g_arg, CurrPart, NextPart, CurrCand, NextCand, m, n, tv, ti); - break; - case 2: CompStage2(g_arg, CurrPart, NextPart, CurrCand, NextCand, m, n, tv, ti); - break; - default: - break; - } - } - - /* NEXT CANDIDATE */ - if (ti->thereisnextlevel) { - if (tv->nextlevel != tv->fromlevel) { - UPDATE_LINELGTH - } - tv->tolevel = tv->nextlevel; - CurrCand = Spine[tv->nextlevel].liststart; - CurrPart = Spine[tv->nextlevel].part; - } - } - while (ti->thereisnextlevel); - - if (tv->compstage) { - memset(CurrOrbSize, 0, n*sizeof(int)); - for (i=0; ioptions->getcanon) { - if (tv->compstage) { - tv->maxtreelevel++; - TrieNode = Spine[tv->maxtreelevel].liststart->stnode; - if (TrieNode->father) { - TrieNode = TrieNode->father; - } - if (!ti->exitfromref) { - TrieNode->index = 0; - for (i=1; iindex += CurrOrbSize[AutomCount[i]]; - } - } - } - } - - tv->stats->grpsize1 = 1.0; - tv->stats->grpsize2 = 0; - - if (tv->maxtreelevel) PRINT_LINE_PLUS(tv->maxtreelevel); - - AuxCand = Spine[tv->maxtreelevel].liststart; - while (!AuxCand->do_it) { - AuxCand = AuxCand->next; - } - - /* GROUP ORDER */ - grouporderplus(g_arg, fix, tv->nfix, AuxCand, gpB, &gensB, &(tv->stats->grpsize1), &(tv->stats->grpsize2), - n, tv, ti); - - /* CANONICAL FORM ? */ - if (tv->options->getcanon) { - BestCand = AuxCand; - AuxCand = AuxCand->next; - while (AuxCand) { - if (AuxCand->do_it) { - if (comparelab_tr(g_arg, BestCand->lab, BestCand->invlab, AuxCand->lab, AuxCand->invlab) == 1) { - BestCand = AuxCand; - tv->stats->canupdates++; - } - } - AuxCand = AuxCand->next; - } - if (tv->options->verbosity >= 2) { - LINE(tv->linelgth+4, "*") - NEXTLINE - fprintf(outfile, "Canonical:"); - PRINTCAND(BestCand, tv->maxtreelevel) - PRINT_RETURN - } - memcpy(lab, BestCand->lab, n*sizeof(int)); - if (canong_arg) memcpy(CurrPart->inv, BestCand->invlab, n*sizeof(int)); - } - - if (tv->options->verbosity >= 2) { - if (tv->linelgth < 40) { - tv->linelgth = 40; - } - LINE(tv->linelgth+4, "*") - NEXTLINE - } - - } - - tv->stats->treedepth = tv->treedepth; - if (Spine[tv->treedepth].part->code == -1) { - tv->stats->treedepth--; - } - - if (tv->options->verbosity >= 2) { - fprintf(outfile, "group time: %.2f, %.2f, %.2f; total: %.2f; exp_paths time: %.2f; aut_check time: %.2f\n%lu refinement%s interrupted by trace comparison (%s); special cells: %d\n------", tv->schreier1, tv->schreier2, tv->schreier3, tv->schreier1+tv->schreier2+tv->schreier3, - tv->expaths, tv->autchk, SS(tv->stats->interrupted, "", "s"), (tv->options->strategy == 0 ? "breadth-first" : "depth-first"), tv->specialgens); - PRINT_RETURN - } - if (tv->options->getcanon && canong_arg) { - canong_arg->nv = g_arg->nv; - canong_arg->nde = g_arg->nde; - SG_ALLOC(*canong_arg, g_arg->nv, g_arg->nde, "traces canong"); - updatecan_tr(g_arg, canong_arg, lab, CurrPart->inv, 0); - } - - if (tv->options->generators) { - deleteunmarked(&gensB); - *tv->options->generators = gensB; - freeschreier(&gpB, NULL); - } - else { - freeschreier(&gpB, &gensB); - schreier_freedyn(); - } - - while (STStart) { - STAux = STStart; - free(STAux->triearray); - STStart = STStart->next; - free(STAux); - } - - tv->canlist = 0; - for (i=0; i<=tv->treedepth; i++) { - if (Spine[i].liststart) { - tv->canlist += FreeList(Spine[i].liststart, TRUE); - Spine[i].liststart = Spine[i].listend = NULL; - } - } - - if (GarbList) { - tv->stats->peaknodes = FreeList(GarbList, FALSE); - } - - FREECAND(NextCand) - FREECAND(SpOrd) - FREECAND(SpCyc) - FREECAND(SpSwp) - FREEPART(NextPart) - FREEPART(SpPart1) - FREEPART(SpPart2) - - if (!tv->options->getcanon && trieroot) { - for (i=0; i<=tv->triepos; i++) { - free(TrieArray[i]); - } - } - - for (i=0; i <= tv->treedepth; i++) { - FREEPART(Spine[i].part) - } - - CurrCand = GarbList = NULL; - tv->stats->peaknodes += tv->canlist; - - free(tv); - free(ti); - traces_freedyn(); - return; -} - -int traces_refine(sparsegraph *sg, - Candidate *Cand, - int m, - int n, - Partition *Part, - struct TracesVars* tv, - struct TracesInfo *ti, - boolean make_code) -{ - int i, j, k, sc, ind0, ind1, ind2, ind3, ind4, jk, tlp1, labi; - int value, iend, newcell, TcSize; - int HitClsInd, SplInd, SplCntInd, CStackInd, TraceInd, TraceCCInd, TraceStepsInd; - size_t j1, iend1; - unsigned int longcode; - int newtrace = FALSE; - int Sparse = TRUE; - int *lab, *cls, *InvLab, *TracePos, *SplitCell, *LabCell, *TraceEnd, Traceccend, *Tracestpend; - int BigCell, BigCellPos, BigCellSize; - boolean TraceCell = FALSE; - int *nghb; - - TcSize = Spine[tv->tolevel].tgtsize; - - if (tv->stackmark > (NAUTY_INFINITY-2)) { - memset(StackMarkers, 0, n*sizeof(int)); - tv->stackmark = 0; - } - tv->stackmark++; - - SpineTL = Spine+tv->tolevel; - TraceEnd = &(SpineTL->trcend); - Traceccend = SpineTL->ccend; - Tracestpend = &(SpineTL->stpend); - TraceCCInd = SpineTL->ccstart; - TraceStepsInd = SpineTL->stpstart; - - lab = Cand->lab; - InvLab = Cand->invlab; - cls = Part->cls; - - UPDATEMIN(Part->active, n-1); - memcpy(CStack+1, TheTrace+SpineTL->trcstart, (Part->active)*sizeof(int)); - CStackInd = Part->active; - for (i = 1; i <= CStackInd; i++) { - StackMarkers[CStack[i]] = tv->stackmark; - } - - longcode = Part->cells; - TraceInd = SpineTL->trcstart+Part->active; - - if (!SpineTL->thetracexists) { - newtrace = TRUE; - } - - while (CStackInd > 0) { - - if (tv->mark > (NAUTY_INFINITY-2)) { - memset(Markers, 0, n*sizeof(int)); - memset(MarkHitVtx, 0, n*sizeof(int)); - tv->mark = 0; - } - tv->mark++; - - if (Part->cells == tv->finalnumcells) break; - - j = CStackInd; - k = CStackInd; - while (--j > 0) { - if (cls[CStack[j]] < cls[CStack[k]]) { - k = j; - } - if ((cls[CStack[k]] == 1) || (j < CStackInd - 12)) { - break; - } - } - - ind0 = CStack[k]; - ind2 = ind0+cls[ind0]; - CStack[k] = CStack[CStackInd--]; - StackMarkers[ind0] = 0; - - if (!newtrace) { - TraceCell = ((ind0 == TheTraceCC[TraceCCInd]) && (TraceCCInd < Traceccend)); - } - /* Analysis of occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is built */ - if (cls[ind0] == 1) { /* SINGLETON CURRENT CELL CASE */ - HitClsInd = 0; - j1 = sg->v[lab[ind0]]; - iend1 = j1+sg->d[lab[ind0]]; - - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - ElmHitCll[value] = value; - } - HitVtx[ElmHitCll[value]++] = k; - } - } - tv->mark++; - - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ElmHitCll[ind1] -= ind1; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = ind1; - } - } - - /* SINGLETON CC CASE */ - if (SplInd) { - if (newtrace) { - TheTraceCC[TraceCCInd] = ind0; - } - if (!TraceCell) { - TheTraceCC[TraceCCInd] = ind0; - newtrace = TRUE; - } - - TRACE_CHECK(TheTraceSplNum, TraceCCInd, SplInd, &Traceccend) - - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (j = 0; j < SplInd; j++) { - ind1 = SplCls[j]; - i = ind1+cls[ind1]-ElmHitCll[ind1]; - TRACE_CHECK(TheTrace, TraceInd, i, TraceEnd) - } - - /* REARRANGE THE CELLS */ - for (j = 0; j < SplInd; j++) { - ind1 = SplCls[j]; - cls[ind1] = cls[ind1]-ElmHitCll[ind1]; - newcell = ind1+cls[ind1]; - cls[newcell] = ElmHitCll[ind1]; - Part->cells++; - - if (StackMarkers[ind1] != tv->stackmark) { - if (cls[newcell] < cls[ind1]) { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - else { - CStack[++CStackInd] = ind1; - StackMarkers[ind1] = tv->stackmark; - } - } - else { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - - SplitCell = HitVtx+ind1; - ind3 = cls[newcell]; - LabCell = lab+newcell; - - for (jk = 0; jk < ind3; jk++) { - k = SplitCell[jk]; - i = LabCell[jk]; - Part->inv[newcell+jk] = newcell; - lab[InvLab[k]] = i; - InvLab[i] = InvLab[k]; - LabCell[jk] = k; - InvLab[k] = newcell+jk; - } - if (cls[ind1] == 1) { - Cand->singcode = MASHCOMM(Cand->singcode, Cand->lab[ind1]); - } - if (cls[newcell] == 1) { - Cand->singcode = MASHCOMM(Cand->singcode, Cand->lab[newcell]); - } - } - } - else { - if ((!newtrace) && TraceCell) { - return 0; - } - } - - } - else { - if (ti->thegraphisparse) { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - ElmHitCll[0] = 0; - for (i = 0; i < n; i++) { - if (sg->d[i]) { - HitVtx[ElmHitCll[0]++] = i; - } - } - } - else { - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - labi = lab[i]; - nghb = sg->e+sg->v[labi]; - j = sg->d[labi]; - for (; j--;) { - k = nghb[j]; - if (MarkHitVtx[k] == tv->mark) { - NghCounts[k]++; - } - else { - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - MarkHitVtx[k] = tv->mark; - NghCounts[k] = 1; - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - HitVtx[value] = k; - ElmHitCll[value] = 1; - } - else { - HitVtx[value+ElmHitCll[value]++] = k; - } - } - } - } - } - - } - - tv->mark++; - - - SplInd = 0; - SplCls[0] = n; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = HitCls[j]; - } - else { - ind2 = ind1+cls[ind1]; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - break; - } - } - } - } - - /* SPARSE CASE */ - if (SplInd) { - if (newtrace) { - TheTraceCC[TraceCCInd] = ind0; - } - if (!TraceCell) { - TheTraceCC[TraceCCInd] = ind0; - newtrace = TRUE; - } - TRACE_CHECK(TheTraceSplNum, TraceCCInd, SplInd+n, &Traceccend) - - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (sc = 0; sc < SplInd; sc++) { /* For each cell C to be split */ - ind0 = SplCls[sc]; - ind1 = ind0 + cls[ind0]; - SplCntInd = 0; - if (ElmHitCll[ind0] < cls[ind0]) { - SplCnt[SplCntInd++] = 0; - SplPos[0] = cls[ind0] - ElmHitCll[ind0]; - } - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = NghCounts[HitVtx[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - tv->mark++; - - if (SplCntInd) { - TRACE_CHECK(TheTraceSteps, TraceStepsInd, SplCntInd+n, Tracestpend) - } - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - TRACE_CHECK(TheTrace, TraceInd, i, TraceEnd) - } - } - - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - /* Permute elements of the cell C */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = HitVtx[i]; - j = SplPos[NghCounts[value]]++; /* where HitVtx[i] goes */ - k = InvLab[value]; /* where HitVtx[i] is in lab */ - lab[k] = lab[j]; - lab[j] = value; - InvLab[value] = j; - InvLab[lab[k]] = k; - NghCounts[value] = 0; - } - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind1 - ElmHitCll[ind0]; - i = newcell; - ind2 = newcell+cls[newcell]-1; - do { - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - - for (i = ind0, k = 0; k < SplCntInd; i+=cls[i], k++) { - if (cls[i] == 1) { - Cand->singcode = MASHCOMM(Cand->singcode, Cand->lab[i]); - } - } - - } - } - else { - if ((!newtrace) && TraceCell) { - return 0; - } - } - - } - else { - if (sg->d[lab[ind0]] > n/cls[ind0]) { - Sparse = FALSE; - } - else { - Sparse = TRUE; - } - if (Sparse) { - /* Counting occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is also built */ - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - } - else { - memset(NghCounts, 0, n*sizeof(int)); - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - value = Part->inv[InvLab[k]]; - if (Markers[value] != tv->mark) { - if (cls[value] > 1) HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - } - } - } - } - - tv->mark++; - - - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ind2 = ind1+cls[ind1]; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - break; - } - } - } - - /* DENSE-SPARSE CASE */ - if (SplInd) { - if (newtrace) { - TheTraceCC[TraceCCInd] = ind0; - } - if (!TraceCell) { - TheTraceCC[TraceCCInd] = ind0; - newtrace = TRUE; - } - TRACE_CHECK(TheTraceSplNum, TraceCCInd, SplInd+2*n, &Traceccend) - - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (j = 0; j < SplInd; j++) { /* For each cell C to be split */ - ind0 = SplCls[j]; - ind1 = ind0+cls[ind0]; - SplCntInd = 0; - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - for (i = ind0; i < ind1; i++) { - value = NghCounts[lab[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - tv->mark++; - - if (SplCntInd) { - TRACE_CHECK(TheTraceSteps, TraceStepsInd, SplCntInd+2*n, Tracestpend) - } - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - TRACE_CHECK(TheTrace, TraceInd, i, TraceEnd) - } - } - - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - - /* Permute elements of the cell C */ - i = ind0; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind0; - i = ind0; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - - for (i = ind0, k = 0; k < SplCntInd; i+=cls[i], k++) { - if (cls[i] == 1) { - Cand->singcode = MASHCOMM(Cand->singcode, Cand->lab[i]); - } - } - - } - } - else { - if ((!newtrace) && TraceCell) { - return 0; - } - } - - } - else { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - } - else { - memset(NghCounts, 0, n*sizeof(int)); - - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - } - } - } - SplInd = 0; - ind4 = 0; - while (ind4 < n) { /* For each cell C with size(C) > 1 */ - ind1 = ind4+cls[ind4]; - if (cls[ind4] > 1) { - - - /* Determine whether C must be split */ - SplCntInd = 0; - value = NghCounts[lab[ind4]]; - for (i = ind4+1; i < ind1; i++) { - if (NghCounts[lab[i]] != value) - { - SplInd++; - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = i-ind4; - do { - value = NghCounts[lab[i++]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - while(i != ind1); - break; - } - } - tv->mark++; - - if (SplInd && !TraceCell) newtrace = TRUE; - - if (SplCntInd) { - TRACE_CHECK(TheTraceSteps, TraceStepsInd, SplCntInd+3*n, Tracestpend) - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind4; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - - if ((StackMarkers[ind4] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - TRACE_CHECK(TheTrace, TraceInd, i, TraceEnd) - } - } - if ((StackMarkers[ind4] != tv->stackmark) && (BigCell != ind4)) { - CStack[BigCellPos] = ind4; - StackMarkers[BigCell] = 0; - StackMarkers[ind4] = tv->stackmark; - } - - /* Permute elements of the cell C */ - i = ind4; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind4; - i = ind4; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - - for (i = ind4; i < ind1; i+=cls[i]) { - if (cls[i] == 1) { - Cand->singcode = MASHCOMM(Cand->singcode, Cand->lab[i]); - } - } - } - } - ind4 = ind1; - } - - /* DENSE-DENSE CASE */ - if (SplInd) { - if (!TraceCell) { - newtrace = TRUE; - } - TRACE_CHECK(TheTraceSplNum, TraceCCInd, SplInd+3*n, &Traceccend) - if (newtrace) { - TheTraceCC[TraceCCInd-1] = ind0; - } - } - else { - if ((!newtrace) && TraceCell) { - return 0; - } - } - - } - } - } - } /* end while (CStackInd > 0) */ - if (make_code) { - for (i=SpineTL->trcstart; i < TraceInd; i++) { - ind0 = TheTrace[i]; - longcode = MASHNONCOMM(longcode, Part->inv[ind0]); - j1 = sg->v[lab[ind0]]; - iend1 = j1+sg->d[lab[ind0]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - value = Part->inv[InvLab[k]]; - longcode = MASHCOMM(longcode, value); - } - } - } - - Part->code = Cand->code = CLEANUP(longcode); - tlp1 = tv->tolevel+1; - if (newtrace) { - if ((tlp1 < n) && (tlp1 > tv->treedepth)) { - tv->treedepth = tlp1; - if (tv->strategy) { - NEWPART(Spine[tlp1].part) - } - else { - NEWPARTSPINE(tlp1) - } - Spine[tlp1].liststart = Spine[tlp1].listend = NULL; - Spine[tlp1].listcounter = 0; - } - *TraceEnd = TraceInd; - SpineTL->ccend = TraceCCInd; - *Tracestpend = TraceStepsInd; - - SpineTL->thetracexists = TRUE; - if (tlp1 < n) { - Spine[tlp1].ccstart = TraceCCInd; - Spine[tlp1].stpstart = TraceStepsInd; - Spine[tlp1].thetracexists = FALSE; - Spine[tlp1].part->code = -1; - } - return 2; - } - else { - if (TraceInd < *TraceEnd) { - return 0; - } - if (Cand->code > SpineTL->part->code) { - return 2; - } - else { - if (Cand->code < SpineTL->part->code) { - return 0; - } - } - return 1; - } -} - -void traces_refine_notrace(sparsegraph *sg, - Candidate *Cand, - int m, - int n, - Partition *Part, - struct TracesVars* tv, - struct TracesInfo *ti) -{ - int i, i1, j, k, sc, ind0, ind1, ind2, ind3, labi; - int value, iend, newcell; - int HitClsInd, SplInd, SplCntInd, CStackInd; - size_t j1, iend1; - unsigned int longcode; - int Split = 0; - int Sparse = TRUE; - int *lab, *cls, *InvLab, *SplitCell, *LabCell; - int BigCell, BigCellPos, BigCellSize; - int *nghb; - - if (tv->stackmark > (NAUTY_INFINITY-2)) { - memset(StackMarkers, 0, n*sizeof(int)); - tv->stackmark = 0; - } - tv->stackmark++; - - lab = Cand->lab; - InvLab = Cand->invlab; - cls = Part->cls; - - CStackInd = 1; - CStack[1] = tv->tcellexpath+cls[tv->tcellexpath]; - - for (i = 1; i <= CStackInd; i++) { - StackMarkers[CStack[i]] = tv->stackmark; - } - - longcode = Part->cells; - - while (CStackInd > 0) - { - if (tv->mark > (NAUTY_INFINITY-2)) { - memset(Markers, 0, n*sizeof(int)); - memset(MarkHitVtx, 0, n*sizeof(int)); - tv->mark = 0; - } - tv->mark++; - - - j = CStackInd; - k = CStackInd; - while (--j > 0) { - if (cls[CStack[j]] < cls[CStack[k]]) { - k = j; - } - if ((cls[CStack[k]] == 1) || (j < CStackInd - 12)) { - break; - } - } - - ind0 = CStack[k]; - ind2 = ind0+cls[ind0]; - CStack[k] = CStack[CStackInd--]; /* Current Cell */ - longcode = MASHNONCOMM(longcode, ind0); - StackMarkers[ind0] = 0; - - /* Analysis of occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is built */ - if (cls[ind0] == 1) { /* SINGLETON CURRENT CELL CASE */ - HitClsInd = 0; - j1 = sg->v[lab[ind0]]; - iend1 = j1+sg->d[lab[ind0]]; - - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - ElmHitCll[value] = value; - } - HitVtx[ElmHitCll[value]++] = k; - } - else { - longcode = MASHCOMM(longcode, value); - } - } - - tv->mark++; - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ElmHitCll[ind1] -= ind1; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = ind1; - } - } - - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - /* REARRANGE THE CELL */ - for (j = 0; j < SplInd; j++) { - ind1 = SplCls[j]; - cls[ind1] = cls[ind1]-ElmHitCll[ind1]; - newcell = ind1+cls[ind1]; - cls[newcell] = ElmHitCll[ind1]; - - Part->cells++; - - if (StackMarkers[ind1] != tv->stackmark) { - if (cls[newcell] < cls[ind1]) { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - else { - CStack[++CStackInd] = ind1; - StackMarkers[ind1] = tv->stackmark; - } - } - else { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - - SplitCell = HitVtx+ind1; - ind3 = cls[newcell]; - LabCell = lab+newcell; - - for (i1 = 0; i1 < ind3; i1++) { - k = SplitCell[i1]; - i = LabCell[i1]; - Part->inv[newcell+i1] = newcell; - lab[InvLab[k]] = i; - InvLab[i] = InvLab[k]; - LabCell[i1] = k; - InvLab[k] = newcell+i1; - } - if (cls[ind1] == 1) { - Cand->pathsingcode = MASHCOMM(Cand->pathsingcode, lab[ind1]); - } - if (cls[newcell] == 1) { - Cand->pathsingcode = MASHCOMM(Cand->pathsingcode, lab[newcell]); - } - } - } - else { - if (ti->thegraphisparse) { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - ElmHitCll[0] = 0; - for (i = 0; i < n; i++) { - if (sg->d[i]) { - HitVtx[ElmHitCll[0]++] = i; - } - } - } - else { - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - labi = lab[i]; - nghb = sg->e+sg->v[labi]; - j = sg->d[labi]; - for (; j--;) { - k = nghb[j]; - if (MarkHitVtx[k] == tv->mark) { - NghCounts[k]++; - } - else { - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - MarkHitVtx[k] = tv->mark; - NghCounts[k] = 1; - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - HitVtx[value] = k; - ElmHitCll[value] = 1; - } - else { - HitVtx[value+ElmHitCll[value]++] = k; - } - } - else { - longcode = MASHCOMM(longcode, value); - } - } - } - } - - } - - tv->mark++; - - SplInd = 0; - SplCls[0] = n; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = HitCls[j]; - } - else { - ind2 = ind1+cls[ind1]; - Split = FALSE; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - Split = TRUE; - break; - } - } - if (!Split) { - longcode = MASHCOMM(longcode, ind1); - } - } - } - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (sc = 0; sc < SplInd; sc++) { /* For each cell C to be split */ - ind0 = SplCls[sc]; - ind1 = ind0 + cls[ind0]; - SplCntInd = 0; - if (ElmHitCll[ind0] < cls[ind0]) { - SplCnt[SplCntInd++] = 0; - SplPos[0] = cls[ind0] - ElmHitCll[ind0]; - } - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = NghCounts[HitVtx[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - tv->mark++; - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - } - } - - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - /* Permute elements of the cell C */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = HitVtx[i]; - j = SplPos[NghCounts[value]]++; /* where HitVtx[i] goes */ - k = InvLab[value]; /* where HitVtx[i] is in lab */ - lab[k] = lab[j]; - lab[j] = value; - InvLab[value] = j; - InvLab[lab[k]] = k; - NghCounts[value] = 0; - } - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind1 - ElmHitCll[ind0]; - i = newcell; - ind2 = newcell+cls[newcell]-1; - do { - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - - for (i = ind0, k = 0; k < SplCntInd; i+=cls[i], k++) { - if (cls[i] == 1) { - Cand->pathsingcode = MASHCOMM(Cand->pathsingcode, lab[i]); - } - } - - } - } - else { - if (sg->d[lab[ind0]] > n/cls[ind0]) { - Sparse = FALSE; - } - else { - Sparse = TRUE; - } - if (Sparse) { - /* Counting occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is also built */ - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - } - else { - memset(NghCounts, 0, n*sizeof(int)); - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - value = Part->inv[InvLab[k]]; - if (Markers[value] != tv->mark) { - if (cls[value] > 1) HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - } - } - } - } - - tv->mark++; - - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ind2 = ind1+cls[ind1]; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - break; - } - } - } - - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (j = 0; j < SplInd; j++) { /* For each cell C to be split */ - ind0 = SplCls[j]; - ind1 = ind0+cls[ind0]; - SplCntInd = 0; - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - for (i = ind0; i < ind1; i++) { - value = NghCounts[lab[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - - tv->mark++; - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - } - } - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - - /* Permute elements of the cell C */ - i = ind0; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind0; - i = ind0; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - Part->inv[i] = newcell; - - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - - for (i = ind0, k = 0; k < SplCntInd; i+=cls[i], k++) { - if (cls[i] == 1) { - Cand->pathsingcode = MASHCOMM(Cand->pathsingcode, lab[i]); - } - } - - } - } - else { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - } - else { - memset(NghCounts, 0, n*sizeof(int)); - - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - } - } - } - - ind0 = 0; - while (ind0 < n) { /* For each cell C with size(C) > 1 */ - ind1 = ind0+cls[ind0]; - if (cls[ind0] > 1) { - - /* Determine whether C must be split */ - SplCntInd = 0; - value = NghCounts[lab[ind0]]; - for (i = ind0+1; i < ind1; i++) - { - if (NghCounts[lab[i]] != value) - { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = i-ind0; - do { - value = NghCounts[lab[i++]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - while(i != ind1); - break; - } - } - - if (SplCntInd) { - tv->mark++; - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - } - } - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - - /* Permute elements of the cell C */ - i = ind0; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind0; - i = ind0; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - - for (i = ind0; i < ind1; i+=cls[i]) { - if (cls[i] == 1) { - Cand->pathsingcode = MASHCOMM(Cand->pathsingcode, lab[i]); - } - } - - } - } - ind0 = ind1; - } - } - } - } - } /* end while (CStackInd > 0) */ - - Cand->code = CLEANUP(longcode); - return; -} - -void traces_refine_maketrie(sparsegraph *sg, - Candidate *Cand, - int m, - int n, - Partition *Part, - struct TracesVars* tv, - struct TracesInfo *ti) -{ - int i, i1, j, k, sc, ind0, ind1, ind2, ind3, labi; - int value, iend, newcell, TcSize; - int HitClsInd, SplInd, SplCntInd, CStackInd; - size_t j1, iend1; - unsigned int longcode; - int Split = 0; - int Sparse = TRUE; - int *lab, *cls, *InvLab, *SplitCell, *LabCell; - int BigCell, BigCellPos, BigCellSize; - int *nghb; - - TcSize = Spine[tv->tolevel].tgtsize; - - if (tv->stackmark > (NAUTY_INFINITY-2)) { - memset(StackMarkers, 0, n*sizeof(int)); - tv->stackmark = 0; - } - tv->stackmark++; - - lab = Cand->lab; - InvLab = Cand->invlab; - cls = Part->cls; - - CStack[1] = Spine[tv->tolevel_tl].tgtpos; - CStackInd = 1; - for (i = 1; i <= CStackInd; i++) { - StackMarkers[CStack[i]] = tv->stackmark; - } - - longcode = Part->cells; - - while (CStackInd > 0) - { - if (tv->mark > (NAUTY_INFINITY-2)) { - memset(Markers, 0, n*sizeof(int)); - memset(MarkHitVtx, 0, n*sizeof(int)); - tv->mark = 0; - } - tv->mark++; - - if (Part->cells == tv->finalnumcells) break; - - j = CStackInd; - k = CStackInd; - while (--j > 0) { - if (cls[CStack[j]] < cls[CStack[k]]) { - k = j; - } - if ((cls[CStack[k]] == 1) || (j < CStackInd - 12)) { - break; - } - } - - ind0 = CStack[k]; - ind2 = ind0+cls[ind0]; - CStack[k] = CStack[CStackInd--]; - longcode = MASHNONCOMM(longcode, ind0); - StackMarkers[ind0] = 0; - - /* Analysis of occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is built */ - if (cls[ind0] == 1) { /* SINGLETON CURRENT CELL CASE */ - HitClsInd = 0; - j1 = sg->v[lab[ind0]]; - iend1 = j1+sg->d[lab[ind0]]; - - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - ElmHitCll[value] = value; - } - HitVtx[ElmHitCll[value]++] = k; - } - else { - longcode = MASHCOMM(longcode, value); - } - } - - tv->mark++; - - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ElmHitCll[ind1] -= ind1; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = ind1; - } - } - - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (j = 0; j < SplInd; j++) { - ind1 = SplCls[j]; - i = ind1+cls[ind1]-ElmHitCll[ind1]; - trieref = trie_make(trieref, i, n, tv); - } - - /* REARRANGE THE CELL */ - for (j = 0; j < SplInd; j++) { - ind1 = SplCls[j]; - cls[ind1] = cls[ind1]-ElmHitCll[ind1]; - newcell = ind1+cls[ind1]; - cls[newcell] = ElmHitCll[ind1]; - - Part->cells++; - - if (StackMarkers[ind1] != tv->stackmark) { - if (cls[newcell] < cls[ind1]) { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - else { - CStack[++CStackInd] = ind1; - StackMarkers[ind1] = tv->stackmark; - } - } - else { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - - SplitCell = HitVtx+ind1; - ind3 = cls[newcell]; - LabCell = lab+newcell; - - for (i1 = 0; i1 < ind3; i1++) { - k = SplitCell[i1]; - i = LabCell[i1]; - Part->inv[newcell+i1] = newcell; - lab[InvLab[k]] = i; - InvLab[i] = InvLab[k]; - LabCell[i1] = k; - InvLab[k] = newcell+i1; - } - } - } - else { - if (ti->thegraphisparse) { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - ElmHitCll[0] = 0; - for (i = 0; i < n; i++) { - if (sg->d[i]) { - HitVtx[ElmHitCll[0]++] = i; - } - } - } - else { - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - labi = lab[i]; - nghb = sg->e+sg->v[labi]; - j = sg->d[labi]; - for (; j--;) { - k = nghb[j]; - if (MarkHitVtx[k] == tv->mark) { - NghCounts[k]++; - } - else { - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - MarkHitVtx[k] = tv->mark; - NghCounts[k] = 1; - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - HitVtx[value] = k; - ElmHitCll[value] = 1; - } - else { - HitVtx[value+ElmHitCll[value]++] = k; - } - } - else { - longcode = MASHCOMM(longcode, value); - } - } - } - } - - } - - tv->mark++; - - SplInd = 0; - SplCls[0] = n; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = HitCls[j]; - } - else { - ind2 = ind1+cls[ind1]; - Split = FALSE; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - Split = TRUE; - break; - } - } - if (!Split) { - longcode = MASHCOMM(longcode, ind1); - } - } - } - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (sc = 0; sc < SplInd; sc++) { /* For each cell C to be split */ - ind0 = SplCls[sc]; - ind1 = ind0 + cls[ind0]; - SplCntInd = 0; - if (ElmHitCll[ind0] < cls[ind0]) { - SplCnt[SplCntInd++] = 0; - SplPos[0] = cls[ind0] - ElmHitCll[ind0]; - } - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = NghCounts[HitVtx[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - - tv->mark++; - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - trieref = trie_make(trieref, i, n, tv); - } - } - - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - /* Permute elements of the cell C */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = HitVtx[i]; - j = SplPos[NghCounts[value]]++; /* where HitVtx[i] goes */ - k = InvLab[value]; /* where HitVtx[i] is in lab */ - lab[k] = lab[j]; - lab[j] = value; - InvLab[value] = j; - InvLab[lab[k]] = k; - NghCounts[value] = 0; - } - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind1 - ElmHitCll[ind0]; - i = newcell; - ind2 = newcell+cls[newcell]-1; - do { - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - } - } - else { - if (sg->d[lab[ind0]] > n/cls[ind0]) { - Sparse = FALSE; - } - else { - Sparse = TRUE; - } - if (Sparse) { - /* Counting occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is also built */ - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - } - else { - memset(NghCounts, 0, n*sizeof(int)); - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - value = Part->inv[InvLab[k]]; - if (Markers[value] != tv->mark) { - if (cls[value] > 1) HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - } - } - } - } - - tv->mark++; - - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ind2 = ind1+cls[ind1]; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - break; - } - } - } - - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (j = 0; j < SplInd; j++) { /* For each cell C to be split */ - ind0 = SplCls[j]; - ind1 = ind0+cls[ind0]; - SplCntInd = 0; - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - for (i = ind0; i < ind1; i++) { - value = NghCounts[lab[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - - tv->mark++; - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - trieref = trie_make(trieref, i, n, tv); - } - } - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - - /* Permute elements of the cell C */ - i = ind0; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind0; - i = ind0; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - } - } - else { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - } - else { - memset(NghCounts, 0, n*sizeof(int)); - - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - } - } - } - - ind0 = 0; - while (ind0 < n) { /* For each cell C with size(C) > 1 */ - ind1 = ind0+cls[ind0]; - if (cls[ind0] > 1) { - - /* Determine whether C must be split */ - SplCntInd = 0; - value = NghCounts[lab[ind0]]; - for (i = ind0+1; i < ind1; i++) - { - if (NghCounts[lab[i]] != value) - { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = i-ind0; - do { - value = NghCounts[lab[i++]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - while(i != ind1); - break; - } - } - - if (SplCntInd) { - tv->mark++; - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - } - } - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - trieref = trie_make(trieref, i, n, tv); - } - - /* Permute elements of the cell C */ - i = ind0; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind0; - i = ind0; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - } - } - ind0 = ind1; - } - } - } - } - } - - Cand->code = CLEANUP(longcode); - return; -} - -int traces_refine_comptrie(sparsegraph *sg, - Candidate *Cand, - int m, - int n, - Partition *Part, - struct TracesVars* tv, - struct TracesInfo *ti) -{ - int i, i1, j, k, sc, ind0, ind1, ind2, ind3, labi; - int value, iend, newcell, TcSize; - int HitClsInd, SplInd, SplCntInd, CStackInd; - size_t j1, iend1; - unsigned int longcode; - int Split = 0; - int Sparse = TRUE; - int *lab, *cls, *InvLab, *SplitCell, *LabCell; - int BigCell, BigCellPos, BigCellSize; - int *nghb; - - TcSize = Spine[tv->tolevel].tgtsize; - - if (tv->stackmark > (NAUTY_INFINITY-2)) { - memset(StackMarkers, 0, n*sizeof(int)); - tv->stackmark = 0; - } - tv->stackmark++; - - lab = Cand->lab; - InvLab = Cand->invlab; - cls = Part->cls; - - CStack[1] = Spine[tv->tolevel_tl].tgtpos; - CStackInd = 1; - for (i = 1; i <= CStackInd; i++) { - StackMarkers[CStack[i]] = tv->stackmark; - } - - longcode = Part->cells; - while (CStackInd > 0) - { - if (tv->mark > (NAUTY_INFINITY-2)) { - memset(Markers, 0, n*sizeof(int)); - memset(MarkHitVtx, 0, n*sizeof(int)); - tv->mark = 0; - } - tv->mark++; - - if (Part->cells == tv->finalnumcells) break; - - j = CStackInd; - k = CStackInd; - while (--j > 0) { - if (cls[CStack[j]] < cls[CStack[k]]) { - k = j; - } - if ((cls[CStack[k]] == 1) || (j < CStackInd - 12)) { - break; - } - } - - ind0 = CStack[k]; - ind2 = ind0+cls[ind0]; - CStack[k] = CStack[CStackInd--]; /* Current Cell */ - longcode = MASHNONCOMM(longcode, ind0); - StackMarkers[ind0] = 0; - - /* Analysis of occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is built */ - if (cls[ind0] == 1) { /* SINGLETON CURRENT CELL CASE */ - HitClsInd = 0; - j1 = sg->v[lab[ind0]]; - iend1 = j1+sg->d[lab[ind0]]; - - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - ElmHitCll[value] = value; - } - HitVtx[ElmHitCll[value]++] = k; - } - else { - longcode = MASHCOMM(longcode, value); - } - } - - tv->mark++; - - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ElmHitCll[ind1] -= ind1; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = ind1; - } - } - - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (j = 0; j < SplInd; j++) { - ind1 = SplCls[j]; - i = ind1+cls[ind1]-ElmHitCll[ind1]; - trieref = trie_comp(trieref, i); - if (trieref == NULL) return 0; - } - - /* REARRANGE THE CELL */ - for (j = 0; j < SplInd; j++) { - ind1 = SplCls[j]; - cls[ind1] = cls[ind1]-ElmHitCll[ind1]; - newcell = ind1+cls[ind1]; - cls[newcell] = ElmHitCll[ind1]; - - Part->cells++; - if (StackMarkers[ind1] != tv->stackmark) { - if (cls[newcell] < cls[ind1]) { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - else { - CStack[++CStackInd] = ind1; - StackMarkers[ind1] = tv->stackmark; - } - } - else { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - SplitCell = HitVtx+ind1; - ind3 = cls[newcell]; - LabCell = lab+newcell; - - for (i1 = 0; i1 < ind3; i1++) { - k = SplitCell[i1]; - i = LabCell[i1]; - Part->inv[newcell+i1] = newcell; - lab[InvLab[k]] = i; - InvLab[i] = InvLab[k]; - LabCell[i1] = k; - InvLab[k] = newcell+i1; - } - } - } - else { - if (ti->thegraphisparse) { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - ElmHitCll[0] = 0; - for (i = 0; i < n; i++) { - if (sg->d[i]) { - HitVtx[ElmHitCll[0]++] = i; - } - } - } - else { - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - labi = lab[i]; - nghb = sg->e+sg->v[labi]; - j = sg->d[labi]; - for (; j--;) { - k = nghb[j]; - if (MarkHitVtx[k] == tv->mark) { - NghCounts[k]++; - } - else { - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - MarkHitVtx[k] = tv->mark; - NghCounts[k] = 1; - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - HitVtx[value] = k; - ElmHitCll[value] = 1; - } - else { - HitVtx[value+ElmHitCll[value]++] = k; - } - } - else { - longcode = MASHCOMM(longcode, value); - } - } - } - } - - } - - tv->mark++; - - SplInd = 0; - SplCls[0] = n; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = HitCls[j]; - } - else { - ind2 = ind1+cls[ind1]; - Split = FALSE; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - Split = TRUE; - break; - } - } - if (!Split) { - longcode = MASHCOMM(longcode, ind1); - } - } - } - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (sc = 0; sc < SplInd; sc++) { /* For each cell C to be split */ - ind0 = SplCls[sc]; - ind1 = ind0 + cls[ind0]; - SplCntInd = 0; - if (ElmHitCll[ind0] < cls[ind0]) { - SplCnt[SplCntInd++] = 0; - SplPos[0] = cls[ind0] - ElmHitCll[ind0]; - } - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = NghCounts[HitVtx[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - - tv->mark++; - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - trieref = trie_comp(trieref, i); - if (trieref == NULL) return 0; - } - } - - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - /* Permute elements of the cell C */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = HitVtx[i]; - j = SplPos[NghCounts[value]]++; /* where HitVtx[i] goes */ - k = InvLab[value]; /* where HitVtx[i] is in lab */ - lab[k] = lab[j]; - lab[j] = value; - InvLab[value] = j; - InvLab[lab[k]] = k; - NghCounts[value] = 0; - } - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind1 - ElmHitCll[ind0]; - i = newcell; - ind2 = newcell+cls[newcell]-1; - do { - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - } - } - else { - if (sg->d[lab[ind0]] > n/cls[ind0]) { - Sparse = FALSE; - } - else { - Sparse = TRUE; - } - if (Sparse) { - /* Counting occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is also built */ - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - } - else { - memset(NghCounts, 0, n*sizeof(int)); - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - value = Part->inv[InvLab[k]]; - if (Markers[value] != tv->mark) { - if (cls[value] > 1) HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - } - } - } - } - - tv->mark++; - - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ind2 = ind1+cls[ind1]; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - break; - } - } - } - - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (j = 0; j < SplInd; j++) { /* For each cell C to be split */ - ind0 = SplCls[j]; - ind1 = ind0+cls[ind0]; - SplCntInd = 0; - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - for (i = ind0; i < ind1; i++) { - value = NghCounts[lab[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - - tv->mark++; - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - trieref = trie_comp(trieref, i); - if (trieref == NULL) return 0; - } - } - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - - /* Permute elements of the cell C */ - i = ind0; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind0; - i = ind0; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - Part->inv[i] = newcell; - - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - } - } - else { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - } - else { - memset(NghCounts, 0, n*sizeof(int)); - - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - } - } - } - - ind0 = 0; - while (ind0 < n) { /* For each cell C with size(C) > 1 */ - ind1 = ind0+cls[ind0]; - if (cls[ind0] > 1) { - - /* Determine whether C must be split */ - SplCntInd = 0; - value = NghCounts[lab[ind0]]; - for (i = ind0+1; i < ind1; i++) - { - if (NghCounts[lab[i]] != value) - { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = i-ind0; - do { - value = NghCounts[lab[i++]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - while(i != ind1); - break; - } - } - - if (SplCntInd) { - tv->mark++; - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - } - } - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - trieref = trie_comp(trieref, i); - if (trieref == NULL) return 0; - } - - /* Permute elements of the cell C */ - i = ind0; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind0; - i = ind0; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - } - } - ind0 = ind1; - } - } - } - } - } - - Cand->code = CLEANUP(longcode); - return 1; -} - -int traces_refine_sametrace(sparsegraph *sg, - Candidate *Cand, - int m, - int n, - Partition *Part, - struct TracesVars* tv, - struct TracesInfo *ti) -{ - int i, j, k, sc, ind0, ind1, ind2, ind3, ind4, jk, labi; - int value, iend, newcell; - int HitClsInd, SplInd, SplCntInd, CStackInd, TraceInd, TraceCCInd, TraceStepsInd; - size_t j1, iend1; - unsigned int longcode; - int Sparse = TRUE; - int *lab, *cls, *InvLab, *TracePos, *SplitCell, *LabCell, *TraceEnd, Traceccend, *Tracestpend; - int BigCell, BigCellPos, BigCellSize; - boolean TraceCell = FALSE; - int *nghb; - - if (tv->stackmark > (NAUTY_INFINITY-2)) { - memset(StackMarkers, 0, n*sizeof(int)); - tv->stackmark = 0; - } - tv->stackmark++; - - SpineTL = Spine+tv->tolevel; - TraceEnd = &(SpineTL->trcend); - Traceccend = SpineTL->ccend; - Tracestpend = &(SpineTL->stpend); - TraceCCInd = SpineTL->ccstart; - TraceStepsInd = SpineTL->stpstart; - - lab = Cand->lab; - InvLab = Cand->invlab; - cls = Part->cls; - - UPDATEMIN(Part->active, n-1); - memcpy(CStack+1, TheTrace+SpineTL->trcstart, (Part->active)*sizeof(int)); - CStackInd = Part->active; - for (i = 1; i <= CStackInd; i++) { - StackMarkers[CStack[i]] = tv->stackmark; - } - - longcode = Part->cells; - TraceInd = SpineTL->trcstart+Part->active; - - while (CStackInd > 0) - { - - if (tv->mark > (NAUTY_INFINITY-2)) { - memset(Markers, 0, n*sizeof(int)); - memset(MarkHitVtx, 0, n*sizeof(int)); - tv->mark = 0; - } - tv->mark++; - - if (Part->cells == tv->finalnumcells) break; - - j = CStackInd; - k = CStackInd; - while (--j > 0) { - if (cls[CStack[j]] < cls[CStack[k]]) { - k = j; - } - if ((cls[CStack[k]] == 1) || (j < CStackInd - 12)) { - break; - } - } - - ind0 = CStack[k]; - ind2 = ind0+cls[ind0]; - CStack[k] = CStack[CStackInd--]; - StackMarkers[ind0] = 0; - - - TraceCell = ((ind0 == TheTraceCC[TraceCCInd]) && (TraceCCInd < Traceccend)); - - /* Analysis of occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is built */ - if (cls[ind0] == 1) { /* SINGLETON CURRENT CELL CASE */ - HitClsInd = 0; - j1 = sg->v[lab[ind0]]; - iend1 = j1+sg->d[lab[ind0]]; - - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - ElmHitCll[value] = value; - } - HitVtx[ElmHitCll[value]++] = k; - } - } - tv->mark++; - - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ElmHitCll[ind1] -= ind1; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = ind1; - } - } - - /* SINGLETON CC CASE */ - if (SplInd) { - SAMETRACE_CHECK(TheTraceSplNum, TraceCCInd, SplInd, &Traceccend) - - - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (j = 0; j < SplInd; j++) { - ind1 = SplCls[j]; - i = ind1+cls[ind1]-ElmHitCll[ind1]; - SAMETRACE_CHECK(TheTrace, TraceInd, i, TraceEnd) - } - - /* REARRANGE THE CELLS */ - for (j = 0; j < SplInd; j++) { - ind1 = SplCls[j]; - cls[ind1] = cls[ind1]-ElmHitCll[ind1]; - newcell = ind1+cls[ind1]; - cls[newcell] = ElmHitCll[ind1]; - Part->cells++; - - if (StackMarkers[ind1] != tv->stackmark) { - if (cls[newcell] < cls[ind1]) { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - else { - CStack[++CStackInd] = ind1; - StackMarkers[ind1] = tv->stackmark; - } - } - else { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - - SplitCell = HitVtx+ind1; - ind3 = cls[newcell]; - LabCell = lab+newcell; - - for (jk = 0; jk < ind3; jk++) { - k = SplitCell[jk]; - i = LabCell[jk]; - Part->inv[newcell+jk] = newcell; - lab[InvLab[k]] = i; - InvLab[i] = InvLab[k]; - LabCell[jk] = k; - InvLab[k] = newcell+jk; - } - if (cls[ind1] == 1) { - Cand->singcode = MASHCOMM(Cand->singcode, Cand->lab[ind1]); - } - if (cls[newcell] == 1) { - Cand->singcode = MASHCOMM(Cand->singcode, Cand->lab[newcell]); - } - } - } - else { - if (TraceCell) { - return FALSE; - } - } - - } - else { - if (ti->thegraphisparse) { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - ElmHitCll[0] = 0; - for (i = 0; i < n; i++) { - if (sg->d[i]) { - HitVtx[ElmHitCll[0]++] = i; - } - } - } - else { - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - labi = lab[i]; - nghb = sg->e+sg->v[labi]; - j = sg->d[labi]; - for (; j--;) { - k = nghb[j]; - if (MarkHitVtx[k] == tv->mark) { - NghCounts[k]++; - } - else { - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - MarkHitVtx[k] = tv->mark; - NghCounts[k] = 1; - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - HitVtx[value] = k; - ElmHitCll[value] = 1; - } - else { - HitVtx[value+ElmHitCll[value]++] = k; - } - } - } - } - } - - } - - tv->mark++; - - SplInd = 0; - SplCls[0] = n; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = HitCls[j]; - } - else { - ind2 = ind1+cls[ind1]; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - break; - } - } - } - } - - /* SPARSE CASE */ - if (SplInd) { - SAMETRACE_CHECK(TheTraceSplNum, TraceCCInd, SplInd+n, &Traceccend) - - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (sc = 0; sc < SplInd; sc++) { /* For each cell C to be split */ - ind0 = SplCls[sc]; - ind1 = ind0 + cls[ind0]; - SplCntInd = 0; - if (ElmHitCll[ind0] < cls[ind0]) { - SplCnt[SplCntInd++] = 0; - SplPos[0] = cls[ind0] - ElmHitCll[ind0]; - } - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = NghCounts[HitVtx[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - tv->mark++; - - if (SplCntInd) { - SAMETRACE_CHECK(TheTraceSteps, TraceStepsInd, SplCntInd+n, Tracestpend) - } - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - SAMETRACE_CHECK(TheTrace, TraceInd, i, TraceEnd) - } - } - - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - /* Permute elements of the cell C */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = HitVtx[i]; - j = SplPos[NghCounts[value]]++; /* where HitVtx[i] goes */ - k = InvLab[value]; /* where HitVtx[i] is in lab */ - lab[k] = lab[j]; - lab[j] = value; - InvLab[value] = j; - InvLab[lab[k]] = k; - NghCounts[value] = 0; - } - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind1 - ElmHitCll[ind0]; - i = newcell; - ind2 = newcell+cls[newcell]-1; - do { - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - - for (i = ind0, k = 0; k < SplCntInd; i+=cls[i], k++) { - if (cls[i] == 1) { - Cand->singcode = MASHCOMM(Cand->singcode, Cand->lab[i]); - } - } - - } - } - else { - if (TraceCell) { - return FALSE; - } - } - - } - else { - if (sg->d[lab[ind0]] > n/cls[ind0]) { - Sparse = FALSE; - } - else { - Sparse = TRUE; - } - if (Sparse) { - /* Counting occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is also built */ - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - } - else { - memset(NghCounts, 0, n*sizeof(int)); - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - value = Part->inv[InvLab[k]]; - if (Markers[value] != tv->mark) { - if (cls[value] > 1) HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - } - } - } - } - - tv->mark++; - - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ind2 = ind1+cls[ind1]; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - break; - } - } - } - - /* DENSE-SPARSE CASE */ - if (SplInd) { - SAMETRACE_CHECK(TheTraceSplNum, TraceCCInd, SplInd+2*n, &Traceccend) - - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (j = 0; j < SplInd; j++) { /* For each cell C to be split */ - ind0 = SplCls[j]; - ind1 = ind0+cls[ind0]; - SplCntInd = 0; - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - for (i = ind0; i < ind1; i++) { - value = NghCounts[lab[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - tv->mark++; - - if (SplCntInd) { - SAMETRACE_CHECK(TheTraceSteps, TraceStepsInd, SplCntInd+2*n, Tracestpend) - } - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - SAMETRACE_CHECK(TheTrace, TraceInd, i, TraceEnd) - } - } - - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - - /* Permute elements of the cell C */ - i = ind0; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind0; - i = ind0; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - - for (i = ind0, k = 0; k < SplCntInd; i+=cls[i], k++) { - if (cls[i] == 1) { - Cand->singcode = MASHCOMM(Cand->singcode, Cand->lab[i]); - } - } - - } - } - else { - if (TraceCell) { - return FALSE; - } - } - - } - else { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - } - else { - memset(NghCounts, 0, n*sizeof(int)); - - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - } - } - } - SplInd = 0; - ind4 = 0; - while (ind4 < n) { /* For each cell C with size(C) > 1 */ - ind1 = ind4+cls[ind4]; - if (cls[ind4] > 1) { - - /* Determine whether C must be split */ - SplCntInd = 0; - value = NghCounts[lab[ind4]]; - for (i = ind4+1; i < ind1; i++) { - if (NghCounts[lab[i]] != value) - { - SplInd++; - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = i-ind4; - do { - value = NghCounts[lab[i++]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - while(i != ind1); - break; - } - } - tv->mark++; - - if (SplCntInd) { - SAMETRACE_CHECK(TheTraceSteps, TraceStepsInd, SplCntInd+3*n, Tracestpend) - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind4; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind4] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - SAMETRACE_CHECK(TheTrace, TraceInd, i, TraceEnd) - } - } - if ((StackMarkers[ind4] != tv->stackmark) && (BigCell != ind4)) { - CStack[BigCellPos] = ind4; - StackMarkers[BigCell] = 0; - StackMarkers[ind4] = tv->stackmark; - } - - /* Permute elements of the cell C */ - i = ind4; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind4; - i = ind4; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - - for (i = ind4, k = 0; k < SplCntInd; i+=cls[i], k++) { - if (cls[i] == 1) { - Cand->singcode = MASHCOMM(Cand->singcode, Cand->lab[i]); - } - } - - } - } - ind4 = ind1; - } - - /* DENSE-DENSE CASE */ - if (SplInd) { - SAMETRACE_CHECK(TheTraceSplNum, TraceCCInd, SplInd+3*n, &Traceccend) - } - else { - if (TraceCell) { - return FALSE; - } - } - - } - } - } - } /* end while (CStackInd > 0) */ - - for (i=SpineTL->trcstart; i < TraceInd; i++) { - ind0 = TheTrace[i]; - longcode = MASHNONCOMM(longcode, Part->inv[ind0]); - j1 = sg->v[lab[ind0]]; - iend1 = j1+sg->d[lab[ind0]]; - for (; j1 < iend1; ++j1) { - value = Part->inv[InvLab[sg->e[j1]]]; - longcode = MASHCOMM(longcode, value); - } - } - Part->code = Cand->code = CLEANUP(longcode); - if ((Cand->code != SpineTL->part->code) || (TraceInd != *TraceEnd)) return FALSE; - return TRUE; -} - -void refine_tr(sparsegraph *sg, int *lab, int *ptn, int *numcells, int *code, TracesOptions *options) -{ - int i, j; - int TraceEnd; - - struct TracesVars tvar, *tv; - struct TracesInfo tinf, *ti; - - Partition *CurrPart; - Candidate *CurrCand; - - const int n = sg->nv; - const int m = SETWORDSNEEDED(n); - - if (n > (NAUTY_INFINITY-2)) - { - fprintf(ERRFILE, "Traces: need n <= %d, but n=%d\n\n", - NAUTY_INFINITY-2, n); - return; - } - -#if !MAXN - DYNALLOC1(int, Markers, Markers_sz, n, "refine_tr"); - DYNALLOC1(int, MarkHitVtx, MarkHitVtx_sz, n, "refine_tr"); - DYNALLOC1(int, NghCounts, NghCounts_sz, n, "refine_tr"); - DYNALLOC1(int, SplPos, SplPos_sz, n, "refine_tr"); - DYNALLOC1(int, SplCls, SplCls_sz, n, "refine_tr"); - DYNALLOC1(int, SplCnt, SplCnt_sz, n, "refine_tr"); - DYNALLOC1(int, StackMarkers, StackMarkers_sz, n, "refine_tr"); - DYNALLOC1(int, TheTrace, TheTrace_sz, n+10, "refine_tr"); - DYNALLOC1(int, TheTraceSteps, TheTraceSteps_sz, n+10, "refine_tr"); - DYNALLOC1(int, TheTraceCC, TheTraceCC_sz, n, "refine_tr"); - DYNALLOC1(int, TheTraceSplNum, TheTraceSplNum_sz, n, "refine_tr"); - DYNALLOC1(int, WorkArray2, WorkArray2_sz, n, "refine_tr"); - DYNALLOC1(int, WorkArray3, WorkArray3_sz, n, "refine_tr"); - DYNALLOC1(int, WorkArray4, WorkArray4_sz, n, "refine_tr"); - DYNALLOC1(int, WorkArray5, WorkArray5_sz, n, "refine_tr"); - DYNALLOC1(TracesSpine, Spine, Spine_sz, n, "refine_tr"); -#endif - -#define HitCls WorkArray2 -#define HitVtx WorkArray3 -#define CStack WorkArray4 -#define ElmHitCll WorkArray5 - - outfile = (options->outfile == NULL ? stdout : options->outfile); - - tv = &tvar; - ti = &tinf; - /* The graph is sparse? */ - if (sg->nde < n || sg->nde / n < n / (sg->nde / n)) { - ti->thegraphisparse = TRUE; - } - else { - ti->thegraphisparse = FALSE; - } - - /* Initialize candidate, partition, cells, orbits */ - CurrPart = malloc(sizeof(Partition)); - if (CurrPart == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - CurrPart->cls = malloc(n*sizeof(int)); - if (CurrPart->cls == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - CurrPart->inv = malloc(n*sizeof(int)); - if (CurrPart->inv == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - CurrPart->code = -1; - - CurrCand = malloc(sizeof(Candidate)); - if (CurrCand == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - CurrCand->lab = malloc(n*sizeof(*CurrCand->lab)); - if (CurrCand->lab == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - CurrCand->invlab = malloc(n*sizeof(*CurrCand->invlab)); - if (CurrCand->invlab == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - CurrCand->do_it = TRUE; - CurrCand->indnum = 0; - CurrCand->code = 0; - CurrCand->next = NULL; - - memset(CurrPart->cls, 0, n*sizeof(int)); - memset(CurrPart->inv, 0, n*sizeof(int)); - memcpy(CurrCand->lab, lab, n*sizeof(int)); - memcpy(CurrCand->invlab, lab, n*sizeof(int)); - CurrPart->cells = 0; - - j = 0; - for (i = 0; i < n; i++) { - if (j) { - CurrPart->inv[i] = j; - } - CurrCand->invlab[CurrCand->lab[i]] = i; - if (!ptn[i]) { - CurrPart->cls[j] = i-j+1; - TheTrace[CurrPart->cells++] = j; - j = i+1; - } - } - - /* Further initializations */ - tv->mark = tv->stackmark = 1073741825; - tv->maxtreelevel = 0; - tv->tolevel = 0; - - TraceEnd = traces_refine_refine(sg, CurrCand, m, n, CurrPart, tv, ti); - - for (i = CurrPart->active; i < TraceEnd; i++) { - ptn[TheTrace[i]-1] = 0; - } - memcpy(lab, CurrCand->lab, n*sizeof(int)); - *code = CurrCand->code; - *numcells = CurrPart->cells; - - FREECAND(CurrCand) - FREEPART(CurrPart) - -#if !MAXN - DYNFREE(Markers, Markers_sz); - DYNFREE(MarkHitVtx, MarkHitVtx_sz); - DYNFREE(NghCounts, NghCounts_sz); - DYNFREE(SplCls, SplCls_sz); - DYNFREE(SplCnt, SplCnt_sz); - DYNFREE(SplPos, SplPos_sz); - DYNFREE(StackMarkers, StackMarkers_sz); - DYNFREE(TheTrace, TheTrace_sz); - DYNFREE(TheTraceCC, TheTraceCC_sz); - DYNFREE(TheTraceSplNum, TheTraceSplNum_sz); - DYNFREE(TheTraceSteps, TheTraceSteps_sz); - DYNFREE(WorkArray2, WorkArray2_sz); - DYNFREE(WorkArray3, WorkArray3_sz); - DYNFREE(WorkArray4, WorkArray4_sz); - DYNFREE(WorkArray5, WorkArray5_sz); - DYNFREE(Spine, Spine_sz); -#endif -} - -int traces_refine_refine(sparsegraph *sg, - Candidate *Cand, - int m, - int n, - Partition *Part, - struct TracesVars* tv, - struct TracesInfo *ti) -{ - int i, j, k, sc, ind0, ind1, ind2, ind3, ind4, jk, labi; - int value, iend, newcell; - int HitClsInd, SplInd, SplCntInd, CStackInd, TraceInd, TraceCCInd, TraceStepsInd; - size_t j1, iend1; - unsigned int longcode; - int newtrace = FALSE; - int Sparse = TRUE; - int *lab, *cls, *InvLab, *TracePos, *SplitCell, *LabCell, TraceEnd, Traceccend, Tracestpend; - int BigCell, BigCellPos, BigCellSize; - boolean TraceCell = FALSE; - int *nghb; - - if (tv->stackmark > (NAUTY_INFINITY-2)) { - memset(StackMarkers, 0, n*sizeof(int)); - tv->stackmark = 0; - } - tv->stackmark++; - - TraceEnd = Part->active = Part->cells; - Traceccend = 0; - Tracestpend = 0; - TraceCCInd = 0; - TraceStepsInd = 0; - - lab = Cand->lab; - InvLab = Cand->invlab; - cls = Part->cls; - - UPDATEMIN(Part->active, n-1); - memcpy(CStack+1, TheTrace, (Part->active)*sizeof(int)); - CStackInd = Part->active; - for (i = 1; i <= CStackInd; i++) { - StackMarkers[CStack[i]] = tv->stackmark; - } - - longcode = Part->cells; - TraceInd = Part->active; - - newtrace = TRUE; - - while (CStackInd > 0) - { - - if (tv->mark > (NAUTY_INFINITY-2)) { - memset(Markers, 0, n*sizeof(int)); - memset(MarkHitVtx, 0, n*sizeof(int)); - tv->mark = 0; - } - tv->mark++; - - if (Part->cells == n) break; - - j = CStackInd; - k = CStackInd; - while (--j > 0) { - if (cls[CStack[j]] < cls[CStack[k]]) { - k = j; - } - if ((cls[CStack[k]] == 1) || (j < CStackInd - 12)) { - break; - } - } - - ind0 = CStack[k]; - ind2 = ind0+cls[ind0]; - CStack[k] = CStack[CStackInd--]; - StackMarkers[ind0] = 0; - if (!newtrace) { - TraceCell = ((ind0 == TheTraceCC[TraceCCInd]) && (TraceCCInd < Traceccend)); - } - /* Analysis of occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is built */ - if (cls[ind0] == 1) { /* SINGLETON CURRENT CELL CASE */ - HitClsInd = 0; - j1 = sg->v[lab[ind0]]; - iend1 = j1+sg->d[lab[ind0]]; - - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - ElmHitCll[value] = value; - } - HitVtx[ElmHitCll[value]++] = k; - } - } - tv->mark++; - - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ElmHitCll[ind1] -= ind1; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = ind1; - } - } - - if (SplInd) { - if (newtrace) { - TheTraceCC[TraceCCInd] = ind0; - } - TRACE_CHECK(TheTraceSplNum, TraceCCInd, SplInd, &Traceccend) - - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (j = 0; j < SplInd; j++) { - ind1 = SplCls[j]; - i = ind1+cls[ind1]-ElmHitCll[ind1]; - TRACE_CHECK(TheTrace, TraceInd, i, &TraceEnd) - } - - /* REARRANGE THE CELLS */ - for (j = 0; j < SplInd; j++) { - ind1 = SplCls[j]; - cls[ind1] = cls[ind1]-ElmHitCll[ind1]; - newcell = ind1+cls[ind1]; - cls[newcell] = ElmHitCll[ind1]; - Part->cells++; - - if (StackMarkers[ind1] != tv->stackmark) { - if (cls[newcell] < cls[ind1]) { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - else { - CStack[++CStackInd] = ind1; - StackMarkers[ind1] = tv->stackmark; - } - } - else { - CStack[++CStackInd] = newcell; - StackMarkers[newcell] = tv->stackmark; - } - - SplitCell = HitVtx+ind1; - ind3 = cls[newcell]; - LabCell = lab+newcell; - - for (jk = 0; jk < ind3; jk++) { - k = SplitCell[jk]; - i = LabCell[jk]; - Part->inv[newcell+jk] = newcell; - lab[InvLab[k]] = i; - InvLab[i] = InvLab[k]; - LabCell[jk] = k; - InvLab[k] = newcell+jk; - } - } - } - else { - if ((!newtrace) && TraceCell) { - return 0; - } - } - - } - else { - if (ti->thegraphisparse) { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - ElmHitCll[0] = 0; - for (i = 0; i < n; i++) { - if (sg->d[i]) { - HitVtx[ElmHitCll[0]++] = i; - } - } - } - else { - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - labi = lab[i]; - nghb = sg->e+sg->v[labi]; - j = sg->d[labi]; - for (; j--;) { - k = nghb[j]; - if (MarkHitVtx[k] == tv->mark) { - NghCounts[k]++; - } - else { - value = Part->inv[InvLab[k]]; - if (cls[value] > 1) { - MarkHitVtx[k] = tv->mark; - NghCounts[k] = 1; - if (Markers[value] != tv->mark) { - HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - HitVtx[value] = k; - ElmHitCll[value] = 1; - } - else { - HitVtx[value+ElmHitCll[value]++] = k; - } - } - } - } - } - } - - tv->mark++; - - SplInd = 0; - SplCls[0] = n; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - if ((ElmHitCll[ind1] > 0) && (ElmHitCll[ind1] < cls[ind1])) { - SplCls[SplInd++] = HitCls[j]; - } - else { - ind2 = ind1+cls[ind1]; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - break; - } - } - } - } - - if (SplInd) { - if (newtrace) { - TheTraceCC[TraceCCInd] = ind0; - } - TRACE_CHECK(TheTraceSplNum, TraceCCInd, SplInd, &Traceccend) - - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (sc = 0; sc < SplInd; sc++) { /* For each cell C to be split */ - ind0 = SplCls[sc]; - ind1 = ind0 + cls[ind0]; - SplCntInd = 0; - if (ElmHitCll[ind0] < cls[ind0]) { - SplCnt[SplCntInd++] = 0; - SplPos[0] = cls[ind0] - ElmHitCll[ind0]; - } - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = NghCounts[HitVtx[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - tv->mark++; - - if (SplCntInd) { - TRACE_CHECK(TheTraceSteps, TraceStepsInd, SplCntInd, &Tracestpend) - } - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - TRACE_CHECK(TheTrace, TraceInd, i, &TraceEnd) - } - } - - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - /* Permute elements of the cell C */ - iend = ind0 + ElmHitCll[ind0]; - for (i = ind0; i < iend; i++) { - value = HitVtx[i]; - j = SplPos[NghCounts[value]]++; /* where HitVtx[i] goes */ - k = InvLab[value]; /* where HitVtx[i] is in lab */ - lab[k] = lab[j]; - lab[j] = value; - InvLab[value] = j; - InvLab[lab[k]] = k; - NghCounts[value] = 0; - } - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind1 - ElmHitCll[ind0]; - i = newcell; - ind2 = newcell+cls[newcell]-1; - do { - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - } - } - else { - if ((!newtrace) && TraceCell) { - return 0; - } - } - - } - else { - if (sg->d[lab[ind0]] > n/cls[ind0]) { - Sparse = FALSE; - } - else { - Sparse = TRUE; - } - if (Sparse) { - /* Counting occurrences of neighbors of the current cell */ - /* The list of cells with neighbors in the current cell is also built */ - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - HitCls[0] = 0; - HitClsInd = 1; - } - else { - memset(NghCounts, 0, n*sizeof(int)); - HitClsInd = 0; - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - value = Part->inv[InvLab[k]]; - if (Markers[value] != tv->mark) { - if (cls[value] > 1) HitCls[HitClsInd++] = value; - Markers[value] = tv->mark; - } - } - } - } - - tv->mark++; - - SplInd = 0; - for (j = 0; j < HitClsInd; j++) { - ind1 = HitCls[j]; - ind2 = ind1+cls[ind1]; - value = NghCounts[lab[ind1++]]; - for (i = ind1; i < ind2; i++) - { - if (NghCounts[lab[i]] != value) - { - SplCls[SplInd++] = HitCls[j]; - break; - } - } - } - - if (SplInd) { - if (newtrace) { - TheTraceCC[TraceCCInd] = ind0; - } - TRACE_CHECK(TheTraceSplNum, TraceCCInd, SplInd, &Traceccend) - - /* Sorting the cells to be split */ - switch (SplInd) { - case 0: - case 1: - break; - case 2: - if (SplCls[0] > SplCls[1]) { - value = SplCls[0]; - SplCls[0] = SplCls[1]; - SplCls[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplInd; ++k) { - value = SplCls[k]; - i = k - 1; - while ((i >= 0) && (value < SplCls[i])) { - SplCls[i + 1] = SplCls[i]; - --i; - } - SplCls[i + 1] = value; - } - break; - default: - quickSort(SplCls, SplInd); - break; - } - - for (j = 0; j < SplInd; j++) { /* For each cell C to be split */ - ind0 = SplCls[j]; - ind1 = ind0+cls[ind0]; - SplCntInd = 0; - - /* According to the numbers of neighbors of C into the current cell */ - /* compute how many vertices in C will be placed into the same new cell */ - for (i = ind0; i < ind1; i++) { - value = NghCounts[lab[i]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - tv->mark++; - - if (SplCntInd) { - TRACE_CHECK(TheTraceSteps, TraceStepsInd, SplCntInd, &Tracestpend) - } - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind0; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind0] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - TRACE_CHECK(TheTrace, TraceInd, i, &TraceEnd) - } - } - - if ((StackMarkers[ind0] != tv->stackmark) && (BigCell != ind0)) { - CStack[BigCellPos] = ind0; - StackMarkers[BigCell] = 0; - StackMarkers[ind0] = tv->stackmark; - } - - /* Permute elements of the cell C */ - i = ind0; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind0; - i = ind0; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - } - } - else { - if ((!newtrace) && TraceCell) { - return 0; - } - } - - } - else { - if (cls[ind0] == n) { - memcpy(NghCounts, sg->d, n*sizeof(int)); - } - else { - memset(NghCounts, 0, n*sizeof(int)); - - for (i = ind0; i < ind2; i++) { - j1 = sg->v[lab[i]]; - iend1 = j1+sg->d[lab[i]]; - for (; j1 < iend1; ++j1) { - k = sg->e[j1]; - (NghCounts[k])++; - } - } - } - SplInd = 0; - ind4 = 0; - while (ind4 < n) { /* For each cell C with size(C) > 1 */ - ind1 = ind4+cls[ind4]; - if (cls[ind4] > 1) { - - /* Determine whether C must be split */ - SplCntInd = 0; - value = NghCounts[lab[ind4]]; - for (i = ind4+1; i < ind1; i++) { - if (NghCounts[lab[i]] != value) - { - SplInd++; - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = i-ind4; - do { - value = NghCounts[lab[i++]]; - if (Markers[value] != tv->mark) { - Markers[value] = tv->mark; - SplCnt[SplCntInd++] = value; - SplPos[value] = 1; - } - else { - SplPos[value]++; - } - } - while(i != ind1); - break; - } - } - tv->mark++; - - if (SplCntInd) { - TRACE_CHECK(TheTraceSteps, TraceStepsInd, SplCntInd, &Tracestpend) - - /* Sort the values deriving from the previous step */ - switch (SplCntInd) { - case 0: - case 1: - break; - case 2: - if (SplCnt[0] > SplCnt[1]) { - value = SplCnt[0]; - SplCnt[0] = SplCnt[1]; - SplCnt[1] = value; - } - break; - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - for (k = 1; k < SplCntInd; ++k) { - value = SplCnt[k]; - i = k - 1; - while ((i >= 0) && (value < SplCnt[i])) { - SplCnt[i + 1] = SplCnt[i]; - --i; - } - SplCnt[i + 1] = value; - } - break; - default: - quickSort(SplCnt, SplCntInd); - break; - } - - Part->cells += SplCntInd-1; - - /* Split the cell C and update the information for sizes of new cells */ - /* Put the new cells into the stack */ - i = ind4; - if (StackMarkers[i] != tv->stackmark) { - BigCellSize = 0; - } - for (k = 0; k < SplCntInd; k++) { - value = SplPos[SplCnt[k]]; - cls[i] = value; - if ((StackMarkers[ind4] != tv->stackmark) && (value > BigCellSize)) { - BigCell = i; - BigCellPos = CStackInd; - BigCellSize = cls[i]; - } - SplPos[SplCnt[k]] = i; - i += value; - if (i < ind1) { - CStack[++CStackInd] = i; - StackMarkers[i] = tv->stackmark; - TRACE_CHECK(TheTrace, TraceInd, i, &TraceEnd) - } - } - if ((StackMarkers[ind4] != tv->stackmark) && (BigCell != ind4)) { - CStack[BigCellPos] = ind4; - StackMarkers[BigCell] = 0; - StackMarkers[ind4] = tv->stackmark; - } - - /* Permute elements of the cell C */ - i = ind4; - do { - SplCnt[SplPos[NghCounts[lab[i]]]++] = lab[i]; - } - while(++i < ind1); - - /* Reconstruct the cell C and update the inverse partition */ - newcell = ind4; - i = ind4; - ind2 = newcell+cls[newcell]-1; - do { - lab[i] = SplCnt[i]; - InvLab[lab[i]] = i; - Part->inv[i] = newcell; - if (i == ind2) { - newcell = i+1; - if (newcell < n) ind2 = newcell+cls[newcell]-1; - } - } - while (++i < ind1); - } - } - ind4 = ind1; - } - - if (SplInd) { - if (newtrace) { - TheTraceCC[TraceCCInd] = ind0; - } - TheTraceSplNum[TraceCCInd] = SplInd; - TraceCCInd++; - } - else { - if ((!newtrace) && TraceCell) { - return 0; - } - } - - } - } - } - } /* end while (CStackInd > 0) */ - - for (i=0; i < TraceInd; i++) { - ind0 = TheTrace[i]; - longcode = MASHNONCOMM(longcode, Part->inv[ind0]); - j1 = sg->v[lab[ind0]]; - iend1 = j1+sg->d[lab[ind0]]; - for (; j1 < iend1; ++j1) { - value = Part->inv[InvLab[sg->e[j1]]]; - longcode = MASHCOMM(longcode, value); - } - } - Part->code = Cand->code = CLEANUP(longcode); - return TraceInd; -} - -void CopyVect(int *from, int *to, int u, int n) -{ - int i; - for (i = u; i= 0) { - L = beg[i]; - R = end[i]-1; - if (L= piv && Lend[i-1]-beg[i-1]) { - swap = beg[i]; - beg[i] = beg[i-1]; - beg[i-1] = swap; - swap = end[i]; - end[i] = end[i-1]; - end[i-1] = swap; - } - } - else { - i--; - } - } - for (k = 1; k < elements; ++k) { - value = arr[k]; - i = k - 1; - while ((i >= 0) && (value < arr[i])) { - arr[i + 1] = arr[i]; - --i; - } - arr[i + 1] = value; - } -} - -struct Candidate *NewCandidate(int n, Candidate **GarbList, int Mrk) -{ - struct Candidate *Cand; - - if (*GarbList) { - Cand = *GarbList; - *GarbList = (*GarbList)->next; - } - else { - Cand = malloc(sizeof(*Cand)); - if (Cand == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - Cand->lab = malloc(n*sizeof(*Cand->lab)); - if (Cand->lab == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - Cand->invlab = malloc(n*sizeof(*Cand->invlab)); - if (Cand->invlab == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - } - Cand->do_it = Mrk; - Cand->indnum = 0; - Cand->code = 0; - Cand->next = NULL; - Cand->stnode = NULL; - Cand->sortedlab = FALSE; - return Cand; -} - -int FreeList(Candidate *List, int cond) -{ - Candidate *Temp; - int conta = 0; - int conta1 = 0; - while (List) { - if (List->do_it == cond) { - conta1++; - } - conta++; - Temp = List; - if (List->lab) free(List->lab); - if (List->invlab) free(List->invlab); - List = List->next; - free(Temp); - } - - if (cond) { - return conta1; - } - else { - return conta; - } -} - -int FixBase(int *fix, struct TracesVars *tv, Candidate *Cand, int from, int to) -{ - int i, j, k, go, nfix; - nfix = j = 0; - go = TRUE; - for (i = from; i < to; i++) { - k = Cand->lab[Spine[i+1].tgtpos]; - if (go && (nfix < tv->nfix) && (fix[nfix] == k)) { - j++; - } - else { - fix[nfix] = k; - if (go) go = FALSE; - } - nfix++; - } - tv->nfix = nfix; - return j; -} - -void -traces_freedyn(void) -{ - /* Free the static dynamic memory used by Traces */ -#if !MAXN - DYNFREE(AUTPERM, AUTPERM_sz); - DYNFREE(BreakSteps, BreakSteps_sz); - DYNFREE(CurrOrbSize, CurrOrbSize_sz); - DYNFREE(CurrRefCells, CurrRefCells_sz); - DYNFREE(fix, fix_sz); - DYNFREE(IDENTITY_PERM, IDENTITY_PERM_sz); - DYNFREE(Markers, Markers_sz); - DYNFREE(MarkHitVtx, MarkHitVtx_sz); - DYNFREE(MultRefCells, MultRefCells_sz); - DYNFREE(NghCounts, NghCounts_sz); - DYNFREE(OrbSize, OrbSize_sz); - DYNFREE(RefCells, RefCells_sz); - DYNFREE(RefPath, RefPath_sz); - DYNFREE(Spine, Spine_sz); - DYNFREE(SplCls, SplCls_sz); - DYNFREE(SplCnt, SplCnt_sz); - DYNFREE(SplPos, SplPos_sz); - DYNFREE(StackMarkers, StackMarkers_sz); - DYNFREE(TheTrace, TheTrace_sz); - DYNFREE(TheTraceCC, TheTraceCC_sz); - DYNFREE(TheTraceSplNum, TheTraceSplNum_sz); - DYNFREE(TheTraceSteps, TheTraceSteps_sz); - DYNFREE(TreeStack, TreeStack_sz); - DYNFREE(TrieArray, TrieArray_sz); - DYNFREE(TEMPLAB, TEMPLAB_sz); - DYNFREE(TEMPINVLAB, TEMPINVLAB_sz); - DYNFREE(WorkArray, WorkArray_sz); - DYNFREE(WorkArray1, WorkArray1_sz); - DYNFREE(WorkArray2, WorkArray2_sz); - DYNFREE(WorkArray3, WorkArray3_sz); - DYNFREE(WorkArray4, WorkArray4_sz); - DYNFREE(WorkArray5, WorkArray5_sz); -#endif -} - -void factorial(double *size1, int *size2, int k) -{ - int i; - for(i = k; i; i--) { - MULTIPLY(*size1, *size2, i); - } -} - -void factorial2(double *size1, int *size2, int k) -{ - int i; - for(i = k; i; i -= 2) { - MULTIPLY(*size1, *size2, i); - } -} - -int CheckForAutomorphisms(sparsegraph *g_arg, Candidate *CurrCand, Candidate *NextCand, - struct TracesVars* tv, struct TracesInfo* ti, - int m, int n, Partition* Part) -{ - Candidate *CheckAutList; - int i, j, tgt_level; - int CheckLevel, CheckLevelEnd; - int temp, tmp, tmp1; - int start, start1, step, step1, prev, prev1, ngh1, ngh2; - searchtrie *TrieCandFrom, *TrieCheckFrom; - - tv->gotonode = NULL; - CheckLevel = 0; - CheckLevelEnd = 0; - temp = 0; - - switch (tv->compstage) { - case 0: - if (tv->strategy) { - CheckLevel = CheckLevelEnd = tv->maxtreelevel; - } - else { - if ((Spine[tv->tolevel].part)->cells == tv->finalnumcells) { - CheckLevel = CheckLevelEnd = tv->maxtreelevel; - } - else { - CheckLevel = 1; - if ((Spine[tv->maxtreelevel].part)->cells == tv->finalnumcells) { - CheckLevelEnd = tv->maxtreelevel - 1; - } - else { - CheckLevelEnd = tv->maxtreelevel; - } - } - } - break; - case 1: - CheckLevel = CheckLevelEnd = tv->tolevel; - break; - case 2: - if (m || (tv->tolevel == tv->maxtreelevel+1)) { - CheckLevel = CheckLevelEnd = tv->maxtreelevel+1; - } - else { - CheckLevel = 1; - if ((Spine[tv->maxtreelevel].part)->cells == tv->finalnumcells) { - CheckLevelEnd = tv->maxtreelevel - 1; - } - else { - CheckLevelEnd = tv->maxtreelevel; - } - } - break; - default: - break; - } - - while (CheckLevel <= CheckLevelEnd) { - CheckAutList = Spine[CheckLevel].liststart; - while (CheckAutList) { - if (CheckAutList->do_it && lookup(CheckAutList->stnode) && (CheckAutList != NextCand) && (CheckAutList != CurrCand)) { - if (CheckAutList->code == NextCand->code) { - if (Part->cells == n) { - for (i = 0; i < n; i++) { - AUTPERM[NextCand->lab[i]] = CheckAutList->lab[i]; - } - } - else { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - SETMARK(Markers, tv->mark) - for (i=0; icls[i]) { - if (Part->cls[i] == 1) { - AUTPERM[NextCand->lab[i]] = CheckAutList->lab[i]; - } - else { - for (j=i; jcls[i]; j++) { - tmp = CheckAutList->lab[j]; - if (g_arg->d[tmp] == 2) { - ngh1 = g_arg->e[g_arg->v[tmp]]; - ngh2 = g_arg->e[g_arg->v[tmp]+1]; - if ((Markers[tmp] != tv->mark) && ((g_arg->d[ngh1] > 2) || ((g_arg->d[ngh2] > 2)))) { - tmp1 = NextCand->lab[j]; - if ((g_arg->d[ngh1] > 2) && ((g_arg->d[ngh2] > 2))) { - if (Part->inv[CheckAutList->invlab[ngh1]] < Part->inv[CheckAutList->invlab[ngh2]]) { - start = ngh1; - start1 = NextCand->lab[CheckAutList->invlab[ngh1]]; - } else { - start = ngh2; - start1 = NextCand->lab[CheckAutList->invlab[ngh2]]; - } - } - else { - if (g_arg->d[ngh1] > 2) { - start = ngh1; - start1 = NextCand->lab[CheckAutList->invlab[ngh1]]; - } - else { - start = ngh2; - start1 = NextCand->lab[CheckAutList->invlab[ngh2]]; - } - } - step = tmp; - step1 = tmp1; - if (Markers[step] != tv->mark) { - prev = start; - prev1 = start1; - AUTPERM[start1] = start; - do { - Markers[step] = tv->mark; - AUTPERM[step1] = step; - if (g_arg->e[g_arg->v[step]] != prev) { - prev = step; - step = g_arg->e[g_arg->v[step]]; - } else { - prev = step; - step = g_arg->e[g_arg->v[step]+1]; - } - if (g_arg->e[g_arg->v[step1]] != prev1) { - prev1 = step1; - step1 = g_arg->e[g_arg->v[step1]]; - } else { - prev1 = step1; - step1 = g_arg->e[g_arg->v[step1]+1]; - } - } while (g_arg->d[step] == 2); - AUTPERM[step1] = step; - } - } - } - else { - if ((g_arg->d[tmp] == 1) && (g_arg->d[g_arg->e[g_arg->v[tmp]]] > 2)) { - AUTPERM[NextCand->lab[j]] = CheckAutList->lab[j]; - } - } - } - } - } - } - if (isautom_sg((graph*)g_arg, AUTPERM, tv->options->digraph, m, n)) { - if (!findperm(gensB, AUTPERM, n, tv)) { - if (tv->options->verbosity >= 2) tv->schreier3 -= CPUTIME; - addgenerator(&gpB, &gensB, AUTPERM, n); - if (tv->options->verbosity >= 2) tv->schreier3 += CPUTIME; - if (tv->options->verbosity >= 2) { - fprintf(outfile, "[A (%d, %d)] ", CheckLevel, CheckAutList->name); - } - tv->stats->numgenerators++; - tv->stats->numorbits = orbjoin(tv->orbits, AUTPERM, n); - - ti->thegrouphaschanged = TRUE; - ti->identitygroup = FALSE; - if (tv->options->verbosity >= 2 && tv->options->writeautoms) { - PRINT_RETURN - } - if (tv->options->writeautoms) { - fprintf(outfile, "Gen #%d: ", tv->stats->numgenerators); - writeperm(outfile, AUTPERM, tv->options->cartesian, tv->options->linelength, n); - } - if (tv->options->userautomproc) { - (*tv->options->userautomproc)(tv->stats->numgenerators, AUTPERM, n); - } - } - else { - if (tv->options->verbosity >= 2) { - fprintf(outfile, "[A* (%d, %d)] ", CheckLevel, CheckAutList->name); - } - } - TrieCandFrom = NULL; - TrieCheckFrom = CheckAutList->stnode; - if (CurrCand->stnode->level <= 1) { - tgt_level = CurrCand->stnode->level + 1; - while (TrieCheckFrom->level > tgt_level) { - TrieCheckFrom = TrieCheckFrom->father; - } - } - else { - if (tv->tolevel <= TrieCheckFrom->level) { - tgt_level = tv->tolevel; - while (TrieCheckFrom->level != tgt_level) { - TrieCheckFrom = TrieCheckFrom->father; - } - } else { - TrieCandFrom = CurrCand->stnode; - tgt_level = TrieCheckFrom->level; - while (TrieCandFrom->level != tgt_level) { - TrieCandFrom = TrieCandFrom->father; - } - } - } - if (TrieCandFrom) { - while (TrieCandFrom->father != TrieCheckFrom->father) { - TrieCandFrom = TrieCandFrom->father; - TrieCheckFrom = TrieCheckFrom->father; - } - } - else { - if ((TrieCheckFrom->level > 1) && (TrieCheckFrom->father != CurrCand->stnode)) { - TrieCandFrom = CurrCand->stnode; - TrieCheckFrom = TrieCheckFrom->father; - while (TrieCandFrom->father != TrieCheckFrom->father) { - TrieCandFrom = TrieCandFrom->father; - TrieCheckFrom = TrieCheckFrom->father; - } - } - } - - while (TrieCheckFrom->goes_to) { - TrieCheckFrom = TrieCheckFrom->goes_to; - } - - for (temp=1; temp<=tv->tolevel; temp++) { - if (CheckAutList->lab[Spine[temp].tgtpos] != NextCand->lab[Spine[temp].tgtpos]) { - break; - } - } - if ((temp == tv->tolevel) && TempOrbits) { - orbjoin(TempOrbits, AUTPERM, n); - } - switch (tv->compstage) { - case 0: - if (tv->strategy && (tv->steps == 1)) { - RemoveFromLevel(temp, tv->maxtreelevel-1, tv->strategy, FALSE); - if (TrieCandFrom) { - TrieCheckFrom->index += TrieCandFrom->index; - TrieCandFrom->goes_to = TrieCheckFrom; - } - else TrieCheckFrom->index++; - NextCand->do_it = FALSE; - } - else { - if (CheckAutList->lab[Spine[temp].tgtpos] >= NextCand->lab[Spine[temp].tgtpos]) { - CheckAutList->do_it = FALSE; - if (TrieCandFrom) { - TrieCandFrom->index += TrieCheckFrom->index; - tv->newindex = 0; - TrieCheckFrom->goes_to = TrieCandFrom; - } - else { - if (CurrCand->stnode->level > 1) { - tv->newgotonode = TrieCheckFrom; - tv->newindex = TrieCheckFrom->index; - } - else { - tv->newgotonode = NULL; - tv->newindex = 0; - } - } - } - else { - if (TrieCandFrom) { - TrieCheckFrom->index += TrieCandFrom->index; - TrieCandFrom->goes_to = TrieCheckFrom; - } else { - TrieCheckFrom->index++; - } - NextCand->do_it = FALSE; - } - } - break; - case 1: - TrieCheckFrom->index ++; - tv->gotonode = TrieCheckFrom; - break; - case 2: - if (TrieCandFrom) { - TrieCheckFrom->index += TrieCandFrom->index; - TrieCandFrom->goes_to = TrieCheckFrom; - } - else { - TrieCheckFrom->index++; - } - if (temp == tv->maxtreelevel) { - tmp1 = TempOrbits[NextCand->lab[Spine[temp].tgtpos]]; - for (i=1; ilab[Spine[temp].tgtpos]]; - } - break; - default: - break; - } - return temp; - } - } - } - CheckAutList = CheckAutList->next; - } - CheckLevel++; - } - return FALSE; -} - -int CheckForSingAutomorphisms(sparsegraph *g_arg, Candidate *CurrCand, Partition *NextPart, Candidate *NextCand, - struct TracesVars* tv, struct TracesInfo* ti, - int m, int n) -{ - int i, temp, tmp, tmp1, result, tgt_level; - TracesSpine *SpineTL; - Candidate *CheckAutList; - searchtrie *TrieCandFrom, *TrieCheckFrom; - - SpineTL = Spine+tv->tolevel; - CheckAutList = SpineTL->liststart; - tv->gotonode = NULL; - - result = 0; - while (CheckAutList != NULL) { - if (CheckAutList->do_it && (CheckAutList->stnode->father == CurrCand->stnode)) { - if (CheckAutList->firstsingcode == NextCand->firstsingcode) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - if ((tv->tolevel == 1) && (Spine[0].part->cells == 1)) tmp = 2; else tmp = tv->tolevel; - - if (TreeFyTwo(g_arg, tmp, tv->tolevel_tl, CheckAutList, NextCand, NextPart, n, tv, ti)) { - if (isautom_sg((graph*)g_arg, AUTPERM, tv->options->digraph, m, n)) { - if (!findperm(gensB, AUTPERM, n, tv)) { - if (tv->options->verbosity >= 2) tv->schreier3 -= CPUTIME; - addgenerator(&gpB, &gensB, AUTPERM, n); - if (tv->options->verbosity >= 2) tv->schreier3 += CPUTIME; - result = CheckAutList->name; - if (TempOrbits) orbjoin(TempOrbits, AUTPERM, n); - tv->stats->numgenerators++; - tv->stats->numorbits = orbjoin(tv->orbits, AUTPERM, n); - ti->thegrouphaschanged = TRUE; - ti->identitygroup = FALSE; - if (tv->options->verbosity >= 2) fprintf(outfile, "[a(%d)] ", CheckAutList->name); - if (tv->options->verbosity >= 2 && tv->options->writeautoms) { - PRINT_RETURN - } - if (tv->options->writeautoms) { - fprintf(outfile, "Gen #%d: ", tv->stats->numgenerators); - writeperm(outfile, AUTPERM, tv->options->cartesian, tv->options->linelength, n); - } - if (tv->options->userautomproc) { - (*tv->options->userautomproc)(tv->stats->numgenerators, AUTPERM, n); - } - } - else { - if (tv->options->verbosity >= 2) { - fprintf(outfile, "[a*]"); - } - if (TempOrbits) orbjoin(TempOrbits, AUTPERM, n); - result = -CheckAutList->name; - } - - - - TrieCandFrom = NULL; - TrieCheckFrom = CheckAutList->stnode; - if (CurrCand->stnode->level <= 1) { - tgt_level = CurrCand->stnode->level + 1; - while (TrieCheckFrom->level > tgt_level) { - TrieCheckFrom = TrieCheckFrom->father; - } - } - else { - if (tv->tolevel <= TrieCheckFrom->level) { - tgt_level = tv->tolevel; - while (TrieCheckFrom->level != tgt_level) { - TrieCheckFrom = TrieCheckFrom->father; - } - } else { - TrieCandFrom = CurrCand->stnode; - tgt_level = TrieCheckFrom->level; - while (TrieCandFrom->level != tgt_level) { - TrieCandFrom = TrieCandFrom->father; - } - } - } - if (TrieCandFrom) { - while (TrieCandFrom->father != TrieCheckFrom->father) { - TrieCandFrom = TrieCandFrom->father; - TrieCheckFrom = TrieCheckFrom->father; - } - } - else { - if ((TrieCheckFrom->level > 1) && (TrieCheckFrom->father != CurrCand->stnode)) { - TrieCandFrom = CurrCand->stnode; - TrieCheckFrom = TrieCheckFrom->father; - while (TrieCandFrom->father != TrieCheckFrom->father) { - TrieCandFrom = TrieCandFrom->father; - TrieCheckFrom = TrieCheckFrom->father; - } - } - } - - while (TrieCheckFrom->goes_to) { - TrieCheckFrom = TrieCheckFrom->goes_to; - } - - - - - for (temp=1; temp<=tv->tolevel; temp++) { - if (CheckAutList->lab[Spine[temp].tgtpos] != NextCand->lab[Spine[temp].tgtpos]) { - break; - } - } - - switch (tv->compstage) { - case 0: - if (tv->strategy && (tv->steps == 1)) { - RemoveFromLevel(temp, tv->maxtreelevel-1, tv->strategy, FALSE); - if (TrieCandFrom) { - TrieCheckFrom->index += TrieCandFrom->index; - TrieCandFrom->goes_to = TrieCheckFrom; - } - else TrieCheckFrom->index++; - NextCand->do_it = FALSE; - } - else { - if (CheckAutList->lab[Spine[temp].tgtpos] >= NextCand->lab[Spine[temp].tgtpos]) { - CheckAutList->do_it = FALSE; - if (TrieCandFrom) { - TrieCandFrom->index += TrieCheckFrom->index; - tv->newindex = 0; - TrieCheckFrom->goes_to = TrieCandFrom; - } else { - if (CurrCand->stnode->level > 1) { - tv->newgotonode = TrieCheckFrom; - tv->newindex = TrieCheckFrom->index; - } - else { - tv->newgotonode = NULL; - tv->newindex = 0; - } - } - } - else { - if (TrieCandFrom) { - TrieCheckFrom->index += TrieCandFrom->index; - TrieCandFrom->goes_to = TrieCheckFrom; - } else { - TrieCheckFrom->index++; - } - NextCand->do_it = FALSE; - } - } - break; - case 1: - TrieCheckFrom->index ++; - tv->gotonode = TrieCheckFrom; - break; - case 2: - if (TrieCandFrom) { - TrieCheckFrom->index += TrieCandFrom->index; - TrieCandFrom->goes_to = TrieCheckFrom; - } else { - TrieCheckFrom->index++; - } - if (temp == tv->maxtreelevel) { - tmp1 = TempOrbits[NextCand->lab[Spine[temp].tgtpos]]; - for (i=1; ilab[Spine[temp].tgtpos]]; - } - break; - default: - break; - } - - return result; - } - } - } - } - CheckAutList = CheckAutList->next; - } - return result; -} - -int CheckForMatching(sparsegraph *g_arg, Candidate *CurrCand, Candidate *NextCand, Partition *Part, struct TracesVars* tv, struct TracesInfo* ti, int m, int n) -{ - int i, vtx, temp, tmp1, result, tgt_level; - TracesSpine *SpineTL; - Candidate *CheckAutList; - int *cls; - searchtrie *TrieCandFrom, *TrieCheckFrom; - - tv->gotonode = NULL; - SpineTL = Spine+tv->tolevel; - CheckAutList = SpineTL->liststart; - cls = Part->cls; - - while (CheckAutList != NULL) { - if (CheckAutList->do_it && (CheckAutList->singcode == NextCand->singcode)) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (i=0; ilab[i]; - if ((cls[i] == 1) && (cls[Part->inv[CheckAutList->invlab[vtx]]] == 1)) { - AUTPERM[vtx] = CheckAutList->lab[i]; - } - else { - if ((CheckAutList->invlab[vtx]invlab[vtx]>=i+cls[i])) { - break; - } - } - } - if (i==n && (isautom_sg((graph*)g_arg, AUTPERM, tv->options->digraph, m, n))) { - - if (!findperm(gensB, AUTPERM, n, tv)) { - if (tv->options->verbosity >= 2) tv->schreier3 -= CPUTIME; - addgenerator(&gpB, &gensB, AUTPERM, n); - if (tv->options->verbosity >= 2) tv->schreier3 += CPUTIME; - result = CheckAutList->name; - if (TempOrbits) orbjoin(TempOrbits, AUTPERM, n); - tv->stats->numgenerators++; - tv->stats->numorbits = orbjoin(tv->orbits, AUTPERM, n); - ti->thegrouphaschanged = TRUE; - ti->identitygroup = FALSE; - if (tv->options->verbosity >= 2) fprintf(outfile, "[M(%d)] ", CheckAutList->name); - if (tv->options->verbosity >= 2 && tv->options->writeautoms) { - PRINT_RETURN - } - if (tv->options->writeautoms) { - fprintf(outfile, "Gen #%d: ", tv->stats->numgenerators); - writeperm(outfile, AUTPERM, tv->options->cartesian, tv->options->linelength, n); - } - if (tv->options->userautomproc) { - (*tv->options->userautomproc)(tv->stats->numgenerators, AUTPERM, n); - } - } - else { - if (tv->options->verbosity >= 2) { - fprintf(outfile, "[M*]"); - } - if (TempOrbits) orbjoin(TempOrbits, AUTPERM, n); - result = -CheckAutList->name; - } - - TrieCandFrom = NULL; - TrieCheckFrom = CheckAutList->stnode; - if (CurrCand->stnode->level <= 1) { - tgt_level = CurrCand->stnode->level + 1; - while (TrieCheckFrom->level > tgt_level) { - TrieCheckFrom = TrieCheckFrom->father; - } - } - else { - if (tv->tolevel <= TrieCheckFrom->level) { - tgt_level = tv->tolevel; - while (TrieCheckFrom->level != tgt_level) { - TrieCheckFrom = TrieCheckFrom->father; - } - } else { - TrieCandFrom = CurrCand->stnode; - tgt_level = TrieCheckFrom->level; - while (TrieCandFrom->level != tgt_level) { - TrieCandFrom = TrieCandFrom->father; - } - } - } - if (TrieCandFrom) { - while (TrieCandFrom->father != TrieCheckFrom->father) { - TrieCandFrom = TrieCandFrom->father; - TrieCheckFrom = TrieCheckFrom->father; - } - } - else { - if ((TrieCheckFrom->level > 1) && (TrieCheckFrom->father != CurrCand->stnode)) { - TrieCandFrom = CurrCand->stnode; - TrieCheckFrom = TrieCheckFrom->father; - while (TrieCandFrom->father != TrieCheckFrom->father) { - TrieCandFrom = TrieCandFrom->father; - TrieCheckFrom = TrieCheckFrom->father; - } - } - } - - while (TrieCheckFrom->goes_to) { - TrieCheckFrom = TrieCheckFrom->goes_to; - } - - for (temp=1; temp<=tv->tolevel; temp++) { - if (CheckAutList->lab[Spine[temp].tgtpos] != NextCand->lab[Spine[temp].tgtpos]) { - break; - } - } - switch (tv->compstage) { - case 0: - if (tv->strategy && (tv->steps == 1)) { - RemoveFromLevel(temp, tv->maxtreelevel-1, tv->strategy, FALSE); - if (TrieCandFrom) { - TrieCheckFrom->index += TrieCandFrom->index; - TrieCandFrom->goes_to = TrieCheckFrom; - } - else TrieCheckFrom->index++; - NextCand->do_it = FALSE; - } - else { - if (CheckAutList->lab[Spine[temp].tgtpos] >= NextCand->lab[Spine[temp].tgtpos]) { - CheckAutList->do_it = FALSE; - if (TrieCandFrom) { - TrieCandFrom->index += TrieCheckFrom->index; - tv->newindex = 0; - TrieCheckFrom->goes_to = TrieCandFrom; - } else { - if (CurrCand->stnode->level > 1) { - tv->newgotonode = TrieCheckFrom; - tv->newindex = TrieCheckFrom->index; - } - else { - tv->newgotonode = NULL; - tv->newindex = 0; - } - } - } - else { - if (TrieCandFrom) { - TrieCheckFrom->index += TrieCandFrom->index; - TrieCandFrom->goes_to = TrieCheckFrom; - } else { - TrieCheckFrom->index++; - } - NextCand->do_it = FALSE; - } - } - break; - case 1: - TrieCheckFrom->index ++; - tv->gotonode = TrieCheckFrom; - break; - case 2: - if (TrieCandFrom) { - TrieCheckFrom->index += TrieCandFrom->index; - TrieCandFrom->goes_to = TrieCheckFrom; - } else { - TrieCheckFrom->index++; - } - if (temp == tv->maxtreelevel) { - tmp1 = TempOrbits[NextCand->lab[Spine[temp].tgtpos]]; - for (i=1; ilab[Spine[temp].tgtpos]]; - } - break; - default: - break; - } - return temp; - } - } - CheckAutList = CheckAutList->next; - } - return FALSE; -} - -void Individualize(Partition *NextPart, Candidate *NextCand, int K, int Tc, int Cl, int Pos) -{ - int i, j; - - NextCand->do_it = TRUE; - if (NextPart->cls[Tc] > 1) { - NextPart->cells = Cl+1; - NextPart->active = 1; - NextPart->cls[Tc]--; - NextPart->cls[Pos] = 1; - } - NextPart->inv[Pos] = Pos; - - j = NextCand->lab[Pos]; - i = NextCand->invlab[K]; - NextCand->lab[Pos] = K; - NextCand->invlab[K] = Pos; - NextCand->lab[i] = j; - NextCand->invlab[j] = i; - return; -} - -boolean TargetCell(sparsegraph *sg, Candidate *TargCand, Partition *Part, int n, struct TracesVars* tv, int Lv) { - int TCell = -1, TCSize = 1; - int i; - - if (Lv < tv->tcellevel) { - tv->tcell = Spine[Lv+1].tgtcell; - return TRUE; - } - else { - while (TCell < 0) { - for (i = Spine[Lv].tgtcell; i < Spine[Lv].tgtend; i += Part->cls[i]) { - if ((sg->d[TargCand->lab[i]] > 2) && (sg->d[TargCand->lab[i]] < n-1)) { - if (Part->cls[i] > TCSize) { - TCSize = Part->cls[i]; - TCell = i; - } - } - } - Lv--; - if ((Lv < 0) && (TCell < 0)) return FALSE; - } - tv->tcell = TCell; - return TRUE; - } -} - -boolean TargetCellFirstPath(sparsegraph *sg, Candidate *TargCand, Partition *Part, int n, struct TracesVars* tv) { - int TCell = -1, TCSize = 1; - int Lv, i, Lev; - - Lev = Lv = tv->tolevel_tl++; - while (TCell < 0) { - for (i = Spine[Lv].tgtcell; i < Spine[Lv].tgtend; i += Part->cls[i]) { - if ((sg->d[TargCand->lab[i]] > 2) && (sg->d[TargCand->lab[i]] < n-1)) { - if (Part->cls[i] > TCSize) { - TCSize = Part->cls[i]; - TCell = i; - } - } - } - Lv--; - if ((Lv < 0) && (TCell < 0)) { - tv->smalldeglevel = Lev; - tv->finalnumcells = Part->cells; - return FALSE; - } - } - tv->tcellexpath = TCell; - Spine[tv->tolevel_tl].tgtcell = tv->tcellexpath; - Spine[tv->tolevel_tl].tgtsize = TCSize; - Spine[tv->tolevel_tl].tgtend = Spine[tv->tolevel_tl].tgtcell + TCSize; - Spine[tv->tolevel_tl].tgtpos = Spine[tv->tolevel_tl].tgtend - 1; - tv->tcellevel = tv->tolevel_tl; - - if (Lv+1 != Lev) { - BreakSteps[Lev] = ++tv->brkstpcount; - if (!Spine[tv->tolevel].liststart->firstsingcode) { - Spine[tv->tolevel].liststart->firstsingcode = Spine[tv->tolevel].liststart->pathsingcode; - } - } - return TRUE; -} - -boolean TargetCellExpPath(sparsegraph *sg, Candidate *TargCand, Partition *Part, int n, struct TracesVars* tv) { - int TCell = -1, TCSize = 1; - int Lv, i; - - if (Part->cells == tv->finalnumcells) { - return FALSE; - } - Lv = tv->tolevel_tl+1; - SpineTL_tl = Spine+Lv; - if (tv->tolevel_tl < tv->tcellevel) { - tv->tcellexpath = Part->inv[SpineTL_tl->tgtcell]; - tv->tcellfromlevel = SpineTL_tl->tgtfrom; - tv->tolevel_tl++; - return ((Spine[tv->tolevel_tl].tgtcell >= Spine[tv->tolevel_tl-1].tgtcell) && (Spine[tv->tolevel_tl].tgtend <= Spine[tv->tolevel_tl-1].tgtend)); - } - else { - while (TCell < 0) { - Lv--; - for (i = Part->inv[Spine[Lv].tgtcell]; i < Spine[Lv].tgtend; i += Part->cls[i]) { - if ((sg->d[TargCand->lab[i]] > 2) && (sg->d[TargCand->lab[i]] > 2)) { - if (Part->cls[i] > TCSize) { - TCSize = Part->cls[i]; - TCell = i; - } - } - } - } - tv->tolevel_tl++; - tv->tcellevel = tv->tolevel_tl; - Spine[tv->tolevel_tl].tgtcell = tv->tcellexpath = TCell; - tv->tcellfromlevel = Spine[tv->tolevel_tl].tgtfrom = Lv+1; - Spine[tv->tolevel_tl].tgtsize = Part->cls[TCell]; - Spine[tv->tolevel_tl].tgtend = TCell+Part->cls[TCell]; - Spine[tv->tolevel_tl].tgtpos = Spine[tv->tolevel_tl].tgtend - 1; - return ((Spine[tv->tolevel_tl].tgtcell >= Spine[tv->tolevel_tl-1].tgtcell) && (Spine[tv->tolevel_tl].tgtend <= Spine[tv->tolevel_tl-1].tgtend)); - } -} - -boolean SelectNextLevel(sparsegraph *g_arg, int n, struct TracesVars *tv) { - - switch (tv->compstage) { - case 2: - if (tv->smalldeglevel < n) { - tv->nextlevel = tv->smalldeglevel - 1; - } - else { - tv->nextlevel = tv->maxtreelevel; - } - while (tv->nextlevel >=0) { - if (Spine[tv->nextlevel].liststart) { - break; - } - tv->nextlevel--; - } - if (tv->nextlevel < 0) { - return FALSE; - } - break; - default: - switch (tv->strategy) { - case 0: - tv->nextlevel = tv->fromlevel; - while (!Spine[tv->nextlevel].liststart) { - (tv->nextlevel)++; - } - if ((Spine[tv->nextlevel].part->cells == tv->finalnumcells) || (tv->nextlevel > tv->maxtreelevel)) { - return FALSE; - } - break; - case 1: - tv->nextlevel = tv->maxtreelevel; - if (Spine[tv->nextlevel].part->cells == tv->finalnumcells) { - (tv->nextlevel)--; - } - while (tv->nextlevel >= 0) { - if (Spine[tv->nextlevel].liststart) { - break; - } - tv->nextlevel--; - } - if (tv->nextlevel < 0) { - return FALSE; - } - break; - default: - break; - } - break; - } - return TRUE; -} - -boolean TreeFyTwo(sparsegraph *sg, int From, int Num, Candidate *Cand1, Candidate *Cand2, Partition *Part, int n, - struct TracesVars* tv, struct TracesInfo *ti) -{ - int k, i, i1, i2; - size_t j1, iend; - - i2=0; - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - i1 = Spine[From].tgtsize; - memcpy(TreeStack, IDENTITY_PERM+Spine[From].tgtcell, i1*sizeof(int)); - for (i=0; ilab[TreeStack[i]]] = Cand2->lab[TreeStack[i]]; - } - while (i2 < i1) { - k = TreeStack[i2++]; - if (Cand1->lab[k] == Cand2->lab[k]) { - continue; - } - - j1 = sg->v[Cand1->lab[k]]; - iend = j1+sg->d[Cand1->lab[k]]; - for (; j1 < iend; j1++) { - k = sg->e[j1]; - if ((k != Cand2->lab[Cand1->invlab[k]]) && (AUTPERM[k] == k)) { - AUTPERM[k] = Cand2->lab[Cand1->invlab[k]]; - TreeStack[i1++] = Cand1->invlab[k]; - } - } - } - return (i1 != Spine[From].tgtsize); -} - -void ExperimentalStep(sparsegraph *g_arg, Partition *NextPart, Candidate *NextCand, - TracesVars *tv, TracesInfo *ti, int m, int n) { - int i, iend, min, tmp; - - SpineTL_tl = Spine+tv->tolevel_tl; - NextPart->active = 1; - - /* EXPERIMENTAL PATH INDIVIDUALIZATION AND REFINEMENT */ - if (tv->answ == 2) { - min = NextCand->lab[tv->tcellexpath]; - tmp = tv->tcellexpath; - iend = tv->tcellexpath + NextPart->cls[tv->tcellexpath]; - for (i=tv->tcellexpath + 1; ilab[i] < min) { - min = NextCand->lab[i]; - tmp = i; - } - } - } - else { - tmp = tv->tcellexpath+KRAN(NextPart->cls[tv->tcellexpath]); - } - if (NextPart->cls[tv->tcellexpath] == 2) { - NextCand->pathsingcode = MASHCOMM(NextCand->pathsingcode, NextCand->lab[tv->tcellexpath]); - NextCand->pathsingcode = MASHCOMM(NextCand->pathsingcode, NextCand->lab[tv->tcellexpath+1]); - } - else { - NextCand->pathsingcode = MASHCOMM(NextCand->pathsingcode, NextCand->lab[tmp]); - } - - Individualize(NextPart, NextCand, NextCand->lab[tmp], tv->tcellexpath, NextPart->cells, tv->tcellexpath + NextPart->cls[tv->tcellexpath]-1); - - tv->stats->numnodes++; - if (tv->compstage == 0) { - traces_refine_notrace(g_arg, - NextCand, - m, - n, - NextPart, tv, ti); - } - else { - if (tv->tolevel_tl == tv->maxtreelevel+1) { - trieref = trieroot; - tv->answ = traces_refine_comptrie(g_arg, - NextCand, - m, - n, - NextPart, tv, ti); - if (tv->answ == 0 ) { - tv->stats->interrupted++; - } - } - else { - traces_refine_notrace(g_arg, - NextCand, - m, - n, - NextPart, tv, ti); - } - } -} - -trie* trie_new(int n, struct TracesVars* tv) -{ - TrieArray[0] = malloc(n*sizeof(trie)); - if (TrieArray[0] == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - TrieArray[0][0].first_child = TrieArray[0][0].next_sibling = NULL; - tv->triepos = 0; - tv->trienext = 1; - return TrieArray[0]; -} - -struct trie *trie_make(trie *t, int value, int n, struct TracesVars* tv) -{ - trie *t1; - t1 = t; - if (tv->trienext == n) { - tv->trienext = 0; - tv->triepos++; - TrieArray[tv->triepos] = malloc(n*sizeof(trie)); - if (TrieArray[tv->triepos] == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - } - if (t->first_child) { - t = t->first_child; - if (value < t->value) { - t1->first_child = &TrieArray[tv->triepos][tv->trienext++]; - t1->first_child->next_sibling = t; - t1->first_child->first_child = NULL; - t = t1->first_child; - t->value = value; - return t; - } - while (value > t->value) { - t1 = t; - if (t->next_sibling) { - t = t->next_sibling; - } - else break; - } - if (value == t->value) { - return t; - } - t1->next_sibling = &TrieArray[tv->triepos][tv->trienext++]; - t1->next_sibling->first_child = t1->next_sibling->next_sibling = NULL; - if (t != t1) { - t1->next_sibling->next_sibling = t; - } - t = t1->next_sibling; - } - else { - t->first_child = &TrieArray[tv->triepos][tv->trienext++]; - t = t->first_child; - t->first_child = t->next_sibling = NULL; - } - t->value = value; - return t; -} - -struct trie *trie_comp(trie *t, int value) -{ - if (t->first_child) { - t = t->first_child; - while (t) { - if (value != t->value) { - t = t->next_sibling; - } - else { - break; - } - } - return t; - } - else { - return NULL; - } -} - - -void CopyCand(Candidate *W, Candidate *V, int n) { - memcpy(W->lab, V->lab, n*sizeof(int)); - memcpy(W->invlab, V->invlab, n*sizeof(int)); - W->name = V->name; - W->vertex = V->vertex; - W->code = V->code; - W->singcode = V->singcode; - W->firstsingcode = V->firstsingcode; - W->do_it = V->do_it; - W->sortedlab = FALSE; -} - -void RemoveFromLevel(int from, int to, int strategy, boolean reinit) { - int i; - - for (i=from; i<=to; i++) { - if (Spine[i].listend) { - (Spine[i].listend)->next = GarbList; - GarbList = Spine[i].liststart; - Spine[i].liststart = Spine[i].listend = NULL; - } - if (strategy == 0 || reinit) { - Spine[i].listcounter = 0; - if (i>from) { - Spine[i].thetracexists = FALSE; - Spine[i].part->code = -1; - } - } - } -} - -void CompStage0(sparsegraph *g_arg, Partition *CurrPart, Partition *NextPart, Candidate *CurrCand, Candidate *NextCand, - int m, int n, struct TracesVars* tv, struct TracesInfo *ti) -{ - int i, j, i1, j2, k, cu, cu1; - int temp, tmp, auxcode, search_vtx, gom_level; - boolean closeloop, firstsing; - Candidate *SpTLliststart, *AuxCand; - searchtrie *TreeNode, *TreeNode1, *TreeNode2; - - PRINT_FROM_VERB(3) - - if (TargetCell(g_arg, CurrCand, CurrPart, n, tv, tv->tolevel)) { - ++tv->tolevel; - SpineTL = Spine+tv->tolevel; - SpineTL->tgtcell = tv->tcell; - SpineTL->tgtsize = CurrPart->cls[tv->tcell]; - SpineTL->tgtend = tv->tcell+SpineTL->tgtsize; - SpineTL->tgtpos = SpineTL->tgtend - 1; - } - else { - tv->smalldeglevel = tv->tolevel; - tv->finalnumcells = CurrPart->cells; - ti->thereisnextlevel = SelectNextLevel(g_arg, n, tv); - return; - } - - tv->newgotonode = NULL; - - /* CANDIDATE */ - temp = CurrCand->lab[Spine[1].tgtpos]; - k = SpineTL->tgtend; - - TreeNode = CurrCand->stnode; - while (TreeNode) { - if (TreeNode->goes_to) { - CurrCand->do_it = FALSE; - break; - } - TreeNode = TreeNode->father; - } - - if (CurrCand->do_it) { - if ((tv->orbits[temp] == temp) || tv->tolevel == 1) { - ti->minimalinorbits = TRUE; - if (((Spine[tv->fromlevel].liststart != Spine[tv->fromlevel].listend) && (CurrPart->cls[tv->tcell] > 6)) - || tv->strategy - || (tv->expathlength <=10)) { - TempOrbits = NULL; - tv->samepref = FixBase(fix, tv, CurrCand, 0, tv->fromlevel); - if (tv->samepref != tv->nfix || ti->thegrouphaschanged) { - if (tv->options->verbosity >= 2) tv->schreier1 -= CPUTIME; - gom_level = getorbitsmin(fix, tv->nfix, gpB, &gensB, &tv->currorbit, - CurrCand->lab+tv->tcell, CurrPart->cls[tv->tcell], n, TRUE); - if (tv->options->verbosity >= 2) tv->schreier1 += CPUTIME; - ti->thegrouphaschanged = FALSE; - - if (gom_level < tv->nfix) { - PRINT_NOTMIN_VERB(3) - - TreeNode = CurrCand->stnode; - j2 = CurrCand->lab[Spine[gom_level+1].tgtpos]; - i1 = tv->currorbit[j2]; - for (j=0; j < tv->nfix - gom_level; j++) { - TreeNode = TreeNode->father; - } - TreeNode1 = TreeNode->first_child; - while (TreeNode1) { - if (TreeNode1->vtx == i1) { - break; - } - TreeNode1 = TreeNode1->next_sibling; - } - if (TreeNode1) { - while (TreeNode1->goes_to) { - TreeNode1 = TreeNode1->goes_to; - } - TreeNode2 = TreeNode1->next_sibling; - while (TreeNode2->vtx != j2) { - TreeNode2 = TreeNode2->next_sibling; - } - TreeNode1->index += TreeNode2->index; - TreeNode2->goes_to = TreeNode1; - - ti->minimalinorbits = FALSE; - } - else { - tv->currorbit = getorbits(fix, tv->nfix, gpB, &gensB, n); - } - } - } - else { - tv->currorbit = findcurrorbits(gpB, tv->nfix); - } - } - else { - TempOrbits = WorkArray1; - memcpy(TempOrbits, IDENTITY_PERM, n*sizeof(int)); - tv->currorbit = TempOrbits; - } - - if (ti->minimalinorbits) { - memcpy(NextCand->lab, CurrCand->lab, n*sizeof(int)); - memcpy(NextCand->invlab, CurrCand->invlab, n*sizeof(int)); - auxcode = CurrCand->code; - SpineTL->trcstart = CurrPart->cells; - TheTrace[SpineTL->trcstart] = SpineTL->tgtpos; - if (!CurrCand->sortedlab) { - quickSort(CurrCand->lab+tv->tcell, CurrPart->cls[tv->tcell]); - for (i=tv->tcell; itcell+CurrPart->cls[tv->tcell]; i++) { - CurrCand->invlab[CurrCand->lab[i]] = i; - } - CurrCand->sortedlab = TRUE; - } - - tv->indivstart = tv->tcell+CurrCand->indnum; - tv->indivend = tv->indivstart+tv->steps; - if (tv->indivend > SpineTL->tgtend) { - tv->indivend = SpineTL->tgtend; - } - - temp = CurrCand->lab[tv->indivstart]; - - for (k = tv->indivstart; k < tv->indivend; k++) { - CurrCand->indnum++; - NextCand->singcode = CurrCand->singcode; - NextCand->vertex = CurrCand->lab[k]; - NextCand->name = ++tv->name; - if (NextCand->name == (NAUTY_INFINITY-2)) { - NextCand->name = tv->name = 1; - } - - PRINT_INDIV_VERB(3) - if (tv->currorbit[NextCand->vertex] != NextCand->vertex) { - PRINT_SKIPPED_VERB(3) - - search_vtx = tv->currorbit[NextCand->vertex]; - TreeNode = CurrCand->stnode; - if (TreeNode->first_child) { - TreeNode = TreeNode->first_child; - while (TreeNode) { - if (TreeNode->vtx == search_vtx) { - break; - } - TreeNode = TreeNode->next_sibling; - } - if (TreeNode) { - while (TreeNode->goes_to) { - TreeNode = TreeNode->goes_to; - } - TreeNode->index++; - continue; - } - } - } - PRINT_REFINE_VERB(3) - - memcpy(NextPart->cls, CurrPart->cls, n*sizeof(int)); - memcpy(NextPart->inv, CurrPart->inv, n*sizeof(int)); - - if (NextPart->cls[tv->tcell] == 2) { - NextCand->singcode = MASHCOMM(NextCand->singcode, CurrCand->lab[tv->tcell]); - NextCand->singcode = MASHCOMM(NextCand->singcode, CurrCand->lab[tv->tcell+1]); - } - else { - NextCand->singcode = MASHCOMM(NextCand->singcode, NextCand->vertex); - } - - Individualize(NextPart, NextCand, NextCand->vertex, tv->tcell, CurrPart->cells, SpineTL->tgtpos); - tv->stats->numnodes++; - - tv->answ = traces_refine(g_arg, - NextCand, - m, - n, - NextPart, tv, ti, TRUE); - - if (!tv->strategy && !tv->options->getcanon && (NextPart->cells == tv->finalnumcells) && (tv->tolevel > 1)) { - temp = 0; - for (i=0; itolevel; i++) { - temp += Spine[i].listcounter; - } - if (temp > 5) { - EXITFROMSTAGE0REFINE - } - } - switch (tv->answ) { - case 0: /* Interrupted refinement: do not add to the list */ - tv->stats->interrupted++; - SpineTL->levelcounter++; - break; - case 1 : /* The same trace has been found once more : add to the list */ - SpineTL->levelcounter++; - - NextCand->do_it = TRUE; - if (tv->options->verbosity >= 2) PRINT_CANDIDATE(NextCand, tv->tolevel); - - tv->tolevel_tl = tv->tolevel; - NextCand->pathsingcode = NextCand->singcode; - NextCand->firstsingcode = 0; - - if (tv->steps > 1) { - if (tv->tolevel < tv->tcellevel) { - closeloop = CheckForMatching(g_arg, CurrCand, NextCand, NextPart, tv, ti, m, n); - if (NextCand->do_it) { - firstsing = TRUE; - if (tv->options->verbosity >= 2) tv->expaths -= CPUTIME; - - /* EXPERIMENTAL PATH */ - while (NextPart->cells < tv->finalnumcells) { - if (firstsing && BreakSteps[tv->tolevel]) { - firstsing = FALSE; - NextCand->firstsingcode = NextCand->pathsingcode; - if (CheckForSingAutomorphisms(g_arg, CurrCand, NextPart, NextCand, tv, ti, m, n)) - if (!NextCand->do_it) { - break; - } - } - if (!TargetCellExpPath(g_arg, NextCand, NextPart, n, tv)) { - NextCand->firstsingcode = NextCand->pathsingcode; - } - ExperimentalStep(g_arg, NextPart, NextCand, tv, ti, m, n); - PRINT_EXPPATHSTEP(NextCand, TRUE) - } - - if (NextPart->cells == tv->finalnumcells) { - UPDATEMIN(tv->expathlength, tv->tolevel_tl); - } - if (tv->options->verbosity >= 2) tv->expaths += CPUTIME; - } - else { - if (closeloop < tv->tolevel) k = SpineTL->tgtend; - PRINT_RETURN - break; - } - } - - if (!tv->strategy && !tv->options->getcanon && (NextPart->cells == tv->finalnumcells) && (tv->tolevel_tl == tv->tolevel + 1)) { - tv->maxtreelevel = tv->tolevel_tl; - if (tv->tolevel == 1) { - tv->newst_stage1 = searchtrie_make(CurrCand, NextCand, n, tv); - EXITFROMSTAGE0EXPATH1 - } - else { - temp = 0; - for (i=0; itolevel; i++) { - temp += Spine[i].listcounter; - } - if (temp > 5) { - tv->newst_stage1 = searchtrie_make(CurrCand, NextCand, n, tv); - EXITFROMSTAGE0EXPATH1 - } - } - } - - /* ANY AUTOMORPHISM? */ - if (tv->options->verbosity >= 2) tv->autchk -= CPUTIME; - tv->newindex = 0; - if (NextCand->do_it) { - closeloop = CheckForAutomorphisms(g_arg, CurrCand, NextCand, tv, ti, m, n, NextPart); - if (!NextCand->do_it && closeloop < tv->tolevel) k = SpineTL->tgtend; - } - if (tv->options->verbosity >= 2) tv->autchk += CPUTIME; - - if (NextCand->do_it) { - ADDTONEXTLEVEL; - SpineTL->keptcounter++; - searchtrie_make(CurrCand, SpineTL->listend, n, tv); - } - } - else { - if (BreakSteps[tv->tolevel]) { - NextCand->firstsingcode = NextCand->pathsingcode; - if (CheckForSingAutomorphisms(g_arg, CurrCand, NextPart, NextCand, tv, ti, m, n)) - if (!NextCand->do_it) { - PRINT_RETURN - break; - } - } - - /* ANY AUTOMORPHISM? */ - if (tv->options->verbosity >= 2) tv->autchk -= CPUTIME; - tv->newindex = 0; - if (NextCand->do_it) { - closeloop = CheckForAutomorphisms(g_arg, CurrCand, NextCand, tv, ti, m, n, NextPart); - if (!NextCand->do_it && closeloop < tv->tolevel) k = SpineTL->tgtend; - } - if (tv->options->verbosity >= 2) tv->autchk += CPUTIME; - - if (NextCand->do_it) { - ADDTONEXTLEVEL; - SpineTL->keptcounter++; - searchtrie_make(CurrCand, SpineTL->listend, n, tv); - } - } - PRINT_RETURN - break; - case 2 : /* Delete the old list and start a new one: a better trace has been found */ - if (NextPart->cells == tv->finalnumcells) tv->stats->canupdates++; - - if (tv->tolevel > tv->treedepth) { - tv->treedepth = tv->tolevel; - if (tv->strategy) { - NEWPART(SpineTL->part); - } - else { - NEWPARTSPINE(tv->tolevel); - } - } - - if (!tv->strategy && (tv->tolevel > 1) && !SpineTL->liststart) { - memcpy(NextCand->lab, TEMPLAB, n*sizeof(int)); - memcpy(NextCand->invlab, TEMPINVLAB, n*sizeof(int)); - tv->maxtreelevel = tv->tolevel; - - SpineTL->liststart = NewCandidate(n, &GarbList, TRUE); - SpineTL->listend = SpineTL->liststart; - - if (NextPart->cells != tv->finalnumcells) NextCand->code = auxcode; - CopyCand(SpineTL->liststart, NextCand, n); - COPYPART(SpineTL->part, NextPart); - tv->newindex = 0; - tv->newst_stage1 = searchtrie_make(CurrCand, SpineTL->listend, n, tv); - - SpineTL->listcounter = 1; - SpTLliststart = SpineTL->liststart; - - i = tv->tolevel; - if (tv->brkstpcount) { - while ((iliststart->firstsingcode = Spine[i].singcode; - } - - SpineTL->updates = 1; - SpineTL->levelcounter = 1; - SpineTL->keptcounter = 1; - PRINT_LINE_PLUS(tv->fromlevel) - - if (tv->options->verbosity >= 2) PRINT_CANDIDATE(SpineTL->liststart, tv->tolevel); - PRINT_RETURN; - - if (!tv->strategy && !tv->options->getcanon && (tv->tolevel+1 == tv->firstpathlength)) { - if (tv->tolevel == 1) { - EXITFROMSTAGE0EXPATH2; - } - else { - temp = 0; - for (i=0; itolevel; i++) { - temp += Spine[i].listcounter; - } - if (temp > 5) { - EXITFROMSTAGE0EXPATH2; - } - } - } - } - else { - tv->tcellevel = tv->maxtreelevel = tv->tolevel; - SpineTL->levelcounter++; - SpineTL->updates++; - SpineTL->keptcounter = 1; - - RemoveFromLevel(tv->tolevel, tv->treedepth, tv->strategy, TRUE); - SpineTL->liststart = NewCandidate(n, &GarbList, TRUE); - SpineTL->listend = SpineTL->liststart; - - CopyCand(SpineTL->liststart, NextCand, n); - COPYPART(SpineTL->part, NextPart); - tv->newindex = 0; - - tv->newst_stage1 = searchtrie_make(CurrCand, SpineTL->listend, n, tv); - - SpineTL->listcounter = 1; - SpTLliststart = SpineTL->liststart; - - SpTLliststart->pathsingcode = SpineTL->singcode = SpTLliststart->singcode; - SpTLliststart->firstsingcode = 0; - - PRINT_LINE - if (tv->options->verbosity >= 2) PRINT_CANDIDATE(SpTLliststart, tv->tolevel) - - tv->tolevel_tl = tv->tolevel; - - memset(BreakSteps, 0, n*sizeof(int)); - tv->brkstpcount = 0; - - if (tv->steps > 1) { - if (tv->options->verbosity >= 2) tv->expaths -= CPUTIME; - - /* EXPERIMENTAL PATH */ - while (NextPart->cells < tv->finalnumcells) { - if (!TargetCellFirstPath(g_arg, SpTLliststart, NextPart, n, tv)) { - tv->tolevel_tl--; - if (tv->tolevel_tl > 6) { - PRINT_EXPPATHSTEP(SpTLliststart, TRUE) - } - break; - } - ExperimentalStep(g_arg, NextPart, SpTLliststart, tv, ti, m, n); - PRINT_EXPPATHSTEP(SpTLliststart, TRUE) - - Spine[tv->tolevel_tl].singcode = SpTLliststart->pathsingcode; - } - if (NextPart->cells == tv->finalnumcells) { - UPDATEMIN(tv->expathlength, tv->tolevel_tl); - } - - if (tv->options->verbosity >= 2) tv->expaths += CPUTIME; - - if (tv->tolevel_tl > tv->smalldeglevel) { - tv->smalldeglevel = tv->tolevel_tl; - } - if ((tv->finalnumcells < n) && (tv->tolevel_tl < tv->smalldeglevel)) { - tv->smalldeglevel = tv->tolevel_tl; - } - - tv->firstpathlength = tv->tolevel_tl; - PRINT_RETURN - if (!tv->strategy && !tv->options->getcanon && (NextPart->cells == tv->finalnumcells) && (tv->tolevel_tl == tv->tolevel + 1)) { - tv->maxtreelevel = tv->tolevel_tl; - if (tv->tolevel == 1) { - EXITFROMSTAGE0EXPATH2 - } - else { - temp = 0; - for (i=0; itolevel; i++) { - temp += Spine[i].listcounter; - } - if (temp > 5) { - EXITFROMSTAGE0EXPATH2 - } - } - } - memcpy(TEMPLAB, SpTLliststart->lab, n*sizeof(int)); - memcpy(TEMPINVLAB, SpTLliststart->invlab, n*sizeof(int)); - } - else { - PRINT_RETURN - } - } - break; - default: - break; - } - } /* end for */ - } - } - } - - /* REMOVE CURRENT CANDIDATE */ - if (SpineFL->liststart && (k >= SpineTL->tgtend)) { - SpineFL->liststart = CurrCand->next; - if (CurrCand->next == NULL) { - SpineFL->listend = NULL; - } - SpineFL->listcounter--; - CurrCand->next = GarbList; - GarbList = CurrCand; - } - ti->thereisnextlevel = SelectNextLevel(g_arg, n, tv); - return; -} - -void CompStage1(sparsegraph *g_arg, Partition *CurrPart, Partition *NextPart, Candidate *CurrCand, Candidate *NextCand, - int m, int n, - struct TracesVars* tv, struct TracesInfo *ti) -{ - int i, k, cu, cu1, tmp, gom_level, search_vtx; - searchtrie *TreeNode; - - CurrCand->stnode = tv->newst_stage1; - - tv->tolevel++; - SpineTL = Spine+tv->tolevel; - tv->tcell = SpineTL->tgtcell; - SpineTL->levelcounter = 0; - SpineTL->keptcounter = 0; - SpineTL->updates = 1; - - - if (tv->options->verbosity >= 2) { - LINE(tv->linelgth-3, "="); - NEXTLINE - } - - memset(RefCells, 0, n*sizeof(int)); - memset(MultRefCells, 0, n*sizeof(int)); - ti->thegrouphaschanged = TRUE; - - /* CANDIDATE */ - memcpy(NextCand->lab, CurrCand->lab, n*sizeof(int)); - memcpy(NextCand->invlab, CurrCand->invlab, n*sizeof(int)); - NextCand->do_it = TRUE; - SpineTL->trcstart = CurrPart->cells; - - tv->indivstart = tv->tcell; - tv->indivend = SpineTL->tgtend; - if (g_arg->d[CurrCand->lab[tv->indivstart]] == 1) { - tv->indivstart = SpineTL->tgtend-1; - } - - FixBase(fix, tv, NextCand, 0, tv->fromlevel); - - if (!ti->identitygroup) { - if (tv->options->verbosity >= 2) tv->schreier2 -= CPUTIME; - tv->currorbit = getorbits(fix, tv->nfix, gpB, &gensB, n); - if (tv->options->verbosity >= 2) tv->schreier2 += CPUTIME; - } - else { - if (n / CurrPart->cls[tv->tcell] < 256) { - memcpy(tv->currorbit, IDENTITY_PERM, n*sizeof(int)); - } - else { - for (k = tv->indivstart; k < tv->indivend; k++) { - tv->currorbit[CurrCand->lab[k]] = CurrCand->lab[k]; - } - } - } - - if (!CurrCand->sortedlab) { - quickSort(CurrCand->lab+tv->tcell, CurrPart->cls[tv->tcell]); - for (i=tv->tcell; itcell+CurrPart->cls[tv->tcell]; i++) { - CurrCand->invlab[CurrCand->lab[i]] = i; - } - CurrCand->sortedlab = TRUE; - } - - for (k = tv->indivstart; k < tv->indivend; k++) { - NextCand->vertex = CurrCand->lab[k]; - NextCand->name = ++tv->name; - if (NextCand->name == (NAUTY_INFINITY-2)) { - NextCand->name = tv->name = 1; - } - if (tv->currorbit[CurrCand->lab[k]] != CurrCand->lab[k]) { - search_vtx = tv->currorbit[NextCand->vertex]; - TreeNode = CurrCand->stnode; - if (TreeNode->first_child) { - TreeNode = TreeNode->first_child; - while (TreeNode) { - if (TreeNode->vtx == search_vtx) { - break; - } - TreeNode = TreeNode->next_sibling; - } - if (TreeNode) { - while (TreeNode->goes_to) { - TreeNode = TreeNode->goes_to; - } - TreeNode->index++; - } - } - continue; - } - PRINT_REFINE_VERB(3) - memcpy(NextPart->cls, CurrPart->cls, n*sizeof(int)); - memcpy(NextPart->inv, CurrPart->inv, n*sizeof(int)); - - Individualize(NextPart, NextCand, CurrCand->lab[k], tv->tcell, CurrPart->cells, SpineTL->tgtpos); - - tv->stats->numnodes++; - SpineTL->levelcounter++; - tv->tolevel_tl = tv->tolevel; - trieref = trieroot; - SpineTL->levelcounter++; - - traces_refine_maketrie(g_arg, - NextCand, - m, - n, - NextPart, tv, ti); - - RefCells[CurrCand->lab[k]] = NextPart->cells; - if (NextPart->cells == tv->finalnumcells) { - tv->answ=1; - if (tv->options->verbosity >= 2) PRINT_CANDIDATE(NextCand, tv->tolevel) - - if (NextPart->cells < tv->finalnumcells) { - if (!Spine[tv->tolevel].part) { - NEWPART(Spine[tv->tolevel].part) - } - } - - /* ANY AUTOMORPHISM? */ - if (tv->options->verbosity >= 2) tv->autchk -= CPUTIME; - if (NextPart->cells == tv->finalnumcells) { - CheckForAutomorphisms(g_arg, CurrCand, NextCand, tv, ti, m, n, NextPart); - } - else { - CheckForSingAutomorphisms(g_arg, CurrCand, NextPart, NextCand, tv, ti, m, n); - } - - if (tv->options->verbosity >= 2) tv->autchk += CPUTIME; - - PRINT_RETURN - - /* ADD TO NEXT LEVEL */ - if (tv->answ == 1) { - SpineTL->keptcounter++; - if (!Spine[tv->tolevel].listend) COPYPART(Spine[tv->tolevel].part, NextPart); - ADDTONEXTLEVEL; - searchtrie_make(CurrCand, SpineTL->listend, n, tv); - } - } - } /* end for */ - - for (k = tv->indivstart; k < tv->indivend; k++) { - MultRefCells[RefCells[tv->currorbit[CurrCand->lab[k]]] % tv->finalnumcells]++; - } - if (tv->options->verbosity >= 2) { - for (k=1; kdigstring, k); - fprintf(outfile, "cells: %d\n", MultRefCells[k]); - } - } - } - -#if !MAXN - DYNALLOC1(searchtrie*, RefPath, RefPath_sz, tv->tolevel, "Traces-CS1"); -#endif - - TreeNode = CurrCand->stnode; - while (TreeNode) { - RefPath[TreeNode->level] = TreeNode; - TreeNode = TreeNode->father; - } - - /* REMOVE CURRENT CANDIDATE */ - SpineFL->liststart = CurrCand->next; - if (CurrCand->next == NULL) { - SpineFL->listend = NULL; - SpineFL->listcounter = 1; - } - SpineFL->listcounter--; - CurrCand->next = GarbList; - GarbList = CurrCand; - - if (tv->options->verbosity >= 2) { - LINE(tv->linelgth, "="); - NEXTLINE - } - tv->compstage = 2; - tv->steps = n; - - if (tv->options->verbosity >= 2) tv->schreier1 -= CPUTIME; - gom_level = getorbitsmin(fix, tv->nfix, gpB, &gensB, &tv->currorbit, - CurrCand->lab+tv->tcell, CurrPart->cls[tv->tcell], n, TRUE); - if (tv->options->verbosity >= 2) tv->schreier1 += CPUTIME; - ORBITSIZES - ti->thereisnextlevel = SelectNextLevel(g_arg, n, tv); - SpineTL->part->cells = tv->finalnumcells; - - AutomCount[0] = 2; - AutomCount[1] = CurrCand->vertex; - - return; -} - -void CompStage2(sparsegraph *g_arg, Partition *CurrPart, Partition *NextPart, Candidate *CurrCand, Candidate *NextCand, - int m, int n, - struct TracesVars* tv, struct TracesInfo *ti) -{ - int i, j, i1, j2, k, cu, cu1, vertex, search_vtx, gom_level; - int temp, tmp, autom; - Candidate *AuxCand; - searchtrie *TreeNode, *TreeNode1, *TreeNode2; - int *CuOrb; - boolean schreierwrong; - - autom = 0; - schreierwrong = FALSE; - - TreeNode = CurrCand->stnode; - tv->cand_level = 0; - - while (TreeNode) { - if (TreeNode->goes_to) { - CurrCand->do_it = FALSE; - } - if (!tv->cand_level && TreeNode == RefPath[TreeNode->level]) { - tv->cand_level = TreeNode->level; - } - TreeNode = TreeNode->father; - } - if (tv->cand_level+1 == tv->maxtreelevel) { - ti->useTempOrbits1 = TRUE; - } - else { - ti->useTempOrbits1 = FALSE; - } - if (tv->cand_level == tv->fromlevel) { - ti->useTempOrbits2 = TRUE; - } - else { - ti->useTempOrbits2 = FALSE; - } - - PRINT_FROM_VERB(3) - - if (CurrCand->do_it) { - if (tv->tolevel == 0) { - tv->fromlevel = tv->tolevel; - SpineFL = Spine+tv->fromlevel; - vertex = Spine[tv->maxtreelevel+1].liststart->lab[Spine[1].tgtpos]; - k = n; - - if (TargetCell(g_arg, CurrCand, CurrPart, n, tv, tv->tolevel)) { - ++tv->tolevel; - SpineTL = Spine+tv->tolevel; - SpineTL->tgtcell = tv->tcell; - SpineTL->tgtsize = CurrPart->cls[tv->tcell]; - SpineTL->tgtend = tv->tcell+SpineTL->tgtsize; - SpineTL->tgtpos = SpineTL->tgtend - 1; - } - else { - tv->smalldeglevel = tv->tolevel; - tv->finalnumcells = CurrPart->cells; - return; - } - - memcpy(NextCand->lab, CurrCand->lab, n*sizeof(int)); - memcpy(NextCand->invlab, CurrCand->invlab, n*sizeof(int)); - SpineTL->trcstart = CurrPart->cells; - TheTrace[SpineTL->trcstart] = SpineTL->tgtpos; - - tv->indivstart = tv->tcell+CurrCand->indnum; - tv->indivend = tv->indivstart+tv->steps; - if (tv->indivend > SpineTL->tgtend) { - tv->indivend = SpineTL->tgtend; - } - memset(CurrRefCells, 0, n*sizeof(int)); - ti->thegrouphaschanged = TRUE; - - if (!CurrCand->sortedlab) { - quickSort(CurrCand->lab+tv->tcell, CurrPart->cls[tv->tcell]); - for (i=tv->tcell; itcell+CurrPart->cls[tv->tcell]; i++) { - CurrCand->invlab[CurrCand->lab[i]] = i; - } - CurrCand->sortedlab = TRUE; - } - - for (k = tv->indivstart; k < tv->indivend; k++) { - if ((tv->orbits[CurrCand->lab[k]] == CurrCand->lab[k]) && (OrbSize[tv->orbits[CurrCand->lab[k]]] >= OrbSize[tv->orbits[vertex]])) { - - CurrCand->indnum++; - NextCand->singcode = CurrCand->singcode; - NextCand->vertex = CurrCand->lab[k]; - NextCand->name = ++tv->name; - if (NextCand->name == (NAUTY_INFINITY-2)) { - NextCand->name = tv->name = 1; - } - - if (ti->thegrouphaschanged) { - if (tv->fromlevel == tv->maxtreelevel) { - CURRORBITSIZES - } - ti->thegrouphaschanged = FALSE; - } - - if (tv->currorbit[CurrCand->lab[k]] != CurrCand->lab[k]) { - continue; - } - - memcpy(NextPart->cls, CurrPart->cls, n*sizeof(int)); - memcpy(NextPart->inv, CurrPart->inv, n*sizeof(int)); - if (NextPart->cls[tv->tcell] == 2) { - NextCand->singcode = MASHCOMM(NextCand->singcode, CurrCand->lab[tv->tcell]); - NextCand->singcode = MASHCOMM(NextCand->singcode, CurrCand->lab[tv->tcell+1]); - } - else { - NextCand->singcode = MASHCOMM(NextCand->singcode, CurrCand->lab[k]+labelorg); - } - - Individualize(NextPart, NextCand, CurrCand->lab[k], tv->tcell, CurrPart->cells, SpineTL->tgtpos); - - tv->stats->numnodes++; - Spine[tv->tolevel+1].levelcounter++; - if (tv->fromlevel == tv->maxtreelevel) { - tv->tolevel_tl = tv->tolevel; - trieref = trieroot; - - tv->answ = traces_refine_comptrie(g_arg, - NextCand, - m, - n, - NextPart, tv, ti); - - if (tv->answ) { - if (NextPart->cells != n) { - CurrRefCells[NextPart->cells] += CurrOrbSize[CurrCand->lab[k]]; - if (CurrRefCells[NextPart->cells] > MultRefCells[NextPart->cells]) { - k = n; - break; - } - continue; - } - if (tv->options->verbosity >= 2) PRINT_CANDIDATE(NextCand, tv->tolevel) - } - } - else { - tv->answ = traces_refine_sametrace(g_arg, - NextCand, - m, - n, - NextPart, tv, ti); - if (tv->answ) { - if (tv->options->verbosity >= 2) PRINT_CANDIDATE(NextCand, tv->tolevel) - if (tv->tolevel == tv->maxtreelevel) { - tv->tolevel_tl = tv->tolevel; - if (tv->options->verbosity >= 2) tv->expaths -= CPUTIME; - TargetCellExpPath(g_arg, NextCand, NextPart, n, tv); - ExperimentalStep(g_arg, NextPart, NextCand, tv, ti, m, n); - PRINT_EXPPATHSTEP(NextCand, tv->answ) - if (NextPart->cells == tv->finalnumcells) { - UPDATEMIN(tv->expathlength, tv->tolevel_tl); - } - - if (tv->options->verbosity >= 2) tv->expaths += CPUTIME; - if (!tv->answ) { - PRINT_RETURN - } - } - } - } - if (tv->answ) { - if (NextPart->cells == tv->finalnumcells) { - if (tv->options->verbosity >= 2) tv->autchk -= CPUTIME; - temp = (tv->tolevel_tl == tv->tolevel+1); - autom = CheckForAutomorphisms(g_arg, CurrCand, NextCand, - tv, ti, temp, n, NextPart); - if (tv->options->verbosity >= 2) tv->autchk += CPUTIME; - - if (ti->thegrouphaschanged) { - ORBITSIZES - } - } - PRINT_RETURN - - /* ADD TO NEXT LEVEL */ - if ((NextPart->cells < tv->finalnumcells) || (tv->tolevel != tv->maxtreelevel) || (tv->tolevel_tl != tv->tolevel+1)) { - ADDTONEXTLEVEL; - searchtrie_make(CurrCand, SpineTL->listend, n, tv); - } - } - else { - tv->stats->interrupted++; - } - if (tv->fromlevel == tv->maxtreelevel) { - k = n; - break; - } - } - } /* end for */ - } - else { - temp = CurrCand->lab[Spine[1].tgtpos]; - vertex = Spine[tv->maxtreelevel+1].liststart->lab[Spine[1].tgtpos]; - k = n; - - if (tv->cand_level || ((tv->orbits[temp] == temp) && (OrbSize[tv->orbits[CurrCand->lab[Spine[1].tgtpos]]] >= OrbSize[tv->orbits[vertex]]))) - { - tv->fromlevel = tv->tolevel; - SpineFL = Spine+tv->fromlevel; - - if (TargetCell(g_arg, CurrCand, CurrPart, n, tv, tv->tolevel)) { - tv->tcellevel = ++tv->tolevel; - SpineTL = Spine+tv->tolevel; - SpineTL->tgtcell = tv->tcell; - SpineTL->tgtsize = CurrPart->cls[tv->tcell]; - SpineTL->tgtend = tv->tcell+SpineTL->tgtsize; - SpineTL->tgtpos = SpineTL->tgtend - 1; - } - else { - tv->smalldeglevel = tv->tolevel; - tv->finalnumcells = CurrPart->cells; - return; - } - ti->minimalinorbits = TRUE; - - if (!ti->identitygroup) { - - if (ti->useTempOrbits1 && ti->useTempOrbits2) { - CuOrb = TempOrbits; - } - else { - FixBase(fix, tv, CurrCand, 0, tv->fromlevel); - if (ti->useTempOrbits1 && tv->fromlevel == tv->maxtreelevel) { - tv->currorbit = getorbits(fix, tv->nfix, gpB, &gensB, n); - CuOrb = tv->currorbit; - } else { - if (tv->options->verbosity >= 2) tv->schreier1 -= CPUTIME; - gom_level = getorbitsmin(fix, tv->nfix, gpB, &gensB, &tv->currorbit, - CurrCand->lab+tv->tcell, CurrPart->cls[tv->tcell], n, TRUE); - if (tv->options->verbosity >= 2) tv->schreier1 += CPUTIME; - CuOrb = tv->currorbit; - if (gom_level < tv->nfix) { - PRINT_NOTMIN_VERB(3) - if (ti->useTempOrbits1) { - for (i=1; icurrorbit[CurrCand->vertex]]) break; - if (i < AutomCount[0]) { - AutomCount[AutomCount[0]++] = CurrCand->vertex; - } - ti->minimalinorbits = FALSE; - } - else { - TreeNode = CurrCand->stnode; - j2 = CurrCand->lab[Spine[gom_level+1].tgtpos]; - i1 = tv->currorbit[j2]; - for (j=0; j < tv->nfix - gom_level; j++) { - TreeNode = TreeNode->father; - } - TreeNode1 = TreeNode->first_child; - while (TreeNode1) { - if (TreeNode1->vtx == i1) { - break; - } - TreeNode1 = TreeNode1->next_sibling; - } - schreierwrong = FALSE; - if (TreeNode1) { - while (TreeNode1->goes_to) { - TreeNode1 = TreeNode1->goes_to; - } - TreeNode2 = TreeNode->first_child; - while (TreeNode2->vtx != j2) { - TreeNode2 = TreeNode2->next_sibling; - } - - TreeNode1->index += TreeNode2->index; - TreeNode2->goes_to = TreeNode1; - - ti->minimalinorbits = FALSE; - } - else { - tv->currorbit = getorbits(fix, tv->nfix, gpB, &gensB, n); - schreierwrong = TRUE; - } - } - } - } - } - ti->thegrouphaschanged = FALSE; - } - else { - CuOrb = IDENTITY_PERM; - } - - if (ti->minimalinorbits) { - memcpy(NextCand->lab, CurrCand->lab, n*sizeof(int)); - memcpy(NextCand->invlab, CurrCand->invlab, n*sizeof(int)); - SpineTL->trcstart = CurrPart->cells; - TheTrace[SpineTL->trcstart] = SpineTL->tgtpos; - - tv->indivstart = tv->tcell+CurrCand->indnum; - tv->indivend = tv->indivstart+tv->steps; - if (tv->indivend > SpineTL->tgtend) { - tv->indivend = SpineTL->tgtend; - } - memset(CurrRefCells, 0, n*sizeof(int)); - if (!ti->identitygroup) ti->thegrouphaschanged = TRUE; - - if (!CurrCand->sortedlab) { - quickSort(CurrCand->lab+tv->tcell, CurrPart->cls[tv->tcell]); - for (i=tv->tcell; itcell+CurrPart->cls[tv->tcell]; i++) { - CurrCand->invlab[CurrCand->lab[i]] = i; - } - CurrCand->sortedlab = TRUE; - } - - for (k = tv->indivstart; k < tv->indivend; k++) { - CurrCand->indnum++; - NextCand->singcode = CurrCand->singcode; - NextCand->vertex = CurrCand->lab[k]; - NextCand->name = ++tv->name; - if (NextCand->name == (NAUTY_INFINITY-2)) { - NextCand->name = tv->name = 1; - } - - if (ti->thegrouphaschanged) { - if (tv->fromlevel == tv->maxtreelevel) { - CURRORBITSIZES - } - ti->thegrouphaschanged = FALSE; - } - - if (!schreierwrong) { - if (CuOrb[CurrCand->lab[k]] != CurrCand->lab[k]) { - continue; - } - } - - memcpy(NextPart->cls, CurrPart->cls, n*sizeof(int)); - memcpy(NextPart->inv, CurrPart->inv, n*sizeof(int)); - if (NextPart->cls[tv->tcell] == 2) { - NextCand->singcode = MASHCOMM(NextCand->singcode, CurrCand->lab[tv->tcell]); - NextCand->singcode = MASHCOMM(NextCand->singcode, CurrCand->lab[tv->tcell+1]); - } - else { - NextCand->singcode = MASHCOMM(NextCand->singcode, CurrCand->lab[k]); - } - - Individualize(NextPart, NextCand, CurrCand->lab[k], tv->tcell, CurrPart->cells, SpineTL->tgtpos); - - tv->stats->numnodes++; - Spine[tv->tolevel+1].levelcounter++; - if (tv->fromlevel == tv->maxtreelevel) { - tv->tolevel_tl = tv->tolevel; - trieref = trieroot; - - tv->answ = traces_refine_comptrie(g_arg, - NextCand, - m, - n, - NextPart, tv, ti); - if (tv->answ) { - if (NextPart->cells != tv->finalnumcells) { - CurrRefCells[NextPart->cells] += CurrOrbSize[CurrCand->lab[k]]; - if (CurrRefCells[NextPart->cells] > MultRefCells[NextPart->cells]) { - k = n; - break; - } - continue; - } - if (tv->options->verbosity >= 2) PRINT_CANDIDATE(NextCand, tv->tolevel); - } - } - else { - tv->answ = traces_refine_sametrace(g_arg, - NextCand, - m, - n, - NextPart, tv, ti); - if (tv->answ) { - if (tv->options->verbosity >= 2) PRINT_CANDIDATE(NextCand, tv->tolevel) - if (tv->tolevel == tv->maxtreelevel) { - tv->tolevel_tl = tv->tolevel; - if (tv->options->verbosity >= 2) tv->expaths -= CPUTIME; - if (TargetCellExpPath(g_arg, NextCand, NextPart, n, tv)) { - ExperimentalStep(g_arg, NextPart, NextCand, tv, ti, m, n); - PRINT_EXPPATHSTEP(NextCand, tv->answ) - if (NextPart->cells == tv->finalnumcells) { - UPDATEMIN(tv->expathlength, tv->tolevel_tl); - } - - } - if (tv->options->verbosity >= 2) tv->expaths += CPUTIME; - if (!tv->answ) { - PRINT_RETURN - } - } - } - } - if (tv->answ) { - if (NextPart->cells == tv->finalnumcells) { - if (tv->options->verbosity >= 2) tv->autchk -= CPUTIME; - temp = (tv->tolevel_tl == tv->tolevel+1); - autom = CheckForAutomorphisms(g_arg, CurrCand, NextCand, - tv, ti, temp, n, NextPart); - if (tv->options->verbosity >= 2) tv->autchk += CPUTIME; - if (autom) { - for (i=autom; i<=tv->maxtreelevel; i++) { - AuxCand = Spine[i].liststart; - while (AuxCand && Prefix(AuxCand, NextCand, autom)) { - AuxCand->do_it = FALSE; - AuxCand = AuxCand->next; - } - } - if (autom == tv->tolevel) { - autom = 0; - } - } - - if (ti->thegrouphaschanged) { - ORBITSIZES - } - } - PRINT_RETURN - - /* ADD TO NEXT LEVEL */ - if ((NextPart->cells < tv->finalnumcells) || (tv->tolevel != tv->maxtreelevel) || (tv->tolevel_tl != tv->tolevel+1)) { - ADDTONEXTLEVEL; - searchtrie_make(CurrCand, SpineTL->listend, n, tv); - } - } - else { - tv->stats->interrupted++; - } - if (autom) { - k = n; - autom = 0; - break; - } - if (tv->fromlevel == tv->maxtreelevel) { - k = n; - break; - } - } /* end for */ - TreeNode = RefPath[tv->maxtreelevel]; - search_vtx = TreeNode->vtx; - } - } - else SpineTL = &Spine[tv->tolevel+1]; - } - - } - - /* REMOVE CURRENT CANDIDATE */ - if (!CurrCand->do_it || k >= SpineTL->tgtend) { - SpineFL->liststart = CurrCand->next; - if (CurrCand->next == NULL) { - SpineFL->listend = NULL; - } - CurrCand->next = GarbList; - GarbList = CurrCand; - } - ti->thereisnextlevel = SelectNextLevel(g_arg, n, tv); - return; -} - -void -grouporderplus(sparsegraph *sg, int *fix, int nfix, Candidate *Cand, - schreier *gp, permnode **ring, - double *grpsize1, int *grpsize2, int n, TracesVars *tv, TracesInfo *ti) { - - int i, i1, j, j0, j2, k, k1, k2, w, w1, w2, c, c1, c2, c3, c4, n1, n2; - int prev, step, start, counts, StInd, CyInd, cycnum, orbrep, cellord, LghAttrInd; - int tmp, temp, halfsize, vtx, cell1; - int *cylab, *cycol; - TracesSpine SpineSDegLev; - searchtrie *TrieNode; - - *grpsize1 = 1.0; *grpsize2 = 0; - - TrieNode = Spine[tv->maxtreelevel].liststart->stnode; - if (tv->options->verbosity >= 2) { - fprintf(outfile, "-->> "); - while (TrieNode->father) { - fprintf(outfile, "%d (%d), ", TrieNode->name, TrieNode->index); - if (TrieNode->father->name) { - MULTIPLY(tv->stats->grpsize1, tv->stats->grpsize2, TrieNode->index); - } else { - temp = spinelementorbsize(tv->orbits, Spine[tv->maxtreelevel].liststart->lab+Spine[1].tgtcell, Spine[1].tgtsize, TrieNode->vtx); - MULTIPLY(*grpsize1, *grpsize2, temp); - fprintf(outfile, "orbcount vtx %d from cell %d (%d): %d\n", - TrieNode->vtx+labelorg, Spine[1].tgtcell, Spine[1].tgtsize, temp); - } - TrieNode = TrieNode->father; - } - } - else { - while (TrieNode->father) { - if (TrieNode->father->name) { - MULTIPLY(tv->stats->grpsize1, tv->stats->grpsize2, TrieNode->index); - } else { - temp = spinelementorbsize(tv->orbits, Spine[tv->maxtreelevel].liststart->lab+Spine[1].tgtcell, Spine[1].tgtsize, TrieNode->vtx); - MULTIPLY(*grpsize1, *grpsize2, temp); - } - TrieNode = TrieNode->father; - } - } - - if (tv->smalldeglevel < n) { - SpineSDegLev = Spine[tv->smalldeglevel]; - - /* Deg 2 and at least one nghb with deg > 2 */ - SETMARK(StackMarkers, tv->stackmark) - for (i=0; icls[i]) { - SETMARK(Markers, tv->mark) - if (SpineSDegLev.part->cls[i] > 1) { - tmp = SpineSDegLev.liststart->lab[i]; - /* tmp has deg 2 and at least one nghb with deg > 2 */ - if ((sg->d[tmp] == 2) && ((sg->d[sg->e[sg->v[tmp]]] > 2) || ((sg->d[sg->e[sg->v[tmp]+1]] > 2)))) { - n1 = sg->e[sg->v[tmp]]; - n2 = sg->e[sg->v[tmp]+1]; - if (sg->d[n1] > 2) { - if (sg->d[n2] > 2) { - if (Cand->invlab[n1] < Cand->invlab[n2]) { - start = n1; - } - else { - start = n2; - } - } - else { - start = n1; - } - } - else { - start = n2; - } - counts = 0; - StInd = 0; - for (j=i; jcls[i]; j++) { - step = SpineSDegLev.liststart->lab[j]; - if (Markers[step] != tv->mark) { - prev = start; - counts++; - do { - Markers[step] = tv->mark; - PERMSTACK[StInd++] = step; - if (sg->e[sg->v[step]] != prev) { - prev = step; - step = sg->e[sg->v[step]]; - } else { - prev = step; - step = sg->e[sg->v[step]+1]; - } - } while (sg->d[step] == 2); - if (sg->d[step] == 1) { - PERMSTACK[StInd++] = step; - } - } - } - if (counts == SpineSDegLev.part->cls[i]) { - factorial(grpsize1, grpsize2, SpineSDegLev.part->cls[i]); - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (k=0; k 2) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (k=0; korbits[tmp] < orbrep) { - orbrep = tv->orbits[tmp]; - } - } - cellord = SpineSDegLev.part->inv[SpineSDegLev.liststart->invlab[PERMSTACK[k]]]; - StackMarkers[orbrep] = tv->stackmark; - for (j0=0; j0lab[cellord+j0] = tmp; - SpineSDegLev.liststart->invlab[tmp] = cellord+j0; - if (StackMarkers[tv->orbits[tmp]] != tv->stackmark) { - tv->stats->numorbits--; - StackMarkers[tv->orbits[tmp]] = tv->stackmark; - } - tv->orbits[tmp] = orbrep; - } - } - } - else { - factorial2(grpsize1, grpsize2, SpineSDegLev.part->cls[i]); - for (j=0; joptions->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (k=j0, i1=k1-1; k 1) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (k=0; k 2) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (k=0; korbits[tmp] < orbrep) { - orbrep = tv->orbits[tmp]; - } - if (tv->orbits[temp] < orbrep) { - orbrep = tv->orbits[temp]; - } - } - cellord = SpineSDegLev.part->inv[SpineSDegLev.liststart->invlab[PERMSTACK[j]]]; - StackMarkers[orbrep] = tv->stackmark; - for (k=0, k1=i1-1; klab[cellord] = tmp; - SpineSDegLev.liststart->invlab[tmp] = cellord++; - if (StackMarkers[tv->orbits[tmp]] != tv->stackmark) { - tv->stats->numorbits--; - StackMarkers[tv->orbits[tmp]] = tv->stackmark; - } - tv->orbits[tmp] = orbrep; - - temp = PERMSTACK[k1-j]; - SpineSDegLev.liststart->lab[cellord] = temp; - SpineSDegLev.liststart->invlab[temp] = cellord++; - if (StackMarkers[tv->orbits[temp]] != tv->stackmark) { - tv->stats->numorbits--; - StackMarkers[tv->orbits[temp]] = tv->stackmark; - } - tv->orbits[temp] = orbrep; - } - } - if (i1 % 2) { - orbrep = n; - for (k=j; korbits[tmp] < orbrep) { - orbrep = tv->orbits[tmp]; - } - } - cellord = SpineSDegLev.part->inv[SpineSDegLev.liststart->invlab[PERMSTACK[j]]]; - StackMarkers[orbrep] = tv->stackmark; - j0 = 0; - for (k=j; klab[cellord+j0] = tmp; - SpineSDegLev.liststart->invlab[tmp] = cellord+j0++; - if (StackMarkers[tv->orbits[tmp]] != tv->stackmark) { - tv->stats->numorbits--; - StackMarkers[tv->orbits[tmp]] = tv->stackmark; - } - tv->orbits[tmp] = orbrep; - } - } - } - Propagate(sg, SpineSDegLev.liststart, SpineSDegLev.part, i, i+SpineSDegLev.part->cls[i], n); - } - } - } - - /* Deg 2 and at least one nghb with deg = 1 */ - SETMARK(Markers, tv->mark) - for (i=0; icls[i]) { - if (SpineSDegLev.part->cls[i] > 1) { - tmp = SpineSDegLev.liststart->lab[i]; - /* tmp has deg 2 and at least one nghb with == 1 */ - if ((sg->d[tmp] == 2) && ((sg->d[sg->e[sg->v[tmp]]] == 1) || ((sg->d[sg->e[sg->v[tmp]+1]] == 1)))) { - counts = 0; - StInd = 0; - for (j=i; jcls[i]; j++) { - step = SpineSDegLev.liststart->lab[j]; - if (Markers[step] != tv->mark) { - n1 = sg->e[sg->v[step]]; - n2 = sg->e[sg->v[step]+1]; - if (sg->d[n1] == 1) { - if (sg->d[n2] == 1) { - if (Cand->invlab[n1] < Cand->invlab[n2]) { - start = n1; - } - else { - start = n2; - } - } - else { - start = n1; - } - } - else { - start = n2; - } - PERMSTACK[StInd++] = start; - prev = start; - counts++; - do { - Markers[step] = tv->mark; - PERMSTACK[StInd++] = step; - if (sg->e[sg->v[step]] != prev) { - prev = step; - step = sg->e[sg->v[step]]; - } else { - prev = step; - step = sg->e[sg->v[step]+1]; - } - } while (sg->d[step] == 2); - PERMSTACK[StInd++] = step; - } - } - if (counts == SpineSDegLev.part->cls[i]) { - if (SpineSDegLev.part->inv[Cand->invlab[PERMSTACK[0]]] != SpineSDegLev.part->inv[Cand->invlab[PERMSTACK[StInd/counts-1]]]) { - factorial(grpsize1, grpsize2, SpineSDegLev.part->cls[i]); - } - else { - factorial2(grpsize1, grpsize2, 2*SpineSDegLev.part->cls[i]); - for (j=0; joptions->generators || tv->options->writeautoms || tv->options->userautomproc) { - j0 = j*(StInd/counts); - k1 = (j+1)*(StInd/counts); - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (k=j0, i1=k1-1; koptions->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (k=0; k 2) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (k=0; kcls[i]); - for (j=0; joptions->generators || tv->options->writeautoms || tv->options->userautomproc) { - j0 = j*(StInd/counts); - k1 = (j+1)*(StInd/counts); - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (k=j0, i1=k1-1; k 1) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (k=0; k 2) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (k=0; kinv[Cand->invlab[PERMSTACK[0]]] != SpineSDegLev.part->inv[Cand->invlab[PERMSTACK[StInd/counts-1]]]) { - for (j=0; jorbits[tmp] < orbrep) { - orbrep = tv->orbits[tmp]; - } - } - cellord = SpineSDegLev.part->inv[SpineSDegLev.liststart->invlab[PERMSTACK[j]]]; - StackMarkers[orbrep] = tv->stackmark; - for (k=0; klab[cellord] = tmp; - SpineSDegLev.liststart->invlab[tmp] = cellord++; - if (StackMarkers[tv->orbits[tmp]] != tv->stackmark) { - tv->stats->numorbits--; - StackMarkers[tv->orbits[tmp]] = tv->stackmark; - } - tv->orbits[tmp] = orbrep; - } - } - } - else { - for (j=0; jorbits[tmp] < orbrep) { - orbrep = tv->orbits[tmp]; - } - if (tv->orbits[temp] < orbrep) { - orbrep = tv->orbits[temp]; - } - } - cellord = SpineSDegLev.part->inv[SpineSDegLev.liststart->invlab[PERMSTACK[j]]]; - StackMarkers[orbrep] = tv->stackmark; - for (k=0, k1=i1-1; klab[cellord] = tmp; - SpineSDegLev.liststart->invlab[tmp] = cellord++; - if (StackMarkers[tv->orbits[tmp]] != tv->stackmark) { - tv->stats->numorbits--; - StackMarkers[tv->orbits[tmp]] = tv->stackmark; - } - tv->orbits[tmp] = orbrep; - - temp = PERMSTACK[k1-j]; - SpineSDegLev.liststart->lab[cellord] = temp; - SpineSDegLev.liststart->invlab[temp] = cellord++; - if (StackMarkers[tv->orbits[temp]] != tv->stackmark) { - tv->stats->numorbits--; - StackMarkers[tv->orbits[temp]] = tv->stackmark; - } - tv->orbits[temp] = orbrep; - } - } - if (i1 % 2) { - orbrep = n; - for (k=j; korbits[tmp] < orbrep) { - orbrep = tv->orbits[tmp]; - } - } - cellord = SpineSDegLev.part->inv[SpineSDegLev.liststart->invlab[PERMSTACK[j]]]; - StackMarkers[orbrep] = tv->stackmark; - j0 = 0; - for (k=j; klab[cellord+j0] = tmp; - SpineSDegLev.liststart->invlab[tmp] = cellord+j0++; - if (StackMarkers[tv->orbits[tmp]] != tv->stackmark) { - tv->stats->numorbits--; - StackMarkers[tv->orbits[tmp]] = tv->stackmark; - } - tv->orbits[tmp] = orbrep; - } - } - } - Propagate(sg, SpineSDegLev.liststart, SpineSDegLev.part, i, i+SpineSDegLev.part->cls[i], n); - } - } - } - - /* Cycles */ - for (i=0; icls[i]) { - if (SpineSDegLev.part->cls[i] > 1) { - tmp = SpineSDegLev.liststart->lab[i]; - if (sg->d[tmp] == 2) { - SETMARK(Markers, tv->mark) - CyInd = StInd = cycnum = 0; - for (j=i; jcls[i]; j++) { - start = SpineSDegLev.liststart->lab[j]; - if (Markers[start] != tv->mark) { - counts = 1; - CYCLES[StInd] = start; - CYCOLR[StInd++] = SpineSDegLev.part->inv[SpineSDegLev.liststart->invlab[start]]; - Markers[start] = tv->mark; - k = SpineSDegLev.liststart->invlab[sg->e[sg->v[start]]]; - k1 = SpineSDegLev.liststart->invlab[sg->e[sg->v[start]+1]]; - if (SpineSDegLev.part->inv[k] < SpineSDegLev.part->inv[k1]) { - step = sg->e[sg->v[start]]; - } else { - step = sg->e[sg->v[start]+1]; - } - prev = start; - do { - counts++; - Markers[step] = tv->mark; - CYCLES[StInd] = step; - CYCOLR[StInd++] = SpineSDegLev.part->inv[SpineSDegLev.liststart->invlab[step]]; - if (sg->e[sg->v[step]] != prev) { - prev = step; - step = sg->e[sg->v[step]]; - } else { - prev = step; - step = sg->e[sg->v[step]+1]; - } - } while (step != start); - CYLGTH[CyInd++] = counts; - cycnum++; - } - } - - CYCPOS[0] = 0; - WorkArray[0] = CYLGTH[0]; - for (j=1; jmark) - - c1 = WorkArray[CYCPOS[0]]; - LghAttrInd = 0; - for (c=0; cmark) { - Markers[cycol[c2]] = tv->mark; - CYCHIT[cycol[c2]] = cycol[c2]; - SpineSDegLev.liststart->lab[CYCHIT[cycol[c2]]] = cylab[c2]; - SpineSDegLev.liststart->invlab[cylab[c2]] = CYCHIT[cycol[c2]]; - } - else { - SpineSDegLev.liststart->lab[++CYCHIT[cycol[c2]]] = cylab[c2]; - SpineSDegLev.liststart->invlab[cylab[c2]] = CYCHIT[cycol[c2]]; - } - } - } - - SETMARK(Markers, tv->mark) - c2 = LGHATTR[CYCPOS[0]]; - c = k = 0; - while (corbits[CYCLES[c4]] = CYCREP[CYCOLR[c4]]; - } - } - k = c; - SETMARK(Markers, tv->mark) - } - for (c1=CYCPOS[c]; c1mark) { - Markers[CYCOLR[c1]] = tv->mark; - CYCREP[CYCOLR[c1]] = CYCLES[c1]; - } - else { - if (CYCLES[c1] < CYCREP[CYCOLR[c1]]) { - CYCREP[CYCOLR[c1]] = CYCLES[c1]; - } - } - } - c++; - } - for (c3 = k; c3orbits[CYCLES[c4]] = CYCREP[CYCOLR[c4]]; - } - } - - k = 0; - for (i1=0; i1options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - } - for (w=0; woptions->generators || tv->options->writeautoms || tv->options->userautomproc) { - AUTPERM[CYCLES[w+k]] = CYCLES[((w+j) % CYLGTH[i1]) + k]; - } - } else { - break; - } - } - SPECIALGENERATORS - if (w == CYLGTH[i1]) { - MULTIPLY(*grpsize1, *grpsize2, CYLGTH[i1]/j); - break; - } - } - } - if (SpineSDegLev.part->cls[k1] >= SpineSDegLev.part->cls[k2]) { - for (j=CYLGTH[i1]-1; j>0; j--) { - w1 = CYCOLR[j % CYLGTH[i1] + k]; - w2 = CYCOLR[(j-1) % CYLGTH[i1] + k]; - if ((w1 == k1) && (w2 == k2)) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (w=0; wj)*CYLGTH[i1]) % CYLGTH[i1]) + k]; - } - } - SPECIALGENERATORS - MULTIPLY(*grpsize1, *grpsize2, 2); - break; - } - } - } - else { - j=CYLGTH[i1]-1; - w2 = CYCOLR[j % CYLGTH[i1] + k]; - if (w2 == k2) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (w=1; w 0) { - CYMULT[0] = k; - k1 = k; - counts = 1; - for (j0=i1+1; j0 1) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (j0=0; j0 2) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (j0=0; j0cls[i], n); - } - } - } - - /* Deg 1 */ - SETMARK(Markers, tv->mark) - for (i=0; icls[i]) { - if (SpineSDegLev.part->cls[i] > 1) { - tmp = SpineSDegLev.liststart->lab[i]; - /* tmp had degree 1, and its nghb too */ - if ((sg->d[tmp] == 1) && (sg->d[sg->e[sg->v[tmp]]] == 1)) { - cell1 = SpineSDegLev.part->inv[Cand->invlab[sg->e[sg->v[tmp]]]]; - if (i < cell1) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (j=i; jcls[i]-1; j++) { - AUTPERM[SpineSDegLev.liststart->lab[j]] = SpineSDegLev.liststart->lab[j+1]; - AUTPERM[sg->e[sg->v[SpineSDegLev.liststart->lab[j]]]] = sg->e[sg->v[SpineSDegLev.liststart->lab[j+1]]]; - } - AUTPERM[SpineSDegLev.liststart->lab[j]] = tmp; - AUTPERM[sg->e[sg->v[SpineSDegLev.liststart->lab[j]]]] = sg->e[sg->v[tmp]]; - } - SPECIALGENERATORS - if (SpineSDegLev.part->cls[i] > 2) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - AUTPERM[tmp] = SpineSDegLev.liststart->lab[i+1]; - AUTPERM[SpineSDegLev.liststart->lab[i+1]] = tmp; - AUTPERM[sg->e[sg->v[tmp]]] = sg->e[sg->v[SpineSDegLev.liststart->lab[i+1]]]; - AUTPERM[sg->e[sg->v[SpineSDegLev.liststart->lab[i+1]]]] = sg->e[sg->v[tmp]]; - } - SPECIALGENERATORS - } - factorial(grpsize1, grpsize2, SpineSDegLev.part->cls[i]); - c1 = cell1; - for (j=i; jcls[i]; j++) { - vtx = SpineSDegLev.liststart->lab[j]; - SpineSDegLev.liststart->lab[c1] = sg->e[sg->v[vtx]]; - SpineSDegLev.liststart->invlab[sg->e[sg->v[vtx]]] = c1; - c1++; - } - orbrep = n; - for (j=i; jcls[i]; j++) { - if (tv->orbits[SpineSDegLev.liststart->lab[j]] < orbrep) { - orbrep = tv->orbits[SpineSDegLev.liststart->lab[j]]; - } - } - for (j=i; jcls[i]; j++) { - tv->orbits[SpineSDegLev.liststart->lab[j]] = orbrep; - } - tv->stats->numorbits -= SpineSDegLev.part->cls[i] - 1; - } - else { - if (i > cell1) { - orbrep = n; - for (j=i; jcls[i]; j++) { - if (tv->orbits[SpineSDegLev.liststart->lab[j]] < orbrep) { - orbrep = tv->orbits[SpineSDegLev.liststart->lab[j]]; - } - } - for (j=i; jcls[i]; j++) { - tv->orbits[SpineSDegLev.liststart->lab[j]] = orbrep; - } - tv->stats->numorbits -= SpineSDegLev.part->cls[i] - 1; - } - if (i == cell1) { - factorial2(grpsize1, grpsize2, SpineSDegLev.part->cls[i]); - /* the cell has size two */ - if (SpineSDegLev.part->cls[i] == 2) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - AUTPERM[SpineSDegLev.liststart->lab[i]] = SpineSDegLev.liststart->lab[i+1]; - AUTPERM[SpineSDegLev.liststart->lab[i+1]] = tmp; - } - SPECIALGENERATORS - } - else { - /* the cell has size greater than two */ - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - SETMARK(Markers, tv->mark) - halfsize = SpineSDegLev.part->cls[i]/2; - i1 = 0; - for (j=i; jcls[i]; j++) { - if (Markers[SpineSDegLev.liststart->lab[j]] != tv->mark) { - Markers[sg->e[sg->v[SpineSDegLev.liststart->lab[j]]]] = tv->mark; - PERMSTACK[i1] = SpineSDegLev.liststart->lab[j]; - PERMSTACK[i1+halfsize] = sg->e[sg->v[SpineSDegLev.liststart->lab[j]]]; - i1++; - } - } - temp = PERMSTACK[0]; - for (j=0; jcls[i]-1; j++) { - AUTPERM[PERMSTACK[j]] = PERMSTACK[j+1]; - } - AUTPERM[PERMSTACK[j]] = temp; - } - - SPECIALGENERATORS - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - memcpy(PERMSTACK+halfsize, PERMSTACK+halfsize+1, (halfsize-1)*sizeof(int)); - temp = PERMSTACK[1]; - for (j=1; jcls[i]-2; j++) { - AUTPERM[PERMSTACK[j]] = PERMSTACK[j+1]; - } - AUTPERM[PERMSTACK[j]] = temp; - } - SPECIALGENERATORS - } - SETMARK(Markers, tv->mark) - for (j=i; jcls[i]; j++) { - temp = SpineSDegLev.liststart->lab[j]; - if (Markers[temp] != tv->mark) { - tmp = SpineSDegLev.liststart->lab[j+1]; - Markers[sg->e[sg->v[temp]]] = tv->mark; - i1 = SpineSDegLev.liststart->invlab[sg->e[sg->v[temp]]]; - SpineSDegLev.liststart->lab[j+1] = sg->e[sg->v[temp]]; - SpineSDegLev.liststart->invlab[sg->e[sg->v[temp]]] = j+1; - SpineSDegLev.liststart->lab[i1] = tmp; - SpineSDegLev.liststart->invlab[tmp] = i1; - } - } - orbrep = n; - for (j=i; jcls[i]; j++) { - if (tv->orbits[SpineSDegLev.liststart->lab[j]] < orbrep) { - orbrep = tv->orbits[SpineSDegLev.liststart->lab[j]]; - } - } - for (j=i; jcls[i]; j++) { - tv->orbits[SpineSDegLev.liststart->lab[j]] = orbrep; - } - tv->stats->numorbits -= SpineSDegLev.part->cls[i] - 1; - } - } - } - /* tmp had degree 1, its nghb does not have degreee 1 */ - else if (sg->d[tmp] == 1) { - factorial(grpsize1, grpsize2, SpineSDegLev.part->cls[i]); - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (j=i; jcls[i]-1; j++) { - AUTPERM[SpineSDegLev.liststart->lab[j]] = SpineSDegLev.liststart->lab[j+1]; - } - AUTPERM[SpineSDegLev.liststart->lab[j]] = tmp; - } - SPECIALGENERATORS - if (SpineSDegLev.part->cls[i] > 2) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - AUTPERM[SpineSDegLev.liststart->lab[i]] = SpineSDegLev.liststart->lab[i+1]; - AUTPERM[SpineSDegLev.liststart->lab[i+1]] = tmp; - } - SPECIALGENERATORS - } - orbrep = n; - for (j=i; jcls[i]; j++) { - if (tv->orbits[SpineSDegLev.liststart->lab[j]] < orbrep) { - orbrep = tv->orbits[SpineSDegLev.liststart->lab[j]]; - if (tv->orbits[SpineSDegLev.liststart->lab[j]] != SpineSDegLev.liststart->lab[j]) { - } - } - } - for (j=i; jcls[i]; j++) { - tv->orbits[SpineSDegLev.liststart->lab[j]] = orbrep; - } - - tv->stats->numorbits -= SpineSDegLev.part->cls[i] - 1; - } - } - } - - /* Deg 0 or n-1 */ - for (i=0; icls[i]) { - if (SpineSDegLev.part->cls[i] > 1) { - tmp = SpineSDegLev.liststart->lab[i]; - /* tmp has deg 0 or n-1 */ - if ((sg->d[tmp] == 0) || (sg->d[tmp] == n-1)) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - for (j=i; jcls[i]-1; j++) { - AUTPERM[SpineSDegLev.liststart->lab[j]] = SpineSDegLev.liststart->lab[j+1]; - } - AUTPERM[SpineSDegLev.liststart->lab[j]] = tmp; - } - SPECIALGENERATORS - if (SpineSDegLev.part->cls[i] > 2) { - if (tv->options->generators || tv->options->writeautoms || tv->options->userautomproc) { - memcpy(AUTPERM, IDENTITY_PERM, n*sizeof(int)); - AUTPERM[tmp] = SpineSDegLev.liststart->lab[i+1]; - AUTPERM[SpineSDegLev.liststart->lab[i+1]] = tmp; - } - SPECIALGENERATORS - } - factorial(grpsize1, grpsize2, SpineSDegLev.part->cls[i]); - orbrep = n; - for (j=i; jcls[i]; j++) { - if (tv->orbits[SpineSDegLev.liststart->lab[j]] < orbrep) { - orbrep = tv->orbits[SpineSDegLev.liststart->lab[j]]; - } - } - for (j=i; jcls[i]; j++) { - tv->orbits[SpineSDegLev.liststart->lab[j]] = orbrep; - } - - tv->stats->numorbits -= SpineSDegLev.part->cls[i] - 1; - } - } - } - } - - SETMARK(Markers, tv->mark) - i1=0; - for (c1=0; c1orbits[c1]] != tv->mark) { - i1++; - Markers[tv->orbits[c1]] = tv->mark; - } - } - tv->stats->numorbits = i1; - return; -} - -boolean Prefix(Candidate *Cand1, Candidate *Cand2, int k) -{ - int i; - for (i=1; i<=k; i++) { - if (Cand1->lab[Spine[k].tgtpos] != Cand2->lab[Spine[k].tgtpos]) { - break; - } - } - return (i>k); -} - - -boolean findperm(permnode *pn, int *p, int n, TracesVars *tv) -{ - permnode *rn; - if (!pn) { - return FALSE; - } - rn = pn; - do { - if (!memcmp(rn->p, p, n*sizeof(int))) { - return TRUE; - } - rn = rn->next; - } while (rn != pn); - return FALSE; -} - - -int spinelementorbsize(int *orbits, int *lab, int size, int elem) -{ - int i, j, val; - j = 0; - val = orbits[elem]; - for (i = 0; i < size; ++i) { - if (orbits[lab[i]] == val) ++j; - } - return j; -} - -void Propagate(sparsegraph *sg, Candidate *Cand, Partition *Part, int start, int end, int n) { - int i, vtx, n1, n2; - - for (i=start; icls[i] = 1; - Part->inv[i] = i; - } - Part->cells = Part->cells + end - start - 1; - vtx = Cand->lab[start]; - if (sg->d[vtx] == 2) { - n1 = sg->e[sg->v[vtx]]; - n2 = sg->e[sg->v[vtx]+1]; - if ((Part->cls[Part->inv[Cand->invlab[n1]]] > 1) && (sg->d[n1] < n-1)) - Propagate(sg, Cand, Part, Part->inv[Cand->invlab[n1]], Part->inv[Cand->invlab[n1]]+Part->cls[Part->inv[Cand->invlab[n1]]], n); - if ((Part->cls[Part->inv[Cand->invlab[n2]]] > 1) && (sg->d[n2] < n-1)) - Propagate(sg, Cand, Part, Part->inv[Cand->invlab[n2]], Part->inv[Cand->invlab[n2]]+Part->cls[Part->inv[Cand->invlab[n2]]], n); - return; - } -} - -trielist *searchtrie_new(int n, struct TracesVars *tv) -{ - tv->strielist = malloc(sizeof(struct trielist)); - if (tv->strielist == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - tv->strielist->prev = tv->strielist->next = NULL; - tv->strielist->triearray = malloc(n*sizeof(searchtrie)); - if (tv->strielist->triearray == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - tv->strielist->triearray[0].father = tv->strielist->triearray[0].first_child = NULL; - tv->strielist->triearray[0].next_sibling = tv->strielist->triearray[0].last_child = NULL; - tv->strielist->triearray[0].goes_to = NULL; - tv->strielist->triearray[0].index = 1; - tv->strielist->triearray[0].name = tv->strielist->triearray[0].level = 0; - tv->strielist->triearray[0].vtx = n; - - tv->strienext = 1; - return tv->strielist; -} - -searchtrie *searchtrie_make(Candidate *CurrCand, Candidate *NextCand, int n, struct TracesVars *tv) -{ - searchtrie *st; - if (tv->strienext == n) { - tv->strienext = 0; - tv->strielist->next = malloc(sizeof(struct trielist)); - if (tv->strielist->next == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - tv->strielist->next->prev = tv->strielist; - tv->strielist = tv->strielist->next; - tv->strielist->next = NULL; - tv->strielist->triearray = malloc(n*sizeof(searchtrie)); - if (tv->strielist->triearray == NULL) { - fprintf(ERRFILE, "\nError, memory not allocated.\n"); - exit(1); - } - } - st = &(tv->strielist->triearray[tv->strienext]); - st->father = CurrCand->stnode; - st->name = NextCand->name; - st->index = tv->newindex+1; - st->vtx = NextCand->vertex; - st->level = tv->tolevel; - st->first_child = st->next_sibling = st->last_child = st->goes_to = NULL; - if (st->father) { - if (st->father->first_child) { - st->father->last_child->next_sibling = st; - st->father->last_child = st; - } else { - st->father->first_child = st->father->last_child = st; - } - } - NextCand->stnode = st; - if (tv->newgotonode) { - tv->newgotonode->goes_to = st; - } - if (tv->gotonode) { - st->goes_to = tv->gotonode; - tv->gotonode = NULL; - } - tv->strienext++; - return st; -} - -boolean lookup(searchtrie *t) { - searchtrie *TreeNode; - TreeNode = t; - while (TreeNode->level >= 1) { - if (TreeNode->goes_to) { - return FALSE; - } - TreeNode = TreeNode->father; - } - return TRUE; -} - -int *findcurrorbits(schreier *gp, int k) -{ - int i; - schreier *sh; - - sh = gp; - for (i = 0; i < k; i++) { - sh = sh->next; - } - return sh->orbits; -} diff --git a/tools/nauty25r9_mac/traces.h b/tools/nauty25r9_mac/traces.h deleted file mode 100644 index bd63e6e..0000000 --- a/tools/nauty25r9_mac/traces.h +++ /dev/null @@ -1,57 +0,0 @@ -/****************************************************************************** - * * - * This is the header file for traces() version 2.0, which is included into * - * nauty() version 2.5. * - * * - * nauty is Copyright (1984-2014) Brendan McKay. All rights reserved. * - * Subject to the waivers and disclaimers in nauty.h. * - * Traces is Copyright (2008-2014) Adolfo Piperno. All rights reserved. * - * * - * CHANGE HISTORY * - * 28-Dec-12 : final changes for version 2.0 * - *****************************************************************************/ - -#include "gtools.h" -#include "schreier.h" - -typedef struct TracesOptions { - boolean getcanon; - boolean writeautoms; - boolean cartesian; - boolean digraph; - boolean defaultptn; - int linelength; - FILE* outfile; - int strategy; - int verbosity; - permnode **generators; - void (*userautomproc)(int,int*,int); -} TracesOptions; - -#define DEFAULTOPTIONS_TRACES(opts) TracesOptions opts \ -= { FALSE, FALSE, FALSE, FALSE, TRUE, 0, NULL, 0, 0, NULL, NULL } - -typedef struct TracesStats { - double grpsize1; - int grpsize2; - int numgenerators; - int numorbits; - int treedepth; - int canupdates; - unsigned long numnodes; - unsigned long interrupted; - unsigned long peaknodes; -} TracesStats; - -#ifdef __cplusplus -extern "C" { -#endif - -extern void Traces(sparsegraph*,int*,int*,int*,TracesOptions*, - TracesStats*,sparsegraph*); -extern void refine_tr(sparsegraph*,int*,int*,int*,int*,TracesOptions*); -extern void traces_freedyn(void); - -#ifdef __cplusplus -} -#endif diff --git a/tools/nauty25r9_mac/traces.o b/tools/nauty25r9_mac/traces.o deleted file mode 100644 index 6f03765d7f082af38a737a2cf534b8fc6c8905a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172492 zcmeFadwf*Yxi>zO3=kl7hZ;3%)M#T*QrlBf)0Sysn@#q>-Y}zR!O|8a?I_ivmcopp zP6A;vkmX`RP|#?-@cz!P=kUI7eGj(B8ZSr!mI>(LW>pl$>rtlDRzM4QDf51xXRSRm z2~qK!{?70GapnWrx3$+^m*>8o=UF>G_|vgb9*?)!gFpE1!~Z6_sKS5zPRIX&B0e4V z&()RcVGF&3-_g_6HR|-x{}Q^1-<&y-s}@Dnxw@Vnm^nRv?VjyFDPJG8W#(B$p0iHE ziO;jdEknmSbFRH6a@B$#U0e4JzCCBo;Q9{eddjF%_)YtK5%*19c|25Q;V)O;1a)_4 zeV#JaF1J4|Cl`5im-z*1YvFIsobbZPf@`k-iM~0sz7kzuqpsv?)K~Z$d`12J@xp}# z1?J4L%;{$ShCA-_3tlX2pB{$X3uxcZu3wm+kfH6HrrT4c-&lX@;PJ~*oI` z9GMfn{>E#rzjDr;pjB9AzOHYrZr@JSN9}9sD)OA73Kq1S`g_&YbLKAi(REj;heO*} zhWF{WUw3jo;I6R0V?Ca$)tl;XH4bHTI%W*tptmdVe?Pwe&p7V6tH|>n02c3grr|&R zZq@&3ZoBaRT>Ss6zZtgpH}iYu<>m}?`giU2KQ6*Vgv7sw#1>nG`W*55V0dwv)1Jlc zCQBT(MWP~`&Bp3%If6cA%L#V!>vZ-g{x{Y2S>k=W{Yk3jhvqDEwt0m)XLg#N+hRi# z-n7L-eaEudjWsB-U)|qqC-xd0=U(dZY^=c@eK+Bu(uqE!V-%hQ#Z~KV@q#Vx-HEr& zv%Zum{4^B|<`IKbi zhTJ_{sQF0rMN92uzU+Tj^xtCyi283hA`0~1DDv+mBcQlrg5twq_&|=JY#Ej^F)sjR zdgw$clkML;OhvXhiz={_jrabiSLFErMqT@xR@68Q8{olq`rj%FiX)nBejcet&PAqa-&wJYZkb{}bG@#U{J|58tu- zkDlk0r2}ER=ZDmeD?= z>pZ+-CZ|_t?c@}1U7vIA4x{4%swKP0j=z4?j&C}O0V=NR!;Q#jTRd;a-}Xk%o@@MU z#9Kv09vnaSXB^)(7LUaLi_3bc&vyKSq6I&pGMjXnZFJ0y|6JqxopX)(yXo~8=NiZM z;QubXUbzf^rY|c?PAfr?-NO}`wXBNEjJM-`WkLVZ=x>5hF#P?IS!Oa=?M*K7ify$Y z#9uG2eLvz$?2c5%Kk!Dzp*@k2!ne$ZWGprl}Qb!9GhI;@f6wawW~4lbT${)yu^tA^$tke=)_AwhVRK zvYnI#OSF_ZV!IaB>kiv;_B!z**PubsmQ6Lb%#jAAXX*Cql0k70pg^ips);J~q?$_T zo55r?GfqeBODAxj!T%z9qSZD1eqyhJo%2x!-RQNGm$;zwYbu;g0Z0HkDS*y93_2+S zoeuy|8g%}*M}f|7aKv;D0-bEpf@=wMmg_Pr>BztTPvPf>$*KPi=sDjw2XpyJ@Z;YT zebogYJ-z@Vo-v*Wo>nmvv$`)oDKzGo6q*}bt|9FeiZx(BF>2XV1-!Ivp`Vzx`vLJ5 zSA5(h<2|4v=s&QaqHcFk9JY@fwncy4Zd)9%j~oO7EiB7@zMQ_BIVpcl&DmImKe~1% ziO^|VYq1joY~gha$mSM1J^^KZc3c^=B&gI>M@~keMI|WZ zpp^XxRSh6T-|h1J=Yd~AaoyTb;!n{3xwbcK@d|&`5djZt|D);s{LK=+`Cb!l_PUj# zYV5(}^3?A0 zK4*tNw53tTOdNJT%|hHsKb}}K!4Ef zMHo~Dew+eO`ILyn(vQ4EK$@ndnu64cAg0JnEqNNJxNLG#OFH!_?y?;PmpJ7a!Kvd; zXLV6*EbfzhK=e1|tHxhU2NUt2I0ib689Bh1_(D)72{1$AqmW2(RU~on8zJ#;mVaS+ z^ae*RC)%2As=yh6OrY*CFd!s8Fgjj_c{e0}@5m_nvVlxnwq!tYp$KK|cxxHDvw=Pt zIT^54g5rQqMeI=kELkMRb2DBK%Insq?}Lo6k%p36WQ)y?xPK3If-Gf6K*#4A@AP4? znoFE{$0q1P#pqQpHGufiZWOZheBoHbLy&5!(np>q+-C-r;?Ybsu{@J%@=+N`MYd>N zhuJby%U{I}bQ^}LfchA^u3PNFeN#0RFjGtahy(p{Bu9Nh)oLryhIMQ}m4ela%yINH zxouts_V#afM(~=elSkxGC=d8 z1*AQ`!LD!h+u>a<{ZM3)Bo3!|Mp*$q+u<|paOHhj-~HeNzHC2UjAa0gBp|QDsL+s` zIH#e>_L)MRxqVk%OqP3X!2-0L?j3K6)zt(McFOY3q=BWAX>@`kW0os?#}@%rexRGU zk)#89598BOO~_NXH{SPG{j{ytIA;kxJib`IPxe?L`p{TKYR}<$P zoUr(UE5ZY&;ET(G;(-#nBIGI{%7xhD3R@xZ4&J4?mrdn*c!X&?VKo>uC`-^TY1W&< zs*Z)^I>%Un8_ zOW+RYo4H|S?WP&L~?aSbb`BUi)Kh>xprYNjTQfc8lp_??jVCg4A;De|Du|= zk&nkUk7^s*LerQzb;2Rj7&mo7roog9k7h%2to83f0UddglPvEx&S~=4;jfAM2eW-d zJ?MGt&pg37dBKc-#}jRJ!g1;b%xMW6JWlaqz^-C}a;&UxXZEKAuaNjKB;Ljs`2}d# z@?>C!r|oNwys^aYe+>lelCr!!Vu$_0_k^p!_X$_qte$I3=f!cad}Wl zIi{S}XonAh$T;C&&^J&y^*Bevs%Z0X%*%J*wJr_YM= zhm{a9hlcJqQ^KVyEm8WLiJ&FICq?OUU=UGLJKI#{$flVXd>SoN$d6EiYim&)1A1|h zBdAQABrReBO-9!pT#hbKocWsz;eb_)KNY1PYNjef^3+~xTqfL&`2<2aWYjS_7M~B8 z@GS#G=HSt9mPF1(0kUgE52a_L1OaUBxh(*3_IP^wUe=SoXz257Ur?;EY0w0>f=mW- z8fIYzY$Ef)CZe5oxZmZEBmjghZ)1)j`1BdTi~1nS+p#=XE&}VFuGjD}4N1BeT2la!Urlw0 zV=ix%flfPFzaFBc*h#}%Fuu%-y6y08Q~sh8HTo-8MaP&~->OUn(GyX*$_ei?vs*;@ z{eZbuG_8cuTVOreAL}=>aeB#2PWo&7=tv%uh1V9=FH4uh5SRa+jNJK=|6uDFQGchM z-ImzB_|N#XD8)seR6-!*zV~Gt{qVpl~ zEJi+BDM!gmeC880G5!GnYe@W|?G#~%$-c}tG!b=#8sq9sv>?q zr-aKN)O=c&-(iRMLXo@Ml#RV+!(#-P!087?WmiDFW~}Lx8|XX!4~+Z!tNO)0)36R2 zfe!@V?SSnx&}SKeqh2U)nbtWX+JpH5oI?Ip--2$ZvD*$mWeQ)Xh7z(;%m71wAtYXg z3d2Jaf>}(dd>Ya+dE(+T_TLR;@9qA9I z(wk3%w5RRg1t`Gs7>17!^df*^Qw*Y@rs1vx9uhABQ+TS~XIc&iqJS}hw$tnMtLr0u zL!mopq}dQBP0i@|0lprTkkfd4`mCh=UNGD@H5o~KBvRc;JDb?r=Gfu0O<8%j9e&;k zPhaCP8!B%TPsNJFhj#dxP&l&2Gg(&u+KhkXjeHrj5-xJVj%unv7Kbe?LyzJ;-I%*gw|`Cn)0ouwgMV| z9e*Fn-WU*WOa%z74@K@(;{VhVTYeWaRNrrh8<*Ni-#2al79)N=hA|{|0pb}Hz-Tl~ z2DPITA}Muo1~x=ppqoak%Xy zv!VXh))LeVK=rM3P_LPNI{Iv~ImZJ)0v68V{(c7f4|D3S%$y5yIspi7u4Ts3y>&HAzxyg0fyLmp)R}G^zV!Ig~T6qogn$dsq65|!V0v`|_RH2zsEWO9b4~9)v-YqP25Bta zK;upgwTo>KRNqE?g}QGiD|-t2A8v5M<1JAO!ukjRa5)4a9DNU(VnRUFKLW{w)C&j8 zId*)rFS{-JuMXC?WMGNu--Iti9esp!N;$h5yo_2KNU->2tbFYQNNM+co(0Za{{!B) z&=3zA5?@qK?dvo;ssJyv8smS#NX%yn@RCa`)v_BTP0)&A3`5+b6!p|4kysYwOM=60 zoZ(}N;xwTK#&QBNtZu`F(f7KTn31kih+8%%5To zm8(eRgj!T$$;!K&FsL&aDPXekuA*4b623d>9W9RIv`>OuH6)pN%mxbIlf0Cu|2>xX z1v?Cha1GHAOO)S=rep_<#0|Ji699EvqJY6z;4qeV_IlX1EP-MKnVIVb@dJzlVJR#? zM1&@Z$|VlO0@WL8i16KoBKmVZ5aRA32z4u@`O=UBJ(7SW^M%3mXYf<~89=G!KWwb{ z8D0ky7!E)Kq!FzyAv}wA!cy;!J|TQvmc(vuclRU+p-y<0DQ7_nk)<%gwN?6`f-n|- z4j+Lcl9@lKzm|7v046)rKhO#i1koInMV5CvVJvLZ`XI>CeOR;swJGn2o(<8>|5Pkv zi9Y7qEPz-S`j%Q=uYB3Ec52XYtm z64OsmVRYS26)V~pludXQej%#8gW-iJ^pvmwBavU+`LKJBpmQ5M2dxP<=3`$`}-9gC*HQv&`& zu~mV@pNN%cC^fpiiUBGRxkF-)EB7f{N2_;d(eP>sxm)biase&=_YhqQ$nvFPljYrQ z!j-{T@g8>^LFbR;aVB)b#bN#IW6`fo)9@3x~U(k{-bu7s1%WT(YU@@Ld0oUPW6(;&lUP# zG49_~wMiU+#=jYADUH3TUupziQ6KEsjX~^_Ysmg#1a=BO@gB4Me{Ma)wE^ITC8p$h zLGm!qt4Mr;{0{plUMuKM2J6b)ME@?Cpep5z9$FJ;h19<-(ws9WK$@hkh{kq1ya`j> zjz)vH@<*B>s^xew$C|yDu@FbUvh#miwIbSrEv(#8J&#od3XbkF9jV253RpF zc?J4kdAlfmn5{?qW3PwE`WHe6eFCsdjY>{0f`s5|^PL)v;0}}IX0SrvLJIw@Fe0q1 zgK+BmHHnwOWMduHcX|UNmLNhzb>aTMnEvNM=99DPu*7yR-DJ4k+&Ttj=Hs#$q5>O3 zhy^Bn;~Q9Xj;*6&3e*dL{B3CPA+ee1;=3T6L+B!CEJ;=_AtNy-)CYqyWE>K}v<&lg z>PVn&uO{c1Af}+MKb+u8e4Z3sqAIAN5!M8zE+Chs6KwyEg;(LmT3cQUi~ie1sDfqE z;+v|VbQr+p6_DacXO))p-3s1kN|rVJrT0b7({lwi7P84W2MTR=a{&6LE+b0sgS(K= z&JIL>quXX@`z`-LV?_&%sjG-W9^MOL$`U$BVhjhcmkpW!sbSwzQ=t6}AXuvKLVzVI z1&4*O4?4B4;}N1TuDoR?%SZbUwVnp5DDhp>?^_+oIN>eO8^GQ!xbZIPoI}Kz_JcGYXdfls51BIgT&vJeK{ol5)f}e4K7$qgJd5N?_m`KP*#JHC+j3(p?;-+i)mg( zHfcO9v`1UAvC|2|lIMFAm_%?EkiiXrzBjR4+4?0dKc@&HK>&P@nip6bJg!;K%ViY{ zfk3GAAL!iy@B2B}WeTYcp)R3>VGq;0f$Fr2nVDK5Z$AygfyK9!_>UwG;V)ep9h>zn z%bcP3xgc`!G@D3#ohjckf(_#Qn_<7+5$n&KIt0FKd<|^^(oydwCVdl>8n5LUViO^e zj{MY;Yl!<8OaC`242q|~go!haxbb>D2n>aecwtEWWYHJf^Yl!{)_>&x0Pu!f#R|VB}?QqpMRJBZre9SnXrAC@fuOUs37G9#B)qt1L6V`))6kXzd>Jx+Sj8jI@b4o25&5d+ zZ|#ZH+F|CQy4@D@$^hv{O8`H>71zk!qo-SsHt1~+R2vx4*BV{-qNF7l?gHMUu3MOP zl}^^vWB7;cvx}J}07)u36nA>07VCk=lnIcTevi)*2lYE}=2>tJ8d-*#FHZW_hmsc;O-))4`$Eaf zy>)~A=R~mQBL{|hu=R0Hvh)nHrC@!Es_gkll=eVPz@sueI$b~VnZ;O6h;J^+rY!$E zu_wTaSPm#K(UYZ#3G)La5*UexVQI>oLX;aQpwM!QrrHGv}5Hr<0lSpKN&xNtVh7Cr4L{6)&>r3or z|IM~@i9du7+1EU${OzBIPcZ!LKRD0(0o?76jb8jZC^4d`KJ&4 z?#C2eapFbczSd*%Z-8!=Xj z{}1izXB%Hlu6g-bnOa@{p3Q{=Y0BxEr!z{3+B zoOf{klz41>3(%197HSLOY~+g?Ez?h---DmIPafna50G2r#Yt3=2Si6ecjNk1-A2bV zCwn|x2tYpp^}D{@jx^YnTNReU@hx`Tk43$I$d%Vl-(1kds+cZmQAu{_UWB599l9Z7 zl53nYloa*~^a2s&1+*phvlDZeTDDU;Om*?`1RbWznyc8S3r41pF{0PbXrp0{;AikF}`d44a1m!T>to6DWB zF09l5E*Tut0-p=nTp>)@h*T@&OuX5uJ@Minf&wy)h+IY%a|ACyD&~S_ytT!?K=gNrrVR+gEB+HkL+woxhN+Kfud z23JrvOa+jW6}qWDsxX8>ovwzsRb4HcYv@>me$uf*HrsTxWpfi9n`Cn(9V;P?Rih{9 zu^x%}FpV;b1qDnIWMIi4F9Hues1Ko`rYNp_4i7r`-}yHgD^~3x!Atw$wN43PrPt*o ztYz8ZgEm&Lo#Gn@`S*>4Xb4A%<#(A!9wYeyHXj)KApOufaKqGC?4?5JyP9wY0vVf? zV?XHD4UaeWcp|Pl0&%&0;>7}|!(2nSm$JNPFkMwXi7>WfwkiOC(BS_GE{zJ%7!+*( zzzx#@>}2}=ysnK0MXFNaqqa(#0DDI6ilTCtGcZWpj^}ulgI1a z4(tK$x|@29uD>u0ut3Bf*dZMeQ@0nw2TP8wxb!6!ICAaH`)j-M(q^;aetIMJX5Ld< z$2G{NYWO0yu#ul+ZLxAE3Su@f0YL>T#tM3O$Y`Of)U}~rxqaIdO&j3j3DUH(=J7cy zK0b2>1XSIg0NN9$_UM-ASvCjx?P^EYV6rrUlAcg8WGe{l%9nYx^tF=?A%fK z2fJ5lZ;KFYliF9hfQ-jx>AotU8NQ>>Z&e+Ag^$N|^f>2U`1YccQsYlp{VeVuH5AQ~A*%-z@NM0{BL6g-e_ z^$msxJA5Bc3SCN(5#w-fQTV4iRYG zrWDi^QfGtJH84*AJ?WkJqDoKXV!ZY*^sHgxBBLX)om7-tX}sZqi)D{`+%V;oYfX6@ zp)vG_55_JoG5&d5yuU0na^BW4@qR=l-AcfgE}^pVn_D2KEa#Cb9Iyh5mm0RVxh{Sx z1gyh)XmlMyJV*1o`CHy0W2V;9>v*iFMD2ErSPp-NA1^Esy%my6sXHcC>Z3Pt^CAmO zdFu+a5OznwC%FOfd7?9TWp)s!1880f9*XEGgg_hCwiN0kNZ>;8ZxzMPrG-rHEz?uh zzkGKW*Dn`!poR@+#11&}*A;k61;bIivMolYCNZJWjj7vBuDEllslabqHYJVEj6eE& z`k0ZJLa)m;JaIRd;l>5H0h1WeJ~q>pCBA~93>jv8!ys~VcHQ3NRWgv6do_uv%DpI) zG&GKUh}*0A8Tl!OVK`9?Xx@wSp%k3iB5x{>XT3q?&}FN5ZAbKl3~Q4mZzzKy)$52S zart^k#?GASpfG~l9K$+p)VLalVqdPLE zQ#cT{g5%pJ!S%Wi`gHUkGv|iHu}mdt!)$MW+(BfNM2z$?Zp5*|Kq6xWx#zp^@+F)r zc+tT`7!9!jHt$?bh8Hk z-S5-zxg-#RplqiC`N7tc*49+F7g?o1KR$iDGpFTdI``=eVw#`Miwo$F6JAQWu0YcX zbeJJ%(sp1zBJsY~62G}38y$&-B|IzWnX%%Zxb;lbpuCh#98Z6zP^?SYWlabK-E+v8 z`2zmGNOyip3QpONYd|P#kcz;oQB<>R(9G@eMO7YXCW=U8M(LA)ymf%SqvAQ%k93D< z$S|Mn4kN+R@nzr@4V(j0C^I^~k8avnL+O}?6S(zrq@`LolV+KigvkdHg7f6}IjUa* zk&q?hhfoN3)`6=h+lbw8IV_kv%yMNEr7POTlT_;H=w(tf#UzSz*7FcORf{0Uy$e^* zNm$P7zri6|K=os(P;u}<^-thczWfu^j{uFn=;x2GnB&JLHQ7iQ6`)EXOt*nt<|?J< zqOIxp3gLC}F%@1?0#_@FCzWdmI~c!Q%Avseh7KnfLsBTg>RQ<*adKfx15-FgFquEW>zCP+nni7 zg_4WC#)=<9@^WMJ6VL=HTgY{5Bh!dI*FSQp|v7 z(ccekKdVYu)83=Lm))Ff&YBG!Ts-!wJ9Uq>;N?W$qMw;hps{)Ty33bk0Y?qp8QwJvx6Y~0T?!HqOzT(2u{aDKNm=tRXNZa)t@~ zeVQf(R5-lACra1j_9LXa!6(5H2Nz6a^~X&9+{@}uo?e*parI{S2Oo(>EE&6(XW%NQ zKSCdRE+l>jF$zR=I|yADsLW#D@_xC=%;&;v@l>Ds&I0 zZs;CHnFilZHqjkIJ@V4RV6ZVs1O}jmz{7^UNUvL;KK%<=wQ=zWL>`817HzEL#fWr4 zUep5!c3FyG7tyb!?*jUo{9YDIUkLplX-Z!lE1n2Qy4!5<{X*(qbA8AFn2N%MSJzYKnm{E<_B9|Tmq8= zXkRHJVah2IW())jBfc8I0!Ij_*gZj*WA%{aoF5fV3vy%Br|ca?@xpfT#Z};(U`Fd$ zfAu@z$OcS(JvU_!o%)7&L|K1drkeOETp=lpK{;DtF?fk7xeR=> z?#AVP$w^q$_T2|pTZn0$h`u8CHbfdm?=Z7m5bpm7okWLol%FRPY+d`CAXH&z9^NIU z?iE>ockMn=e>Z|($`Jf=SL+z%L4@e8CCYtnNAx)g_v`3H#WWN0A({r*W~d#krC6dG z#wLa^JG>ntL`PK#8o>j?1?V-S<14sniMsSO9I3zXK>31l{lv@UK22c>Mn^5pm?9Py zrXz7fZUz;}kckNl1{{|_XaeH6pTLAIIXopPx^#sIbrGOojU*usT!Z*wQdQ$r=)pmW z$mcBa90xK zOB64_v}{Va5~#*iTCy50BX1fVB%lQa`^n)^6~A4%2d7*Se2;aF9N0i%H=*#8PIh3h zd%DCk zB1GU$&?pWZ1~+^N20(V@jh>H~rr#!~c@b9hThqG*7==1I;gq)&ji7+Cj?87Cf4aFU zRTiu=OX2IOn+_LKYE-j8tsoqolfcLDso$dCh&bpAh$jv18+w$pFKBN?2kuo3N%qcI zLGeM_zu4ut3bSYxmAzPq3GvJtU5yz39HHPzL%fzIdyxCPC(B9%2Rs9Js#QeGC|+c1 z+Zk|%FT+@w?djXM5f9`eZ4+N~C^oQ0W){vZm5I&=WWBZ4Y zp~QU{!iIZEm@$$|QKzg!Cc#rYsQ_hK@c5rII&Q|@x;~t({PDR^_{XJxj2nzCEg1ho zY|(J6NQ{f0;=1)J)F3?-NSwoOhHguE(!Xbv)0fqq1#}W^pb3T(+bJI5O&{Wd59M%^ zR2^+eIbw9JM9C23u8^Dp9>$b@Fnj~P)X4jK9a-9kwJi!ED6#zq7fubyACMMHu>+e` z>;RazT9y z5L4_9PB*kk6j?9RHzBcr#%qwc^?;p%&ZEm1Pxl+L6^}J5Ao3IHq(F)smuA|NcO4GO z2W&Kv1}NVjm%jMcK^Fy$DeZ^<7{-X@fQ49(AOWC-Gl96DDz>XY96G4kSRM4je|Q-g z(&5~)41uj3c6hTXA12K8*DsHp1M}uiI1evj=iztZJPbDeYh3{GelGw1tpns~P!3fq z=AxMzWdk(f8aeL=VC3B5n1(WPG86$hiJ!uMconVfhIY!vc5e!B%F~~OJVlEl>_t$V|jo6tE@LLy5!;EGx@I`g#R;n+yY3}XP3~7 zce9kU8g>nqgn(RQ>iRmi8i}*eQUFOWky?UjlCmN9ue=A*<>_(IBQ?IeUD<3V1Gz|$ zh2PG>+h>aZ*pK%81L%ht|0_JP@4}gpkoYT@da^&ZxdAhR)DaMf=m8~;NH4~jo+O&X zPnsh1lN6GquLz`S!f1Eg^*fS$dQFv_0*fBAceY)r+KisF5}YX^66{u1S)`}h zzt8A+1CKz5_Zcf+JQLNQo_-29a)Q#3^dm;sKQMKOf(|e-)b>tH&{_oTBTsh%y~V<< zq729)**9eVK?*@5k(#1B?%i}j`7)Z%$QUFC$$W$50W;}?qhxX>0Jy>1S|LmCciXxv zQjT`+GFE<#+F4Hb0U9vLHhU=z!#{$SRzN!qtkr`9f=C22f5l>pHd=^#iBjdCH4VC| z!4(JGH(?~W7RVat;L*vl{xP(UYMLm^A3rytXwAfapr=FvXS1*6`9!3_yjq|b3_FS zLI((}mz>2AAGtk4#z_1M=&de^V4A{`Xahtl2p2@|AlpjhJjiBgZIeYDxViQQyvNMi z=SYrnr%{G_?BbhBoTRVarDq7Hw!_FGa}L}dA&ZG}fyG)n39j*o@c|Ke$m4J+!De&3@i8yxDvyzi7Fu8^7QrGXDVx#QsDBB8t!4s7$ z-#vVJ2Pq8v9~p^@fh+01P+ki$duRHOII+Z^_Y+7elq5Ra^(;SsfF@b9bXwAF-KpeJ zSKw8mgZy%5DE!w+vT`E?*+-$|1rRJ*qv1wLB21KbUgJv{0t-CSKwESac092un)PAS7olseIMCZ(quSw=U*45 zHHe0a)*9IeF;%}>Khj0jBN2G{`i~eZmxKC>`c<4TmIOv!zeZiKYVecDPw|Zfv*3Y( zh$w29W+gW+)Wghd1Rf*Y-_OcFPAgOL(UuMYg5DJD?mJ9*MUPbV)V*;nn9D0KNAgGZ#FzkM1}(Xq66UH_fvkK zJ%*JMDab7=Na9c};LwO(#Bv!hR)zY!&os>LY;DbxC8ltk=SN5SQJx2h@&`(v1$kueos)hd-lW&AQ)FSL*z< z4@OTyj=)L_(kxYS*GB+71R3G}=Wzc_x{t_)`ny1UiYWGISL{i^IXE2A`yl+{lRV&U z-x|!XAPYm}f)z0ewtsP%Ld7*P-@0e(X0 zVXUwaB4LZxo#`WgA>7GJO)ik7DAD^u!LoHwa_A*iqa487(tpGhVM7uMzcQAS+Mz+` zKP9ws;C~d9oOY63W~`UDF-IzIkCs45Tbem-ZZ{+pC;U82tUv>#TlOtw z84UrPl!D={SRbLO66MjC$fd)xq)B=L!7fG-J8H|rV?n!!JZPJ2T{ca-6#(ARSh}A+ z8JDPKFrOk(+Dz7u(v-=c<5RC-0o3JFst|wJg&pvzY*FNv1=qrBS+kHFyxckjUJx{g zc&;9oUw$Tj1$d#xGXQ))$E!l?Gg$dhJX_H;h9Yw#YZklOzQ9mJFJ>z9P{SZYH_@OB zd}UO%)HFCsLm3*C70n3t(b7nu6SKP1CALG^70kI7##7r6a#ltKEUp>Qy&`-hh&ibE zbzlkfeXv4g?P7EtU)oSpIFs{hOPr-WA&o>i|+L zftEhTkz|PJ+h&Q-KnHQYUfQApnew82-dzZEY;DUkuQkLzAs3lSOol%gVDYwLnHOkq z1E54RuXAupt(WyK@A7YtoC!&0yRmWuB8&86QA&>)uA%nuch|x`1M+ID_#9qG>v%M2 z%+-jxC=Q(U4hyAFArj7^*Z={DaHa{a)o?U0#4$)H76r{ou23BO&On121LBG zE;|>t!^%f6VuxMo z$@1HfFO}9eQ3}HU{1TeVLwWo|-H)O@k2uN7Z*y)2QT~Mgsc5;Aoc?V{>?{iUHxVl+ z?JfLj3h1uADcYI}^c6PS!kALpPCVdjM@}8Y1MaBXW_rJCV-%=}>4l`bBMLW_0!Ba@ z6mlI)rd7s@55Wjv)`In($!hxTcj#K3@5Q+&zl+6DTJcl#|6e59v7joS8zP@Q@)+WN8BGyoi^OEKddY~1wOco|7LY>_326uf*9E8J7429RvU^6!ix!y@oCK~zmbPMMX%*eOY@vqA&87?~#= zvILSX71_{`04^sFp#Ix{uXiE<6+YI{bsz{xd$!8|LbM`8Sy?p7!q=n~s}+IH;>vE? zxM3%MyD!!k5)jLuZiUkT0~6>AT#<74TCL@~;YGI`);^6YV!u=RwQIP`i5%Flg1w2M zazdZgQf!*m321y=1vX7WKKMJ7T{IKY45;E()7wv8#q;P6EXo)R9wqdN(Mom4 zuK?X?(luTAO|RT2`%k9IEgauKVxy;**qV&4X4blz^-eT5FZnn!CNMhi(Uv{cH9E-Y2-9YVZ9 zTTYOpj7UWKsrQMVYQap4n)JX(-h(F+x{&*7c~0cS%GYWN zcu-yq_y6mb1eG_bEB_a!$3u2Jm|@z@;z~H*sM*4$BkQ+>!dE6dp=4!!5Qg|T>1Voj zL56ISA$CD_-?|BO6;-2 zlRgTDk=D_-3`&77pi}$q5c-J3Xjr9Q zi54J}04w^io!kjc{~59sJ1`bQ!)jfJygIaogIO?meLaKSLa$q|W(3_S$Y=1v(0m3I z)He+iBW706RN=s|-|;Ml3pduw9tse$z-u+H2>@P`f5cOye{Sd@KV5LO@u)$v=5DN@ zJ;p7uo}R>eRg_D|Ur@dvV4Ap+Ql;j-FdwlYXS8ToLbPi|3mk5ERW*5KMN250b&w+o z;g(ADlcm-92x?mfD|7_)75He7UKm_57edWN(@W4MM(CMnZ^Jla#VL5r{j{`OIHP>S z_bZH*6ijd2OI~s5gWN^ddPJEnER%%Zg0kc#sqdgUq&tf-YBL|MCruP{xK0P>y*7V} zu+DQkJw*nqTH+rT8!MOs(SD4D1KL4G0mO*G0?h%zD)<*92-1ksB4v=mft`{m(yD4H zh>}%t!l|YbjDEhG6g#YJ@%nxKzS?pTU4dQb((=q=#6%e#v~Sv!R+l_K zmZ;Hv5{qbRcuwlnoUrP|<{KMPK_cd@6cO*2Qv{||o#k!8_F2>xwXHz=lN0bHzl-{3 z@SH7>zlZwI(tuhb8N+AbB4&%(uxMhLU(8qsqwabK31q}opct+0R#%920ay?cQCWHj zpIgmuUEgFd!~!2=H>9EpcNt|6>$C{{V?NMknveeq541}H#p5sp!KDa6>>&i=oT}4c z9OHNOYZQy~f?+1;^0G4a@R zk;~GaeF95e*Hu{(`+CadL}yI@aw08lh((~TzDPOH`FZgf3lTBy>rG>#R;8R*K*fTm%6>XJ`7A>Hk3uobWf*BjTj%VQ*6fn{Yr~=sK71Ih)dh#MlLr39!*kr5BZkX;Z ziHw3D%fF0VdbkSM?*O}ti5#(LV`~NIpGv{P``K|w+YK6>^OD=JLEU4MD%SaAJ{}kA4AJhm zaA!ntP0j^%Q$wxrl?3-O!71a3P*g@Tyk z$pZ9`U7`EKxDGN?f~to`sDB%>BJCSBiI2y1W|*GLyoBP_#$AG7j{SPK!`#@uXCz+) zJBMus0wyxl=El}d{jK_)w5l=1do<+>&U<(Ml(03v5kz;bBSEQ{(8$rna8Xj>YjEz- z+l=a=%MneyMu}R;iA}v`Nk~bp6=t#&p?Tl4tzx9gb1Tss73tq^6UClY?>!;T#0tkOxLRTKA%KS3PaB#53_XiV1BG1ZrP3I=V5!aE)a# z9;rNgDM#gXpbdXaKSpD(S_ntYwlON)^D~=GH*V za>+CI=O&0q4tHWQ6Vk@+jDto^%M+)MepkPjy9MqT|M7Y7l>foP6mo=*LBo(X7pf zq=UY486?EVh5Ad${^Cb{3lL}a6#1wAu+05WX)bZ;e?FED^8Q2EK?1}G7KD&E7&)2k zBmOBR5tytmt08K1$nAlaJ=Hc30S&(Z^d%5#Ftp&aucpbBk=7e`A@&hLxx1t9fm`AG zm(}&` z&>iTca5-x5L{0-^Mdsv{^dhwYQ7`EgIM*bjzyoHjUF^sHXvh@G9|2pZBjPR`c`9#Y zb`e!Y?NH8mQ_FOHnt$+qW}z^D3C=yYTHYPdZ4gx8KN@>Ia}vD_MxftG6$6GaRNQXB zPOn7fA#Xou?-JZcp5UE0Sl(^YsmC(OC0N+_UJQiVNIrBS@tTj!YuoY zI*9#118=U9lozH6l(F9?OFOo!64PqP2(ua$lWd~SP^OxQOH&k^hN)ZBFjFTP$pzZ6 zFh|@zC;|Yo>mX9_DCd;~PG=UYCV`DR#W~H;Gw>{?UTw<3KW~528UQCUi=xY?6_?XS zYGQ}0^6QG&yNFVmMXDFYwjP&Zizh3`89)VRcNc%RhT=w*;Q&M)+o#p!q3^ohkl2Di zd&(k)Mdx;ZfAnOeBow>S|A7AG#z1@v-u!FBGf2)r;5ziJ*WU3~L2mv$6jj@+T=2ZH4RFyPTXaRK+7^ipevPPmTmP62cRkP|lHe za*C2~!S+Vm?SUk(lMakgE0r?E{TE~++diSr$2-piFv@}8auHJ1GM-Z~bn#TJk`_$z*FJ(^K0tI(F> zTe^$K+U=YBs4xQ0qSznh8447JNzS{&!5YI@ag4-=G+D1`al`+vDGmmV5OO^CTViYN zLAd^zwFe`m2#Ves9Z6*~-=c*;b$Tum>?7C*0)$x{E2&0js6^p);kh_w#^3iXFmVrk zSkXy+5XXktpNb#k_CLt&|9N+DUGf&*_yzJab;I(%5_>6r4DtPM7|9o~4=MPa(eW^z zfDamp>kF(a*`}F9L{d!*b9u}wBAQ~XI0lg&6s92E9M{FX|q%&`Mb=olMFH=rU~PeJk% zHvh638Xcoi8M#RU@}C*+OnvPCwVaw84gm)nNFz?Z3_oJ!YpfWk561YN3`b;#0 z^!Y>|ffE2NdTO2u)wsg}7$otKSPDrCY0m}p4Q8xvk%DxdxvV64ReVTM0_BfOqdBA~ zS;bGVD48Blu;|}9k0+@6;C3IMzjJu_(G&bBa>ejzJC!i^D%d3hm{|T1QCVq2^s+4w zj3xpF==dbef#zS}!&L*DiC|{OWWshPTd|6??i`F;YIzS8$Ipd1*bIU);w`J|LpBPU zc0_$*gh>PoNtLcGPp>(DkHO|@WcRhffVvw@+ep0073#5JCJIIls0F9V?c5068+t!> zxPd1w#5-x@lbSQ-_%-bw9By2NwZAop{q{z`>c}f#;jetmk;p+ryP(BmNXkf_9pv4& z3SN=DTsU(Y>obnLyae0)Vx#YqlBFZDP&kUbRQAOF34dr5qHr$d=4k>er@`~IwO6vm z5t`0%IqK;p(*C}F3gf@dOJpS81>3?32D))wFB}9Yr3_1f4gHCNoBjo11Pjr0|K@ zag7B7BuYwgHJDcTzG|rlJRWv2Bl%`!fjkPMYn=T)J&`M!Mi1K1J>J;viNI^^IoWK9 z<|Zt6Ax|BttAI0XG#nJKVMt)E>J52{guoa0@~9FI_o>Vq4XgNjWJ=ED^Jzl>Zq@9TnuJgj50$M{<57 zvLx{qe6JcS-bQ0gxr~wNf@OqS@X?7ul9>X5s_St)H4*{U$bV99#&E;0bD2MjtZe9n=hv<;ZBW;SSP(qEq#&x%WciNf&xD zHE1eX5m^U1E*Eh@Nd}i!6)bR{X!?QTD^3RdrqgE-831IX?~O}w$}4eIL9q!6ER~D+ z#grz*h|(k@)dbQ@>B+^Cs%wbD%%}xZik^z!On7j~IMgei86F4rxk;=(1_zv*6b@X< z$Kh}QUxf4O$KgOO%kJbVGqrp@bq+to-w+%c9e=_FadE7wQCcIlqudxIV*#b*ccDV%`1SQX-l=WwVArOSOo}{ag zP4zam>|tS`fKpw5Vn)_~yirZj|Ka0sQ#8oVT1ca2UQ)#d%Bp~zTS-gNiSM6FMB%0M zkIpNUjd<8Dgc$;E1`FY23DDdHAmBOHuxN1>mLrym^zhJfAFsC^`WhHn@=9D1 zanPyEc!{(?JhEtwbP=t&ZAS6q1~Dk!wIqvdkmRBj6r2}B+9^goJAM;V5_S}UxN*FD zif3iEwl1culQc-EVz@3t#cs{GtfouL|A)4dQ$EULk4LeST2hmF4UbIn{!PityfK6f zM-hOfQ%&h^<+BVQmsj{|5fgDMFC00!`E~S6WaBDz5~X<)L3zW35d{RPfenG#IV}J1bA?`w zSZuZ9=)n7mJ?L~Uh!R*xD1Ddh3aQytYiZzlek zQd6}6e&Sdokn9`B3V~$bINAb6T^ySr;nA^DG*_n3y^lpt_Z#~Ah3KgsAwt0I(x;#& zbW;)|T?9qmyJ2t?i65z@l|NIkacM;ENm^AJO|hLbhd@~Kqhu0kuJe= ziYj^`_UH5=x)>th={+k#Fyy{pT3$A%2d3F3n*nF8;Q-z7s22pq(R-K7HAT`AQS z8$BK%ONs0HpcG&IwrhAtLhxAx1bGVWYQiMHk|o1f(Fo`z+MJhel%G6M26KO$5;lNs z)oImrCm)q`LqbNO681uY^hwW#)4;$Z*U70+!q`^i?}vQZi6vMx21YrO_ci?L9B(Sp zicIgxiC&QiQqNVFgJI}1zih${UX3>&!x^Ovv_QJBpedG8|L4I0MFvN}Gh_OQdjGE0 z%iy<0qX+X32tpJ?fux#niZjWRVnm}U?j%tOo1tkJJJbJU;<5y zggb*=lnMe(NQ1ywLKvLgncj(1Fj^u%=R;dS{<^PZL^=qFI^oX z-P}VC9G=J`J9#tKtKP@4)jYo1*n9+|UW)OjQ!|GatfF4`H zc^_h}=kZ>(UbTtbql2|C7C+33Joi_DsubVYU3`w+p6UZ$U~d9mqfBm=EuwQy$1mimGLHCAlKm*JZMHHRfbPGQYf!rV3=0LJwHp!SJ( z2fcY0-79#DecWHtjQtI~MZ_)r9oh`Z^(5XpUk1lqZOdt8FzTe5g6M(As2TD8PrM#u zT+=jNJtyI3%Gh-WRx9!|{3aNetLqpYw_(ueD!m1_RTs#wi%~--cAh(+@0m$IKQWErMqI(Ov9=rMkaApMh zL@fMsd>qa|QGhe_=^X!V%2`mG+<{Xb_}at=lEY0bXb~{J>Vz=)XV~R{T6H5IPrOw# zFKJ>-MvIhof{>2cWwg@r!K3hr8pin@gr8D?m1WIryq`5IG z$Dl5ULOIx`nP+2X#}^?vB4mj?$POM6Jau$Ux=paM53bMch^j-6C4wNN4G&M{E~jro zd?D`yvL|)SMTN>z8-~S>pEu<+Wd%W}(6+7PKR~-cj2F{$+d|BuJt1b1Vh2|W zr0>BrA=pA?YABp9cL;KX+8yGiYQ?axgOL|GWJrgiwLaFP3hfHNV63K05Uy5NHfZtr z)9eLm{TalbNFWxUKdt=Vbic(DurCz!%MROrGgHIjxyLU-@5Kmwf3qlx&_Y-&mRq&mhq0hdxZQ0ghBq6mxXZ3JgjhR4~w+?#8SaOdz4oClCdf3MR0hCWNR{28j_$ zkP(nKZi+DkdWau`lrk^UEH6F`a~)Nz2Sy3 z|0KL2QqWIgUxafZO73JO2Jc6zXoq0&j1B1m+d<&bCR8#OdXG4w>_ZfbDQ|`Zm5siq z6%tNEM6n)IG4&yNIo>4oeG!h#O&<9bP{#HS)E#!j0c6rPW$CXQN*|7%?2yl8yl=kc z-yVAtS^0`G#fbR8Yy_c2%E>Jdz9OfAmaqnVK^BSo?<8N7^lqw;^8{jX{%xaUG3dH1 z_9A2ccgLqAxFG+E2T&*n?P9>_*ntPQK~633lLO=R z)+l%&J`WGXNLe-1(~mnR8V~QoIy{F)y1JXa58o}mn>Eq9Srh$1ckvm?8{uvUKmYbk zq>y5VkC)>gjx>_XfdCrN5%Wwi%j*GP2}`in%}}l%vs12n&o$;?$&=Mb4*-HX_JZoz z*1;V!I$$8ho>ht6M&e3l@Ic0=aq?ejEJz^NE^Wq&@mMWO{|c*T*&>=g%pJ^bWOXnS z-$EQWC4&rO(}bBasrKN=MINJ7!&9a=L(dc>=gvsxF(CBy; zC-8aoKPTSBD#KQ~(yQ2zs+mC9`TA9=GK5wT#y6BMYdx1?@1OBj4pshNT;O9-ghK~< zGc(CO8BHhDGCI~$!6I*Q;gYBL!FU%)RS0u>#$F`sKMn#>+us%nw=)#-2!oLt$-|`} z(BgOGFB6Yd!yyWW8odJddq=OR0ZF019cPPg{GMW}79WRWs#uS~eqRK+AE(lPqC-gJ z>p|#OShJq7?u48{A}7HSBvS?J7`^hhcB}|puDUyekHdBM#2qU-N*O1arrX#P!xFE+ z%|hXR{6kl=My3Y@Mi1Jgc<~8tQcRU*u$zqOatjus|wfWdfZWWWuW z0Tmbkw?eftIY}){PEzZVlhm^0B(*9z>G(xS>rnKQYaTH3y-s$|mzvp?*%;Z8X%I?el*M2_D z+|GH1X+D|g`9wmY^YV+?@2)z;IDnE0nLj{n$_xb1|G&7{vBXcy&8Hf zU7MR1P!n-V#9;uhKPm2p{`?<#HKax2xHWQG%-dBEPmH#C!6q$QwtfH>xsuDgQ5arV z@y0qr@;@9lQ2uU4sK`C7M0ER%D`ghm7aM$jm$|C8Dn+P;rZwS7v8GmJni&&_ZKy>6 zNjv^^gY(~uXv3CaswrH2nk)m@@q>KD*<2r8_@HEJS7d*Clj+@Q_AK4tbbW$fi4~Q8 zo$utW*kvfrH^eRjd+(6Z?GNp5)U4C*2i(B58h&k#gXGrPsb0QwF7}uSC3}pqlSx6w zt(MkchomDXDVRSq_Lz&bJ%(gRzWqJ+mmf+>c?G7d|!c&GXi9VOw_&iVo9dPVYj zaYlm`G7<76q?}6N*S;uQNV6OHO8F4Lpo= zvK`rf(#d*cdo4eYmj{Q|OQ;eheq|1qocuZZb%9Pr{q)VbD*~-u(*2o5^Rwwv&`YtA zTyu+|X_lv!$}UKfpcs;0g8R_i+CI^eL-|I}36v5@Hlvn)G(EJU<^|c7x zd_OaYS2={L{O=E-6}Scifd2o*K$&j{@V~(MX@MIIa60SwDY}U#_-NGyi>A4Ua%9AxSlk;(|pFY zYj|hG@Xm5jDnu(NvlXpG{<4xl zi82ont%g(Px0D`Rgb`xwhhQFp7%$RH{2QXgpicbf669{4r3r}Bb%8$iISrYwi(K(n z0wOq8Zu#wtJBEN*)D{Z+pFlls7UAnHryfH1Z1Qhki=iMl?i31gF*>akOo`;{YndP` zFMZ`J)dGiU1Oq=9*B1=@c;7cC82lMjRY;Q4u~4A&E#I3yS6r1tO*_t5%lQiTccAC=ZNV&CeH zD%vQjG*OjpD|sNso9Q&w43GZ;mr0>O{1{VtF*={*>yZ#Mp(<7F_D$C256ViM7ES(> zM1M@G5yu!VoUQ`XkU8SWT0^f7Uw$^$#RuT>6|44Dpa#Cx>_d!^<;rhS_x>O9OR4gk^`Drn zr2ZQPH)i3T_v^ozvLANkQvdBC>c3q=?U08Pxhp9EcM<<*HN?DWBNc(`(EZ}Y-wS|_ zgHg5)53Pe9tkQj0u+GxVlHzNHBe5|ha`Wol%tu*uA8EK}V^~doXS}GdDB@V@osMm? z2)4r(iIzovp(=evEa}PeV)RLhQ^;7Vhs>TD3NA>W=X!VREvGyK1<)?vH5Zq_d9`AP zCf~Np?%Gs3(eZITDODHzDGEg+J=^v8+_O<#h5&caP)-<0XodJ|%8_sYj(E3#5s=%z!Dp z#$N;LZL7lGEi3sLQQy%|jhPC0OY`I4#iggu=?>?vggDbA=chuNWa94qVy-~Cu86Oe z4pC|@SHv#wpG%FAV{oU%k7*(?8FQFq56@;wk(IdL#_@U^RgENlrvg8c^f#+pME{#_ zQkHx%#owu*7YXfdJ0=o(p787f)i0h82R4N^wLVVOss!y`vOV(^kG;Bs0WrZ)--WX0 z3m=q8n&Jg&;ZOOH-+Pu>v%kPNRk~>pZCXv47;{Rs>FJc`qvOq`Y6#{uO!~3Qd*^zW z95KNQAJK%jkj|h};R6I#hj?LC7qBWRjdGMQ-sB9xVz`Xb*z)`~~{?SF+7gM@ZHr|LnS?+K^t^>8wod@Bv45 zAlE{@80=zO1h7t+fP0qB*HA3C2?EKhfJ2luQ5ujkw#IO(&WQ=SV) zw*;t_6dx_Y>}N|b`)JCeeRUie)i6#myCbg8udYhH$HGfrWC7nXPs7Jc$&73ApFdF` zbykC@h>=yPv$$`3RqBkP_vxA78^D^sXh|)!M6PqZknq^Tb%Fz$ zT_Yf zYj8(*Xk?Z%Uce*e^8l|>_^RKT)hkBrR=cNYCi)Sk2^L9&(@el*=EGI#R4i!*s;KC- zl!{)=8z?`9s$L|=+q-v49V~e-aOa(%i+jC~h3UdxvC-3OHNVvLykg0p>MN;S5ZG_a zd2Ma|wc95(JAn@~X`!sb4O`_r@pCM2a*vM}P=MgVrKP5)l#{-6X$Ad=d!yxdno2E* zk#93QRCA4!{jrYC)-+SP`zGt|n^be7)45Wju#1ziFi)qnL@X*d;{0F0dt%5tO-(Ph z%Dm&-@eB7dyarSICUvZAa;}B#7W*MWf2?4f;tKprx za!h~H1x;nj}z=Ej<^nutNGA|UNZdkzQj{!!=B2_8;S1`xUmF)L0RdG*LG> zvR&6ARwEpDaINg5#a?qfx}MT-F}aj3`$Ihv`Lff+0(Urv*?_Tq@Bv=Rkq$e+KNVkW z;*tMno!|F3pApV)0OOsau$ zNx}a)-A>ovfQR`5rws=on|nJPiiX140#SVrp_TdKR&qh-;a+&)a4$3&w-+8X7G79x;^XyXTqMmVec+Cbng8T5UxDPi0Omu692uhqp|4CDlA& zf%xWVc}4W$^X9P@zc_RCc)Y%=_-F?afAkOaN7`A< zE@y$}zhAzl47MV|9~ON7cS8i}MWm&HDF-s^NIQ>TzI`qhlxC@4T**(~$n4_VTg)h} z8{bm!&r95__!gKee^#jTee2G*T3!C>8a`t|U!?&3IDM ziG!Z+=LE;p!LlVju6COnoQ^MmJ^WU=DkpmbyE|x`G79}lsYDwq@njxwBZQ3$F>P zXBszadG+fDinK{jepvoydPfmmQ=M6VF#Y17GZ}7>Qaum^9Px+3~;&amji*72Vsf;_Tjeyta^3g-MVw67D-j#R~pO{l1jMY*2p z!ep7cRW#1Zi)CR@Ok!!kHwa9Wl0Qkbv#{%v{tsiX=M)!fo}?MI#0pipZ_^mSu>4q0+QN_ zqT)W`ssLvC*@MPUyJGbfOOX}L{2&|etC)4Rn`1I&su*M^S~6f=x`z6FdEuT~DXFAJ z^A3X=-F%M0iy!D$jTe!ga$SwG0FdbMGjhY@OT8I*TSA8j<~WG&phd)TmyD+txv{$V zZ5k4zXV#MR<9fjb@a?(C9|#6Vu!UAyQj3r9F;sSG=?*D*d98;c)MjD2FP3bIA7wqznmOI+t9`)rO^dP7U*`l5 z&#w5vO1t7<|3OFvA9$1YMJLxMs7lwHdE=Loex9a$pf>bfi1{<-5z8uDj*-v8 zhp{(He+a_{4C=&bhveJ%q$NdqP1u_mmD&o}&z6o#Pm8I(uvdqj?@3d8-mpQnPMh+c zq-z7VILRoZ1S49pX`JWPXTlRV1@;?@Uh|^Dd%79M|3pLWsFIQt*!4~mOz`TLO{A^f zCiR)9cVt|Q%oGQ^xNOy%ja6@7*{ZiRU`%?S!K61;R1`7kfmXpa@;-(skJ!hdCcUMY z`7r6#E&U5kdav;eUvu=ygblK-umZh;Ne|XHPLmgF(*xC=juSzBG4Tt36sgsE{KUQ|4n-mGZ*1I~I@Gw=HjV^xPBZ^* z{tShkl3~xz(Kny?rQC*H|KH85@%FXviL*PsVyL?2WIuvo4_BN|nJa|NQHN#Id-!xC z`~E_|8a-DOsF6f^od;c(>Id8O#H~Y(I+2BpHIGJsh?h>sZ?pxD=p#jRyjIFbHt2nu z>tuamiy30jn^|GdlMs@ja8@?x`6ld<>bMOv>)i#4*rCL%cf0;L#H{x(I99)ZB<)1k%hIohzrw?}`cXwmtbVvPhFJcD_|S&b3ZjFJ0*7OEz55h1^`Gk3 z!=HME0Z@8n`~hDX{W!XW(?i@k!Xr-_bL*xRLfSVDT)IkXKG28p8*jo`Ijdx>^!2$n zvR4+yi+m|CRWkj3LsMJvXNj)5Ko&j-=0>t=meI2H-9!0fdTgaRQ&cACmsRARmF#C@ z2B|P-hTj5n=ET3idfA5FjQ?w>>CyzI`~~&cebc3hyf7SEcG>m{5sxlq3B)@%*oxUU zE>*Af*9w!RSQDJiyIw993k0#GF@~ml3dfPBi@8RIFp)ahs}Lh-Z6sD>sd8ktolHE@ z=rMOpp5O=jO0pb8{SDHYV`}n*xU#5Xf_4cbmIP+8epVzf^XMLJQ(NH=T&~VAt2W`y zI$w-Vy3eTT=;s?BrQzuB;wUTaCs#Hc-JUu&yDfdx#BGIhsNGbUsyltAPLh|(j-Dg6 z@;rqb{3f3ATG7Z8VNEJ6(NBbyo2k?2?;M(iZJN$;`%(#h)KNClSfh0 z<0{ueDcQKn*78CW<5sd|DSG^zep$Vemzdha&)az?fl>ZpV^fR_MCF|Lx8q|`HL6c0 zO3=*`p@gM$&fEkUSK^TAQjS=4)%np-JB?U%AhHrmjJiywz{5!M?EMlAWcnpf}*N)X~Y?LaLzuGs(iBQsHs=D z)A>|jr!zKine+ZJXPp>;scv-^eHO-uKs@GTzK|a?ZuQam>3msf@3-_Odp?7COII>$ zZ-Mb~WTSi)OI}n>n63nY$|;f=t@qk%nH?qWfvaU-u(rzW^bI)zRGN!*cdyc$7V+x4 zxkU!bU0jUjW(25TCk0T}lq;sGYxa!#d}l{g~}o zh%AE7Ons9Z*c;2N$BEWc?Pk^6LFmt*yhaTSP@~~Kc{)>0YmG++aO1fz)zaLg7J%z>vL9t_ z`S$`~+QcuNZQh|luy)K1$5R9rekyiN^$2{OBA(~%bk1gCx~eE^sb<#ItmW7*$+e3f z1=_SW$G4dl0JoPfx+C6q1vs6HHb`%mF8afuU#^XN{|Gpm&L@{|08QgZ0f$85Q}diD z#gb~JoTSQWC{4Ch)6y$T!<>eRnRrG-x4l zVsTjfdNeuvfE%K@STtD+K;j4Hy`snaUI5Z{?%6}u38x&`QUb?^DG3!fpdw8u*Cps; zex%x;mo}LZW*DF&dRRTxxW#RJEOq3>ZTMkRXO$*X!v-#wHDW}$hKJ>DUh*KTB;HjB zcQ~}i$(@g*v64UPX7g&fCcqHi&*9420aSZSe$I^&NYT=Iju2fF5fMx7j`qGtICrVg z3KX|bU(4kr6tO4zQ#^OO2$jTr%ieiQ7LzWZw z#u9HD@y@+oy8k$x|IAeQ$*lUHYQ5$gqeL@M{T$V`oPmw#~$<(so6tCv4n5MYwURC?whgDYSZD#N2Ry^Q2 z;g%v~PWI~5Fu7lWdyNFoslYwd8xr?Uc!pByH);gUZ(4hl*>70~M z_wqrqC3+i_eu;#(r$5SGmT2~B!7#|N-cyUXwRCs*gVV8uoj~J)ok3O8t-Q^zkUd65 zG@?|+IK;o14RSjEm#!I68Y(ySpz7U{FZSXQ#Wt@tW?qo-ob31H(+)_G%pkv(Po+s| zw72vt|1MmD+#n3@VYorBaJA2n>oV_12+G<_;An*BqH|WiV930f4{vgZb9O&B^b6~F zpMS$fZYcJPzu!5V|7JMH|5b+L*R%T5KdYcr5~8Sbs{{e83~8i1_}f`k>9HbvrH|pm z1mw4k>`)o){RA;jlL(Faj4OwFle?QFqxPf)IoBSB0HXXw?8?Ey~$goN0pf(Jl?kVZ+z zG(6v~Pk-qT?qx)M^>l^ph}to1{1ycL9?{iwb!`T%EU>+^I3N+1Qc~+?!QRY%LJ^4K zWQR*L9N`Rv{Nb&C6UTtvNsH-zP)c$K?9QvdL)G8MX5XQjzXhuc7W>oNhiqm-z4Uh4 zNVY0f# z`$Rx3?-8WPJb#ey`gxnHt5VDN@P>}vhMem+0`Nopq1kObSK!d4t%A3@g?CQZ5{@?R zT`?P)B~OUm=PLuQdMt6qK#63cW?I0pZZTN|-rcC(K7Y(vcsaK-CdmEfamf-QPeD=p20ZlAAFe)^xdE{Vky_&de?0(5A36b5ksr`Wu9szJuw0M25m~)HOAe z)z1lsHgeI%Xy|5{Bo)fi$45$w$gg7(;3Hkay`1b0^*DFZ863snQ7B*PO!YK~%IsxN z0&txtV#y1aGmE+#{c(%y%EJ-PGB4#SVg+wU|I_S%4CzRK5pseNuG-`_ZsRBn_KOOn zHj4Z)C0Elx!i!#~EHNC~!lbv*4d-1We2xAyO0*$SgC5fMJO5#_PrjIlB*|NWhp^Xl zjn^fjRxJ4_t#H3-r<2`K-hZb{@GzEqg5TtL%8GQkwxL$;4-g;@3@n*@V z^zo=u*ehXRVbyd?B3X}-L<39MJbqfJ=GGJev--QJcaNCliZg3t$)*(%RrBMBs#_80 z)jhQd%6KIGul7L(iscC6fgcDQh0vWeiSab}I@wG3G9SUSZy3pDpH=+F7&y;y!g<&V z;k21iNApf|(X;wFE}kG?&%0o-d@zI`-7Lch0~3Cf={Y!rA+`HI3qz8h;Yjx*iO6Fr z7!zbsxKczgdH|0a$*b^{J+6AFPs?uXKk39T0~OtFEpAqNw-@x%*ipV&(|H#}nn6Q^wS|s%QwyUGb<+72sq_fY~D2hvT$1b{{q)v8= z566;!biJlkWa4(KrhBCU6Fe$&aMZjHlN{R}6%oW;fd z3>F9Fk~13i48!IcMq+bzTAI~G0xyRHKQjAh^m2V-lpS_yd6oST^w33MEF+mOb#-n* zh)yWN(aO7E)u$l>%349nl49g<(ue}e>j)^H_fImHs1Q&t>;BJ^Pe$aYHp8*Z_TOT` z#DrT*vsPd5Iiz5+PoEYw;y8`br87uCe6;HDr_R9pQ)d9?-2@>Ky0?2Tr|@UXCvT_C z)XA?Js#EVBCZkv^K)FD9D-KX2HKv{_(X+LvgF=HQK1weW^x!nm9##Xr+fNS%2Da=` zSrG}W{2W&|3j#qVC+L?J#2Wonz7d_8#xC-W@MbFkxw*;3cydR=x&5^`sh!Ce5+wdR zx9^Gd{s%hP&03!6;TB={zJ3AxGoIkOTHijKw}!>F%$~>ta&il1?a~#Z4{s%B5|&I4 zfVysaPtDv(x^G6JgF`!|%k$LWls2J>0A zOwv?KlB%)f^CJhYml_MKk7lxRNI`G8fKF(OMPjT4GB7(MFywTes44Eg(K=MonK|I@ zT1$@d<8+DAxV|YIdfIZlwrTb>fUnu{Yv<^1)c|bECv8#xEL5M$eUC)($QgXd11Ka8)zs zUMIk(&s~{wuen}CuI2Jo)Vp4v{&Y^iE`ua^eMB{9;(>LMz>8APetj?!da3nJ_Fd*2 zlZe%u*YFPO(+Zc8EZ+Uw`Gou?6CeslQB+fF{}I0zt9L}$I~S=>+l@Tts)0nTXP+YE zhGP>62!0fJSi}=;rwhFvQTdqqh0}QjzM;Yi)~J{Nzca*op{>*%8=#CO4c3|meXc#! z9;Xd|*MC6xCc(FTQQ0;_4cIwz7MR<##3k6jTrWx8uXUs3vj}OjVlEYs@|sp4?>L>E zx#z2Yty>gkd$R;cY}Is)jEy)a@I+Doz@x^%5OX%04wr`X7t z*R+Xm?jS?{jvyrvc+f3@^x5%b9*g0>2ht~V5Gz?0^aP`M{fa4*>Thcur8X)sN!w2O zU7n5|tk?%!+(2Og(6>Ux&~bBM0>KbxYOI~ekg&?c%7q{mRa zMrN={??{TMWR39R*VS(_eH?~;)LL%uun<<>Z)7q9s`^A?5Fvasp=O;6=ZH}sm59WPEidxZ8(t*sylFZeLGs}ePzu;o5rT>t*V-LJetLr5bv1MR_;YfFiUVAaRU+_uIB>rZF;2LOm(V&V+XN2f&&GHwMTGUa zI~`Iy255y`_Li)_sn7cmo4#1>D6})QkjZ=pRZc2#!0GrE{>Bmr)d~d5v*`8F@qT_$ z1I8ZhWE=D+kV61G|1mxdQPo4cd`$QN?-<8o0?Kp+8eCxX-J$T00A=BycO%2Uf617E z@+AWQI9l*n9yge1;FSc!ovyXOexD}2Y!bF!1j+@xVR~7&Y%az8gd@yk=DN`c9mr zp@ay+iH9RXr8f39($U>wUr`?*)(0mW)&k-IIQn)Cx8+kDS^XCCU>SMK>UW8dRUGsn z|3Dm)xj zprwyL!_%@S-@vVgs%`X*muJ2rTV?E%!raH4#1{}Z^j{&0`$o;Xz?c7r(8E9M@af^N zdB-iod}y2eE5`Jeu7Dc;7(al}-4aC?$A1|~hMdwHdCyANfhgWSw?xmhZz4>&KI^y9 zt}~;*82eOrSZyHeNBhs7adS-{iY5B}~PBdx^7HAU5|8?%+uDXkU`aTwPKTPo>DBakXN zj0vT~(D*`3gyE-zE5RaEGtNqF>m^(y=wg9KqIiJwxdo8r3GmMp1dxLQmdTF=?T8%@wk^1szW zVrnlY5LsI!`zTKnsZ{k^b4dHe34AzO#g&oxStK(SD_0Grk7|9i_aOGJQ$#xqZ4$3q zvgsa?xK3_btkjD&4m=gS@$kmc)~j{KdR1T&B1IePmF%^) zUj3c1UdcX`tXKNO8kSil)+?(LMz!@y)`s;;phB!y8uXmb4{DXx3=fX`W-Ch`X#Z*9 zf-0)+t{%E_{s1uJ1Z5VXjZSVoAe4|2y~cudm+ncYheJ6ZYRlrt%kYyt4mV?kK`XEh zXKL&AycFie*>t6LkF?19gGKd2KI(Sy{&od$OdM$1P72&zfv1P*#ir9 zVqi01x6pzeW;I~WV+rkT7$Oqh-{Z)9zHBy&)=otE(F2$C#hAowkCL81_sh7den}#E zZb!tx@w8Cz-%`{PcsSpBp#|HFX?kw*VX2iQ#mY@l4STQ3m@K@Q)Dm%st9%$>KrsAwt z`Hx-etJS*`QpXe1AtPysh$pwkdVf9Cg6Qir)_%AE0tfnb>L<9Nn(I<0#Hd_UHX4FZ zHH51)FNz27vRlMhZ)}Hl4lZlI{m(Zcax~k)5-~m+qKFNSd~Z&shp+8?vA~870y>>j zbO^e>1OBFAcG;QqG-Yn z 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»<<}=_n{U`L?!s#CJ>ZZG@K@GoC>sCwWY+ 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

      QA1+1KsjNyJGp}r*ul` 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 - and y-->x may be present. By default both of them may be present in the same graph. - - - T means: Output directed graphs in T-code. This is a simple ASCII output format. Every line - contains one graph. First the number of vertices, then the number of - directed edges and then the list of directed edges with the start first - and the end then. E.g.: 3 2 0 1 2 1 means 3 vertices, 2 directed edges: - 0-->1 and 2-->1 - - B means: Output the directed graphs in a binary code. Every item of the code is an unsigned - char. The first unsigned char is the number nv of vertices. The vertices are numbered 1..nv - Then the list of vertices x for which there is a directed edge 1->x follow. This list is - ended by a 0. Then the list of outgoing neighbours of 2 follows -- again ended with a 0, etc. - The code is complete with the 0 ending the list of outgoing neighbours of nv. - - C means: Do really construct all the directed graphs in memory, but don't output them. This is not - a big difference in case of restricted in- and outdegrees, because all that is done extra is that - edges are directed instead of just keeping track of in- and out-degrees. This option is intended only - for testing purposes to test also routines that are normally not used when counting. Things that would - speed up the counting also in some cases of restricted in- and out-degrees -- like multiplying the - possibilities of assigning directions to edges that can be assigned directions independent - of each other (depending on the degrees of the endvertices and overlaps) -- are not included. - In case of not restrictive bounds on the in- and out-degree it not really constructing the graphs - can be considerably faster. In cases of restricted in- and out-degrees the only difference is that - the graph isn't modified... - The fact that in case of no output the graph is not modified is mainly to save time for the one - case of waterclusters, where large numbers were determined. If large numbers (without output) - for other cases shall be determined, one should think about adding the multiplication routines. - - m read multicode - -This program uses different labelling routines -- all based on the ideas of - -G. Brinkmann, Generating water clusters and other directed graphs, -Journal of Mathematical Chemistry 46, 1112--1121 (2009) - -October 10, 2011: corrected error caused by overflow of 32bit int used as hashvalue. - -Sep, 2012: PROCESS feature added by BDM. -*/ - -/* PROCESS feature - * - * If PROCESS is defined, it must expand as the name of a procedure - * with prototype like void PROCESS(FILE *f, graph *g, int n). This - * procedure will be called for each output graph before it is - * output (or before output is suppressed) with f being the output - * file (possibly NULL). - * It is an error if n > WORDSIZE. - * If NOCONVERSE is also defined, the call is only made for one of - * each digraph and its converse. - */ - -/* SUMMARY feature - * - * If SUMMARY is defined, it must expand as the name of a procedure - * with prototype void SUMMARY(void). It is called at the end after - * the normal summary. - */ - -//#include -#include "nauty.h" -#include -#include - -#ifdef PROCESS -extern void PROCESS(FILE*,graph*,int); -nauty_counter dg_nin,dg_nout; -#endif -#ifdef SUMMARY -extern void SUMMARY(void); -#endif - -#define MAX_BOGEN ((MAXN*(MAXN-1))/2) -#define INFTY_UCHAR UCHAR_MAX -typedef int BOOG[2]; - -void nontrivlabels(), init_nauty_options(); - -BOOG edgelist[MAX_BOGEN+1]; /* de lijst van bogen */ -BOOG edgelist_final[MAX_BOGEN+1]; /* de lijst van bogen die nadat er eerst nontriviale automorphismen waren die dan - verdwenen nog gericht moeten worden.*/ -BOOG *laatstepositie; /* The last position in one of these lists. Global in order not to have to copy it every time */ - -/* all the next variables must be evaluated immediately when orbits are constructed. They are reused in the next - iteration */ -unsigned char *operations=NULL; -int *root_op=NULL, size_root=0, blocklength, orbitblocklength[MAXN], size_operations=0, number_operations=0; -/* these arrays will be dynamically allocated and extended. Operations will be an array with "blocks" of length - "blocklength=tobedirected[vertex_in_orbit]+3". They represent an operation the following way: the first entry is the central - vertex then the list of vertices from which only edges come in -- ended by INFTY_UCHAR, then the list of vertices - to which only outgoing edges go -- ended by INFTY_UCHAR. Then the list of vertices to which incoming AND outgoing - edges go -- ended by INFTY_UCHAR. - - root has as many entries as there are blocks in operations. root[i]=j means that when computing the orbits of - operations and constructing a union-find-tree, block number j is the root of the tree containing vertex i. */ - -unsigned char *remember_operations[MAXN]; //the nonequivalent operations that are stored for every iteration -int remember_size[MAXN]; // remember_size[i] is the number of characters allocated for remember_operations[i] - -#define COPYBOOG(a,b) { (a)[0]=(b)[0]; (a)[1]=(b)[1]; } - - -/* OPTIONS */ -boolean dummybool; -int mingerichtdeg; -int remaining_doubles=0; /* hoeveel bogen kunnen ten hoogste nog in allebei - richtingen gericht worden ? */ -int watermaxedges; /* what is the theoretical maximum for the number of edges which can - directed in a way that doesn't give a conflict with the in/out-degree - bounds. */ -int watermaxdeg; /* maxindeg+maxoutdeg */ - -int is_gericht[MAX_BOGEN][MAX_BOGEN]={{0}}; /* is_gericht[i][j]==1 als {i,j} is al gericht -- anders 0 */ -int virtual_gericht[MAX_BOGEN][MAX_BOGEN]={{0}}; /* virtual_gericht[i][j]==1 als het al vastgelegd is dat {i,j} - i->j gericht moet worden, 2 als hij j->i gericht moet worden - en 0 als het nog niet vastgelegd is. Vastgelegd betekent door - de beperkingen van in- en outgraad moet deze boog zo gericht - worden. */ -int positie[MAXN][MAXN]; /* the value of positie[i][j] is the position of edge {1,j} in edgelist in case of - nontrivial automorphisms of the underlying undirected graph. */ - -int virtual_indeg[MAXN], virtual_outdeg[MAXN]; - /* de graden als de nog niet gerichte maar al vastgelegde - bogen meegerekend worden -- dat mag niet voor kanoniciteit - gebruikt worden */ -int nextstep_depth; - -#define SWITCHPAR_ORBSIZE 5 // when does serial orbit labelling switch to parallel -- and stay there -#define MAXPAR_ORBSIZE 9 // maximum 16, when changing, change following MAXPAROPS too -#define MAXPAROPS 19683 // set to minimum 3^MAXPAR_ORBSIZE -unsigned int parops[MAXPAROPS]; -// in the case of no degree restrictions this could in fact be permanently filled in -- only depending -// on the edge orbit size. But the time for filling it in is so small that it is simply not worth it. -int number_parops; -// an operation is defined as follows: if edge number i in kleinste_orbit must be directed kleinste_orbit[i][0]->kleinste_orbit[i][1], -// bits 2i and 2i+1 form the number 0 (so are both 0). For kleinste_orbit[i][0]<-kleinste_orbit[i][1] they form 2, for -// a double edge they form 1 ---- so 2-type is always the inverse -#define SETOP(op,edge,type) ((op) = ((op) & ~(3<<((edge)<<1))) | (type)<<((edge)<<1)) -#define GETTYPE(op,edge) (((op)>>((edge)<<1))&3) - -/* for the following macros global variables _x_ and _y_ are used */ -int _x_, _y_; -#define BILDBOOG_UNDIR(startboog,bildboog,permnummer) \ - { _x_=generators[permnummer][(startboog)[0]]; _y_=generators[permnummer][(startboog)[1]]; \ -if (_x_<_y_) { (bildboog)[0]=_x_; (bildboog)[1]=_y_; } else { (bildboog)[0]=_y_; (bildboog)[1]=_x_; }} -#define BILDBOOG(startboog,bildboog,permnummer) \ - { (bildboog)[0]=generators[permnummer][(startboog)[0]]; (bildboog)[1]=generators[permnummer][(startboog)[1]]; } -#define POSBILD(startboog,permnummer) \ - (positie[generators[permnummer][(startboog)[0]]][generators[permnummer][(startboog)[1]]]) - -/* a macro that sets numbers a and b equivalent to a */ -#define SETEQUIV(a,b) { _y_=(b); while ((_x_=number[_y_])!=_y_) { number[_y_]=(a); _y_=_x_; } number[_y_]=(a); } -/* zorgt ervoor dat nummer[a] zo is dat nummer[nummer[a]]=nummer[a] */ -#define UPDATENUMBER(a) { _y_=(a); while ((_x_=number[_y_])!=_y_) { number[_y_]=number[_x_]; _y_=number[_y_]; } number[a]=number[_y_]; } - -/* the quality of a directed edge */ -#define QUALITY(a,b) (((saturated[a]+saturated[b])<<6)+colour[nextstep_depth][a]) -// upper bound for the quality if the in- or out-deg of one of the entries is changed by one -#define QUALITY_P1(a,b) (((saturated[a]+saturated[b]+1)<<6)+colour[nextstep_depth][a]) -// quality if the in- or out-deg of one of the entries are both changed by one -#define QUALITY_P2(a,b) (((saturated[a]+saturated[b]+2)<<6)+colour[nextstep_depth][a]) - -int _marks[MAX_BOGEN], _markvalue=INT_MAX; -#define RESETMARKS { int i; if (_markvalue0) -int aantal_toppen, aantal_bogen, aantal_gerichte_bogen; -int max_doubles; -int double_free[MAXN]={0}; /* hoeveel dubbele bogen kan top [i] nog krijgen? */ - -long long int addnumber=0; /* How much must the counter be increased if a graph - is found. Just relevant in case not all are really constructed and coded. - Then this gives a speedup.*/ - -long long int aantal_grafen_met_triv_group=0LL; -long long int aantal_gerichte_grafen=0LL; - -static DEFAULTOPTIONS(options_directed); -static DEFAULTOPTIONS(options_directed_canon); -static DEFAULTOPTIONS(options); -static DEFAULTOPTIONS(options_final); -static statsblk stats; -setword workspace[100*MAXN]; - -permutation generators[MAXN][MAXN]; -int number_of_generators; -int group_up_to_date=0; - -int indeg_free[MAXN]={0}, outdeg_free[MAXN]={0}, saturated[MAXN]={0}; - -graph all; // the set of all vertices - -int orbitchoices[MAXN]={0}; - -#define CSIZE 32768 -int _colourmarks[CSIZE], _cmark=INT_MAX; -#define RESETMARKS_COLOUR { int i; \ - if (_cmark==INT_MAX)\ - { for (i=0;i=0;i++) fprintf(stderr,"%d ",list[i]); fprintf(stderr,"\n"); -} - - void writegraph(graph *g) - // for graphs as they are used in the vertexorbit routines - { int i,j; - static int counter=0; - fprintf(stderr,"---------------------------------------------------------\n"); - fprintf(stderr,"Graph number %d with %d vertices\n",++counter,aantal_toppen); - for (i=0; i') /* koennte ein header sein -- oder 'ne 62, also ausreichend fuer - unsigned char */ - { gepuffert=1; - a=getc(fil); - if(a==0) nuller++; - b=getc(fil); - if(b==0) nuller++; - /* jetzt wurden 3 Zeichen gelesen */ - if ((a=='>') && (b=='m')) /*garantiert header*/ - { while ((ucharpuffer=getc(fil)) != '<'); - /* noch zweimal: */ ucharpuffer=getc(fil); - if (ucharpuffer!='<') { fprintf(stderr,"Problems with header -- single '<'\n"); exit(1); } - if ((knotenzahl=getc(fil))==EOF) return EOF; - /* kein graph drin */ - } - /* else kein header */ - } - - -if (knotenzahl > maxknotenzahl) - { if (*code) free(*code); - *code=(unsigned char *)malloc((knotenzahl*(knotenzahl-1)/2+knotenzahl)*sizeof(unsigned char)); - if (code==NULL) { fprintf(stderr,"Do not get memory for code\n"); exit(0); } - maxknotenzahl=knotenzahl; - } - -(*code)[0]=knotenzahl; if (gepuffert) { codel=3; (*code)[1]=a; (*code)[2]=b; } - -while (nullerb AND b->a in the same output graph.\n"); - fprintf(stderr,"m means: read multicode instead of g6 code \n"); - exit(1); - -} - -/**********DECODE_TO_NAUTY****************************************************/ - -void decode_to_nauty(unsigned char *code, int codelaenge, graph *g, int degree[]) - - - /* Dekodiert multicode nach nauty bitcode */ - - /* alle knotennamen muessen fuer nauty um 1 nach unten verschoben werden */ - -{ - - int v1,v2; - unsigned char *end; - - if (code[0]>32) { fprintf(stderr,"Not prepared for %d>32 vertices.\n",code[0]); exit(2); } - aantal_toppen=code[0]; - aantal_bogen=codelaenge-aantal_toppen; - for (v1=0; v132) { fprintf(stderr,"Not prepared for %d>32 vertices.\n",aantal_toppen); exit(2); } - aantal_bogen=0; - - for (i=0; i>1; - aantal_gerichte_bogen=0; - return; - -} - - -/***************************FILL_EDGELIST**************************/ - -void fill_edgelist() - /* writes the edges in g into the list in a lexicographic way. - Is used if no bounds for in- and out-degree are given - or few edges are left. */ - -{ - int i,j,end; - - for (i=j=0; i=0) - { - for (beste=1;listlen[beste]==0; beste++); - (listlen[beste])--; /* zo wordt hij ook verwijderd */ - start=list[beste][listlen[beste]]; - for (i=0; istart gericht worden */ - { - WRITEUP_COUNT(); - } - if (indeg_free[end] && outdeg_free[start]) /* bogen kan start->end gericht worden */ - { - WRITEUP_COUNT(); - } - - return; - } - - /* else -- niet op laatste positie */ - - if (indeg_free[start] && outdeg_free[end]) /* bogen kan end->start gericht worden */ - { - (indeg_free[start])--; (outdeg_free[end])--; - trivlabels_nowrite_nodouble(positie+1); - (indeg_free[start])++; (outdeg_free[end])++; - } - if (indeg_free[end] && outdeg_free[start]) /* bogen kan start->end gericht worden */ - { - (indeg_free[end])--; (outdeg_free[start])--; - trivlabels_nowrite_nodouble(positie+1); - (indeg_free[end])++; (outdeg_free[start])++; - } - return; - } - - - - - void trivlabels_nowrite(BOOG *positie) - { - int start, end, counter; - - if (!remaining_doubles) { trivlabels_nowrite_nodouble(positie); return; } - - start=(*positie)[0]; end=(*positie)[1]; - - if (positie==laatstepositie) - { - if (indeg_free[start] && outdeg_free[end]) /* bogen kan end->start gericht worden */ - { counter=1; - WRITEUP_COUNT(); - } - else counter=0; - if (indeg_free[end] && outdeg_free[start]) /* bogen kan start->end gericht worden */ - { counter++; - WRITEUP_COUNT(); - } - if (remaining_doubles && (counter==2)) WRITEUP_COUNT(); - - return; - } - - /* else -- niet op laatste positie */ - - if (indeg_free[start] && outdeg_free[end]) /* bogen kan end->start gericht worden */ - { counter=1; - (indeg_free[start])--; (outdeg_free[end])--; - trivlabels_nowrite(positie+1); - (indeg_free[start])++; (outdeg_free[end])++; - } - else counter=0; - if (indeg_free[end] && outdeg_free[start]) /* bogen kan start->end gericht worden */ - { counter++; - (indeg_free[end])--; (outdeg_free[start])--; - trivlabels_nowrite(positie+1); - (indeg_free[end])++; (outdeg_free[start])++; - } - if (remaining_doubles && (counter==2) && double_free[start] && double_free[end]) - { - (indeg_free[end])--; (outdeg_free[start])--; - (indeg_free[start])--; (outdeg_free[end])--; - double_free[start]--; double_free[end]--; - remaining_doubles--; - trivlabels_nowrite(positie+1); - remaining_doubles++; - double_free[start]++; double_free[end]++; - (indeg_free[end])++; (outdeg_free[start])++; - (indeg_free[start])++; (outdeg_free[end])++; - } - return; - } - - - void trivlabels(BOOG *positie) - { - int start, end, counter; - - start=(*positie)[0]; end=(*positie)[1]; - - - - if (positie==laatstepositie) - { - if (indeg_free[start] && outdeg_free[end]) /* bogen kan end->start gericht worden */ - { counter=1; - //(indeg_free[start])--; (outdeg_free[end])--; - DELELEMENT(workg+start,end); - MAYBEPROCESS; - WRITEUP(); - ADDELEMENT(workg+start,end); - //(indeg_free[start])++; (outdeg_free[end])++; - } - else counter=0; - if (indeg_free[end] && outdeg_free[start]) /* bogen kan start->end gericht worden */ - { counter++; - //(indeg_free[end])--; (outdeg_free[start])--; - DELELEMENT(workg+end,start); - MAYBEPROCESS; - WRITEUP(); - ADDELEMENT(workg+end,start); - //(indeg_free[end])++; (outdeg_free[start])++; - } - if (remaining_doubles && (counter==2)) { remaining_doubles--; MAYBEPROCESS; WRITEUP(); remaining_doubles++; } - return; - } - - /* else -- niet op laatste positie */ - - if (indeg_free[start] && outdeg_free[end]) /* bogen kan end->start gericht worden */ - { counter=1; - (indeg_free[start])--; (outdeg_free[end])--; - DELELEMENT(workg+start,end); - trivlabels(positie+1); - ADDELEMENT(workg+start,end); - (indeg_free[start])++; (outdeg_free[end])++; - } - else counter=0; - if (indeg_free[end] && outdeg_free[start]) /* bogen kan start->end gericht worden */ - { counter++; - (indeg_free[end])--; (outdeg_free[start])--; - DELELEMENT(workg+end,start); - trivlabels(positie+1); - ADDELEMENT(workg+end,start); - (indeg_free[end])++; (outdeg_free[start])++; - } - if (remaining_doubles && (counter==2) && double_free[start] && double_free[end]) - { - (indeg_free[end])--; (outdeg_free[start])--; - (indeg_free[start])--; (outdeg_free[end])--; - double_free[start]--; double_free[end]--; - remaining_doubles--; - trivlabels(positie+1); - remaining_doubles++; - double_free[start]++; double_free[end]++; - (indeg_free[end])++; (outdeg_free[start])++; - (indeg_free[start])++; (outdeg_free[end])++; - } - - return; - } - - - void trivlabels_init(BOOG *positie) - { - int remember; - - if (!direct_output) - { if (nodegbound) - { remember=addnumber; - if (remaining_doubles) { for (;positie<=laatstepositie;positie++) addnumber*=3;} - else { for (;positie<=laatstepositie;positie++) addnumber*=2;} - WRITEUP(); - addnumber=remember; - return; - } - /* else */ - if (!remaining_doubles) trivlabels_nowrite_nodouble(positie); - else trivlabels_nowrite(positie); - return; - } - /* else */ - trivlabels(positie); - return; - } - - - -/******************************DIRECT_ALL_TRIV********************************/ - -void direct_all_triv() -{ - int i, start, end; - - aantal_grafen_met_triv_group++; - if (nodegbound) fill_edgelist(); else fill_edgelist_order(); - for (i=0;il0 l1>l2 - { if (list[0]3) //should hardly ever happen and then "number" is still small -- bubblesort - { - for (i=number-1; i ; i--) - for (j=0;j1) sort_decreasing(in_image,num_in); - if (num_out>1) sort_decreasing(out_image,num_out); - if (num_double>1) sort_decreasing(double_image,num_double); - - - for (run=1 ; num_in; run++) - { num_in--; image[run]=in_image[num_in]; if (original[run]!=image[run]) change=1;} - image[run]=INFTY_UCHAR; run++; - for ( ; num_out; run++) - { num_out--; image[run]=out_image[num_out]; if (original[run]!=image[run]) change=1;} - image[run]=INFTY_UCHAR; run++; - for ( ; num_double; run++) - { num_double--; image[run]=double_image[num_double]; if (original[run]!=image[run]) change=1;} - image[run]=INFTY_UCHAR; - //for ( ;run=0;i++) - if (!decided[i]) - { - if ( double_free[center] && double_free[list[i]] && - ((outdeg[center]+numberout < maxoutdeg) && (indeg[list[i]]lowerlimit_outdeg) outdeg_larger=1; else outdeg_larger=0; } - } - - if (double_free[center]) // then there is still something to decide - { if (outdeg[center]+numberout < maxoutdeg) - for (i=liststart;list[i]>=0;i++) - if (!decided[i]) - { - if (indeg[list[i]]=mindouble)) - // looks complicated but is just the final number of double edges - construct_operations_final(list,decided,buffer_op,positie+1, - numberin, numberout); - return; - } - //else // all the undecided entries have to be outgoing - - for (i=liststart;list[i]>=0;i++) - if (!decided[i]) - { - if ((outdeg[center]+numberout < maxoutdeg) && (indeg[list[i]]=0;i++) - if (!decided[i]) - { - if (outdeg[list[i]]=0; still_open++) - // number_operations is global, so it must not be passed to the next functions - //if (NOT_READY(top)) - { - if (tobedirected[top]==1) - { - for (j= FIRSTBIT(workg[top]); READY(j) ; NEXTEL((workg[top]),(j))); - if (ISELEMENT(&sameorbit,j) && (tobedirected[j]==1)) construct_operations_one(top, j, 0, 1, double_allowed); - else construct_operations_one(top, j, 1, 1, double_allowed); - } - else - if (!(staticg[top] & tbd1)) - { - for (end=0, j= FIRSTBIT(workg[top]); (j=0; j++) - { if (NOT_READY(top)) - { //ADDELEMENT(&sameorbit,top); - if (tobedirected[top]>=2) ADDELEMENT(&pre_free,top); // will stay free unless is chosen top - else ADDELEMENT(&tbd1,top); - } - else // that is: ready - { *readyrun=top; readyrun++; } // minout would not be used - } - } - else - { - do_double=double_allowed; - for (j=0; (top=orbit[j])>=0; j++) - { - if (NOT_READY(top)) - { //ADDELEMENT(&sameorbit,top); - if (tobedirected[top]>=2) ADDELEMENT(&pre_free,top); // will stay free unless is chosen top - else ADDELEMENT(&tbd1,top); - } - else // that is: ready - { bufferg=(workg[top]&sameorbit); - *readyrun=top; readyrun++; - if ((bufferg) && (outdeg[top]=0; still_open++) - // number_operations is global, so it must not be passed to the next functions - //if (NOT_READY(top)) - { - if (tobedirected[top]==1) // already ready vertices can't have less... - { - for (j= FIRSTBIT(workg[top]); READY(j) ; NEXTEL((workg[top]),(j))); - if (ISELEMENT(&sameorbit,j) && (tobedirected[j]==1)) - { bufferg=workg[j]&sameorbit; DELELEMENT(&bufferg,top); - if (outdeg[top]outdeg[top])) // otherwise the end would be better - { - if (outdeg[top]==minout-1) construct_operations_one(top, j, 0, 1, do_double); - else construct_operations_one(top, j, 0, 1, double_allowed); - } - else - if ((outdeg[j]==outdeg[top]) && double_allowed) - { - if (outdeg[top]==minout-1) construct_operations_one(top, j, 0, 0, do_double); - else construct_operations_one(top, j, 0, 0, double_allowed); - } - } - } - else construct_operations_one(top, j, 1, 1, double_allowed); - - } - else - { - if (!(staticg[top] & tbd1)) - { - error=0; - freevertices = pre_free | (tbd1 & ~staticg[top]); - DELELEMENT1(&freevertices,top); - // now freevertices is the set of vertices that will still be free after the addition of top - for (lowerlimit_outdeg=mindouble=0, readyrun=readylist; !error && (top2= *readyrun)>=0; readyrun++) - { bufferg= freevertices & staticg[top2]; - if ((dummy=POPCOUNT(bufferg)))// will be a candidate afterwards - { if (dummy < tobedirected[top]) error=1; - else - { if (dummy == tobedirected[top]) - { - if (outdeg[top2]>lowerlimit_outdeg) - { lowerlimit_outdeg=outdeg[top2]; mindouble=indeg[top2]+outdeg[top2]-deg[top2]; } - else - if (double_allowed && (outdeg[top2]==lowerlimit_outdeg)) - { - if (indeg[top2]+outdeg[top2]-deg[top2]>mindouble) - mindouble=indeg[top2]+outdeg[top2]-deg[top2]; - } - } - } - } - } - if (!error) - { - for (end=0, j= FIRSTBIT(workg[top]); - (jend in edgelist and returns the index. */ - -{ - int min, max, center; - - min=0; max=length-1; center= (min+max)/2; - - while (minend smaller or equal - { max=center; center= (min+max)/2; } - else // start->end strictly larger - { min=center+1; center= (min+max)/2; } - } - - return min; -} - - -/******************************COMPUTE_ORBITS************************/ - -int compute_orbits() -/* compute the orbits of the group described by the global variable generators[][] on - the operations described in the global variable operations. - Returns the number of orbits. -*/ -{ - int i,j,buffer,run, orbits, index; - unsigned char image[MAXN+4]; - - if (number_operations>size_root) - { size_root=number_operations; - free(root_op); - root_op=malloc((size_t)size_root*sizeof(int)); - } - if (root_op==NULL) - { fprintf(stderr,"Can't allocate %d items for root_op -- exiting.\n",size_root); - exit(0); } - - for (i=0; iy or x<->y. -// Edges completely in this orbit and obtained by operations center x end y are chosen as follows: -// First the starting point x is chosen with minimum outdegree. -// For edges with starting points with the same minimal outdegree, edges are preferred which are single. -// If the tested operation is double and single operations exist, the operation is rejected. -// Among the remaining edges those are chosen where y has minimum indegree. -// Among the remaining those are chosen where x is in the orbit of the one with smallest canonical number -// (after the operation). y is the neighbour with smallest indegree -- and among those with the same indegree -// the one with smallest canonical number (in the same given numbering of course). - -// Otherwise: -// Define a vertex to be free if it is not in an orbit that was already chosen (we call that untouched) -// or it is in such an orbit but not all edges to it are already directed (that can only be in the last orbit). -// In this case the central vertex of the canonical operation is one that is chosen in steps: -// Among all with edges to free vertices it is chosen as one with a minimum number of these. -// Among those one with max outdegree is chosen. -// Among those one with maximum number of double edges is chosen. -// Finally a more complicated artificial criterion is tested -- not suitable for a look ahead during the construction -// of possible operations -// Among the remaining, one with smallest canonical label is chosen. - -{ int i, j, k, min, top, buffer, candidatelist[MAXN], number_candidates, center; - graph free, candidates, bufferset, dummy, sameorbit, bit_startlist; - int edgelistcounter, edgelist[2*MAXN*MAXN][2], orb[2*MAXN*MAXN], canoncenter, canonend, endvertex=0; - int finished[MAXN], finishedptn[MAXN], testoutdeg; - int startlist[MAXN], *startrun; // list of possible starts in case of no candidates - int numberends, ends[MAXN][MAXN], endin=0, *run; - nvector *colour; - long long int buffer2, k2; - - - - free= all & (~touched); // in fact all ready vertices are candidates if one has a non-empty - // intersection with this as they are all in the same orbit -- so have the same number of edges - // to this set - sameorbit=bit_orbit[orbitid]; - - for (run=vertexorbit; (*run)>=0; run++) if (NOT_READY(*run)) ADDELEMENT(&free,(*run)); - - center=operation[0]; - - candidates= (graph)0; - number_candidates=0; - min=INFTY_UCHAR; - for (i=0; (top=vertexorbit[i])>=0; i++) - if (READY(top) && (bufferset=(staticg[top] & free))) - { - buffer=POPCOUNT(bufferset); - if (buffer0) - { return 0;} - else - { if (k<0) { DELELEMENT(&candidates,candidatelist[i]); - number_candidates--; - candidatelist[i]=candidatelist[number_candidates]; } - else i++; // otherwise the new element has to be tested - } - } - - if (number_candidates==1) { *newgroup=0; return 1; } - // end number_candidates>0 - - if (remaining_doubles != max_doubles) // there are double edges - { buffer=indeg[center]+outdeg[center]-deg[center]; // number of double edges starting at center - for (i=0; i0) - { return 0;} - else - { if (k<0) { DELELEMENT(&candidates,candidatelist[i]); - number_candidates--; - candidatelist[i]=candidatelist[number_candidates]; } - else i++; // otherwise the new element has to be tested - } - } - } - if (number_candidates==1) { *newgroup=0; return 1; } - - //OK-- last try. A colour that can not really be used to avoid unnecessary operation in advance - colour=rememberorbits[orbitid]; - dummy=workg[center]&(free | sameorbit); - buffer2=1LL; - FORALLELEMENTS(dummy,i) - { buffer2 *= (tobedirected[i]<<12)+(indeg[i]<<9)+(outdeg[i]<<6)+(colour[i]<<3)+deg[i]+1; - buffer2 = buffer2%63241LL; - } - - for (i=0; i0LL) - { return 0;} - else - { if (k2<0LL) { DELELEMENT(&candidates,candidatelist[i]); - number_candidates--; - candidatelist[i]=candidatelist[number_candidates]; } - else i++; // otherwise the new element has to be tested - } - } - - if (number_candidates==1) { *newgroup=0; return 1; } - - - - } // end number candidates > 0 - - - // OK -- we have to work. First the canonical form must be computed: - // Problem: the difference between double edges and edges that have not yet been directed cannot be - // detected in the datastructure graph. To this end we put "ready" vertices in an extra partition -- - // this way double edges cannot be mapped on undirected edges. This is only necessary if there are double edges. - - else // (number_candidates==0) // finished vertices in this orbit always have an internal edge! - { startrun=startlist; - bit_startlist=(graph)0; - if (operation[2]==INFTY_UCHAR) // a double edge was added and all single edges starting at same outdeg are better - { endvertex= operation[3]; - endin=indeg[endvertex]; - for (i=0; (k=vertexorbit[i])>=0; i++) - if (READY(k) && (workg[k] & sameorbit))// has _outgoing_ edge into same orbit - // the end points are automatically ready and all in the same orbit -- otherwise there would have been a candidate - { - if (outdeg[k]=0; i++) - if (READY(k) && (workg[k] & sameorbit))// has _outgoing_ edge into same orbit - // the end points are automatically ready and all in the same orbit -- otherwise there would have been a candidate - { - if (outdeg[k]1) - { - for (i=0; !ISELEMENT(&candidates,bufferlab[i]); i++); // zoekt candidaat met kleinste kanonische label - - if (orbits[center]==orbits[bufferlab[i]]) { return 1; } - else { return 0; } - } - -// only remaining case: number_candidates=0 -- that is: only one edge between 2 vertices of vertexorbit was added - - // operation must be outgoing or double edge -- but this is guaranteed by the construction of operations - - // for (i=0; !(READY(bufferlab[i]) && ISELEMENT(&sameorbit,bufferlab[i]) && (workg[bufferlab[i]] & sameorbit)) - for (i=0; !ISELEMENT(&bit_startlist,bufferlab[i]); i++); - // Now we have the smallest vertex in vertexorbit with an edge to another vertex in vertexorbit - - canoncenter=bufferlab[i]; - - if (orbits[center]!=orbits[canoncenter]) { return 0; } - - // Now look for the endvertex: - - min=INFTY_UCHAR; - dummy= sameorbit & workg[canoncenter]; - - // at this point it is known that none of the possible startvertices has an endvertex that - // has smaller indegree than the endvertex of the operation tested (that is: endin) - - // now look for the smallest labelled neighbour: - - if (operation[2]==INFTY_UCHAR) // a double edge was added and any suitable neighbour is double - for (i=0;!(ISELEMENT(&dummy,bufferlab[i]) && (indeg[bufferlab[i]]==endin)) && (i=0;startrun++) - if (orbits[k]==orbits[canoncenter]) - { - for (i=0; (j=ends[k][i])>=0; i++) - { - if (orbits[j]==orbits[canonend]) - { edgelist[edgelistcounter][0]=k; edgelist[edgelistcounter][1]=j; - orb[edgelistcounter]=edgelistcounter; edgelistcounter++; } - } - } - - compute_edgeorbits(edgelist,orb,edgelistcounter); - - i=search_edge(center,endvertex,edgelist,edgelistcounter); - while(i!=orb[i]) i=orb[i]; - j=search_edge(canoncenter,canonend,edgelist,edgelistcounter); - while(j!=orb[j]) j=orb[j]; - - if (i==j) { return 1; } // same orbit as canonical edge - else { return 0; } - - -} - -int all_diff_colours(graph testset, int orbitid) -// returns 1 if all elements have some different vertex invariant and 0 otherwise -{ - nvector *colour; - int i,buffer; - - RESETMARKS_COLOUR; - colour=rememberorbits[orbitid]; - - FORALLELEMENTS(testset,i) - { - buffer = (tobedirected[i]<<12)+(indeg[i]<<9)+(outdeg[i]<<6)+(colour[i]<<3)+deg[i]; - buffer &= 32767; - if (ISMARKED_COLOUR(buffer)) return 0; - MARK_COLOUR(buffer); - } - - return 1; -} - - -void fill_edgelist_final(graph g[]) - /* writes the edges in gg into the list in a lexicographic way and initializes is_gericht - and positie*/ - -{ - int i,j,end; - - for (i=0, j=aantal_gerichte_bogen; i>1; // every edge was counted twice - - - memcpy(g,workg,aantal_toppen*sizeof(graph)); - EMPTYSET1(¬ready,1); - - // make a list of vertices according to the whole degree. Vertices with large degree give stronger restrictions - for (i=0; i=aantal_gerichte_bogen) - { - for (beste=1;listlen[beste]==0; beste++); // zoek kleinste aanwezige nog toe te voegen graad - (listlen[beste])--; /* zo wordt hij ook verwijderd */ - start=list[beste][listlen[beste]]; - for (i=0; g[start] != (graph)0; i++) /* alle buren opslaan*/ - { end=buren[i]=FIRSTBIT(g[start]); DELELEMENT(g+start,end); } - buren[i]= -1; - for (i=0; (end=buren[i])>=0; i++) /* alle buren */ - { - edgelist_final[last_positie][0]=start; edgelist_final[last_positie][1]=end; - last_positie--; - DELELEMENT(g+end,start); - /* de buur verhuizen: */ - olddeg=bufferdeg[end]; - (bufferdeg[end])--; - newdeg=bufferdeg[end]; - /* uit de oude lijst verwijderen */ - if (listlen[olddeg]==1) listlen[olddeg]=0; - else { (listlen[olddeg])--; - buffer= list[olddeg][listlen[olddeg]]; - list[olddeg][toppositie[end]]=buffer; - toppositie[buffer]=toppositie[end]; } - /* tot de nieuwe toevoegen */ - if (newdeg) - { list[newdeg][listlen[newdeg]]=end; - toppositie[end]=listlen[newdeg]; - (listlen[newdeg])++; - } - } - } - return; -} - -/******************************CHOOSEORBIT***************************/ - -void chooseorbit(graph *touched, int best_orbit[], int orbitid) -{ int i,j,k, num_in_orbit[MAXN], dummy, inorbit[MAXN][MAXN], best, bestroot=0; - - // the group must be up to date at this point! - - for (i=0;i0)) ptn[orbitid][i-1]=0; - for ( i++; i=0) - { - choose_triv_orbit(&touched, local_todolist, orbitid+1, d); - directorbit(local_todolist,local_todolist,0,orbitid+1,iterationdepth,touched); - return; - } - - // nieuwe orbit berekenen: - //if (!group_uptodate) - // { - number_of_generators=0; - // since the orbit is complete, we don't NEED to distinguish between ready vertices or not - // to mark double edges. Tests showed that it also doesn't help. - memcpy(bufferlab,lab[orbitid],aantal_toppen*sizeof(nvector)); - memcpy(bufferptn,ptn[orbitid],aantal_toppen*sizeof(nvector)); - number_of_generators=0; - nauty(workg,bufferlab,bufferptn,NILSET,orbits,&options_directed,&stats,workspace,100*MAXN,1,aantal_toppen,NULL); - //orbitchoose_nauty++; - } - - end=1; // can we end the groupcomputations and switch to trivgroup? - if (stats.numorbits=0; i++) - if (NOT_READY(todo_list[i])) - { local_todolist[local_left_to_do]=todo_list[i]; local_left_to_do++; } - local_todolist[local_left_to_do]= -1; - - if (local_left_to_do==0) - { if (touched==all) { MAYBEPROCESS; WRITEUP(); return; } - else prepare_next_step(group_uptodate, orbitid, iterationdepth, touched); - return; - } - - // else -- there are still vertices in the orbit - if (vertexorbit[local_left_to_do]== -1) first_in_orbit=1; else first_in_orbit=0; - if (first_in_orbit) // new orbit to start with - orbitblocklength[orbitid]=tobedirected[vertexorbit[0]]+4; - localblocklength=blocklength=orbitblocklength[orbitid]; - /* als een top al afgewerkt is kan de bloklengte voor de verschillende toppen in wat vroeger - een orbit was verschillen. orbitblocklength[orbitid] is altijd een bovengrens */ - - construct_extensions(local_todolist,vertexorbit,touched, first_in_orbit, bit_orbit[orbitid]); - - if (number_operations==0) return; - - // in case of one element with tobedirected>1 the group is up to date - - if ((group_uptodate && (stats.numorbits==aantal_toppen)) - || ((vertexorbit[1]== -1) && (tobedirected[vertexorbit[0]]==1))) doit=0; - else doit=1; - // doit means: really check the group - - if (doit) - { - dummy= all & (~touched); - for (i=0; (k=local_todolist[i])>=0; i++) ADDELEMENT(&dummy,k); - if (all_diff_colours(dummy,orbitid)) doit=0; - else - { - if (!group_uptodate) - { /* we need only the group -- no canonical numbering */ - number_of_generators=0; - if (double_allowed) - { - for (i=j=k=0; i=0; i++) if (orbits[k]!=k) doit=1; - if (!doit) - { dummy= all & (~touched); - FORALLELEMENTS(dummy,j) if (orbits[j]!=j) doit=1; - } - } - } - - if (doit) number_orbits=compute_orbits(); else number_orbits=number_operations; - - if (remember_size[iterationdepth]<(number_orbits*localblocklength)) - { free(remember_operations[iterationdepth]); - remember_size[iterationdepth] = 2*number_orbits*localblocklength; - remember_operations[iterationdepth]=malloc((size_t)remember_size[iterationdepth]); - if (remember_operations[iterationdepth]==NULL) - { fprintf(stderr,"Can't allocate %d items to store orbits -- exiting.\n",remember_size[iterationdepth]); - exit(3); } - } - - if (doit) - { - for (i=j=0; i%d) ",start, end); - else if (GETTYPE(op,i)==1) fprintf(stderr,"(%d<->%d) ",start, end); - else fprintf(stderr,"(%d<-%d) ",start, end); - } - fprintf(stderr,"\n"); - return; -} - - - void writegraph_edgeorb(graph *g, int aantal_toppen,int aantal_bogen, int aantal_gerichte_bogen) - // for graphs as they are used in the edgeorbit routines - { int i,j; - fprintf(stderr,"---------------------------------------------------------\n"); - fprintf(stderr,"Graph with %d vertices, %d edges, %d already directed\n",aantal_toppen,aantal_bogen, aantal_gerichte_bogen); - for (i=0; i=0) - { - for (beste=1;listlen[beste]==0; beste++); - (listlen[beste])--; /* zo wordt hij ook verwijderd */ - start=list[beste][listlen[beste]]; - for (i=0; i=aantal_gerichte_bogen) - { - for (beste=1;listlen[beste]==0; beste++); - (listlen[beste])--; /* zo wordt hij ook verwijderd */ - start=list[beste][listlen[beste]]; - for (i=0; i=0) return; } - else { if (edge_fixed) *completelyfixededge=i; } - } - } - - mark_components(graaf,adj,aantal_bogen,number); - - *specialexists=-1; -} - - - - -void mark_orbitnumbers(int number[], BOOG list_of_dir_edges[], int listlength) - /* Computes the orbits of the DIRECTED edges in list_of_dir_edges. - All edges in list_of_dir_edges[] are interpreted as going from ...[][0] to ...[][1]*/ - -{ int i, j, pos2; - BOOG boog; - int positie[2*MAX_BOGEN][2*MAX_BOGEN]; - int graaf[MAX_BOGEN][MAXN], adj[MAX_BOGEN]; - - for (i=0; i=0) { COPYBOOG(kleinste_orbit[0],edgelist[orbit_met_een]); - *orbitsize=1; return; } - - /* else */ - //for (i=0; i1) && (aantallen[i]max) max=aantallen[i]; - } - *biggest_orbit=max; - - /* it is possible that no orbit was found -- that is: in spite of the fact that the group is NOT - trivial, it does act trivially on the set of still undirected edges: */ - - if (minorb== -1) { *orbitsize=0; return; } - - /* nu worden de bogen uit de gekozen orbit in de - lijst kleinste_orbit geschreven */ - - - for (i=j=0; i=0) - { COPYBOOG(kleinste_orbit[0],edgelist[orbit_met_een]); - *biggest_orbit=MAXPAR_ORBSIZE+1; *orbitsize=1; return; } - - /* else */ - for (i=0; i1) || (orbits[edgelist[i][0]]==orbits[edgelist[i][1]]))) - { min=aantallen[i]; minorb=i; } - if ((aantallen[i])>max) max=aantallen[i]; - } - - *biggest_orbit=max; - - - /* it is possible that no orbit was found -- that is: in spite of the fact that the group is NOT - trivial, it does act trivially on the set of still undirected edges: */ - - if (minorb == -1) { *orbitsize=0; return; } - /* the group only permutes isolated vertices */ - - /* nu worden de bogen uit de gekozen orbit in de - lijst kleinste_orbit geschreven */ - - - for (i=j=0; i1) - { - if (!group_up_to_date) - { number_of_generators=0; - memcpy(bufferlab,lab[nextstep_depth],aantal_toppen*sizeof(nvector)); - memcpy(bufferptn,ptn[nextstep_depth],aantal_toppen*sizeof(nvector)); - nauty(workg,bufferlab,bufferptn,NILSET,orbits,&options_directed_canon,&stats,\ - workspace, 100*MAXN,1,aantal_toppen,canong); - group_up_to_date=1; - } - mark_orbitnumbers(number,bufferlist,buffersize); - for (i=n_ext=0; iy is canonical -- that is: - choose one with minimal QUALITY - and amongst them one with biggest (deg[end]+maxoutdeg-outdeg_free[end])<<6+indeg_free[start] - the smallest among all lexicographic pairs canon_number(a),canon_number(b) - with a->b or b-> a a directed edge in list[]. Then check whether - a->b is in the same orbit as the edge of this smallest pair. - The group must be up to date. - */ -{ - int i, minx=INT_MAX, miny=INT_MAX, a,b, which=INT_MAX; - /* Some of the initializations are not necessary -- just to get rid of warnings - if compiled with -Wall */ - int canonnumber[MAXN],x,y; - int number[MAX_BOGEN]; - int candidate[MAX_BOGEN]; - int referencesum, sum, gotacandidate, endquality, lq, eq, expensivequality; - - x=list[last_positie][0]; y=list[last_positie][1]; - - referencesum=QUALITY(x,y); - endquality=((deg[y]+maxoutdeg-outdeg_free[y])<<6)-indeg_free[x]; - expensivequality= -1; - candidate[last_positie]=1; - - gotacandidate=0; - for (i=0; iendquality) return 0; - if (lq==endquality) - { /* OK -- nog een poging */ - if (expensivequality== -1) - expensivequality=getexpensivequality(workg[x],workg[y]); - eq=getexpensivequality(workg[a],workg[b]); - if (eq0) && (outdeg_free[end]-numberout[end]>0)) - // incoming possible - { SETOP(op,positie,2); - numberin[start]++; numberout[end]++; - do_extensions_par(orbit,positie-1,numberin,numberout,numberdouble,op); - numberin[start]--; numberout[end]--; - } - - if (double_allowed && (indeg_free[start]-numberin[start]>0) && (indeg_free[end]-numberin[end]>0) && - (outdeg_free[start]-numberout[start]>0) && (outdeg_free[end]-numberout[end]>0) && - (double_free[start]-numberdouble[start]>0) && (double_free[end]-numberdouble[end]>0)) - // double possible - { SETOP(op,positie,1); - numberin[start]++; numberin[end]++; numberout[start]++; numberout[end]++; - numberdouble[start]++; numberdouble[end]++; - do_extensions_par(orbit,positie-1,numberin,numberout,numberdouble,op); - numberin[start]--; numberin[end]--; numberout[start]--; numberout[end]--; - numberdouble[start]--; numberdouble[end]--; - } - - - if ((indeg_free[end]-numberin[end]>0) && (outdeg_free[start]-numberout[start]>0)) - // outgoing possible - { SETOP(op,positie,0); - numberin[end]++; numberout[start]++; - do_extensions_par(orbit,positie-1,numberin,numberout,numberdouble,op); - numberin[end]--; numberout[start]--; - } - - return; - - -} - -/*************************COMPUTE_PAR_EXTENSIONS********************************/ - -int compute_par_extensions(BOOG orbit[], int orbitsize) -// orbitsize must be at least 1 -{ - int numberin[MAXN], numberout[MAXN], numberdouble[MAXN], i; - unsigned int op; - - for (i=0; i1) && (orbitsize<=SWITCHPAR_ORBSIZE) && (maxorbit<=MAXPAR_ORBSIZE)) - { parallel_orbit_labelling(kleinste_orbit, orbitsize); return; } - - compute_extensions(kleinste_orbit, orbitsize, extensionlist,&number_of_extensions); - - for (i=0; i0, so nauty was just called and the - group is up to date */ - { - if (done_in_orbit+1 < orbitsize) - nontrivlabels(kleinste_orbit, done_in_orbit+1, orbitsize,al_gericht,maxorbit); - else - trynextstep(); - } - outdeg_free[start]++; indeg_free[end]++; - saturated[start]--; saturated[end]--; - is_gericht[start][end]=is_gericht[end][start]=0; - ADDELEMENT(workg+end,start); - group_up_to_date=0; - aantal_gerichte_bogen--; - if (!virtual_gericht[start][end]) - { virtual_outdeg[start]--; virtual_indeg[end]--; - for (j=0; j= orbitsize-done_in_orbit) && (orbitsize>done_in_orbit)) - { - if (allemaal_doubles_mogelijk(kleinste_orbit,orbitsize,marklist,&marklistend)) - { trynextstep(); } - reset_doubles(kleinste_orbit,marklist,marklistend); - } -} - -int connected(graph g[], int aantal_toppen) -{ - int i, list[MAXN], length, j; - graph reached, dummy; - - reached=(graph)0; - ADDELEMENT(&reached,0); - - list[0]=0; list[1]= -1; - length=1; - - for (i=0; igrens) return 0; - - memcpy(g,globalg,n*sizeof(graph)); - memcpy(deg,globaldeg,n*sizeof(int)); - - for (i=0; igrens) { return 0; } - FORALLELEMENTS(g[top],j) - { - DELELEMENT(g+j,top); - deg[j]--; - /* topmaxgraphdeg) maxgraphdeg=deg[i]; - aantal_bogen+=deg[i]; } - aantal_bogen /= 2; - - /* als maxindeg==maxoutdeg is gegarandeerd dat voor elke graaf die gegenereerd word ook een manier - bestaat om richtingen toe te kennen zonder de voorwaarden te schenden */ - if (maxgraphdeg>2*mingerichtdeg) - { if (test_possible(g,deg,n,aantal_bogen,mingerichtdeg)==0) return; } - - //if ((maxgraphdeg<=maxindeg) && (maxgraphdeg<=maxoutdeg)) nodegbound=1; else nodegbound=0; - - if (aantal_bogen==0) { addnumber=1; MAYBEPROCESS; WRITEUP(); return; } - - if (double_allowed) - max_doubles=remaining_doubles=watermaxedges-aantal_bogen; else max_doubles=remaining_doubles=0; - if (remaining_doubles) - { /* deg[i] is altijd <= maxindeg+maxoutdeg */ - for (i=0;imaxgraphdeg) maxgraphdeg=deg[i]; - if (deg[i]!=deg[0]) regular=0; - } - - if ((maxgraphdeg<=maxindeg) && (maxgraphdeg<=maxoutdeg)) nodegbound=1; else nodegbound=0; - - if (maxindeg<=maxoutdeg) { maxedges=aantal_toppen*maxindeg; minrestriction=maxindeg;} - else { maxedges=aantal_toppen*maxoutdeg; minrestriction=maxoutdeg; } - - if (maxedgesmaxdeg) return; - if (deg[i]((2*aantal_toppen)/3)))) - { //waterclusteruse++; - waterclusters (staticg, aantal_toppen); return; } - - //water_v_use++; - - memcpy(workg,staticg,sizeof(graph)*aantal_toppen); - - for (i=0; i=MAXN) - { fprintf(stderr,"At most %d vertices possible -- exiting.\n",MAXN-1); - exit(1); } - - if (multicode) decode_to_nauty(code,codelaenge,staticg,deg); - else /* g6code */ init_for_g6(staticg,aantal_toppen,deg); - - // direct_edges(staticg, aantal_toppen); - direct_edges(); // BDM - last=aantal_gerichte_grafen; - - - - } - - fprintf(stderr,"Number of directed graphs: %lld \n",aantal_gerichte_grafen); -#ifdef SUMMARY - SUMMARY(); -#endif - - //fprintf(stderr,"Used edge routines %u times.\n",waterclusteruse); - //fprintf(stderr,"Used vertex routines %u times.\n",water_v_use); - - return 0; -} diff --git a/tools/nauty25r9_unix/NRswitchg b/tools/nauty25r9_unix/NRswitchg deleted file mode 100644 index 65930016f2eb75441ba55d8ca4e483b1c3b4a0f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143837 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 #k1wEjON_WVTH#932pin$|VEThVc=>@(F`z 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 Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A NRswitchg"); - if (dolabel) fprintf(stderr," -l"); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - if (dolabel) nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = nout = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; -#if !MAXN - DYNALLOC2(graph,gc,gc_sz,n,m,"NRswitchg"); -#endif - for (v = 0; v < n; ++v) - { - NRswitch(g,m,n,v,gc); - gq = gc; - - if (dolabel) - { -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"compl"); -#endif - fcanonise(gq,m,n,h,NULL,FALSE); - gq = h; - } - if (outcode == SPARSE6) writes6(outfile,gq,m,n); - else writeg6(outfile,gq,m,n); - ++nout; - } - FREES(g); - } - t = CPUTIME - t; - - if (!quiet) - fprintf(stderr, - ">Z " COUNTER_FMT " graphs read from %s, " - COUNTER_FMT " written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_unix/README b/tools/nauty25r9_unix/README deleted file mode 100644 index cfb3c8a..0000000 --- a/tools/nauty25r9_unix/README +++ /dev/null @@ -1,123 +0,0 @@ -README file for nauty 2.5 - -Brendan McKay, bdm@cs.anu.edu.au -Adolfo Piperno, piperno@di.uniroma1.it - ------------------------------------------------------------- - -The most recent distribution of nauty and Traces can be found at -http://cs.anu.edu.au/~bdm/nauty and http://pallini.di.uniroma1.it . - -The manual nug25.pdf is available at that site and is also included -in the distribution package. - -Note that nauty and Traces are copyright but free to use for most -purposes. The details are in the file nauty.h. - -The code in the file traces.c is copyright to Adolfo Piperno. -The code in the file planarity.c (used by the planarg program) -is copyright to the Magma project. - ------------------------------------------------------------- - -INSTALLATION. - -See the manual for more information. - -If you have a working shell, and "make", you can run - ./configure -followed by - make -to compile nauty and Traces for your system. - -If that succeeds without problem, you will have have the -program dreadnaut ready to run. - -If you don't have a shell or make, manually edit the files nauty.h, -naututil.h and gtools.h as distributed. The parts between the lines -======= near the start are the main things to look at. After this -manual editing, you can use makefile.basic as a guide to compilation. - -Programs which use an older version of nauty need to be -recompiled (** not just relinked **). Make sure they define -the options structure using one of -DEFAULTOPTIONS_GRAPH -DEFAULTOPTIONS_SPARSEGRAPH -DEFAULTOPTIONS_DIGRAPH -DEFAULTOPTIONS_SPARSEDIGRAPH -DEFAULTOPTIONS_TRACES - ------------------------------------------------------------- - -TESTING. - -After compiling nauty successfully, it is recommended that you run -the included test programs. The simplest way is - make checks - ./runalltests - ------------------------------------------------------------- - -MAILING LIST. - -There is a mailing list for announcements and discussion about -nauty and related topics. You can subscribe at -http://mailman.anu.edu.au/mailman/listinfo/nauty - ------------------------------------------------------------- - -OTHER FILES IN THE PACKAGE. - -Also in the package (documentation at the start of each source file). - -sumlines.c - This is a program designed to digest the outputs from - multiple runs of a program (such as a computation split into multiple - parts). Lines matching given patterns can be counted and checked, - and numbers appearing in them can be accumulated. Instructions appear - in the source file. See the option GMP near the head of the program - before trying to compile. - -sorttemplates.c - Some carefully tuned generic quicksort procedures. - -bliss2dre.c - A program which reads one file in Bliss format and writes - it in dreadnaut format. - -blisstog.c - A program which reads one or more files in Bliss format - and writes all the graphs in sparse6 format. - ------------------------------------------------------------- - -Windows. - -For running nauty in Windows, Cygwin is recommended. - -If configure gives an error message similar to this: - can not guess host type: you must specify one -then try - ./configure --build=unknown - -If shortg gives an error something like "Input file -given twice" it means that the Windows sort program is -being found rather than the Cygwin sort program. Usually -this is a configuration error in Cygwin. - ------------------------------------------------------------- - -Making 32-bit executables on 64-bit Linux systems. - -(In bash or sh:) -CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 ./configure -make clean; make - -This requires 32-bit libraries to be available. On Ubuntu -they are called ia32-libs and libc6-dev-i386. - ------------------------------------------------------------- - -RECENT CHANGES. - -The big change in version 2.5 is the incorporation of Traces. - -See the file changes24-25.txt for a longer list. - -See the file README_24 for a list of older changes. diff --git a/tools/nauty25r9_unix/README_24 b/tools/nauty25r9_unix/README_24 deleted file mode 100644 index 4adec9e..0000000 --- a/tools/nauty25r9_unix/README_24 +++ /dev/null @@ -1,292 +0,0 @@ - -README file for nauty 2.4 - -Brendan McKay, bdm@cs.anu.edu.au - ------------------------------------------------------------- - -The most recent distribution of nauty can be found at -http://cs.anu.edu.au/~bdm/nauty . - -The manual nug.pdf is available at that site and is also included -in the distribution package. - -Note that nauty is copyright but free to use for most purposes. -The details are in the file nauty.h. - -The code in the file planarity.c (used by the planarg program) -is copyright to the Magma project. - ------------------------------------------------------------- - -INSTALLATION. - -The first step is to unpack the archive. On Unix-ish systems -you can use one of these commands: - - tar xzf nauty24.tar.gz -or - gunzip -c nauty24.tar.gz | tar xf - - -This will write all the files into the subdirectory nauty24. -Go to that directory. - -If you have a working shell, and make, you can run - ./configure -followed by - make all -to compile nauty for your system. - -If that succeeds without problem, you will have have the -program dreadnaut ready to run. - -If you have problems during compilation, it may be that the -configuration scripts are inadequate for your system. Usually it -is because of some missing system header, incompatible typedef, -or similar. Please send the details to the author. - -If you don't have a shell or make, manually edit the files nauty.h, -naututil.h and gtools.h as distributed. The parts between the lines -======= near the start are the main things to look at. After this -manual editing, you can use makefile as a guide to compilation. - -Programs which use an older version of nauty need to be -recompiled (** not just relinked **). Make sure they use the -DEFAULTOPTIONS_GRAPH or DEFAULTOPTIONS_SPARSEGRAPH macro to define -the fields of the options parameter. - -See below for compiling on a PC under DJGPP. - -If you are using Windows in an environment that needs Windows line -endings (which is a configuration option in Cygwin, for example), -then you might prefer to use nauty24.zip rather than -nauty24.tar.gz. - ------------------------------------------------------------- - -TESTING. - -After compiling nauty successfully, it is recommended that you run -the included test programs. The simplest way is - make checks - ------------------------------------------------------------- - -MAILING LIST. - -There is a mailing list for announcements and discussion about -nauty and related topics. You can subscribe at -http://dcsmail.anu.edu.au/cgi-bin/mailman/listinfo/nauty-list - ------------------------------------------------------------- - -OTHER FILES IN THE PACKAGE. - -A few additional goodies are included. - -sumlines.c - This is a program designed to digest the outputs from - multiple runs of a program (such as a computation split into multiple - parts). Lines matching given patterns can be counted and checked, - and numbers appearing in them can be accumulated. Instructions appear - in the source file. See the option GMP near the head of the program - before trying to compile. - -naugroup.h, naugroup.c - These define procedures for exhaustively - listing a group found by nauty. This is done in a space-efficient way. - A sample program appears in nautyex3.c, but so far there is no - complete documentation. - ------------------------------------------------------------- - -DJGPP. - -The Unix-like environment DJGPP can be used to run nauty and gtools on -DOS/Win computers. DJGPP is available at http://www.delorie.com/djgpp . -The program shortg does not work since DJGPP does not provide a working -pipe() system call. Using the bash shell is recommended. In DOS, -Windows NT and early Windows editions, you will need to convert all -long file names to the 8+3 limits. Thanks to Guenter Sterntenbrink -for helping with this. - -If configure gives an error message similar to this: - can not guess host type: you must specify one -then try - ./configure --host=i686 -or use i586 for Pentium 2. If all of those fail, try - ./configure --host=unknown - ------------------------------------------------------------- - -Making 32-bit executables on 64-bit Linux systems. - -(In bash or sh:) -CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 ./configure -make clean; make - -This requires the libraries ia32-libs and libc6-dev-i386. - ------------------------------------------------------------- - -RECENT CHANGES. - -Here we list substantive changes made since the first 2.2 release. - -Nov 16, 2002: Replaced rng.c after communication with Don Knuth. - The previous version had a bug (mine!) when there was no explicit - initialization done by the user. It appears the error had no - impact on nauty (which only uses rng.c for the "s" command in - dreadnaut, and for genrang, but both always initialize). - No change to the nauty version number but beta=2. - -Nov 18, 2000: Adjusted the makefile and countg/testg to work in - the DOS/Win environment DJGPPP (see the previous section). - -May 1, 2003: Fixed PRUNE feature of genbg. - -May 3, 2003: Added utility directg for making all orientations of graphs. - -Oct 4, 2003: Added options -a, -Z, -d, -z to genbg. Also, the -l - (canonical label) option now preserves the colouring. - -Nov 17, 2003: Renamed INFINITY to NAUTY_INFINITY since many C header - libraries define INFINITY. If INFINITY is not defined by - the system, you can still use it. - -Nov 19, 2003: Added program biplabg to relabel bipartite graphs with the - colour classes contiguous. - -Feb 13, 2004: Revised C options for solaris on pentium - -Mar 1, 2004: dretog knows !...\n type of comment - -May 7, 2004: geng can be called from another program (see instructions - in geng.c.) - -May 29, 2004: added definition of SETWORD_FORMAT used to write a setword - with printf( ) - see nauty.h - -Sep 11, 2004: Added utility multig for making multigraphs based on - provided simple graphs; similar to directg - -Oct 16, 2004: To avoid problems caused by system-dependent handling of - external declarations, nauty() no longer accepts NULL as - the value of options.dispatch. To get the previous - behaviour, use the value &graph_dispatch. This will be - handled automatically if programs calling nauty use - DEFAULTOPTIONS to declare options and are recompiled. - Even better is to use DEFAULTOPTIONS_GRAPH. - -May 5, 2005: A bug in the writing of sparse6 was found and fixed. - This is procedure ntos6() in gtools.c, which is invoked - by writes6(). The bug could only happen if all the - following are true: - 1. n = 2, 4, 8 or 16 (for n=2, only if the graph has loops) - 2. Vertex n-2 has non-zero degree, but vertex n-1 has - zero degree. - These conditions never happen for graphs generated by - geng or genbg, nor for regular graphs or connected graphs, - nor for graphs canonically labelled by nauty (except maybe - with some unusual vertex colouring or invariant). - If the conditions do happen, the buggy routine may - (with some probability) add a spurious loop to vertex n-1. - - In the package is a utility checks6: - - Usage: checks6 [-w] [infile [outfile]] - Check a file of graphs, optionally write corrected version - -w Write corrected graphs (default is not to write) - -------now we start version 2.3 (not released) and 2.4------ - -Nov 10, 2004: Use faster routine getc_unlocked() for reading graphs if - available. It can make a surprising difference. - -Nov 17, 2004: If putenv() or setenv() are available, we set LC_COLLATE to - "C" before executing "sort" in shortg. This should alleviate - collation issues with sort. However, note that many - utilities use the locale these days so you are advised to - have LC_COLLATE defined to be "C" always when you are dealing - with files of graphs. - - Six counters in statsblk became "unsigned long" instead of - "long". nauty doesn't actually use these, but we might as - well give them twice as long before they overflow. - -Nov 24, 2004: Made geng faster for generating trees. The output labelling - may be different from before. A very much faster tree - generator is in the works. - -Jan 17, 2005: Added two items to dispatch vectors: - init : used for initialising something at the start - cleanup : used for doing something at the end, such as - freeing space allocated by init() - See the manual for calling sequences. - -May 20, 2005: Update graph6 and sparse6 formats to allow much large sizes. - The limit is now 68719476735 vertices (best of luck getting - close to that!). - -Nov 12, 2005: Changed NAUTY_INFINITY to 2^30+2 in BIGNAUTY case - -2006 various: Procedures for sparse graphs implemented. - - New program planarg to test for planarity and find - planar embeddings: planarg -help for details. - The planarity code was written by Paulette Lieby for the - Magma project and used with permission. - - labelg got -S to use sparse graphs. - genbg -N changed to genbg -n (only Gordon uses this). - genrang gained -R switch for regular graphs in text format. - gtools.c has code for reading and writing planarcode. - listg got a compile time option to select "Matrix" or - "array" for Maple output. - pickg/countg got -T for counting triangles - - Better configuration for MacOSX. - -Nov 22, 2006: Removed usertcellproc from options. Greater functionality - is now available using the new targetcell field in the - dispatch vector. The u8 command has gone from dreadnaut. - - Changed bestcell to targetcell in dispatch vector. - -Nov 29, 2006: Added extraoptions field (currently unused) to optionblk - -Dec 9, 2006: Added an invariant adjacencies_sg(), recommended for digraphs - when using sparse representation. - -Dec 10, 2006: Remove BIGNAUTY, whose usefulness has passed. Now the types - shortish and permutation are synonymous with int always. - The limit on the number of vertices is 2^30 unless int - has only 16 bits (still any of them around?) in which - case it is 2^15-3. Programs previously linked with - files like nautyB.o can now be linked with nauty.o. - Alternatively, "make bigs" will create files like - nautyB.o by copying. - -June 26, 2007: Fixed an error in listg -s reported by Evan Heidtmann. - -July 12, 2007: Added -f option to directg. - -Aug 14, 2007: Added -i,-I,-K options to shortg, parallel to labelg. - Since -k is used in labelg in place of -I, changed labelg - to use -I also, with -k remaining as an undocumented - compatibility feature. - -Aug-Sep 2007: Minor things: - * naututil-h.in now defines CPUTIME=0.0 as a last resort - * gtools.c now implements EDGECODE (not used anywhere yet) - * fixed definition of SG_FREE in nausparse.h (not used) - * geng favours space over time for n > 28 - -Oct 14, 2007: Added -T switch to shortg to specify scratch directory. - -Mar 3, 2008: Fixed makefile for compilation in a 64-bit environment. - -Oct 11, 2008: Added -l and -m to genrang - -Nov 29, 2008: Slightly improved -c for geng and genbg - Added tournament generator gentourng. - -Mar 3, 2009: Added -V to directg. diff --git a/tools/nauty25r9_unix/addedgeg b/tools/nauty25r9_unix/addedgeg deleted file mode 100644 index b98f82d7779365c085adadccfa986fb730aac4c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161850 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

      9A8+r%Z_*K5{Bzh#hrrJjNeWb|)+ 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 diff --git a/tools/nauty25r9_unix/addedgeg.c b/tools/nauty25r9_unix/addedgeg.c deleted file mode 100644 index 0032c99..0000000 --- a/tools/nauty25r9_unix/addedgeg.c +++ /dev/null @@ -1,288 +0,0 @@ -/* addedgeg.c nauty version 2.5; B D McKay, March 2009. */ - -#define USAGE "addedgeg [-lq] [-D#] [-btfF] [-z#] [infile [outfile]]" - -#define HELPTEXT \ -" For each edge nonedge e, output G+e if it satisfies certain conditions\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -l Canonically label outputs\n\ - -D# Specify an upper bound on the maximum degree of the output\n\ - -b Output has no new cycles of odd length\n\ - -t Output has no new 3-cycle if input doesn't\n\ - -f Output has no new 4-cycle if input doesn't\n\ - -F Output has no new 5-cycle if input doesn't\n\ - -z# Output has no new cycles of length less than #\n\ - -btfFz can be used in arbitrary combinations\n\ - -q Suppress auxiliary information\n" - -/*************************************************************************/ - -#include "gtools.h" -#include "gutils.h" - -/*************************************************************************/ - -static void -no3path(graph *g, int m, int n, int v, int *dist) -/* For each i, set dist[i]=0 if there is a 3-path from v to i */ -{ - set *gv,*gv1,*gv2; - int v1,v2,v3; - - gv = GRAPHROW(g,v,m); - for (v1 = -1; (v1 = nextelement(gv,m,v1)) >= 0; ) - { - gv1 = GRAPHROW(g,v1,m); - for (v2 = -1; (v2 = nextelement(gv1,m,v2)) >= 0; ) - { - if (v2 == v) continue; - gv2 = GRAPHROW(g,v2,m); - for (v3 = -1; (v3 = nextelement(gv2,m,v3)) >= 0; ) - if (v3 != v && v3 != v1) dist[v3] = 0; - } - } -} - -/*************************************************************************/ - -static void -no4path(graph *g, int m, int n, int v, int *dist) -/* For each i, set dist[i]=0 if there is a 4-path from v to i */ -{ - set *gv,*gv1,*gv2,*gv3; - int v1,v2,v3,v4; - - gv = GRAPHROW(g,v,m); - for (v1 = -1; (v1 = nextelement(gv,m,v1)) >= 0; ) - { - gv1 = GRAPHROW(g,v1,m); - for (v2 = -1; (v2 = nextelement(gv1,m,v2)) >= 0; ) - { - if (v2 == v) continue; - gv2 = GRAPHROW(g,v2,m); - for (v3 = -1; (v3 = nextelement(gv2,m,v3)) >= 0; ) - { - if (v3 == v || v3 == v1) continue; - gv3 = GRAPHROW(g,v3,m); - for (v4 = -1; (v4 = nextelement(gv3,m,v4)) >= 0; ) - if (v4 != v && v4 != v1 && v4 != v2) dist[v4] = 0; - } - } - } -} - -/*************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - boolean badargs,dolabel,quiet,Dswitch; - boolean bswitch,tswitch,fswitch,Fswitch,zswitch; - int mincycle; - int i,j,m,n,v,w,argnum; - int codetype,outcode; - graph *g,*gq; - nauty_counter nin,nout; - char *arg,sw; - setword *gv,*gw; - int maxdeg,actmaxdeg,degv; - double t; -#if MAXN - graph h[MAXN*MAXM]; - int deg[MAXN],dist[MAXN]; - boolean okdist[MAXN+1]; -#else - DYNALLSTAT(graph,h,h_sz); - DYNALLSTAT(int,deg,deg_sz); - DYNALLSTAT(boolean,okdist,okdist_sz); - DYNALLSTAT(int,dist,dist_sz); -#endif - - HELP; - - infilename = outfilename = NULL; - Dswitch = dolabel = quiet = zswitch = FALSE; - bswitch = tswitch = fswitch = Fswitch = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('l',dolabel) - else SWBOOLEAN('q',quiet) - else SWBOOLEAN('b',bswitch) - else SWBOOLEAN('t',tswitch) - else SWBOOLEAN('f',fswitch) - else SWBOOLEAN('F',Fswitch) - else SWINT('z',zswitch,mincycle,">E addedgeg -z") - else SWINT('D',Dswitch,maxdeg,">E addedgeg -D") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A addedgeg"); - if (dolabel) fprintf(stderr," -l"); - if (Dswitch) fprintf(stderr," -D%d",maxdeg); - if (bswitch || tswitch || fswitch || Fswitch || zswitch) - { - fprintf(stderr," -"); - if (bswitch) fprintf(stderr,"b"); - if (tswitch) fprintf(stderr,"t"); - if (fswitch) fprintf(stderr,"f"); - if (Fswitch) fprintf(stderr,"F"); - if (zswitch) fprintf(stderr,"z%d",mincycle); - } - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - if (!Dswitch) maxdeg = NAUTY_INFINITY; - - if (dolabel) nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = nout = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - -#if !MAXN - DYNALLOC1(int,deg,deg_sz,n,"addedgeg"); - DYNALLOC1(boolean,okdist,okdist_sz,n+1,"addedgeg"); - DYNALLOC1(int,dist,dist_sz,n,"addedgeg"); -#endif - - actmaxdeg = n; - for (v = 0, gv = g; v < n; ++v, gv += m) - { - degv = 0; - for (i = 0; i < m; ++i) - degv += POPCOUNT(gv[i]); - if (degv < actmaxdeg) actmaxdeg = degv; - deg[v] = degv; - } - - if (actmaxdeg > maxdeg) continue; - - okdist[0] = okdist[1] = FALSE; - for (i = 2; i <= n; ++i) okdist[i] = TRUE; - - if (bswitch) - for (i = 2; i < n; i += 2) okdist[i] = FALSE; - - if (tswitch && n >= 3) okdist[2] = FALSE; - if (fswitch && n >= 4) okdist[3] = FALSE; - if (Fswitch && n >= 5) okdist[4] = FALSE; - if (zswitch) - for (i = 2; i < mincycle-1 && i < n; ++i) okdist[i] = FALSE; - - for (v = 0, gv = g; v < n-1; ++v, gv += m) - { - if (deg[v] >= maxdeg) continue; - - find_dist(g,m,n,v,dist); - - for (w = v+1; w < n; ++w) - dist[w] = okdist[dist[w]] && (deg[w] < maxdeg); - - if (fswitch) no3path(g,m,n,v,dist); - if (Fswitch) no4path(g,m,n,v,dist); - - for (w = v+1; w < n; ++w) - { - if (!dist[w]) continue; - - gw = GRAPHROW(g,w,m); - ADDELEMENT(gv,w); - ADDELEMENT(gw,v); - gq = g; - - if (dolabel) - { -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"addedgeg"); -#endif - fcanonise(g,m,n,h,NULL,FALSE); /*FIXME (loops)*/ - gq = h; - } - if (outcode == SPARSE6) writes6(outfile,gq,m,n); - else writeg6(outfile,gq,m,n); - ++nout; - DELELEMENT(gv,w); - DELELEMENT(gw,v); - } - } - FREES(g); - } - t = CPUTIME - t; - -#if LONG_LONG_COUNTERS - if (!quiet) - fprintf(stderr, - ">Z %lld graphs read from %s, %lld written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); -#else - if (!quiet) - fprintf(stderr, - ">Z %ld graphs read from %s, %ld written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); -#endif - - exit(0); -} diff --git a/tools/nauty25r9_unix/amtog b/tools/nauty25r9_unix/amtog deleted file mode 100644 index 7791ad03bb77e75869d887532ab5ba076be27d86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126033 zcmc${3w%`7)$l!&WH8aBC)T8*f&`5UDoPYAV~EVa1kT_@Q9-OXzyLzMfG`o-atY21 z=6D>S-g~q5(Y9*U+ENiwlMF}#D#}Fxu?nK-93qOS5Q32JzxFvZnMCRHJm33%zb~zv zz1LoQ?X~w_d#$yvGrux4Jj?BNrT(&9m$)Q0^+cZn+5fs+vzK<@_*{crc`l#pRM#o4 zZeV%%FNNoGLaA@7lP&el1y}yE`7ek624zW1zCQV+zdcmU-h6ILHj%4 z2^%x@b-7AZx|fD?Cxcd+)Ld@4d^fFjL=mq~Z8WeN*|aAfNF0 zKm99o5U+H~J6gN!b?TS;I#Jj8w@$t3q5 zTj&e!h|9*Pl2Yy1otW@k#D7v1N&jwY(ct0#zV}i0o!hURRMK|FJwvU(Nm_6I6B?>s z?h;q6yD&>&r}3Zs_3e3YkI7>u6ngiWDKW7VGX8y+@Q*X%so=Q~{vr5RN5P+U6!=?5 zfj@o}_^C%Jx8*4KjYomsbQE~SQQ&7C1-|qs@aac^A9ob^AC3agKT3T)M}e0CFM(Fq zzn1{~P=7Ta1wQpC@XL+@FFp$V@KNAr9EJbukAmO-DDaDp0v8$oq56Ju6nNcH;12;m z-gS~|{68lUa=B9a>1qc)r3?H62R^+E+{JjWmf?MoYx1qrs&AP*_0~zQapR`Xn0kA7 z^0?|Lx40(Fo*H(I3tm2MdQG_6HF?_fNw>SEPnt1f+6?e!h9^|tB530#PndeEYsRDr zw?f4=GdyuBSPFM$c*d<{sk!~;N#wt6(rq&*L2n!sZl5*|wDVTq8okp~J>qaNdRI4M>N}I)WXcpQe*9IB%fzSXTOf+38SDI%KDc zO|(PZx}>DyZZHs8S4!`PPnw!1n$-tTU=RHIA=IqL6>{Q5Q>PY)rXK6WPgL=2*90eC zbF$>ma@|5){#yS&L48G6pP)kaKPkBro83DDo{~F(r}Vibr{qrHrwhRO>;Ak={}|#< zkt(Gm1D=&a=G!L&F194~*FOWEvYnDPC5W(2K?AG)a9Cz0T-Q{`kS5s&rbpQ&dz|-ap}L>4ET@IP?xJN1FmJjmt??GvLeZk zWWbNlz<(?Qo~f^%%z$Ug!}A$%@c~kQ%QN7ji&KA%8StN^fPB|vz)#G8ug`#suaWxO zngKs41?0OU1AcM_JedJMB?G=U1D@%0v}VA2X5hR2(IK~|X25eZ;Jq^7g&FXY47eWo zJXbe8l~43`>9NMJCpnB!phsTIU6p}EuzlbKptPScfPb}KK0*?oB1qPbcK*&dTjDZ= zto15>n#5)3SdA)vvczS`SkJ5Yk0mZc#d=J|kCnI#5o?KxXGvU!hE=QLZI2U|Az@8d z@qH4PpYKp-zaerb*n_hUzfOuxK*g)D%0ws`fNkGbU@eRqh zY){$RO8NgM{(2F|%CdId%+?_}zIISQEqWT1{E=q2UwDf?rDE+_T66`W<&wc~ycICs zs4RIaT-;FiGrvoi2^e1|4H`$7A!C-dxCGIQHEOZ$e09Km7(QBbDMVB$PZQA1Ii-E- z*VOu5$+^@8grL!+MPEgTB}a+M@nI^*yH1Xh`j=^i0_qFK7d}DjG z=s`tePHF%8t%7_WtWo~}BwUrTPr?)R>QL#ZdLPlaf5>kR9MP*c=+#>p=->Po16}+3 zCf&R8&P!y(AFrDgZv#wT{2eSxHj>}d`wQW^e)GgI+8?8lU z0v{i>zP8P+E&QDD;5)SF5m2@IH7gpgMI6kE5{gt^S=N{g!$^ZvGdYq_?QHiDEw);P zvRqp1WkN5NTSx1JgLG>0Wtb{!)XjU9WKPsC%vYkS#eNHu`hwR)fUmp3 zf4%<(|Be1}tDsCZ-+`VUX>=>;(T$a5jkOoM!WZlD8Gyp2Q5=*B)JR^+T{q5<}~BRdhkCbu40l^fltMen7MO7C86@fZTu zJpR#oNiP3O!gx!ZpdE?`8+}#?w5+k^72vN**qVYmlBAMU(w|6@;h<7Sl1fC48Ud1n zF~aaj523R6L*~Gxk0BVO_nAnOS=UR&<6(p$KBsj2io1bPfKLWyzW)`WYlKR31N@Vd z+%Sqtnxjj{2TY>;mn&m7pZ|Q;I+0@2bD2ZDV2?29r=_uq?t2+ThkdlJu zP#1ngYF@zD5osKv=_@H!Ps}ORyNP`2&^uM=8E@;9-#u9Urk?mH8>xL;j~C_Y@foeU zckisT^ya2kX_&rEx_e*Qem$`}oAh@Xt}ear1_V4ec}yE^E%I5m){)H7+5?HfRoVj# z^TDH`?$aJ<)Fa5bI~S0!y6ErJzU+M&z}=<2lrzIuIZb?pzDtjvyIQ`~KMisWhJ&#v(_mnVcTF`*tbK`>__? zOt!&gw9z11M~mG|djp^MCpi1nqrF`t&73|XV>zl+H3qbR$d6sFh?1~D`SYVoBCFgw zqSIY>he`{*tF(LHKyo5;XwGm?Nf?A4=nlyhQ_u-1WpMLBg_ECw^UWW?S(1S>%*F|1 zL1YxIhWHHJ4w5Km6zlWUAlZHeqv)bT?d_A#(|SdLNUdy!E9p@<&9z>KAI7Cr?_^q% zdfBb1hNe~-D$Pe+^8dR&up(+e6jTYDVtiFq8V)clk_PRad}lvZ8iXnnL9sR01mL0# z2T?0)4t^QZ@kP?%066zo+`P4bT=2 z5i(-PUXU!ERev*x$tw>i1XTZ%M77wD$k1>iIyN~Q@5E}SeYN`5kg-2G2uwAktqPQF zLy_P-0L&VIT+o*xSIt==x}hXQzxP?OgZiYpwgS?rUi~#$%G#4ZmvYU5(@AN_1$D(a zFsN{n<4CfNK&3*e_>nOBi*Lyw2Fw~rc@0VQfAU=%DjV|@Fk^edn(FuZPo%+HNo2$Z zkY<;)npPHWN)WWa|Bl{y6%@NT7g=G*0NtA9p!ET*PSF08Lc=(1q4_}^FNh~A#EOaF zydoBvUfvPcoq|A9Z#fe zPte$Kqi*cfBcJRYH9FYb=%XOLIkA4Ue42L@_*}`$Ao5Lza3jadFJ~cUjNVV@qeohQ zq#L_tW!~YU{q-u*XL_U}`5*}4Q`0OIjcF)hRUG{G z^*30*A`5(5GwpAr{Sw{mrY(AaG8eSBf0^xSa?P9fGo!7^=bo2nJ2kR$NZqI`qb3nk^|gr7uw1=-SfLhq znhA~+ts7V62DD{^@KrC-qVwG%S%fdvjStb*0izwK#&1-*l2OSXIqaTS%GWV*TpM9|w`-uwWl<4shIYHyKn&X1l34iV2(vtAE zsTQCGlc&LPv*-Dhh>kRvvC8@!o%&>!78?r%siYRIA|#FT&{urL?Ov_b{RMt)*QKS~ z=G(KUZ?jKAEg&b>E3MNy*>s6%Mvq`<2=7WwhHK=BRpHcgmvO=%CHgLHm^{iL}nt zqG4R1Nb7Vh7RN90MfYpbD1nZ)pDvxBN#j;6=25e(RPQY4iZMZpeT>rRpfR*7#_d`x z(Fx-ZT`{2X$4(d%x?;@GVskrT^zDi z#Xz#YrA<3(>+Xs%NsDdjgt59SA0=A!b0#8@*1=lr$xf&ZfIBrm7z@GhH&?oHV9a_N z`#0Iv1L^VdN0E%oKAWk{8 zLQQQ)>IGd>>Bk#IHKqHYt!wKb6oWfq)OW=|a8K@pv9K!!z0^uec9c@p6@y;d+zF%j z2QdBxhO|?b^wd^y^RUygwb&%W)m5+Qw;Lfjho*DZlC$Nt4z{1|I?Na-y*jadM^_9Q=des&(+%wHih=%lzZ1q` z(X5%{68-a1CydoyG0;B`cfv5cVxWI&I$>PZ6$4JM>V$DhR}4C-tP{o`L|`*H1w#Wv zTDe3z=|cQL$IdbctR=mf6nwNId1Hs{5478Vyf~+b{zbcGz_n|!O8{WFu~=Gkm?WAN zPm`T7s7kARO*gC+Ycj@>C4GvKFKf&&^YrQ+WLzN&hsvXE7&RVwcotm7SW>y` z1(yp(pEO2^V3;;Wla0|&FwRP2w2DkkwK1L$40!*gJJ?JTBkogPQhygUr*z|;lN{U zcKcrK&|jK@H%j~ZY$*KvE(Kp`!CivyOXL5}fk*oR0$;>Z=tolUVgQzz#=j*6KWxj_Rgx`Z z%3puX;ETh*h$M$F;h0yd)sJx7;rTta`mtGw9o-_khvcm%oSh2G#GGaL5m^EhV^U!?zn21ac3rGrqHLh+zglPiNbMeJ_2>I)4>N0%-NMM8A(6wE zXp6pM2x#?F+)jM)?^Rrf7hiT_SGR~Y1dj675zJd{oTn|*%J$bDyqJz_QrXXjR9WMK z!?G}-{jpJx=fp6tF5SIXcQ=E`E{r00%;00S=rJHymTinS))ZKW7<-~G2Ok^mK?%aL z{)k?k6DygBE9qXT)gJ@iM@wvz7czeAztO4R6nN9KgA9n8mu(TGNpHGCHP!ui6lEUK~!(^}R@O)AUw#2WoCOI|Jd z82^H1BxF;|*s@5FfOctu5QH^mlA+&FIQljd*2N$)S%?yr#qLC)Z=><`rjG;0TSj8jkxJu3VE#>?vh`=|^;6?O@21MK#=H;J z{w_Q#gJzvz%O9%@ZmoWr+cI&WR4ZHC3DI~~Z%SUGnyNaQ+VdBye<+?)t5>fb8PE6Y3l6#-7&vSGRNb4HGf_9z=#iBa zcWfZ;U+=GN&AW5GZk#CVX9u=XZC$HesTNP&n7vA?AL{li zK82LMHRP;?)xr|y;>6{Mu?t~TafSapLvE$p3Q3hkZo?(sz2P&YRa>-_pGX8?p)J>6 z2@k41s;EqUM#uKEYGoX-*R70AHIwuOhd#RH^|~+>d2dC@4UUt^Iu(nU>pr6Qye(mt z?FUX+$O`Vo@RodW2hatFd(kxEQ?J9H1X<-|-_2S6wC*P-`a#B*=%0}BX|k4VEx(>D zf9dskb#5Wn9?qu#7X>8G0V(;=_V#v@ZP}V*?G@BBA=Xd|Ysq{k|nE3maIe}+RJZaWTmgfANlUs@D-q633|}@fV9K9cT-Khh}nkS zq4>Y9EX1J>dH2rz8{T~nuw>2tfiw@t0twF!83T_e(6T5cAGAaN58>1FSW)3(cePGNetROvrRt|dMB%?DVeAGec%j9ZA{N&1b~SWa|c9|L0n6MDZ9dd9YzrEF#{ zZ8%SQ=}d;6Eq}6J>KraG4#_fU^5=?+)cTh6Z))|C>i3tG%0&lglVJ51sssH>0x0G* zin%O4vBDMfzNXzR>%}4SjKh)Mvbb4UH=wk}8!(cI9Xal%%Ge%%UAWXe@2pGXMT7l` zUD;)8Q~j$OU+9tDZhg}ikwmVq?t*~Vs%g>LP$<1LK6tQ<0MWK!C9jkUvb7gGWEXWG zMTz0w{cn-69p76PwdF@i$sZ+$@fkbI`Al7=k}>&?YOY3hUq%vT7cpOpeh3;Xq*ggi zn&!`$@y`5Js#RE%^&6`rJ2ZddaE>9Bn|B=+qil~F->J3FnK$Y2^tz{>*p;hSuNPaQ zyWg$!eqOV+GCnt}s=D1;O3&ExSdqA^w@X+|=29c!$kJh?Y){K3<^Q~|`n)F6P$4}! z8ZQ{I!e3)2NtW#8b>m>rXcwtaOX!?B z;pmdK47WzB->XG^OpXKb$qB{*?t^U7VpJwz54-%6U2AX~>@8V?uX zh6KdUHC7s{)Q<4SL-a?2@z81*o4f>BtU+nt;99{d80ulQJJK>_|EiMknIp}?ACye- zyYxJ-(VS@S=4bp@V^ntzxy&qjS5iWGMc5R#`~8r6EoQuCsh?QL{Z^%SN6lh6`;{@D zmqw(??#Pygq{-~Y`UXgj(}=VnF;Ax${!Q>02XfR#UMwcwHoao@rTtZmPOu&Tz~(vT zSUj9#*+0RMrTm+y5TeJ8^AxyL)d7c(wqLYKDB|;J z^|Rd8QbryeSihj`hBf0Ei}%W`CBy#8`L8W97^{rcVoTq|+I_2rWb!Le)uu}mS}W%% zv1~tKl++HoIA|o4kZaLrX?~-4`;%y4ZQ1eu_|U}QA+w6H_rXZQEuhNywF!Uip&@sE zQ7LC+K9vzu+jguL+bAKe{?w4MxAqWY=~C&)mLZWtYF2ZN3IU3S-J9}->0 z?oX!?V#|Y8e~s<`Q#}4ZCB32ie^t5)du&cr*!KT_fV0?STD+?7S5!d>`MjdC_63JT z3Hh`?Hgjm@)f`yYtG^De_}kO=pKk08#fP^C5A4*94SK@jluJ$!aa*G&c4Tq-h2UO2 z(sUenf+NRZ+^_5IEkW-=EqZ`nZ`dmx{5PhJ(*E(`ZkqQ-xAj+&I{c*&>yH1-vhq2&}I( zW)+6wrS4!gLf$MVnsS5Yi2k~_`Ob@!DPJ#}6C873^OyrIblhtC4XZt(f6~3#86P8Z z<-kE9XCGO8C;K4XO9pLWm~s`7nVpD`d64Q;yTFp<@^@2&x@*xr3RlW9R^!=JnbUIT z^;R5k_R09tVWTJ}Y$SgqIi>7cFGFZ3q6&fcHSnN`HL#k(3G47miR#fF zS1@~YC2cbr-(CSuo-e6~zs*W^jQhx{kg8)tELy-mzjp>%Q z@CG%CIngqaX(KHkmnsL1%YDha$)GgTh!QRO3aNIjYe_F_S6-vN=!qUJ+h~vLh{Znn z`kLbz6Fo}R!ByEgc5Ll{P<7}*SCu*XT~}rNXYMNZ2EubW7I*!FuA#<&I+81LoD_f+ zIm3;dI+>EW-}i2w|AaaN*h~xUuVKC!DDB=XoMOyh8`RkXi@eUj0^_lW1r|x&4+IOW zB-oB&fiq%gm@Bcs|5?HppL#fDf%_0rO&v6+b+@IA4zT_SSjL27m{(dZ0JL|Bm5`wx zA8Xr-I%O~RGEEk9eH?m3T#B^4#;1)na%$yVsh;040Wu)cw!3LlTYy1S*wuiu-;}oB zC0cziu~1?NWj>`0;X4u#^Uackm~Zj#JIwc{fUz;des9aP-*QN?P>VfI1~KC2ReHbD z;^#3GFyfIw+~p2#j!;C&AV+`w2FAHu8RuTH_ro{BPWWdsw}u_t zCij*^2Vd-RrLo?&%bQYmd575LrnFt&W)-L`$}T(W6^CeN)t*P(sS%_tlKpWRQypVT z|6hzFPQl@qq7)cKC92u=#Lleb!S!-{i$;-CP@Tur-KR39s?4z^WsS~25$|go?cnra zB}*`l_Z8XhIA67@oz%M0TD7ipx*9~du%)UG{m@i>DAtxn!-?J23IxQdSva7Mq~!C9b* zoAjj&9?3Ucc*xK=(zvM=DS!g%m9~{DkcDp?Smkn=r|1cz_&O3a9aV06_q4bb6L5&WZpR>`S3gJ==>|R`svCW_2X%Z8V8=Y zS0etrM&*%;R$;eQi=GY{PV-@bWq#~o72nJ$W#i9YIw(x7iwS)wPRA;+GA~v^Xzc}p zRZwNvF|0yHO!=J-CoJ&r7pCO~MDz4k!=Vm?e zg?OKL;&Of^HYC`$u}b@UA{c2r4!pGYxexDC7w_{p3TzlOfo|-_zO?OU#D~%D^~2oi zmQ08LDI28tpCKjX=*I>Qox76D-c;SpVn{foH~TnlLE|<1WNTTzCC<0I^VOZN&-o5= zzWwEEErd4is2pr)I4rXD2;0UDJ0!G7LfwVYC?O?pV_3Yl7n;;*zN?H)vPu&A6F8g|L zSi^em4%U$H+=KC3kH>xgR@Rpm7Ko&X))76ZT)ch@!At(>4M+ApcN5j3St@z8ZhXoK zbK~67WFrn}ji+c4JSLterQKz9R$-|VQ)Lz5Y z?p`hCpIb64Ggo+pUJ>+C3%NxA)I#q0ucunP7?2iynp|A%(HkKk7no#Ir>&;dkI8Jek6`*Y?LvK* z((Q|Sq0ks@dqj9edG-$)TUqwl^D<66^1u;mDioc@6q_4RL~}Vknf6}-#{Ph@mt~5` z4lWDq51Iq^>ahWHG`oH7f(g`vK$K*!wj-6qijy%JwYn zruv0tUWF)pz*zXwfWZby%LNiwT(zjGsp6cfIi)yN6J{wb{A1y8oqJEqx{UV6rZ>4O zy+^b~(-BX(krv9P&jRJhixwLNEOMw@h{e*}aE0Id@45N@_=qETNA@-W4Qjkci*RHI z2~wkW(+-@mO}kW@mKB?xzde_dXTIq@kdmjx47N=jc=`=QI4u;!1%~$-t<|(%fY3u0m=%t z-4vnH{_#uOH|=1HGwD|MG*kXJH=KSUB}bA))>J$awn!OZ*7F1#P8H4YH#Ye@uWzOH zA0nSm(M{&+FwJ(>2ow%Cn+Q-(?j@Nc3i%A6JT0oD=^^ZAHCE<6e%2b9mr~CGVlU4= zuv>zO)?R&A>gF+e^*%jqMs-$ZOi%MIaJXSN_mx;Wd0me`l@#?Ox_*0x9{LAZ$$MX; z-ZHK4cb`O`U7c#|`-y7NHv}K&CmuNGbJ0Kp?8{tm$^|JbtgU%QHDzC%{3qTioVMG0 ziqaXQ{F^>ft7DZivQ3Xq*kbyo%xc+MCF(Sv@s>0ISB%1 ztBgJ&)(1&<_G63zG+DS*55@Br$~YQfPJHRRN_J)z-zJD&6wR!`sGV1SZmS)ZGnCp% zB(u;vwbCFVNAH|u>mBN7>zz@;POe{uNYj5(KBLmgXOvPt2`w&%T1EM=Ii0BKZ;7ku z*uSIcpJXTf^VR=E|EO}6{zDuPjqz(Wp2bxE1T7nl7PeM>SbS)22_$!!%)R zn_{>_H;u~BOqP#74$Y~3xhJ6 z#W|JBgDjr2uWU_5QRO639k83I7QKXITqSW%zYL)qlBeU+$H%nmFQr&w#*RO{Mf751 zrAN8MAC)x*jV-~%mswRD0btue+Oep#iL>{x;7!N<_niuS7-%xe8O7Hr)=T^D5GL;dpJh3}V zn28r%sb}Mxx;F;!pmbfPRUAcuq5AA~H%i#z}qRRb->}&+Q>*haL)+k(`gs3u) z(b=8LE-DqaYqN$3=X=Dd?QD!OUaw3-?Cdk!70(k+n)Nugk0Un?=ZHjn{-KhH^!W(o z(;5ei&Bp7=!f!>oil=fwmW^sPX<^Yic~T?ba?h23Yq_Tf@gQC?fO>1x$TA?odrTuT2uXhhs--#W$9UD7G9D~US?CmA8 z@Q!?HiyjsYM1+{OcoDjpr7!FW0T*Ypvhl31cX64=Gi4$bPjFRfUF_BUZDQqSCB0 z>h5h!*IBv0*4>nIqN_^A@(_|bwNUIsI)kGdE${f_H>NCm_4|7Esr16mo9td#_)9?& z74RkbkuTm7Xd*4?epSKI`^`kPXuhXXTL_~fei=op4x)>F;= zyJXPm-t{xSW@H*`q}p|tWhau|n}+AOnudE^b={0LO~bpn63N1*;m3#V~&fdDqM=DO=m}2U{A|B;S_C9x=QW`X(=aNWLcdT(3TBeSjj4R zAOmx^CDz<-Mw$iwX*Si8Bi!LRG7gq>YNwNw^s9C<^B1O?=^NEdL+e6!=b%0B_Ruc5 z66od{S{JxGTiQ?Bq!(@S4@Tea@$~hsm(Wu3e#pzx3f8xTXp*>UpQM0QNW`h3R#eUz z+X!7C3hfj^o$Q;=Mz-ye%egAF#x=?-FCW2Ss3=ojUEM_-%aIUysvsAOo@+kw(5%GAxp`YehvCR*PWd0v62rD&V zeX0(9dD_dwpeqz z%xB#sz4PButbn2@0%O&GPw=~R3n=9VcPU9177LSKElqL93M>HOP6@aYbz!VOj196L zlZlKj18Iot!z&hlnBpHDiZWnX#1Nug2r_borgm2_UE3cfH5yWM$`8>{1Y#$oyW*)$ z|Cy^i#TC35tGaNbs&~9zi;TA6Z?JR|I&V+(wPGGyT|`a`~5U}?*GJoD?|T%``xTX zzGuI4vE7A<9o;*b?^TrFVZJB-2lG9)lllJD51Q{4sP8W3J3#?y^DRbE{Ps@v+gu_t z7cy_aes9gR-`mB0V@YzqZ@_nma?5)|Jdjw0*znwHME|w7g}e_Z?&$Wr_IZ)!wAj#f z6MoQsi>D#(#s9*7zx$j+x{LjOH4X1T_UIx#gv~8YD1%BIw>>Ly`3mOBIu6@(l@g8Y#;B;P2Q|1cQNJHfSbms zw9D>n%6n&GobJ%bH03Q~$~&(&Gyg^(AHyLjmt2yQ%{}{q+)_dTZpd+HCU4fy>??Ao z$@zV`AXijdRlWA|c>WbZ=Yrg9=410`hV0cBcK&lK<5!TiE$>b?msoT@h8uF}3v$eg za#Q!)IO|O6ifa%@)*6mn-aGw%)|G$5*=kR|&qlqh^T;_IwKOjCMe8OEfwS(a^3NuJ zOMMDYp$q|K@{%s~`*XT}Z)DbQf?dBek5)fzaTIh6@SOQSRL9q)f}G|(uwB)$S+8DW zbYrox=31w!K9+Ou2gZl^gwq2dULki$y7@x zsrAPCQS5r@S@y1Qe5iB>YYl7E`dATLfMPE2?o|*l= zzO%QB&4e$LBmW}z;Xcw)G#Pg;qkn}R?<)Jw<$*tc@6KgTlkLBy?{8j}bhC5Mu9<9U z>?gzbY4*>g`S|x~KEIj;XF0{ieNfpj8FN*#C##PR&HwsAn*WCTG@qA$pXT+@%-o+# zU61LW+(?RYbL42^t{PbZ{{op+M-%P4r&{z*0LH*ZNnCbp+%E?cPjvQ+*gycrMPiO6 zwhp=T%P3<`PV3cjLp#<;K&wZhx2ikty@+xfC2~;RjnUn9c>XZ0ezrP|nE0q$<9&*Z?g4}v!V`%70hp>MwO$@7VJWSw;3O%d+OFsLwfPc-a$9pRNAC zaL(`v86=I?bA0S`hW+8iK4*BQgw#319)!Bck6QH3tsTMx#JoQnS>>*s(~}n!zt!Wv zawng8TyYrgBiG)ff0l)cU3K||a@#=nZoBhKu_)Kwuu8Rb+50VTHN3`vO}@Z>xTB{( z&yBSEY6=z{{B^aYe$HI19SmCV%@P zk;YFswUW&FDM7R1@TF`raW(t}N#VUOqV+$8Zt@8L-Vee7wV|BcY$w0%VBc*=8wI;u zu*KBQA?(= zWU`-KVE$cUq~SvZE}J&V2OmrM9nO7i`(?{-%ka>5cm0gwBSsjQEYcKbl1&C5+Yte@RnVu1Fz~Rwz zITJOzyy74e#}<-Kc!es2gi#>P7WAno5g>EiX2Fp(;O{*4F1qr zTr*uiw?}!;CPhMayJTPW4hremkMQ)Bic#FfX7P=XsMH$v1k8ICi2%objrXKs&58?z z$G(b*(KT647MdsK}E;qc5QmE2V?NGe)y$g)@Yz;Zxr1?3W{W)<7>GKp|AT52CJ zYD&H_L|W_xpaHYr7jWioWOF~UgX7MgF9X5{_X~%RJ!JM9V&~QQn8h;9u~%_y=?=`-Kd<9eTFs3CM=>`iuAl4{YYpeeyJBhgHVMq3oV@q*e94 zP%8W)dCY;$0OW;OO&Imgf#>MO(h|iVN=s~@lQR;reHd(;y z=?M`nruOALWl})2v{A_OCnN7EWEy^kffRq1aI+^DB&zOuKHJ(#gDo+OcLQN4TsYKW zr`huW`0}S$^KdeP-M1KQ`IT?%>a?DM`2HP zv+pAh!aNOR^33M5LPS&+FUM2%U;UD;Vm(BXht{LBZ&GD=#tGHxO_KxV=Z?~1qnX_s zJ#V21D<}&e5l=l~cX`hz`DpReRPyg7`9y-Ir#C?wq0UgTYzmc)p7El{mq_jSJqa*S zG5wAAI5jF047^8C>xi{z<3g#MXk*^5ry_(3P0!x|65@DjwDd6{V<5+WDHD30%b}-N zKcL7fJ*B%x^|$h*{DPU178yFoO?xb=Q{@-`k$MNQC+tqHWIMCar`_Kqd+zr)`f{7N z`6&wP;Bnf*r3C!O8ZNbQ|2LU6G(I>60hb)Q$;n~D_O&)YCkr_(40xMnSl)w}-|A++ zIUs5bxQq9Lyoq@y>yJd5vjpTl2you9^3;Nv^NNwP0=~ESR6F~Zx6j9)?>UHOH+t@a zIiu$*{M+o=$iMQ3;t!0djf9MYk|)DR?%&PXdS58nxM7JQlRHX)QlnKI7skzj z_go?$^hUF%g?#dtF;GLOX6vjrB)NRxbTHWvqUN?K+bi9Se30LgR^89X zEMBKj22K_fvtltZcVneFH$QFS@}ZgB!Ub8!dfBNI~-PWGA$-&OtEIz zwQ~V|ujnM}_pRZ4MRyUcx1Rz|I0iXy|s$x%YabCQjgC1}-a%5(0~7N5=Prs-Ki zLb>O+{L7ju8pApXFk`I5Z5B@i>fNNpZlQ&ZZDsqdu z!KOY`DPaX?8cokb)J;^;FJZ!(jz}^|jw*y<@ti!Tar-88qu`mrh{XmpGwtJpO|xJm z^`<^{BdvoEI_58=B>#lcu^yrZ&7KROFMmeQ!Gx^w`#GE1L6=jj14j$pvq3fsEKrcm zyC9X}D6Hc2i?vwkX-_j4X2Aw2zF1@osT*w<+)oPbV{5w!Qq)h#(WNM>9QZxdls5@% z9VDwg-o*T`tR+;v;qKXfr@jAU|6Dy`W<4x@JMgzcl#Q;~3Yq1=3gOy88XWcRN9+liMP0wuPyy|#41#yjWZ|S`> zizDUJafX$vI$b6cOW-9n&5whzZX%c1TR@9INK&bUOC{L?U@Vp5T~AIhY(rgQB1{{!=sob4+{Ih#5&OsB z+#z^Ts2pLM&2+*Gjo^U|RlSenhSTBz=;pv0U^1haE3x8-VGLDqruehh$Xp^m`qw!u z?6Lk_-sk)Cho)YLS|8cx*Ush?jOP_n_GyI$|Jv)~`!m;M?L3ZC?k5|y zT*7Ccc0AW+-sH#31Xi3cMPtFGnq(qqG!Vc>_Qu1C!N< zE**2sGRP0FUlm|c8WzTWfC8+Jo(YRvW7MXPRkK}s4e=7YF~aG4U==0YRiqR$ucw9%;Akfxl$1HZq)8y z>CfH3`ZRh%%}h=t;5S~EyPV_8Hu|}1!bZ#Rc#j96X3tN4;%8?~CMZ7v>Vy2RRU%gN^gNlC? zzu+ONt=?gM3$eh6_lv=?(Qk{+c}=C!{Tsw`bHkU1DNTSJ1>jAmogkeV%`W(G?~b#hxUAQv*t0^f!7l{_-L za1YfKE_Lq~-m+25!gq?y1;UPUDyTY0oDsxWMwx+ z()+F|XwGr;vG(GCv6GDfS2T#IPB!M8lof3D4Wb_OPjQm2VHJ#BT#Z}%xT|#O7cQ8?b}Zm>oFxf7{C6uGSM2ulwYq2 z4g-6-Pu9kA*!>eL!UQZNVk^5GwQwl+ zIDU;Z%QlC1J)ZDS@sAx0B;wbILpo`{xX$SoQs8&z?zQ94{-@olV8E?3pu zz_X;2FHqWM8XsB9`!KosR2e4x_y9H|2$WvDfF3bNaq(qi{FiQ7(PXdVL%(6Mt|@C; zxb>r`iugO=``dRq{;TqTr8A8qX7TN+S1VowBl%D2(GroYt2*7c5KEWfnw|gZpt0ZC zucxIu@mG+7?1!^HV8nAU1-NXwqqVUHU_yMZHr`$ zRD5QqJ!QuZN~~r+@XH0OW(*;Z3Y|l!TvB;z*{m2!C>dV}PtBgw1gf&D%{|$dH!D68 zgj;QdgoDuXiZfnFcSAH8veN}u{#x$qNM9iN&$ZJhIO*0TF=p!AWQAYS^X>HBsr2%W zbd~?}m|`%Uzn~-iqkiOn(@swimOu4GheQ8QlKzaHz95zU4@RkzK0(s&wbT8nbopJy z%>B}i`-LGTta!h}@LlB?J`Pm>kom9D$0#>|)4H55!YLj_BS9_t94i;RBos8(=_a;B z@59qVx>4MhcGFGyIkp!gIU%B_upK{k{UiVJKgCngHcwxK?t?X(sYN`UsT zp}KDRMv<~dQjCHh3DodtDshgGN`vEE3ouf#+K$b!V}G|}w-fU( zXm#V;@u(9u@^jdV1^4;K@tCYU6U4fu4>?$SHu|A?coB#$|8gJy%FosMR`g+Opk9FN zyn3XYBd<-#SS`25k9Y~O29V5h#{U^F>=JaSG3$j|^YDE6qC$>8lL+mpfJO3+@fhy# z?n0k$i9oamC1)Q8)L%eBWB4GFeJb2MT$e96qvZR8{7|2ReeL>S=v^;C%)KHvqbB7d zFr8~6^7PVu)kuNC17J-JJ~9RjPZ=`BYR1VTW}aS@hyEfg`m4J_XTRuNbnw7jpemE> zo>jB~L-pT(PHz{BPea&!VExIv=FUpFcNQCb9E6-#AnDE9z)H48U`dw6Jhu}iL(NGI z_hB@WU!wKR;-?@;V@KgiF>#Ro3RSlSd1KN~HZ3*?nj_Lyz(43stu&J(lJ#ph#Yr zK@xI`zZdUHHK5|}6r0>XdJ4JgGRgUb(_c9CwdtMEncnqM-<#9)Zjkyq^d=~J$2s(z z_LE07d=Sk6k+)mqjclpDPx1P89v5cggNMN9Cw-u+rRnY>nxdPh=q{xp0`b{Gz}9b` zUxOq4GFZ`C+Cgi!&|0-1Rp(y_trP7!zuH6Ud~*jaSnKQ1vHSNb=+M8aOW-SCXw6E~ zDiB&u|K0(uC8pBJn?-SEsITGlAe?Qa?ShDYQJm0v;|>RQ0F z?hI8-layu-^HJg{us1tmepgC-`EHC$x1sad&7jxJ(0@#m=H9T7t z;CiNlo>vKm%k{`BrE8?3HT}^9Qz;XjCHK`_E6(E|rBoZPxyA2F{-G9c zJ6tZ_tYBAbV?6%_%0-Jz^PB>dZ^4E3cdJZa{LEi+CTmBwF_8&*P^^uGT*zA}RRDEW z%a)G$Io%mP*3a|iT2%csR-~c~4(Wj@vNvEB%qc||{_^K|yeE=d)ik*rS+L#WM+w<> z!yGosx)ED#7OW6as7}PzHV0zgk%wind#P*u3OQ;fH(O=bxaDMLymi_$)}pt888B(F zjWxUE>7F{xPoF>9gb3v+If!q-7K%oJ2R5VlGpCN>-OiwQ;BK~WrBfr(1;x|~$6U!g*CR+|amNKd}=-o2woKW9Z9@tiH zMkJZ5CzA4;P7?73n}@mLKdSj#NHfuJgk&8VsMwA&N>J` zyKrf{ybU>eH3PXw-UZ=hxA|YHA7Sp0AIZSuSnQbmQ--1xc)Fst32L(9w~0d&vW0so zJ&W?XRSnpck)4`)Xyd@P$j)r<205Ln4gV@~@EGlGxk$v*iOs5ow1tmBEz*|N?8||G zOI!Gyif1?b2PhB;B+jXdTmd&VqW#DL1GNq8o=ab$=!{#&|b@N#-!Q2gqw$=dBajzq*4 zzdD-;0s6`ZAVds{CvOek9+ucm&HTq~_f~ngVLd~1vNr!1-jrn(gqIzTY`8NQ_{x@@ zla~bKx&96Ep6O;|z!D1fzCM?A69l@=`<79(d@fJROA0%X$0Gr>=23rAV_;@J@*+*-GVEvH{-gIiD=@*X-Fv zNJjK;7(SK*CHRFCJa8mU@{7LfR|pq4Y;2(O03GVzgmALkr?6aHOFNkZj}>WW1@~HL zvi}Yh8ubM}Wg8b9lybDn4GWG8fsQe16a(oV!7xVo2u`zuy0-W*$z(eZT8x44Ftd26 zO6yT-kJ>IH6&Yb${4r1n$!M-r*s?L+F@8Nugfj-zRo}F?XY4$l^pMN7pyG0J2vgdk z0VF5?g^zEYO~}!gtS5lL&_7OL1#j@L7RzP@*V@Mlk_`EUj6_)g6g_P{q1JZ6 zukcIDKQl`Si_dz2EjW8#8w4&}SH9$862*(~Sx>2&1f-mbzP-p7CdnG0^3+llf&W9` z*9-iWPVkom9uWA89qj@B1c9F`@PBv0SM-YnUcy3E%HEh28%_oPyE}pZz7zaCfqx=! z*>!dBlc(D=iXxgrBp|DOeR4XRB-W>_PN{kpe?&gkVt-3@u|1FTF$?|xPb?r$mL@PO zrtxVneo9h`XYwy%=^TA2c!JE1yTF?@{;o$~mLUm|Hr8LCCBVbx-#hxk(xzLMUzKYh z4uRjhcb4UCQ%7IS0SnltjmpuNmCn%@K;A6^oGV9P%$%37rLP#9t!=71eJS7(Qd>%JRbM|+rZv5nZvMRY@ z{!$FQCBI)-Poul6e^P;Zu`AY-5)yM{Jt`qFRMrC$5))+IBOx(PRxKfUjRpEn7bq*c zay~yVqK-YFDi58^<|4A?c$rCDvE)yw97#J!YPdmsvmUARWDk-Wgq>s-A!DEQ4;jko z>p$xE>Yd+TTJZTOIK$M+%E^ig@=XnG+uCH%A}yop7Qo{W85jKa+u|GO11P?-p;dnb=I++3iFo(% zSW*npZod?-&m5#Jeibx%!?PEKa>F3BCFtg6&d+kH;^Wwtu|d@o$otmc zI~nwDw_)#P!nO%4R30j=bD*+i^%&??-mfGn=>0&ue^uTG3UYv8mG=WMS8>DKAKj`& zA3*%8ym%q^H-^e@Ra910=92I$5)h=iO5YS!MqZZ*Kx0RdqgoXUGH+ z4c<_r#u{`e@zt6|NHs8pO=qj?mhSH=Q+=L&a-YG z9UJjDAjB2ru8y?BW3<`X9*iM)sLLKCf4%ZNJ9~iqCAfqn<;sg(ajFj^J5 z{Ufgqv8h|Pdv)tNuWrxs8g|4Ru%>%Ss>%=8*JTE*@8VN|U)#(y?C|-S zD#FiphuL-t4{}>rxqq3gsDXDt1onE-aTs)lHfd#`XeIuYWko}tHt0(@3WKz!1$|ai zt$HYSFQG_oMW(Rg15RW zh_oPN(;{m)qhK*h$a=a<7%17!D!!eDN3z-8fe0u);+xDnNdD#ylm+y9<*!=Ix@>ty zBhy{P`&Nm}@iCp-B3q1UVkMcWkf$r;=?r^1aJE-UawidpN^+lH!_qt{O<`^B>`)+H`&%Acqd?u={BrlsU~3SUQ(o1gH+wR+nbPh z)il;1dy9A`M!~6xv0N3Zg#{aD=X=Ik`GauX;2F#F7<*aAyz-MSs^HtaFF(1a0`cU=nD} zFUWwJXSwAvG2z#*ZZTGI_A2K?;??(wwniNrWwQSgxSxDQ7j6It=A&T2UhJ?ZdctkJ-+ ztQX?%fwFd^WzASF(mbiv+Mc+Q)soS)(*Na&%c)%*oWN~j44-IL*~QUI@rqB!X7Hov zkjC|MtDzr*uTVz*)miJrA$)K{A{c264bSev!(8+-9ZGJge1?jw()q&i-j&RO&Xq3^ zF}UkJP&GVci$l7qWLSG`6*7uo{XvN|YkdwbmeV3?!Ys?59 z^xsX_r_jtS3|xM(5(bVJ1$mzs#E9ih35*;E~%Qv{r%QuM6AWe_N~D z_6!U|q?gTX32Lvkn)L_pm43jp)_g2YAq5R_fB){a41c^`x<-DR zC>n(y(&oYI=Ue+Yo`Vx}GFa|DZY`f%KzE!kZntsO`jnqV|~g=hiw; zYf)D)R_P%g$Xhy|v+LW78&8d1oI5c3hVEa5L%)F@OuR=AsJSc{Ic`SQnVzFKq}E=# z8iyYPMCk-*6WU9{VH%6aovK6=je^xXRJ`b;yE+Gs6n%*oJc%Dk=iK#^D@wC$!;_y4Jz4V!3wS^*W5H*WHYxsDM zeu5P18r=ezJ8%QHt?nWX4=MfrwV6nD$@=M$Q->cMI8A5)0g;-+19bz(6c za_Ijda!OijG3No^@Orz^fwy2*Zl~>$BtQ>VT)@Ap_J$y4Wgy02Y|7xYkmp_h*K1oj z1eIS$1EQLjK&&F&y`nVDSIN+IJ^P@We;>$AGWp_MY{oi-5MB*{9V-?fun)F&<_opPDl;|?%_BmDjD@R@XW1@@ z;LNrvqyEI%_g?E<&R6N{;u3QMm80x|O5tm^chF32dz+{p!5I{4wr$S4gsQ5#7!wfS zq0=0e+ttyMx>uWaHYwQ-TeiLKfI^`L(9L=&d)!U#Vud2_ULWc)#U%`^$hT0+XA}6H zOZB?@e4(P1Uj?xM`CIWwG}`VgEOwqE`SP5awPvDndQQZb=)3hSeXKM z{?DTa##vRr=O&cGk^1-bAE1uXXFtP#t>4Y^17MLY_8CLhKRH_pn$ zJ8ve;ndk$eOJ-JQP%@+LtM45sR!J@1WpOU*dCsXSfva{Pm?mFs( zUf-W=XL@?)r}0QtxhUdzSINcb(zZEgJM%31G4OLF>7K*Z!B;={i7VV+3MrJ9xR^y# z?H$slW~_zH^6KvX8N4b(B}?-k^r7m{fVq&vnb*fYeA%rj=ECoJf&=k=$uvqb4Wm`X z28sWwC(}I1BW%$JP98;Re@lgmeQ^*gMM`jl{FH%8=O8WqK5 z)(q43Dg$TX6;2hoL&mPNV4HEN&0*K)BR#u!B&(}6Ud`Pdk?8NK8r*d8E98pLm_c8Z zO#W3~wT2?{h#amlKo3M7cYt}b_NI!l8wj0NzYqHBh*`AROs}Y?7;f9+e~wTQs;klq z^ttK9kN9HHi%irKpBGMYjH(1l;?cI+#BALb75tCgOF)Y-mj@sv`y^f!2-Z*&@^ zC7kVd4FHU-qc!C!Bn>gskb)7amQ%hLp0t-rIPcHkoEHWPn8!KpgX*~VcUA8~?3iBr zZ7%!ygx9@lOw0&m`a5ezzINazdfHNC>p-Ey4_o2TGdtt=|2M;VDUb$1lh9w|a>$zO zTvo{MYcjO>O?)@FDB=dSs=(*2v-Y}Z>qzLF%7#-_7gA{h1(*?lS`_38D5Ptzf19tw zMWa@ECT%LW2u$W|vp4&hVg*%e2#S5pNQzLpT<``1T(n#G=v= zzWWPtTMwbD*8Nd(JDvQDky+>_%%dFpp=VsbrDSScvYboo2Y#7c{0*_ezBIwc;?Xj}JAtHpm=xuD%&73fZ^*AH zQKNEZ**fOzFPUd`U)UKxpD_}EKy9#i?*^0Uj(_oeL<|z_Ce{AYt(|y{9a(a!@+FVD zZn_EJF-dux+n-w4M3{;0`PN$bvL`VcJ^^_8S6QIT45@c1SLV3Q)3Ot6k$4HO@Q=fh zWBLuD$U*)3fTco2yW#m1mPUS+5u^gqnQ@SDn8oX(pE5#f-%OnjG9JmRV_Yr-9fSlh zD~$fP?;9Q}+Kqj}e;`XfiVvrbegxoGlifYE-{D)Fjo-9@dBZF|)h7qjJ2?KyOgguk zj3AmNJVQZnjad?~HW>c3RWrD|{G8iwSunCXImF$cA(RCoE6HW+{*Es1PZ@1mbgu!w zul_yf=9s<1q2$dhLcB|yfPjBv-7}|?M5*<&+6dgGC{OQ-6y+((2wC22GmA?`@->#| z=pg#}-_uy4|2dgjoh8Qv2%!IjQtuQJDu@#n2tQ6>lq54=q>LH)O~C;=s8l88;4GAQ zWurovskF+h;0PlwpK+h=EZ&8(^J3+SEsLA~+0yRUWq#C2dKa(QHgJxa(EHCwNgMhK zt+*RG1vp4hD*3mh#wKSfvLrdAMX?9kVGpd(8kF4EK7$ffargozTmlmofoG-Fp>!xT za|`uKhm}Gx=44{a@)YkF)rp;=8=$C|qZreflpxsB{=sQDer8L__QWjkOV561HGVXZS$X?rRzpoT4^$mxDV@R4J;k)UVn&>&$dV2v1nu_#S%f_6bs8?s)vwJr*KCwdLN)WF`vD zqno)f;5Do?(@Y=yV1{Uk^o~E0J5aZCTUbhz$&hcdf6Qf-PIq#SjQnp)z$8D;|00ycZ_D5UN$fV=h{OrNv+Om%f?L%W&s`i zYo-HS);7Wo8AW>)HNh~%wtx*ImWqb>@}3-j?tS5b?Vt*||4tRN2D9!VVlRrh&SdVE z4|hBD>Gs!k|IOa2VJLGMc(DAIgy{Q-prQi_C3eKL%fFD_9?U8~AdP`0V6(P+*(T8y z2|oa*LvkjHdBDTe2JpS=wSuM8o>117sU4xzs?@f8o^jcE?)*E7`F(cF{KG?U7ts3Z zJ=3$NUd>ALqI2PyXGYk~*?IHdRVGuw;L*MCXl4y{k)C1@teMKVYnhk9 z#Sa{&-}M!R>BGR01D*Sjx*ymT7n2rmxsmVKAIW$A35x7MJgGJP9AX{BrX-4i*bn4> z3x0zOC?>l(P)+q;WC>1N%$l@l%}-Gng2DP!J;qB zqR$oGpxYw~f?cg3&r{)|xEWbt*trWu(B7RSRAwbQA1p-N8}hem4O?i*Mjn%$4nxu? z%WbNDS16a!)(9=^|1|n{rRTSimUO%Z1*~1tRaZuNhnJf|wRbTc)tVrE;LZ-3|Ah!8 z4cog=YyO_dRN^9&G$YVF=8fdxw%jyQTJWzlv{0Ljh@ivV zkdohU;4EO@QP2(i8D-u_w1@7b$67;@ztYigEL6~qW6pcF5iTf%Q^BHbX3=rcqi;Jt zz=V@X?GsnSj#IL!qK-yFuW!+s{vvCE5X$uLGDW(mEm|UYYl&^u1#t!YUBKZrGs=vYkF2e#&rlt*M%_|V_YHs zItJNpWNy$JMC+{n7{mLVY#>uTsn55FQal=a{@UTX$Zu|9bRvYj$t%JtjWh&} zB6z$mlVBwXhP0+#(k1VCh+o%;wtTRSv)Rg1HER%#0@>gw~c?p$(2-_`A}iGa((aqW0-a{Wx? zS-`Ijl67TRv%CqNlD+2*-j9&l+Bo7A>3S<-uGu;$~zVLY^Bl*=wqAXe*q@42tN;AWU$lZHrY%`z(CwnJmXY5wonXELBxR7^ib&C_dulN3kD@v_N zm@mEf{Kg)9{+ZzOTtO%fK7R-j^*JuLr_Zxp`(luyW_8!VDn%R zA(bjoscjQnuG?1xV`I9BdYvSUoB?KX@HmDWT7!6_uu+QedPLs@K?7T-bWqTrj3SOl z)BJvg!jUCgn**^Mdr|nqg2EqCDEue1;oxsu)0#_ru(zEH*f^Nmzs@e!nwte_BL)0G zeh+FP?v0Z`*{wlPHZjT3Nx7-pzg2r^27SWa4S!{m1!H$Bb&+?&;yLdS@}yAFHbxk9 z5jA{av_n>hBU?q&AykAk0bIRZYx)~g^(9=rJ%y`pqP`}k>I0| zp(OZ6Qg|EreY>NDafw3Sy=eQA6xznl@4Y}Dw7ng)9RO_?2W-UgX9gtrC_iBB3j?5S z2W9h%7``f-6!7%~@bv`nbz89LSg@!~Ve4aH>*HYSRx|*x`~_jR=|yM&Nlb?$Hj3Fp)=?@_hC_$3RsA$>)A#|(Hgaf@$A_b zU5C663%Y(NF^fC`tq|7$tH7+*m`z$@EPq@)ZrJp_6)fF}y2I3NYobEZi9{5DmHlDo zfCPpn%TxDF!Ou$f;OEpKAM1wt*TKiLbAo&kyli@t+j{q}z$@A>3OidC{db&2z-kTz?Z0x0}&7uUiElM4jVhFJvEA;Jex8PMgK9-S?}f@iI^#2}tQ zvw{KpquI@g4NMpKC^45TmdC0`iiHI`Gh5U78AwWz0TWi zhR2)fyeU*sU-5P4t-<;B@lnc&oAQcw^;FE$WAda-RG;K2z8A9qsPsBX<)5O`d*Oro z@Gm9TawpgQZm#6ZE_|lGKYiNw*lFJz`hQOd&8+adTmOvHzKf1S-|xn0-^FV~-|q#d zeU}iN@?GR-@V6Wh6c-FJiH;~Iwi0udc&m9K`#v9|NM~drdm`8K8%V14ar3?Rd#1RF z93hkLx|{?5_=M4tC;E6fY-8bqXBVLJ+Hr(gdQ*C#cqz+yMHYnphGgLyiB>qpxK#SE zsGvsixB7h&D}F^z(;A3T)b`pTEoOvxmX`Nrxf}aC>JES#V5bbm)+H1%7IcTxjkaU{ zH#A3$ICAjlI%=3o4IUhmdX*7TIF^6VjO9Nr2P)L9=~-b~`30m5Q1cZDq)oEC-wj4k zh!|~UpKX!=$0lfdmsb@|h?Oo16Y*I@&jLZhzs{X+=RRt2gArDbf90HgLC;E28In6~ zs4TZ2`Ya&R*FP;i>io~Q_WrqqI6)-QN4~~2^1F)5VJlVpCWc@}W;4&Di4TR~w_nWK{ z0qW#itbCsg)3k0cj^~VbS8q(F*04cR?J=WFfBc@|0GhHj1ru{t$CiR)PB$x{{i|&QcrSu zFMVu3m=_->=@D%36}oWbHTDCU@ymMBOVxHT5P>`)b9Mu4jN~t5y`A^5yemc87U%sc z-kl21r(oat6WhG#%^dO9;c!vFC(^ESEhsBpBpS8S)0#Zkv>K;B4$iS-=Wybw?5^(W zPxYL9^g4)R%_P zg@AuVLrSlp&In)>b|bsx;y~Gmg6fOpDvXK|+DeRHUIJ)Dc2{S~4%!m^1j%B5!M@5T zigWF@9lB!N2p0pHlKzTj29$P!HGsI6*?$&YSt@*|P3f z<9740FepN6`V0)_z+t3~RcO#+8%PO7I>%VqiyS;d1Xn>BR_UY6G90{pRy$0CA|#&Z zCNA{9QMbJQBu)OAatbow(NCfsYy}FXFOxd!j}6uqZsxNY8&4F>HNjX|m=&!i6xfnB zJrl}b%*XLgGgI5&D&A>CN1!$3qDC~=#5@8fyC`9t!9^GUFYWhz1Pxj>9wiK2>e<$pN2@&rf9Mz!+wT5gj zIvx@PCz3s1c6=ThQS*RAaQV$@-og>@d~~Z8p%-42F}mKn0Ku)`*S7mUP;(!p{tjpWA&ldd?&k_o0)Ehnc1Jkb?SYA45be}^Plu1A_-sG zvblGo`cTMxIjRp&8q@`drNtY0LOi(A3(?SKcA-v1tWj2!R*#p?6Rch(!q# z>Rl;4WR8yjONM{9)^LhJ1&Aa(t}Oe1wZ?Pl!%V_?S5LCN9|i5~E_4%WC*aSfN>@}3 z5(#UUu+51yISsLb&_?R4msp!Q@$Za=YL-3V9`EuMlwK&D^kQYk7mOS<(TABdDF%!Q zGzk8Vl+SbE`2ea-uQ845ILj0^9CcuL@_RCUD8i6vjZ#NM^-T~_HK&qK1*~_eW8)sTX{B1Yd{#+o zpS>tuP`&A!X6}nCG^s>-%Wdv=^q%~$>wDz4_y;y9wKWv2sjLG<9bsElDyO1@N94YRzdT0m&_T@ zOJ<&Pv_;ngx1yl*2Y%(0*UPdCqL%jZIo0p_M1S*Zx=T|HeUL&St1FDZEGY^PE)+@N z=hr$OwqQpdB}n_s`6o_Qr!+Ccc0m`ySFLFe0M&!+bKHF~4a0Hv1sFe6P-svgKEbek zj^A1?D3B-77-rw{Rdz_RVEj=E*_X6(ut9(RwrY|?A7ZMf_C*{Ne~;`7!Ex0EqI8KO zS;3-U#9NTU_rX5+zO(^+e^2x(xAdHSx<9Tp$ra3uMLprj9WQo6k^V7yjzl!DK2wbA z-t`jvzuT9VxS17}eqbwsW?C;k78hgJu;q|H4ld^Gl+otJkCX`%i7K)}c;Dnh&{|z} z)l%ow%@`zT}AMSDwpv3zEbP6*6wn?2DZ*Y)={2QWwmkpJ} zVX>M77CrjA#06A{evZ{8`tIoeaz3zH0%%hWdmQKL#ZBZ@3X`gvz*CHba3n7Fh?Qag z2ZF%g*BbW$B`yL7l0e`$kS#t;2BpSxBd>zMD`oXEwFa@5dc_&q;7jPbQp#;2(X<13 z0NHt@i8{db0ILM4A9=3ohk{bfb6xanI`=7ct!G^kgf0%+rENCSeVWM&#|r)?X-NAe zIUF1DH|?QoXhduF@K*sPp7UxA!OxX0el`UTLFa;eh4PSbJ8&4^gIHZbpDdI^We6OO zQUn~7^E5?oa^5ru3r~p-_;a6qSAtysEn%Y7s!~O_GwoQyp zyCrR=?k|hJBcDsw`#Wap*4cI2;Y~(!MDr4{PwlPNiA0vblT~qOhn###QB{MkajPtm z_Nnm^B+fJa)#0@0hyFt~d%$>86@Ki4@c^5@Qib}&eDvWUc2N7n?x%i;lOolmC!dEf zlg*hKA3VyLl*~kT58(OV7SPQ24u_{&Zxn5-&Jg5KnHc2Yy>Wa}AOsyGcu&f@=Tr~9 zqJU9pBh7^(L7+KX0P+jY201Qg!AgU)9V+iqH9#^hFC6(S?Eg?Io~m$BijpZ-$dFu= za7dcMdkqD+(*_9OmR}_c?&E&_1l7fV#F!koeNwfC+g({`pVnZIeVGHd75BU&a0`k| zD!5gZW7!do3<=rA&=?^*-?^gMx$_lWF@nN60tF#{Y)aM^NRUNQC(oy3@mM@I~uTx!kov!evK%)jO60-{8$XP*pNr}oLW-UXxuzGR;a5kQ!lc$7@UR5(vMUN$sOatKswjkU5}8r61j z)=T!wx}bGbQ20rO!qI;hubeD4bbJrP`A(mG9~B=VSgZykQxvrU=-&fBV%4cf}r>W-*>-HRN;S8Rw+jCzTNF)A@RkQGE3w2Vo zE`XIopXfa3XO4uXz?QD`MddjO?2CZ5Ee-at_+p-^)r~!X^2?n4p5uo9ttuaiCf0~0 z;w^e(?b*ub*LwdNQfhILw8|P`1Bs5RAm{f&6>w9@k>nZZuW%poZ@TAFyZi;T$q_(vt1OJh$J#Jk_$E%u0@kQ7 z>_IW6@NXJzmCu{A-qG`2SN9me*4L7{46e~2-ka{U{$zECWL`5!MPznsdVAS`;PuAoZpt#m_B4@iOwa_R)0O790qCwnx7 zAIzatucq(^+kv(N(s@NNe#ooV@aDPFO2!{~=`C2&zu-es@a3L@F;(zsr{Ls%1wYdI zwRnXTtnDdSstP`GwrcUH;Q5}eKHk6JHa^A!Jq5S(sx{o93Xc3fwLqoZrW#HPw*+3> zZ=Le++J=5x8qMk{d#!5pQhKZZQ;`*hHS~hFY1`b_p7D|2vKQ*k`$>mDC!vvp~Q0Lu%1Wj^M1hoWi29akCH@P-zdVPsy)wyIKf8 zj}tmz<<6@uBStGnj4R@S^W#1a_Q!5;ZTdL2fV%5D61aSUA>p$bt?#} z8O7z`sR3Hkw!yMK49QMIPgfvMYgz$l2V-NsVn>q~wmy^5%_UE+C=V}W#^~j}oHc@9 z@!l|s&|R33EJ_REUWIn>~D)QP3&HD!QP_GPbm|l zO#%koKpD;pSpC%-g&w^tWOdXtNzm{Jz&j_f!5<rzM{t=~Li`Z3c{9@iqWi->x`7;Wpiv}%t`sIw{>jdH^Gi)O^-7~Y| zR5i58#qW_?3#FT}Z41keu{zw?ik0Z>Be#fm6Y>L?#&~RoWv@sMLxpcyj>@jJ{CZ+~lFRV&ND>-EW{vX9ngKiVaAdZ55?a-yIb5^4l3DG=AeD2y6B{XDMn}kHpi$AUS zHe#47bPBy$qPj8i4*9uK7J(2k5HT5_Z(>5`zwhWTD{3_(Q)Q)pvN%2>2aAUvc`g>U zOwj?6mszUcc6xCBr&1k~Bbgmep<`A%pShprmy19I#zkyOMVgro?WNCuPZ~;I)XUF_ z$ZgTt7NLI-3XFYGgW6{{N`wbz2K=RWN8b^@SLD$FNGtnAXY1?;I;z@S8%|A%6{NdE zs6Tc}Ysh5rWcuKS_+*}uBEL649!7;caB(DlgS8bUrlT9gfR^htpHudyxIju*IzUiI zQ2W-D*U~J}J==o+O%M9AI3pExD?lJmo*(B~hFwVC>eF!-rZqIsIt(C;SG9)e(i62$ z$TP~FsZcu11s&yEt2z(i=_OR<_8xWIx;x1UG2>XESX&$u<9C&barPRup>Qo>+Qnw$ zo6*ta%{8+Q%1G}L@xF+BkdHReA?4DzZeGL>pE6P28Vrv00O zRtA9)*g7$0rX{INESlZsva&l=Gt`^gTW|7z1s_d!hXjn}vUeMv$#lls2Y)qRhZ2xb z_Y4Y1H0K{u7$C+1_h`}oKdaBLlzA5QdDMaAaPD&xk`Yd46zZIgq*>D%(-MmrSuird zO;t%hBFRYM0mC|H$r=}*{8SDk7oRlAvx84I6uNYSuGnugt-(K}1RLhZ_~2}l|-zHms4YPo*E zMNs=nMg=O*X4Xcp6O@0p%pWUX?L;omi9v56y?VtD7mzLL?BFRxpBhIu_Me`iK7`R3(S~F81=*_b_n7&bft~>mo zXE`!Dw|dUEg@SX#v1x-@v$JjPNW=!M!CQ+l*lVLTXhjj~bIAIQ*s?$EJc^l1(I;DUqsTRAoWf?x8J2r&`NOP+O5 zeC_0gB5&XW3)X}>Z*>A&yvi9;Df?u)fE4 zVmLMlpxbAm>wji|zer@%h0G9C0B_Ac%jt5bm*6fk_UqJp2!!1}i@@Dd-KJ>DGb?qNi`vE)05PeAgTP;l|Tcn>(o!0mS`K?`M)@lkt zP|Eqb{VjkXvcW2E>A}f~)qpuyexs<}9Y5%x5di-Lh&6!W)Ru^!@2->PxVkmFpb# zcE)fy?IIfhr#^r?gqkKqM6POQe1i!_#P7g;!N{3p@Q?vIMtvw>oVbb) zA#|AJ7NM>bW@NvDSWc;V)&Of zr#e~_9mn0=J=t>H?<%J3aGcz_bV}pYqdhc>?On`wplHxt?vSSqt)j94S|rgFuUArAxF}J>R)keA~q&+D?f&)e2#fL-boDI4)~ zP>gQpFUB>29Q!pvE^yz*5npbLe_M1WdtUjF(Ix5?@|9gwy&H2?>tLC~Akbpp6nwujfqtqi?txXz40z!#h`+>}EQ@ZfmjwBNVJ8YbCz&&r$@JFrACVHwC|=lG6=8@TWCg2}H6-?RyYmhxaw+2|aI^K}{i|R`4AA+$FkEmUNQVE_W!)dgb{F$tryBaiH z`K6Pcg>lyet?PykR^ER&dTuaM#%aBKCC8e}Q8BFC*JJk(LQZQ~!YS|HQ9H$mUC(8+ zQ~>}8;BVyCvHB5lmWTT_kv_48{<#@BPevOO@67p2q6d-%ihgETj75f|#)A_y$7su~ zPaQr~;p5OzM-`mXDOY!EjqN~~wbNQ%)LFC*Qlxo-ytiAOaz5cBSq`Vt&*ac$($F2h z#%w$q{h^t4(zGrQMve;i(*+K8%I+?(m=~$+R?d6FIwmlmtFA&4g$ek_r6{N-amFXG zE>;R7bmz;wevb|0yuKx`jl6OX+-41d?0z}IeM{Y87S0@uB z`z1E5j612^)TusG_8JyHE?A{NK(=^(i$a$K+6=~~UFCHl3k5K1J+vHUbK6dF1agPi zbL~WzItpjy!XMvD>={;C2A30xoIS?&wt(*yY|(@1TC9PEMy2~ISZLm7IO~a9ockPU zY0;kqV^vpWTN{(-n2~RbA(8I)F6FDDGNRdl849^)Gq~t3hQA3~8r9LNOU+0bBy2JK znt#@2OV?yhWEJGTQ0XOq%_RyV95a_l8IkZ{m$;Y{kB+HqP!DC*8>!(gh=)9ghZ=z9 zG?*;!g~`Tiv_?7cv4oJ7>ce-4d0z~AK24!Wo30%an05hLXK}^S=jf&h!%EkgSvVa` zOMFd^LfPZVdNd0kNv%a{*8=1htPt8X_tnH7Io}0XYevWt(XmtnjlzQrFW<2onfUiIytlqcgp_3{^95-;Xvip-8%opbj2zHYa2XLH^Rje{*+Y!GP+hcQx-D4CK)D2C%3k>z%pH#!s3JSEQRiq0* za(~(pvP+>CfQ?Y3{4qQZRc)~=26S+mAWE+E?1~?GmM+UP${T3m>GjJ8#Q%r1*VltJ zNQ?i17k1$YaW>*-hf!CdXfnp!MvCF~JrCESWsF_^cisO*-M7*!e%tOg5Pwvvw?0|s zBX|7O^LpEgSMWtt;P94x-*U-vhGcnEvd9d|K$@>srypY7KK`IK$}X?(rwQlqIfFP9 zavT>p3^~l?to?FmX3F@Bx$Hk5v{odqO3AlV-5M90QR<0b*tc)L{j<{xvkZbkYiOfq zx?TM^ZpTkmf0SO)-j*8PQZnk;oy80+T$z}d)rf?!2 zCSCffddVg#)L&yr>Uej0IuW%3;0tHGf9X!IxW1>c397L!r?C#L=|xq_nOkvU6uWjXRnqswY&v4k_T5B$h11wr*re`Hxzzv;)b^kYq{J80F^ zGAd3@V0_Oxz3s+t}>FE|A=v}ecg<8W-=EYizn;TgXt+`kM3}<4RHAHJz&qo)8n|>=3$O}ip zdLS6pwvD84^%y}LFxdc|iS~#C@{ltzQvN*7=y3niaoYekHxo3S41et2m!tkT4TDZ zZ}8V%MOS_caQf;63|EOF;uD#CN1?t{R?{B5?-eqw6@_|VPo|=tOqyD&ud)}ySg2d+ z*RyJcXb@-(-(n|#zpzy%0!vVc?=W~jGYs1lx60&+RO=&-ipS{^JEjy}~Nmq((fl=yy}DI`o{l=iKv>ffB=A!Z)gq6Rki>qxCRBilR^^1p1M9q<~0x8 zPx%1%BPq(TFh4vL!u9Y(^)6AO6t`_xyh0M{mxI^isiOf0ouWS@eOX2?LsoQ@^i=gl z0^EPSr#mQbLaF0#kp*0q&7#E5`imT&BqoNFruZUKk0@KF=7IW(Rb8%(B`3b>YpLWLr8FzV=+I!Zy;RU-m7&gg{J+uVL5toN4;bkW|*!R8}EyWGZW%8$|r_p6^Af zc+Yn@icDVoYwq`)#C3c(ySxQb9)C}lN^d6f9KR^l(-qj|5rIlF@LTBq`rO|<_t$iP zE8X8w?yq8_!VHGH31zXb@QUybP>=DjVWF3OXC2f*v>Yl|MC zEz>?%v>=cjZ8j}<-h67?UkqLuRjIv1Fqp>abM&-y?`!fSdD`|D%7=a_zAvTZeJO<~ zHa(@ZmriOgt#_+P_x?iF{TMts>D9s?%aRBJBm9IxaO9BXyJrNx#kI!&RvSS`35m*a zS8@D-9Lbu}z12A>)!{6K3Cb$l@7@vx-Ib}5;KP5&(olRw!AnFrt3(jP#uuff~*@y40uiOUhXFDnfc!93dgzmQ9y>Rbtjl z+74!kOz2~6;5B;2vN5s*o1c-+XG}i5nn_aRf&SH8B59BGR5PMaH7!mxMWalyI!{+5UWk2NoT%VL6B(Q4qo~^({B$Q#w&J7*QlS1UsOLM@8Cz4 zX%u?6T+MwnrQR#)l210}WVY`#bV$ld=fh}klc;zrj0CVpO|MEaBhk>sg^L&>t_PoZqCLiB!*pQ=V#$HH|Vdq(f_E|hx3 zh*WEuC#AXVj!LW2 z%%c|j842Sf-hVPSJbvXb)XUD)nyN`uG=dBnZe#8Ogbr;T%`Qr^S@Fi+}!Ci=N3=enA?LQL9MZuz?a-ffxovjy{LNnm_>kEe*p3Y1Xq zy;f+>Mxh7UJqpMKoXpuf_QsY3N<{&t1MO~QGTUbvo>h(# zL&)E5oi%6G=ydO|)u+*x_t#=6YQSxTaSHzvW<;QYDMr@!#SG_7$0o64~3&_nLlW8+S7 zyD`8#OXte`Sf3f%U*q7AfBnq|8*B#`C~e_Wd{M{xALJoczJni#f{+{m%D@k{vz!RU zX#O=&F0N&!maLIiA*z8`$;84{3WL$q8h$NxAr@-kR|x@v79v?l2IY$ps~8KX9{{I> zcNKl@LfQD|&Zpw~XPi%4$!B}sE3$b1s$Rw`2g*?`-IxBjJ)@86a^{v_ z_5+#X8z3T>jAbtfAb&-HGDQLmp8YJR>oGZ9FK09kMfzu!&N*Fw##7(;a%>L7A1rb% zdV4Yp5p-nZ9*HQ|wmUs&eTwTSHE=8;#C?#MK7bh~MMnIct(zOt{tAmA?D?XxRS`f$ z`shp!Lr{WD<6&zZ98YnRON=Euw1#EN-sr2*)2c2@(M4DMQqe_k2|=W+8pZZ8FZx@B zM3QHu_Or6Q>q``UHGLrdCNSBX|M6pLIWvCGObL+?mseH|IIcodj=_!+GHGtedZ=KY zd_(KBhbovyq4=M@Om#0+Fiq0BGE#7K3$IWG)911%ZBLO(8@r_*>~EyWzSUhPMW;E{ zDNqG0M@rh2u*Qql@~ z>iiY2sV-h9T_j?IAnUnZM!^iHNIn-#&Ut}w!dZz^D3Gu-Rlg}%EVV|^&8lX5H2rEI z=ww>K4A~-U`Jy=gJNk0|Wm!2a&;e6A2MxumVV-A!yAc{gRKL^hf=NqPtY*#plMzA#|-M z&a79;;KBCpa6;BTC8?DW*%@cb08#^!VNP{{fcr~RW(H@7YFBhS$qed8bl?DRk*ignV%fSFA2dv|Q)Xc|3c#I~gL6kt0o@Rxu z{Xy$v@t()gQYh=*UtnmQa(Xy|l`mvvhAvMkSxy5{0DqOYohZkav1QPH%$t(wpkCt}1kA%deidT)agU-@uHx>QI><|WVYU_yjC)MjV{9IJ+`4|F_A0BN%VRzhp|J=X%9F>4Pk zXM)fRb+s_%Jd2_4Cd`!?vPgnG=7zY#3Bu9E67!#Q8WPW75zmDtzFj9IqdEVeXl@!Y zZ;mz4^c;8S9YRvo4q~;Y>(&NH&dREbF}Jl=AcoWHKR{l33f}BK*|OoR5#9ACa7t~g zMNt+lF7#{aP@`X~Hkqh48K^!ziix-^%vv@?Xx8&$HMl`#yaOLF6ulwG5jmG`*`$5?vYm~#`};@~GaM_WA-mg`ga z)(yKT2kqRvnP02T+D2?Ql}~Q=>#7Yif-jbWXLNf+fo^@mCf8A_k)0Bb9GPgB9+}u! zs&-5CExZiiEOJt8#4`jgBhnUMh*WoAEbnpH>XhfZgI}OP1(6eP$zdQvi<;Kig1^uQ_r9pbE)gO!Hl@sK zwe`?T?4LGpAcW{)rF;_0MWy?I95umMKKBUeB@kPw2+@^VLk4wd&F>GQCMxDA%Pq6s zk{&Dugo?UMkCJBLMN4=y|mdaoSv-+ zPA;*^<2ML)o|=sfa=|RL&V->i(4_*Q3~@zh5C}FVZl4t?$nJpxWI}SW!4U$GX;=`l zJ_}nP3s(T8h&8%}GMp<(&P(j0c7aD3=FXmBej>v(?DBsIC1<3UpEl6`DKgUjDKgal zDKgen3WH5O^6SvokzLC7F=3!CBJv1s1BCxu9YgET@a#tWD5vhf;$`Pva9Y4REFg#JyHI`p9R^ z%}M%fSf?)GMT$A39(RsdsY~g(`wqV#=!9kC7i5Sbu}=sg&_n1QP=wwNAuQSTg^JFr zKLwdrcN&?eLLLg0m)WK@h#<{6DREocK7qz_oWnXaURz%p?@dMHjWRr~Xq)$^@wl!o zv9cW+??excmko_~jO5d4JQEsE7M)9Ru0mG9#*I-JJj`+m!G^N-nkni{NH;Eo>G1OU z5N}M`{hxoCc)L;&bfCQd?};}D&&oU{j?i)nuQQNJE_|b0vdptmuwO4GPXqv7_H)Y4 zs2^Q-0J`pwqAvRO*gLv^6#@^YOW4U#kO@Ncqp1+fNA2cwip!n=(5nk(D1%HmeG2Fl zJr<7a9arZ43sQK+*3r;CRfOF@0w}B%Jmb)HM%ie&$Kyz#p&dxnxdSx6BHIYPTYOos zXG}T5JQJgQLhg<*(R7HFzhGY-itHTUI6_f9(f2};t%{b*|D}JmZl_y=uxO}#n;FW1 zmiviL!C7!QF?e+MTEOzYgq{l?)u7yT$2e0dsyeiqX_A8bX;d2{=R6bi#5ra zrD|{EL&M$OkZ>nb6`59v)+|Ol$-l9|W++A|OrrR*2BGHWnkn!lsB{ngV4s;-1Np{m z_wQ1KYEmJk3?|yuJ4j4`yObK0qUIcS>onEG{f{dmhrXXj-y!HOP4P2be>=*)U%3bj z2w_JYRi*d>KkGL>&J@M4L_{tw0G&u*KLi{QVk_Xl;nNDT#fuN7$hJ;iwT9aSeb^bR zcnL+4y=6s>pR#gd!H6FDM=AR$&Rram?@y}iHRKV$e(xhKoGU3!!ZRWMb_C;1?+YTV zAS6oNfsplu5qprBEgz&~VH*^!p-2s_UKyc~wT&xtK{k2|Ux;~aPJCxQ6ON$?iM5wg z^S8-l+Mb|);C*A~%s}3d2L|+@)H7vZX2`#OP6_SE!+mCmKvnPQv>Nt&BHpPbek=ZS z2EX%bnClPq&Zj!G42%7-yil>B`&{E3yC308xZfF3|7%{wb5s{!`pL;tiR}vXDyk*n z50cR2!Xl-8QhPt=Gs|WRg}m&iz{XF>=e#~IuZ|1rKI^UD5O5+hjb-vW9xJYKCe1YYC-C4KJx&y(;$BH!i0LK1)xK+o3o?SXV@O6xHV)+Yn&zm97 z0fH|r@H+U@jKDM=d?)pxy@Y#1p~-`u{ajX8ptYKj7EfOQLPK{Rr$qfcX!PLQiV_N^ z1`(gK@1!V%B7Dy+NSqI@UG{*?V2!0@M^5rpB>(^IubO3mJy-GYFMW`6jkPlW^%XPa zEsAAwMY($V7EfQ3C*@`Te4gSBAF~==8OI+Zm48e^CTdxgtV@OZKBNElO2q9%W9a%b3+Q z^a!t7L#O1iGmi5TjJzY)P6rpxcFOK>%WjpjYQ9w2ZK~{p6L8TY* zsShf>S&Dy(^}{&MmGgRIU0dT3q`H<HA_(Hs#?j#J8J898spccoTx-NguHr1fzwuG~$@+#)qw$3jJM zRa^;GyeqhSliDsB`i+BfCZ<8JpPKu$FNTpN6)_cSXYEf!2pUd$`@+`DBIX8n=m&Bu1Y7nn3+U_%}qj%0zXDg<8Y!$RU1i@GZ4}JBA=K*tuM_J`>4a z(9;nT*|AXUvp1NY!$Hqs;j+y3ro;4}sdXxM@v{jASRcpUY!fM~NS?iWrnddvncA+E zGqvQ~{J(Y18>A)~BP!Rk57ESknc6)&@NJdc!NX2@z#SH?Y?{XP;Y>uxJc<^V!wyJahjoUs+Jxr~Ld4JLswx;yVp}A)gnI8%Prb3&%SE%x zk>+mqK@oA-^!S#xvxDloTMAomfH~AQS&NN>Xm0MUa|F$8a|sS|{66 zU0hqEaWtkJJ_wuL_6|x+;=(28hpc73@@0i5@KaViah1A>RW$q@Ecn+CpnGOI3E!23 zCnRC5ldwP%Vv;aVC1hMjf?$YZ=(tChHOO)P7xW?$%lYiQJ}IyF_Pn;p>m|JQp@-%C ztv^*69X$W|&muVg;;7{$h4lEHjV?nAmA?8-#_SN+yYSB6i+?&0IvRtDf%a^O8?}1wZon*m`72ib%IAfl!t=Wzg^uE-_PXWadb~al&46v zU&})u-4mEeBCD~69%^BJ9%p`>BkVA*5VvBH4wz^Swv>YlEXb29%RGK?VXc%*LKf0i z@!XrzGC_@>oPyDypYlpp3D*fSEdJ#81xEUL#{*Maw3K{0b*|VI_wz3LCQi@d+ul2= zv`k>C(3?c1A|%ory^@o40$Um5q=a>2tL9S#2PqUQG}Dig1}naQBg4OY?~19^7|4(Xv}V|=X6!UqVN1ypL<59Y-E zbdZO2sfvgPKcij=0VtbPKjf8B@t)cEMm~!tk$urD+e8;v*?OQi^A(d3MT8<~TQTR(Nid z(Po^bO2VK{OFPW445{E$RhYv&MX%JKNUI$Q5;1+z5h~n2p~>r!Ga0d4XM8t$ zM)ESJAJ#7WMlL`<$neWrIHGgAuRpQ6cL{{0PenIH6~whOVGNdho!uBqb zJu**?VkN$Zps<>CJIlW^dcfaa1=CAw5*`WOW&Wuk0LC+{>$=}HZm;@=OAn%wOW0rH zW+}g=^tEoEOps(ZZEpd)0iay`0^}K-aKY-p*1-@&GK(-Bx9mcSipwF?2s@MK_4ZfH z0K(WJHOS&js4u@St?J|Pk^HNW%I*r*mlver*B3pFeX0FQKg1}WPn*-Kuo+_Uk{2@% zIAKK`d&lEkdeG0ve*yn3D5=@M7K7I%L%rf@Uk1Pp||k~$~TY$DJ<8sa-urh z;9&Ak*t1$`YEBX#K`zK(OzClI=+g7XvFf<+qDsc7kvtKw7~)Cb*kdR#J`Q|7!1B;G?Rpy-y|qBVZCMYE;x?1q~``!b<`~ zXCQ$YOfdQcGvhoU_#zmBj6*QJ7roT0HCL^dR|_xJVtZaKf-%syxBwbx#I?Y-C9?>%NaK9U2|aYreE ze@=l*;(_nrz$6&t@d6pxn!9cjWi(~)1CoH15>)_$cp?$lkFh>@p$+ zM&};v!BM)TJo~Wt0GUz!GPs-gWM8XIi>zKWZ$d10E%h18qKD(a+ZbI)y7qA5r^A-T zO$@TPSU7`I1zx41#%r1WLTj1O&p97A(-R>oR27F`^9@et*crho2z@{Mau~<3;r_v$ z(Aj0NtTpIoK3eiAR_Wq+Vstu&F{pq2>OL&%gRXlv_ofTE7IUecI5tT?xySNOrC8SW zv|Gth@=D}GY~pCYfl|tPPptU8WuO*CslIb@bi$2sng)vB;IFoS3A@<;&k-su)9!D)okLI>jzaQsvCPE9}WIX@e3@5fwRCO2Rj^vOzLxo;4g+_ zf0?~~k-rXn0IH1l9M3!n@|cXnCT@(QsQSlMR>bkaK#?MSKf;o{C0**AC(#}l*r;fS zM$m3W9wyUQYC**D{=i3Ra3N&qV`I3>q2 zTV-gSsPwK$r1vWk>_H0lA=cgv#1xai=PH^IKwQ4WoBAbW{q8`4%9%~3kR$b1JbY?8 z-{vbZnCV*Zm5?J9z+_qed0+wj8LpGPNWI9>+`%E;1~6GPivrUb#Uuu#eEOF=d%hIngnlAR^jX;;DyYLyJODh0k2R!;nf4wvo=EOLA~P%9RM#zY_-1zHL>Dclsh)YaPtWj%;e7-W4Q|4b-au3{rHUv0P~srg0wX9^!cd%1IL2N6%TK<8mW=$AT<$*$YA!+<|JE0vHBW`^+nxbi+W!|H zbjlojqWw$rEx4)27X2J$5M>0@c686>#vh?+5j(pin4R0clv)`b7iVFt14Ch=|BPEA z>>W$9V!^LVLfMg%XlO2W0>(fh@8eQg9lYfyHKocr8Z&4sP6$c8FfVuG8t_R63FAnj ziq&X6MU6-w1BT!4-p22w<}}k<$?9{I;wNCSATCX;Mh$<=G_7gEHSQeAf^=l(4(v9 zxCp)R7b>Dvd6DP9DENeWOYqqX0%`dSfX`y$^Jnq#luE%`dlRNq(aBAQQHVu*Ww<564ZSiWu}bgK(JEmctnv#2GO798AEJY03SGi>RCt04tdw$ zePeibtb+v-J;IBS6h!ae*{k$iBf-F{j;;H^#-s}kYPK7Z>!2{M;#AmU^C!oSw9{4G z?w#`{uFGwwNxOL$L(A{aZSTRmJ^CCr-_s1^?ySMWcz(u?<+DEQNWA;2c@rPcZJz^V z+dNVO9jmf(+pYLS{@_}($uLvB6;Zmf>@NdvWPt+|(Y3$P_;ip@n=urFK6&Bw(sX+ye_gHTs{wj zLH!?;`zL8PN5}jdu364Umr#Y8mWf(U83@Tjr-~YN60Yl@O{1hY@X&{jZU$8-jF{kn zn!((SFCw5Vh9yS`_Y4+*j3yiHW{VPXlStp45g#t_?hj-Wv2EI6@Jh zH)4Kg{$%pJ7?R*RfYT*S6F{Y}tyDVtqo>7Ok3LX>UIm5YFlU>>Kq}Z1HP8VW1%F#b#<%^SdCF7koCgU_l z9yh^mkd6shua7flUWpV8&Qs&WY6EjRyztSL*qXxA?XRFYVv8-yZhv9b-fghR1_s|R zxr_>PbZ72*+VO@%Wo*%MsM<;xo@>D(ZFYx-4@QuNj%#*gQwI(0I+85(`VMI8zmeTB zwVOn{E{)w;Ln5Pby#v{uO0??6XcVJ+CzS0DYQH$Ji-(Wex)%|bgDLbd{t(t-cKR~o z`BxFU0_{88HeHsPz51kq{{WX?oRR7<8=piW{SEI@*4M z#^_77*b=fvdn=>IIATkHj{z>am7+2>t|EGPWh|#McDN(zfSEkT5xokMI>!;s8N6M@ z6D!Zd@UAVo3_Un>@4z?MTn9EG=#PIa1l@9lBUa8Meru_KVge9@o+S6(<-#sK8cz>p z!;;-u&y%q6t}lvC{HeGM>ebbM8vN<@JZ}Hja#vnQECWABod6=JKb^aldJxovGXwJH1;cg7riKIFyWXo$aCOc3Lh&yB7`DD zmb<_0NmNEyqU?cXq`&qJ#2_ey?*HJA5Ew$ixD24lC=T?Ak5@nehtGsM%VxDrPB&p%7*pJR3rpULf8jN70`=7_$$?KtEWj}Or301pvT_pAW&o!GzY zDbf{x#Y_S>1o~|(V~i@O`#Vu%&@VY2tv8GkwC`Jmdl%87-;e7e%W&>WPvrgLo^3M_ z0n?>3AA+Drce$^%f+EUWHd`(%D+^<;fP z(t}tLj3WF3C|3Z5F0KL2Q7E!37i+eS1OtrEK)5=Y@H@x@X6Zqc=8EVaw@rY{3~#Ro zUL{VHyALSHrHQcH=-116I^>$le;dvUEsvc)sUrGGB~A&&MxD%U0SsqhH*Kz@g~Y>B zVJHKK%QX`@$d_}z{plqglZvi8#TL6j2Wz1u*03WutKSM_N69;pcX0iZIHegvC_k&bQMNi6iQM*x&> ztdu{(PIitiRa;B-KXpWf^8@T}P6`Y5mmoCvbw{#H44(k+!5g7=UV++BwQ}Gld@wy) zAODqu+6$H3i;aF^tFFYV>7;8F|K`&*Of^wyD`s(f;TM#f^5~w5D6N_v^E~kS zC+s9W(1Xtx@L7RYBQ8whGKc9Dtja?l8;jOI>Yw-#O!o&^WJBvt{xX>K@diFV&CNS; z$@j^Y{}nSRM^2htpIh*RZ8tBh$lX{0diA*%zgN5uct;-(yrlZ=#zKSGg?d?R()HL3 zk-L%387+&x<8c4(%U4k&Z^WAF4BQD{ePdSf)6gSj^YY7ZWg@0&pvq}icyHvxPjkm!H>OzF{8@EBD3DDpF!m%LiX-O8~eK4^xT5jA7*xX!k$pJK+I z=B|H=!iz5$Bxdq#ZSC%$f@ zFJ47{7vB2M!S$k8MczhGJXk&D#Vf6z8aFsY=zko|fJIVRK-GUFA=5gkZ1JM^8#qam z%IlZpVx1J`7E4bc0=viPiX=MoIfKW?+dn|3MK}GsILMn=U$lG7dq0uUx9!Tl^m4gQ zC{}t3Nc7)Ec)Q1BNOA+Di%72`CicI^G&ibre9KleRyYYAg#&sb$5AHTB z!^TZ=ADoM$wVp>SfAOBS{h7Hpe1)>$h-Ev@T)!W0k9&}xFd2q%E>4+nMAs8vE9N;c z{Q(ROZFcL{dgX6{e*yWQ0RKGrXS08U@P}s+JaJj_byItzuc9&d#Pb8uXEXj9UJ3>B z4HX_XXJFyBD3T1WH zVW|3fCC>!k%J`^ckgoaL=ZLKx>VrOZoVj)glaR&~N(4Hq*hBI+Iwlx54a~83Tt5U9 zdnw5rAB3NK%MN?#5WeMxMcT3iuYQn-;}JbGUJ39h0jE#`dSw3#8ynYJh$>z-StuCs znZ$T&FU4G{BQVCfVr%DUz;T>eHfKNc3x)p)RzV>Ce2zc+P4IOC?eCzdwib)1tQyCY zogmL-Nj9J5u5R7`21PMMQM`(As5$%XXO3Bp#UGbmuHtBqVR0YT2RiE10z}MJ*CCSB zjLL1l5HSpNQ8XRbb8Myg#88_bvUPN9m{UMOk#^LpO&OGI`mbMQp z_0bE42krpa_9&%#;0^QvaHZ`Rgedyswu>+`VzDh-gC%grx$=-MD-5T-ge|yKh`JhzM zfgyTanfrJ-SW)dEwVx9sPh+4L*DfqzqfPN{T3AGU(9(|5esCOl)85fGCyT;bkq=yr zX(1*dOnpY>0v1@tI{PRm6EOb9$+MBCZTp_Y@}1kj04pM#c}uJDc0Wp*dlRRZ4)MT3 zZpsEs@!8Q-kr^alj_1F@_*ZUw8PfO2Ysm0Nr+^rUV7TKEDiQxV4&TsT_Kx2$jp*(N z&&B8CyBY1B{y~Tg4a~?#(Apo{E9S%tm@u`8xXP%XNr{rkz@FHx0(2qepKANZJju zmTSJUBG&MX$3H=~Y`3Dh-Cqs1(80OggRr~D{JK%cIYNN!9?i6wxBuXG zSz15s_#DKM3|2lr*@)kV{IadOqGL+Ik92LBy<-}=7gkLDGpi>+)4 z!zZcyub@WVKJ-g%#>BU%rR5*%Od9TYRtsv6!C>sP0g>uE|IL z{zzDxHm%X)4QS(*gjV>boovX>;8bpr#JZm zk+5FhT6ZDq0_NT+z7b51DW3Whwh=g-&9Ij14$3N+Gd>6AKcN^v5-xghHHHwV0) zut#rpg@a8k$5djyq9u#4Z4&4)?y4&RQ)QzC$ z^?Djm-`$O_pbJGdh!|wX&egv^#r=H_kf6WP74)HWouzyI{s7@}<<+NnBZQa+FYZrF zM0}xD&CMRF9VWUeT{2BF>T`aq6KSQvQ1__LKt}aJe=~^@0-U0R#F9$;*D9e_>FUzW zlP(QM(F3c<4_YJqz-rUe%KvD?OIMffq2QYK|Fr0|Dc(9NlMP|N-y70|<81JRy{HPB zBVju|bqyY;+h6C=*#{UNH@_ip5Jse7uHM`f3Xxj%c~+7S+ga(=WUfQWoXr8DvUmt_~Fxfe}ZdYMUB3Nd#3AV&6El77dUfbgz&Y z;VE$?pd#sRe_+)JK15Z69Hya%dfwXd{Kfu3%W{FB4yhlJxDVu--J$5$S`24*mXW@gwU3!8~<953X7HiaS;h@;96=4pAnh^C1b#XHi3RszZ?wXvwl zK@BOi5Trfe0!KAQpR30sCm;%Ya=xkJ&v}eO(j4%k!ohCp&7!mgJM!_4Al2p8rN+Q)i&ew>Pj)FHLrNB$pXs%!b zn#gGMO4UZ?hx}9FtPs6`aZ``;y_{<0T>at;mX=-U_;ER@NHoygjoffzqg2QZA&Dmp zRH2)C1|c;6;`s4`E$gXr^t|jW8izX2L*DeGMvZdm9i8ZA2g_e`eye<^ zyjLxAytd*;kCp#5O_%PW4opH!Bx-u7$k0Po2Tv>i|9>hvEyMJ9Ju5tzy_~D-n(jsm zQ47t(n?G3F6xPskZ1L31gK4VswCLIov`W`1jOnfNN6_a%I}2THYU4Er&^qQ8G_~yO zn$TS#gSNus4*P@SG@mOHUZow#?lFcidkRm2MmKw~w~R9vqi0_4D6ztm_-xkam+DjM z&eCf!+}eyG({Yk3>F*=|<|bbOaHiCq(L7aP`UIxPZW$RG;eKC3>G{hlDwvuW8wwSo zf5={?)k~L^gZ#msR*7Jht}fj}_3wXp{X;(M&MwOWk>5k-lB;ZTvTY#cLq8}VYw~YO zVNpFs{AU&xPp|i2@SjFVwSr=dO^SZJC)ljjVTiAu2;(_ey=(HOv^S}k6KK?mSGLOM zYHo64pco?+7{;XjB@b8d)Q5-@|E==PDqUT=hsyW={PK;go@~AKXY@RJZWuEk(2QPJ zEsYk@ToSpp1ckMscMJ|-X3Nv;3N8<6upVJ_sX`h`Fh&T-U!RLYjxj4|*zc5D*fcUl z!$iOw(Fv4rIglj`5m8Bl%7ld<^Wee^PKaW6)&0cf#@t7f_{2mOMl#5vDXOwyAEcg% zAv|g0D2T)dDdm;E%B7^6M-DM)o)`*=TN+7E5Mu@lrn2=5=@^{y)wwVdBaM|_i>kXk z9#SSiIzK)_(|#Vn5}J9McCrWa9nerec5B)Lz|WZ`kVs!CouyoAB$56ye=E4sZ3pu= zuWDESz2pC`{2wfR=Jcv`tA4~kdiwv~^8c>+cd-05=eNrD zL;Xjgd!T|^@uSDe|C**t_aC8cBki(uinWA!*CK&BjK0Ix$E`cb34b2^=0jO2bFfx7cka6jh=}AJs zKyWD`m3r_GVQFHVb*gp+0_vAesk?j}4P#vptS!|Vg8oQ=*O&^ijrQLvJ*?8zrTdT2 z25XgRwMti)?mt4>Y1KH7nJPEqgv@y_!Kkc)5c;r_S%-lb!j&v`xT`h|8$<95+&pY- z#+WGAABLjn7sEyo+}?j5HUe`u7769LZwKa&85+j^p5w7@Mo$uPR%2H?I1S3lV> zhT!(V&BiWb?G(ef1a8sy4Py)3Zn!;gYfgnfN^R?8_`~gk8-Q!Yj)+dU0k~V>=ADUn zk3={e09gYUmn|6Ga9iQ-q3^Q|qu_h+pKloJ;SQA|9NfNh4P!rC-3I@okPf(3xEfBZ z?Sxwcx0~R0!_aUXN>znnw8HH^-!OXNT7PI5RY!x5YJ9_Oy~r^1V<3l1z$e_!0MY@s z53Y7B_{1SpRd9Q-k-iIVR}16-x9@7in-Bk1#0$4;jbZe`EyC?cMaO|3+!@sZw-48W z?t$CA*)Z~t2i~oQu^Ddfzv8Y?xYpYc&k0B$Tpe!DUEl+*emCgCZT$u4!tJ~VbSHrh zTsz#Ne}~-QcEW8T_!jIff!p_M$p1vd{~OSQ8-Qzt+Xwd&xYmatPq;N(k*{#`9)%oF z0$)8k_#TH-%~4a|Ae z_|3^%l#{x48*9s%({|Y6oZgJg9hPx9a{#mD6aZ&IPCmjc$jP=*6(fE&;nxd3?}w|N zI=tM6U*k`Qu`v@b91p^7%q*vP$|;^Qil>a?Da)y{yp=W<`}oWk4};Ib(c_<(fiiIi zjuKLl!<~=cS%B{c{0@=_;@?Q=?4Wewp6{H3b(GGwv6ijlatdrJUFA91oUu7^tLQZ`M8|?3YOai<864i z@p~D?MGw(^3*px*x@9@g2uK5dp99_vxSaq@cX6C#PbMjr&sd5!BQ5_M`VfRjd3};%~Ud| zT+zYLL%$t1=v+hMufwt=Cw~K#t94Y4+r}({)IyM20YD%C6jeRBzR%2p4tjXlI2!Kg z`N{QgaZYPS<}f7?45h2@B>%ObV}$<(hF)U9o=|{5#=ahPXBMZ;AU8KXvf$ zf&Y|mlRg~4M#&qg9;sy_()SSPb>WPVt!N_&`6tS2qI^j`*qM>}_Gkr6(#t|yEDuMg z?f7q?M>eJ!^g3S}Ht5I(4SL5ChByTKEUz&9t8nJ(KIOj}{;Vy8joJkNA{_T?qx@re zT0T+&Jqw_R;9rBS%_Lh&zbyCAM{QXFll~(7_kiCD{Hi!U>pSS^wk+h7RGmT}5dK8S zp$qucas2bBUX6-h2K-*&&y@VGqk7ne`c!1uF38(*vbl5${Tl{;-y6fmr9>a;i{tAk zSHum_1vf$-cLP5UN2b>hKIHjBB@BF$40gf43jS}(`Yi45k~DU4G4u`9>@?*|Fi7+! zLT~lqz=1a=;Dhz6Nnayn(#|?^IxU%-M^{tKUmfTL(02YH-aatVV|~3)v=2b<_Vo0a zK`LJlfnMHc>E%Is@g?|I!T)Bwi}JzwjdlX;rahkF7ms(Tyccqu0RA39xHn|Dn@BH? zXkSP^1C~fyG0JjG<>)fdvwuEpyhQoJ`3z-B}!Cs0r>mTx0r>td0M$A z?Al_|gXg5r$i?F=s8DHgc=7nAv~XgX@_hpOLXV6!j1wTggT}vpOlBvwqedz!F1pnI zxD52x=b$Z&clA*I@P>w5!?=%tY=0`q{-FM@%UVqKXEAEd8g5L)twa|CT?b>o~-|cz=S@IMbwtLYe zcouDf-{)i_r`pD@8?zy+BXc8ZKbC(r=;`S5UPb`A8O%~Lr5$zqRxAtUZE+2!E@C2mr6gpsgk)h8bLw}D9eJ&?^LC&76 zw!_wq-7uyjYh&h37NS3y#wIYPaM`z^zc(w>azOffQ|MEN3C= zji_#v6O^87&?DW0F{ql+(vuv2YsUF$B$YV5MEyc7RPUr-smi?f0OUBoy+m(;VLXnpy`=J%uvdxv zUYygDk$L+8+86Ud;xW+MgY!G>cqe)rXCg*p}2$3Btug>H8YtUqkpQ@%&2H zE@i#4h}v88(4-3EI3R~W`0;_^4q zOW1elm&~Jx9zdpUc3IpWeF%D6YH;RJJiY1qjWR!LGEYcfJQMuQhjQHPMtM)8|4ikL z^~WdaJGSxiwgL278gL$KTz={Jlk%&{)DI@Vw?OZaM#H!%PR}GiE^qOEvgO&d`5`*4 zWyp`SFqXX^C-v>Xds_XQD8Hodx1>||l&@hL6aR@}yomOwnT~1vipNW5XQyQ>F1KBv zmxr2W@AIg#}q*u1R_|ndeeIj8voL z<15m_ZR34_r_*kTn(O5z#IIq@zbGC*=UYNgB+C6_jPpL7RyuOLf$aBtpw|a_wG@GT zCc*t0@Hv=MxQ}4e?pT}{hoF3#1Uqocm8{oel{+Fkw+oW%0d2P+G>`EJ7qJF*wdYhw|YmoG$eq2Q3wq=R&>i--uZVUUD zGLj3DB*(Kb_j1XNh5@qihu~#^*8qNX94gwYmjS*9@MTGG(%WIc^J0c^T%0eIua3-$ zIA3<|Z)`Dfv49jA<;z0|KZNj8;`Jw?Cq~pC*x4=V#}imk#D5m%j(Tr43@Uc&q5PTz z_-lYS6A=B)HVc;!+xQ>nWK+2L@GrQ*e1aOz*u!@nbIRp3&$f>JQD6EIL3j;<=c~m_zHsoZ1Zs zuLp~0ymuPu`E(ULvt=}sa?vO}q#v+A&XL?617ELo8HOcpe-iDTgr4I10zHxW!}R8d zixrpe377-ij5)zsB5U}c;+YJ158!Xc?Iyq0o_cQdwrD)r%gca2=K=J8 za7Y4&B=A2{0!8^&PFJ3ERU)Y=OOJ9Vh)-?Hcq_kQDu$o3Wj1!v72_xGeiyrFa`Pj* ze;T?l{Nzi2YS+@E{4pKur|-=cD>)iX!O&AM*2*q*$>`Z*v67=vmzbWFl0h+xf_{Ji zYZxj@d8jGRPq*MN-o}+4)c&RiOAPo?eg7@lR{mCSyZlys*RZdq(U259D*jE!owE8_COI_cgb-Fu|FRk}|} z_Z8`y~Jtqmb?_}W?Nw@nn@ogd-|5Wu#0qCH1dQg5-p2Z6n&eaQ+)#AwK zh(5D$PT}-v#U&B`ES@R=npTLjd&90;xZ$918`WDA9TgqW3Vr^tr_i>*F)i$BkY5eH zNMUWH$y+zAsZJ}TuSQp>Q7f!lMP~sEHyji`^4PnS4=4PB911M@0jNazom|qV8Tcu^HOFGb7seeVKI(O90RH14rq7rC$}r z^YKDDUWHe7V2=dUNIgz=g3_+SD}793l!T(fE4!kudr)=+DEye^cLkuR0CE16-tLly z!7jro{#886T@HV;3F=$fg?<^nMus=@FTvVXcp;gp@X8L^WkPEtqKe;~{#d7J!hl_&{ID(1K)&MWP+>klTC2Nj&fnB!0K8u5yij)=IrtDvGpiF4!&1vz+#QQC&_+#V!n^gE=nzApc@N7-lja2yInz9F}@Nt^b z^QrLhas8bNpP(tdoC-feQ~EX)o}(!}nhMX=lzvQw=V?msrNWQYls-#^e@|0-DiwZ| zru0uLe4?iGN-F$lP3enN_%W#eu4E9uXVPXpRlk#bGts+K^)?BNa(SGl>SHS0Y!yWv z%+fxg>X`CS`OW~HPFb&2`NvWghPRsFL^%T*S-;dK=t#qWZFeYzBk50N{E_mR4Y)-+ zLhCx#inqjb9$pFFYl2fdh~Vb&f-vC3e~aW()xS1|kIb)MNjhr$0iXN`J2x`lUxshG zbkW`m;-@Cx%Hi+le@*)cF3YD*%10X1{R}@&>ov)f&cr7Edra`dCA`}NKT5*8Oz?QV zG|G5oz8o*{wcogyLzTa$N_d_LK9%86YLb7|?xMAv#Alx=URqO1@F5f226#HTIRNK; z{E3zM;XM_2qvj0JsoCmE;gi;C5dP3|fzNv;fZ><;y}wPxzf!`xOmJ#vGyf8<+BvHv ze8>d9TEeXlyO!$S5+FznyWlHa$gy)&?zm#yz1h=5vv7AkOPLS{} zQ+kh+aH|RbWC^b_!D($S(JwObIYYv`B|l0Ib0xgf6t7*vd!^h|K3*u{nu-1u60V#0 zaZ7lS30^PZH75B4B)r=c?`jFRn($S{N!bSV0!e7{A)t4wsdB)rcQ@4bqS ziT~e9xMrfiUBX*Ua^5T90aLthNO+%=zmoHxBwRPq|4_n*OniPJ;YB9;7BtSNJoK3O zAE)3ZI!8-*K;kQYPL%K=6Q8u!nCR!3%ENR;-z0|;3AdWkwE%F^W4$d_&OhF(g||y2 zzHXvlE8(rCavM-^$-nAnv`BcjNe*oi-fMz)O8Afoe!GMRO#J^+!t+e<-%5Cq3BE(Z zJ5BK4OL&zD{)WOg@$;U9cbV`%0z934`4VuFbI-pBIrCmC$XV5+R$pp8il8+b^>%X>u-?}-v_-6r6?#{=-w0H<RJ{7Nsqw0E*lkLeDu+F0ILC|jqzV44g!h@?FH3l*3I2|RcbVWy4*IH8 zIlM3N119_-32!yQzXUv;94r{{HMyLe2$(jJ8weV~q)4m8*aWz5{g9P}ZeN&|P zykQjhoeW1iaM;R$cyABh9*}S~U(0*A0Dly4&KFa?ds5=JRth?Hrlx7nGF*NnIe%36 zy97S(sf7Q>5}tRukSF!G>G?{+^3ZJE*u19@Z)FmmcbtIpSww&@1w0S++AisEApHGE;mdT@N{DA8gk>iRni68iPfq$9AzjYM)_e=bm*+QPYb{b*+a}@m7C4SLMfqUq_*ndAP`zyn2CO0UGoiA>rEnR{p+S=I=xaubM63e3lL{3M4%6x`6ZE zM8JzByi4khS%A@VF2lup^8Zr6Dc|!<`sDIa@UN8gYtFJV85$p?=PC(T>l=7)F5vAF zu6=1GG>!KJ!u{ze^tVWSwO)buh5`S9QSf(4{LUX>Ut- zkK4)+K3fHE{iD!7Y@En1{oe$>lIM{UUezSvmohc%H<0k|{Q}N=7U4Hp!qvJA-cttn z4wx@$UL503HXtK_sDj#8h4^ICRpFLiFn_TbQ&eR&nn>mOO`92g!k?g z@R<_6g5ff7l5?ZPFFM=CP~M}1x1Ry7C*i5rEfT-ydMkr!_#bWXo|8%wm$)RegmBD;A5Z?Alc<*Nd&U;+}|3<>~ z^Ceu?-)zh~6P>&U0p~MqfS)Jf-Ln2x14a*>n|LI~+ts{=B%__q@Z+?6lRf%@q|>v= z%Hi*n0cJ~h*Hj_rtJzo6Xg>$>qh$&>?+u0DQVAcb5bzp_?~?G&|FSZK_qyV(S;F(~ z6!2TwSJNUA9_SKqRSvHOob-ck(hpII-}QjNr~Vr~Hz~NZM|TUbwpqe!UbQlW_h#em z7ZToEE%^6H{NFNMek3_hOMJb+%FsJ3!t)hH=SV?^_khCd?NR7_D)Fs_f)1a_2K=uj zT$?ZG@Ln3%09uhvr)WdMlhD8Ta|p8_c#0Y!NLoa9#Xu!})bJlZLePSdegh01P$ zqJO4~836iNIB z3GZ_WIL)Kb6JWS_PyTP0_(OMD8O&$C;BAwHx2_X#KGO&ATLCAzncE5XNc^s~0{FW~SD(kgcKl%d+SL^%u><`egFGj8zqiG+8_{8Ie?mxOmW3H%xkg??v_%&%Gj-zVX8?kwe_F8N<3;ktzP%@Fu} z_96UEQ}}HHezU}%&T#pW;Z>D_|4kXf<8_5E+do?*{@W5BILFEmK6?>w zA2NL8`hia+zFPOnXRT03Okq;K^vZU74Z-jn0XVlyP5r53CB9mxTEp1LFA2~4v6Ufw zh9BOhOSttp0k4teuvF3ynEE@Ks~I=l7rM0uXXvWJS#xI0)*8r}rO}O+?qE0+j?~w~ z-|1YkaH+GxabdO7snvOco(7z7?g=`>%}%%1k2BM8$H@qg(^==)A2$J;WQ|Y4VRTsa%UE6A##coVAdQ4%sN|ZprF7KFIvNF z2&8a!@yzL3EhIu7Dd78Mim zusR}CtR}{Fit*F*=}dgBApjA&BsX-yXsFR24D&(z z8b#gcaiKWiJbZB&egNVj{3Py#FY$t;yFI`|!kA^GITUf@?zs>OAj=4!0zK?@iWes2 z#j@)VmNWmf~v5^lSV!&YvWjmkKP$czSnu` zymyfPRm}g> ziDh~35febpsd(w`hT4dGxqyf_tuD@oc+*q~g(#A4vxtMCUc?m+aR^=78Pe2s7772< zdnK^M-4{a9_6JbcDd`lzrdZ>TICw!ac!5erT#!hI5DtZkL-|8%s&mo{l_Zix&_@b9 z=<><+`1IDo->8+ru<~*8m!~fNO%+^*atghwzM$ElV;3#8RhB!;&o6_<7wTWVr)btDV)h1r_B)&f8S$cDh3mR`mFe)O-Ca zt=7dAjs**y(+j5;&eFhBKxLE`nvI$WBjE9*BKfd?0hN?D7Su<4bX6ni-c%%3&PZH? zN7ijmFz62=R=7UD6M^_@*3>{rcWXEu)s@bK(W|apNG7k^RSP8_g0*Rw4ZU6mwVz6X z_C5%y!#KL?8l0@N>cOwqpNa{=h5YW45@&q~>YzU1d3Ngcnu%*ZMZpusjFT6dt<`g~ z5`jsGC;?;vd%(0LEu6q10lVr_DIjG{zEludaNI#kDhOrBAApVwx&n=C^qd~v z^1*7I?E_s4T8}nD$doAwvn&iLL9Hx1yc!|M_0li<|Zh8zqlM!80q*$tExac z*|yb#Tqu>C$Z0YiTC=Aa)i~9=A?$S3La%B~p}2ICE-lqi4bqihk?|VEXJTJ)$yb;r zG&w}#aWB`9_fAplWrgE9>1=kHGnA6Ssg{YSt6*Uf`JUJ$QO5NyD?r*$gvMKBUBu&bHZ=QvqV_=laQbAb5NF8mY{a!aRQ+UT zi6~Jm8$`8drqH;Ec-RuMbmJE@ zQrhCVDH;G^MAWx<%IZTN&vKJC50FMoFh$u@KN3W(E50U*W$4G9!*z8~D&nFjDkCsa zsYHN43Mzsw1TGTSoJ&?XmpLMSk51IP0e#WIPSDCwl!gtjB?B*l}^6c8txmcEoY zSexOJEUL+@ukhYvQfX3?3DTk2l$?5wCY5`q6LvG+oTwiy`{GJO2pUQowpaBnQ!FpF zR>=IrP0A-(NSdI(xyFMX6g__+q;caUNt+R)vYZMbG)KJXR#5j4U{)xy5|b1H=vPn( R*gfhz&?^)Kaw#>H{~N-P6l?$h diff --git a/tools/nauty25r9_unix/amtog.c b/tools/nauty25r9_unix/amtog.c deleted file mode 100644 index eb35da9..0000000 --- a/tools/nauty25r9_unix/amtog.c +++ /dev/null @@ -1,255 +0,0 @@ -/* amtog.c version 1.0; B D McKay, Jan 1997. */ - -#define USAGE "amtog [-n#sghq] [infile [outfile]]" - -#define HELPTEXT \ -" Read graphs in matrix format.\n\ -\n\ - -n# Set the initial graph order to # (no default).\n\ - This can be overridden in the input.\n\ - -g Write the output in graph6 format (default).\n\ - -s Write the output in sparse6 format.\n\ - -h Write a header (according to -g or -s).\n\ - -q Suppress auxiliary information.\n\ -\n\ - Input consists of a sequence of commands restricted to:\n\ -\n\ - n=# set number of vertices (no default)\n\ - The = is optional.\n\ - m Matrix to follow (01 any spacing or no spacing)\n\ - An 'm' is also assumed if 0 or 1 is encountered.\n\ - M Complement of matrix to follow (as m)\n\ - t Upper triangle of matrix to follow, row by row\n\ - excluding the diagonal. (01 in any or no spacing)\n\ - T Complement of upper trangle to follow (as t)\n\ - q exit (optional)\n" - -/*************************************************************************/ - -#include "gtools.h" /* which includes nauty.h and stdio.h */ - -extern int labelorg; - -/**************************************************************************/ -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - int m,n; - int argnum,i,j,outcode,val; - char *arg,sw; - boolean badargs; - boolean nswitch,sswitch,gswitch,hswitch,qswitch; - boolean loop,unsymm,compl,triangle; - char *infilename,*outfilename; - FILE *infile,*outfile; - nauty_counter nin; - char s[10]; -#if MAXN - graph g[MAXN*MAXM]; -#else - DYNALLSTAT(graph,g,g_sz); -#endif - - HELP; - - sswitch = gswitch = FALSE; - qswitch = nswitch = hswitch = FALSE; - infilename = outfilename = NULL; - n = -1; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('s',sswitch) - else SWBOOLEAN('g',gswitch) - else SWBOOLEAN('h',hswitch) - else SWBOOLEAN('q',qswitch) - else SWINT('n',nswitch,n,">E amtog -n") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (sswitch && gswitch) - gt_abort(">E amtog: -s and -g are incompatible\n"); - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!infilename || infilename[0] == '-') - { - infilename = "stdin"; - infile = stdin; - } - else if ((infile = fopen(infilename,"r")) == NULL) - { - fprintf(stderr,"Can't open input file %s\n",infilename); - gt_abort(NULL); - } - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (sswitch) outcode = SPARSE6; - else outcode = GRAPH6; - - if (hswitch) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - -#if MAXN - if (nswitch && n > MAXN) - { - gt_abort(">E amtog: value of -n too large\n"); - exit(2); - } -#else - if (nswitch) - { - m = (n + WORDSIZE - 1) / WORDSIZE; - DYNALLOC2(graph,g,g_sz,n,m,"amtog"); - } -#endif - - - /* perform scanning required */ - - nin = 0; - while (fscanf(infile,"%1s",s) == 1) - { - if (s[0] == 'n') - { - if (fscanf(infile,"=%d",&n) != 1) - { - gt_abort(">E amtog: invalid n=# command\n"); - exit(2); - } - m = (n + WORDSIZE - 1) / WORDSIZE; -#if MAXN - if (n < 1 || n > MAXN || m > MAXM) - gt_abort(">E amtog: n<0 or n,m too big\n"); -#else - DYNALLOC2(graph,g,g_sz,n,m,"amtog"); -#endif - } - else if (s[0] == 'm' || s[0] == 'M' || s[0] == 't' || - s[0] == 'T' || s[0] == '0' || s[0] == '1') - { - if (n < 0) - { - fprintf(stderr, - ">E amtog: matrix found before n is defined\n"); - exit(2); - } - if (s[0] == '0' || s[0] == '1') ungetc(s[0],infile); - m = (n + WORDSIZE - 1) / WORDSIZE; - - EMPTYSET(g,m*(size_t)n); - - loop = unsymm = FALSE; - triangle = (s[0] == 't') || (s[0] == 'T'); - compl = (s[0] == 'M') || (s[0] == 'T'); - - ++nin; - for (i = 0; i < n; ++i) - for (j = (triangle ? i+1 : 0); j < n; ++j) - { - if (fscanf(infile,"%1s",s) != 1) - { - fprintf(stderr,">E amtog: incomplete matrix\n"); - ABORT(">E amtog"); - } - if (s[0] == '0' || s[0] == '1') - { - if (i == j) - { - if (s[0] == '1') loop = TRUE; - } - else - { - val = compl ^ (s[0] == '1'); - if (val == 1) - { - if (triangle) - { - ADDELEMENT(GRAPHROW(g,i,m),j); - ADDELEMENT(GRAPHROW(g,j,m),i); - } - else - { - if (j < i && !ISELEMENT(GRAPHROW(g,j,m),i)) - unsymm = TRUE; - ADDELEMENT(GRAPHROW(g,i,m),j); - } - } - else if (j < i && ISELEMENT(GRAPHROW(g,j,m),i)) - unsymm = TRUE; - } - } - else - { - fprintf(stderr, - ">E amtog: illegal character in matrix: \"%c\"\n", - s[0]); - exit(2); - } - } - - if (loop) fprintf(stderr, - ">E amtog: warning, loop in graph " COUNTER_FMT "\n",nin); - - if (unsymm) fprintf(stderr, - ">E amtog: warning, graph " - COUNTER_FMT " is unsymmetric\n",nin); - - if (outcode == SPARSE6) writes6(outfile,g,m,n); - else writeg6(outfile,g,m,n); - } - else if (s[0] == 'q') - { - exit(0); - } - else - { - fprintf(stderr,">E amtog: invalid command \"%c\"\n",s[0]); - exit(2); - } - } - - if (!qswitch) - fprintf(stderr,">Z " COUNTER_FMT " graphs converted from %s to %s.\n", - nin,infilename,outfilename); - - exit(0); -} diff --git a/tools/nauty25r9_unix/biplabg b/tools/nauty25r9_unix/biplabg deleted file mode 100644 index 3b96676ee787f613c2553a5612247d2208bd41db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136236 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 diff --git a/tools/nauty25r9_unix/biplabg.c b/tools/nauty25r9_unix/biplabg.c deleted file mode 100644 index 67bc33e..0000000 --- a/tools/nauty25r9_unix/biplabg.c +++ /dev/null @@ -1,168 +0,0 @@ -/* biplabg.c version 1.1; B D McKay, Nov 10, 2009. */ - -#define USAGE "biplabg [-q] [infile [outfile]]" - -#define HELPTEXT \ -" Label bipartite graphs so that the colour classes are contiguous.\n\ - The first vertex of each component is assigned the first colour.\n\ - Vertices in each colour class have the same relative order as before.\n\ - Non-bipartite graphs are rejected.\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -q Suppress auxiliary information.\n" - -/*************************************************************************/ - -#include "gtools.h" -#include "gutils.h" - -/**************************************************************************/ - -static boolean -biplabel(graph *g, int m, int n, graph *h) -/* h := bipartite labelling of g; else return FALSE */ -{ - int i,j; -#if MAXN - int colour[MAXN]; - int lab[MAXN]; -#else - DYNALLSTAT(int,colour,colour_sz); - DYNALLSTAT(int,lab,lab_sz); - - DYNALLOC1(int,colour,colour_sz,n,"biplabg"); - DYNALLOC1(int,lab,lab_sz,n,"biplabg"); -#endif - - if (!twocolouring(g,colour,m,n)) return FALSE; - - j = 0; - for (i = 0; i < n; ++i) if (colour[i] == 0) lab[j++] = i; - for (i = 0; i < n; ++i) if (colour[i] == 1) lab[j++] = i; - - updatecan(g,h,lab,0,m,n); - - return TRUE; -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - boolean badargs,quiet; - int j,m,n,argnum; - int codetype,outcode; - graph *g; - nauty_counter nin,nout; - char *arg,sw; - double t; -#if MAXN - graph h[MAXN*MAXM]; -#else - DYNALLSTAT(graph,h,h_sz); -#endif - - HELP; - - infilename = outfilename = NULL; - quiet = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('q',quiet) - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A biplabg"); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nautil_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = nout = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"biplabg"); -#endif - if (biplabel(g,m,n,h)) - { - ++nout; - if (outcode == SPARSE6) writes6(outfile,h,m,n); - else writeg6(outfile,h,m,n); - } - FREES(g); - } - t = CPUTIME - t; - - if (!quiet) - fprintf(stderr, - ">Z " COUNTER_FMT " graphs read from %s; " - COUNTER_FMT " written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_unix/bliss2dre.c b/tools/nauty25r9_unix/bliss2dre.c deleted file mode 100644 index 4d1e8fb..0000000 --- a/tools/nauty25r9_unix/bliss2dre.c +++ /dev/null @@ -1,161 +0,0 @@ -#include -#include -/* Reads a graph in Bliss format from stdin and writes it in dreadnaut - * format to stdout. If there is an argument, it is written to the - * output before the graph. If there are two arguments, they are - * written to the output before and after the graph. - */ - -typedef struct -{ - int v,w; -} vpair; - -int comparedge(const void *p1, const void *p2) -{ - vpair *e1,*e2; - - e1 = (vpair*)p1; - e2 = (vpair*)p2; - if (e1->v < e2->v) return -1; - else if (e1->v > e2->v) return 1; - else if (e1->w < e2->w) return -1; - else if (e1->w > e2->w) return 1; - else return 0; -} - -static int -nextchar(void) -{ - char s[2]; - - if (scanf("%1s",s) != 1) return EOF; - else return s[0]; -} - -int -main(int argc, char *argv[]) -{ - int n,c; - unsigned long ne,j; - vpair *elist,*vlist; - int haven; - int i,v,w; - int haveptn; - - haven = 0; - j = 0; - while ((c = nextchar()) >= 0) - { - switch (c) - { - case 'c': - putchar('"'); - while ((c = getchar()) != '\n' && c != EOF) putchar(c); - printf("\\n\"\n"); - break; - - case 'p': - if (haven) - { - fprintf(stderr,"Duplicate p line\n"); - exit(1); - } - if (scanf(" edge %d %lu",&n,&ne) != 2) - { - fprintf(stderr,"Bad p line\n"); - exit(1); - } - if ((elist = (vpair*)malloc(ne*sizeof(vpair))) == NULL - || (vlist = (vpair*)malloc(n*sizeof(vpair))) == NULL) - { - fprintf(stderr,"Malloc failed\n"); - exit(1); - } - haven = 1; - for (i = 0; i < n; ++i) - { - vlist[i].v = 0; /* default colour */ - vlist[i].w = i+1; - } - break; - - case 'n': - if (!haven) - { - fprintf(stderr,"Missing p line\n"); - exit(1); - } - if (scanf("%d%d",&w,&v) != 2 || w < 1 || w > n) - { - fprintf(stderr,"Bad n line\n"); - exit(1); - } - vlist[w-1].v = v; - break; - - case 'e': - if (!haven || j == ne) - { - fprintf(stderr,"Missing p line or too many e lines\n"); - exit(1); - } - if (scanf("%d%d",&v,&w) != 2 || v < 1 || w < 1 || v > n || w > n) - { - fprintf(stderr,"Bad e line\n"); - exit(1); - } - elist[j].v = v; elist[j].w = w; - ++j; - break; - - default: - fprintf(stderr,"Unknown line %c\n",c); - exit(1); - } - } - - if (j != ne) - { - fprintf(stderr,"Wrong number of e lines\n"); - exit(1); - } - - if (argc > 1) printf("%s\n",argv[1]); - - printf("$=1 n=%d g\n",n); - qsort(elist,ne,sizeof(vpair),comparedge); - - v = -1; - for (j = 0; j < ne; ++j) - { - if (elist[j].v != v) - { - v = elist[j].v; - if (j > 0) printf("\n"); - printf("%d:",v); - } - printf(" %d",elist[j].w); - } - printf(".\n"); - - qsort(vlist,n,sizeof(vpair),comparedge); - for (i = 1; i < n; ++i) - if (vlist[i].v != vlist[i-1].v) break; - if (i < n) - { - printf("f=["); - for (i = 0; i < n; ++i) - { - if (i > 0 && vlist[i].v != vlist[i-1].v) - printf("\n |"); - printf(" %d",vlist[i].w); - } - printf("]\n"); - } - - printf("$$\n"); - - if (argc > 2) printf("%s\n",argv[2]); - return 0; -} diff --git a/tools/nauty25r9_unix/blisstog.c b/tools/nauty25r9_unix/blisstog.c deleted file mode 100644 index d7e0a6a..0000000 --- a/tools/nauty25r9_unix/blisstog.c +++ /dev/null @@ -1,194 +0,0 @@ -/* blisstog.c version 1.0; B D McKay, Sep 2012. */ - -#define USAGE "blisstog [infile]*" - -#define HELPTEXT \ -" Read files of graphs in Bliss (Dimacs) format and write\n\ - them to stdout in sparse6 format.\n" - -#define ZCAT "gunzip -c" /* name of zcat command (might be "gunzip -c") */ - -/*************************************************************************/ - -#include "gtools.h" - -typedef struct -{ - int v,w; -} vpair; - -static int -nextchar(FILE *f) -{ - char s[2]; - - if (fscanf(f,"%1s",s) != 1) return EOF; - else return s[0]; -} - -static boolean -readblissgraph(FILE *f, sparsegraph *g) -/* Reads a graph from Bliss format into a sparse graph */ -{ - int n,c; - unsigned long ne,j; - int haven; - int i,v,w; - int haveptn; - DYNALLSTAT(vpair,elist,elist_sz); - - haven = 0; - j = 0; - while ((c = nextchar(f)) >= 0) - { - switch (c) - { - case 'c': - while ((c = getc(f)) != '\n' && c != EOF) {} - break; - - case 'p': - if (haven) - { - fprintf(stderr,"Duplicate p line\n"); - exit(1); - } - if (fscanf(f," edge %d %lu",&n,&ne) != 2) - { - fprintf(stderr,"Bad p line\n"); - return FALSE; - } - haven = 1; - DYNALLOC1(vpair,elist,elist_sz,ne,"Alloc vpair"); - break; - - case 'n': - if (!haven) - { - fprintf(stderr,"Missing p line\n"); - return FALSE; - } - if (fscanf(f,"%d%d",&w,&v) != 2 || w < 1 || w > n) - { - fprintf(stderr,"Bad n line\n"); - return FALSE; - } - break; - - case 'e': - if (!haven || j == ne) - { - fprintf(stderr,"Missing p line or too many e lines\n"); - return FALSE; - } - if (fscanf(f,"%d%d",&v,&w) != 2 || v < 1 || w < 1 || v > n || w > n) - { - fprintf(stderr,"Bad e line\n"); - return FALSE; - } - elist[j].v = v-1; elist[j].w = w-1; - ++j; - break; - - default: - fprintf(stderr,"Unknown line %c\n",c); - return FALSE; - } - } - - if (j != ne) - { - fprintf(stderr,"Wrong number of e lines\n"); - exit(1); - } - - SG_ALLOC(*g,n,2*ne,"SG_ALLOC"); - g->nv = n; - g->nde = 2*ne; - - for (i = 0; i < n; ++i) g->d[i] = 0; - for (j = 0; j < ne; ++j) - { - ++(g->d[elist[j].v]); - ++(g->d[elist[j].w]); - } - g->v[0] = 0; - for (i = 1; i < n; ++i) g->v[i] = g->v[i-1] + g->d[i-1]; - for (i = 0; i < n; ++i) g->d[i] = 0; - - for (j = 0; j < ne; ++j) - { - v = elist[j].v; - w = elist[j].w; - g->e[g->v[v]+(g->d[v])++] = w; - g->e[g->v[w]+(g->d[w])++] = v; - } - - return TRUE; -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - FILE *infile; - int j; - SG_DECL(g); - size_t flen; - boolean ispipe; - char zcmd[515]; - - HELP; - - if (argc == 1) - { - if (!readblissgraph(stdin,&g)) - { - fprintf(stderr,">E Bliss error in file %s\n","stdin"); - gt_abort(NULL); - } - else - writes6_sg(stdout,&g); - } - else - { - for (j = 1; j < argc; ++j) - { - flen = strlen(argv[j]); - if (flen >= 3 && strcmp(argv[j]+flen-3,".gz") == 0) - { - sprintf(zcmd,"%s \"%s\"",ZCAT,argv[j]); - if ((infile = popen(zcmd,"r")) == NULL) - { - fprintf(stderr, - ">E blisstog: cannot open zcat pipe for \"%s\"\n", - argv[j]); - gt_abort(NULL); - } - ispipe = TRUE; - } - else - { - if ((infile = fopen(argv[j],"r")) == NULL) - { - fprintf(stderr,">E Can't open file %s\n",argv[j]); - gt_abort(NULL); - } - ispipe = FALSE; - } - - if (!readblissgraph(infile,&g)) - { - fprintf(stderr,">E Bliss error in file %s\n",argv[j]); - gt_abort(NULL); - } - else - writes6_sg(stdout,&g); - - if (ispipe) pclose(infile); else fclose(infile); - } - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/callgeng.c b/tools/nauty25r9_unix/callgeng.c deleted file mode 100644 index cff2607..0000000 --- a/tools/nauty25r9_unix/callgeng.c +++ /dev/null @@ -1,47 +0,0 @@ -/* This is a sample of how to call geng as a procedure rather than - * running it as a separate process. The basic idea is to construct - * an argument list for geng's main() function. At compile time, - * assign a name to the macros OUTPROC and GENG_MAIN. A typical - * Unix-style compilation command would be: - gcc -o callgeng -O3 -DMAXN=32 -DOUTPROC=myoutproc -DGENG_MAIN=geng_main \ - callgeng.c geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o rng.o - */ - -#include "gtools.h" - -static unsigned long counter; - -void -OUTPROC(FILE *outfile, graph *g, int n) -{ - /* This will be called for each graph. */ - - ++counter; -} - - -int -main(int argc, char *argv[]) -{ - int geng_argc; - char *geng_argv[6]; - - /* Set up geng argument list. The 0-th argument is the command name. - * There must be a NULL at the end. This example is for connected - * bipartite graphs of order 10 and maximum degree at most 4. */ - - geng_argv[0] = "geng"; - geng_argv[1] = "-q"; - geng_argv[2] = "-cb"; - geng_argv[3] = "-D4"; - geng_argv[4] = "10"; - geng_argv[5] = NULL; - geng_argc = 5; - - counter = 0; - GENG_MAIN(geng_argc,geng_argv); - - printf("Number of graphs = %lu.\n",counter); - - return 0; -} diff --git a/tools/nauty25r9_unix/catg b/tools/nauty25r9_unix/catg deleted file mode 100644 index a97ed7f183e0c2ea079a0b27ddcdaa05791a429a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44640 zcmeHw3wTpiw*N_Av`~7A;#d_WjzvMGHj3CF&;$}V!4#^1Z!Dz`=vdm?B!CV=H3{}i z3^0z)c<0GHeT*~Xj5Az^(Kg}H0zRhD5fMhID4I~gst5&y{C{ijebSS(b-ee^|GWS1 z`+NB4K6~x8*Is+=wbxo_?|n{I+nqB~3a0Z2OjTUZID{7y@I1!*nK6nLpf)9}A2g#(IGEbK;0M{%&Er5cBnQhR-uMcne# zw~A-ARFaGgK=p{%+_fx=bRoOZQi&L%i*@Nr5%DXE!Fx*Wa$4q z(Z6{q7UU>zp+vH=zkR9JZ0R9)CEfS9IYN)y!fv#5vS?3BwR$(B9`X5AuUvt6i)e2! zx%7zkv{YoJYies2O`LE|ZRPmdnmW&l@hgfZj-NQ8z*S#xE$cVYC)}B{=d+eHIp!fp zJdebG5;>LMaf>ywX2GVJ1=YVeneI})ZOWPUD=NDL|A_|cm%%7C8FEtyHX8rw8h7!d zqpIhZ=bAqaXllX>bbtSX`*U=8?RGc_4+P&e2!7ol@ZS#tj|~EUWf1s=LEv``0-rDl z{D*_U7Y_m-HVFLjLEuLQfqyUv{2a*Hh_dACDF6nN|J#GW7Y+iq4+1}L5O~HQ<34u~ z{3`~5j~@j7%|YN>2Z6611Rex@gmi(F``v}OlO)Zql;ED=c}eh>1>BefmoQH&Xj)E` zs%z^j?yat=t&+;h8X9Zr+|^|jOYW7bR@Atq>iUMNI;o+mv9Z1p#V&Vw#l2KoR$X3G zD>YV?*P^oIa#z*>i{ZN5jkT!asass-u8@{iEp=77Q4dSy!?yjk?1E5;h6zbP| z&{%^9Rp_rvs;;Q5cU4JCc>~q%Dl~*z9x%I{+5?IbjyYwl zc`#G4v;p;~x5Ry;yKHGWc&+9=s&-XX-CIu-sPl`L*4GK7GHIsMF>QL;wFTD|Oo-q2 z-CbL7JxM>M-@nuZNFPR80$j_H9ZO}lOtZW03u>~+5?%^@B-qHBn&D&-$BVq@LMl&@ zZa|){-gOIEO15wWyW@W}{UD!6wo$t@{UEqzFR4t^4}u#BAg;Xi3)$Te{1r{Iyio@i zu8hIQ>foB|q=G^nT=Pu?FVexOZSAt?;Clb1=-|YYc9rVj+MJ-W+jVdVE`BZ4!H347 zlC(qzCmX0;4LW$X21L3-2gg9guO=NlCk~aQW*uDC!Po2Hnl4cBlRCJ5d^hOedVBe_ z4t}nV{_{FG`B?3GQ3og6s9hl){2Lk&>2@9bd>y<)2Pa>yU3+!#3p60oE*<PpTdbvHVcVlZr>5XZaM$r%`?b%b)TgPbwW<&+?yA zo>V#7#PWwJPbwU3VEKcTC)JHEWchuRCzXwsvixq!ld487EWeZTq@vM6mfuWyQq8E5 zdPMsfGOmS8CKn(1ZHHm4y(3Ef29FZ)V9xlBm1^tu$zjmk$q3&re!Ef6}3IG z1;qU!+4mHHP_PMTRhiO`TFVQdXtKW@R9h_|qqL`=i^A#HWOXNyj^~{ zk~8unlzCClVA^5zZZ$Z(+cIaXlY1BiU&wvC&HUb~xg~)IC2Ldhc+c;wO{)!(`!|l@ zZKxn`OaaQJig&YN@-p`)lUD!`aOaP*%J%J6+1BF=smOT_sM|Ht-X4Ru%is%np7!sM z{Upi2y!<@V5vzK{zgzZQ3%+lx&CipA87KnhXC5|6&Om;o#Q(nR8;w$H)8zc|vhN6P zTV_GDPW8h`?-@u*-Qra9^A-Po*(akAb^nOEinq5y2>4U#0xvm_MtK*SEXw|A=Sdk(bJc13+BGL29JQ*HuY+Yre%tQI|+ssygT5P--NU&LbF zh4N^$J3I>jCAc!*sHmG;P+f{V!mIW?1k8(oN#p%XYKddLwF!<};;7ju21B0z1Q&{T zn<3JDn&ZFBIfI}gy#SHeATj^zq*g~{{~i?EP46p#iyuQPN_$#<8l*$w@P9%|6v)m8 z^Q%y{$%z8im?;!FgXW^7J54JL#j<}k7;RdSBFTOm?o6S-HUoFl2&ym^e_B~@?m!(= zND2Iy&4fzjx>0Ou$o}()#fP@igt=>h^=|6|>pj-8Eok-zVktP`H3^qZwdH3jYIc6a zz`F|NKA+0Lp)G(i*+h%t9yMYFL9>a`T)i&AJ%#rT{ za!GJzObIr`oaVOWS}1cMrnRLN!wxc@ zHGZaC092>?x)UAGb*j$%%*YTl#1?X0?i)B8kpSNxos7jIPvK8Mg4QhKBSiG&(M{+E)&CFFk5mFBN~7I+1E>%$nGqwb zD$4I?JOB{A3W8+ik#rPAKcfK(40oV>Q$A=hrD=V7u|2HRxzwf-)|WW8i?XX;ahkBbUR!*aB(! z(bGWCY^Y{Eqcvcecj+wrQZxV@(-DWd>mEftsCeJ+DV^tN5A{@8pn>5gmb8bmA(Rd< zf2_JdQ$;p@FP@JFsQJoximPFaauoH@@{|QzUSwl~0OQz#Rw{~hiSc@oavFZPHx>9W zBTD#iv0~^@cJ+Etc@wX^8RN-e$$knKWLOB&j>iMLy=XG;)1sHwE!7D+d}h5 z@lILs01(`l#90_Qzty-F+^L6R9Shh1!j45(iHVn_*935KDaKTP~Yo$?gk7+8du&R4x->U$|9m-QDpl|9H=1eZi1U4pG=W)`( z>6yxn({p9-vk0KT2TaG@Oq;y1$O<{hzSRbb3~)aQ4nuxCWK(0_kin|jrAQi)^qw)S zDzOIa($k}4|CR9dPa9?b-AL{JNJN$VX@i?z8y|ij>gukEx2fH+merG5wCq?FeFEC8&tDAU6!q9vYzI zf29t2dtI{64OigpZIJ!JG)c1fj>|qDZu(^3K!dNRQ7ik?QKt{%p=6A5+5aB-uQ(sm zk}>LJe>ef-C&?I~@v{Vs@??xg+5cby#<*mRGTDDu0>%+0d!0NgWWPB9!;?&-UiP1# zfMHI?fM$ITY4-Kjkc?3!`#Tdbwk7jnlzkr|ob~ojmiAbw!10fx2RE~SC7 z=(F%p)xu9|^W|rx8Tv7E$$na;^Y$*5{ST8;#E0h2WEFu}FHhj$o5>g$nzRIr50X0! zZ8}I3Cf>^LlQEXa{!ju&V=~4>+5gi7j7iBDki^OajI+sNo$R@X%ncdygBuy;TKr3Y*IaPS%g5^mLy{o3r zG5`Eim+&>JKk1>kG3o>_Y^r$^TKQ>m4;wr`?UUiRl1s}yO?{=;CYNFy?;+C^ zAA?iL(t%P;PQYkM#(?5pn1Hb+83Uu#3rY61Qj&~;QQDJ$aozwJe+CB0DTPLAFX9xk zV|YCBy^8zj_fg89E5aVcVKxjpkHa#*g^*+XCuIH(Xkv~8KW6#J8%QDRE*5tUe}rmI zi`Ohg&F-yzZ2vBKnqi`hPGI}KWDE%B45HjV8s=mS*q{9g7-z_`>gOfw&tDTTwk2c0 z{`?>TBan;%`{PN#n463NPUj|IT$GG~K{6#^{Dc%%&nYluV33rJG)UJW(Cdq@$GIuK ze|OW1I^F*@m;XW_lIrg{LK7|~`=5m z7+1tGwiCu%9OGAn0p2gvc%RMq9X^SwjE`5bpjr6uYzQIpGt{IiLr?|Uw@6Uf`;qAV zjfkY9+c5w8^yWW6NGEGNmt=ca=4UT*52FO`_WKFw&n2S6Y{`DN4#TxVM~r!tTlJ+% za%mAtv6jP{dLk4|+m?y(wIX1P&Y^e@eYptCGp<4g*uDx_iFefF@V5N6XQ6S!>wvN1_D7NO=dVT=9z9o83mDlWWnTt z$Q2sx0~qS)NYUa54f+&8&(dtbP@Rs7{?`La{TJ}}H2C#|O^=4arv7Vidh`VTMuGo= zfct(8K=h@!e1D|DgMb6SNsNbAgL?>HiR0g^(LcrId#j*7SA&O0z7`GzKR0UdH5~tP zfq$7s|2(2U6NQ}rVH*4l#~;Q^BA-RL9DIiWh_a_8*5Caa{56jM1B?fzEi-Nua+r2R zn+1vI1*-oLHTe?({h6tpb0p2A2rm634$$ zz;!Ow90noHGm5B)7eCQowT?~N4Wfn!y^+%nU^?^jO?&EHjrwIRc1xn&6O-d)dKo>M)? zdXMPe67Z&^62H-6V(T?z(>SZ_K3#X8fo=@p`Mz#MCos|Yz!=tcd7s#Fx9C_O^Zx0; zR3lhd^+pWtY~q&|vat%&YYL$!cGD4m$oe-jBeHJ;{sK)6+tgR=YFFoJ^)2ta2JcCO z)%$kLw8M0q*>C?2&pf+7v}z7k>+)@Ki>w6a80-}7ZAN{o_ax**D>GK~PEr5& zTK#|;RzI_;?{t39`JQQq_o%@-E@TSXE`2@g9sdsZ^CDjKcTgZ{{(NN)mh#OPU3~{IYv%{19d@;AhDjiKHvzFiOjT9v13*++p0WtQhNOQ<*REHb9iN?qHd?H2)SjbEokkqHuYvL>rmA5Y5nZPK6G1= z?VA-f!xY-mH(#yZUaSzDe?iFGb=Dh7-6FS4Gw|&bB4y=$;cH<{U6d5|okU z8UFK_a+?iNCv}_$i4+Vt6C5g20Q1MBxw4q^1n-R>f6MEtzQD78)kZ;>0`2lSycqahmi zC3hj71Tw3MRe2FrMpID}_JQUX*&nC+K}15e?(bI96<@?;`=S1rI~xsH&_Lw3?_rsC zBL1)i=b?Oc_4}yVdIGFPRuYZFef8NIoWi>E`P|5C)I+FDYinX}L{UGEEFpHydp#p) zGw1X{THx`dGsapQD5zb*REg^&>{%fF1~6isuS|Ia+lXwd?#x`V$@4b4-`Wf?HhG2v zi*6%J&?;YUKf1(-nc52^v}@WQIg7@+&!zbTs=H9Ac()j4H0O_10(LA}*|B6r29Ynn z&8L+f0zgqnJBAEu?0<4m*Q?z9km{wbR_=`YodSmB4bU$0H-- zJbVif_X?+a{e8IUUaRQ`CNN;9 zHYc<3=&}P9BQ_?k5H_QpMHZWw*|P5)>ZZCidZSMNv?mwWw{>f>R&|@VOSXp3q^Z=o zRd>N-n2xadt*w2!7Ae8_x~CF8l&Ms7kS|dTZ`jQrdG^|a52ln<#G)@?WVk*~xfF~L zi;<@fV7B2Vs(=yGk?v0FrWZhrxyRd@OCvgu7E{y%41WnPqAKopyB{O$`5Z*sTYfW| zz|+}&B&}Cc-8|IQc2W%PbCux8Z3yOKj^KltSg^hneRR-z z6E194Blh?vsDml&m#+nEb};*MDq|YNZTw9^_i%(EHrkd9+0`xK-VCevy<+7_N6@(q zj8(6PE_z_J7f7413I_AA&EV}WKEB21zI;|-^4ndF7D>r6tL@=fh86R_0#5Z{@$A6J zH>kv!H4;9>VA$_8?0_5hykJGnX?Wdk?((doGbOs`c@iQ-c3&z95+dWmItECZ5F#Xq zTzWzd@r`4MfD9_+b>!l?>m|2O@@F{=LiBL}Y-$(WF-15-v3~+bro}fq*wn^^@x70} zv)D%6XH)ldp7I_vcu!%>-=e@~H;+F&@La1(VY)9RaVfzP1MS7rVyX8uf*P8o5FK`7 zp3gA%$m{-wyc!M+&J-j*1=X9w@@=;j(iMmIr*zNtG7{EPBV8Z7le@B-4H4N;I@JS%;Pz*b9 z?|ruzd#SJSV&@wuX7SN3**^-JM4S`XWoVIceJgInp!4A9BmmT3^^7h|H3}2Z_;EeQMZvVeU%+dp(z>p1gLD&r43eVg(`1A!^3U3p;N+Ln zz`9cLnPby$pXHaL_BewxVvZ9B6?K;qj;7*a#{qTQu7tZ%lyPmi?NPjK!+=LP;lruW zIK}X$!+cWqoxrHKhG>9)i^oQie{hBY;=RWZeF{Z=@eDV=<^-0(h@XWMm`*vlr4a@J zhKoS!{s2V;1VeQToWKXn2^@wKI8GUB)*jPtasr!q{ewUzCvdi(6X>w3%X6Kb#_DhbScL$U|&Fq9Z};r_u)n|k*X(lm8KGm59Ai4p*(q|H#%n(2|u zu;09A^{>2bv?Kxv9rxgQ)0UstPMpG-Z!Jpnz@)E@@W6;z$ODt69tQ*-m}xN2!2|1Z zurRm41An=Oue&7v@H-ZFOw^7*eIC~`3_$cx0Mnchj(Kxb0s!(hM#D7KaoUdgi)Q98 zdhnP`?s^#P2!#}Je~p;dAHp$~tEqcd;R0wv#C>;L=P4T|QEsvW$9_}Xe;ehN(d41X z5z_M%bA<#-r#aO(mz4j)Ji-}0 z#HBC_m_j(Bcd-n z0Px_eiOGqrEA3$GN|&)ogb+5LjiD7Z*%*?yh0qX0(6Z8YdELjTiTGt)mZeJA z_`CHKf90Z{`OTG1n3(l)a1?S%#owJlXArF3{TjwG%ND#Jf$dvncyY5;9r+!%5o4(Y z*`!5~rBsZt1@8m~BCrdr>g31NQ|g=aAa*&1fiX+E_6&8CLd6ZZ5wo8Ua0<{UO!}B6 z57nDNJm@SA2{$v+)TuK&cAz-a&Fn~F^miCsZf6hz+Qx0SswZ?B0vHS3?CMFZf?+*t zCl;Y>S^Jo47SHDp8js(;$MuBSk-*CQtJR_;J3@Vnjt0ksl4M%x>3QAz=tVRQWE_Fj z@Tp{B+jbE;?xG%SHUQ4uS>*R|cpirv2|qLPeF4vm`mpeiib0Pd27QAfgWSkc+VP|F zvslnc@4by;&`U9A5Q8f581xy8gnC{l3bB4-um&v@gI=Jmdms)ausx_C4n4`@P^dhe z@5KTh;!wInaDjtxdjTLXN<~=B#me2(Rac?Ng1CccSKlnRG_YvYib#{pIN(`5l(A-o zSVT%zg&iio3}kSg4<4AFkJGV=A4to`#vflg$ko=xh(0Jbz$;*7p1cCl>H!2^fwjSN z@Cv#di#r9R9}oVOq#Wbkq7Lxj^E^|``cQ9j^jT67>We;|YN#Zr@aS`o5e+WCgp<%#_N1vY}`cx?T9EJv4Gix!7}@z+ z{FgLPS1MjnTKhuw?arVzrkwb&L=CfuJeYQiQ~twF9 z^#|UQ8SV@5Izv8dsk4jf@ujShsE1fOEnmyFNkb{yhF*KO!cs+ew1gAg<3FEkl=$*v zU`iDCk+j!f)DF;)cGEy^!!9Ayv-tX=QgKu)F)9%BuTck&6#0A&SAJw0xqlpo#WM4h z{~&sQeifv|LarMCwvhWXG{US+x(6WH_bh5T)V3GhSmm|B80VJ+vvHEtonOcvui7#u zvGdkAhDlEjg^_FCAU|@79k|9)gY3Hp1h7`eHg!&UdaZDoF@6No+Ia}(J0HWob~Fqc zX4?@`UIjkA(4p>y=RNW_1o6-Z8?6?nzkdrJu}!Rzw0uE4v~}@Xr>ulnm`OpO7D>lU#~n zGaPTxNAx^aXf^*`_R;Q>x7!e`9Z!l7oM!NDD~@wkXlcIEbc8WYb{4iE_#-flT^9fQ zHua=ud^8nAX`ZPEh=TWHgZm1L-10dsTkS9$$I_cEc-L7dqVxO!pM4`JWGFTZ1#tB0A#R1Q4kD79@frJJ29D zYdgCTjCCGjRk9+OKFukNed-p&YD>Yq0X9t>N}c0+;2n3C8fhLWSWwYDbr5L?v>S&@ z4CEFDAHe9lV0FDyeUlFF=TS&WN{}1bv{RcD3(0`iaw2agpGN(!EjvtJbDM(VI8%p@2c&cAKJ_~xbzu-w1Uk=;mj`# z-W2QX!WL)5z}^GX;%{f*`nTp#M1pO9tvE%u!f*SGllRuoSx zQ37~Y2h-TjnhAqr%eUYL{j}lbm6^FnCZIjpr@+#KuobJZ^z38BS|grIA?gXVT65)z z!*m<&9X)Qd5*VUXe5&*<;$USakbVVmxa+WD_!LVgJC)!w5i&ny>ksJc&RI>1bN*Uz+ix6 z-<^=9)%^B@GAXY&l0x!j5l4avD%G1HC2)6suFeFNY9^>un4nT&f=ZQfdtriRI-y|R ztxFI~>r4>y(>gmuOWetJNY~rwTPTm)S7wi3Tx<|zA&k-}GD?||F>TsBdF3XwNq!9` zXcRqF6q5Tj^0i@XD*uSenSO_lLiJwS$mXIt#S3`UpJbY*qG@58qH0^`2RFJQLjOL- zaGz}|)!C*uQAXp+L>2ufVFoU~fwj3UYKK)~PjxUR(U-C6%uQ4#_5xc^EP=5)i@ikJ z4)2SPt+%lXy5-TlKz*(=usBl*l;t@C^+ueFS#_>yhju0=jI{%Ly8ydaXOtE#GIgrG zj^JuUrXM)eUR`9m*{Po5!6{BEbig{bW2J5w&|n_!n*~WBI4udfb5k9L*YQTDyv9MZ znSxU%Zm@WcePsvmBJQo)0L(&G_Dw}GLL~}LKX$@6L@q;s6`UVa{;IKrCw9ccZ<1Z~ zZcb+*@w=vwLw(Z`{y3!sM*y&GKynqu-4yYYJvpppj_mQhMBe4A?^rrPJX~akGFpY?x zk6M8>Rarg1&h`Zbql~ZrtbvUgZIAr?o0h>(y`~EoTyc@%WqkYo4=W8T?2ceC$dJ46329 zbw*lvhknXye?S%p8RX=3YhjzQ^aX!{8wqE#QW06-E#YOJ^zAdzLGu>*ku{`zfhm;7 z`#=U;^9{29S-?vC$Hk$jT2#iPNVQx)X7iPjbW_Dh->iUb8&npXO|(4=1@I%f&K`{j z`}X+h$});Ye=Vj3E@o zWH!$@scr`w%`;Awn76x(rXAfs;o8U^^0_vS@*_&&pCOnP9QE1|(o^^rX!kxg`64n& z02_|}A;d1GdxF<%0zTB~Eyp;Vk~=Bv-1M- z#>s2!SS7dVFb_w`n{zQjEZ`qvW0IU{aId6!us%Uf7clK-atdUx(ZqC&iD_E1^N}=I z&qvZBmrT0Jkft@;9!VwnkxWKICV#~2n`OgT`(K8YlF<0yND9%>I*GJ~UaMhkU!rTrcJS(#i4&W8&^GQA+urj17I~bX zIEx8&9JkIu2|91jbzrZ|n-8^hV3Ax=AI!wI`vr=*S6pTJgk#C%1YqDOe+pO z6LkomJ$55Z0wNJFBr{cnoF%%5M(1BqeEUCf7!ig*-SV#qei4@dGj8Bc({y4nH}YN3 z;@n{c769UoDL7MgVyqC16-77DgG}C1Or&D$G;$UPrdTW}(uBn#1`$mnh?z??<%b>d z-VRLa*hV%e1JPgv{O87p;u+eeV}cu))H5K(=-`tss0-mk4t?Dl!Nf!YX#%1@MDvC@ z4_T$RfUvW0IW?6_&TT4hibgy$a3!Ux6P)sizlhE=%D*J^4TRLHN7@Y}(1dbrQv#UKjC2KX<7A#^81r*+ zj+d3v+>c(Z$5<<95O*4h2NEg335@!0`tN69=l&=Dn>qUa{<~fF_VeGF@ZGuLuDk^Iy#?*}x$o*Pao@Kk zxbJTd=)O0>d?&f@FdB%vZ*qzhwT`fqz2 z&i%KCg>Li^>V1yc3;GTB85n!C*=L`!OA2 z+<%j5X`Y_@ZycQ`EeapZOz_{cfQYYU5&A&>`wr@>@ZTH$7yS2*=l^T|o9UCAw*LN= zx2*@|f3N?(7!?0q{(ILSH158F|CX@26gYW#Fx(r`Euq#iGyYjyPF~OBraaT@XOKW|R z42p|4#U1V%po355CGjN`Lb4FjY&}vrYn;1sIA#i$qEiX=26E+>0kw5KRk}c5>FNZ^ zPZIhPLOMpfY?{9x!YC)X^4ozM$2jym>UfeXzf_O0g<*JDprN^P`qmp;ZtnBvc>abx z9)d$s61^lxn|u5PxfgI}!y9rqG?TUb4*rVVH|hL7y&yNTsib1ZoM86N4)KEA3OtXk zb~*X#3wHi9?ZKN-^;Fg}Y%XEZc?jN+i@zX;r=m>l{WhF+M(L)pP)DpaOufz+|17~~ z2m#;b+K(METIZp2IBaR0o)@Ew;0VOJE32=des_z8$54uaQoTN@f4`3R?-hOj%6b1T zAFO}!Iv>#CfLE>_sE<3TgE-B5;sEPoyHc@T&A?)#=T6a83zp7-v8x@S16~jjy)C`A zuebleaG|$HupP+ymDJx`wElt)Cjx4lSg$ws;j?~ULH*XP9|zFzD>#aiiIE)dF2i5E z{`dyium&CU{-eC+92jZ4Z-?6?Z_Gh*rL_nPEbjqB3C=cjpTp&hMI(C=4pK6?(ZPP- zZqH#S4q@E^ZI9AHe1?aH6oV5>ID8ue?@3P1TD}}xeWW;0n(hL=zGd|uE}Rn_rIu9e zo)a8-r{keh^rEG_?rN;0mEgeUqjY|%1P9@1bwF;(#d`$Mr_))>+Dg=&4pJt3$^vp9 zikQK-!&Bl^amr@MU0bMW#sgNb9wPSY!5%d0{lY$3FL{p1`k{7uKeRoCUVa1>M|+s= zAb=O-jo2Nd;$Pq< zIIDv?fc*=aMGMhq?1FTE6M711;7HM9*jC2k^nKcUrX~d^Sg%&pom2}$7QC;+(sVX! z*)EK>a^fxijwv$dMrF}1b#Xe4Kpp@}dn&z?$(ByE^~RP`?0P9Fd{;O)jfNu+D--PF zuHb{pzD1Fa@N_>u?*>i%{+#xDOkQL+N?4dfM-vxZV?;=F6gta}Ci3rc%D!a) zsMi-!;l`msD;-QcU+foQ0|79+NQ`5Ny~WEu_F>M^X}u=Aq3sXhMs9&d?`7|}k46@6 zqj*oUcViR-zh6CFZdt)jBZlA2@P5o*q(6zj=E9QL{k9XNEDPsu(bl${?qd^T6Z zA>@{u4AFn^=MGv$wros^u3}kyT9hp!#oZ+u%l7yo44PAcDun@fPbB34G z9Xn?@3U^8R!xp_Wn~Ej(B-4I+A-HMf#rUG)=SuL~hR7(+p?fU7_D18g(RrTKoSjQ= z8z|;|%RVNLa@T?_Owy+P-LJR)024Oy7i{?nJN;3nH)in+f9T|QD>C!mTm2sq8+|m1DczM&I9;f#=->}Ye z2FI)zYn0|I!SR&Nb&flPUWL!3lIM*K|1}Bxi2D+4z16A0Y2e6O%o-c{PwG70F85$Z zIPq1iK70Gw7AP<%v2K7TgOnmZ>py<{lB(JU2_NoXY`kmyie(Foch%I<&jlV;~F}2jEiAOQ|-n+sMJV#syzvR>#lGc>1P6rM1U&w6)q~TG%mrH{Hq#` zHFc~AY)D4q^!kST8M@2pt~c_Z3NS9OaW66Aw*iccJZ__VNfi(pU2d&@W7X37WmT00 zLx&pa8o$D5wAEA7><0ska9TU)ibyw+H;q`a}b!d=yu3tP+!e7@!$wf4I z0vJ=52K;cuVvRVbI1mJ;V+f4qj;^1AXyt^m}6 zi>5VZK<)j;MVL8g9GY6rXC?c^4Nd=&`07)muTEv~{#Do1RWf}vLXC9>q(A?BqSTWK zB9p;>T7-!^nLql?6ZFgIs;a05ae+9f{OG4d;yN|JI6${OHI0x>Bj`0&8tdwf4UJW> zH*OLT_+;8f)5SQ+7-v$R^7+Fsm?; zNl8yHK4~-!&`nKE@7cWhGD;f%u89M4ua&cDGB660Eb!v9DUN2MVIVN(yx@F5ylcNA z-gRFQZ^Bo^yZ%e?m@OE*C-HtH;`QsvAb9Q`RdoxLGb$Z6nJ`bR^GVS zvlJ>FS42^s2xr!?7BJX3aoK6MO)}m#=N8*s$DMYvk4wwl6-#I;b5~SQLC6A60~wc9 zHM-yq|y~y!p7ZuZgJeJ2(x=$S-ufeGdi`)J1lgpFyT0N?p{%@%NujnVY zr?pFM)8dHMZ;g(YYW0%y8eF6Euga70wR&3n|I_;aihgo?TD#PDI$HDpd;kBp<^Mk& zzkfBp$>Xh!JB@uN{)?+gq!y7HMVc#84V9Xsi^N73sSmCu_E(ZDA~lNi>*{?{{(n+* zk|FuJDD_7A?aa$Df;~^fV$Hbk_(3f8Jkk$;5{uoAwCkrhQVR`O|Fc*u4{0t|&YO^K zK>8$7%O7L0y#&X`To2Mxq?u6kF50L=YJ4FUTZps)>3XCg?3;EV?ZCFX5n@`1133*y zJ6?*#LP&dX_IoT8d0{*1AvNxZ#Wov8(M0qMdB=pwa5W3etu52HWO@bw=74`~2Q@;eX!uW3lr|2GeqK*QHF$$y=K` zEyoy4o0c>7(R6E0;hGFvPLX$rBc~@b)s#9krwA}>&RF087j>rPWLk%zI`Q*3{_h2! zzelQFmAH8h{~MqKo*dltwPUAt?9`4e-i|G&H07TIwxSG6?Hq!V>4UdF68&xdEspbR zjU%0m|Fl*wVJ)40OMu#6n_|z&3sOHHO+#PSP(QsHDI168jJ0b0vgc&lwSLv2{zB+z z2dZlq_16b@9(D>RYCxpa-j4yd0RAw+(cYseN>1LIR9lYGo0ei9nv>^ba+@>EihC=& zw^3Vk5#4{H{(6nBEr%Jys{ua-_=|umgvjX5jMH5jC&h+?@sW@I?gc&_Yv%oSP`{OU zzae+@8}jb!H^!6ooAjd+^&{B$rEft~{ektvO8PMqD3z2V{iHlNX-SQjRgnl?FDC3R5tm_h-<18a`(ud~`K;u~_)uK#$}_Ut@X_zK*{4D8cTexFHVCK9d*y0LJZjCyY*Yv+~s_XV!xI zoX1gKbP#LrG=5B;DMvMdUJcNnQBL1DCEj&<4}0WIYe=$Rg#SM9n}J^%$7l8qHrktp zkrJkpk2m3ugdCm*{=7K;O*F3t#kT=}FYqS_e%H`E^kP00rnGYM)|^bHo$w)`=>~q} zgIMe?qL2Q?@r}?c;s)rP8!nGu0YC3U#2$nXdETrEgR=O)73H_1yo$=1eP#O4=NA?7 ziwfD-k{nCzK)#pxi)`4dCeWd7e0_Z_fv+X-wFJJFz}FJ^S^{57;A;tdErG8k@U;ZK zmcZ8%_*w%0dlJ}iu7x$;BvOqNTAHOxOS5@a3JtZeyWt{#tcvF^5c%A-3)$U8B2P<} zbX~|3DNmHsx(;1hIlhQcPx&WPER;xCl44g^x`m}!a$(o@6bnnW^8nKYgM76V>l&<7 zlFk#UmSBmJU+WjLR9lmHQQXk_HeFcyVAuH~&CIm0I}QHy5T4igUdT!%No<$I+sC0+ z)}JK;9|vw(UXv%bT39|`lnXNd*OReA{>cp;A8KKsjA1*wYZ}J^l2qWjf2q5C5mI*}PnT$SHFY@Z z*dP_u)w`<-tkWFh-Q|l#ZgHKbV3DV$wsL$;rBpzMP6L-$4X=Fi3vxh)oSF-%>0hDZ!R$sF}`NF_W6ZHhScsm;Yy(lN!rsXyJwnWso zi2BL=3$XM6Zb+tDea)UeE$S~6h+6x}{r4r+*X(nqK-BCx)hC~oTz@TKBoob_X#OlD z9E#?rfWofi@mB%W*Y6r?VR&7lepiyf*(ND4wDj?$`XOPLLc+mbdj}&I|D)B@0Q91m zzJ1OA9;@OQSsJ29llk8OIMvtWFI8KR!&S|bo*bTPe~sFWNS{WkuixXgu#z5O9_Xxv z{z`6tBMSBP3zu0Kdf_r&Yo0b>JR2WBk(ENYAr>`%uEiU%Wb1(hnyUvwhxx@Knh? zAUrJ|hwF)@!mDi`5I;lG{7@qP5J~ediSSHG^BalqEJ^bRiSVJ4X6F;(!{W~)iSTTx zYp6vJV)v=ia7nYb`odIL6wQt%!eJ>i`=~2Og*Dggo(_z09U*DEWrKc2a-X_2=khJ-z1EXKbUXjnM zG#nJusQfG0l>KMpwYKUVOg*@a&+c>i(SDd=oSqQ8gX_t%Hd0UxMeX9b-O zLFf0#)0G1T4De+1bIj}#jy8|MFOW7Q$&J3{N&K%*f{zpMrX=`v0^X1WpTyv3w^6h! zjNw#)-;snrQ^32D;3a|%eI=GI&Fs;6OycwTB>aT}9!i1_rVsSPl?Kemrd6CiYXpB> z4BlT)sC*##uLiy(ozrigu4i=m&&U4|_{sDAIfmbVK5hp59Oz+Bm4zCL$7S^Me&;Yq z;-3!z9|8G9lH@=?!!i(lY!G-J#*NywTw!4iJS>{IjKLGzq#T`{G4=;b3k03685UN` z&Pd^o&gc=Jxk-GkV08N1AFsgg5%@x#CHlhj!gF|i#Z&zWhOVYE0;L|7j2BNbI zaN;vBiO=^1{iczeK070dHa-PB7xq)@muOZxISBpXaP}l;=`v0yC@P%K;Qjs1#SE@d z?MqFA!0DrbL_c>br_avNq1s#lZz|_-ry#XJz(XbuXJ-mgb{~TaBwa#hB1t~IN%C1Y z2>vex{SKj569p~$O4C5{-!ce%kDyanW?>ZA*)8044T4XfZX!8^Dmgwo3kCe4P$U{J zN$}5z;m`Si6MpGrj?d060)8=rYgm1$32diWnsANY$@*U z(%>Z=&d%HcUM1k`9URWi_5n`k#);3SMI6q~gaN)nz>NYv4=}o#03Sh5IMo)GN0wdd z7#v>sv4t$J!GC}oqF*@8!r<)8B<_AH@G}Lz=Et8E_)WrIiN{W96N57n34dN61pdCD zvtG;#b_NiUaN5CgBxX9>|Ie;^MlJwy&K}U-}+1Yl~TQ~@v2L%4Yu@*+1 zot4I&D&U2eb9e_Um89xT^28#KTvRe(S!+c0OhWe=w)tRWSYP-0GqCpDjMA`w+Ek#u8_*gW=+4P%;}gr zudGbM#}}#=*SN4$UFKd|R#A)Z8n~nZKxJi>^<|4|>lc;RmQ}jz8(n4Po)wbzg@DR} ziRK%w1?2&d%4j8;uPc{ft+?@iiLXRg;?oHCqlzw9Mhn;psM=ef5u|nO*pt zg0$#fx0 zQm`}Q7Hf&U%s$%&;c!W5_X*5ZN@cb?W?M@f(}ATcVeh|7Wiy>~rdge3b7st#YoAv( z&pOR%Cvvqliz>=0TplJ91EdzTw8Fx|+5Sh_}e=>dSywPM?fOL@aa6D=F(6?|CKDX|(5+<2`cr6$E_#fPZTv zu^KJ+m+@|~_siLL03`Nqe0?G&;{@MQsAli7Czhc@<&}vbG**+uV!{jgQdt$-YN&=* zx{^BGrwCk>*mQx|66u!_*A@4cRV=x;jJ_h#S2{s_`+>iIU+#hu4e)h|YJAYc)mMoI zhYNsx`eJF-QdgBbv3N0*cTs(#Tf(poG*m>fBC!fyi7wLyk7);!blKAKWYKUA=_3#r zX5E9VrLOY7_S&@pAMbk&zFDX*)f@fQ7Ma%A1&U$bBm>HDw+ebj=1 zpc`e5IiQ6hEAzOjDy14%Swl?&*Bp#_{o-n9cU=`JuTIZtW=QT znAa}JgRf#FBlLZG1hxcokn1I?VFQgmVxVzLjFV`g;ftwzwHS~j2FkF5CF+y3!F2<^ zFygKzed$BJu3$p)hf#cRTW42I?l e63hk70}zLJ>l<7WvwuQ~_=ixSC+J{eqyGmtTEUqB diff --git a/tools/nauty25r9_unix/catg.c b/tools/nauty25r9_unix/catg.c deleted file mode 100644 index 25bbc2f..0000000 --- a/tools/nauty25r9_unix/catg.c +++ /dev/null @@ -1,175 +0,0 @@ -/* catg.c version 1.2; B D McKay, Mar 14 2011 */ - -#define USAGE "catg [-xv] [infile]..." - -#define HELPTEXT \ -" Copy files to stdout with all but the first header removed.\n\ -\n\ - -x Don't write a header.\n\ - In the absence of -x, a header is written if\n\ - there is one in the first input file.\n\ -\n\ - -v Summarize to stderr.\n" - -#include "gtools.h" - -/***********************************************************************/ - -static FILE* -openfile_head(char *filename, char **header) -/* Open the file for reading and return a FILE*. If open fails, or - the header is malformed, write a message and return NULL. Set - *header to point to the header string (statically allocated). - A filename of NULL or "-" means stdin. */ -{ - int c,i; - char *actname; - FILE *f; - DYNALLSTAT(char,head,head_sz); - - if (filename == NULL || strcmp(filename,"-") == 0) - { - f = stdin; - actname = "stdin"; - } - else - { - f = fopen(filename,"r"); - actname = filename; - } - - if (f == NULL) - { - fprintf(stderr,">E catg: can't open file %s\n",actname); - return NULL; - } - - DYNALLOC1(char,head,head_sz,100,"catg"); - - c = getc(f); - if (c == '>') - { - i = 0; - head[i++] = c; - - c = getc(f); - if (c != '>') - { - fprintf(stderr,">E catg: bad header in %s\n",actname); - fclose(f); - return NULL; - } - head[i++] = c; - - do - { - c = getc(f); - if (c == EOF) - { - fprintf(stderr,">E catg: bad header in %s\n",actname); - fclose(f); - return NULL; - } - - if (i >= head_sz-1) - DYNREALLOC(char,head,head_sz,head_sz+100,"catg"); - head[i++] = c; - } - while (c != '<' || head[i-2] != '<'); - - head[i] = '\0'; - } - else - { - ungetc(c,f); - head[0] = '\0'; - } - - *header = head; - - return f; -} - -/***********************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*head; - FILE *infile; - int nfiles,i,j; - char *arg,sw; - boolean vswitch,xswitch; - boolean badargs; - char buff[1024]; - size_t nr; - DYNALLSTAT(char*,filename,filename_sz); - - HELP; - - DYNALLOC1(char*,filename,filename_sz,200,"catg"); - - xswitch = vswitch = FALSE; - - nfiles = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('v',vswitch) - else SWBOOLEAN('x',xswitch) - else badargs = TRUE; - } - } - else - { - if (nfiles >= filename_sz) - DYNREALLOC(char*,filename,filename_sz, - filename_sz+200,"catg"); - filename[nfiles++] = arg; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - for (i = 0; i < (nfiles == 0 ? 1 : nfiles); ++i) - { - infilename = (nfiles == 0 ? NULL : filename[i]); - infile = openfile_head(infilename,&head); - if (infile == NULL) ABORT("catg"); - - if (i == 0 && !xswitch) fprintf(stdout,"%s",head); - - while ((nr = fread(buff,1,1024,infile)) > 0) - { - fwrite(buff,1,nr,stdout); - if (ferror(stdout)) - { - fprintf(stderr,">E catg: error in writing to stdout\n"); - ABORT("catg"); - } - } - if (ferror(infile)) - { - fprintf(stderr,">E catg: error in reading from %s\n", - infilename == NULL ? "stdin" : infilename); - ABORT("catg"); - } - fclose(infile); - } - - if (vswitch) { } - - exit(0); -} diff --git a/tools/nauty25r9_unix/changes24-25.txt b/tools/nauty25r9_unix/changes24-25.txt deleted file mode 100644 index 6a55f1d..0000000 --- a/tools/nauty25r9_unix/changes24-25.txt +++ /dev/null @@ -1,122 +0,0 @@ - -Changes from nauty 2.4 to nauty 2.5 ------------------------------------ - -* Add Traces. The main files are traces.h and traces.c, but - many changes were made to dreadnaut.c and nausparse.c also. - -* Allow thread-safe storage if requested by configure --enable-tls - and available. This allows parallel running of nauty and Traces - in separate threads. - -* The makefile now creates static libraries like nauty.a in - addition to object files like nauty.o. - -* Remove all use of types permutation, nvector, np2vector, shortish. - These are now int. - -* Add schreier.h, schreier.c and the optional use of the random - Schreier method in nauty. These are also used in Traces, but - are not optional there. - -* Add large-file support to all programs, assuming it is available. - Now there is no longer a 4GB limit on files read or written on - 32-bit systems. - -* Use gcc extensions like __builtin_clz() if available and not - disabled by configure --disable-clz. - Use FIRSTBITNZ instead of FIRSTBIT if the argument is certain - to be nonzero. - -* New macros defined in nauty.h: - COUNTER_FMT - PRINT_COUNTER - SETWORDSNEEDED - ADDONEARC - ADDONEEDGE - EMPTYGRAPH - -* The options structure has a new boolean field schreier. - -* New procedures: - densenauty() in naugraph.c - simplified dense graph interface - sparsenauty() in nausparse.c - simplified sparse graph interface - writegroupsize() in nautil.c - write two part group size - copy_sg() in nausparse.c - make a copy of a sparse graph - - densenauty() and sparsenauty() are now the recommended ways to - call nauty from a program. See the sample programs in the package. - -* Use quicksort in place of shell sort in many places. This is - implemented in the file sorttemplates.c that can be used in any - applications. - -* Apply the const attribute more liberally across the code. - -* The sparsegraph fields nde and *v changed type from int to size_t. - This is to allow more than 2^31 edges on 64-bit hardware. - -* sparsegraph.h and sparsegraph.c: - Corrected definition of SG_DECL in sparsegraph.h. (The erroneous - definition would have worked but generated warnings.) - Added DEFAULTOPTIONS_SPARSEDIGRAPH. - Added comparelab_tr(), testcanlab_tr(), updatecan_tr() for Traces. - -* gtools.h and gtools.c: - Now gtools.h is made from gtools-h.in by configure. - Updated G6LEN() to work for larger graphs. - Use large-file functions fseeko(), ftello() if possible. - -* Most tools now use the random number generator in naurng.c rather - than that in rng.c. - -* gutils.h, gutil1.c and gutil2.c: - New procedures maxcliques(), indpathcount1(), indcyclecount1(), - indcyclecount(). - -* Invariants: - Corrected getbigcells(), making a small change to invariants - celltrips, cellquins and refinvar. - -* dreadnaut: - Sparse nauty and Traces now incorported. - New commands: A, G, F, FF, sr, O, OO, P, PP, S, V - w command is now in units of 2*m. - Command-line can run commands using -o. - M command is extended; now applies to i as well as x. - Implement ANSI controls if requested. - File names for > and < can be given in "..." to allow spaces. - -* Updates to utilities: - listg: add -b (Bliss format), -G (GRAPE format) and - -y/-Y (dotty format), -H (HCP format) - labelg: add -t (Traces) and -i16 (refinvar) - countg/pickg: add -m (vertices of min degree), - -M (vertices of max degree), -H (induced cycles), - -K (number of maximal independent sets) - genrang: add -t (tree) - genbg: add -A (antichain) - The makefile can also make genbgL which makes larger sizes - directg: add PROCESS feature - shortg: -S (use sparse nauty), -t (use traces), i16 (refinvar) - -* New utilities: - ranlabg: randomly relabel graphs - linegraphg: compute linegraphs - subdivideg: compute subdivision graphs - watercluster2: orient edges of graphs (by Gunnar Brinkmann) - -* Version 25r2 fixed a rare error in Traces - Version 25r3 fixed some problems in the configure script - (thanks to Daniel Grayson) - Versions 25r4 and 25r5 fixed other rare errors in Traces - Version 25r6 updated the configuration code. Now it should work - in recent versions of Cygwin under Windows. - Version 25r7 fixed some boundary cases in Traces - (thanks to Geoff Bailey, Shreedhar Hardikar, John Call, Alisa Maas), - also a bug in planarg -p for n >= 65536. - Version 25r8 fixed g++ code in some header files, removed CPUDEFS - from dreadnaut.c and traces.c (already in gtools.h), and - increased workspace in densenauty() and sparsenauty(). - Version 25r9 added a missing PRUNE2 call in genbg.c. You didn't - meet this bug unless you wrote a plugin for genbg.c. diff --git a/tools/nauty25r9_unix/checks6.c b/tools/nauty25r9_unix/checks6.c deleted file mode 100644 index 265d226..0000000 --- a/tools/nauty25r9_unix/checks6.c +++ /dev/null @@ -1,227 +0,0 @@ -/* checks6.c; May 2005 */ - -#define USAGE "checks6 [-p#:#w] [infile [outfile]]" - -#define HELPTEXT \ -" Check a file of graphs, optionally write corrected version\n\ -\n\ - -p# -p#:# \n\ - Specify range of input lines (first is 1)\n\ -\n\ - -w Write corrected graphs (default is not to write)\n\ - A header is written if there is one in the input.\n" - -/***********************************************************************/ - -#include "gtools.h" - -/***********************************************************************/ - -static boolean -seemsbad(char *s) -/* Check graph string for apparent problem, if so, correct it */ -{ - int i,j,k,m,n; - char *p,x,pq; - set *gj; - long ii; - int r,rr,topbit,nb,lastj; - graph g[16]; - - if (s[0] != ':') return FALSE; /* not sparse6 */ - - n = graphsize(s); - if (n != 2 && n != 4 && n != 8 && n != 16) return FALSE; - m = 1; - - stringtograph(s,g,m); - if (g[n-1] != bit[n-1]) return FALSE; - if (g[n-2] == 0) return FALSE; - - g[n-1] = 0; - p = s+2; - - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) {} - topbit = 1 << (nb-1); - k = 6; - x = 0; - - lastj = 0; - for (j = 0; j < n; ++j) - { - gj = GRAPHROW(g,j,m); - for (i = 0; i <= j; ++i) - { - if (ISELEMENT(gj,i)) - { - if (j == lastj) - { - x <<= 1; - if (--k == 0) - { - p++; - k = 6; - x = 0; - } - } - else - { - x = (x << 1) | 1; - if (--k == 0) - { - p++; - k = 6; - x = 0; - } - if (j > lastj+1) - { - for (r = 0, rr = j; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - p++; - k = 6; - x = 0; - } - } - x <<= 1; - if (--k == 0) - { - p++; - k = 6; - x = 0; - } - } - lastj = j; - } - for (r = 0, rr = i; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - p++; - k = 6; - x = 0; - } - } - } - } - } - - if (k != 6) - { - if (k >= nb+1 && lastj == n-2 && n == (1< 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE, - pswitch ? pval1 : 1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (wswitch && (codetype&HAS_HEADER)) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nerr = nin = 0; - if (!pswitch || pval2 == NOLIMIT) - maxin = NOLIMIT; - else if (pval1 < 1) maxin = pval2; - else maxin = pval2 - pval1 + 1; - while (nin < maxin || maxin == NOLIMIT) - { - if ((s = gtools_getline(infile)) == NULL) break; - ++nin; - - if (seemsbad(s)) ++nerr; - if (wswitch) writeline(outfile,s); - } - - fprintf(stderr,">Z %ld graphs read",nin); - if (nerr > 0) fprintf(stderr,"; %ld probable errors",nerr); - else fprintf(stderr,"; NO PROBLEMS"); - if (wswitch) fprintf(stderr,"; %ld graphs written",nin); - fprintf(stderr,"\n"); - - exit(0); -} diff --git a/tools/nauty25r9_unix/complg b/tools/nauty25r9_unix/complg deleted file mode 100644 index c5304fd5e4355852dc59f0cab5959b77bee0b7c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147878 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 C#~J+q diff --git a/tools/nauty25r9_unix/complg.c b/tools/nauty25r9_unix/complg.c deleted file mode 100644 index b185208..0000000 --- a/tools/nauty25r9_unix/complg.c +++ /dev/null @@ -1,197 +0,0 @@ -/* complg.c version 1.1; B D McKay, Sep 2012. */ - -#define USAGE "complg [-lrq] [infile [outfile]]" - -#define HELPTEXT \ -" Take the complements of a file of graphs.\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -r Only complement if the complement has fewer edges.\n\ - -l Canonically label outputs.\n\ - -q Suppress auxiliary information.\n" - -/*************************************************************************/ - -#include "gtools.h" - -/**************************************************************************/ - -void -compl(graph *g, int m, int n, graph *h) -/* h := complement of g */ -{ - int i,j; - setword *gi,*hi; -#if MAXN - set all[MAXM]; -#else - DYNALLSTAT(set,all,all_sz); - DYNALLOC1(set,all,all_sz,m,"complg"); -#endif - - EMPTYSET(all,m); - for (i = 0; i < n; ++i) ADDELEMENT(all,i); - - gi = (setword*) g; - hi = (setword*) h; - - for (i = 0; i < n; ++i) - { - for (j = 0; j < m; ++j) hi[j] = gi[j] ^ all[j]; - DELELEMENT(hi,i); - gi += m; - hi += m; - } -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - boolean dolabel,badargs,restricted,quiet; - int j,m,n,argnum; - int codetype,outcode; - graph *g; - long ii,ned; - nauty_counter nin; - char *arg,sw; - static graph *gq; - double t; -#if MAXN - graph gc[MAXN*MAXM],h[MAXN*MAXM]; -#else - DYNALLSTAT(graph,gc,gc_sz); - DYNALLSTAT(graph,h,h_sz); -#endif - - HELP; - - infilename = outfilename = NULL; - dolabel = badargs = FALSE; - restricted = quiet = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('r',restricted) - else SWBOOLEAN('l',dolabel) - else SWBOOLEAN('q',quiet) - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A complg"); - if (restricted || dolabel) - fprintf(stderr," -"); - if (restricted) fprintf(stderr,"r"); - if (dolabel) fprintf(stderr,"l"); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - if (dolabel) nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; -#if !MAXN - DYNALLOC2(graph,gc,gc_sz,n,m,"complg"); -#endif - - if (restricted) - { - ned = 0; - for (ii = (long)n*m; --ii >= 0; ) ned += POPCOUNT(g[ii]); - if (ned+ned > (long)n*(n-1)) - { - compl(g,m,n,gc); - gq = gc; - } - else - gq = g; - } - else - { - compl(g,m,n,gc); - gq = gc; - } - if (dolabel) - { -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"complg"); -#endif - fcanonise(gq,m,n,h,NULL,FALSE); - gq = h; - } - if (outcode == SPARSE6) writes6(outfile,gq,m,n); - else writeg6(outfile,gq,m,n); - FREES(g); - } - t = CPUTIME - t; - - if (!quiet) - fprintf(stderr,">Z " COUNTER_FMT - " graphs converted from %s to %s in %3.2f sec.\n", - nin,infilename,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_unix/config.guess b/tools/nauty25r9_unix/config.guess deleted file mode 100644 index b79252d..0000000 --- a/tools/nauty25r9_unix/config.guess +++ /dev/null @@ -1,1558 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright 1992-2013 Free Software Foundation, Inc. - -timestamp='2013-06-10' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that -# program. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). -# -# Originally written by Per Bothner. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD -# -# Please send patches with a ChangeLog entry to config-patches@gnu.org. - - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright 1992-2013 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -case "${UNAME_SYSTEM}" in -Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu - - eval $set_cc_for_build - cat <<-EOF > $dummy.c - #include - #if defined(__UCLIBC__) - LIBC=uclibc - #elif defined(__dietlibc__) - LIBC=dietlibc - #else - LIBC=gnu - #endif - EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - ;; -esac - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:Bitrig:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - aarch64_be:Linux:*:*) - UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi - else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; - crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} - exit ;; - frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } - ;; - or1k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - or32:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} - exit ;; - ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} - exit ;; - ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} - exit ;; - x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - x86_64:Haiku:*:*) - echo x86_64-unknown-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc - fi - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; - NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; - x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx - exit ;; -esac - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/tools/nauty25r9_unix/config.status b/tools/nauty25r9_unix/config.status deleted file mode 100644 index b6bbd40..0000000 --- a/tools/nauty25r9_unix/config.status +++ /dev/null @@ -1,951 +0,0 @@ -#! /bin/bash -# Generated by configure. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=${CONFIG_SHELL-/bin/bash} -export SHELL -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -# Files that config.status was made for. -config_files=" makefile:makefile.in nauty.h:nauty-h.in naututil.h:naututil-h.in gtools.h:gtools-h.in" - -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to the package provider." - -ac_cs_config="" -ac_cs_version="\ -config.status -configured by ./configure, generated by GNU Autoconf 2.65, - with options \"$ac_cs_config\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='/home/weberrj/Dropbox/MetabolicUniverse/tools/nauty25r9_unix' -srcdir='.' -test -n "$AWK" || AWK=awk -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -if $ac_cs_recheck; then - set X '/bin/bash' './configure' $ac_configure_extra_args --no-create --no-recursion - shift - $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6 - CONFIG_SHELL='/bin/bash' - export CONFIG_SHELL - exec "$@" -fi - -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "makefile") CONFIG_FILES="$CONFIG_FILES makefile:makefile.in" ;; - "nauty.h") CONFIG_FILES="$CONFIG_FILES nauty.h:nauty-h.in" ;; - "naututil.h") CONFIG_FILES="$CONFIG_FILES naututil.h:naututil-h.in" ;; - "gtools.h") CONFIG_FILES="$CONFIG_FILES gtools.h:gtools-h.in" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -cat >>"$tmp/subs1.awk" <<\_ACAWK && -S["LTLIBOBJS"]="" -S["LIBOBJS"]="" -S["edit_msg"]="++++++ This file is automatically generated, don't edit it by hand! ++++++" -S["sort_newparams_ok"]="1" -S["sort_prog"]="sort" -S["have_ansicontrols"]="0" -S["default_wordsize"]="0" -S["have_tls"]="0" -S["ac_cv_tls"]="" -S["stdio_nolock"]="1" -S["threadlib"]="-lpthread" -S["have_pthread"]="1" -S["shortg_or_null"]="shortg" -S["have_clzll"]="1" -S["have_clzl"]="1" -S["have_clz"]="1" -S["have_sigprocmask"]="1" -S["have_sigaction"]="1" -S["have_fseeko"]="1" -S["have_fork"]="1" -S["have_setenv"]="1" -S["have_putenv"]="1" -S["have_popen"]="1" -S["have_wait"]="1" -S["have_pipe"]="1" -S["have_perror"]="1" -S["have_getrusage"]="1" -S["have_gettimeofday"]="1" -S["have_time"]="1" -S["have_times"]="1" -S["have_isatty"]="1" -S["have_const"]="1" -S["testprogs"]="dreadtest dreadtestS dreadtestS1 dreadtest4K dreadtest1 dreadtestW dreadtestW1 dreadtestL1 dreadtestL" -S["lok"]="1" -S["MORECFLAGS"]="" -S["ac_cv_sizeof_long_long"]="8" -S["ac_cv_sizeof_long"]="8" -S["ac_cv_sizeof_int"]="4" -S["has_math_inf"]="1" -S["setenv_dec"]="1" -S["putenv_dec"]="1" -S["popen_dec"]="1" -S["fdopen_dec"]="1" -S["ftell_dec"]="1" -S["malloc_dec"]="1" -S["have_pid_t"]="1" -S["header_signal_h"]="1" -S["header_pthread_h"]="1" -S["header_errno_h"]="1" -S["header_sys_types_h"]="1" -S["header_sys_wait_h"]="1" -S["header_string_h"]="1" -S["header_stdlib_h"]="1" -S["header_unistd_h"]="1" -S["header_stddef_h"]="1" -S["EGREP"]="/bin/grep -E" -S["GREP"]="/bin/grep" -S["CPP"]="gcc -E" -S["ac_cv_sys_file_offset_bits"]="0" -S["OBJEXT"]="o" -S["EXEEXT"]="" -S["ac_ct_CC"]="gcc" -S["CPPFLAGS"]="" -S["LDFLAGS"]="" -S["CFLAGS"]=" -O4" -S["CC"]="gcc" -S["host_os"]="linux-gnu" -S["host_vendor"]="unknown" -S["host_cpu"]="x86_64" -S["host"]="x86_64-unknown-linux-gnu" -S["build_os"]="linux-gnu" -S["build_vendor"]="unknown" -S["build_cpu"]="x86_64" -S["build"]="x86_64-unknown-linux-gnu" -S["target_alias"]="" -S["host_alias"]="" -S["build_alias"]="" -S["LIBS"]="" -S["ECHO_T"]="" -S["ECHO_N"]="-n" -S["ECHO_C"]="" -S["DEFS"]="-DPACKAGE_NAME=\\\"\\\" -DPACKAGE_TARNAME=\\\"\\\" -DPACKAGE_VERSION=\\\"\\\" -DPACKAGE_STRING=\\\"\\\" -DPACKAGE_BUGREPORT=\\\"\\\" -DPACKAGE_URL=\\\"\\\" -DHAVE_SYS_WAIT_"\ -"H=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYP"\ -"ES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SIGNAL_H=1 -DHAVE_STDDEF_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_STD"\ -"LIB_H=1 -DHAVE_STRING_H=1 -DHAVE_ERRNO_H=1 -DHAVE_PTHREAD_H=1 -DSIZEOF_INT=4 -DSIZEOF_LONG=8 -DSIZEOF_LONG_LONG=8 -DHAVE_FORK=1 -DHAVE_VFORK=1 -DHAV"\ -"E_WORKING_VFORK=1 -DHAVE_WORKING_FORK=1" -S["mandir"]="${datarootdir}/man" -S["localedir"]="${datarootdir}/locale" -S["libdir"]="${exec_prefix}/lib" -S["psdir"]="${docdir}" -S["pdfdir"]="${docdir}" -S["dvidir"]="${docdir}" -S["htmldir"]="${docdir}" -S["infodir"]="${datarootdir}/info" -S["docdir"]="${datarootdir}/doc/${PACKAGE}" -S["oldincludedir"]="/usr/include" -S["includedir"]="${prefix}/include" -S["localstatedir"]="${prefix}/var" -S["sharedstatedir"]="${prefix}/com" -S["sysconfdir"]="${prefix}/etc" -S["datadir"]="${datarootdir}" -S["datarootdir"]="${prefix}/share" -S["libexecdir"]="${exec_prefix}/libexec" -S["sbindir"]="${exec_prefix}/sbin" -S["bindir"]="${exec_prefix}/bin" -S["program_transform_name"]="s,x,x," -S["prefix"]="/usr/local" -S["exec_prefix"]="${prefix}" -S["PACKAGE_URL"]="" -S["PACKAGE_BUGREPORT"]="" -S["PACKAGE_STRING"]="" -S["PACKAGE_VERSION"]="" -S["PACKAGE_TARNAME"]="" -S["PACKAGE_NAME"]="" -S["PATH_SEPARATOR"]=":" -S["SHELL"]="/bin/bash" -_ACAWK -cat >>"$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} - ac_datarootdir_hack=' - s&@datadir@&${datarootdir}&g - s&@docdir@&${datarootdir}/doc/${PACKAGE}&g - s&@infodir@&${datarootdir}/info&g - s&@localedir@&${datarootdir}/locale&g - s&@mandir@&${datarootdir}/man&g - s&\${datarootdir}&${prefix}/share&g' ;; -esac -ac_sed_extra="/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -} - -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - - - - esac - -done # for ac_tag - - -as_fn_exit 0 diff --git a/tools/nauty25r9_unix/config.sub b/tools/nauty25r9_unix/config.sub deleted file mode 100644 index 85a159e..0000000 --- a/tools/nauty25r9_unix/config.sub +++ /dev/null @@ -1,1791 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright 1992-2013 Free Software Foundation, Inc. - -timestamp='2013-09-05' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that -# program. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). - - -# Please send patches with a ChangeLog entry to config-patches@gnu.org. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright 1992-2013 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 \ - | or1k | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none - ;; - xscaleeb) - basic_machine=armeb-unknown - ;; - - xscaleel) - basic_machine=armel-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tile*) - basic_machine=$basic_machine-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - c8051-*) - os=-elf - ;; - hexagon-*) - os=-elf - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or1k-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/tools/nauty25r9_unix/config.txt b/tools/nauty25r9_unix/config.txt deleted file mode 100644 index 98f66f0..0000000 --- a/tools/nauty25r9_unix/config.txt +++ /dev/null @@ -1,21 +0,0 @@ -======================================================================== -| In order to compile nauty on systems which include a Unix-like shell -| (which includes MacOSX and Cygwin), you must first run the script -| "configure". Usually this can be done with the command -| ./configure -| -| The configure script will create custom versions of these files: -| gtools.h makefile naututil.h nauty.h -| Afterwards you can use "make" to compile everything. -| -| In case you can't run shell scripts, or configure doesn't work for -| some reason, you need to adjust the configuration by hand: -| For gtools.h, naututil.h, and nauty.h, make sure definitions near the -| start of the file (like HAVE_UNISTD_H and SIZEOF_INT) are all correct. -| For makefile, copy the file makefile.basic to makefile, then check the -| definitions near the start. -| -| Please notify Brendan McKay of any problems with -| the configuration and of any hints you might have for other people with -| similar setups as you have. -======================================================================== diff --git a/tools/nauty25r9_unix/configure b/tools/nauty25r9_unix/configure deleted file mode 100644 index 9e1cb21..0000000 --- a/tools/nauty25r9_unix/configure +++ /dev/null @@ -1,6868 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.65. -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= - -ac_unique_file="dreadnaut.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='LTLIBOBJS -LIBOBJS -edit_msg -sort_newparams_ok -sort_prog -have_ansicontrols -default_wordsize -have_tls -ac_cv_tls -stdio_nolock -threadlib -have_pthread -shortg_or_null -have_clzll -have_clzl -have_clz -have_sigprocmask -have_sigaction -have_fseeko -have_fork -have_setenv -have_putenv -have_popen -have_wait -have_pipe -have_perror -have_getrusage -have_gettimeofday -have_time -have_times -have_isatty -have_const -testprogs -lok -MORECFLAGS -ac_cv_sizeof_long_long -ac_cv_sizeof_long -ac_cv_sizeof_int -has_math_inf -setenv_dec -putenv_dec -popen_dec -fdopen_dec -ftell_dec -malloc_dec -have_pid_t -header_signal_h -header_pthread_h -header_errno_h -header_sys_types_h -header_sys_wait_h -header_string_h -header_stdlib_h -header_unistd_h -header_stddef_h -EGREP -GREP -CPP -ac_cv_sys_file_offset_bits -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_largefile -enable_clz -enable_tls -enable_wordsize -enable_ansicontrols -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-largefile omit support for large files - --disable-clz Disable clz extensions - --enable-tls Enable thread-local variables - --enable-wordsize=value Override default WORDSIZE choice - --enable-ansicontrols Enable ANSI terminal control sequences - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to the package provider. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.65 - -Copyright (C) 2009 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_mongrel - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_header_compile - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_type - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 &5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - -} # ac_fn_c_check_func -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done -done -if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - -user_cflags="$CFLAGS" -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CFLAGS=$user_cflags -MORECFLAGS="" - -# Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then : - enableval=$enable_largefile; -fi - -if test "$enable_largefile" != no; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -$as_echo_n "checking for special C compiler options needed for large files... " >&6; } -if test "${ac_cv_sys_largefile_CC+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF - if ac_fn_c_try_compile "$LINENO"; then : - break -fi -rm -f core conftest.err conftest.$ac_objext - CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_largefile_CC=' -n32'; break -fi -rm -f core conftest.err conftest.$ac_objext - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -$as_echo "$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if test "${ac_cv_sys_file_offset_bits+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_file_offset_bits=64; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -$as_echo "$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF -;; -esac -rm -rf conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } -if test "${ac_cv_sys_large_files+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=no; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _LARGE_FILES 1 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_sys_large_files=1; break -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -$as_echo "$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF -;; -esac -rm -rf conftest* - fi -fi - -if test x"$ac_cv_sys_file_offset_bits" = xno ; then - ac_cv_sys_file_offset_bits=0 -fi - - -if test x"$user_cflags" = x"" -o x"$user_cflags" = x-m32 ; then - if test "$CC" = "icc" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -O3 flags" >&5 -$as_echo_n "checking if $CC supports -O3 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-O3" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -O3" - else - : - fi; - if test x"$ac_cv_try_cflags_ok" = x"no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -O2 flags" >&5 -$as_echo_n "checking if $CC supports -O2 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-O2" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -O2" - else - CFLAGS="$CFLAGS -O" - fi; - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -O4 flags" >&5 -$as_echo_n "checking if $CC supports -O4 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-O4" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -O4" - else - : - fi; - if test x"$ac_cv_try_cflags_ok" = x"no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -O3 flags" >&5 -$as_echo_n "checking if $CC supports -O3 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-O3" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -O3" - else - : - fi; - if test x"$ac_cv_try_cflags_ok" = x"no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -O2 flags" >&5 -$as_echo_n "checking if $CC supports -O2 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-O2" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -O2" - else - CFLAGS="$CFLAGS -O" - fi; - fi - fi - fi - - if test "$CC" = "gcc" ; then - gccver=`gcc --version 2>/dev/null || echo 0.0.0` - else - gccver=0.0.0 - fi - - case "$host" in - *i686-apple-darwin*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -fast flags" >&5 -$as_echo_n "checking if $CC supports -fast flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-fast" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$MORECFLAGS -fast" - else - : - fi;; - *pentium*solaris*) - ;; - *pentium4*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -march=pentium4 flags" >&5 -$as_echo_n "checking if $CC supports -march=pentium4 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-march=pentium4" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -march=pentium4" - else - : - fi;; - *pentium3*|*i686*|*athlon*|x86*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -march=i686 flags" >&5 -$as_echo_n "checking if $CC supports -march=i686 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-march=i686" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -march=i686" - else - : - fi;; - *pentium2*|*i586*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -march=i586 flags" >&5 -$as_echo_n "checking if $CC supports -march=i586 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-march=i586" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -march=i586" - else - : - fi;; - *powerpc*) - machtype=`/usr/bin/machine 2>/dev/null || echo unknown` - case "$machtype" in - ppc740?) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mcpu=7400 flags" >&5 -$as_echo_n "checking if $CC supports -mcpu=7400 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mcpu=7400" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mcpu=7400" - else - : - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mtune=7400 flags" >&5 -$as_echo_n "checking if $CC supports -mtune=7400 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mtune=7400" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mtune=7400" - else - : - fi;; - ppc745?) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mcpu=7450 flags" >&5 -$as_echo_n "checking if $CC supports -mcpu=7450 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mcpu=7450" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mcpu=7450" - else - : - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mtune=7450 flags" >&5 -$as_echo_n "checking if $CC supports -mtune=7450 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mtune=7450" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mtune=7450" - else - : - fi - case "$gccver" in - *\ 4.[0-9].[0-9]\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports $CFLAGS -fast flags" >&5 -$as_echo_n "checking if $CC supports $CFLAGS -fast flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fast" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - MORECFLAGS="$MORECFLAGS -fast" - else - : - fi;; - esac;; - ppc970) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mcpu=g5 flags" >&5 -$as_echo_n "checking if $CC supports -mcpu=g5 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mcpu=g5" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mcpu=g5" - else - : - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mtune=g5 flags" >&5 -$as_echo_n "checking if $CC supports -mtune=g5 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mtune=g5" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mtune=g5" - else - : - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -fast flags" >&5 -$as_echo_n "checking if $CC supports -fast flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-fast" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$MORECFLAGS -fast" - else - : - fi;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -mpowerpc flags" >&5 -$as_echo_n "checking if $CC supports -mpowerpc flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-mpowerpc" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -mpowerpc" - else - : - fi;; - esac;; - *osf*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -fast flags" >&5 -$as_echo_n "checking if $CC supports -fast flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-fast" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -fast" - else - : - fi;; - *sparcv8*|*sparcv9*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -msupersparc flags" >&5 -$as_echo_n "checking if $CC supports -msupersparc flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-msupersparc" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -msupersparc" - else - : - fi - if test x"$ac_cv_try_cflags_ok" = x"no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -cg92 flags" >&5 -$as_echo_n "checking if $CC supports -cg92 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-cg92" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -cg92" - else - : - fi - if test x"$ac_cv_try_cflags_ok" = x"no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -xcg92 flags" >&5 -$as_echo_n "checking if $CC supports -xcg92 flags... " >&6; } - SAVE_CFLAGS="$CFLAGS" - CFLAGS="-xcg92" - if test "$cross_compiling" = yes; then : - ac_cv_try_cflags_ok=no -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){exit(0);} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_try_cflags_ok=yes -else - ac_cv_try_cflags_ok=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - CFLAGS="$SAVE_CFLAGS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_try_cflags_ok" >&5 -$as_echo "$ac_cv_try_cflags_ok" >&6; } - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - CFLAGS="$CFLAGS -xcg92" - else - : - fi - fi - fi;; - esac -fi - -echo CFLAGS=$CFLAGS -echo MORECFLAGS=$MORECFLAGS - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 -$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } -if test "${ac_cv_header_sys_wait_h+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#ifndef WEXITSTATUS -# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) -#endif -#ifndef WIFEXITED -# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) -#endif - -int -main () -{ - int s; - wait (&s); - s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_sys_wait_h=yes -else - ac_cv_header_sys_wait_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 -$as_echo "$ac_cv_header_sys_wait_h" >&6; } -if test $ac_cv_header_sys_wait_h = yes; then - -$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in signal.h stddef.h unistd.h sys/types.h sys/wait.h stdlib.h string.h errno.h pthread.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -if test x"$ac_cv_header_stddef_h" = x"yes"; then -header_stddef_h=1 -else -header_stddef_h=0 -fi - -if test x"$ac_cv_header_unistd_h" = x"yes"; then -header_unistd_h=1 -else -header_unistd_h=0 -fi - -if test x"$ac_cv_header_stdlib_h" = x"yes"; then -header_stdlib_h=1 -else -header_stdlib_h=0 -fi - -if test x"$ac_cv_header_string_h" = x"yes"; then -header_string_h=1 -else -header_string_h=0 -fi - -if test x"$ac_cv_header_sys_wait_h" = x"yes"; then -header_sys_wait_h=1 -else -header_sys_wait_h=0 -fi - -if test x"$ac_cv_header_sys_types_h" = x"yes"; then -header_sys_types_h=1 -else -header_sys_types_h=0 -fi - -if test x"$ac_cv_header_errno_h" = x"yes"; then -header_errno_h=1 -else -header_errno_h=0 -fi - -if test x"$ac_cv_header_pthread_h" = x"yes"; then -header_pthread_h=1 -else -header_pthread_h=0 -fi - -if test x"$ac_cv_header_signal_h" = x"yes"; then -header_signal_h=1 -else -header_signal_h=0 -fi - - -ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = x""yes; then : - -else - -cat >>confdefs.h <<_ACEOF -#define pid_t int -_ACEOF - -fi - -if test x"$ac_cv_type_pid_t" = x"yes"; then -have_pid_t=1 -else -have_pid_t=0 -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if malloc is declared in stdlib.h or malloc.h" >&5 -$as_echo_n "checking if malloc is declared in stdlib.h or malloc.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])malloc[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - malloc_dec=1 -else - malloc_dec=0 -fi -rm -f conftest* - -if test $malloc_dec -eq 0; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])malloc[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - malloc_dec=2 -else - malloc_dec=0 -fi -rm -f conftest* - -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $malloc_dec" >&5 -$as_echo "$malloc_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if ftell is declared in stdio.h" >&5 -$as_echo_n "checking if ftell is declared in stdio.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])ftell[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - ftell_dec=1 -else - ftell_dec=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ftell_dec" >&5 -$as_echo "$ftell_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if fdopen is declared in stdio.h" >&5 -$as_echo_n "checking if fdopen is declared in stdio.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])fdopen[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - fdopen_dec=1 -else - fdopen_dec=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $fdopen_dec" >&5 -$as_echo "$fdopen_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if popen is declared in stdio.h" >&5 -$as_echo_n "checking if popen is declared in stdio.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])popen[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - popen_dec=1 -else - popen_dec=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $popen_dec" >&5 -$as_echo "$popen_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if putenv is declared in stdlib.h" >&5 -$as_echo_n "checking if putenv is declared in stdlib.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])putenv[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - putenv_dec=1 -else - putenv_dec=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $putenv_dec" >&5 -$as_echo "$putenv_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if setenv is declared in stdlib.h" >&5 -$as_echo_n "checking if setenv is declared in stdlib.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "(^|[^a-zA-Z_0-9])setenv[^a-zA-Z_0-9]" >/dev/null 2>&1; then : - setenv_dec=1 -else - setenv_dec=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $setenv_dec" >&5 -$as_echo "$setenv_dec" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if INFINITY is declared in math.h" >&5 -$as_echo_n "checking if INFINITY is declared in math.h... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#ifdef INFINITY - yes -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : - has_math_inf=1 -else - has_math_inf=0 -fi -rm -f conftest* - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_math_inf" >&5 -$as_echo "$has_math_inf" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 -$as_echo_n "checking size of int... " >&6; } -if test "${ac_cv_sizeof_int+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_int" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (int) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_int=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 -$as_echo "$ac_cv_sizeof_int" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT $ac_cv_sizeof_int -_ACEOF - - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 -$as_echo_n "checking size of long... " >&6; } -if test "${ac_cv_sizeof_long+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (long) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 -$as_echo "$ac_cv_sizeof_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG $ac_cv_sizeof_long -_ACEOF - - - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 -$as_echo_n "checking size of long long... " >&6; } -if test "${ac_cv_sizeof_long_long+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long_long" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "cannot compute sizeof (long long) -See \`config.log' for more details." "$LINENO" 5; }; } - else - ac_cv_sizeof_long_long=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 -$as_echo "$ac_cv_sizeof_long_long" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long -_ACEOF - - - -lok=0 -testprogs="dreadtest dreadtestS dreadtestS1 dreadtest4K" -testprogs="$testprogs dreadtest1 dreadtestW dreadtestW1" - - -if test $ac_cv_sizeof_long_long -eq 8; then - lok=1 - testprogs="$testprogs dreadtestL1 dreadtestL" -else - if test $ac_cv_sizeof_long -eq 8; then - lok=1 - fi -fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -$as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if test "${ac_cv_c_const+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset cs; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *pcpcc; - char **ppc; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - pcpcc = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++pcpcc; - ppc = (char**) pcpcc; - pcpcc = (char const *const *) ppc; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; - if (s) return 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - if (!foo) return 0; - } - return !cs[0] && !zero.x; -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_c_const=yes -else - ac_cv_c_const=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -$as_echo "$ac_cv_c_const" >&6; } -if test $ac_cv_c_const = no; then - -$as_echo "#define const /**/" >>confdefs.h - -fi - -if test x"$ac_cv_c_const" = x"yes"; then -have_const=1 -else -have_const=0 -fi - - -ac_fn_c_check_func "$LINENO" "isatty" "ac_cv_func_isatty" -if test "x$ac_cv_func_isatty" = x""yes; then : - have_isatty=1 -else - have_isatty=0 -fi - - -ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" -if test "x$ac_cv_func_times" = x""yes; then : - have_times=1 -else - have_times=0 -fi - - -ac_fn_c_check_func "$LINENO" "time" "ac_cv_func_time" -if test "x$ac_cv_func_time" = x""yes; then : - have_time=1 -else - have_time=0 -fi - - -ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" -if test "x$ac_cv_func_gettimeofday" = x""yes; then : - have_gettimeofday=1 -else - have_gettimeofday=0 -fi - - -ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times" -if test "x$ac_cv_func_times" = x""yes; then : - have_times=1 -else - have_times=0 -fi - - -ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage" -if test "x$ac_cv_func_getrusage" = x""yes; then : - have_getrusage=1 -else - have_getrusage=0 -fi - - -ac_fn_c_check_func "$LINENO" "perror" "ac_cv_func_perror" -if test "x$ac_cv_func_perror" = x""yes; then : - have_perror=1 -else - have_perror=0 -fi - - -ac_fn_c_check_func "$LINENO" "pipe" "ac_cv_func_pipe" -if test "x$ac_cv_func_pipe" = x""yes; then : - have_pipe=1 -else - have_pipe=0 -fi - - -ac_fn_c_check_func "$LINENO" "wait" "ac_cv_func_wait" -if test "x$ac_cv_func_wait" = x""yes; then : - have_wait=1 -else - have_wait=0 -fi - - -ac_fn_c_check_func "$LINENO" "popen" "ac_cv_func_popen" -if test "x$ac_cv_func_popen" = x""yes; then : - have_popen=1 -else - have_popen=0 -fi - - -ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv" -if test "x$ac_cv_func_putenv" = x""yes; then : - have_putenv=1 -else - have_putenv=0 -fi - - -ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv" -if test "x$ac_cv_func_setenv" = x""yes; then : - have_setenv=1 -else - have_setenv=0 -fi - - -for ac_header in vfork.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" -if test "x$ac_cv_header_vfork_h" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_VFORK_H 1 -_ACEOF - -fi - -done - -for ac_func in fork vfork -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -eval as_val=\$$as_ac_var - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -if test "x$ac_cv_func_fork" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 -$as_echo_n "checking for working fork... " >&6; } -if test "${ac_cv_func_fork_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_fork_works=cross -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* By Ruediger Kuhlmann. */ - return fork () < 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_fork_works=yes -else - ac_cv_func_fork_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 -$as_echo "$ac_cv_func_fork_works" >&6; } - -else - ac_cv_func_fork_works=$ac_cv_func_fork -fi -if test "x$ac_cv_func_fork_works" = xcross; then - case $host in - *-*-amigaos* | *-*-msdosdjgpp*) - # Override, as these systems have only a dummy fork() stub - ac_cv_func_fork_works=no - ;; - *) - ac_cv_func_fork_works=yes - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 -$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} -fi -ac_cv_func_vfork_works=$ac_cv_func_vfork -if test "x$ac_cv_func_vfork" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 -$as_echo_n "checking for working vfork... " >&6; } -if test "${ac_cv_func_vfork_works+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - ac_cv_func_vfork_works=cross -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Thanks to Paul Eggert for this test. */ -$ac_includes_default -#include -#ifdef HAVE_VFORK_H -# include -#endif -/* On some sparc systems, changes by the child to local and incoming - argument registers are propagated back to the parent. The compiler - is told about this with #include , but some compilers - (e.g. gcc -O) don't grok . Test for this by using a - static variable whose address is put into a register that is - clobbered by the vfork. */ -static void -#ifdef __cplusplus -sparc_address_test (int arg) -# else -sparc_address_test (arg) int arg; -#endif -{ - static pid_t child; - if (!child) { - child = vfork (); - if (child < 0) { - perror ("vfork"); - _exit(2); - } - if (!child) { - arg = getpid(); - write(-1, "", 0); - _exit (arg); - } - } -} - -int -main () -{ - pid_t parent = getpid (); - pid_t child; - - sparc_address_test (0); - - child = vfork (); - - if (child == 0) { - /* Here is another test for sparc vfork register problems. This - test uses lots of local variables, at least as many local - variables as main has allocated so far including compiler - temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris - 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should - reuse the register of parent for one of the local variables, - since it will think that parent can't possibly be used any more - in this routine. Assigning to the local variable will thus - munge parent in the parent process. */ - pid_t - p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), - p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); - /* Convince the compiler that p..p7 are live; otherwise, it might - use the same hardware register for all 8 local variables. */ - if (p != p1 || p != p2 || p != p3 || p != p4 - || p != p5 || p != p6 || p != p7) - _exit(1); - - /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent - from child file descriptors. If the child closes a descriptor - before it execs or exits, this munges the parent's descriptor - as well. Test for this by closing stdout in the child. */ - _exit(close(fileno(stdout)) != 0); - } else { - int status; - struct stat st; - - while (wait(&status) != child) - ; - return ( - /* Was there some problem with vforking? */ - child < 0 - - /* Did the child fail? (This shouldn't happen.) */ - || status - - /* Did the vfork/compiler bug occur? */ - || parent != getpid() - - /* Did the file descriptor bug occur? */ - || fstat(fileno(stdout), &st) != 0 - ); - } -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - ac_cv_func_vfork_works=yes -else - ac_cv_func_vfork_works=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 -$as_echo "$ac_cv_func_vfork_works" >&6; } - -fi; -if test "x$ac_cv_func_fork_works" = xcross; then - ac_cv_func_vfork_works=$ac_cv_func_vfork - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 -$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} -fi - -if test "x$ac_cv_func_vfork_works" = xyes; then - -$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h - -else - -$as_echo "#define vfork fork" >>confdefs.h - -fi -if test "x$ac_cv_func_fork_works" = xyes; then - -$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h - -fi - -if test x"$ac_cv_func_fork" = x"yes"; then -have_fork=1 -else -have_fork=0 -fi - - -ac_fn_c_check_func "$LINENO" "fseeko" "ac_cv_func_fseeko" -if test "x$ac_cv_func_fseeko" = x""yes; then : - have_fseeko=1 -else - have_fseeko=0 -fi - - -ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction" -if test "x$ac_cv_func_sigaction" = x""yes; then : - have_sigaction=1 -else - have_sigaction=0 -fi - - -ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" -if test "x$ac_cv_func_sigprocmask" = x""yes; then : - have_sigprocmask=1 -else - have_sigprocmask=0 -fi - - - - -# Check whether --enable-clz was given. -if test "${enable_clz+set}" = set; then : - enableval=$enable_clz; clzarg=given -else - clzarg=notgiven -fi - -if test "x$clzarg" = "xnotgiven" -o "x$enable_clz" = "xyes"; then : - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if __builtin_clz() is supported" >&5 -$as_echo_n "checking if __builtin_clz() is supported... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){unsigned int x; x = __builtin_clz(x);} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - have_clz=1 -else - have_clz=0 -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_clz" >&5 -$as_echo "$have_clz" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if __builtin_clzl() is supported" >&5 -$as_echo_n "checking if __builtin_clzl() is supported... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){unsigned long x; x = __builtin_clzl(x);} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - have_clzl=1 -else - have_clzl=0 -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_clzl" >&5 -$as_echo "$have_clzl" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if __builtin_clzll() is supported" >&5 -$as_echo_n "checking if __builtin_clzll() is supported... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -main(){unsigned long long x; x = __builtin_clzll(x);} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - have_clzll=1 -else - have_clzll=0 -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_clzll" >&5 -$as_echo "$have_clzll" >&6; } - -else - -have_clz=0 -have_clzl=0 -have_clzll=0 - -fi - - - - -ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create" -if test "x$ac_cv_func_pthread_create" = x""yes; then : - have_pthread=1 -else - have_pthread=0 -fi - -if test $have_pthread -eq 1 ; then - threadlib= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 -$as_echo_n "checking for pthread_create in -lpthread... " >&6; } -if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthread $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_create (); -int -main () -{ -return pthread_create (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_pthread_pthread_create=yes -else - ac_cv_lib_pthread_pthread_create=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 -$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } -if test "x$ac_cv_lib_pthread_pthread_create" = x""yes; then : - have_pthread=1 -else - have_pthread=0 -fi - - if test $have_pthread -eq 1 ; then - threadlib=-lpthread - else - threadlib= - fi -fi - -if test $have_pipe -eq 1 -a $have_wait -eq 1 -a $have_fork -eq 1 ; then - shortg=1 - shortg_or_null=shortg -else - shortg=0 - shortg_or_null= -fi - - - - - -ac_fn_c_check_func "$LINENO" "getc_unlocked" "ac_cv_func_getc_unlocked" -if test "x$ac_cv_func_getc_unlocked" = x""yes; then : - have_getc_unlocked=1 -else - have_getc_unlocked=0 -fi - -ac_fn_c_check_func "$LINENO" "flockfile" "ac_cv_func_flockfile" -if test "x$ac_cv_func_flockfile" = x""yes; then : - have_flockfile=1 -else - have_flockfile=0 -fi - -if test $have_getc_unlocked -eq 1 -a $have_flockfile -eq 1 ; then - stdio_nolock=1 -else - stdio_nolock=0 -fi - - -# Check whether --enable-tls was given. -if test "${enable_tls+set}" = set; then : - enableval=$enable_tls; -fi - -if test "x$enable_tls" = "xyes"; then : - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage (TLS) class" >&5 -$as_echo_n "checking for thread local storage (TLS) class... " >&6; } - if test "${ac_cv_tls+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - - ax_tls_keywords="__thread __declspec(thread) none" - for ax_tls_keyword in $ax_tls_keywords; do - case $ax_tls_keyword in #( - none) : - ac_cv_tls=none ; break ;; #( - *) : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - static void - foo(void) { - static $ax_tls_keyword int bar; - exit(1); - } -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_tls=$ax_tls_keyword ; break -else - ac_cv_tls=none - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; -esac - done - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5 -$as_echo "$ac_cv_tls" >&6; } - - if test "$ac_cv_tls" != "none"; then : - -cat >>confdefs.h <<_ACEOF -#define TLS $ac_cv_tls -_ACEOF - - have_tls=1 -else - have_tls=0 - -fi - - -else - have_tls=0 -fi - -if test "$have_tls" -eq 0 ; then - ac_cv_tls= -fi - - - -# Check whether --enable-wordsize was given. -if test "${enable_wordsize+set}" = set; then : - enableval=$enable_wordsize; -fi - -if test "x$enable_wordsize" = "x16"; then : - default_wordsize=16 -else - default_wordsize=0 -fi -if test "x$enable_wordsize" = "x32"; then : - default_wordsize=32 -fi -if test "x$enable_wordsize" = "x64"; then : - default_wordsize=64 -fi - - -# Check whether --enable-ansicontrols was given. -if test "${enable_ansicontrols+set}" = set; then : - enableval=$enable_ansicontrols; -fi - -if test "x$enable_ansicontrols" = "xyes"; then : - have_ansicontrols=1 -else - have_ansicontrols=0 -fi - - -case "$build" in - *cygwin*) - for ac_prog in gsort sort -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_sort_prog+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $sort_prog in - [\\/]* | ?:[\\/]*) - ac_cv_path_sort_prog="$sort_prog" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /usr/bin$PATH_SEPARATOR/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_sort_prog="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -sort_prog=$ac_cv_path_sort_prog -if test -n "$sort_prog"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sort_prog" >&5 -$as_echo "$sort_prog" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$sort_prog" && break -done -test -n "$sort_prog" || sort_prog="no_sort_found" - ;; - *) - for ac_prog in gsort sort -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_sort_prog+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$sort_prog"; then - ac_cv_prog_sort_prog="$sort_prog" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_sort_prog="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -sort_prog=$ac_cv_prog_sort_prog -if test -n "$sort_prog"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sort_prog" >&5 -$as_echo "$sort_prog" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$sort_prog" && break -done -test -n "$sort_prog" || sort_prog="no_sort_found" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sort supports the -k switch" >&5 -$as_echo_n "checking if sort supports the -k switch... " >&6; } -if { $sort_prog -k "2,3" /dev/null 2>&1 ; } ; then - sort_newparams_ok=1 -else - sort_newparams_ok=0 -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sort_newparams_ok" >&5 -$as_echo "$sort_newparams_ok" >&6; } - -edit_msg="++++++ This file is automatically generated, don't edit it by hand! ++++++" - - -ac_config_files="$ac_config_files makefile:makefile.in nauty.h:nauty-h.in naututil.h:naututil-h.in gtools.h:gtools-h.in" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${CONFIG_STATUS=./config.status} -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. -as_fn_error () -{ - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 - fi - $as_echo "$as_me: error: $1" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.65. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.65, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2009 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "makefile") CONFIG_FILES="$CONFIG_FILES makefile:makefile.in" ;; - "nauty.h") CONFIG_FILES="$CONFIG_FILES nauty.h:nauty-h.in" ;; - "naututil.h") CONFIG_FILES="$CONFIG_FILES naututil.h:naututil-h.in" ;; - "gtools.h") CONFIG_FILES="$CONFIG_FILES gtools.h:gtools-h.in" ;; - - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} - - rm -f "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 - ;; - - - - esac - -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - diff --git a/tools/nauty25r9_unix/configure.ac b/tools/nauty25r9_unix/configure.ac deleted file mode 100644 index 6bd86b5..0000000 --- a/tools/nauty25r9_unix/configure.ac +++ /dev/null @@ -1,381 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(dreadnaut.c) - -AC_DEFUN([AX_TLS], [ - AC_MSG_CHECKING(for thread local storage (TLS) class) - AC_CACHE_VAL(ac_cv_tls, [ - ax_tls_keywords="__thread __declspec(thread) none" - for ax_tls_keyword in $ax_tls_keywords; do - AS_CASE([$ax_tls_keyword], - [none], [ac_cv_tls=none ; break], - [AC_TRY_COMPILE( - [#include - static void - foo(void) { - static ] $ax_tls_keyword [ int bar; - exit(1); - }], - [], - [ac_cv_tls=$ax_tls_keyword ; break], - ac_cv_tls=none - )]) - done - ]) - AC_MSG_RESULT($ac_cv_tls) - - AS_IF([test "$ac_cv_tls" != "none"], - AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here]) - m4_ifnblank([$1], [$1]), - m4_ifnblank([$2], [$2]) - ) -]) - -dnl AC_TRY_CFLAGS (CFLAGS, [ACTION-IF-WORKS], [ACTION-IF-FAILS]) -dnl Check if $CC supports a given set of cflags -AC_DEFUN([AC_TRY_CFLAGS], - [AC_MSG_CHECKING([if $CC supports $1 flags]) - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$1" - AC_TRY_RUN([main(){exit(0);}],[ac_cv_try_cflags_ok=yes], - [ac_cv_try_cflags_ok=no],[ac_cv_try_cflags_ok=no]) - CFLAGS="$SAVE_CFLAGS" - AC_MSG_RESULT([$ac_cv_try_cflags_ok]) - if test x"$ac_cv_try_cflags_ok" = x"yes"; then - ifelse([$2],[],[:],[$2]) - else - ifelse([$3],[],[:],[$3]) - fi]) - -dnl CVT_YESNO([YES-NO VARIABLE],[0-1 VARIABLE]) -dnl Make a 0-1 output variable from a yes/no shell variable -AC_DEFUN(CVT_YESNO,[if test x"$$1" = x"yes"; then -$2=1 -else -$2=0 -fi -AC_SUBST($2)]) - -dnl Checks for system features -AC_CANONICAL_HOST - -dnl Checks for C compiler and sets CFLAGS if not set by user -user_cflags="$CFLAGS" -AC_PROG_CC -CFLAGS=$user_cflags -MORECFLAGS="" -dnl we need AC_SYS_LARGEFILE and AC_FUNC_FSEEKO -AC_SYS_LARGEFILE -if test x"$ac_cv_sys_file_offset_bits" = xno ; then - ac_cv_sys_file_offset_bits=0 -fi -AC_SUBST(ac_cv_sys_file_offset_bits) - -if test x"$user_cflags" = x"" -o x"$user_cflags" = x-m32 ; then - if test "$CC" = "icc" ; then - AC_TRY_CFLAGS([-O3],[CFLAGS="$CFLAGS -O3"]); - if test x"$ac_cv_try_cflags_ok" = x"no"; then - AC_TRY_CFLAGS([-O2],[CFLAGS="$CFLAGS -O2"],[CFLAGS="$CFLAGS -O"]); - fi - else - AC_TRY_CFLAGS([-O4],[CFLAGS="$CFLAGS -O4"]); - if test x"$ac_cv_try_cflags_ok" = x"no"; then - AC_TRY_CFLAGS([-O3],[CFLAGS="$CFLAGS -O3"]); - if test x"$ac_cv_try_cflags_ok" = x"no"; then - AC_TRY_CFLAGS([-O2],[CFLAGS="$CFLAGS -O2"],[CFLAGS="$CFLAGS -O"]); - fi - fi - fi - - if test "$CC" = "gcc" ; then - gccver=`gcc --version 2>/dev/null || echo 0.0.0` - else - gccver=0.0.0 - fi - - case "$host" in - *i686-apple-darwin*) - AC_TRY_CFLAGS([-fast],[CFLAGS="$MORECFLAGS -fast"]);; - *pentium*solaris*) - ;; - *pentium4*) - AC_TRY_CFLAGS([-march=pentium4],[CFLAGS="$CFLAGS -march=pentium4"]);; - *pentium3*|*i686*|*athlon*|x86*) - AC_TRY_CFLAGS([-march=i686],[CFLAGS="$CFLAGS -march=i686"]);; - *pentium2*|*i586*) - AC_TRY_CFLAGS([-march=i586],[CFLAGS="$CFLAGS -march=i586"]);; - *powerpc*) - machtype=`/usr/bin/machine 2>/dev/null || echo unknown` - case "$machtype" in - ppc740?) - AC_TRY_CFLAGS([-mcpu=7400],[CFLAGS="$CFLAGS -mcpu=7400"]) - AC_TRY_CFLAGS([-mtune=7400],[CFLAGS="$CFLAGS -mtune=7400"]);; - ppc745?) - AC_TRY_CFLAGS([-mcpu=7450],[CFLAGS="$CFLAGS -mcpu=7450"]) - AC_TRY_CFLAGS([-mtune=7450],[CFLAGS="$CFLAGS -mtune=7450"]) - case "$gccver" in - *\ 4.[[0-9]].[[0-9]]\ *) - AC_TRY_CFLAGS([$CFLAGS -fast], - [MORECFLAGS="$MORECFLAGS -fast"]);; - esac;; - ppc970) - AC_TRY_CFLAGS([-mcpu=g5],[CFLAGS="$CFLAGS -mcpu=g5"]) - AC_TRY_CFLAGS([-mtune=g5],[CFLAGS="$CFLAGS -mtune=g5"]) - AC_TRY_CFLAGS([-fast],[CFLAGS="$MORECFLAGS -fast"]);; - *) - AC_TRY_CFLAGS([-mpowerpc],[CFLAGS="$CFLAGS -mpowerpc"]);; - esac;; - *osf*) - AC_TRY_CFLAGS([-fast],[CFLAGS="$CFLAGS -fast"]);; - *sparcv8*|*sparcv9*) - AC_TRY_CFLAGS([-msupersparc],[CFLAGS="$CFLAGS -msupersparc"]) - if test x"$ac_cv_try_cflags_ok" = x"no"; then - AC_TRY_CFLAGS([-cg92],[CFLAGS="$CFLAGS -cg92"]) - if test x"$ac_cv_try_cflags_ok" = x"no"; then - AC_TRY_CFLAGS([-xcg92],[CFLAGS="$CFLAGS -xcg92"]) - fi - fi;; - esac -fi - -echo CFLAGS=$CFLAGS -echo MORECFLAGS=$MORECFLAGS - -dnl Checks relevant to Cygwin and other Windows things -AC_EXEEXT - -dnl Checks for header files. -dnl AC_HEADER_STDC -AC_HEADER_SYS_WAIT -AC_CHECK_HEADERS(signal.h stddef.h unistd.h sys/types.h sys/wait.h stdlib.h string.h errno.h pthread.h) -CVT_YESNO(ac_cv_header_stddef_h,header_stddef_h) -CVT_YESNO(ac_cv_header_unistd_h,header_unistd_h) -CVT_YESNO(ac_cv_header_stdlib_h,header_stdlib_h) -CVT_YESNO(ac_cv_header_string_h,header_string_h) -CVT_YESNO(ac_cv_header_sys_wait_h,header_sys_wait_h) -CVT_YESNO(ac_cv_header_sys_types_h,header_sys_types_h) -CVT_YESNO(ac_cv_header_errno_h,header_errno_h) -CVT_YESNO(ac_cv_header_pthread_h,header_pthread_h) -CVT_YESNO(ac_cv_header_signal_h,header_signal_h) - -AC_TYPE_PID_T -CVT_YESNO(ac_cv_type_pid_t,have_pid_t) - -AC_MSG_CHECKING(if malloc is declared in stdlib.h or malloc.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])malloc[^a-zA-Z_0-9]],stdlib.h, - malloc_dec=1,malloc_dec=0) -if test $malloc_dec -eq 0; then - AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])malloc[^a-zA-Z_0-9]],malloc.h, - malloc_dec=2,malloc_dec=0) -fi -AC_SUBST(malloc_dec) -AC_MSG_RESULT($malloc_dec) - -AC_MSG_CHECKING(if ftell is declared in stdio.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])ftell[^a-zA-Z_0-9]],stdio.h, - ftell_dec=1,ftell_dec=0) -AC_SUBST(ftell_dec) -AC_MSG_RESULT($ftell_dec) - -AC_MSG_CHECKING(if fdopen is declared in stdio.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])fdopen[^a-zA-Z_0-9]],stdio.h, - fdopen_dec=1,fdopen_dec=0) -AC_SUBST(fdopen_dec) -AC_MSG_RESULT($fdopen_dec) - -AC_MSG_CHECKING(if popen is declared in stdio.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])popen[^a-zA-Z_0-9]],stdio.h, - popen_dec=1,popen_dec=0) -AC_SUBST(popen_dec) -AC_MSG_RESULT($popen_dec) - -AC_MSG_CHECKING(if putenv is declared in stdlib.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])putenv[^a-zA-Z_0-9]],stdlib.h, - putenv_dec=1,putenv_dec=0) -AC_SUBST(putenv_dec) -AC_MSG_RESULT($putenv_dec) - -AC_MSG_CHECKING(if setenv is declared in stdlib.h) -AC_EGREP_HEADER([(^|[^a-zA-Z_0-9])setenv[^a-zA-Z_0-9]],stdlib.h, - setenv_dec=1,setenv_dec=0) -AC_SUBST(setenv_dec) -AC_MSG_RESULT($setenv_dec) - -AC_MSG_CHECKING(if INFINITY is declared in math.h) -AC_EGREP_CPP(yes, -[#include -#include -#ifdef INFINITY - yes -#endif -], has_math_inf=1, has_math_inf=0) -AC_SUBST(has_math_inf) -AC_MSG_RESULT($has_math_inf) - -dnl Checks for sizes of integer types; avoid 64-bit if necessary -AC_CHECK_SIZEOF(int,4) -AC_SUBST(ac_cv_sizeof_int) -AC_CHECK_SIZEOF(long,4) -AC_SUBST(ac_cv_sizeof_long) -AC_CHECK_SIZEOF(long long,0) -AC_SUBST(ac_cv_sizeof_long_long) -lok=0 -testprogs="dreadtest dreadtestS dreadtestS1 dreadtest4K" -testprogs="$testprogs dreadtest1 dreadtestW dreadtestW1" -AC_SUBST(MORECFLAGS) - -if test $ac_cv_sizeof_long_long -eq 8; then - lok=1 - testprogs="$testprogs dreadtestL1 dreadtestL" -else - if test $ac_cv_sizeof_long -eq 8; then - lok=1 - fi -fi -AC_SUBST(lok) -AC_SUBST(testprogs) - -dnl Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -CVT_YESNO(ac_cv_c_const,have_const) - -dnl Checks for library functions. -AC_CHECK_FUNC(isatty,have_isatty=1,have_isatty=0) -AC_SUBST(have_isatty) -AC_CHECK_FUNC(times,have_times=1,have_times=0) -AC_SUBST(have_times) -AC_CHECK_FUNC(time,have_time=1,have_time=0) -AC_SUBST(have_time) -AC_CHECK_FUNC(gettimeofday,have_gettimeofday=1,have_gettimeofday=0) -AC_SUBST(have_gettimeofday) -AC_CHECK_FUNC(times,have_times=1,have_times=0) -AC_SUBST(have_times) -AC_CHECK_FUNC(getrusage,have_getrusage=1,have_getrusage=0) -AC_SUBST(have_getrusage) -AC_CHECK_FUNC(perror,have_perror=1,have_perror=0) -AC_SUBST(have_perror) -AC_CHECK_FUNC(pipe,have_pipe=1,have_pipe=0) -AC_SUBST(have_pipe) -AC_CHECK_FUNC(wait,have_wait=1,have_wait=0) -AC_SUBST(have_wait) -AC_CHECK_FUNC(popen,have_popen=1,have_popen=0) -AC_SUBST(have_popen) -AC_CHECK_FUNC(putenv,have_putenv=1,have_putenv=0) -AC_SUBST(have_putenv) -AC_CHECK_FUNC(setenv,have_setenv=1,have_setenv=0) -AC_SUBST(have_setenv) -AC_FUNC_FORK -CVT_YESNO(ac_cv_func_fork,have_fork) -AC_SUBST(have_fork) -AC_CHECK_FUNC(fseeko,have_fseeko=1,have_fseeko=0) -AC_SUBST(have_fseeko) -AC_CHECK_FUNC(sigaction,have_sigaction=1,have_sigaction=0) -AC_SUBST(have_sigaction) -AC_CHECK_FUNC(sigprocmask,have_sigprocmask=1,have_sigprocmask=0) -AC_SUBST(have_sigprocmask) - -dnl --disable-clz disables the use of gcc extensions __builtin_clz*() - -AC_ARG_ENABLE([clz], - AS_HELP_STRING([--disable-clz], [Disable clz extensions]), [clzarg=given], [clzarg=notgiven]) -AS_IF([test "x$clzarg" = "xnotgiven" -o "x$enable_clz" = "xyes"], [ -AC_MSG_CHECKING(if __builtin_clz() is supported) -AC_LINK_IFELSE([AC_LANG_SOURCE([main(){unsigned int x; x = __builtin_clz(x);}])], [have_clz=1], [have_clz=0]) -AC_MSG_RESULT($have_clz) -AC_MSG_CHECKING(if __builtin_clzl() is supported) -AC_LINK_IFELSE([AC_LANG_SOURCE([main(){unsigned long x; x = __builtin_clzl(x);}])], [have_clzl=1], [have_clzl=0]) -AC_MSG_RESULT($have_clzl) -AC_MSG_CHECKING(if __builtin_clzll() is supported) -AC_LINK_IFELSE([AC_LANG_SOURCE([main(){unsigned long long x; x = __builtin_clzll(x);}])], [have_clzll=1], [have_clzll=0]) -AC_MSG_RESULT($have_clzll) -],[ -have_clz=0 -have_clzl=0 -have_clzll=0 -]) -AC_SUBST(have_clz) -AC_SUBST(have_clzl) -AC_SUBST(have_clzll) - -AC_CHECK_FUNC(pthread_create,have_pthread=1,have_pthread=0) -if test $have_pthread -eq 1 ; then - threadlib= -else - AC_CHECK_LIB(pthread,pthread_create,have_pthread=1,have_pthread=0) - if test $have_pthread -eq 1 ; then - threadlib=-lpthread - else - threadlib= - fi -fi - -if test $have_pipe -eq 1 -a $have_wait -eq 1 -a $have_fork -eq 1 ; then - shortg=1 - shortg_or_null=shortg -else - shortg=0 - shortg_or_null= -fi -AC_SUBST(shortg_or_null) - -AC_SUBST(have_pthread) -AC_SUBST(threadlib) - -AC_CHECK_FUNC(getc_unlocked,have_getc_unlocked=1,have_getc_unlocked=0) -AC_CHECK_FUNC(flockfile,have_flockfile=1,have_flockfile=0) -if test $have_getc_unlocked -eq 1 -a $have_flockfile -eq 1 ; then - stdio_nolock=1 -else - stdio_nolock=0 -fi -AC_SUBST(stdio_nolock) - -dnl --enable-tls enables tests for thread-local attributes -AC_ARG_ENABLE([tls], - AS_HELP_STRING([--enable-tls], [Enable thread-local variables])) -AS_IF([test "x$enable_tls" = "xyes"], [ -AX_TLS([have_tls=1],[have_tls=0]) -],[have_tls=0]) - -if test "$have_tls" -eq 0 ; then - ac_cv_tls= -fi -AC_SUBST(ac_cv_tls) -AC_SUBST(have_tls) - -dnl --enable-wordsize=value overrides default rule for choosing WORDSIZE -AC_ARG_ENABLE([wordsize], - AS_HELP_STRING([--enable-wordsize=value], [Override default WORDSIZE choice])) -AS_IF([test "x$enable_wordsize" = "x16"],[default_wordsize=16],[default_wordsize=0]) -AS_IF([test "x$enable_wordsize" = "x32"],[default_wordsize=32],[]) -AS_IF([test "x$enable_wordsize" = "x64"],[default_wordsize=64],[]) -AC_SUBST(default_wordsize) - -dnl --enable-ansicontrols enables ANSI terminal control sequences -AC_ARG_ENABLE([ansicontrols], - AS_HELP_STRING([--enable-ansicontrols], [Enable ANSI terminal control sequences])) -AS_IF([test "x$enable_ansicontrols" = "xyes"],[have_ansicontrols=1],[have_ansicontrols=0]) -AC_SUBST(have_ansicontrols) - -case "$build" in - *cygwin*) - AC_PATH_PROGS(sort_prog,[gsort sort],no_sort_found, - [/usr/bin$PATH_SEPARATOR/bin$PATH_SEPARATOR$PATH]) ;; - *) - AC_CHECK_PROGS(sort_prog,[gsort sort],no_sort_found) ;; -esac - -AC_MSG_CHECKING(if sort supports the -k switch) -if { $sort_prog -k "2,3" /dev/null 2>&1 ; } ; then - sort_newparams_ok=1 -else - sort_newparams_ok=0 -fi -AC_SUBST(sort_newparams_ok) -AC_MSG_RESULT($sort_newparams_ok) - -edit_msg="++++++ This file is automatically generated, don't edit it by hand! ++++++" -AC_SUBST(edit_msg) - -AC_OUTPUT(makefile:makefile.in nauty.h:nauty-h.in - naututil.h:naututil-h.in gtools.h:gtools-h.in) - diff --git a/tools/nauty25r9_unix/copyg b/tools/nauty25r9_unix/copyg deleted file mode 100644 index 65a6a5f7d12dbc10b8b87fa6c103cc7e94499a5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44429 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˱eKb3&ycY?hf`ZR4j-H!n{QvrXSd}fvB13HoJD3Pfl@Dp&Qnz3p;hAfd=z1 zhPcM$wAk;=Ot2YVvlVvA>ufZdX>w{u1e@nLR}RgGp?WW%cfesJWzTG6W2!`x(_?lR zhv3&Sd-X34tIz8!Va1O5@S9{8-P@Abl=xsi_VC`c1&$euaRmU!1|&z!3vu@zY#Ho@ z1FmB*Mmbn6<6X7)$l%O-PG@2Pn>^0xv=kVm)ee0;%<(1qZt!K{6wpd1FE+pPacQ+} zP`>txWNTsfgI5-%Y+|;nwHo4m@Z`s(}Y?4wki5{#AEMFq7 zfCP#SFVo3}rSR1?kLPy~*W;k7SjVV1olC&;F0kEVEF#X2(4;oj8N+$KFb`_?22+z+ z&mbOrsvQ&Cp8?Qr#QomjM{hHYh}@50b6V}B_J+1Qn0bPFgNfee<`Z^_=@09NenXOEL{s}+T@6seXQCvL;8uHqr4c6u^twb@~L%u)l|GWdzs*{%$~pa(}nOoDz^d8fd8Q)3Us74PrK} z#}??r&iOu!lSEQ|PXWMo|AI`+Lq9dkjbn27s^#+Cl)AmQ zTCUp$$R0p;BHm3@KL0l!udBN)pA z?DJPXog=SFFO(mup^04~ChqCkvUfcijeSPdu-^t}p28Z46LQ?jmLrl;| zy{9~MwuuDZWM7Yh_~HO8REjHJ3mnc41XC=nD~zqTCIH$x-w-&QS?t}_IzOrP)DS4hiK5Lh271cVq|JNsoAXy5(2^O&UuMa z=e#7THCfx)IWJiX1T#D5jiOmhO6$B++D@?1I`4FG;ZBEwuVQ$DYa^Lbp^f9cn5FQq z!MNT({?$>G1K$Ge-p>YKa1BWS2aeuR#4d(=jMr-cKGf+g+hp95J0<+Ryd`}d*fh7M z(-{lc-nQbS(2bCk$R}N9_XXrFGuK(MOKyq6JRBl#&cz6^fPaXMNpily`2dZBjWKc> z$F!fx$(O!P7t?1CdoI z5-R^QNg;FsF^I&^ct`$R?6YQArt-B4dD8y8T_#WdN7kf1;-NXsJn`sWbn{5spOtGXMu%y0> z)AloXw$+AO-DjlLbM1xYCTA7jLdP29&>U@iE}o1g>a2QiA&V5b;?@Y}RR2oGoV+C) zB-Xr$w>jWsu9o!>>6?Wen6B?Y1;rXR$}oEkeF9~IKKm1MAm-*8z+YA3f4F_%6{a*|g)s_^_y>||HYR98ADcFjmY~3HKzE#Tg{;BVyW^@Yn z#A)@b&_nv{VBYgFosX`&g<7(Qy0(*+y$WrpWQW+=73_s3gJsfJyLP!|#)=2mMPIrt z$|g`{Tr2+cUxIXKH>RL~V>L<}@=rwIO&ktmLvU{dPDg!Av_4m+ijy+;Pg#R$%q%7e zsD+=%ZuH3r^IN!>?-Np7t}4*&8F*-N)WIH|=T)h)X}W5t?4%Ed{&A-hS5 zRNCHyZeSz*3WoS_6e56=)IwkuM`6lalA#w&iQZ2M9Lh|^t((KC+i31Cw-y0W_GA&d zcbB=1EUxVRCavI05DjY7RvM`A&5x62{)-#J%uIwn!1SAr$`<9=Nu(y~=K}VH3ACq# z^@Tkro4#}+Gnl#sE2aS)p&>zEFpy0PUDnlDTClwX6i3I~afyYPW;!*Mj-(lRD2JUW z(@F%jp~Iaz<=_8_1pZ)(8JC`kI)u-b-Iyi;k%;G!nJPfa6k1BX^N%Pl0Yx$d+V+1; zkbiXwNq`wQaHnfJv6vYg6X6a!umBKuOu?C|6JvQ`tRS?R7Bb4c7)V8b)ma>#V*4L? zduhO86N8Ax5yZ$Pn({-oNNa~Dh#(JLUFEL=fVWs!56&8wmwPYLdMRtP3Lkd()Tn-?L&% z!hhfWPx|jOe~76YPGJ21rT_j7jN8BBznP;S>c6{W_YnV`0^gk(=*^CC-`i3Dp!=@= z0{4AujQhTSSoggZ<~z=P2T(!8eUnq9d3%ii_H87cv-_67fA5R--|vwBh9^lG>cD%+ zxTU^KGZ61A^5MN?dS1c_HQz57*?%|vXMER{59_~ara{w-f5LyC_`M(<=fD3Rfyesq z9T7P9-!3+FqeZCuY4U^qTZI3<3@ZZJ?O-t4?&toyH{!qP8zn~c-(glP)_?C}usHwy zohZbJ|0dPaJw5l|xH?Z-6gZR;Fc_;1_q{yG26^vOvl z(ErHW9{Vlz`hTbYegYK#yZrY}5$?W(|4zZ~R&WiSFtbJv?{vdY^Y+q!#hhh0=W8!~ zC*FaNFae@z?C(I3O|6h1YQs%@WN#`tIMyp~(}C<4FnBj(a70(06mjL#fEeS-tGFw_ zgsSQwgW}*-aaW$q`D9)a--JR)Dj_Y1MmqQuNr$^~cxjq0g=Q1#b>zyw4%GHdRA^ju zp{G%Z&12XkVH2S@5z=QkkB&I%hZ*HKSAH9CBN$Z-V{xo2zdRaauAmX^%KONb$L=>{ z{SA9O3YVlLdL&1Od;Edivxr&nLJpT^Qdiv0pU8cU?(fqBxvZArid{GQ({Hkg2XZU1 z9$VwE^W7Jm{HIv`H=*e1)a5u_!lv^mypW4Lki)7dMStIhyUxhnng?~nUc+ViO5|$^ zu0bE*3;z!6Vtxb+nhb1foYsq>rEmmd-<6dwLHWKm+7BW;hEfES>Wy*j`$eREFGshp zoVV|ak=iG3@BkeS_<=RUwQ)B!5Vv_xzQfwsrB>|JlCjz7xhFEI3-&*h9wBWnRJQZl*G z#eUCT*I_#@VJ(5Shv*_c!$U=?!Hz8)evE;4k~33RtiVwpDGrpTFPHCcncau;ZuF1W ziYxZs=+C;tw)QkVw3Ihojh(b&T-bbs?oSotB0TL5$ZeT;M*w{~le)aKSlewQWx`ik zK<;UnGkA8nitQS1*^Ih#J5|ki!0y#rV$T8gpjj{F4$6ApubHgZcG3ILE+ajD1QlCX zfMO89v+|Y;J$s!`7wmCPq9f0~^9SWgX}~iXitFQ$hjolelG{oQEvGSpe2_%TX^8kg z5bB%$eP4r~LK?VI^c@^4V{`gm{hevPiW{s~Y=xz1nTl|eF5*LJIQ7<)dKJ`F00BTnPy~$)-C;EP4TM16RR3kqX_Rpd2$i~hD z`&LZwL3!Za2p0Pe5-~3kdl@q#Je;Rj0&(_2eCL^O%4i4_hY81mcl>I&H zmII(o+eevO()?z+n0S#mFTw!=V0cK3Yl#Cz%a75Q{L*c`7QE2*b|50RL8JGvH|`UV z#A_7yDfTu-HSqYFxpLb|b{jEpFxh>KJ)}Q{Xlej&0Gti%0ZbA~()S4B)gumu*3j)s z_V5Ke)v&-8s)hQ0Wde~rRz#&wA(_Z2vUpNdoWFM&TAS-T>g4@kk6kykX?xjoms9Z< z4x#L}!Q()U-JP?YJgDMr)!>E0HqHnPetyx8${3;GFQ{7Ic|Rtk&4hG$1nCD6q!z^Jy%-*E+O&Rpzxld(k=;M> zwks5AvFe{f;X?c5_tC1r*#z>uLH~bHbB;JK)Aw8L8k`2MtcA_ttiMs?@w(iF6XDpW zScCTV)9p}TP-4vhPxN~S{D&dL&pS++Qd?EuB&98Ol-E?vP$oLk(k42jipHi@HOiDG zX~q<3wpAI-lxCY1mMJMyBw$M`q`Bn{S2`8?nF$5I7lGf2Q0P}Gh>|pWwxg-M*-J(SyAV#Rhk+dj=H6wQQg?QtlWtT8RmAVF!3w~OsD$;_c zuS33HpYe4iiqOKQs*1YmRZ4R?eyD?(7%b;dCRKA%IBlCO+E=Y8x01l7G+nKfI~=ZM zRWT(%pt^2lRi%R8{-|-*4l=Avs;g;eY(@@vjc^WR;+42mYRer;tk@<;IIl&m^cx@O zJzh3fu(MK8ERCcL>?c6tvqunfEf@1jv_NO24tjtJoY1Jc>Orm{=4LdIgiq~cVrK%1 zaCWbvEOa$BHCH(tO1W!gU4317^D3bdxoM<#T(R$*Qsby5;on=ka*1+hT?5nDJE6W5 zS+YbTrDv!!pa7gfr~}pBP|>)osoY8GNd%+t^o9(JhsKk>PIM@2yeZB`1wVJ9EJG(K zl~vAiREy4Nz;C3uD(JUZ9GqQg_8p2cvEHQ*5Aak6#Omh8Wkd^9XqYui6YDF9l^SPb zW4%M-K`DOgh5AymF`nzI&|_7VHC3e*jg?ibmnC3SRWKYBrXOsnnV~GJ!{BSEQ5vdN zP!0xhB&)8zzN)6YUa6=pZ!WKJRy9XwHdo!d3=E-N^z$&$IsE5hlxo(cz&rUPr0p3mD*;?5AfUv>Kd^HPa>hbxfBWM3V=AF%@jW@66Qb#90FEi={xV=4d=t zUnPo6bj(nem)E@T-g>_>>0aO330epHC? z998fi7&G*1MPDF4`t_lRUJcU^&~H~AnapO;Yp#TeSIE#*H8_PGU>e7oFhhw{PC#gT zbiKO%vp$}o)Gdp+yJcMA1U)exVG$be`%I{q6`0PX6itut*x1lDAZmE(y3g{zh!W(? z_;*ZKhUH$*XG3Lp6sDQLi;SoUT0V6Hfd?fqEZ#L=67SkCi8u92;!XPkJZ29@Zb_sa zv3NsTG6LR^mc-%>wGy%U5x$1BbOgL1Ed^e*Nh@!z!6c%=8Bs)$9}8y|u^uqy0$IOX zX;jWoZoTnl%R<{7Ro%KtxVUwnJ@c2nEwYSsVm?f>7F|G(OQ|EPcC`&;jK>iZP@7oQdpnnb9GFjIs& zDpf}x5*vL;eeh{ve{TBsdDtj&*ZbI0NtBf58k7KiG5)`=%JD_CTm8*~wteE_-$O&^BCy%Yw~9%%SR ze6O>Duoqzo!n{7Ti{J>KLD+o+_yorz@yt}f5#}M3j)lW3Da0p>2a@5wnz=^Ji_nYfHpwpQby*yjO^>>(JN9~q@s(jyXxAU zuK_CA@!x{~t>~*ifj4PRM&<^iH6wd{!ki4npExID(j!ThjJ$Qp=8OXOsQDSahJ;6r zX&D7`GxE$ClYlcPBO7JrWTaR|qd4*N82;}ApT9$>e<~4q8vmQ11Fj52SUo7aKEX=$ zSR?gVs2)p3iSci!#XO`Ib#y|{sA20j>-A@$y{$Mi@#~c%q)jk7tC4;a4%2T*Q2pzv zoqlTPBZ+9sx+K)*PBv~y%a~-=+hxs2vFdc|QN9d1+KuA+huZ4_JR67E({&(1s_#dD zn*e`^;Hd8rqneSuF2RzaxD$=mw2W*!liQ7>&4`-^Wk~2m_ire_QKxIkV8#%S2Bgmb ze-3b!5Eo>Vti%TezTDjxxW1obe_am_F&9%dXS6IH>L-J^eh>sgj)>5 z66Eb8{t`hah>KIpBK!^N?-0E*8Q&k4+FFZSOTnee@saT`$R8UI(flV?y#PU~0@|pf4e<$)Mewp@_BuLb} zq57aQ1tWTY1idHWbGE>DaQP4F>!5xKJGjx1@b*XwhT=po5k4yW&2TvI-$0M#LEpwj zZ?Ne5J|);4qZ8ub>@#`N51`!k4t~c_&tHRlW-YkSc?|glcqwS6{$uhq9@PbUH9&tv ze(fQgZc=$>znI>`9=Q{n;_MgUzX$wQ;Fm=3nZ1LJb|<2zgz4n^P54=m!;`>Y6v4lN z#?^@U7U1s#KK-UC@w?6le%u&OdB%25-kg!bv=crAC{Ex9-wTKDB>K_#3iOJ&0XpY~ z%j4(3&wd|s55k8$Z_h59+*6@o#&8-jHU%ax?DBGdzHLGaJUG8XD7srSULnHiBAh3}`1a19J9maMY4K85gVUu<%`M2iW=ejcizV|XbATk} zI#w-nmM=x^`<5%x1rHlm1~}3o8m055viI6SME|*U47-0x=JaRQn)Nv zE9F+MY5+YRI-7ZpINpv)lp?RWs=k~Gh*(p-Q_8JtsKZ}p)k^%ub(lKjHCC28%cb0^ z+S2Og@?}+}wUsEVr+A6d^5*99RlI~A|8@n?K)rlfT?MLc1VQ}CWwmgMOC1g=7dP4H ztUq3K|5s_U2c-M@xGON4kix!;0O zqCfdaM3;9OO)Q(fL!Lf4Jc#^_FK6p_}01&EN1(#!8O znvlXioemHNitHSYk9&j>g|u`UyzmVLxg0im)GrRnJ8Z-5Jhu_wBHj~zC+m64pDxy zAWY@SSH;V3Jzyjg-H()|nUKQyh;Ssje_}xViSK_6u;}tFqI`=e&(5s$!U);nM^yM& zT=^1Vmr8_V-NrWO1_|ipbqGBGimqSxyIHjyBUMKfVLbnv0jKi1{1xH16;b|pT!jj7 zqd!j~5nVoWm5F6%uHsm9h8q2euYU_Nqsy1vXJY6jq!{=tO5vgYH!dl4AR`0+bw94p zGcu`T@rlQePrm{j8UOY2`aC52OP1e# z{K6ms*ab$@5S#>zcHK`#XX3<1(*0j7JTWr=j)f<|Pnn`YES><3*8Na)W&%8|?q6cz zDU$9tV&SQh?hj(&X_9W|W8tGC>yTJ@y3~?piUzTGf^?pw+uP{O1XvW^j>f`eNw<%& z@Jva!d$I5_l5Wpp;pa=bor;BD5LpMs!m}jZuEfH}O1iy>gsl~_{Gsl7N>EMD1A)BG3G=1Jsdm>a05$rrSN1DM?2Jyd)0J?d>?p6bC;i@blu}^bnENyTZgN z3uBea;Nzr?aroy8_~tlxwxC1b&PgBLEYWje;=d^l{~H3{5(ghiAMzOf7-{oECL$mC z(D$1TrzeCkoc!6{5b69OSX7qUJp%k)28aGnHZi=1L|J0N`1-u=c1AzCMjod-Elh4Vm>576D6SFk>B~Wf zYuAqeCqA>|`24+~zxhH=pWV$u9WMf&3Hz2J@I|%KOC!*y`+CHuGLh5qivsjpX6Fy% z7lI?u`CQP+GjTfXjtXee7bz0`%@rJO7xdEwy!ToTXLojxr!crciVCg;oaFFaoE&D4 zfPb@~e_ZGf*;D%5IRbw32ypspPU63$+{DVWyAg8JKA`W8a!mw3O^ zDe#+Sb9{C;2=reWfqpOG3i9JW_{BeIj1jY}xPJd!(C?jMVnx{9EyU8Gz|^kZ8#$ca zX#qS-z@HI%%kItqK0&}YS8{xI=K}C61>7XyivXj~Hvu05`>)R*kYu0P3_eck5Pa%z ze1$5Pv&F>l*qtQAiUt18xPHG~;BT(s_*JZwB-JsvNJIq>jsSmD(0NAaKf7ayaz7pc z{|^Gc`x_=ko!zZN>;=Fxp`YDx@(&37q&PpjQ^1ut{p=C&<6^v&uv#SPZ2@m8<@K^V zKFIr!!39!O@HybbPrMyS!Nvg7=X6eo-5o`_^B6pefQVix@LR6p_}t$}(sZ59Bo6Nu z_@)u);8*)l@6b=p2=MzxfUgH!8A?X_4~CCwIh@^1L|zwz3#6#vErDMq#*0Pdy*C2>0N^xEVZ9dNR%O5FJ34}fzkq>5&z!|B2|>sCmmrPt5B zxzui3xTv&L!XxggnmPw|e@mUqN-OH|*4QBp11c@8Y%Hy*Z(LelUs~yGY<865!7->W zYodp?mATUkzjX~L4}(-no4b6gwiMg1&8sB7xm)R4wrmxOM5Rh;PdElue>f%KnL3{F zvL}I#y8Ei6rK|9iw-MXjlB3jdU+%PmsrizFf;=5Ct$+cheM?%3jpiCE4on`AYNi92 zJ3W8uHPTW@g)%4vJM(Tf7h6lM3oH;0my{llVXjgtwcNhITx^>Qtf(CJgj6b>Z@+Pl z*GEZksc=^qSmja;Hg->3F>k z5mi;i!mC{k^^Fzx(BsqC4EBzZy}1QJJj85hECnK-Y&SNq#b^h;lsAh#(PU3)CHB0uF&0z2sFbSNbI{m4G^o5X7R0`nAr=(# zrd2AfV!QX%&`L*KqX!j%ixTG;5L+xU{!E%NRbTFaq73s8yBgn9;D{~88_8aYFRNPS zsB*?;*FZs+Ha0sYblq^>K@=-ui{Ry8sop_M1DG^RmzCGWam+cS_tNOfD7o`z-^i_4 z))Y&+w6tbfV*~FVrm&Tc#?o4RkpuOqXfKl$#^)5$kEKF}AMy^A0;cFk_ zg*Es_AJzh+jB6f>;nay<`s%zA+ay@%a1AxC9^DaJRcR@XeMEVZHF$2qQ+#K2X+`Zl zgQ(Z$PL2Nt0iwxXyGzydOgc`@n@CFs%hRB(9tvt2W)PHKzr6HjVQ%L_Cmpc0TtDf1 z3%IQVb5#}hu%>}m)@?OX)yld!HDtvc(@6@|EFQ~HX(@(x#EMmq)NW=HbZZ}D5J+7> Y9O7+ka!Aa=2^Hes7yvCn17j=wKg1&UjsO4v diff --git a/tools/nauty25r9_unix/copyg.c b/tools/nauty25r9_unix/copyg.c deleted file mode 100644 index a8d1c01..0000000 --- a/tools/nauty25r9_unix/copyg.c +++ /dev/null @@ -1,156 +0,0 @@ -/* copyg.c version 1.0; B D McKay, Jan 1997 */ - -#define USAGE "copyg [-gsfp#:#qhx] [infile [outfile]]" - -#define HELPTEXT \ -" Copy a file of graphs with possible format conversion.\n\ -\n\ - -g Use graph6 format for output\n\ - -s Use sparse6 format for output\n\ - In the absence of -g and -s, the format depends on \n\ - the header or, if none, the first input line.\n\ -\n\ - -p# -p#:# \n\ - Specify range of input lines (first is 1)\n\ - -f With -p, assume input lines of fixed length\n\ - (ignored if header or first line has sparse6 format).\n\ -\n\ - -h Write a header.\n\ - -x Don't write a header.\n\ - In the absence of -h and -x, a header is written if\n\ - there is one in the input.\n\ -\n\ - -q Suppress auxiliary output.\n" - -/***********************************************************************/ - -#include "gtools.h" - -int -main(int argc, char *argv[]) -{ - graph *g; - int m,n,codetype; - char *infilename,*outfilename; - FILE *infile,*outfile; - int outcode; - nauty_counter nin; - int argnum,j; - char *arg,sw; - boolean sswitch,fswitch,pswitch,qswitch,gswitch; - boolean hswitch,xswitch; - boolean badargs; - long pval1,pval2,maxin; - - HELP; - - sswitch = fswitch = pswitch = FALSE; - gswitch = qswitch = xswitch = hswitch = FALSE; - infilename = outfilename = NULL; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('s',sswitch) - else SWBOOLEAN('g',gswitch) - else SWBOOLEAN('q',qswitch) - else SWBOOLEAN('f',fswitch) - else SWBOOLEAN('h',hswitch) - else SWBOOLEAN('x',xswitch) - else SWRANGE('p',":-",pswitch,pval1,pval2,"copyg -p") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (sswitch && gswitch) - gt_abort(">E copyg: -s and -g are incompatible\n"); - if (hswitch && xswitch) - gt_abort(">E copyg: -h and -x are incompatible\n"); - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!qswitch) - { - fprintf(stderr,">A copyg"); - if (sswitch || gswitch || fswitch || pswitch || xswitch || hswitch) - fprintf(stderr," -"); - if (sswitch) fprintf(stderr,"s"); - if (gswitch) fprintf(stderr,"g"); - if (hswitch) fprintf(stderr,"h"); - if (xswitch) fprintf(stderr,"x"); - if (fswitch) fprintf(stderr,"f"); - if (pswitch) writerange(stderr,'p',pval1,pval2); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,fswitch, - pswitch ? pval1 : 1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (sswitch || (!gswitch && (codetype&SPARSE6))) outcode = SPARSE6; - else outcode = GRAPH6; - - if (hswitch || (!xswitch && (codetype&HAS_HEADER))) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nin = 0; - if (!pswitch || pval2 == NOLIMIT) - maxin = NOLIMIT; - else if (pval1 < 1) maxin = pval2; - else maxin = pval2 - pval1 + 1; - while (nin < maxin || maxin == NOLIMIT) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - if (outcode == readg_code) writelast(outfile); - else if (outcode == SPARSE6) writes6(outfile,g,m,n); - else writeg6(outfile,g,m,n); - FREES(g); - } - - if (!qswitch) - fprintf(stderr,">Z " COUNTER_FMT " graphs copied from %s to %s\n", - nin,infilename,outfilename); - - exit(0); -} diff --git a/tools/nauty25r9_unix/countg b/tools/nauty25r9_unix/countg deleted file mode 100644 index e781b8444a7fc2cd64c80781673d87aa47854e5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181231 zcmc$H3t&{m)&Fjig$)mH(4bL40!AeY$|`6Uh}ne=+{F!|g5U#DA`~hwVHeOs65L(L z?Ycm%R@!Pyt8IO?YVAh_HOcZwc!&lNb-g#t+W$D;8+zyk8+r^9aP!&4=)Czf%iV)=Z0CRV zFT+5**Ql>GzBCy9GoMD%a?6y-<8SYK%aq4^PnkR|Ft_*IyxV)<-uLEN({H|2^qcgF zJ9PLcQIpBXETq`xO#DX~VE&X}41dv<)oatcf2&;=9DKZ};fwP3nRgxjBMs3nYqq7# znvp`-_4to}xm};_GI7*n8O{?CQ%v-Xgn#$o{nCWA`RW4Ui@{H~g1@j8cz!GJ&su@s z*h;;}Tfwhx1^#3!a9=C%n_GdeYz1E03YP>H@{i&_M9j(BhXodbAt-uRgf#c0sF+};9yz<_78fLowXim5(sw@jQkB`|A}W#W|S#ZOF} zJY|Aq+_)JtCr|TF99KN)3Co1Jll_))-n+-m2>6RF6Q|FZFwHW{KXY2~)ESl;6K2kw zJ`?z}{ErnsLG*DGADcYIGIPRXQ$P)Pk58UvnPHZhf}(+GKbZhJQzuNFH34+Tfx@)u z9ZzSrs~yA^iM#wC>%gv z=CF29w@jQfbFzPeWg;5&xMgBsTD+V7$x|l?N>iuLp1?loHIp&y&`kfhsgI%g6ZK9` zoHb#>6VolTo|;uWecD8lBcpyYb^0^|d7Nda&pT-FxLa?&?dHDmcSrMU^V_XA_v6^5 zT;zYLKY~$zo0zuvn+ZvQb=KcWk@`DL=y22C_^+ItP76K~a!J_pzxWl@dz$4@Bb_;U zaz|Q*CyaF9D&nVD0!Z_(ahxt^C?sr%0P-J0o@{ufjWGXA`6K*#6NslNe}vzV0MB|< zr{5MZqe_vRodBmTGyi%fz-hD0zdi|Y(?&BdF9FWF%|BNHoP9I@;!mL0=#4JGqt)V{9X4`ra3jWT9F>lG^eCiCDIQv&8eupBhvRW%_*oY z7wKV4bLweJMS2j^oN`*3NcU%&Q%##8(zi0rDW*Lt(l;{Asiln&=^jjTN@*^UzKUs1 zC9RK0U&=J6kd`gd?U?4&(K19jg=tP1%_7og??swZMQgYKz;!2><`mKDMEVfZoEloK zNbhHwQ$ni}>D^3oDroPB^j4-h1+?WNy^(2(zP41PS2InK*UChC71I=TZH7qyooR}= z_NYj|!8Ao%8zItvWSSzaxkUOmOjDG#J|g`b(-dJXTcm%^G(}g-5b0-_rpRg*k$#$K zimKLdp8cQ6bT-pxohWtlSS$k{mY$CdyhVDx${v%Y!V_|EwN+X%s3}wxIJk<< zs(cvq)PCqnxC&U(irQd<)g3$!tSY7RN1&_N{(^s{#j`Oejw)|-y4|PD%X!rOA)02X z3FR!ugMT%ioH2YBI`#ls&R6^aI?{N$_;l=%0h0O3mps0>m74n7^!5hVScB)RQYZvA zIJO4QrMN4|5GiyerkosHXLkqJT0>i<&;o$vNFi7e%6Sy;WqG{=tHD=`|3f)C*IMW} zB`Y6_9KnaO0?=R_!WSKC^%-TP6>SGTDTQ{Tf`JpIP$QqSrOiBYH2v%Q3{!E`?A}yjkiNLPE69Ekue82sc4y3d5(Q=T{dx zzm|Sq)qS=08bDGv_5&1LfE(eZD;Or}_p8a$<^c$o0t@5g0hga;MG?q^v}8Jj zgf)aG;w3l_65&z4l0v^hYGux(@fJ@c9la>&DM#ELsGz&8V&9wF`mV{0J=c(pRZE(fbza{l9}El?NK zTZggP44o%O9?r>=!+S6d2lRfQ{K1@9BRYt-j~|NSr^&*sd)Yh+}OOGdx)m-|;{X%c_My6T+`90JcCfAehPrQJ0vK1?+>-oM8UnAMC;Q>a9b+Y=eL&m_(e{ z*yK=O&>>10pZVRM?>9$Qz)b)|c4s4-tVCB!E|qhUyA#7>HIXWpPaAJhZ#XMjG6Pl0 zskSHasKk`BoRFm()e};uw{qS=O1%eI1XZ1oGIWrr8(DhY((|F5b4-PS@knz)X-Pey z;D(AP|JdCze9^0a?To1YI2n;@JAp^M`Z`qqc#ccm4ivL)q=Wgd0Ly}Efbj6EqJ281 z{}M=?(0x+K2`kwwf49LVVi11|N_w>pz1pYsYJZkk?M@JTN$>ST2{r4WYQ39Q_NWY< zAm7oF<}w%UDn)OGFB;0p;Aljj&7lxDwmMF!zaAiXMwxa=Aq~@74pN!CuVT{GpaNuz z88wMB>S*L8K_c>&py2+H)3L_ZcvlZ0RfUcwxp<9Sd|sK7Gm<19l@*)h17~A(DNN6m zgK8R8^HS1E$YzTEz{0U=QPk!{AbX^*tpHOqQL-WLfes_+Iv*5MU^S;YewZ(7y;aWl4+9 z!BTsaM(F9LoOP~!ZVQxvuAjYVY^FEj&*{Pz^o6Pv4ZA~*JlzxXWKedvNokxriL$!| z>5e%&td{!An)Pi^wVse3h|L``QM$Qy&T)Cc1vXySgM9@7IdX5$@K&XE?sX)xgGBaj z2a!vJT{X*J%JQ?0J2oimgLPKT4kILp)E^7x|Kxtm6)F5KoY45>2;T}9HJJafo^>7i zCkOQjYSnh4^SasB3LC+w=;#!;ASNr%>lS^*P-u|PwJ>tg^^t<9%5Jr?8vcgu$Z%a0 zA$XVH-Gi+1=!2`>0>X*--D1R_-;Dofyw-n~h~k6X)Yz_SMj1?$cWDroVzfPAzg|73 zRuv#}^!c0-cq(0TWaT*VTu7-SHzKPzBoZ~Yc13yn{-YeTxv1t%LaV<6l*Z8ZERs^_jtr2G*rxxOh>z%_TM`*U=z=(r8w8OIoe0-M zEn4y|TzK`;mPGauIxtRz>lP{Wq3{}Pe?p=K5w0uL&Bt4GXC9%aNm_JgtRV89PQ)dM zVD!MT+5JtnT*VS$K}XLbXC{FaotW`foYaYX*q#S;QrnTB?x41too|wQ8&I{sK}sk> zIET6dw7tT-N8;2%g4z!lMqi}&i=+m1G|6XG<>-h;uXFpH>wLMYXbHVO)h@@>R5_Zt z&W;M@+|Pa1W9lzh5vlX9%$r_l3DfbXxKpC#Nax?PlEsgwGSTtxqLR)LKBDdn*|}Pd z4$5#zzpR#>G3l38E_<~U`kq?hTsvvuVZMAQ)ING0f#*C?nr=ftaq;^fa_Y^x;Xyu*PgWWyPP9 zL33y)dLKYoJ=>9%qn5uyhUqm#o)`Evw$X)VTRO(y)_6?VN&|-W?FUdUUR`6G&y(h*wWN@DRMLChS$`mVYi zf!qwvmYwt5+4CMP_3Gpr{EsA57hJ_PT}og(P~F*bWaQv%A55svIlAY(-ldnre%_re z3@a>VY|hpAcm3>t%8|i#_lJ7Fzl0MlVncEy)gAn}ss6AW9GnG%w^#igW`(SDZHty` zAH(=LUlKD!3jY+HpmS~&a)XxFq){(p>i95YBUpp`A{}dCA1HtnL^;y0J1m))1~A$W z=VbYmUO5oRjJW(#I@K>`S}8d!qSU~RItilD!A;IaY01r~(|Jw`J%iwsC;G&N6Vi=q z@ZYlnhd!uqhk$=V8e{u#vlY*WV{mLkIq!%D^zOq30Pi&=fdBAwb*x8vIvxTgBLQS@M4x%j;Zqy36quH+i4jiwomYY z3S^^;ijVk|-s>y2Dw{~SGl;R##U_1FTg$q%uy9QW);)Kb{NmlyByhh?E;5`7oeq~b1VaFMIhn7b7dN)j$>1A`9EP;A$_))|##5`8|{RU-M zHGoChJJ7O$Kh%dERhk!My%7o8s#Oa2 z=WG5jkh7HB4}Z-yUv~!i*0@0=>eg{F|hT016d#5y+8IpP`#;p>Nf_*MU)b;lLV1F$!e3 zpLxjrGjhR%r{YW)RWE`wfv&`0L?Hx>=6q=4+kkYs(p$< z0LCz4ln|o|7}^6uwDlF22bw{w$f5(S(4>e3#T->iheb7M3n`%-Pn}qW z(i2z@6c5(JR5O%k&NgZB)uO}w9wKpA@%6}boboBB)dy6VNuZN5`1>Fb;L{XmF7!q_ z{3_y%jAXd zbX_S@ABnlV$A=18rhc40ue=adJ4BVCJ2_Hrhmu%zg-Oh(9D{^(BE>b<0bR2|MvCqM zW_XV$GQm=E1(>~x_C?IN%AwhVEb2D&3i6ufEndq>5?M+s=!-7rBfQnW1idlp@!wK} zakHQ-M@vn{S4x^>Kb4=szhaInmQMlUXqX_Be=+QWn+E1 zC2)nt5S`Sm3=PAOJz~qNv09*uU}0^&@j9!1)eQ+%3Z1C-0xj)wA=Cd54ALjV_HO|G zsqmyf%&7xC^_7RAJwD7?j(4cBzKK~`Y-kTa+)Avn5Ar?AvpGNDsU8IxIOkra+JlfH zK~g9P#vuf1x{E8hbp!49-Jj$dmmTjgiToF1Q%?a=Z0U43Yh1L2;LB^xMVvj+#FSAP}U)yD%WDGNPSe@X3a26Myn!Ng$xCCC6rXCOhH zBKyE(6_u`<3un;>2y`QQDFg>}%3#hRF0c)5wmJi~TlF3&*EDrT^Ek^GxbNF9=m!25C$&+B;AMX0O*6-+o68arKJ^*cEjT6H2w zs6Rc38Xf>tD*ufb@It$+Ov=zYVIl3=ZvZ!W$8 zv7Ar*;gxfof5;VEG1^Sd)kwz~Xv3;&k)coH_1K3}JD{bygMI?-8XoPnE*l7(bv=+4 zi`q5*HKx<;Qx0(}>hu9_D;$(-;HCl_PeYJtT`hqTa9Kx!D}W0jrYFl48Nm4fYbh`^ zup4O$YSNw&<#mmBRJ##jvS5Bs;DB*eut^h_YL|g6ZtMX`q0_8N84GSbkx~DqTlrFZ z8u*oe;II{9gHKxppGi;N&SXEXJw)yeOzw;4W->X-%A}K4}ZNkXR z5rOlUgsAxWW+!%2jnHhOU}^ z0SxU!OiP6FwSgEH2No$CwBNw4pxbE56B*jOBHEJwXLk?FN^T*pnrzZQ6(d9y`3f@O zE3K;K79;tKtbWMShq*o83PV`B}fF%Sfv+Y@_-a+1w8s^35nU{$V^~h3v*6}zoYED9A<;%loEUJOdDy@ zDNs~4H05lzBNnW$cf(s{rZDC@qH-f#oP>^a z<=rS>z#-v-I`DkCzqjd*D;FWN5ZXO&XuErB*DLwf};;4ivi(r0(V4%DtK5_x4{ z3Wqt~{tPysEk=!lMD-((z~1W!d*Ds&Ue>!*t{EzHlJ=@j--oTlcdgokBIV&&q-xVe z!d$Q1sXdjDc8_*cx$pNX7jOb#q*pnK6971YlGvY9{%f#_;2$1rO!4Pp!Fs|Qxtzk7 z?^Sjbg--=AFV@-Ij@_K@KIL1- z5yzgQ=(KEg%wCvS+xRJ9 zHj2*w34K1{MAGfsmtY@-+xNv+PzXV~eKpN)AA0v^s}rGJ?9QQSZ5h}UHQ@LOF8cK{vjDC(wfbPN%i zMBm83QP~iRu_&UY;|-PQ^5P!N!y#T}I}e8_-$6L?e31ffb7jl$#d;QD=@&YLv5nZ? zh3kV=NG7&a!h3wt91+e!j1-7iwn*WZF=R{O)MPR`^*o9=s_MIWBlCu4d!6$Nv!!S2 zfKWP$F)5$3P6|CqjZs{#hr#x>39i)RQk$`5RG5w3qM=~R%$~CI$)3`)e`3+Az$sD#Nq^kKc#T`B4!rM!#|dp%KgZ#go~tgDR-Bsos!wTBD}|rs$;tL9 zd6*S>39};3&k9t8nnv5%7^5NKIe@Xop6Wc*0?Cn;byDbeXddEkIX$tOpqny+E!Y#V z%Qc0wqkYNXIp(6>7_e752tQ<4;rww>=yXN-vDm)M~KcjxTn3ut!SvX(P zq<$y-JiRa4Eo`%Li$MDuwn%Z5Li33>cdU29l+yKT_QcdhXsB+Tr{ZlQ{^I93ba@gd zje>`J%8_mqr7RJ-{21+z*q-Q*rLXcmlnbP$17yh;9hf9Z8Nyx^BGwjunA8dN>w@($WNJ7D9tGvd zTnN_F5UjUYmVz~mg5@#<>sNpZ!FoeX898zphD`F_he;3hy-f;_C3AvndnO%yB7ch_ z6SL&VeOYpJmXNUwpL4%g8u}TcZmMgShzP#xbACPN4(U0rC}zHD_6I)aqufkHf3svI zi^OpjAwj})z3@INZqlB>KYAMaT+CXu?35u<%6S>y-DM<3H!N}&@?g22L!acxZNh4w z2(;7wgMC~|XCyL+$}DhFj-=qp<0VhSy28Tp>D()YN?DW^o3xZ$5%-mqVGz?nx&)#O z3>jPo1c^yNPbi2v!g9cwerT*#_&L=e>=i)|ja?JhKY|wgR**!=Pt0{>bIJCiB&tW9 z)mjPpt`q@(u)TgOVonSDazT{ z*{tCH0+C8(>QXb6##9G0WmC=uzb%NJZ4<010L)cBx2-7C2HQ^P%H?ZxY!bEp2sKr& z45;A1<#1Wp-{=S{Xt~Ps2%5N*^8>SsD))ODb$P3pxCYKkV2e171v=J(sCp^i*{eY{XAGlz7ZwG}312AB4h7^1QQEFB#EBDzE zfX%};{hb&`p_K97U&f)Q=c_zQ6GLEFH>hbOiBokYMQ$8gd##HUz7Y%B*RrMX!+44l zQ-44c+^|D1&y0VYRegxPFS9CX1r8*%3+(qI=IC`E3G5QbY1U>Xh_UI{mRhHx4h&~m zY0BeLm}f)FN>lqwVFo+OO4G9C=ukLxYXj}QSWUUh2Ige@zc)Dm4yu1ghihzors>gU z?nxYmVS6n_5*{NvDTRuJxa?KiY)9`H=U69|{~7Jow=(M6(BD{#Jqb+g0r!DzZ;8GP z1KaMhODj^?m#@HFpK{%2Q?ZP${7jIM%3Z+Y{$ucn)v;BU-d2G$Eb8x#^(k5fbyfZY zxW-|5m_?MG+9|Y+`k|R`M?|DqHtGW3FhDr`fR(d2OAu_Fg_C?(pavUfNa1Lj#e&mi zICqGbW*Rd%_|XI!Q>3sBWtuS-w8VH!3Lk)*){HTzCB`%<981D@xg`c@{5}cev6dJ! zB@qH?t|hl6#yBbbP!f$Jg7*o1DVD;{B#b~y8q=ll6-gM*mKcz%@4?gNc34|tOpwCc zk}%e_Y)7^fI*gE3uyLRi=2lQMu}XlG*bfXwmfbal7Vd9pZ(t>^>*?k~zo%p*j@c|J z+y;e$jX#mX&rm4hQ|rN&A_BHvpVWdLEio`OX-OF0wCpgXX}{1g<^=v*ON>cUxGD)_ zW=o9QrLgY2m^Avg!~iGeCDFLhlC1*+kC0DR^68m#CZEWK&~Z!_h`mdCq1q*__#}AB z8f={4lAf>We%cj+KUyaO9A@4AmJEGd3eh`3@atwQjf=tuSMvCyS1SB?m3pi>#;|28 zA~k3M?_qMPzFW&MkLE*L#8e9=)$+TRJ)9BvUGqr&v}NvNfwJb@TU+L093P=-ijVZ! zmfV3*3{1kPXo&&Ay($S~VM`2*QX@FoTuV_)42;r_B#h1%!T1L-$fp#J)J_Hhp~vV^ ze2jPPSI8CipkwS7gzI4PjBs5>1L9m`w^04x2{9aS=-nikBRN zk~j$wXU<<+PBToDZb{94vLyzXbN+l{*PSgfpnvuxVVtLCO`Mm|KP!_k*0scd{&_J8 zBhnHB`X`WtabHUewDi6tjH_E>V2~V17%x*`6I%)l2^i#ZHV5f8_ zR#hd){&t=J!sCSK|7tTQ95(sxL`fKKSS%?tm>y&#|4?r+huq=}agkKGR>tPaatx6f zt5Z0p!L?ZKCzyEz;oe2TRR~TR^3d}*+ShLK_=`h~k9`W)HFt@)-Lg#WK0Uc@!Tg(X=<7+95(IlQ+i+aY{CXMS5j40Df}1|f|f>#U`z}-7}UTD?F84Y z%3jV}^-Tl%jP`{NRe!BRaHx}|s|{!nP{%2h7v6{zngV8NcXPgi^hBdbh(~I)u+B%} z@2Yp1S@V&Fc=%felW#NO6IjHrLnkg(uQuS}_830k4>9UbHQ`%WvDo2I_5#0tqcPks z0uKDk4g75;d@S)TIu!UHm~c)C;D2Lu;T02phWNEQ6!;MnUa8YxVc^d);q0xxmm=Ep zkO2=xfe8BZ4gA3-{#ck1ZAP5_O(uRO1`zmZ#yDQ4!*SIF194KH%rIiYGF^c@I+5=J zPWFGh!QjDO47HYN)VRfj{)NyBoDIPJz=Tc*l>Im0ubA+D#IDt$?7s;=2NnW^Gsa`E2@eooj^p2C(m$*7_kM%^WhT6e{B`M2wCCJMu6TJogCKG;M$8WFasPCEZuL01u>0Af?Z%z1S9sfn-VA=}hMwbIS z8s!Fw83trMmBG1sFsP85d-XC!A>wW|OG81kgzAKJ@ zu14>Fs5d~sr&yBy0TbRC04);7-(+*FUi#5k*q>8o!`}>~?ss&hZl;lViL#_II zDUO1SPT?t;Lj~!zcuzIo8GN?@F@-=PA1XkWz)3T4kY!7FZzjq-!ChTj7^WaPpY`ZRdyb$wn@-&!6OC1^LI*%#h!GT9m#Suj%WQo23h^DxPqo1Y%niBIUn+lb>ZReC-!F^Wj?zn?r zHaRvpP6_=T-Vhjxx{s$*oep+jhXCe4@m* zT_{w(0?fVb8^?x1rNNCJd%9N_I;zsY68BHhW?|68IduB1xNav^Ot)$gI8b_gd@tU> zJgqxwUMfefkSbDmtL_=p4LaE39C(uydKIatTw8V~ea^!{wU4~4K1c8`sP*wh)5_%H z4a1@x+_>&w!F7ew$v8qh?{QgKFRnLMwDUyWweGUU^x3u86k`bP^ll!xkP27JN*hPj zn&$cH#@-BYuB-~yT?kgCu8}GRS>1Y25+~mDYX`>OUKyGMb8&^(g@G`Nw7`FdXX>mX zqATRqpY3e$Uq`OiOQxTQ1b`X3Tpwo}M1Mq8iR~GQu(tApa$1jDDcb@Q0#<>R9I;_ z3g_`9ywx9SE-zwmh?k-}-`}TRgTio?#VxVbq9r`Dxs1(q?hJHd>}?ZBgRo6Bta2`$ z+PMky75Xel*q-G2d|`IJ*?X1om>0rAhp0iG>* zsb6f$2l%iwhIU45uLCYe@3U5?WwonL%Me4v%fCYZfuw?bbtG`bRZlYT4kX}7x|OvE zCxTgo4JI+%NQ~GXAU$Pw;63aYy;s?eqjWu{o-Th0`w7Z9hDp_pq7~-iUo7;S1D$;s zsa(vH7vAEdVgU8qrKo0qj~eyiJ@5tDy2_CY_+l~ffc31hW9;X(l$H8EK&Rx-g133e9 zr|qcv_bPPIxlRh7)2q4{Rnc${1Kg+7amAFdUW(JFl>DA0ly7kczXO&oxhSZ51iL6B z?U2L)r4CZ)D|S;^s|`qyKXc_W>t_iuS+}w-SSPt-=hGB+uH+$D495{Mzs=a^tnqR* z9`}@EU)$y4TG|rXy1meOIIy!YIzOeTxXIY&q&(&?=#KqBG(??LDUM8a&}1~kaio5m z@P7d0>LXZrB}a55gDJ{hf!|ZlVki9j>YpQaXB~vyHw67K_*k9o!K3mvmd!$0lRxg! zvU0|&H0isR2%+m6+Po>TcsAxjR%{V&wd5p z!B>0&rwhH(+qnLL9req29|g`_lQ%lwj)1ilee^Qkgg zt;zOZKP)ovOUoIYWJz}_HL<2PZp{B;7}fm+!y}p7nd3{(giWzp_xP+EV8#RQxsmc& zKPhz91(xU=HSufxWFlDhBu@MvE&$7PW}O5i&0r!ph?FfU1^>p|)_}Ci<|GfV2|J#n%3|{cfdJ zIlFB?T$@AI?z=tdtKrrBUDr?WjKW*cNVjv#y!#8C`=ls$YP`i8lpPR+PhuC^$i=5* z>v3g=T)Z{-O#y&A2WvZit-$(gxYO5%0l$1#+arWwXc>z0l{AD&|y~mt&Tc<@NU}F(Kqq=&xYE(s>**vCEEA#e-r43+8l& zz2_l)f(oM##@uD+3T7WIC%x33K>DiwnB`$m9u@Y>edX%$; z%D@~be;%Bhixso1VE5-D=VGLaF}nYc>f!&RCY+Xs|1WA6@3w?@-T%Kx%fb`E@uJ-0 z=z z9_L5a9N;&xY$X4qLwHHz5v%qWWHtLs zKExgWo}$U7+<2ltD^Yd^s|q}lx6utXL%xOAQ;3Ssi9H$`JXdm^- zmB#$w#yT>kkOR?o6wl*LPP??wk9q}>SxH1tI8ThJUSYP{GfpT=3LO!+tV>x3&!#9c z-CojNw18h6Ic78?Gt6eF)80oDSa+EdQ)m$CLyuvOMv5(!qBI_Q!W7U=lI|}ks=m&F z-H|Z;46{>hnw>U5i#2G)dZQ}Mx`#K}c3@$FsAihSc{;G#9UXGPG=Yg1;#@cgG}31A zrj9HGZ$`qmHSWQwYWLtbaX0>fjW1*W8)0t6OV zNU)xQ1x`po!`urC{I4Z^$u;rCZ%@1lR(m7UvveuL0BC;)m~+A~%&RpE0N{7F7UNXM zoe*I!%7wjXz%rTUx;^v=U5dE9hEE%=s`2FXV)xvJ3E+f?+wSUZXFZ5!XS6iniS|2N zs^~@wMML-{3)6gm#uu7zgd}Lb>EAb-?`; zF%@9MgPy3x>TzzALV3_3wBVi>08lnUC_*T}s{w8W##y-F72R;>=@B%?{{Yw4XpU}^ zyVG(T__WJ~O08~}x0!aij&`{^ZkKm!9YqmgmyLMEIq+HV^Mci!LDFLGk8@5n&!vB7 z9^vR2{8A_d%%W_;cFrsHfq(G+514{Eg>!g`b868wm{UcO(b>9r;MneR!iqcHO6Je~ z*%(VXDkd$QEV;OoC;A{T;DKG~Rt7$&oK-&OLhO1BgJ>*e?R9pOvbG#A#_ZPzI0a~Q zla6unu-p)~AwlDixpuYey#%#W2o$ffnvAwaiVxqKAtz11XIf!0pX&~c` zl)|P`!!CT6=y=lt*lYk?H)ra!IGh)K0M91AUA^Cc+qDn^|M*%I?t{LLkx)AC!IeD3PjDg7MIZD^GwuODl;Fas3_tXY@IxW; zM^FX?pm@ z*>E|J(}s9+tBRzzW8Pp@d*H>r&lB)IWqP0OQDJ4q2@GTJ!yHEHz35=@y<)Ice8sQX z|KtWK{7;{da^O{t0K?SlDHc56wbt)zzNY5l)-ob(u59C(Wjtl$=`x;q#S7Bt$}WG2ya5(@L|30^+1z2&3B)&jZv!L**oE~pIUI%U|Kb< zpZ-T0sLREhLipX9kE8i%4W!`tI+QC&M z+`Ye`Vcz2HFx&c<0Au@8g`xLG2WA@cz;Q~~PlZwiEZ&KsxHju%czr)4uCWb7VR)oV zO`)>h9b9i69_}LI3x$#=27MK{T8?zcfg@1hi+XYPxI>Po9N)jw>w@p&tPZ@6)dqwC zG1eDxf5d;43|SX7ZL4EBJ(QJ+a`2_oa?E74r5%&i=rw|ASdr=Rv^8?1_b3VXwk{P) zF5ioHb?sYFYI`}PCpnPoG(*nf@kP1#D2~!H#3+N&Hk84VB1ezmN{iOf{NsQszY}xj z643L5o*Bsf3;+?x{rz7}j&BD@3cZ0+xE=7mA5mTplyOc`v;$6(`g8h-4T=VBh(;;9svQw>cpnb*+8QkCbLODg6ZD&HPko02PG};28D*% zc7(!9<%#-Z+D5h%0ew{COD?WaQOLi_1N``bgPfO46B$sSm4a1vv znCr1VZs(^`=mXFQ)?1@fdQ%XhgRH@I1@V^kah2cbI3gNNJqukB{Vf`eU6$}ce5oVQ zTT2B|5zp953c+Jm{|zpw;(LazHds#~^yY~^bO8dXob%u532TARmA%#@K*Q0~=uFlH zOhk{Y8{8kj&j&led{%nOaRh}$&7w7d)gEP!N7;_^_gzFQs|y@Q-fJVq1z}!+$abJ% z{<}O1Hc0AkWm>eVUUW@VXLQY|#poIvi`x8`vW1(iN9s2x@E<7P94gSY~#ItB9v*qk_g`f?i(q1ieJx+S<)MnEMYE=|&4Xgv;>SUH_q zA3$v%n!41deC|U_vLM&l6oL$O)f?udsA|ti@q!T3ey<=Qq>=Yvv*>EFks0!qqqrJ8 zn{p*9`6WQoUV}d(#=PEYJ*9lFJ%D;dM?K0urDof=9w!bieFq>T*g7kGIenscHEpZI z7N=?z-;p)_Z(pRJlQjp`Ol>ke5^RxTf@$yIwel=A!<)Fsm>l2Y$5Zu4!z5fvgZz7V zZ+9pZ4sYsW4a65bGw|q(`lOHyO%K9uL}R)3!DV?X)}`oYUq)+gJbj3-vBqw>ID6k# zEnb(QLex_)nh9(od3>fyhj-(1%BzL&|auba%i z4@oJsiTF4v9`)RGm>Q@rwa*B_cVS_5%`>7pwZHmz9Dn4se&bVS7>p6_ZTm!YtdKK1 zVzaPWSiT9f>ewJe9qdy+Aw8V__fymGYm||+(|mEkLdeB^|0%8}yh`f>NjLUml)hk@ zA6KHI9TsvP4UIg$@`pm~%q*EoL?;x@oPkg~^U`&-gK&mWJNyP;^dDtp2)|KEy>q3m zchE;&@95ogbBa{|E9EmHu6#xa_ksr~T{&}wrR3kVGe4&3v==$e~|1Kz>+l_W5=$~N;s@2C*hH4!_6=*%^ajO1K zh2fKdkD-7*Hs=F6>ZQsVFc8XS4kr=3^`2G;Xio&8`btZ#0}KjC3Oxv3x}9InmnghJ zHHG{Y9!HW28j+}i`0de*1Qj&GR6!#Q6*R(7K_lecolrq{<3b-)&?NZM2`WhVg9&zl50p|D{j%3}e>UgIO>I#phQSUM)P<{xJ~Y4CdTbb* z%IDf3U&wdtC`9kW6=E(b`3C^k!Yx$Oov7MSO`1}@?VAC9urRz^G`LwejY!Z#kyy@ z+NYe=ol~4tsD*aoS8>_{4eDWw4V(gMQPiK2>a~92byiCYy`0T-PJMVm@ErTfuLDo@ zziJM^8%Ro_JCO}niO%UUAC!Z7Ee>TyM>WYS%_d>R4uAM_>c!w{n{bKu;q#Wt=ib<{ z6kJpEW7~jy%*?6A*?Tn0>T@;*jzJmaV7ZKsK8KGqd)|Yp)AEG#IH=l_XSI~fGUvmf zNLu8sNG5gx3%T>+jrw1(lz5xhAHL!?h0fafy^5?mv6P`#9y^4ug4SZM?_N0-zNvMq zH@DU;tyo%j(rvM4kRG%PG+!EyfW(Tdo4B*#ac(Ys!BNFlUkOpgIz~oNGc_}Z%`QtR zV9SrtsZBP=1!#Z z%PnY4)oCq^(|V}|EnkcF#r>6>6wr`^XC-N2Dc-!wHgBvRk@KCHCutP@P#(a(=79xovk3lrW8bDh z7+i#T-{I%~CQ6TOWa@#siPGfNfNTL|J>F{xb=MX-cM}B}wRqx$&g5-)--&l1Pez_7 z0Qe;2KZ=4R`6%!w8N>(^d4T=!@ppry(hg4PnV-JZ{1pZRM>py}b4MRBEqn1EIrSQh!XK^rC@g%MNK^sGP#*Gy&uT10 zp8Di+0f*jSgrpSeKtAHL(Z)!HxVMP}?&1$aL633*3zeecPhy9%VyfL!J}0GobSj|b zL#?qxy!Kx{)K)$^4H+<2FR-fUoVFNSIP2(7V!QoU6-7seVdxo8jdXa1lTLQl&ioED zQ(4b$mk&>ksae%S(k#_OY?ksi%KGXdZ7eZ0qk2eNdNKC$A!n5JXh!*vvqjGJv$AnB z^<`Ze#Ufvq#x7xaDf-VC42yQzjLjWLBbIjHn3#NO0XcvT$8cLV7t=k->XiW>;uRPI}p2JN}X2EN$&(#A5V+_NZ^{3B1g zfhX@`_Px>69p5{78Cr_JZ}0)Rpz+!~SP~WdQ3)1r6sO8DR5{n}#@i)SXjkJc$sfn3 zFb(U*b5&Tcj}cz^fT1`H6~dBN7N>zmtM; z+jVPZJA{aCqzp!JZ~}j_@<1Ow{8@w6i|{9KWW{ZlLQz%}abu@$=PbSCT)pJWM#((A zWHh-X_UG=?OX6chIal)}(!vxLCh@m`kT{S2BfcDb$G+U@9YSsK|S=Fl@%c zz9;0lNcmy7GO!9C#`%aX@hJN}xo5@pR_INnaem?gCKSKV;foZZ^Mx5+?3D#`Ahuov z$z^4}9oz0#%J>w>!V2&R-|IujrU=~Z=7Yz#a13Axi0K0HplCV2d0Ys@wy^^l?%07W zcWj^ClfK83z6rbS=WuPS0<{LuSxN@`oR7Ku6Z8-|c2o8bQo7uXE2C*|#5v>dQ` z=4d(cWOn_t*k3CI*NSj0d%YAaqY!|w&-tlATMGVDz!Lgm*IOSRgf>++QaH;$Z?=bW zarg`!4rN35x;UI$ePn_h31rCF zDGUBVbeLC#N0Ga-^Mn+fBw!2|a6nUH2khxPIhmyL$;fe6V7x6-n5RQ@QlmhsRtlaJ z#b%&bKqs|B3Q~wEqrekTNSA%y5_du)G3I!@gjN?#4O zq74N=ltP(A4{vZ+fTw88EnLBiVDOc{L9;kfVVhr|WX8W+_TLK#3pJsABMyBWLkoOl zsf**B$8m;^@N<3P%gN$LGBZ@~GOU;yv4w^Nzhaifg{~NCEGJ8`Ohf6 z42o0)%9{V2;16*Q2<3*>nUc;XW~leXTZafNKOc}l93>6K+v zH&-Si9e#l<8HE886PWIV#=ckHPI^airM0q_g%09P#Dz%tpC}|cFDSo4^w)?~nTYh9 zpd5g3twRMEJ(4a4Zk)^vz3vR0;}yA_`&zF=jNt|iw$3DR3jAnZKk@ud>-Kxe|Bn4` zD@F`@FmAt>{TJ=`X3?Q|N!ag4{!RNGNu~fJ(B;2rzu$nK`@gZ@!qETNe%DCBAK7m^ zY{5n?{j-dy@T*ETzo(B4c5{ zcP85Jy|mx3B=#R0@H#5D^iA|Y!uhn}byPiTafwuq7qo7_EzfhV#Rnfl_t-`4H$4ry z7ypL+?)RKQx`qAj8iyy_Z(AI$+i!d%h`JxEvfx{^gZMoy-F{z#6@e6-C1B0=yDo0O z`9+CV?RS$XmTbQ_2v`gI{agZK+;7 z?Dz8j5B6JG`tR9qAy0nXp#D#-?Jc1EKWo3gT=G9>zkdN*dh7lR_S=r=mRgD!o!;q- z8{GnfA}1_-mWvr*pL1_Z1Kx@QL^t;6Vq<7HDO+)Tq;NV7oEVj_HvQ`c{tom+t1fQJ zZE;f`0Ai9UpP-xat65bQ70N8VD&3S1(c3AkB))_~B$-IV6Op=$%5_r?TgwTp-APmz zP5HGztz5=JS0)xZ98EOk%ZNUMNGHV=VR5|EuGRnv?m@CC9|PRDDgTqe7?o_wyC-4< z4H}82yq=~!Io^!*H}r8^9Fh`0J;%*G{es+kc=OY(`-fzQMXXLKx z196li`F9@a9{()C39uKxXSE0SiW%qOIUErh=Xy~a4?|$YT}Am3C|_S;;t7-jpz!ZeXNm-*DGxhYz#bTbk&8> zIWV@=z;(cBT%)%m4mbBUP4Ddy+#(kJYSG_&&HjRpP6X6eiC(X0#uxp*f&EU1A4gE} zCLG1FV;!bK4%WL`Y1RMn);jd z_?A0(sL$QeE=p1H*1Myb4|*4z{%gM3vkmK z-{(x>e@||C;&&F~{A3#N41p3ju7$+FxGYk|2y59{ zTr-V;6J=+?;y>agI;@r*!2Shi(WB@yc0uZUKu*C894UGZ+sX(|KWW}Gb;vlu+Dle8 zvJ{3a`ed!E>_YnNEf{V2^e+95DH4}yl2I?a=;H`v0U+0;@=m4*otW{)iV@iLl8qm@ ziVos%WFaykegFjRU>@3@f+p7QBe9>8*d};HxH!*S0xk4~@y)YH?^(FUhRuXy>Kn?% z?p)?X&>ZI){m$iRptQJinO3d)Z}Iz^_o-Iw+~d$Yw>0j*D9zfRC(um&G0k^y<hGn4rHZ-YG-3>2-#jKR(x1U=dJJ~}{L{n*7#m9R)5!cl4cBDqmmAbhLmz}MX^ zm2+Vx6TZ7$ipm5bbpor6bgUrKaw2ty_R=>w9*iTo@FuR8w8t`vKTLea{ec~LdN^PI zCSPH6WKPp4+{Kn_)?kYf*TfHJz`O*{r*luR9D$~#(h`22Gl*{$J{~-hQl#uGiaus9 zicZlGG5xYAcfBunbArCDi8X)>&b8%uqn?~bIajO4nMMdTe}@&n8^&V{f1#8|GH~1x z`-VH_9l+Ao?p69ai*WO`qL5pGG8QYioz_&Sd?s2be&aDMG9_&(P79=!qj}QepQ4@x z=L${oztwoU;jXvB+5cW(8%_Q|;mE9Yi0a6XK>hOhoFD`T`r;2h_UoH-go=x@Q zGvjV2_MnH?`ic*EaecWc_h@))k@9^>mm=kpqR4!ZsJ0{EZZA?w8of$UBMut|zV#~S zeYu~4UhcYRVUrwd0;Th*xs5nD;+F1Sm%AEkGVH-eGq;pP%ej2TH<0>qEYy`c8sm5;u#nYoW4VTKqdmzbE$y?#=RM zr(C?9yQZweqky?MtdUl(1;rfH>*LTknlLaNA1T}wS;oh(&GukbyrraTeScF=a*P|K zXSM+oV~otwtMN|&Cl;=dgU8Tnh|S&h`W-qx`HjzhH&Qly$_%@<80EZ?QDE6R$OL|S z4(t+N*!E)o#T&T?6l2no4D^(d?ZrI(%`ujI8_mHV8Eb_2#qhP~7@BfIT0$3yOZUas z3FOs4u7!M{=c)LmOsk4-CR-aIE!IYSpk2nvz$Ian@HuOw#r5I^clmq`s6|>VK2Qen zSX{-hzH;KLyp)! zQc*n=l~@nExG5lWbFnuJy%g?=6R6l+e3{g+3H}S8$~+t zf^Cxv=CR;y@q$;1g1^%X{_t&L!Ec~w6KdRxO!aJ;Sz{HF*pt!=zLHc>|J0qi588Dh z3&!FFe)J=dZC z`VU54ix0Nq0vawnUHs=F$CrXH{Im`K%J_4UIG%&kjw2{R_&otsE$*o7We+1=i$Nc^ zptjcEAnYto{PbJD+brr$W!fkQTVc!;Gd&i&nK_~pu{Zd?{;>v**vx5nMrEi7&t zj=STJo^xA@(tYRg8+*^NFKhupZQ7z`QCT;@EAU)s4Hc3&L*^Z_seKdp>y z&|Wz_HfMKiQ1epp8-0L#poc>@fSqpqlsuGWNWwcZWU%wIgPgD%_vjP0##W0r{wcN! zybX({UCVLAhfL;l$63K25282sGYH1D>Pz!6ilFK8MQnATiC@`zVmz7n9TGUs*MTin zc8SKaBiU?ZPZaQ>)meB)T*-C=aoKqGZ-%Vk*S5$?V9moh>CQOUvS2MIe6tFJGaM4_ z6%+ka^a~&E$N(7%H9s2@V!OmVKXd?68omtLt}+87rS@M56Gj~?L61e#z)4=2kDveLq!V1H}BQ#t{;9{!Gt;}lNEd7^0_v31``)6=Y2fbyqDQ!u0% z&I>c^3-Q^Xo4v(Vk-iI*zR%$LlMvS~@-la@Dg{8u4d5m1amNFP*%k~^(wP$wV)jB?Qxo786WrmXZ_gtrl&&$p`50$52G= z@H23y<}9g|u?v9b5`OY&z||!9@%?~*L3ldiRL%G+313V2jY;qYgug}jT}kjB4TjbPz-6c5avr$n-V! zU*P_u{|@{xBqp^nbMbL2>Yg6KniRy8+|CP1+Txlte%`=R(lH6M#`7C~YR#fCq6sF4 z_H~BpINt;f@*hYv+i#qaN;JdESa4Rn z;8UWY{-FTd!$}1vCKoJV!T#}r*`i>%ZiZ8n3i7U5^Esxj-+YCF)_B1hB&E_SFs}$Uf)A->f-TsC|_iAjFTTNGF z9p3n-*xth%oeLQz+J7^A_HO`)goG_qY+vh%EO1A$eW53^MPi#M*EQqc@?^I9DMLJD z6tUfolJ1ptKNX&g7YPX0cs_JbrcaV5gOzjKlbOGpNJ*Yd|EEk(#*Qm}KlWsdbu$+% zSPjvSnFJ!HAM+twCH$B{fJ))^Fc-S6p7{=xGtUSm+5LfRKwPpeX7|sg!tTGEVE1!T zM9rK9YW{#VGt1pg-I)x`W>clcCJ7YqWC!;+8;qcmxM`w1Ft5ZF_RB4**%^d#^guw zO1 zT=jz|%?V&d5Ica+euzx<^BHCzUls*3^nztb zc#9A7BI2SSXgv^G928Calc+P&*^O*paSMy@2l)hx-<9O&#>rp!jP3d(xCM*fiR7c6 z-k3VgD|YM<{dln_=YH<99#h|$j%K#LV()~ig~k7pU5s=+j>?3^zfSD){!gyguh%#o z`W-_Jm=){s_}{em|IT{dTz`GGjZHHxJU=&sMZB;Ki8@&wyFPB}@tbK-Rn6u;(ch>oFzX{)r#ybDuH+2C~Y#VtK?aTN&KazjX7R>F3pFl4e2;Y(fpG=tkn^k;VviK0cuo92A|Me5jU&Py?&hX^|9IS_RGQ#agbjzj(l$GAk098Fd z*_@umNJ^m#G}IB>5R!=(G=kq|!CV$x8!y;S6g;38JhC~l;LCcAB0LSfP>W185-<2J zlK6dHz2Ngn1p~=Vox_6n#tV)S1((oD7EfWc)OI@{UYgy9M9d z@f9~fry*{>!-$(#0S#7|s~kA={XPepdSa5viuaMko;c}8`fWl2hi-4yjqr{+2%9(H z=e1ig!l%`nNG8Dux53wonxp1_MaB4b)?(4YNbkRaxG=#tn(-UP&C`AyH^^)Ll|sfl2prKR+9f~U^=!sPAR+83apiQ zjqMYTW2EEnk%O;S;MZ9H4|Q(>-(;0F{x>v%R$8ArwoY|GTdhv3pmcS(cqo}Q*0tJ%*j}IxRxXj}6&gv|V%&3Sc&;=S6(UyG~1;HhuvMXip?|bf( zq$%S2pZWbizyH$Dr+Mzao_o)^=bn3x+4B+Hp76c)8kcpB<-9I$$}0>b_sW^MUo{>z&_3e`Q&EsqV}bH{Mm?WNk>@PJ{Qt{JlHyKb{&&02A_?LH z+I&(5H1-#^%(>wD>PNYX`aQYis$DG6zepo28el4+TIh}>4KR$?(6Qlil;UFHPG)e5 zRHgucfZ-ja7}_zU2_W2UU&E9=%<&jV&`2FU=BEsK?L@$Z5)hMs$2bEK5SD<=63_*l zN5B{fh)94izX`ZP0v1TXe^~*?RuJ$933!|U(a7F!2x%C>0zO);Y=ffqZbr}l0Xy1= za~WH}etA#1&x{@KCS0)NM}G%?%Z>;zo*BRO z7EBTzkU&#Ao0!L*%%cT*jd)S3V4d9lh^GU;IXY)FB;#jD#9A5eQyDL@GWt4YR0pZ} z^(*+Tk7WF7GUGWa<2EVWbbP%$wZ=F*I?>ckL`EM@W?YC@3w|W{Cyw8qCq&`5#hvln z?S!8RzooGqr{K41r2OwC%g1f%N|e!P35`10<@2Yw9liCs(r3&%b8BK?0ei63W( zS1j*Yu@lAnVKR1{c%M$jju!95c>g{8c+YA0(K7a79F8kAQp{VpR5a3Y)lynMqR1_m zwWEZkSq4}s9gPlRqRqF`qYim1n}nUXjWETZ*}0@J4f{YB9Ctwvsi(`1r37^<=4Aq+ zM(1LFC1GzTi+LiYmFHIije=VGpwum_UGv$8L`t*63P{&iJ7jv&jP0-`fI7xRvU z{WDq2iz&s7rx>JT++v34Hn5>9{6M?xdyw{C89}))M0}r)ERPeQ@X@*Hzd0hiNNP$VW zB=~>+BS^ZV0PLjK)*jk3>2fjCm7e`mYV_K^#FSh@{wgljn|Y2Nh-IKr{V{ZKmLGnX zjRFmy@W)iKkIf$|8ok5PgLmjsVE-dFo?&bb>_{Jbb&pU5W2r4|w23U%o=HQ!#!jEH z11T;&J?{f4X>aLDZ@S}CoO*isulRJ(^SaqZZ)^5kVn?vpu1Op8OyqQStETLP@z6(f z>xsUSK2_&1WMiZdnTy!_U`qzvi$?R{G8#s*;Uv?w&~NdP)0@cY)k5zpgy$|A#pUo8 ziYQ&l*1ccKGW%sRCLDan-3>!fbVC^J5yydlSnPVKs#qF;{jt1%7N*TND>!q@UL>>X zHOhP7bQ}E~d`MbA(h+>+T>QOwOVzpfPI^}q-FK^M=6Ga?s|ri&U@^$XoFWxRcByfA ztelxO^FCtJ2(4YjvPi?!UF%1355qG6Wz56tkD;&*z1>LiPX9^>ZtA>pp^Of<7V0pt zgN(z%Mb;?-`O$Z*rCQ8l)k`69ep@GYV#@TE?9h9vWZB+rhK zi9BOf9;F4vba?Q1{d-gsda5S$h31ggjlJSc$?Gb`BEgMNmnylkX6JEON6!-V42jdGYNw?g z9C2T)4&>Nd+w(TC8KH^7TC$^!RBrm#PaNbeVSODIeJ8plc@O7GiC}f!0ypwRqc5hk z7Tjd*PRK@(P_%I9sb@4hx<%zmS9mHckQb@c3ltR#=SPGipnBEnP;#nky~04`0j@Iq z2UMRwiuszpOh7ONl;iu*(jN-FFoTE9aXASy`{-McO4qV_m0Y>N;-APmENnpu0GXlc zZ;MWoRx8Bw1zEJvdn{tBydP6u>~DC5pQMFqRDKK4$zQDUe;KVv=I=@f#@&THQ|&oi zOa2(%xy)~4?1!o`(%aYTu;-kMOO4)Bq?6+q5f0Hjd zTf(`oO}U4;SHi0#d^R<9q%W25F%te-M|i@13f#UVgveVY=enA&VmnnUR6DJHTq*r9 z$eonev%=4l@N(&&>z0KAWDteAWp_$xxt#u02BEAv-FT~LzjWJ}S9FB07JO4qvI?`% zi5gL}xNf&zcudrQ4%dR}+#U%QO(U)R$vEZc+G6yl>VX4j#6EyR$!~Vp2BqnxWYAIc z*nOT=LtC?cNl;b7Zr>&q3dAgu*2!C5BUm&aCpNFtQCf;!7u5@SHNmdU#e?ieR6L6` z@~7$?b%r`e#p{&9!7Ngzl$)qiHr&)Y>+oZ%RPA=1>bz46-WRWPE@|XX)p_R`>bx^v zrxYHqvkqsX&ds<}>uko)<3-u-0IrmNjzc^`Lh0v=q>(>W=eRS}IWAtO6dtcr%1zW6 z#hqH`4*XiM{M&U-(1Kgyb-qd(`BQaHSfXY|P3lo5^<-jFk?%&kz8csaB&I?@i}`aG zP11sO0#=VsD(WBKf26hoOTnErs-3DU=%}ubRUKSq z%jmJ!Wc%~1+v6!*t_3es)ljM)u@@z($Ok`rw8d-Q>*!0p*DP8teeoKf`$|98+cxNz zj4#UYT+%C2b*t!kqQt1DFzUmQW3Y~byxqBM@3Sqro+b4hL_`aPDrZfitWXEkQZdKCG@uo$=N=&R}rEhNgOAxR5lA7s0e4Zm2o zan&NB6@*r)P_6}a+gnAi(iDl9K*Sz)9UZv_6=s{KKvUwz5hrh)Bu>Cp9^s|&!ZK0! z0Sat=66N`=(@Wc1pDkUhlUdf1WWJNkf0GuIS;AVoSn;#s@uP?rJC+hJVTt%@@%Z7y z2aij-CLSW6y4HVL?~y`lJo}0ka+SQ_d@Hk}GY3D?8}fp=MSDEiF}#%L^-> znAErS0VQK{ZJTKi?KtU5OSiuyABnDSEhfBEK*8w&`KJf)5aRn`ymv?GEi=#SiVQxn91SW-)$7gx591ok#AJD;&r#tSvMyF z{wVD?K4|@Q9RG>lei{;+q~?a#@G%anGV+%B?UeCvoss&USL{=EkS?v=*gaONJ!+-i zJ$H@THM-l;PRR597QL{(dOI|uAhCMh|JUzk9#)#UIHRpTYm^)cpQWqN7=^Uyhf zdFUL#JR}0N1s`Y&>f-s+bJaAL*70(2UR|Tm>&p15YlJ0CC&o@r*}$e*T5u`=B--+@ zlHu6(CR9gKAa0Pvbg*KYh>Siol<8FD(4X*X!8Em*JD##KYBT>ROT+AaAAU}}Sy=D< z9*1GYvEUrZJ==VbtQW_5AbP=Bx2D#O(_ zMG>ICx))o?N#I{jhhIpcPyAe+JAW?cDGo^7EK%uG=2={BZi{rG8?-6!u!>pDiPW$^ z)!Iles;g4E7a=U5?=?v+b`Sdj5=-v{s-vjYZ;xGsmuICs(fDMF4B4xsi^0la zahEZO47c^tK52wi_?1$08#{oq8AZVL67YotJRvz(b^sG^)6M`+p8v0alR(V3dT5Q# z57CMdJHS?qK9yU%{-bJxW0fNU^7Tl|!j7;TDmc{Y#sKttM&cqLZYUhMMvGA~M>-pvK`7uNLfOWqb;c?r-h5P7`gIOujl3 zaw~S9&o8)>cgxJqC~>^?TJ0TcIsDoZMpH zwzgQ&b5JZ1>GqV6f^UW7e=8&>C4~Iig0=A?((P*Z(0NzZP62 zOIbZgh)AS7r+&7sA_KZ*J~8Y##fUvzE@x++&1KoFL-K=m`&eyTy*$I}h8#nV%eiUd z4(FJn;;KA(6jz{|_EKS+BhcuH}9uRQFhewOj0+f;|YwkBE$&R3|;RSglB$M|0~TpO)!HuBhfmf`)U}qfC^W z=Ji4ww(}cn)%8yyEo6RQ2Wnp#%(^R8BvAP}38lLpk#ERohQAb?c3lMOP&=o+@)EZeKD_yF1%zKL^ zX8D^2UuYH}iOm!_I0@MB2Td&WR9fm;s<2rL3Z7tJ2cOot1h~WFc*MGYpvT|hG8&EG zJjoA8cJE=4vu07mZMcIxc@G8^&1Tvy>7?9uX?mi=@3G8q$@g~qtM zv`+afc<8KOpV#vWQ`de@C9HA5<;FK!@Ie{YIO2ZluYhL~abGGi9fehIiahc|3j{5PNNL|N|4DdW7h zrn2*<+-Phz&NEiWZl|M(^V}QQnNIJw{?AfW-s^nW4!r*5Mx(sEbsMFsS8n6SLVH*Cb%51RS(Bl}}zHz)3)BP)HkNW5@0h zJILwBs;pQl`%HEaRrmSg{S990yd%VbVivoM^&^cnoO%wS`T;WDF@e&BTMS<`Ap=?t zL_rWJJ}sQIVN(B5>bLOvRd}`F<)i`24FTvF{vF@^c zUPHgf4aKFF{TvKdD3cwsbZ47r2}osy=39i%*;K3V|gT^}CG{kN-mf z9U)x*Id-lIuQXsUvZ*uHel2`eyIN0qq>Ulj$=WK<#2pQmGYS6`crXMWLXYE(;N@1< z_(mzs65hS&!axlNbFu7?be3J@2H68|O#!sO5)pm$Cy6PTE$NJ=Ds-_d%P?ZBPyq?I zvD@|2SdLWpyi|7{)g{KU-)OS5Hpk(e_Iael&jtWgFABYg?bP^zSVvfx=IAshPgOG+ zx&IMG13E~zsI^I{X@_*%_XkSaN>45DXvT}GJ4s_Y-o(?9@#W4LpO=jPoy<5Tg<6ocp>tOB(%)h-3c#1M@+f~y6pU|PpjVBi6$v#*ePVQ?2OVK&+= zB}rI0j=o8Uh3QcsCqC0rB*`c`Ly9)~N9^y41AIji<^%ZA{q}``Q`F7VE^oM(+KmLT z@)fWNNXYsU_&O!$phvjd0lI5w!fU^$Yyq>rPn+klL0&(oEVpFx2Dj~?bDeg>*24|9 zYP)mYlx2bA=~Y!?KdL|-uKS1?^8zh&4ejRmIHqWT=0hFEGQDHbH`2bmdnw-I|3GbN z%LFc!R+;$xf(|mI$P5cYcTD*eoxMgHWM=2^iTyx;ltLFmou{%(0F3>=V^&sQ3#8r% zBoWXq0gEJ{n}F8syIj2InuxbY()%~@UWYeczu-@=|6m-&4MA&hS8e7~q{KL^%ji+0&1h7fE-vme?Ana~R=#xcVKBZ%`RwA$(q=rNd=ByD zXfvkc6KC!cB>U2wTdVFzUK192NsCzRh%SkQ6; zJY_45Z-C&E3@(oTMw1vv7Q@shtaUDD;t33J)^BC1g{F_g@GOC0UwA-Jfvp1I1l*#d zZeR4hTNK>>5P(IE)I8?})t|Y{fe4Zs*n7%b{NDm=$qjJjTnn}Yr)AWbvU8>Yr*#

      Zj{_N=%dbJAjlxE$iD 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


      q3ueHQSH(X(Ep&laoR#L!dHgah$N6W;tKuIs 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 diff --git a/tools/nauty25r9_unix/deledgeg.c b/tools/nauty25r9_unix/deledgeg.c deleted file mode 100644 index 4431b45..0000000 --- a/tools/nauty25r9_unix/deledgeg.c +++ /dev/null @@ -1,183 +0,0 @@ -/* deledgeg.c version 1.3; B D McKay, Jan 2013. */ - -#define USAGE "deledgeg [-lq] [-d#] [infile [outfile]]" - -#define HELPTEXT \ -" For each edge e, output G-e\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -l Canonically label outputs\n\ - -d# Specify a lower bound on the minimum degree of the output\n\ - -q Suppress auxiliary information\n" - -/*************************************************************************/ - -#include "gtools.h" - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - boolean badargs,dolabel,quiet,dswitch; - int i,j,m,n,v,w,argnum; - int codetype,outcode; - graph *g,*gq; - nauty_counter nin,nout; - char *arg,sw; - setword *gv,*gw; - int mindeg,actmindeg,degv; - double t; -#if MAXN - graph h[MAXN*MAXM]; - int deg[MAXN]; -#else - DYNALLSTAT(graph,h,h_sz); - DYNALLSTAT(int,deg,deg_sz); -#endif - - HELP; - - infilename = outfilename = NULL; - badargs = FALSE; - dswitch = dolabel = quiet = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('l',dolabel) - else SWBOOLEAN('q',quiet) - else SWINT('d',dswitch,mindeg,">E deledgeg -d") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A deledgeg"); - if (dolabel) fprintf(stderr," -l"); - if (dswitch) fprintf(stderr," -d%d",mindeg); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - if (!dswitch) mindeg = 0; - - if (dolabel) nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = nout = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - -#if !MAXN - DYNALLOC1(int,deg,deg_sz,n,"deledgeg"); -#endif - - actmindeg = n; - for (v = 0, gv = g; v < n; ++v, gv += m) - { - degv = 0; - for (i = 0; i < m; ++i) - degv += POPCOUNT(gv[i]); - if (degv < actmindeg) actmindeg = degv; - deg[v] = degv; - } - - if (actmindeg < mindeg) continue; - - for (v = 0, gv = g; v < n; ++v, gv += m) - { - if (deg[v] <= mindeg) continue; - - for (w = v; (w = nextelement(gv,m,w)) >= 0; ) - { - if (deg[w] <= mindeg) continue; - - gw = GRAPHROW(g,w,m); - DELELEMENT(gv,w); - DELELEMENT(gw,v); - gq = g; - - if (dolabel) - { -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"deledgeg"); -#endif - fcanonise(g,m,n,h,NULL,FALSE); /* FIXME (loops) */ - gq = h; - } - if (outcode == SPARSE6) writes6(outfile,gq,m,n); - else writeg6(outfile,gq,m,n); - ++nout; - ADDELEMENT(gv,w); - ADDELEMENT(gw,v); - } - } - FREES(g); - } - t = CPUTIME - t; - - if (!quiet) - fprintf(stderr, - ">Z " COUNTER_FMT " graphs read from %s, " - COUNTER_FMT " written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_unix/directg b/tools/nauty25r9_unix/directg deleted file mode 100644 index efc364e1eb0293a09abb4baa129c57bcd2fa2aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148782 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 WORDSIZE. - */ - -/* SUMMARY feature - * - * If SUMMARY is defined, it must expand as the name of a procedure - * with prototype void SUMMARY(void). It is called at the end before - * the normal summary (which can be suppressed with -q). The numbers of - * graphs read and digraphs produced are available in the global variables - * dg_nin and dg_nout (type nauty_counter). - */ - -#ifdef DEGPRUNE -static int lastlev[MAXNV],indeg[MAXNV],outdeg[MAXNV]; -extern int DEGPRUNE(int*,int*,int,int); -#endif - -#ifdef PROCESS -extern void PROCESS(FILE*,graph*,int); -#endif - -#ifdef SUMMARY -extern void SUMMARY(void); -#endif - -/* #define GROUPTEST */ -#ifdef GROUPTEST -static long long totallab; -#endif - -/**************************************************************************/ - -void -writeautom(int *p, int n) -/* Called by allgroup. */ -{ - int i; - - for (i = 0; i < n; ++i) printf(" %2d",p[i]); - printf("\n"); -} - -/**************************************************************************/ - -static boolean -ismax(int *p, int n) -/* test if x^p <= x */ -{ - int i,j,k; - set px[MAXME]; - - EMPTYSET(px,me); - - for (j = 0; j < nix; ++j) - { - i = ix[j]; - k = i >> 1; - if (i & 1) ADDELEMENT(px,edgeno[p[v1[k]]][p[v0[k]]]); - else ADDELEMENT(px,edgeno[p[v0[k]]][p[v1[k]]]); - - if (px[0] > x[0]) - { - rejectlevel = k; - return FALSE; - } - } - - rejectlevel = MAXNE+1; - - if (px[0] < x[0]) return TRUE; - - for (i = 1; i < me; ++i) - if (px[i] > x[i]) return FALSE; - else if (px[i] < x[i]) return TRUE; - - ++newgroupsize; - ntgroup = TRUE; - return TRUE; -} - -/**************************************************************************/ - -void -testmax(int *p, int n, int *abort) -/* Called by allgroup2. */ -{ - int i; - - if (first) - { /* only the identity */ - first = FALSE; - return; - } - - if (!ismax(p,n)) - { - *abort = 1; - for (i = 0; i < n; ++i) lastreject[i] = p[i]; - lastrejok = TRUE; - } -} - -/**************************************************************************/ - -static int -trythisone(grouprec *group, int ne, int n) -{ - int i,k; - boolean accept; -#ifdef PROCESS - graph g[WORDSIZE]; -#endif - - first = TRUE; - - ++gd_ngen; - nix = ne; - newgroupsize = 1; - ntgroup = FALSE; - - if (!group || groupsize == 1) - accept = TRUE; - else if (lastrejok && !ismax(lastreject,n)) - accept = FALSE; - else if (lastrejok && groupsize == 2) - accept = TRUE; - else - { - newgroupsize = 1; - ntgroup = FALSE; - if (allgroup2(group,testmax) == 0) - accept = TRUE; - else - accept = FALSE; - } - - if (accept) - { - -#ifdef GROUPTEST - if (groupsize % newgroupsize != 0) - gt_abort("group size error\n"); - totallab += groupsize/newgroupsize; -#endif - - if (Vswitch && !ntisol && !ntgroup) return MAXNE+1; - - ++dg_nout; - -#ifdef PROCESS - EMPTYSET(g,n); - for (i = -1; (i = nextelement(x,me,i)) >= 0; ) - { - k = i >> 1; - if (i & 1) g[v1[k]] |= bit[v0[k]]; - else g[v0[k]] |= bit[v1[k]]; - } - PROCESS(outfile,g,n); -#endif - - if (outfile) - { - fprintf(outfile,"%d %d",n,ne); - if (Gswitch) fprintf(outfile," %lu",newgroupsize); - - for (i = -1; (i = nextelement(x,me,i)) >= 0; ) - { - k = i >> 1; - if (i & 1) fprintf(outfile," %d %d",v1[k],v0[k]); - else fprintf(outfile," %d %d",v0[k],v1[k]); - } - fprintf(outfile,"\n"); - } - return MAXNE+1; - } - else - return rejectlevel; -} - -/**************************************************************************/ - -static int -scan(int level, int ne, int minarcs, int maxarcs, int sofar, - boolean oriented, grouprec *group, int n) -/* Main recursive scan; returns the level to return to. */ -{ - int k,retlev; -#ifdef DEGPRUNE - int w0,w1; - - w0 = v0[level]; - w1 = v1[level]; -#endif - - if (level == ne) - { - retlev = trythisone(group,sofar,n); - return retlev; - } - - if (oriented || sofar + 1 + 2*(ne - level - 1) >= minarcs) - { - k = 2*level; - ADDELEMENT(x,k); - ix[sofar] = k; -#ifdef DEGPRUNE - ++outdeg[w0]; ++indeg[w1]; - if (lastlev[w0] == level && DEGPRUNE(indeg,outdeg,w0,n) - || lastlev[w1] == level && DEGPRUNE(indeg,outdeg,w1,n)) - retlev = level; - else -#endif - retlev = scan(level+1,ne,minarcs,maxarcs,sofar+1,oriented,group,n); - DELELEMENT(x,k); -#ifdef DEGPRUNE - --outdeg[w0]; --indeg[w1]; -#endif - if (retlev < level) return retlev; - ++k; - ADDELEMENT(x,k); - ix[sofar] = k; -#ifdef DEGPRUNE - ++outdeg[w1]; ++indeg[w0]; - if (lastlev[w0] == level && DEGPRUNE(indeg,outdeg,w0,n) - || lastlev[w1] == level && DEGPRUNE(indeg,outdeg,w1,n)) - retlev = level; - else -#endif - retlev = scan(level+1,ne,minarcs,maxarcs,sofar+1,oriented,group,n); - DELELEMENT(x,k); -#ifdef DEGPRUNE - --outdeg[w1]; --indeg[w0]; -#endif - if (retlev < level) return retlev; - } - - if (!oriented && sofar + 2 + ne - level - 1 <= maxarcs) - { - k = 2*level; - ADDELEMENT(x,k); - ADDELEMENT(x,k+1); - ix[sofar] = k; - ix[sofar+1] = k+1; -#ifdef DEGPRUNE - ++indeg[w0]; ++indeg[w1]; - ++outdeg[w0]; ++outdeg[w1]; - if (lastlev[w0] == level && DEGPRUNE(indeg,outdeg,w0,n) - || lastlev[w1] == level && DEGPRUNE(indeg,outdeg,w1,n)) - retlev = level; - else -#endif - retlev = scan(level+1,ne,minarcs,maxarcs,sofar+2,oriented,group,n); - DELELEMENT(x,k+1); - DELELEMENT(x,k); -#ifdef DEGPRUNE - --indeg[w0]; --indeg[w1]; - --outdeg[w0]; --outdeg[w1]; -#endif - if (retlev < level) return retlev; - } - - return level-1; -} - -/**************************************************************************/ - -static void -direct(graph *g, int nfixed, long minarcs, long maxarcs, - boolean oriented, int m, int n) -{ - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - setword workspace[100]; - grouprec *group; - long ne; - int i,j,k,j0,j1,deg; - int isol0,isol1; /* isolated vertices before and after nfixed */ - set *gi; - int lab[MAXNV],ptn[MAXNV],orbits[MAXNV]; - set active[(MAXNV+WORDSIZE-1)/WORDSIZE]; - - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - j0 = -1; /* last vertex with degree 0 */ - j1 = n; /* first vertex with degree > 0 */ - isol0 = isol1 = 0; - - ne = 0; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - deg = 0; - for (j = 0; j < m; ++j) deg += POPCOUNT(gi[j]); - if (deg == 0) - { - lab[++j0] = i; - if (i < nfixed) ++isol0; else ++isol1; - } - else - lab[--j1] = i; - ne += deg; - } - ne /= 2; - ntisol = (isol0 >= 2 || isol1 >= 2); - - me = (2*ne + WORDSIZE - 1) / WORDSIZE; - if (me == 0) me = 1; - EMPTYSET(x,me); - -#ifdef DEGPRUNE - for (i = 0; i < n; ++i) indeg[i] = outdeg[i] = 0; -#endif - if (ne == 0 && minarcs <= 0 && (!Vswitch || ntisol)) - { -#ifdef DEGPRUNE - for (i = 0; i < n; ++i) - if (DEGPRUNE(indeg,outdeg,i,n)) break; - if (i == n) -#endif - trythisone(NULL,0,n); - return; - } - - if (oriented) - { - if (maxarcs < ne || minarcs > ne) return; - } - else - { - if (maxarcs < ne || minarcs > 2*ne) return; - } - - if (n > MAXNV || ne > MAXNE) - { - fprintf(stderr,">E directg: MAXNV or MAXNE exceeded\n"); - exit(1); - } - - for (i = 0; i < n; ++i) ptn[i] = 1; - ptn[n-1] = 0; - EMPTYSET(active,m); - ADDELEMENT(active,0); - - for (i = 0; i <= j0; ++i) - { - if (i < n-1) ADDELEMENT(active,i+1); - ptn[i] = 0; - } - - for (i = j0+1; i < n; ++i) - if (lab[i] < nfixed) break; - - if (i != j0+1 && i != n) - { - ptn[i-1] = 0; - ADDELEMENT(active,i); - } - - options.defaultptn = FALSE; - options.userautomproc = groupautomproc; - options.userlevelproc = grouplevelproc; - - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,100,m,n,NULL); - - if (stats.grpsize2 == 0) - groupsize = stats.grpsize1 + 0.1; - else - groupsize = 0; - - if (Vswitch && groupsize == 1 && !ntisol) return; - - group = groupptr(FALSE); - makecosetreps(group); - -#ifdef DEGPRUNE - for (i = 0; i <= j0; ++i) - if (DEGPRUNE(indeg,outdeg,lab[i],n)) return; -#endif - - k = 0; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - for (j = i; (j = nextelement(gi,m,j)) >= 0; ) - { - v0[k] = i; - v1[k] = j; -#ifdef DEGPRUNE - lastlev[i] = lastlev[j] = k; -#endif - edgeno[i][j] = 2*k; - edgeno[j][i] = 2*k+1; - ++k; - } - } - - lastrejok = FALSE; - - scan(0,ne,minarcs,maxarcs,0,oriented,group,n); -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - graph *g; - int m,n,codetype; - int argnum,j,nfixed; - char *arg,sw; - boolean badargs; - boolean Tswitch,uswitch,eswitch,qswitch,oswitch,fswitch; - long minarcs,maxarcs; - double t; - char *infilename,*outfilename; - FILE *infile; - char msg[201]; - int msglen; - - HELP; - -/* Put 2 in the following to catch incorrect uses of naut*1. */ - nauty_check(WORDSIZE,2,2*WORDSIZE,NAUTYVERSIONID); - - Tswitch = Gswitch = fswitch = Vswitch = FALSE; - uswitch = eswitch = oswitch = qswitch = FALSE; - infilename = outfilename = NULL; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('o',oswitch) - else SWBOOLEAN('q',qswitch) - else SWBOOLEAN('u',uswitch) - else SWBOOLEAN('T',Tswitch) - else SWBOOLEAN('G',Gswitch) - else SWBOOLEAN('V',Vswitch) - else SWINT('f',fswitch,nfixed,"directg -f") - else SWRANGE('e',":-",eswitch,minarcs,maxarcs,"directg -e") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if ((Gswitch!=0) + (Tswitch!=0) + (uswitch!=0) >= 2) - gt_abort(">E directg: -G, -T and -u are incompatible\n"); - - if (!Tswitch && !Gswitch && !uswitch) - gt_abort( - ">E directg: digraph6 output is unimplemented; use -T or -G\n"); - - if (!eswitch) - { - minarcs = 0; - maxarcs = NOLIMIT; - } - - if (!fswitch) nfixed = 0; - - if (!qswitch) - { - msg[0] = '\0'; - CATMSG0(">A directg"); - if (eswitch || oswitch || uswitch || fswitch) CATMSG0(" -"); - if (oswitch) CATMSG0("o"); - if (uswitch) CATMSG0("u"); - if (Tswitch) CATMSG0("T"); - if (Gswitch) CATMSG0("G"); - if (Vswitch) CATMSG0("V"); - if (fswitch) CATMSG1("f%d",nfixed); - if (eswitch) CATMSG2("e%ld:%ld",minarcs,maxarcs); - msglen = strlen(msg); - if (argnum > 0) msglen += strlen(infilename); - if (argnum > 1) msglen += strlen(outfilename); - if (msglen >= 196) - { - fputs(msg,stderr); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - } - else - { - if (argnum > 0) CATMSG1(" %s",infilename); - if (argnum > 1) CATMSG1(" %s",outfilename); - CATMSG0("\n"); - fputs(msg,stderr); - } - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (uswitch) - outfile = NULL; - else - { - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - } - - dg_nin = 0; - gd_ngen = 0; - dg_nout = 0; - - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; -#ifdef PROCESS - if (m > 1) - { - fprintf(stderr,">E m=1 is needed if PROCESS is defined\n"); - exit(1); - } -#endif - ++dg_nin; - direct(g,nfixed,minarcs,maxarcs,oswitch,m,n); - if (!uswitch && ferror(outfile)) - gt_abort(">E directg output error\n"); - FREES(g); - } - t = CPUTIME - t; - -#ifdef SUMMARY - SUMMARY(); -#endif - - if (!qswitch) - { - fprintf(stderr,">Z "); - PRINT_COUNTER(stderr,dg_nin); - fprintf(stderr," graphs read from %s",infilename); - /* fprintf(stderr,"; "); - PRINT_COUNTER(stderr,gd_ngen); - fprintf(stderr,"; %lu digraphs tested",gd_ngen); */ - fprintf(stderr,"; "); - PRINT_COUNTER(stderr,dg_nout); - if (!uswitch) - fprintf(stderr," digraphs written to %s",outfilename); - else - fprintf(stderr," digraphs generated"); - fprintf(stderr,"; %.2f sec\n",t); - } - -#ifdef GROUPTEST - fprintf(stderr,"Group test = %lld\n",totallab); -#endif - - exit(0); -} diff --git a/tools/nauty25r9_unix/dreadnaut b/tools/nauty25r9_unix/dreadnaut deleted file mode 100644 index b65efcbce0010fffb4f25a1fb7f31428fb7d50ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 378510 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 z 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 SX>(3V_;gsww6^lYH1z*^oAD$7 diff --git a/tools/nauty25r9_unix/dreadnaut.c b/tools/nauty25r9_unix/dreadnaut.c deleted file mode 100644 index 7d1fcf9..0000000 --- a/tools/nauty25r9_unix/dreadnaut.c +++ /dev/null @@ -1,2237 +0,0 @@ -/***************************************************************************** -* * -* This is the main file for dreadnaut() version 2.5, which is a test-bed * -* for nauty() version 2.5. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* Traces is copyright Adolfo Piperno, 2008-2013. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 - replaced all uses of fscanf() by appropriate uses * -* of the new procedures readinteger() and readstring() * -* - changed the '<' command slightly. If a file of the * -* given name cannot be openned, an attempt is made to * -* open a file with the same name extended by DEFEXT. * -* - improved error processing for 'n' command. * -* 28-Sep-88 : changes for version 1.4 : * -* - replaced incorrect %d by %ld in fprintf for ? command * -* 23-Mar-89 : changes for version 1.5 : * -* - added optional startup message * -* - enabled use of refine1 in 'i' command * -* - implemented $$ command * -* - replaced ALLOCS test by DYNALLOC test * -* - modified @ command and added # command * -* - declared local procedures static * -* 25-Mar-89 - implemented k command * -* 27-Mar-89 - implemented * and I commands * -* 29-Mar-89 - implemented K command * -* 2-Apr-89 - added reporting of vertex-invariant statistics * -* 2-Apr-89 - added ## command * -* 4-Apr-89 - added triples(), quadruples(), adjtriang() * -* - updated error reporting for nauty() * -* 5-Apr-89 - removed flushline() from g and e commands * -* - added T command * -* 6-Apr-89 - added cellquads() and distances() * -* 26-Apr-89 - modified ? command, added & and && commands * -* - added indsets(), cliques(), cellquins() * -* 18-Aug-89 - made g, lab, canong dynamically allocated always * -* 2-Mar-90 - added celltrips(), cellcliq(), cellind() * -* 13-Mar-90 - changed canong and savedg in output to h and h' * -* 19-Mar-90 - revised help() a little * -* 19-Apr-90 : changes for version 1.6 * -* - rewrote "*" command to avoid bug in Pyramid C compiler * -* 20-Apr-90 - rewrote above rewrite to avoid bug in SUN3 gcc * -* 23-Apr-90 - undid above rewrite and fixed *my* bug by * -* making NUMINVARS have type int. Sorry, gcc. * -* 10-Nov-90 - added calls to null routines (see comment on code) * -* 27-Aug-92 : renamed to version 1.7, no changes to this file * -* 5-Jun-93 : renamed to version 1.7+, no changes to this file * -* 18-Aug-93 : renamed to version 1.8, no changes to this file * -* 17-Sep-93 : changes for version 1.9 : * -* - added invariant adjacencies() * -* 7-Jun-96 : changes for version 2.0 : * -* - added invariants cellfano() and cellfano2() * -* - made y=10 the default * -* 11-Jul-96 - added dynamic allocation * -* - rewrote h command and added H command * -* - implemented M and R commands * -* 15-Aug-96 - changed z command to use sethash() * -* 30-Aug-96 - no need to declare seed; already in naututil.h * -* 12-Sep-96 - let i and I commands use userrefproc * -* 9-Dec-96 - made y=infinity the default * -* 6-Sep-97 - allocated arrays before accepting commands * -* 7-Sep-97 - make g,canong,savedg 1-d arrays even statically * -* 22-Sep-97 - undid error introduced on 7-Sep (worksize) * -* 9-Jan-00 - used *_check() instead of *_null() * -* 12-Feb-00 - minor code formatting * -* 17-Aug-00 - now use tc_level from DEFAULTOPTIONS * -* 16-Nov-00 - made changes listed in nauty.h * -* 22-Apr-01 - include nautyinv.h * -* - improve worksize processing for MAXN=0 * -* 5-May-01 - k=0 1 automatic for *, also K=3 or K=0 * -* 2-Jun-01 - added __ command for digraph converse * -* 18-Oct-01 - moved WORKSIZE to here * -* 21-Nov-01 - use NAUTYREQUIRED in *_check() calls * -* 1-Sep-02 - Undid the previous change * -* 17-Nov-03 - Changed INFINITY to NAUTY_INFINITY * -* 15-Nov-04 - Completed all prototypes * -* 23-Nov-06 - no usertcellproc() any more in version 2.4 * -* 10-Nov-09 - removed types shortish and permutation * -* 17-Nov-09 - added sparsegraphs, schreier, A and G commands * -* 19-Nov-09 - added F command, stub for Traces * -* 1-Dec-09 - added traces refinement, M also applies to i * -* 16-Dec-09 - added sr# command for random regular graphs * -* 19-Dec-09 - added s# command for the sparse case * -* - w command is in units of 2*m now * -* 19-May-10 - Incorporate traces canonical labelling * -* 7-Jun-10 - implement %, _ and __ commands for sparse format * -* 8-Jun-10 - add O and P commands, and sparse && command * -* 11-Jun-10 - revise command-line parameters * -* 14-Jun-10 - digraphs and invariants (top level only) in Traces * -* 26-Oct-10 - fix u command for sparse graphs; default G=10 * -* 14-Mar-11 - store partition with savedg * -* 21-Jul-11 - extend M command * -* 24-Oct-11 - add S and OO commands * -* 15-Jan-12 - use putorbitsplus() if USE_ANSICONTROLS * -* 20-Sep-12 : the first argument of ungetc is int, not char * -* * -*****************************************************************************/ - -#include "gtools.h" /* which includes nauty.h, which includes stdio.h */ -#include "nautinv.h" -#include "schreier.h" -#include "traces.h" - -#define USAGE "dreadnaut [-o options]" - -#define HELPTEXT \ -" Enter nauty+traces test program.\n\ -\n\ - -o options - set initial options. The parameter value is a string of\n\ - dreadnaut commands from the following set:\n\ - a,c,d,m,p,l,G,P,w,y,$,A,V,M\n\ - The effect is the same as if these commands are entered\n\ - at the beginning of the standard input.\n\ - For help within dreadnaut, use the h command.\n" - -#define PM(x) ((x) ? '+' : '-') -#define SS(n,sing,plur) (n),((n)==1?(sing):(plur)) -#define WORKSIZE 60 - -#define SORT_OF_SORT 2 -#define SORT_NAME sort2ints -#include "sorttemplates.c" /* define sort2ints(a,b,n) */ - -#define INFILE fileptr[curfile] -#define SCHREIER_DEFAULT 10 - -static long seed; - -#if !MAXN -DYNALLSTAT(graph,g,g_sz); -DYNALLSTAT(graph,canong,canong_sz); -DYNALLSTAT(graph,savedg,savedg_sz); -DYNALLSTAT(setword,workspace,workspace_sz); -DYNALLSTAT(int,lab,lab_sz); -DYNALLSTAT(int,ptn,ptn_sz); -DYNALLSTAT(int,orbits,orbits_sz); -DYNALLSTAT(int,templab,templab_sz); -DYNALLSTAT(int,tempptn,tempptn_sz); -DYNALLSTAT(int,perm,perm_sz); -DYNALLSTAT(int,savedlab,savedlab_sz); -DYNALLSTAT(int,savedptn,savedptn_sz); -DYNALLSTAT(set,tempactive,tempactive_sz); -DYNALLSTAT(set,active,active_sz); -#else -static graph g[MAXM*1L*MAXN]; -static graph canong[MAXM*1L*MAXN]; -static graph savedg[MAXM*1L*MAXN]; -static setword workspace[MAXM*2L*WORKSIZE]; -static int lab[MAXN]; -static int ptn[MAXN]; -static int orbits[MAXN]; -static int savedlab[MAXN],savedptn[MAXN]; -static int perm[MAXN]; -static int templab[MAXN]; -static int tempptn[MAXN]; -static int tempactive[MAXM]; -static set active[MAXM]; -#endif - -static sparsegraph g_sg; -static sparsegraph canong_sg; -static sparsegraph savedg_sg; - -static DEFAULTOPTIONS_GRAPH(options); -static DEFAULTOPTIONS_SPARSEGRAPH(options_sg); -static statsblk stats; -static int curfile; -static FILE *fileptr[MAXIFILES]; -static FILE *outfile; -static char def_ext[] = DEFEXT; -static boolean firstpath; /* used in usernode() */ - -DEFAULTOPTIONS_TRACES(traces_opts); -static TracesStats traces_stats; - -#define TMP - -#define DENSE_MODE 0 -#define SPARSE_MODE 1 -#define TRACES_MODE 2 -#define SPARSEREP(mode) ((mode)==1||(mode)==2) -#define NOSPARSEYET(c) else if (SPARSEREP(mode)) { fprintf(ERRFILE,\ - "command %s is not implemented in the sparse case\n",c); } -#define NODENSEYET else if (!SPARSEREP(mode)) { fprintf(ERRFILE,\ - "command %c is not implemented in the dense case\n",c); } -#define NOTRACESYET if (mode==TRACES_MODE) { fprintf(ERRFILE,\ - "command %c is not implemented for Traces\n",c); } - -static int mode; - -#define U_NODE 1 /* masks for u values */ -#define U_AUTOM 2 -#define U_LEVEL 4 -#define U_TCELL 8 /* At version 2.4, usertcellproc() is gone */ -#define U_REF 16 - -#ifndef NODEPROC -#define NODEPROC usernode -#else -extern void NODEPROC(graph*,int*,int*,int,int,int,int,int,int); -#endif - -#ifndef AUTOMPROC -#define AUTOMPROC userautom -#else -extern void AUTOMPROC(int,int*,int*,int,int,int); -#endif - -#ifndef LEVELPROC -#define LEVELPROC userlevel -#else -extern void LEVELPROC(int*,int*,int,int*,statsblk*,int,int,int,int,int,int); -#endif - -#ifndef REFPROC -#define REFPROC NULL -#else -extern void REFPROC(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -#endif - -#ifndef INVARPROC -#define INVARPROC NULL -#define INVARPROCNAME "none" -#else -extern void INVARPROC(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -#define INVARPROCNAME "user-defined" -#endif - -#ifndef INVARPROC_SG -#define INVARPROC_SG NULL -#define INVARPROCNAME_SG "none" -#else -extern void INVARPROC_SG(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -#define INVARPROCNAME_SG "user-defined" -#endif - -static struct invarrec -{ - void (*entrypoint)(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); - char *name; - void (*entrypoint_sg)(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); - char *name_sg; -} invarproc[] - = {{INVARPROC, INVARPROCNAME, INVARPROC_SG, INVARPROCNAME_SG}, - {NULL, "none", NULL, "none"}, - {twopaths, "twopaths", NULL, "unavailable"}, - {adjtriang, "adjtriang", NULL, "unavailable"}, - {triples, "triples", NULL, "unavailable"}, - {quadruples, "quadruples", NULL, "unavailable"}, - {celltrips, "celltrips", NULL, "unavailable"}, - {cellquads, "cellquads", NULL, "unavailable"}, - {cellquins, "cellquins", NULL, "unavailable"}, - {distances, "distances", distances_sg, "distances_sg"}, - {indsets, "indsets", NULL, "unavailable"}, - {cliques, "cliques", NULL, "unavailable"}, - {cellcliq, "cellcliq", NULL, "unavailable"}, - {cellind, "cellind", NULL, "unavailable"}, - {adjacencies, "adjacencies", adjacencies_sg, "adjacencies_sg"}, - {cellfano, "cellfano", NULL, "unavailable"}, - {cellfano2, "cellfano2", NULL, "unavailable"}, - {refinvar, "refinvar", NULL, "unavailable"} - }; -#define NUMINVARS ((int)(sizeof(invarproc)/sizeof(struct invarrec))) - -static void help(FILE*, int); -static void userautom(int,int*,int*,int,int,int); -static void usernode(graph*,int*,int*,int,int,int,int,int,int); -static void userlevel(int*,int*,int,int*,statsblk*,int,int,int,int,int,int); - -static boolean options_writeautoms,options_writemarkers, - options_digraph,options_getcanon,options_linelength; -static int options_invarproc,options_mininvarlevel,options_maxinvarlevel, - options_invararg,options_tc_level,options_cartesian; -static int options_schreier,options_keepgroup,options_verbosity, - options_strategy; - -#if USE_ANSICONTROLS && !DREADTEST -#define PUTORBITS putorbitsplus -#else -#define PUTORBITS putorbits -#endif - -#ifdef EXTRADECLS -EXTRADECLS -#endif - -/***************************************************************************** -* * -* This is a program which illustrates the use of nauty. * -* Commands are read from stdin, and may be separated by white space, * -* commas or not separated. Output is written to stdout. * -* For a short description, see the nauty User's Guide. * -* * -*****************************************************************************/ - -int -main(int argc, char *argv[]) -{ - int m,n,newm,newn; - boolean gvalid,ovalid,cvalid,pvalid,minus,prompt,doquot; - boolean gvalid_sg,cvalid_sg; - int i,j,k,worksize,numcells,savednc,refcode,umask,qinvar; - int oldorg,oldmode; - boolean ranreg,same; - char *s1,*s2; - int c,d; - unsigned long uli; - size_t sli; - set *gp; - double timebefore,timeafter,mintime; - char filename[515]; - int sgn,sgorg,nperm; - int multiplicity,actmult; - long zseed; - permnode *generators; - char *ap,*parameters; - - HELP; - - if (argc == 3 && strcmp(argv[1],"-o") == 0) - parameters = argv[2]; - else if (argc != 1) - { - fprintf(ERRFILE,USAGE); - exit(1); - } - else - parameters = ""; - - mode = DENSE_MODE; - curfile = 0; - fileptr[curfile] = stdin; -#ifdef DREADTEST - prompt = FALSE; -#else - prompt = DOPROMPT(INFILE); -#endif - outfile = stdout; - options_writeautoms = options_writemarkers = TRUE; - options_digraph = FALSE; - options_getcanon = options.getcanon; - options_mininvarlevel = options.mininvarlevel; - options_maxinvarlevel = options.maxinvarlevel; - options_invararg = options.invararg; - options_invarproc = 1; /* index into invarproc[] */ - options_tc_level = options.tc_level; - options_cartesian = options.cartesian; - options_linelength = options.linelength; - options_schreier = SCHREIER_DEFAULT; - options_keepgroup = FALSE; - generators = NULL; - options_verbosity = 1; - options_strategy = 0; - - n = m = 1; - worksize = WORKSIZE; - -#if !MAXN - n = WORDSIZE; - DYNALLOC2(graph,g,g_sz,n,m,"dreadnaut"); - DYNALLOC1(int,lab,lab_sz,n,"dreadnaut"); - DYNALLOC1(int,ptn,ptn_sz,n,"dreadnaut"); - DYNALLOC1(int,orbits,orbits_sz,n,"dreadnaut"); - DYNALLOC1(int,perm,perm_sz,n,"dreadnaut"); - DYNALLOC1(set,active,active_sz,m,"dreadnaut"); - n = 1; -#endif - -#ifdef DREADTEST - seed = 1; - ran_init(seed); -#else -#ifdef INITSEED - INITSEED; - ran_init(seed); -#endif -#endif - - umask = 0; - pvalid = FALSE; - ovalid = FALSE; - gvalid = gvalid_sg = FALSE; /* at most one valid */ - cvalid = cvalid_sg = FALSE; /* at most one valid */ - sgorg = labelorg = oldorg = 0; - sgn = 0; - multiplicity = 1; - mintime = 0.0; - -#ifdef INITIALIZE - INITIALIZE; -#endif - - if (prompt) - { - fprintf(PROMPTFILE,"Dreadnaut version %s.\n",NAUTYVERSION); - fprintf(PROMPTFILE,"> "); - } - - nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - nautinv_check(WORDSIZE,1,1,NAUTYVERSIONID); - nautil_check(WORDSIZE,1,1,NAUTYVERSIONID); - naututil_check(WORDSIZE,1,1,NAUTYVERSIONID); - nausparse_check(WORDSIZE,1,1,NAUTYVERSIONID); - - SG_INIT(g_sg); - SG_INIT(canong_sg); - SG_INIT(savedg_sg); - - minus = FALSE; - for (ap = parameters; *ap != '\0'; ) - { - c = *ap++; - - switch (c) - { - case ' ': - case '\t': - break; - - case '-': - minus = TRUE; - break; - - case '+': - minus = FALSE; - break; - - case 'a': - options_writeautoms = !minus; - minus = FALSE; - break; - - case 'c': - options_getcanon = !minus; - minus = FALSE; - break; - - case 'm': - options_writemarkers = !minus; - minus = FALSE; - break; - - case 'p': - options_cartesian = !minus; - minus = FALSE; - break; - - case 'd': - options_digraph = !minus; - minus = FALSE; - break; - - case 'P': - options_keepgroup = !minus; - minus = FALSE; - break; - - case 'w': - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&worksize,"w"); -#if MAXN - if (worksize > 2*MAXM*WORKSIZE) - { - fprintf(ERRFILE, - "too big - setting worksize = %d\n",WORKSIZE); - worksize = WORKSIZE; - } -#endif - minus = FALSE; - break; - - case 'V': - if (minus) - { - options_verbosity = 0; - minus = FALSE; - } - else - { - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&i,"V"); - if (i < 0) fprintf(ERRFILE,"verbosity must be >= 0\n"); - else options_verbosity = i; - } - break; - - - case 'S': - if (minus) - { - options_strategy = 0; - minus = FALSE; - } - else - { - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&i,"S"); - if (i < 0) fprintf(ERRFILE,"strategy must be >= 0\n"); - else options_strategy = i; - } - break; - - case 'G': - if (minus) - { - options_schreier = 0; - minus = FALSE; - } - else - { - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&i,"G"); - if (i < 0) - fprintf(ERRFILE,"schreierfails must be >= 0\n"); - else - { - options_schreier = i; - if (i > 0) schreier_fails(i); - } - } - break; - - case 'y': - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&options_tc_level,"y"); - minus = FALSE; - break; - - case '$': - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&labelorg,"$"); - minus = FALSE; - break; - - case 'M': - if (minus) - { - multiplicity = 1; - mintime = 0.0; - minus = FALSE; - } - else - { - actmult = 0; - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&multiplicity,"M"); - if (*ap == '/') - { - ++ap; - arg_int(&ap,&actmult,"M/"); - } - if (multiplicity < 0) multiplicity = 0; - if (actmult < 0) actmult = 0; - if (multiplicity == 0 && actmult == 0) multiplicity = 1; - mintime = (double)actmult; - } - break; - - case 'l': - while (*ap == '=' || *ap == ' ') ++ap; - arg_int(&ap,&options_linelength,"l"); - minus = FALSE; - break; - - case 'A': - d = *ap++; - if (d == 'n' || d == 'N' || d == 'd' || d == 'D') - mode = DENSE_MODE; - else if (d == 's' || d == 'S') mode = SPARSE_MODE; - else if (d == 't' || d == 'T') mode = TRACES_MODE; - else - { - fprintf(ERRFILE,"Mode %c is unknown\n",(d?d:'0')); - break; - } - minus = FALSE; - break; - - default: - fprintf(ERRFILE,"Illegal initialization command %c\n",c); - exit(1); - } - } - - minus = FALSE; - while (curfile >= 0) - if ((c = getc(INFILE)) == EOF || c == '\004') - { - fclose(INFILE); - --curfile; - if (curfile >= 0) prompt = DOPROMPT(INFILE); - } - else switch (c) - { - case '\n': /* possibly issue prompt */ - if (prompt) - fprintf(PROMPTFILE,"> "); - minus = FALSE; - break; - - case ' ': /* do nothing */ - case '\t': -#ifndef NLMAP - case '\r': -#endif - case '\f': - break; - - case '-': /* remember this for next time */ - minus = TRUE; - break; - - case '+': /* forget - */ - case ',': - case ';': - minus = FALSE; - break; - - case '<': /* new input file */ - minus = FALSE; - if (curfile == MAXIFILES - 1) - fprintf(ERRFILE,"exceeded maximum input nesting of %d\n", - MAXIFILES); - if (!readstring(INFILE,filename,513)) - { - fprintf(ERRFILE, - "missing file name on '>' command : ignored\n"); - break; - } - if ((fileptr[curfile+1] = fopen(filename,"r")) == NULL) - { - for (s1 = filename; *s1 != '\0'; ++s1) {} - for (s2 = def_ext; (*s1 = *s2) != '\0'; ++s1, ++s2) {} - fileptr[curfile+1] = fopen(filename,"r"); - } - if (fileptr[curfile+1] != NULL) - { - ++curfile; - prompt = DOPROMPT(INFILE); - if (prompt) - fprintf(PROMPTFILE,"> "); - } - else - fprintf(ERRFILE,"can't open input file\n"); - break; - - case '>': /* new output file */ - if ((d = getc(INFILE)) != '>') ungetc(d,INFILE); - if (minus) - { - minus = FALSE; - if (outfile != stdout) - { - fclose(outfile); - outfile = stdout; - } - } - else - { - if (!readstring(INFILE,filename,513)) - { - fprintf(ERRFILE, - "improper file name, reverting to stdout\n"); - outfile = stdout; - break; - } - OPENOUT(outfile,filename,d=='>'); - if (outfile == NULL) - { - fprintf(ERRFILE, - "can't open output file, reverting to stdout\n"); - outfile = stdout; - } - } - break; - - case '!': /* ignore rest of line */ - do - c = getc(INFILE); - while (c != '\n' && c != EOF); - if (c == '\n') ungetc('\n',INFILE); - break; - - case 'n': /* read n value */ - minus = FALSE; - i = getint(INFILE); - if (i <= 0 || (MAXN && i > MAXN) - || (!MAXN && i > NAUTY_INFINITY-2)) - fprintf(ERRFILE, - " n can't be less than 1 or more than %d\n", - MAXN ? MAXN : NAUTY_INFINITY-2); - else - { - gvalid = FALSE; - cvalid = FALSE; - gvalid_sg = FALSE; - cvalid_sg = FALSE; - pvalid = FALSE; - ovalid = FALSE; - n = i; - m = SETWORDSNEEDED(n); - freeschreier(NULL,&generators); -#if !MAXN - DYNALLOC1(int,lab,lab_sz,n,"dreadnaut"); - DYNALLOC1(int,ptn,ptn_sz,n,"dreadnaut"); - DYNALLOC1(int,orbits,orbits_sz,n,"dreadnaut"); - DYNALLOC1(int,perm,perm_sz,n,"dreadnaut"); - DYNALLOC1(set,active,active_sz,m,"dreadnaut"); -#endif - } - break; - - case 'g': /* read graph */ - minus = FALSE; - if (SPARSEREP(mode)) - { - readgraph_sg(INFILE,&g_sg,options_digraph,prompt, - options_linelength,n); - gvalid_sg = TRUE; - cvalid_sg = FALSE; - } - else - { -#if !MAXN - DYNALLOC2(graph,g,g_sz,n,m,"dreadnaut"); -#endif - readgraph(INFILE,g,options_digraph,prompt,FALSE, - options_linelength,m,n); - gvalid = TRUE; - cvalid = FALSE; - } - ovalid = FALSE; - break; - - case 'e': /* edit graph */ - minus = FALSE; - if (SPARSEREP(mode)) - { - fprintf(ERRFILE,"e command only works in dense mode\n"); - } - else - { - readgraph(INFILE,g,options_digraph,prompt,gvalid, - options_linelength,m,n); - gvalid = TRUE; - cvalid = FALSE; - ovalid = FALSE; - } - break; - - case 'r': /* relabel graph and current partition */ - minus = FALSE; - if (gvalid_sg) - { - readvperm(INFILE,perm,prompt,n,&nperm); - relabel_sg(&g_sg,(pvalid ? lab : NULL),perm,&canong_sg); - cvalid_sg = FALSE; - ovalid = FALSE; - } - else if (gvalid) - { -#if !MAXN - DYNALLOC2(graph,canong,canong_sz,n,m,"dreadnaut"); -#endif - readvperm(INFILE,perm,prompt,n,&nperm); - relabel(g,(pvalid ? lab : NULL),perm,canong,m,n); - cvalid = FALSE; - ovalid = FALSE; - } - else - fprintf(ERRFILE,"g is not defined\n"); - break; - - case 'R': /* form subgraph */ - if (gvalid) - { -#if !MAXN - DYNALLOC2(graph,canong,canong_sz,n,m,"dreadnaut"); -#endif - readvperm(INFILE,perm,prompt,n,&nperm); - if ((minus && nperm == n) || (!minus && nperm == 0)) - fprintf(ERRFILE,"can't form null graph\n"); - else if (minus) - { - sublabel(g,perm+nperm,n-nperm,canong,m,n); - n = n - nperm; - } - else - { - sublabel(g,perm,nperm,canong,m,n); - n = nperm; - } - cvalid = FALSE; - pvalid = FALSE; - ovalid = FALSE; - m = SETWORDSNEEDED(n); - } - else if (gvalid_sg) - { - readvperm(INFILE,perm,prompt,n,&nperm); - if ((minus && nperm == n) || (!minus && nperm == 0)) - fprintf(ERRFILE,"can't form null graph\n"); - else if (minus) - { - sublabel_sg(&g_sg,perm+nperm,n-nperm,&canong_sg); - n = n - nperm; - } - else - { - sublabel_sg(&g_sg,perm,nperm,&canong_sg); - n = nperm; - } - cvalid_sg = FALSE; - pvalid = FALSE; - ovalid = FALSE; - m = SETWORDSNEEDED(n); - } - else - fprintf(ERRFILE,"g is not defined\n"); - minus = FALSE; - break; - - case '_': /* complement graph or converse digraph */ - minus = FALSE; - if ((d = getc(INFILE)) != '_') ungetc(d,INFILE); - - if (!gvalid && !gvalid_sg) - fprintf(ERRFILE,"g is not defined\n"); - else if (gvalid) - { - if (d == '_') converse(g,m,n); - else complement(g,m,n); - cvalid = FALSE; - } - else - { - if (d == '_') - { - copy_sg(&g_sg,&canong_sg); - converse_sg(&canong_sg,&g_sg); - cvalid_sg = FALSE; - } - else - { - copy_sg(&g_sg,&canong_sg); - complement_sg(&canong_sg,&g_sg); - cvalid_sg = FALSE; - } - } - break; - - case '@': /* copy canong into savedg */ - minus = FALSE; - if (cvalid) - { -#if !MAXN - DYNALLOC2(graph,savedg,savedg_sz,n,m,"dreadnaut"); - DYNALLOC1(int,savedlab,savedlab_sz,n,"dreadnaut"); - DYNALLOC1(int,savedptn,savedptn_sz,n,"dreadnaut"); -#endif - sgn = n; - memcpy(savedg,canong,m*(size_t)n*sizeof(setword)); - for (i = n; --i >= 0;) - { - savedlab[i] = lab[i]; - savedptn[i] = ptn[i]; - } - sgorg = labelorg; - } - else if (cvalid_sg) - { -#if !MAXN - DYNALLOC1(int,savedlab,savedlab_sz,n,"dreadnaut"); - DYNALLOC1(int,savedptn,savedptn_sz,n,"dreadnaut"); -#endif - sgn = n; - copy_sg(&canong_sg,&savedg_sg); - for (i = n; --i >= 0;) - { - savedlab[i] = lab[i]; - savedptn[i] = ptn[i]; - } - sgorg = labelorg; - } - else - fprintf(ERRFILE,"h is not defined\n"); - break; - - case '#': /* compare canong to savedg */ - if ((d = getc(INFILE)) != '#') ungetc(d,INFILE); - - if (cvalid || cvalid_sg) - { - if (sgn > 0) - { - if (sgn != n) - fprintf(outfile, - "h and h' have different sizes.\n"); - else - { - if (cvalid) - { - for (sli = 0; sli < m*(size_t)n; ++sli) - if (savedg[sli] != canong[sli]) break; - same = (sli == m*(size_t)n); - } - else - same = aresame_sg(&canong_sg,&savedg_sg); - - if (!same) - fprintf(outfile,"h and h' are different.\n"); - else - { - for (i = 0; i < n; ++i) - if ((ptn[i] == 0) != (savedptn[i] == 0)) - break; - if (i < n) - fprintf(outfile, - "h and h' are identical but have incompatible colourings.\n"); - else - fprintf(outfile, - "h and h' are identical.\n"); - if (d == '#') - putmapping(outfile,savedlab,sgorg, - lab,labelorg,options_linelength,n); - } - } - } - else - fprintf(ERRFILE,"h' is not defined\n"); - } - else - fprintf(ERRFILE,"h is not defined\n"); - break; - - case 'j': /* relabel graph randomly */ - minus = FALSE; - if (gvalid) - { - ranperm(perm,n); -#if !MAXN - DYNALLOC2(graph,canong,canong_sz,n,m,"dreadnaut"); -#endif - relabel(g,(pvalid?lab:NULL),perm,canong,m,n); - cvalid = FALSE; - ovalid = FALSE; - freeschreier(NULL,&generators); - } - else if (gvalid_sg) - { - ranperm(perm,n); - relabel_sg(&g_sg,(pvalid?lab:NULL),perm,&canong_sg); - cvalid_sg = FALSE; - ovalid = FALSE; - freeschreier(NULL,&generators); - } - else - fprintf(ERRFILE,"g is not defined\n"); - break; - - case 'v': /* write vertex degrees */ - minus = FALSE; - if (gvalid) - putdegs(outfile,g,options_linelength,m,n); - else if (gvalid_sg) - putdegs_sg(outfile,&g_sg,options_linelength); - else - fprintf(ERRFILE,"g is not defined\n"); - break; - - case '%': /* do Mathon doubling operation */ - minus = FALSE; - if (gvalid || gvalid_sg) - { -#if !MAXN - if (2L * ((long)n + 1L) > NAUTY_INFINITY-2) - { - fprintf(ERRFILE, - "n can't be more than %d\n",NAUTY_INFINITY-2); - break; - } -#else - if (2L * ((long)n + 1L) > MAXN) - { - fprintf(ERRFILE,"n can't be more than %d\n",MAXN); - break; - } -#endif - newn = 2 * (n + 1); - newm = SETWORDSNEEDED(newn); -#if !MAXN - DYNALLOC1(int,lab,lab_sz,newn,"dreadnaut"); - DYNALLOC1(int,ptn,ptn_sz,newn,"dreadnaut"); - DYNALLOC1(int,orbits,orbits_sz,newn,"dreadnaut"); - DYNALLOC1(int,perm,perm_sz,newn,"dreadnaut"); - DYNALLOC1(set,active,active_sz,newm,"dreadnaut"); -#endif - ovalid = FALSE; - pvalid = FALSE; - freeschreier(NULL,&generators); - } - else - fprintf(ERRFILE,"g is not defined\n"); - - if (gvalid) - { -#if !MAXN - DYNALLOC2(graph,canong,canong_sz,n,m,"dreadnaut"); -#endif - memcpy(canong,g,m*(size_t)n*sizeof(setword)); - -#if !MAXN - DYNALLOC2(graph,g,g_sz,newn,newm,"dreadnaut"); -#endif - mathon(canong,m,n,g,newm,newn); - m = newm; - n = newn; - cvalid = FALSE; - } - else if (gvalid_sg) - { - copy_sg(&g_sg,&canong_sg); - mathon_sg(&canong_sg,&g_sg); - m = newm; - n = newn; - cvalid_sg = FALSE; - } - break; - - case 's': /* generate random graph */ - minus = FALSE; - d = getc(INFILE); - if (d == 'r') - ranreg = TRUE; - else - { - ranreg = FALSE; - if (d != EOF) ungetc(d,INFILE); - } - - i = getint(INFILE); - if (ranreg) - { - if (i < 0) i = 3; - if (i > MAXREG) - { - fprintf(ERRFILE,"sr is limited to degree %d\n",MAXREG); - break; - } - if (SPARSEREP(mode)) - { - ranreg_sg(&g_sg,i,n); - gvalid_sg = TRUE; - cvalid = FALSE; - ovalid = FALSE; - freeschreier(NULL,&generators); - } - NODENSEYET - } - else - { - if (i <= 0) i = 2; - if (!SPARSEREP(mode)) - { -#if !MAXN - DYNALLOC2(graph,g,g_sz,n,m,"dreadnaut"); -#endif - rangraph(g,options_digraph,i,m,n); - gvalid = TRUE; - cvalid = FALSE; - ovalid = FALSE; - freeschreier(NULL,&generators); - } - else - { - rangraph2_sg(&g_sg,options_digraph,1,i,n); - gvalid_sg = TRUE; - cvalid = FALSE; - ovalid = FALSE; - freeschreier(NULL,&generators); - } - } - break; - - case 'q': /* quit */ - EXIT; - break; - - case '"': /* copy comment to output */ - minus = FALSE; - copycomment(INFILE,outfile,'"'); - break; - - case 'I': /* do refinement and invariants procedure */ - minus = FALSE; - if (!gvalid && !gvalid_sg) - { - fprintf(ERRFILE,"g is not valid\n"); - break; - } - if (!pvalid) unitptn(lab,ptn,&numcells,n); - cellstarts(ptn,0,active,m,n); -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - if (gvalid) - { - doref(g,lab,ptn,0,&numcells,&qinvar,perm,active,&refcode, - options.userrefproc ? options.userrefproc : - (m == 1 ? refine1 : refine), - invarproc[options_invarproc].entrypoint,0,0, - options_invararg,options_digraph,m,n); - if (numcells > 1) pvalid = TRUE; - } - else if (gvalid_sg) - { - doref((graph*)&g_sg,lab,ptn,0,&numcells,&qinvar,perm, - active,&refcode, - options_sg.userrefproc ? options_sg.userrefproc : - refine_sg, - invarproc[options_invarproc].entrypoint_sg,0,0, - options_invararg,options_digraph,m,n); - if (numcells > 1) pvalid = TRUE; - } - else - { - fprintf(ERRFILE,"g is not valid\n"); - break; - } -#ifdef CPUTIME - timeafter = CPUTIME; -#endif - fprintf(outfile," %d cell%s; code = %x", - SS(numcells,"","s"),refcode); - if (mode == SPARSE_MODE) - { - if (invarproc[options_invarproc].entrypoint_sg) - fprintf(outfile, - " (%s %s)",invarproc[options_invarproc].name_sg, - (qinvar == 2 ? "worked" : "failed")); - } - else if (mode == DENSE_MODE) - { - if (invarproc[options_invarproc].entrypoint) - fprintf(outfile, - " (%s %s)",invarproc[options_invarproc].name, - (qinvar == 2 ? "worked" : "failed")); - } -#ifdef CPUTIME - fprintf(outfile,"; cpu time = %.2f seconds\n", - timeafter-timebefore); -#else - fprintf(outfile,"\n"); -#endif - if (numcells > 1) pvalid = TRUE; - break; - - case 'i': /* do refinement */ - minus = FALSE; - if (!gvalid && !gvalid_sg) - { - fprintf(ERRFILE,"g is not valid\n"); - break; - } - if (!pvalid) unitptn(lab,ptn,&numcells,n); - cellstarts(ptn,0,active,m,n); - - if (multiplicity != 0 || mintime != 0.0) - { - savednc = numcells; -#if !MAXN - DYNALLOC1(int,tempptn,tempptn_sz,n,"dreadnaut"); - DYNALLOC1(int,templab,templab_sz,n,"dreadnaut"); - DYNALLOC1(set,tempactive,tempactive_sz,m,"dreadnaut"); -#endif - memcpy(templab,lab,n*sizeof(int)); - memcpy(tempptn,ptn,n*sizeof(int)); - for (i = 0; i < m; ++i) tempactive[i] = active[i]; - } - -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - actmult = 0; - for (;;) - { - if (actmult > 0) - { - memcpy(lab,templab,n*sizeof(int)); - memcpy(ptn,tempptn,n*sizeof(int)); - for (i = 0; i < m; ++i) active[i] = tempactive[i]; - numcells = savednc; - } - - if (options.userrefproc) - (*options.userrefproc) - (g,lab,ptn,0,&numcells,perm,active,&refcode,m,n); - else if (gvalid) - { - if (m == 1) - refine1(g,lab,ptn,0,&numcells,perm,active,&refcode,m,n); - else - refine(g,lab,ptn,0,&numcells,perm,active,&refcode,m,n); - } - else if (mode == SPARSE_MODE) - refine_sg((graph*)&g_sg,lab,ptn,0,&numcells,perm,active, - &refcode,m,n); - else /* traces mode */ - refine_tr(&g_sg,lab,ptn,&numcells,&refcode,&traces_opts); - - ++actmult; - if (multiplicity > 0 && actmult >= multiplicity) break; -#ifdef CPUTIME - if (mintime > 0.0 && (actmult < 20 || !(actmult&7)) - && CPUTIME >= timebefore+mintime) - break; -#endif - } -#ifdef CPUTIME - timeafter = CPUTIME; -#endif - if (numcells > 1) pvalid = TRUE; - fprintf(outfile," %d cell%s; code = %x", - SS(numcells,"","s"),refcode); -#ifdef CPUTIME - fprintf(outfile,"; cpu time = %.7f seconds\n", - (timeafter-timebefore)/actmult); -#else - fprintf(outfile,"\n"); -#endif - break; - - case 'x': /* execute nauty */ - minus = FALSE; - if (mode == TRACES_MODE) - { - ovalid = FALSE; - cvalid_sg = FALSE; - if (!gvalid_sg) - { - fprintf(ERRFILE,"g is not defined\n"); - break; - } - - traces_opts.getcanon = options_getcanon; - traces_opts.writeautoms = options_writeautoms; - traces_opts.cartesian = options_cartesian; - traces_opts.linelength = options_linelength; - traces_opts.digraph = options_digraph; - traces_opts.outfile = outfile; - traces_opts.verbosity = options_verbosity; - traces_opts.strategy = options_strategy; - if (options_keepgroup) - traces_opts.generators = &generators; - else - traces_opts.generators = NULL; - -#if !MAXN - DYNALLOC1(int,tempptn,tempptn_sz,n,"dreadnaut"); -#endif - if (!pvalid) unitptn(lab,ptn,&numcells,n); - memcpy(tempptn,ptn,n*sizeof(int)); - savednc = numcells; - if (options_invarproc != 1 && options_maxinvarlevel > 0) - { - if (options_maxinvarlevel > 1) fprintf(ERRFILE, - "Warning: Traces only uses invariants at the top level\n"); - if (invarproc[options_invarproc].entrypoint_sg) - { -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - cellstarts(tempptn,0,active,m,n); - doref((graph*)&g_sg,lab,tempptn,0,&savednc,&qinvar,perm, - active,&refcode, - options_sg.userrefproc ? options_sg.userrefproc : - refine_sg, - invarproc[options_invarproc].entrypoint_sg,0,0, - options_invararg,options_digraph,m,n); - fprintf(outfile,"Invariant %s %s; %d cell%s", - invarproc[options_invarproc].name_sg, - (qinvar == 2 ? "worked" : "failed"), - SS(savednc,"","s")); -#ifdef CPUTIME - timeafter = CPUTIME; - fprintf(outfile,"; cpu time = %.2f seconds\n", - timeafter-timebefore); -#else - fprintf(outfile,"\n"); -#endif - } - } - -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - actmult = 0; - for (;;) - { - traces_opts.defaultptn = !pvalid; - Traces(&g_sg,lab,tempptn,orbits,&traces_opts,&traces_stats, - &canong_sg); - traces_opts.writeautoms = FALSE; - traces_opts.verbosity = 0; - ++actmult; - if (multiplicity > 0 && actmult >= multiplicity) break; -#ifdef CPUTIME - if (mintime > 0.0 && (actmult < 20 || !(actmult&7)) - && CPUTIME >= timebefore+mintime) - break; -#endif - } -#ifdef CPUTIME - timeafter = CPUTIME; -#endif - - fprintf(outfile,"%d orbit%s", - SS(traces_stats.numorbits,"","s")); - fprintf(outfile,"; grpsize="); - writegroupsize(outfile, - traces_stats.grpsize1,traces_stats.grpsize2); - fprintf(outfile,"; %d gen%s", - SS(traces_stats.numgenerators,"","s")); - fprintf(outfile, - "; %lu node%s ", SS(traces_stats.numnodes,"","s")); - if (traces_stats.interrupted) - fprintf(outfile, - "(%lu interrupted, ",traces_stats.interrupted); - else - fprintf(outfile,"("); - fprintf(outfile,"%lu peak); maxlev=%d\n", - traces_stats.peaknodes,traces_stats.treedepth); - if (options_getcanon) - fprintf(outfile, - "canupdates=%d; ",traces_stats.canupdates); -#ifdef CPUTIME - fprintf(outfile,actmult == 1 ? - "cpu time = %.2f seconds\n" : - "cpu time = %.7f seconds\n", - (timeafter-timebefore)/actmult); -#else - fprintf(outfile,"\n"); -#endif - if (options_getcanon) cvalid_sg = TRUE; - ovalid = TRUE; - } - else - { - ovalid = FALSE; - cvalid = cvalid_sg = FALSE; - if (!gvalid && !gvalid_sg) - { - fprintf(ERRFILE,"g is not defined\n"); - break; - } - if (mode == DENSE_MODE) - { - if (pvalid) - { - fprintf(outfile,"[fixing partition]\n"); - options.defaultptn = FALSE; - } - else - options.defaultptn = TRUE; - - options.outfile = outfile; - options.digraph = options_digraph; - options.cartesian = options_cartesian; - options.schreier = (options_schreier > 0); - options.getcanon = options_getcanon; - options.tc_level = options_tc_level; - options.linelength = options_linelength; - options.invarproc - = invarproc[options_invarproc].entrypoint; - options.mininvarlevel = options_mininvarlevel; - if (options.invarproc) - options.maxinvarlevel = options_maxinvarlevel; - else - options.maxinvarlevel = 0; - options.invararg = options_invararg; - if (options_schreier > 0) - schreier_fails(options_schreier); - - if (umask & U_NODE) options.usernodeproc = NODEPROC; - else options.usernodeproc = NULL; - if (umask & U_AUTOM) options.userautomproc = AUTOMPROC; - else options.userautomproc = NULL; - if (umask & U_LEVEL) options.userlevelproc = LEVELPROC; - else options.userlevelproc = NULL; - if (umask & U_REF) options.userrefproc = REFPROC; - else options.userrefproc = NULL; -#if !MAXN - if (options_getcanon) - DYNALLOC2(graph,canong,canong_sz,n,m,"dreadnaut"); - DYNALLOC1(setword,workspace,workspace_sz,2*m*worksize, - "dreadnaut"); -#endif - firstpath = TRUE; - options.writeautoms = options_writeautoms; - options.writemarkers = options_writemarkers; -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - actmult = 0; - for (;;) - { - nauty(g,lab,ptn,NULL,orbits,&options,&stats,workspace, - 2*m*worksize,m,n,canong); - options.writeautoms = FALSE; - options.writemarkers = FALSE; - ++actmult; - if (multiplicity > 0 && actmult >= multiplicity) - break; -#ifdef CPUTIME - if (mintime > 0.0 && (actmult < 20 || !(actmult&7)) - && CPUTIME >= timebefore+mintime) - break; -#endif - } -#ifdef CPUTIME - timeafter = CPUTIME; -#endif - } - if (mode == SPARSE_MODE) - { - if (pvalid) - { - fprintf(outfile,"[fixing partition]\n"); - options_sg.defaultptn = FALSE; - } - else - options_sg.defaultptn = TRUE; - - options_sg.outfile = outfile; - options_sg.digraph = options_digraph; - options_sg.cartesian = options_cartesian; - options_sg.schreier = (options_schreier > 0); - options_sg.getcanon = options_getcanon; - options_sg.linelength = options_linelength; - options_sg.invarproc - = invarproc[options_invarproc].entrypoint_sg; - options_sg.mininvarlevel = options_mininvarlevel; - if (options_sg.invarproc) - options_sg.maxinvarlevel = options_maxinvarlevel; - else - options_sg.maxinvarlevel = 0; - options_sg.invararg = options_invararg; - options_sg.tc_level = options_tc_level; - if (options_schreier > 0) - schreier_fails(options_schreier); - - if (umask & U_NODE) options_sg.usernodeproc = NODEPROC; - else options_sg.usernodeproc = NULL; - if (umask & U_AUTOM) options_sg.userautomproc = AUTOMPROC; - else options_sg.userautomproc = NULL; - if (umask & U_LEVEL) options_sg.userlevelproc = LEVELPROC; - else options_sg.userlevelproc = NULL; - if (umask & U_REF) options_sg.userrefproc = REFPROC; - else options_sg.userrefproc = NULL; -#if !MAXN - DYNALLOC1(setword,workspace,workspace_sz,2*m*worksize, - "dreadnaut"); -#endif - - firstpath = TRUE; - options_sg.writeautoms = options_writeautoms; - options_sg.writemarkers = options_writemarkers; -#ifdef CPUTIME - timebefore = CPUTIME; -#endif - actmult = 0; - for (;;) - { - nauty((graph*)&g_sg,lab,ptn,NULL,orbits,&options_sg, - &stats,workspace,2*m*worksize,m,n,(graph*)&canong_sg); - options_sg.writeautoms = FALSE; - options_sg.writemarkers = FALSE; - ++actmult; - if (multiplicity > 0 && actmult >= multiplicity) - break; -#ifdef CPUTIME - if (mintime > 0.0 && (actmult < 20 || !(actmult&7)) - && CPUTIME >= timebefore+mintime) - break; -#endif - } -#ifdef CPUTIME - timeafter = CPUTIME; -#endif - } - - if (stats.errstatus != 0) - fprintf(ERRFILE, - "nauty returned error status %d [this can't happen]\n", - stats.errstatus); - else - { - if (options_getcanon) - { - if (mode == DENSE_MODE) cvalid = TRUE; - else cvalid_sg = TRUE; - } - ovalid = TRUE; - fprintf(outfile,"%d orbit%s",SS(stats.numorbits,"","s")); - fprintf(outfile,"; grpsize="); - writegroupsize(outfile,stats.grpsize1,stats.grpsize2); - fprintf(outfile,"; %d gen%s", - SS(stats.numgenerators,"","s")); - fprintf(outfile,"; %lu node%s",SS(stats.numnodes,"","s")); - if (stats.numbadleaves) - fprintf(outfile," (%lu bad lea%s)", - SS(stats.numbadleaves,"f","ves")); - fprintf(outfile,"; maxlev=%d\n", stats.maxlevel); - /* fprintf(outfile,"tctotal=%lu",stats.tctotal); */ - if (options_getcanon) - fprintf(outfile,"canupdates=%lu; ",stats.canupdates); -#ifdef CPUTIME - fprintf(outfile,actmult == 1 ? - "cpu time = %.2f seconds\n" : - "cpu time = %.7f seconds\n", - (timeafter-timebefore)/actmult); -#else - fprintf(outfile,"\n"); -#endif - if (mode == DENSE_MODE && options_maxinvarlevel != 0 - && invarproc[options_invarproc].entrypoint) - { - fprintf(outfile,"invarproc \"%s\" succeeded %lu/%lu", - invarproc[options_invarproc].name, - stats.invsuccesses,stats.invapplics); - if (stats.invarsuclevel > 0) - fprintf(outfile," beginning at level %d.\n", - stats.invarsuclevel); - else - fprintf(outfile,".\n"); - } - if (mode == SPARSE_MODE && options_maxinvarlevel != 0 - && invarproc[options_invarproc].entrypoint_sg) - { - fprintf(outfile,"invarproc \"%s\" succeeded %lu/%lu", - invarproc[options_invarproc].name_sg, - stats.invsuccesses,stats.invapplics); - if (stats.invarsuclevel > 0) - fprintf(outfile," beginning at level %d.\n", - stats.invarsuclevel); - else - fprintf(outfile,".\n"); - } - } - } - break; - - case 'A': /* change mode, with possible conversion */ - minus = FALSE; - oldmode = mode; - d = getc(INFILE); - if (d == 'n' || d == 'N' || d == 'd' || d == 'D') mode = DENSE_MODE; - else if (d == 's' || d == 'S') mode = SPARSE_MODE; - else if (d == 't' || d == 'T') mode = TRACES_MODE; - else - { - fprintf(ERRFILE,"Mode %c is unknown\n",(d?d:'0')); - break; - } - if ((d = getc(INFILE)) != '+') - { - ungetc(d,INFILE); - gvalid = gvalid_sg = FALSE; - pvalid = ovalid = FALSE; - } - else - { - if (SPARSEREP(oldmode) && !SPARSEREP(mode) && gvalid_sg) - { -#if !MAXN - DYNALLOC2(graph,g,g_sz,n,m,"dreadnaut"); -#endif - sg_to_nauty(&g_sg,g,m,&m); - gvalid_sg = FALSE; - gvalid = TRUE; - } - if (!SPARSEREP(oldmode) && SPARSEREP(mode) && gvalid) - { - nauty_to_sg(g,&g_sg,m,n); - gvalid = FALSE; - gvalid_sg = TRUE; - } - } - cvalid = cvalid_sg = FALSE; - sgn = 0; /* invalidate saved graph */ - break; - - case 'f': /* read initial partition */ - - if (minus) - { - pvalid = FALSE; - minus = FALSE; - } - else - { - readptn(INFILE,lab,ptn,&numcells,prompt,n); - pvalid = TRUE; - freeschreier(NULL,&generators); - } - break; - - case 'F': /* individualise one more vertex */ - if ((d = getc(INFILE)) != 'F') ungetc(d,INFILE); - minus = FALSE; - if (d != 'F') - { - i = getint(INFILE); - i -= labelorg; - if (i < 0 || i >= n) - fprintf(ERRFILE,"F argument must be 0..n-1\n"); - else - { - if (!pvalid) unitptn(lab,ptn,&numcells,n); - individualise(lab,ptn,0,i,&d,&numcells,n); - pvalid = TRUE; - } - } - else - { - if (!gvalid && !gvalid_sg) - { - fprintf(stderr,"g is not defined\n"); - break; - } - if (!pvalid) unitptn(lab,ptn,&numcells,n); - if (!SPARSEREP(mode)) - i = targetcell(g,lab,ptn,0,1,options_digraph,-1,m,n); - else if (mode == SPARSE_MODE) - i = targetcell_sg((graph*)&g_sg,lab,ptn,0,1, - options_digraph,-1,m,n); - if (ptn[i] > 0) - { - ptn[i] = 0; - ++numcells; - } - pvalid = TRUE; - } - freeschreier(NULL,&generators); - break; - - case 't': /* type graph */ - minus = FALSE; - if (gvalid) - putgraph(outfile,g,options_linelength,m,n); - else if (gvalid_sg) - putgraph_sg(outfile,&g_sg,options_linelength); - else - fprintf(ERRFILE,"g is not defined\n"); - break; - - case 'T': /* type graph preceded by n, $ and g commands */ - minus = FALSE; - if (gvalid) - { - fprintf(outfile,"n=%d $=%d g\n",n,labelorg); - putgraph(outfile,g,options_linelength,m,n); - fprintf(outfile,"$$\n"); - } - else if (gvalid_sg) - { - fprintf(outfile,"n=%d $=%d g\n",n,labelorg); - putgraph_sg(outfile,&g_sg,options_linelength); - fprintf(outfile,"$$\n"); - } - else - fprintf(ERRFILE,"g is not defined\n"); - break; - - case 'u': /* call user procs */ - if (minus) - { - umask = 0; - minus = FALSE; - } - else - { - umask = getint(INFILE); - if (umask < 0) umask = ~U_TCELL; - } - if (umask & U_TCELL) - { - fprintf(ERRFILE,"usertcellproc() is gone at version 2.4\n"); - umask &= ~U_TCELL; - } - break; - - case 'o': /* type orbits */ - minus = FALSE; - if (ovalid) - PUTORBITS(outfile,orbits,options_linelength,n); - else - fprintf(ERRFILE,"orbits are not defined\n"); - break; - - case 'O': /* make orbits into a partition*/ - minus = FALSE; - if ((d = getc(INFILE)) != 'O') ungetc(d,INFILE); - - if (ovalid && d != 'O') - { -#if !MAXN - DYNALLOC1(int,tempptn,tempptn_sz,n,"dreadnaut"); -#endif - for (i = n; --i >= 0;) tempptn[i] = 0; - for (i = n; --i >= 0;) - if ((j = orbits[i]) < i) - { - tempptn[i] = tempptn[j]; - tempptn[j] = i; - } - - k = 0; - numcells = 0; - for (i = 0; i < n; ++i) - { - if (orbits[i] == i) - { - j = i; - do - { - lab[k] = j; - ptn[k] = 1; - ++k; - j = tempptn[j]; - } while (j > 0); - - ptn[k-1] = 0; - ++numcells; - } - } - pvalid = TRUE; - } - else if (ovalid && d == 'O') - { -#if !MAXN - DYNALLOC1(int,tempptn,tempptn_sz,n,"dreadnaut"); - DYNALLOC1(int,templab,templab_sz,n,"dreadnaut"); -#endif - for (i = 0; i < n; ++i) tempptn[i] = 0; - for (i = 0; i < n; ++i) ++tempptn[orbits[i]]; - - j = 0; - for (i = 0; i < n; ++i) - if (tempptn[i] > 0) - { - templab[j] = i; - tempptn[j] = tempptn[i]; - ++j; - } - sort2ints(tempptn,templab,j); - - k = 0; - for (i = 0; i < j; ++i) - { - ptn[templab[i]] = k; - k += tempptn[i]; - } - for (i = 0; i < n; ++i) lab[ptn[orbits[i]]++] = i; - - for (i = 0; i < n; ++i) ptn[i] = 1; - k = 0; - for (i = 0; i < j; ++i) - { - k += tempptn[i]; - if (i == j-1 || tempptn[i] != tempptn[i+1]) - ptn[k-1] = 0; - } - pvalid = TRUE; - } - else - fprintf(ERRFILE,"orbits are not defined\n"); - break; - - case 'b': /* type canonlab and canong */ - minus = FALSE; - if (cvalid) - putcanon(outfile,lab,canong,options_linelength,m,n); - else if (cvalid_sg) - { - sortlists_sg(&canong_sg); - putcanon_sg(outfile,lab,&canong_sg,options_linelength); - } - else - fprintf(ERRFILE,"h is not defined\n"); - break; - - case 'z': /* type hashcode for canong */ - minus = FALSE; - if (cvalid) - { - zseed = hashgraph(canong,m,n,2922320L); - fprintf(outfile,"[N%07lx",zseed); - - zseed = hashgraph(canong,m,n,19883109L); - fprintf(outfile," %07lx",zseed); - - zseed = hashgraph(canong,m,n,489317L); - fprintf(outfile," %07lx]\n",zseed); - } - else if (cvalid_sg) - { - zseed = hashgraph_sg(&canong_sg,2922320L); - fprintf(outfile,"[%c%07lx", - mode==SPARSE_MODE?'S':'T',zseed); - - zseed = hashgraph_sg(&canong_sg,19883109L); - fprintf(outfile," %07lx",zseed); - - zseed = hashgraph_sg(&canong_sg,489317L); - fprintf(outfile," %07lx]\n",zseed); - } - else - fprintf(ERRFILE,"h is not defined\n"); - break; - - case 'c': /* set getcanon option */ - options_getcanon = !minus; - minus = FALSE; - break; - - case 'w': /* read size of workspace */ - minus = FALSE; - worksize = getint(INFILE); -#if MAXN - if (worksize > 2*MAXM*WORKSIZE) - { - fprintf(ERRFILE, - "too big - setting worksize = %d\n",WORKSIZE); - worksize = WORKSIZE; - } -#endif - break; - - case 'l': /* read linelength for output */ - options_linelength = getint(INFILE); - minus = FALSE; - break; - - case 'y': /* set tc_level field of options */ - options_tc_level = getint(INFILE); - minus = FALSE; - break; - - case 'M': /* set multiplicity */ - if (minus) - { - multiplicity = 1; - mintime = 0.0; - minus = FALSE; - } - else - { - multiplicity = getint(INFILE); - if (multiplicity < 0) multiplicity = 0; - if ((d = getc(INFILE)) == '/') - { - actmult = getint(INFILE); - if (actmult < 0) actmult = 0; - } - else - { - ungetc(d,INFILE); - actmult = 0; - } - if (multiplicity == 0 && actmult == 0) multiplicity = 1; - mintime = (double)actmult; - } - break; - - case 'k': /* set invarlev fields of options */ - options_mininvarlevel = getint(INFILE); - options_maxinvarlevel = getint(INFILE); - minus = FALSE; - break; - - case 'K': /* set invararg field of options */ - options_invararg = getint(INFILE); - minus = FALSE; - break; - - case '*': /* set invarproc field of options */ - minus = FALSE; - d = getint(INFILE); - if (d >= -1 && d <= NUMINVARS-2) - { - options_invarproc = d+1; - options_mininvarlevel = 0; - options_maxinvarlevel = 1; - if (options_invarproc >= 10 && options_invarproc <= 13) - options.invararg = 3; - else - options.invararg = 0; - } - else - fprintf(ERRFILE,"no such vertex-invariant\n"); - break; - - case 'a': /* set writeautoms option */ - options_writeautoms = !minus; - minus = FALSE; - break; - - case 'm': /* set writemarkers option */ - options_writemarkers = !minus; - minus = FALSE; - break; - - case 'V': /* set verbosity for Traces */ - if (minus) - { - options_verbosity = 0; - minus = FALSE; - } - else - { - i = getint(INFILE); - if (i < 0) fprintf(ERRFILE,"verbosity must be >= 0\n"); - else options_verbosity = i; - } - break; - - case 'S': /* set strategy for Traces */ - if (minus) - { - options_strategy = 0; - minus = FALSE; - } - else - { - i = getint(INFILE); - if (i < 0) fprintf(ERRFILE,"strategy must be >= 0\n"); - else options_strategy = i; - } - break; - - case 'G': /* set schreier option */ - if (minus) - { - options_schreier = 0; - minus = FALSE; - } - else - { - i = getint(INFILE); - if (i < 0) fprintf(ERRFILE,"schreierfails must be >= 0\n"); - else - { - options_schreier = i; - if (i > 0) schreier_fails(i); - } - } - break; - - case 'p': /* set cartesian option */ - options_cartesian = !minus; - minus = FALSE; - break; - - case 'd': /* set digraph option */ - if (options_digraph && minus) gvalid = gvalid_sg = FALSE; - options_digraph = !minus; - minus = FALSE; - break; - - case 'P': /* set keep-group option */ - if (minus && options_keepgroup) - { - options_keepgroup = FALSE; - freeschreier(NULL,&generators); - } - else - { - if ((d = getc(INFILE)) != 'P') ungetc(d,INFILE); - options_keepgroup = TRUE; - if (d == 'P') - { - readvperm(INFILE,perm,prompt,n,&nperm); - if (nperm != n) - fprintf(ERRFILE,"Incomplete permutation\n"); - else - addpermutation(&generators,perm,n); - } - } - minus = FALSE; - break; - - case '$': /* set label origin */ - if ((d = getc(INFILE)) == '$') - labelorg = oldorg; - else - { - ungetc(d,INFILE); - oldorg = labelorg; - i = getint(INFILE); - if (i < 0) fprintf(ERRFILE,"labelorg must be >= 0\n"); - else labelorg = i; - } - break; - - case '?': /* type options, etc. */ - minus = FALSE; - fprintf(outfile,"Mode=%s ", - (mode==DENSE_MODE?"dense": - mode==SPARSE_MODE?"sparse":"Traces")); - fprintf(outfile,"m=%d n=%d labelorg=%d",m,n,labelorg); - if (!gvalid && !gvalid_sg) - fprintf(outfile," g=undef"); - else if (gvalid) - { - uli = 0; - for (i = 0, gp = g; i < n; ++i, gp += m) uli += setsize(gp,m); - if (options_digraph) fprintf(outfile," arcs=%lu",uli); - else fprintf(outfile," edges=%lu",uli/2); - } - else - { - uli = g_sg.nde; - if (options_digraph) fprintf(outfile," arcs=%lu",uli); - else fprintf(outfile," edges=%lu",uli/2); - } - fprintf(outfile," options=(%cc%ca%cm%cp%cd", - PM(options_getcanon),PM(options_writeautoms), - PM(options_writemarkers),PM(options_cartesian), - PM(options_digraph)); - if (mode == TRACES_MODE) - fprintf(outfile,"%cP",PM(options_keepgroup)); - if (umask & 31) - fprintf(outfile," u=%d",umask&31); - if (options_tc_level > 0) - fprintf(outfile," y=%d",options_tc_level); - if (options_mininvarlevel != 0 || options_maxinvarlevel != 0) - fprintf(outfile," k=(%d,%d)", - options_mininvarlevel,options_maxinvarlevel); - if (options_invararg > 0) - fprintf(outfile," K=%d",options_invararg); - if (multiplicity != 1 || mintime != 0.0) - fprintf(outfile," M=%d/%.0f",multiplicity,mintime); - fprintf(outfile,")\n"); - fprintf(outfile,"linelen=%d worksize=%d input_depth=%d", - options_linelength,worksize,curfile); - if (options_schreier > 0) - fprintf(outfile," G=%d",options_schreier); - if (mode == TRACES_MODE) - { - if (options_verbosity != 1) - fprintf(outfile," V=%d",options_verbosity); - if (options_strategy != 0) - fprintf(outfile," S=%d",options_strategy); - } - if (options_invarproc != 1) - fprintf(outfile," invarproc=%s", - (mode == DENSE_MODE ? - invarproc[options_invarproc].name : - invarproc[options_invarproc].name_sg)); - if (pvalid) - fprintf(outfile,"; %d cell%s",SS(numcells,"","s")); - else - fprintf(outfile,"; 1 cell"); - fprintf(outfile,"\n"); - if (outfile != PROMPTFILE) - { - fprintf(outfile,"Mode=%s ", - (mode==DENSE_MODE?"dense": - mode==SPARSE_MODE?"sparse":"Traces")); - fprintf(PROMPTFILE,"n=%d depth=%d labelorg=%d\n", - n,curfile,labelorg); - } - break; - - case '&': /* list the partition and possibly the quotient */ - if ((d = getc(INFILE)) == '&') - doquot = TRUE; - else - { - ungetc(d,INFILE); - doquot = FALSE; - } - minus = FALSE; - if (pvalid) - putptn(outfile,lab,ptn,0,options_linelength,n); - else - fprintf(outfile,"unit partition\n"); - if (doquot) - { - if (!pvalid) unitptn(lab,ptn,&numcells,n); - if (SPARSEREP(mode)) - putquotient_sg(outfile,&g_sg,lab,ptn,0,options_linelength); - else - putquotient(outfile,g,lab,ptn,0,options_linelength,m,n); - } - break; - - case 'h': /* type help information */ - case 'H': - minus = FALSE; - help(PROMPTFILE,c == 'H'); - break; - - default: /* illegal command */ - fprintf(ERRFILE,"'%c' is illegal - type 'h' for help\n",c); - flushline(INFILE); - if (prompt) fprintf(PROMPTFILE,"> "); - break; - - } /* end of switch */ - - exit(0); -} - -/***************************************************************************** -* * -* help(f,i) writes help information to file f (i = 0,1). * -* * -*****************************************************************************/ - -static void -help(FILE *f, int i) -{ -#define H(ss) fprintf(f," %s\n",ss); - -if (i == 0) -{ -H("Modes: An = dense, As = sparse, At = Traces; extra + to convert graph") -H("+- a : write automs v : write degrees *=# : select invariant:") -H(" b : write canong w=# : set worksize (units of 2m)") -H("+- c : canonise x : run nauty -1 = user-defined") -H("+- d : digraph or loops y=# : set tc_level 0 = none") -H(" e : edit graph z : write hashcode 1 = twopaths") -H("-f, f=#, f=[...] : set colours 2 = adjtriang(K=0,1)") -H(" g : read graph $=# : set origin 3 = triples") -H(" h,H : help $$ : restore origin 4 = quadruples") -H(" i : refine ? : type options 5 = celltrips") -H(" I : refine using invar _ : compl __ : conv 6 = cellquads") -H(" j : relabel randomly % : Mathon doubling 7 = cellquins") -H("k=# # : set invar levels & : type colouring 8 = distances(K)") -H(" K=# : set invar param && : + quotient matrix 9 = indsets(K)") -H(" l=# : set line length >ff : write to file 10 = cliques(K)") -H("+- m : write markers >>ff : append to file 11 = cellcliq(K)") -H(" n=# : set order -> : revert to stdout 12 = cellind(K)") -H(" o : write orbits partition") -H("+- P : keep group PP : add automorphism Type H for more..") -} - -if (i == 1) -{ -H("Commands for g and e : ") -H(" There is always a \"current vertex\" v, initially first vertex.") -H(" # : add edge v-# ; : increment v (exit if over limit)") -H(" -# : delete edge v-# #: : set v := #") -H(" ? : list nbhs of v . : exit") -H("Mode change: An = dense nauty, As = sparse nauty, At = Traces") -H("Use An+, As+ or At+ to also convert graph between dense and sparse") -H("Command line argument -o options allows a,c,d,m,p,l,G,P,w,y,$,A,V,M") -H("Syntax for f : f=[2 3|4:9|10] (rest in extra cell at right)") -H(" -f same as f=[], f=# same as f=[#]") -H("Syntax for r : r 2:4 1 5; (rest appended in order)") -H("Syntax for R : R 2:4 1 5; or -R 0 3 6:10;") -H("Syntax for PP : PP 2:4 1 5 0; (must be complete)") -H("Arguments for u : 1=node,2=autom,4=level,16=ref (add them)") -H("Accurate times: M=#/# set number of runs and minimum total cpu.") -} - -} - -/***************************************************************************** -* * -* usernode(g,lab,ptn,level,numcells,tc,code,m,n) is a simple version of the * -* procedure named by options.usernodeproc. * -* * -*****************************************************************************/ - -static void -usernode(graph *g, int *lab, int *ptn, int level, int numcells, - int tc, int code, int m, int n) -{ - int i; - - for (i = 0; i < level; ++i) PUTC('.',outfile); - if (numcells == n) - fprintf(outfile,"(n/%d)\n",code); - else if (tc < 0) - fprintf(outfile,"(%d/%d)\n",numcells,code); - else - fprintf(outfile,"(%d/%d/%d)\n",numcells,code,tc); - if (firstpath) putptn(outfile,lab,ptn,level,options_linelength,n); - if (numcells == n) firstpath = FALSE; -} - -/***************************************************************************** -* * -* userautom(count,perm,orbits,numorbits,stabvertex,n) is a simple * -* version of the procedure named by options.userautomproc. * -* * -*****************************************************************************/ - -static void -userautom(int count, int *perm, int *orbits, - int numorbits, int stabvertex, int n) -{ - fprintf(outfile, - "**userautomproc: count=%d stabvertex=%d numorbits=%d\n", - count,stabvertex+labelorg,numorbits); - PUTORBITS(outfile,orbits,options_linelength,n); -} - -/***************************************************************************** -* * -* userlevel(lab,ptn,level,orbits,stats,tv,index,tcellsize,numcells,cc,n) * -* is a simple version of the procedure named by options.userlevelproc. * -* * -*****************************************************************************/ - -static void -userlevel(int *lab, int *ptn, int level, int *orbits, statsblk *stats, - int tv, int index, int tcellsize, int numcells, int cc, int n) -{ - fprintf(outfile, - "**userlevelproc: level=%d tv=%d index=%d tcellsize=%d cc=%d\n", - level,tv+labelorg,index,tcellsize,cc); - fprintf(outfile," nodes=%lu cells=%d orbits=%d generators=%d\n", - stats->numnodes,numcells,stats->numorbits,stats->numgenerators); -} diff --git a/tools/nauty25r9_unix/dretog b/tools/nauty25r9_unix/dretog deleted file mode 100644 index ac3ea97b99ebacb225b3b924d059a503bd4f3927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169334 zcmb@vdwf*Y)%ZP=OfX>ZL=74hG~if61tl8WOd*|wbx#It+m%)drw^;G$P0Cc4hu@T-UfH_2M~I3grCjay>gXN2TSTDp!T8C;wjP zy1>S zSLgZOHBN<@r^{8MzDqg5wQ#iay>Rs13Z8jR5M=mkAMHFdr#YTgq$FJ>50_v4+x1L0?;5i$a*w>X_I3)k_8zWsW}fkM=QGbtxf>}b zc>cfs6{a)Zly2`-blIEkU*?%kx~`Zq`R?zOUoqvL!BZwb7@akER>gM)f2aKN8B;I6 zQuSNvm%JlKk5?^a=vYija4zD1;Q{&n;_dw|fBm*4Z>-<2q~EzWw;fsd;Kq;So0tEk z4%IJriEEC#Fh^jQ@W1>G?Du%zn(=oP`t~I=Y~p;#`uAVFpOux)yk1AeCxdsKB7f~E z;OkBSfB6*ft54DH-KWTZ=oIjlQ@|&m0$zCv_@$?SFFpl)<|*K(p9227Q@}4i1s(dH z0&V~=p{^7E8UUPZ9NSI-fBzKlvrp0Pv{U34F>$hX`JMhDd68Z z1$@9M;QLMiUvLWe3&78Go#&c!lW?lbm63Bdr{VKYfPbEbFFXP6LT-dbOnk>xGi7S{ z{+h{CCb=d~oHl*(gOQqv;rs4)O`0`1;+hz|VdAuCBx&t!6`ypw0#6^Z-^(DW&kj6QhpB&vB}(gQOlQSC%3 zdT{DQ%G?#1JoP~UHCatl&D3bbRij#-IC1ifsbQaQV$F>3T@ThM=nSbSJncuWn(&mV zGbXtnaGI})Oacumi_)i=f(^~Mq-zgOb=AzAJ~=YURRgZ~xN4#gcJ`X89+>(ty{E4V zNl*?yFpX-2M$*;kk%^Vm6u<2 zd3oo1S=VdV+jl!ZUwQe}j8RVKf4QA+IY{U(xV(wZ?Sk~kdKYLWO*Z6po|4%a{SrBE za!--qx4`EDd+Ld25a)TWa5`Nyd2(;j2oI*y=c;tBYgRfPJzvV_xPC%f{@QPF_)m0# z=#b1`hA%}uijK(qW%yFy8NDIjGJGlUZwVm%S3Jh4|1{F+Ce@dcEV$4k^H-V$7oC;) z8%J_w z$nebHv@Cc*2FP<(7My|W{F{>nKcf@sa?Q_zYgzDxS?~<6$meIX;Adv#e=!T5Eq7na zf}fq0|J5vbHlHlYf{U!q{5533&&dFJF3*CWn+0#pf{RU)`P+~MKQ9C1xj74deiq!y zf?tpY-ANK@Q_g--rGFr4nQHbzmA*;RGR5pUDm_Zl zGPUe!Dm`4%GNtT0Rr-69mZ@ZqQRyosEmO#@Qt59?TBeRYM5PBvTBeL$qSEI}TBeF! zsM2RiTBeBYQt4ijmZ@RyJr3ZK97)TRus5sp;o+oZD%hh?mFUL$E?aeIzRuavZ~wmnUyn!dtze-wI z*sfCPmnAK%YY$QB-%46o)-F-$=OrzyY8R^X&m=7@YP(eWr;--dwD%s9{{KYMC6eB( z(m$58u%g|n($gg^ENC~7)^7=#2lbov@%p&&V~x3AJj;iBjHKt1QeF%*?w!xGtRdFn zHfMW>Y4vw7@aN#?4GeSH{{PnEhhVWe6<28Sk9m3fA-)=BiYwNea zaJiCK&%SqnD{(-Zzm%>>$psU52_!z(5;v%xf|bm_p3+p}d8UDp?6(jKDtzyeUMA^5 zSC$qU4ka&{l+IH6L$XxGcWLnrlno?yX^DUGqW>euFh2{F9k71M7(l0g9948m^rcZM z98#5CKuRadd;;YolLt4C!>WpONTlxUk z;ukmSE=BUP2J1cWE9vY%R z2@rURklxayaD$QjyW*mIjH}8OTWN`#gphOJ5oWvfcKtT}cKr^0VzbDvSbK*SKaGZ< zkM(QS*#Xg=_SZC`UF2ts{w1R1TN-bBYE}rsUT$T(BdzV$GUYbljvjzWPp+Ez5m()t|j@5JPWC&^nihYRGQ%o` z`t3sfZG0+gSX?#pZdWI^zd5A366v+16f~`~q`^L4gqe?PG}9x97y>{1a~k@Z(Npx$ zUZeV9m0Dbcf4cJdRIY@-c9HOKPw+I%h_~44XlIbZ^wda_l!3L&6(d!-mQ0hne?{He zYfK^~8)f2|c|QaLJ3)J}Is^L~8R%GpJ5cs{TIRSSBaGA-x4}5yslDbJHY0M)uzMpT zhux>eQ_^c@)06U?Dsak^RSSUY^JpC3}`F#;2@`Byc`*TP;{6dM+Oo_Jlq`|kOu2gV@BHl4ZYPR>z#g8$8tv&C_KqFY~bL4Aswzu@{74l&oLj|`7&3ClKRkUlgG`6ml zM@z#Q$k2}{_mwk`7fr?CFy0t^9}gqeeuiOgo0)Ta^CF=%6peg!`x5!ou{kXl7D+0T zzp*`+{D#?NH153CaJL$(+oKd->=a%@VZ@_Tervk?oXQ)AVvI!398XEB7Ph;6S>82( z-20V2Fk+R9zC(t{g`FrAjbBoN7n%GWt+(5cP(`TVRH~`C9##VCGLfgfjWMY*V1Dqh?_++!F8|G*U$gLE4|ZC*jgkGGmgVJ|4es ziQgpu<1$q$&v+Ik}zJU-*7mOyMXLzlV(zOSP@la=0y2qBoM(C_ZBzMJo+nOW{+ zWp4pLyUgz?984YFLeV$wWq$V_>uky6ZkKGvvwm}j zzo4)ru_hRPPu^U$J=`07O|?-YIn0}G`rm=nqi$;!CH=nHba+8OHLuIPOT+-T7JMaa z2W3#rj>Q+fmo>(HSvomc`GY&Mdh!5O1$=w7)Ho`#OBK!MP!(b$U1`}StAc9nhxwMQ z?3XDFv4j$XDQ_3^$;u@Yml`;EuC2^$fBoiar;^$mX69~91^#uJEi+R5_Sk^ z{-b{P4lC8eAu{#(eTN_Yw(+daAW~o)1-gdB2p>?x)?wX7fk5gWk2{b!P^;-!rhfNk z)P?R_R(qK<5+QHl;;*}8ogRC~ZAIyQz^LEoi6MzX-W7#qx)_e=JQcB&$i-V#uL z{8gnp>oB&Mi{( zakmO$=DmWtl2`EVv9T;sSiYzA@g8f#mtyF2M8?M2dqqYkHbs9BYcGjxi?#QxSs3{= zHRh|>VfVx9W9@??t5E{qL)>X^FJFA9i)G$WYD8yfh2u@9y69hIT&Zo4xCJ1b(_ZrG zLsv@$?M|UT?qx2{R7^Gp>cMBdH}YMIES5$8t+y*hv!wUOy3786nicuG_(!JX*J?^0 z8>@U0Ads&R=w&uXzLbu95!-x(zC=Fvr^2nVBZIZ48}!)Go(~U-H$=n~i5&9RDI3v6!l)C4f4kdLA^GKIH zTSA30Wc#I;yUnK9)+68(`CP3*#L*vXXT|jdFCpKyhXHCW2@<8@$CVUfPf<8>+1Pw3=~@3Md^ z3skd^TBFO!J#$Ul=kl$rLFJXzz+I~D0ov0|bV7T&v1E1R20>lYz0LKJ>*H&p=eIrW z^p_7+*b!R%C-92kJ6KRXO;AOtNp)v^qq^uyN|~#rTvhyl79UB`_zEq4El=glVO+;T zQTV1XBaft}<-1Qs*Gd^np}{}MVwl?{_m5c#ET%^BBLs@PjAh}iW-HW~1I4oS$2XOS zQuZi%Kia0V+V*@Ss+pe`!zqYqV}vV0nZAt z{uREQTE;&?A4JA?>Y-PUyE3Zk1*y~TMYwA5AJI23Xgf{t$<|wQ$e+<$4xYY)qNwZ} zD3Mv0WfaukZa%q!dV?KVrJ(EzN-aE@p4qUgOV8MYRNZvzKkFI)7mnV_(%(vud{c$r zXW%)?X9Nmm7>c?L116a*)?t>s5&f*jW9xWlJW9+Wuc+pIP$OC7Wk^Ed<*03Kfow1^ zFoh$u*Txl;d~9P_CJyS~61G7nlG z)3XrTSZuEnKNeSU$UHDAH7tL`d|I*YZ-ZE!G~!5^2-NwF8L@y%FUZPt`K z{pNuXDmL%1aI?8on|~Qg-DKr>5KwDlRw|Q^xLjtlp7ML#K99HVPa*Tr35=w_DW-)r zhZ@`J)B1(+azg} z(n1=14g5j%kq6`z7!ewkpaUl-{y$yYWJ~_`&hvDRdj{a zQ)vGI4;5YW;s{M_C%-fBJ()K$@Qi0{%e6A3$%0jC6xE;ydxqAXFygJ|N@v8kGU90- z=~>ihPo#d##?99X?>L;0W|D)g!T$brF1wN(OahqG6Kvd;tENJsGZhB#NzGw@@^{Yk zWl_geTsb;36=9#Q|qB|ES5no2jEP5qq?-BaDyyBmL%}d0ZbK3h!1MMX@hR4UoNh=^5;K1NR=&6Wl2+b zsT2;HBZgRYPD$SLwfG39SVeX**?mzgl4+By6_(LitQfzsQ>@BBc4_m}wud0=?0nvCzuEh9Ast+b>OM}S=^Q)6J#YUnd(#LvkYez@0WrW(s;%TV9((kf00kgJ{ z8S`u@ZauRH&I{b3`G~&9n97DJLQjkmo8dtjrR7=dklRR2ckAY9+Pv!|U+hp$C^bCC z^!!tcdmR7_K0SB1>3NK;5(nZ5rEc=5EEbhfCXX_CWcj%kzlmu`fgVyoU&IEJE9hGl ziG<8u#=uoUvn|-zmNPn4Bqph=I zx>h%GZ_xMd%w5&)){uLB(6=-4t!nXzr$)O`-~X)kt*h-5j5XxoYsdkxpxU>z)+1j+ z?w#UG5Bc_LsTE*eo!C{on+g7N-E2gS#I|VoA99R?8)I8?K{BX~SQU&N>mg6p`&!~t z*w--Ev%6wfGD}0|dVLXN;H|%&sUjuZjX_^~q$d;2 z4w+L{IouLT4)S7KuqTI9XsZ%C+=~6djc|!}lrjB#um2W|eGn_K{7=*bHH)4|<_z_h z9o6FE_hSl{wFhIna*}1{m8P3sMVB~ZU8@;bkcDL^)g4yV7O;;E^TP9wQ7V)iTr2hB zuIrj_fn?~dqeg5`P9W)j%M}c-2!>k?-|9$Rb*kv8P;&M^-XAjewz069 zLtW^kqIrgIWn`ogv)n)WGMFlQTxVCb+I>7=oVVHaeTD`mJ1_g*;H?BzE- zv1mQkN@+K1Mb#%Hv9E$+>H2B@ahhKx&C_(-uM~-yOD_A*C^ZA~tk|(tO$$;ELkwSQ z_}UF^WQ!5&$TPGNEi$p=Hz|H?cNkfJ>AZz}^-PQ8x3y7Q;Mltlk|o_g1@UxhG#3a?niO z=-#i@-o~34yfxaCO|q9$$ZpzF7axF?HPmQRuipGR8$jnU7f7_#XfxK8@UmJMm}jFA zYmyIJYP7G`^8YF_w36Yg<{It8MiP5TeArr})!nq$@a^S&yB2#?>Hn$kwY|3F3N)g% zyIlmz9VPaEBkYkZC06KD(WOqR*t$kimpQ3?Ylx(_JNpQJFOu{k0XzqwY=wOqWA(aX z`F+QEQ&Yi`H#I+G;?NsL>qFk0#vh__`%6kY$-7C`EVTbe0GA4KHv(8_-%YxkJ_v>z zRmea<{IyCMD8t?em^Tzc&p|SYpll;i0z)8cDSN4Dp?(!QS)?-~kP+%5hgdIv%81F{ z(ny5*%VY^AM=GISoG#WYt5`yKhO8CVjLu>R^?OvYI`-j3Am@J~0(oSq%G)y1kSFWF z>g2uo!Q|B9+H(~Wm#%N_{l$TGQp zswfK6ifu*;TS(yzvCX-D-(FoCxlE58?_oCj&Ar-Vm!d(4KnR5&VDkQygb^O^3A)$C z+Ho0W7Q0)B0 zYQ%9PRgjQLDxPkLIWEr?%q{W<&2fGl^$i}ww>-+8DSiltV;i^TSO-4t=s?S8@#T~= zQrCIP*66Pb!zv9X`pb|$BtuV7MN^KRjLgkX9AKF}M4LZeMmgNba*4hshrMHjd-zjT zD1~;v*#moIh*=)vQJOdq9iY|(zU7hgPM+H=h#5nPcF^LsR66&t1?NZO)ybYUWovBl zYhnHT@S<-n;~s`E_Fu5~gUN{{8ERm@TZ6B~?4pk-0~MW>e%W-7KFQYjLY8jBpFESQ9(x zjqK+&&0as;oc)3;sC4DJfbY|~r>o5?(23c*Dl#r=opd2|?_6hYVZoJNXMTs6GquiS zCm8X^LX-Vhwb1+=yo9OiH}T?^#Zds4eJ@PiLV`wsNoYd8G55HT4!?(*f?pb`n?Z0H z28nzmM+uUk@L;RBqj0J3GH2K4oBn6==}iolW%Fr`mbeQ&p#}_5QR-{g%~e{w8kovq zU&ov3$7hzY@#OL=*8V*$@dI!|M$6i>ry#!I0#M4$8z%ux$;ub{ePiAEGPT(f-vLt{ zTpvnJNw|d3s>8Q4lACI;uTB=dGb-g_51h`XhUE_Zt`?ssR7pL8pA9ZC_n zRJy`QmFN1-hz!p_`iOO>qOmq# z_7N0=%;Uu`Ll;P_i1rW$i9Fn$IV1+$Ag1V~%psgu`c1xoT0v=7`axF{dj#q40?F8Q z?vLr}lSj?d^wVOlEsKFH62Wg3-`- zuPE?|C3X?~hIg-QSJ@gY_xK>@n&HSY=sh~f#Elon%r15 zF3>fSwfR>0I@();XD67fE4IERDa%QfSjCcx(SRytFQSdbh+-^Ld6Vkw-^m*@%w<0> zZz68(g}i~Et^5vM=tQQU9F?Cz8K;jGdnlcvbtgGck|QN)5Nc(83^vN1SsLx-WXLCj zm>fvD01d;;n4u*hvs8G%&PPl-C0}$(55iJ4yDOu7OE=7 zP(^w?mA}>5NoU(GXdWf1Gxh}={GB14ey_nwG~5Wi3;ZfrbQrXSl zxC1BDbjq6_r~QpjZ&NOcW^KMnEy>Dl1PFs$0uYhtt@S=*wWqiA62|c&^(4EUA9ZcYE}q- zXK+|f-CW#l-0+qsM-&Qo!U{K+;GdPzBgt@Gs)h?W)ca+Eh`Nu}9=C0IKwHqm0`9xV z2zy>K+#7J!Xfav80x#Czl<`Y6)Lql|2;&|ycP}XcV4xVSd)H7{Mgwos$kaXMZtD_A zq^gsug1MeOhHry5Pgb=8MWl<$8un~%WnZwdzDsVMC3(u@5n|Q-_U$T2NoD$*LS5^l z&xw3XIs2#Gi+?f{J`fbXB1;A*>!a0O_*l>L?XI^bQ+ua>Qsz?t)Y)8Qh=S&O&NeZzMaf@!Uj%u`@98#5>}eUvKIQD< z^x~>)}>*w5Z-g^~?N4 zG!;HDJUOhyaPJPr-tkC7HZ^6sVZHZ3rVG{+z;)keQRKsJXY=M2`A9Dif0;SyW3;n3 ztgvaGD~HE~Ox6eQJNfhN2_o$MGT*Pak?s$Wv~Hxfg`M&8{?z0SeVjjaSI+qAFrlHx z#+vV*Ow#&I3l=GAZ12H<(MkcGJC_!NzITKt(9geO4zO(ay$o;2yyWmz@Wj)Cx#Ec< zBnc=bPbhqkD*ZZ;uF^L+rI}%>^e?6KEuE!bP^Ir7kHntO_p55!%#X`tN7M0Tv7Qh= zd2ZzsQuLRQAe78Y@GdSEO!N+OLl9FYbl)dhT!dIK ztoeO*bO%UmzH$J*AWw;r8q*&1wazRL4QxR3undY>vZ0(GGClb1y7~JS3!^$rp2_`Mwb@SRl^*?bqrOQY#Mr@~_3gAM9D)npjb{No=VCG#}WC zQIfp+W@?bglhGSxC*im|a=Tb&?3Er|h6*p?pR!Wx#?AC}wzr7YRIWHbCCqQgz+ku` z(IIcH+B2xO#P4p9ncGtPfP|T{VYM4KoYyJ>XFurr-Q)qdWGK{=ctUIEdl)@X2&GfP zvh))zu~CFrhR5IKv+#JA-q8{<%ATNmh`T*OXR2mDp;;NLTuMmu_Pq=^B%4$QFEqT1 zUG<`}z$zmGctrp=0tkiM?DagC+#pk=6s@X4!JXuJl9WJl>mqRbhQ2eGON6FBb)T9( zcjk=uo4c4njmLV7Rgot9IfWw9hk3GR$N(4PTrLp=g$UV#OT?#Rn2&p3;#szWS-{-# zr{__br`tUGD}}9Up^lnIe?XJ(QVlDTBKKW@9oS=avO`GnP1E~}b-YLa^t zdTL9TNyf0rDIq1gDyZ4-%&;Lc!)}rpX2^VnYx=U3WNqM))=|HGwfKKgo$yR)C|u$n zdXKknbOXm)9=ZZ12U>w?5F|c{S!ejx&b-oSX~MjRD`tBun0o_1mdM`jv(CUwyL+YN z>35l`rMI6)*_xV#1Z4Tm?W4oq--ra1r*nzfDseUG}5j z+-L5VUELX*#5$3HocYrb6POd}IL~FBS;mk>XK|Dj=PB|}jFD-0Z)hZ+@QSY_nB?~y zj}epFi6-&;_Gyp*7Fsgrhp1?hX+)FszAojz#4T|?Eqn^#gu5FLxCjLf3@D2*D~Lpe zUQ9!NE3wpJJq0x+a)J#k4lKyJy(DBFhgDP<$u!HmqN8JEYRV<3>kj)|x|~_}cDB%E zqGF#0sIKh;>@pSa(IVnV>XmqpX~cU-JL!}H) zYU$u%HX{sEV{=BNrj&}LMWv4!h>{n6m3M};_B21XnZGum>J_0l#_B=6Z9jJ!QjyBr zT70B^Hq z4TYz8%kAs<Q z68&nW8isoUQ5yKJ?hKTz2+#!z+>n^}dzb4Xbq`E2$5kbLtx(a`=!-xM{cCxd1(paCe{wU|wW&cVHgC z9uZ%6U=M(&!Q|cQJPlxeM9T)I*h}}V)#5BUT>gP;18h;6AM5mNM5;jfz;N$q@dbR9 z33o%v|0>Q~wppim@k&oy>SB9!Y9Ue*Z}swEtfA2F<7*9W>`l0|KU)r%&84=c=^yd7 z!S7z7`!?dz-bCT4?~;)Wo5=7P?`@KK3m^aG;pH7Z@?jIe&vtB;@TNPud&1$#N!Y&H!7psNO}H*Qigf4357`~D5p26`y_Q|FuXjJ zDv~jF`Ge_@ILbF9WR;kTA(541{6kTwbvj>4 zMG`9PC-?_88Sd2~s!WwHP<}$?(>GTVS)xKP(vcKJGb%^ zBt)#EXI(Eu>a-FS(yau)5#G-M1nbjv+_JDi)>MV52`EJeH}COQRGUZDenK+up-VBElD$Xq zDC&|Hsm&cLHi1h`vNu>ResvqXok zJ=MaQm_jWf0o>SiwFNAgbvAVBWm6^AoD+z%U;Jg4|0ib9Y7>s+d_zfa+s zh0=pO8gx8Z57NjRh-jDfIXK$qljS5CWI9^SWN7=P@|ikie<%q4323Z2*Zx$^@e}p& zlyB-|nNp=p{X&F2>uA&}n!(lMx0A)DAgSOO+@IDj)Q0T2{`2f&i=OOq=%Qt-Ua z(B#T0%x2KDpi8N5Gs|ala8P>jImkGAc@#-4K3DRD(Z`)CIY-rzQOVcJ zcNimEC2zi%ihj{q(H4@#9Fb9}xnj?qLK|!$>Y3Z(khuC<>nCBmN+W;CmAP` zmRd!*U~1g=L?w&7JV75D?t{s5MIDQ938hAQbh9}i`gk+?*g_v~;59ekYYu25nspSi zJaHGFL?O4IN+GwOOd+?QOd+?QOd+?QOd+?QOd+?QTp@!!R}jE}fq~69^8)5ZoiL*j zDUVVssx#uj7KJ=2HT$0@C}eHwxoLfjibEfxi%+7DH=s|^$Bh9WZ~s5&<138tq2#c) zeTTIhK1%%vhe2IGBixaJoI($ut@LoSqlfop>0x#DR`hVOify2?ET2UUS33+^nyrTM zF0*>^F-ZUYgd!rZsRm@(y;y7VUQ)@d#35X_f-M zF-rlLrWNpQ-YRC{F!Zme-XWrqi%+6|598Vwg^O81E?$O-Xncqvl*?ouxIE}4 z`~(YPRH|UUv(DC&X9Zz>vsHq5+lhTlhiN`*^ek!)`c^u6w?ygP+}z4Z2%`U>cWd7N zzxD2L^03e){1M%Y;=K~QMe*Xs@M0t}+fJf+tKU?bm;Iq3qJ4*j%wr*R$^=<>-kH|J zHXG`MdzDs)i+&zVdOi%gn?k-;Eq1$1;AFp-`CNuliOV44DlVFry1{L(mwq2dtQ`m@ z%l8|Jauvy}1r9NA#N)L_*JJiS)gT&CH=DGC>|b|Nin33jl%j;gdb70R?T%J_lJ4Pb z_ZUO5WVOV&4w3NbGob{B4H4Bi%({KC zJ5=8G8|i->hv_|1w=C+dPdTuz)M8VoTAU>DbSJ3B^f?bp&Jn2-9jM8(-FCIYkYrXm~42a(OMEH*N z>Y0Med$i%`#j{9i@v!8s=D>_BF+am2H}LQ`-BTe>9yk9Jt1W!gXxx!go$_2`ic=Obnl{eninS9Gdd1$U$Z}~o>u9oKtf#Xk zBx`@NGL;79w7ta0|Lp>(ea35y{Ey(PB|nxN3tAcKdXioKpRD~XPFloSF|5hON(gfryVlGNh& zlNrrZBw;6@;uFaDpCyl#v%GQ*vNDcc3 zohB-Cs^@ItkN0bJowb+B?pl2IKbMT zqBe`(FpCz+2o*6x1;l!&sVv*rzxY7*9G1xpla@p$s-X*!y zp??bPBLreNUq4S>akL-~BS`OcbFb<>R1g9@PtGp>P^!Pv!=@!(7n;PnZDT8bL?F|c z?5}^X6V(=LG^n0*e?9S!tj@l))amR=_t&o{CtO{q_ScJL#8@@4N}B=p_8l^5l9fA( zVY2~$126|wQMN|n6ch)*8g3uEZFPHXjr`WH$n(wp_AW6OG(XHpy8Pr1#Bny8s{N@) za;n1}L0^kD?>buTdqU=Rkt=?4r*q?yUHcjIan_%T zYwjR#dS4=$H}_n0@n9(K*d3J*k+%N$7pVRfv`xo+1><=a{h~J>?IAh_(r-D3JD3oVYCE;S>j#`KJ2d5r{x`7> z%G#m%JDIJif6dVUA0)N-4^HbAr+X)#J5OyBXIm1nW9?iWR03%-vAW;oUHTVmzm+&J z1dkJ;b+y!-?EU8h{auSMhLFw@*dmnHdYMn`rPlvV2J=`iZJwnTSOG?SSuiz%5pR;P z&?g)6o4AmSZ{}{627Q{7ZY9*X7b;btgc{J^F97A4x72xVgn!|Kx==D1Su6!tshc>&@&9bD0-@cJ*kt^^V^;Dobl6>(X$$; z&@<{h|06xm1R)bHly99@{{f#AU7Lii5_yrPxwhbUe6nBRpU(MGR)k%` z1~|KYB}Qr#n`g^s_BRGL$$s@t&aUp1b7|}HA$xG(hp=*qb;T>fWkhf6k{u@5E#J?- z9P8*7g6*@kkxMxR!(6L?*x@Ab7$ zC&F5ysV|pPV;TM&F8tY7LaCqit;;}FEOmxWb(TG9;j>V<=%qhH^;4ebeK-qMUGUv~dm9LY|ax5>=+kO zenu9S>;J8-kurYQr;T5OJlFy>-{-l6+m$L(hDOJY5?)NWKM6`=uK}lz{ ziv4?9;dDR&rx`_Qy|0^*l#r~RuDVjAa(t^$T1~k|_)FhTIQSp(?KS!KC`xN3;hQX^TE z5E?$BP)Bzg*nUqo==m_XoCA*?Vi^Czi*Dlmo7(3J;CHPocQtG108*9I%qjN&x26D)m&Ee^< zwP$qC%|vPO*E@PVNBSrC=%|5DblLNALPq$QdeYS>W^Jt7-L^#J;8=WTg^5jCeVhu) z8ho1mhKILkQQO0++;CsPMb)XXp2!{5=2~I%4bd+`VJ?IEch2yk<1RcJ3b*1Hd>ZEI zn0;nj<-*~muFkWuBwQ z+-|uz2}_~wm1^_jwsq>z$C|Q+ws%$g`gpn-FqayQTXMOpC*|oSYgWTtC#(OlYRQ^! z_}0xF!1-@cv=)jsJ0NT|?zi6DhxZ3z3vp=Ol%~gW4(t<=g1mXQQ?T~r0HBxwL;J=v z2g4pcKbZ0tG0igaQT&{ZZr_BXbzkw+5w3q1>)KhbH!sxD&11EC`I(AP>IQrPBRHBn z(Gy6GVLid2n-N92_6%oGn-zOCI&Nw9vf;1Q(A{rxmT+pHXXawuv?=yl;ZOB_fiE($ zd3OL8_L}EBVK22N_Mhg+0Sw0;;;i66)5hu10O8tfX+^H#z7z<)fJ6?wq^2KRyTWG8 zxqQQ8EuS-=gw2}$W?$hK;VM&O3s`u~Bb(MPb*$Ez=fhk4^A!7;IWmTG zWPPwmYRS-Vxarp%yE%&o0y>_S3f2UE#hHVk27;zWpULutfK)UY5Eo_e-C)ipJpr&r#<4@IGcHR%xcuF4X?H!YEs*TCt4&mQlv$@W&@< zB!J1Mwh1W>&H*X6b}Qu&CsoE;D^#}fKNa`Oc_Wd^blRzb(t@Oe20i_M!eMWOLulNh zw=ra{46faS0b9ZuZS9|HjQ+N&Vl`y^4}I9IC61$OyLqx)&QK)|7~y5LSC*|H9@w)0 zx$M^GZWb~J-L2JFolZjM6!_??JgbE6A$NoC{kqj^EVv@B>wW@t1T{I4-M)L-x0uSV zz|@k&rcfA>)&vRQzq#9`=C*Gsc@i?0Lj_r-va4lWRj^bl54zuF&8pSQPB5p$Quve` zBI`l~zBc}w7?%@+M;q_@tt23IXQSJdeen;*8)7mk%;MlbAv$;;C7u|H!PWYXNS z!PI8I>pv~fjDhHvVWn36Z%`Y%6rC`63x9j^bqPxlE&eVtA=b{7+7i~}ER!D|F6)vw zvYIcwB5z`T-@d)Sy3=MumT^6qYQ>`d3ysOL=c%?|chSRHWdApx($}Hg|EjDymiA)R z;ql7-E!=;k3Z7!Ufny=<)3}Rl7-<;ig=Qmm&-_<~_`dhF`ah_bceHv5+`s@Co!k2! z8UWuvZNr+LpM~t3RATR8TBqf&5kAIJ1jfLEdy9q&X~9{A6vBksYF?RT(y^BC!juPzAJkd9|ps#2|j8ff_xRzUbZg?IkMcd z`gYBqP_n3{+AQKOSwTn6+p~qiO*SUif1s8>v)*Or$w+L9Oz@{3;D(I6M{)+Zs>8c* z;msV2xv0Z0vjAo6=wNtQ-1NMjUh#b?wgdOjrpEoRn26ZfoTldBt|#f4YmPW-_|`{v zck6@rlA~AQ{P~k`RmdD%K;70KAip!Ry-7yrFL^^ob@gkkXMO~)t8qzIe(5IbpkFdl zOS<}(jy_fQ<_68L)M>vl+?9ex)Z*fAPTh~>c;E7z=62!sH8?KCnuP|d$Yak^G>`>~*q3`6 zRF}3(AcHv5)NKu=nU|8xOR>Cg`vxIb>fb8M%~ieT&axE{;Tt6ABb)WaI1h0}IfF-_ zyDRz~d18>pw-Qw0O&x0e)R!QCV3g8Qok>7WL{!@IiOF>j(|B9_dI%kFCZ2N}* z^Q~!VpbCR*d)8Us+)^DTrj|1i)#1I|rld}qu>mV%DJosvt>JJrN29Bl=7cMlvQEh` z^e!CgvXWsNKiqDFmr{vbwNiT)YHq1C&$0+UZ>I6G1BqR%*1i@f^gkxg+OWbS7%upG zSp#KPhTJymu|U!j4`7LLd6kY|1|&x(3s#Iy6sY^mA{UrVXllqP8JN1G(|1XQdV1ET z=f+#i18x;K;`_Spw_S5U{m?^}J)q93V#8(nJNFB5U%hEOUv%U!H>^c%b<9 zjAX8_B6BcY#QgqwW`4_dSP3?y{OHIu&J*27O;zAS)NBxeV|u*YCLrT-ec1Cj*DNHs zqoUSJR7P`k%JY-5hK0~|4m+LhWWfS1AJ>9dXe^?a)$MRLN>ua6E_N-k4Ujs7K*!ZER+}@2SohKsYH+Sl`Gu+ltpcVM)RVqN zr7^3dns}6~um*RQxsLXx>p}?Rhrc?uZgr3R+x# zG*G(3*}gR#`-Za9u*s`fM;%0gmK_r!FO)oTDSO9K0{8?!a6&trd#Tdv@lg0Q2~WlzpLHHg8g#E7$y#UuX9 zAF;x?0Bc{Oll{JpvpJ+)yZZ+>iIfHMDwbqSZKmruIa9+)Q zN4PR0#n9v+)V65J`y!&gjbBK0I+UDMVjok&LPk{VEL(OhrItHg(OP-l=ZfAX&uOm6 z%OVuUShqfdK>rmyc-B$)x0;lFsnX1~aM(d>7=Vx*f3ow^H8ZZWiY>2XbS^tmxX&uF z&J@rsD%WhUVdan%VRfI7we6?UT7|XiX$N?x0PP<#6-1!Ia1t~;q?&aZC6v&TmkE+f zUdCiz4D}*iQ$qDl_3tz-aUUq#^Az4pn3K#FnJV^~WN?V~^(!=gb7yk9B;pO3AglT6IaY zh&q+l>YwK|)_$oLKaV`I_S>|?lR!{mOK#)I_4Pjz8c}_Jr~0UhJL-~PcskJY6pWlr zAvh&SetQa}6gi+mwADVfV-LjIAB@~z8;rG2*WwMTvW4g(^G;2<@vi zLq8y@cJQ&EB1=KK{#biWbi0%KevaOZLf2jkXEbzy(;JqFAjRKFP;eK2eiPz037CtKJ=ro1iSMx%&_Y_Sv9Z9NoRi5V*F$xcb35faC7LRCOJ})ar`&~3xhf-h znS}8=P5zwmN1Q23EXZ{|s%YQNq9snzRpjE%iBg^Gt%BSP!!fXaD(7#1hBXaVC*Cxb zSP@EIhuFIxS46m^IysdP_=&~U$+{A)elnG@J*co%YFR>d^Hp^hKPh32q@+$ctm@c1 zocI2RT+_4HFxw6HVZ-;)jD9jcqNhZa#5_;3b4eccv1#TG(Yn4b>sq)+Fmv5R?ZA}I zEkorAj|?0;81OFvgt@`oaRC>`L;(9j?itz}wKK?JG02^D8RX{C*DmB>5Xz5x%T=8$ z;F_7k;!|<24Ek2j7=pelS9nz?Z~GeRmUHjiIe5d6w_Nq`oq$>Nb5)Z3hOcQRm#MY5 zeTVA)!t^T660ZVyFVuC+86ILFHu#b3+ zP;w*|!o4LdHI?w!>L*}Oh$`eaSQ^vo7xdi|IFMTX=6Zu5Rp0U%#cDisUwJ$=-mUr7 z1&MO!(=Jg{0pI$%_hd(@{tRWDd>S-A;qJn=&}CPM&N0xgL(tSSoEV8dL&h>DBN;(tBS4nx!Hd52tje#3FHyRjtiJeYgH`^owU!n5xQYG_* z>l8`@X4}k*Ar? zt8+i|M8C$no%^qxk(K3Mi<{QD4KBJ)uq-j#2U_eJ{8@a00pD&ykj!JYhLR#|llnPO zQNg^MkTs_n+~`Cxw~Q{Mo#8X@ud@EY0P)!{ufvXPRP2>_vvUTnz&({_D;aL1M4d@z zQiVSau@p>C2m1^0S4h)}U$Dh2S4zg+<83pu;rW*JxC6IaPbgAst;&2ls6JKRP7pyC zBfX-&rWwh;r4z$T!B84fI5=XXC<7ATsdIGHtw5R5H&7b>$X@@*B@&KQnW_|IAa%QY zWNO$2!SH7?J)B#0f0WlXJ%ZTL#EJLyT9fFin%_ulVJD0Y@&zFWlRHzCo8@F?sd+6$ zD^$^McNHymioPR7Sx9mt7F=8?wNydn{i1apB>IzsQA}%Helkndv>EcGk>KR8AaSok zVz$fxOxS9ZXn3aPMJo5*Nr&@;*q5a;@#Mv^FOz7bWHq{zWtL$w`;&pgA{DwRpoPA;UMx!T)#GN0B`F4(87S( z&b6W|bPmv9UmqBrzVW5T&mP|5NfI{0KG`9)x8LV^(wrFis07e%lsAv9oG{rbnb~Z< zds|IFJI<-iAIb%W|Kk65xMXw(|I4{gb>k>UIX?vG+&C)dP?{t-pzjFYKF;Lfxae1s zuPL2RN`JUP^4&I~kg(cF9(qzX4!PlR2eMT6bwq9vk;Ps-7pbnt&$c&cmJ=tNkg;-c zzEbBBi*lj|VUKeU zNWv3L&R&-9ml!Yi2SoQLh=uaJDZL1W^C=K=AJWYVZV7x`JQm?mN6Ftvm@)D$Q|6|l z9Jvdaec!BmMmjZw8~2Cr?(eE*Hv?{Aym#YLU~|QDuJi-_JE1)^u)Rx5Fi%;!oS-M1 z?2euY4aNC{b9Ckf-Sq_XkGoDB>kFYEbD;>G$qX>U<dZh~m8-rhb zgXmmA!lk_p?0+Y+;(L>xCot6`cXOo?H=G~GeDYoNU7U(yy)(>&Np6IOT5FNvc*$*8S^Ak6L0@r82Pp82M9i;Qj40t(UH7Uvt zr2C&erxf24DZyDU%l=68#&$7PSG*{f3DDMHN;{y}0A-;zUZQhU-WM`?=XK`&X$CY9 z5a%VKZzz0Rxg2$_F0%0XEfxRUdtLrUaYuFcAAVrP=!4ALSCEG6A&yR!?{e`Mlz2Az zn?t~g*}}Xm2oge%SI|6MP0idR?fe2lc&TtC9>W__1?A%C#A_Hb3%u3t&0K)Wk*}4D zsG0qNLm~H;uJt2q!O!n;B#9qqWrP1(5e?yv(dpw`)jf-jng_X7gs-8V=X2ml-Qz=! zkb57u`Lu_64h*@!^kYuH20tDXL=iXesaLiEJYM;|*aAN?Kt&93BCw*Yfp7;fUj|}r zfrYxcRvZxK8l6L-Z0*CIn?@%G?Go0!q358Dy18HO5t0+5>Bh-$eb4d@!i1bl=PL9m za!ci7s&CD7BvpQzQ`c6fuD+W_C;B>}Za>q_eNr23La0oIV#HO8i?y#Z;;5MVSIfNu zYnZ??!@>uud-mNc{;a2r+`f?XOWn680;e9b`(l!vumGZ*a!@#SrP@CZg>C2Z3T1+X zKjzYLhG-qeNGS$xU#>1AToVDuPftD)@92P(YVc9m#WH9jjyYa$v1KN&L`ZxMlqugA z@)jr7aC2Bkgr7rY-HBPPp4P>q@UJ~*96Unh(F^=$JHMoJ(tsSf8;oep=qiJ&dh;co zuvn{qn)*2coM7IkFHV6tjWJfwj3$yKOUtnk2_Q?T#%x zKjgVO>e;7FShG(n%o}!_SZ9~FYV(d@-2v%$C6GmDLm1S9ti&`d-V{d9N$=`9=ZCRdVZg-r=nXuS9R7?+`S(84RsLS zqQ&H%D?#|3?Axw4!Hvqeu6Aly?z3vS?Rv|c3}z(;zs?f>6**-!4pJEIGxIV1rRNpg z&|Xs~?wRg4w8Ka88xQp{X+WIS_@Wf*2%R2OO`uB9i2{?`V5XCc*=`V9$lNL6GC}!4 z4Lo$~84X$)qLe8wrRo&Ehl^W8Mgf2`{m3Et#n-Z33;n)bksGaN0?uUN^rNr?n+}#lD#QtPFTs9&$l` zi9G^CDe3V-)C|R0Ox;BRp*Rbx`ULgK{v*=20uKq5hJ@Z~6tHI%$r%m9?4&!lqNssN zj{pJoQIsQIGp%0TiAl|+;@rm%No_3HxU^ly$vSdf_o4BphbHGFL&HzqeRF7>QQ0Fy zQ0O@q^&ZY`EXlyLJE?GX8JM7sN9FAj$_+o;_Sp9XzQyAf1 zzC*PaaG#=Co$SliglD9_k5#?VywIGTa!G0EDyFP&@9ecfp|P*2?&WW?N!R#g#{bdI z@sB*H%+b%;*}r@JvD(Jula&e z&bxnef1KTH|6cu&yx~l#P~z`W5mRYr3i^aIrTwbNU~K|TGT>0qCBL~0HYm{IXNoWk z6NAhFWNusLDC{bzShFyInQZ>MY*S|Z^jPMHdbyIGorCMzsVri%*)Bfh*S_FRjv>MH zZ}g5x|48qM&L8P*;IsOX-tHiEc}{nbx;!TfM6fMo)sOUMp#Jo)^zu}9^!VM}3X=Ju zUb8Ph9K#O+xmg&$uPwM*raKF3I(G16f#>R%$41lJvW7Xcy_!pl|C<3{ zC_gMljhOeUHMvZ|`E4=zRWXpM`_yl4#j}xmv~cxKbG`e37FZ^xRXUWTVRY)YK3E=j zrarF?8>#C#w6MxKuyBO)Bzite4T)maV@HW7mqiD^nQp8U7emR=$uDxwCjiKqQtty5+amF8;hyt_d;XX1GSq+POZrBI%9nVza%Zxy{u<`6 zJt~`@upR2(5(4qV*m7!?8+`9{k0*9bS=+kr!?74K%& zrb0_yTx;2OhJ2^V+Y~S`bKrxav>s@>6V?RYK#7r24pUQoZtgqTH+yy>kxK-)_E;r-eMh9(cW_p zJrO3F=iAJ}e9V#F``_sATH^XdcP+k@uDlK3b6y#mEKzUkcq7yMlBrZOUEG;zWoM>W zB~z^OzD@mIuCdXpd99S!Xov~@IVCaZqP^rAU&fUULnC>S#SdmNRGXrEZxs{;o~-my z$co5^Smn`=slaH-J5ws+FM{8wvK^o`Rx-5YZIBH7wf({=AL}6etcO-F_mN<+?#Xp6 zbJf;<-#omm%3a%d_`+Dzwe!d1uyj0JEZzZ0oE!DWcku}$8jI0rQM1rF$I{y*a01w5+iYW&V5Ga=EWC)%WU~ERBl$e zh&n?+K;?eP_gnj%nOxNV-}n2!-}CW2WcJy6?fcqmt-bczYip5emz?hsz6_&8yt&{3 z4!n}fQ}Nr?_#b!8uaGB9=dqLKVv3fst>ikh_o@SEzDVRh=wy zwq8?OR2bTy905i!o=%HfJxef8rB@8W%ET@f^0Vn$^mB7`BO7+R}9C%LnAg>-GpSgYCLc6{FRb0~aig z%heE8tM<1zKoer2p=t4(Lh9OM?J-78YJN_#m>UxZXq(W3?s40Vg@+-pt*N>gHzsJk zOwfT>rE%dyGqp&F9ai`d_A@beTAF%8J3^qlj2SZdJQ6j7Oyw_4X>G zs&5(7wdiTRAiRAcz^wg@X7_lw`a;~n(+s^Jn)|kc{n0Lu%tNUbeYO{91JS*P9|-ky zO{+gmZd)h*jI^7ibIE@GMlhr2oXymtSe{b;547k5f)uHxbz@%?VOY=W)q=D8LNGP% zUJxJm?J(H1T^3BLmcRCen5IP=dqLdS7vj5krSAoCSzic7Vs0;p6McuZwCWalLRt)T z5)UA3JM^4Ui0osrfcEO)cx~z1;RCMlp*zZP$T;|5Ierf#Th%5cIiR7w1A4m_5iSPj z_{KjtgNg2V_4a@1X#vgu*79LHyKgq10>hLRq{)I|sk*pL!^4q5+MM0C${3*ti zu}uzh{HY(Q@3;qbC}X{q5)di&3z%DKTq_6u=+wkf2w*xT+^AfOw#aP z5Kjrh_G~E-8W1wdg)&K(aQ)ihvn+z_zl)8+w&htpaKFGF|ET~9>VJHvBx`uGdjVC7_iK{ zJk12ebb%O>n)h;nxZ8$ku^}o1;`|gue}M?t5Wg1)+I~T@?N_Mw=AI#0hNiMCAq)IF zbaXKO#H6KUIgKo|;x?y*IErJrqZKVd9gt{d{deQd&nc+KSfkL%!8|wTw$RD)1G{~^ z7x;6%!692(G}HrP=A0gdDUNbo&r}YEdoVzzbrh-G99304)+p!0%&(5XmbmhO-Ioh# zylPdW%htgq+)^UFJjL!-)zZXg^otmgKjKGGBg#FO2NM6bW8(=sMvGnnIZ3oQu^q$? zKLDhXMzqL13|8VwS+5km)X5TgQbsIlkE4?3BL9=Kt$rT)cF1-86P7a_!?(E z9!bVm3A~Yl|7o)PBlh@S=agTWjBk|jEw^K7&%|W>LL2@(2mX>|`2|wGJg;Vt@0rQ? z<2L-sc1k=W8UGOxi4J?zDZdk)ge?BZS{wceQdqWXLo6Z(kIdCNMKn5~(T}9cr<~Y7 zCu5%{c1c2-DdYY~GCCx{GwfKI|784S#4}#kIq;Rq_%wkpPr*-g;v++e0$$Kk%D*HT zUqD2{O2MC*j6ZJU*EN!@Tc51e_ba_D^pkLWG#ifjMOyuMmmRJisMTMe-n2C{ymNGR z8{v#(_;Yr$TuL3EE|CJfb2Lc`#+`&A$o8ol z4Q93a@08aZXV*3j8W-L@I(+ZiG!@5N%sqSYI;r97kQqs(w(G%d?rtPTsG*6_FuW_+eNwg$PRF_%9~}#%8Ar*@VM{1S+N-ml zZ9i0XNIZ|MKaQ5t*!tr6olbuD1|AiC7f-!du{xI+@tQ!jsr#(7ycJ*C6 zay|EU!(1%}Pg*^uQF@zRb0~XOn_*%Rw!%2LnQj}JA4A2=;f*W1*Q<`d5MWMk3~xOV zZp>Jz)$?wzYNr&X+kHX1k&^e!)077ekgH zeoDNYY@I*r?XMBdnH(I4a1c1MkP70RoI}RP@yEhvOw~!YIx~~P8hkV@zDvs3*<*aM zY&ypMGrF_?n)rP3Au21c>?>4DVXWQ3TRCYWQt@gq~TR zXIciMKsL%2VFuv%%ANgf^iNv!eY)RJOEjv?c|b`pzM3L!{q-$GX^}$!Q7>0?E+?h) zo3ef=RVPtw)yCCwXe}nNC4N*^LJ)2B+qI(UD-_Ls=qkX^2Atafq#ehbYE`|US^Lgl z?B%QT5U7LRy)*xUbib=vHU|gdp;Q|-6BC+)ihUb_&blOiFb-S4PdhEotHjHd#TIw} zlUm$)scUbF{!!%5Nss>?*u<#}j11r+KH#zPI8*c{C+-pAP+(HtT~eO8x#}fOU0!Oq zLT2eamY$7&N&9CmF5AaA@e3dn-SWBG=yxkRhpD5pgN#X_@>4Z|_Onq`^VzDwX;;K< zFO#?Nv_+yX4qE4~C6X-u+7U%nUW|L1wz^#{{^)MKHdN%AfBwW+eyPs&dU0ZD&o91- zxwY;xIzA0IWtG=nEN{_u8qwXMqKUE6Qdt4E(DrHkROujx9?CN)RozBa!nl8Ni{Kar zCwk7o? z@rX?PR{EH{bEMadM)o+H(rFa8cj}nRD`Gk7kV#>XP2(rVLb-?`%#)9^BXcEZO=9h5 zJgE+uuoGAUE>=ObZ%$Kw8Ra$8aOda)D+@#CO|VMeFaKOmGqSyAt5`>}{wras+eeFa zq@)D1^WiBj*L!%H5f@7@>2k{CdfSg{3Y_jFT`Q<7*)oU>*}WMukPMkUSYHt1b_S6V zW3B!Uf&`b7Syf^*HE1nC|u!)4%FUXD-POhNc4Ld{WTfT4q{ zy^x6+&tkD#HJgfChBtO>*UdKbNXK?Wo1Lz~n|;|UkZS&J(JeLu;AXHP|&HFBsf7HrL2eA}6SJ zGDp5XQ^`l|T6BP{a#}8}{ysITR$oWJnRHt?I!uK0*W6dUS2w#lw#(UUo4L8;h`CSi z_+^3d(1mLvo*fC{Y~Ny))Qq|eQw4?OTI6|#-z;b#k+btt z^w^lD($TXyF_hm;PrpM^Knnxm|xi87I$ zqr*qlu4alX1H#qQQ=5eklbeM%n?B6UUI~6^5wX=$cQ{6p8{0!xGuPT5dXO(@x)vEF zm6$h^bi{9B{3UPU9*oan$84CK{`6WQHa=+eQ*8O4>XHAc=}jg7tJ+oALnKKmY|H;& z(K7Y4Pet)Qx}cDJe*W;T1xJMlm21Cg#jfOaH%;f2r@->R{Mr78=cFJP=K=?}8`$?Z zC2(Wp4uEcWr`pO3t}O)ja{2RQ-~>k8&2q`owISd=tVIrj2Mu|yBE!+XlbtJBWY89ds8*tJ{~)9RQ)9cOExcK+ zV#KN2mF~YZW{>=pZ}qs@>}v0ETxdsnJ$?LPzE8J=Na?=j3fwr?4gl z6urvuK%rJ8J3S&;8GMY}&XeE8Zt(_Jg{z(LJWPmhdMs^>Iii;2GF&{W6e7#q<4kw0 zY{^{jaew#s%Gj`#5js%Ce$!Xfzg1c)rs6%Hc@PW+U+;qhBe4hv7EC=r3>;Wtu>A!G z?(qeMxf%}qpD}##S;vzccnBdi)EIj5x{hEO6Oi~j(Xu8S#=IhtMg-$sm}ruv&dUml zU(_mou~(cO!mdw-j)+K+;@8Nu(MBu;FOu%*4hxV4k>cGg9Y=grnAewq_vGJ&T0L)j zT&dXi`;uAM_rD|{>>HJYuy2v?yV-Y#&s^7oe{b%|zty`OTJ(2h5GMX@zjvP&`!-7f zCLYGuA7-d;zzLus!ohLg<$@!E6cI9DK85lE=Bz~U`a$@Kx`pP1Zjik-&9Qm%;2!e1 z@MXW*X7lBaBwyYte7PmXmp3PJRTkD+N?&o5aaQAbB6V+HtCRC_SySC>>3_10u%?s8 z4b46FohC6?7QZ*IUM+W*_+m{J_Fhwq&SFhfSl1Wg@Yr4`B7JRU9Gn@%B~ViO3U6_Q zuNpN@O0Tp=>6Ok=iwF_6NX?;6nQ9J&+cIceH4?SbYHjfzaw5MJH`zj1hxu8bNql~Z z$X|Kn^KO_Mgv2b-VgvXxD&Gmlf-#zU(^}>+TW;`RH0yiBa27!jgvOS zx+#v}bXI)pRXxa#9}s*4$v|f%o@a7xI)e!4D_*Ue2YX-$aY}Uan}^YYq0f2)C6q6F zvtrH8{+vOx<+n#{JW+H6lje)mJ?oxyMEaH(M2iKa4{4R%^Wq)!BH^YO3~n(97Ye)n zN&zR7sN%3e%ysSf`c!;>JHAljv*Ler;R)bh4#3~jlG6lA|8CP+lIG2MdANfB!j&8k3OY9v9{%zJapJT0%7>oas3cOMDp)LN zk#i`<5EpbG%l_Dd7T>}*qaVG1s1EXydNC=V5@)~_(98>0kh1m?16NRW*k5pk9$!lC zbYi~LhUi>Dj$)k29&&`wg5h2If<1v+S96p84O?VyQqp_uDn#}+V9;UB=O|y`0Dn;#>aBl7@=O@u8e*`1+E{q`teg2UhR_min4*_ zG4&?sRTURxa*7ZHMh9a7tXO%vrIxE8c3sFm-j=FAvD*L{(6K%dKAaiiq9(UXq^6Fo zlFwFU<&zItnkyqpvz1@el6I1Ow$N*oY3#`C!x*evhu(n^fUSPS{~qCZ{zQn{7Mapf zGLg**2hURaMWgalN5yC`&;{hd9=*uc;cAPTh5ch_kD9qGTgqECfubBm?v586MQ#_B zC~D*Rh$t;0PZ8rKVOa<*uROwAR1wR;k~CB_Ol_}PGVQ0?mu>*yeoX7+foErXz-R82d!ouDnaBV3V%**=)2BslqbA(;%>FLD&Y%E! zQ4z||)%A5od)$bdhDX9^N`XGmnNY_eB#`8_X@P-GE_w8oN*G0ut>J?_mEEIiKah;7g?khVLe`s#&$B z3P;-S`OJ5*O&*|H*)n?g?w2yvyrAY)fYJ`^>O&K`!ho(?`72ee>Qr4*)j3^rYH_+I zjit8GsnWu=uHBt$dyGFky@gvlC$zd5pr_ns4Q4QBz7p_7i%udgd^A&T4rPVPbnn0C z<>Ox!IM3KHbS&j=(J zMcebTD7a`twIg5RLt$f(CWsrZLTO~4(f+9sdu^8Bm0_0E0hD+ac|^^5r^|J~+@H9C zAyFOmncK|Pj!%4EOm{vfQZ(51Py~yH#U^%jY~_eE?n>+>Es5_zYh*xb4#)EocOj8* zL@IZLULe?Txlo3`d?X646u(K)2azYH;mZm97pE!8sgqn~b8heC_yl%9g+ z8nEnrba}>-7tu);ZOsJ-cS^A7(4gWKhSkrg{LJW9;-HzaJWo7F3)^>!mvCVQu|LIy z{0Obz(t{2y04iQOj(*Fwe&}uTId6P&uq*k*>$Jcl{KR}0?h*<#La5IqHSUVT+LUKf zOU7mKzqf&Xv5GGHOi?CdlHRdRX~+DsvMo=ZG>h$5kn!U6x48epE)aAG zN~jUq;&X|E0P%PlW2t-JpQj1(hU4inzIifNy-3ico+L=TIpy^rL6edsXp%#MCOIT% zlDNz=J%8(vmAPsfvUCp;q~wksbVyX(ed$n--X=DYo}#ac9zk4upy)7&(f}b!S@EbZ zxlT&{M4cde79?nZ>?-ix0=%sohEAO<=?cGjauU+CRINp`?DJE2>2j)eNK?XW z>G+uIqa(EFX4T+s+BB&LZQ4MZ%&QtIb&-;*AJ0%W>O1A)Qtj#>CW+V4I@=^FYa1b- z5UUegg;@30$EyrI)T8~a>CWQ^-&c7t0o4k79*u?PWNRHet;PmRaQJ<7dgXWe{tk#;eIDv13Ob-XL@_ zyuzbI;%#^&Ha7%#7pVdh0FDi09FYsLy{B0`TYRXBd%bc|nG0_3;cqr2d5>vvk5a

      !OBct=b3j=g=-^Q8Ij6)=0_S6 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%0ALGV)BKI10+*qY^E)=a(eXni10b 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 Mil_E dretog -o") - else SWINT('n',nswitch,n,">E dretog -n") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (sswitch && gswitch) - gt_abort(">E dretog: -s and -g are incompatible\n"); - - if (labelorg < 0) gt_abort(">E dretog: negative origin forbidden\n"); - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!infilename || infilename[0] == '-') - { - infilename = "stdin"; - infile = stdin; - } - else if ((infile = fopen(infilename,"r")) == NULL) - { - fprintf(stderr,"Can't open input file %s\n",infilename); - gt_abort(NULL); - } - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (sswitch) outcode = SPARSE6; - else outcode = GRAPH6; - - if (hswitch) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - -#if HAVE_ISATTY - prompt = isatty(fileno(infile)) && isatty(fileno(outfile)); -#else - prompt = (infile == stdin); -#endif - - /* perform scanning required */ - - labelorg = initorg; - nin = 0; - - while (fscanf(infile,"%1s",s) == 1) - { - if (s[0] == 'n') - { - if (fscanf(infile,"%1s",s) == 1 && s[0] != '=') - ungetc(s[0],infile); - if (fscanf(infile,"%d",&n) != 1) - { - fprintf(stderr,">E dretog: invalid n=# command\n"); - gt_abort(NULL); - } - if (n <= 0) - gt_abort(">E dretog: n can't be <= 0\n"); - } - else if (s[0] == '"') - { - while ((c = getc(infile)) != '"' && c != EOF) {} - } - else if (s[0] == '!') - { - while ((c = getc(infile)) != '\n' && c != EOF) {} - } - else if (s[0] == '$') - { - if ((s[0] = getc(infile)) == '$') - labelorg = initorg; - else - { - if (s[0] != '=') ungetc(s[0],infile); - if (fscanf(infile,"%d",&labelorg) != 1) - gt_abort(">E dretog: invalid $=# command\n"); - if (labelorg < 0) - gt_abort(">E dretog: must have labelorg >= 0\n"); - } - } - else if (s[0] == 'g' || (s[0] >= '0' && s[0] <= '9') - || s[0] == ';') - { - if (n < 0) - gt_abort(">E dretog: g command before n is defined\n"); - if (s[0] != 'g') ungetc(s[0],infile); - m = (n + WORDSIZE - 1) / WORDSIZE; -#if MAXN - if (n > MAXN || m > MAXM) - gt_abort(">E n or m too big\n"); -#else - DYNALLOC2(graph,g,g_sz,n,m,"dretog"); -#endif - ++nin; - readgraph(infile,g,FALSE,prompt,FALSE,78,m,n); - if (outcode == SPARSE6) writes6(outfile,g,m,n); - else writeg6(outfile,g,m,n); - } - else if (s[0] == 'q') - exit(0); - else - { - fprintf(stderr,">E dretog: invalid command \"%c\"\n",s[0]); - gt_abort(NULL); - } - } - - if (!qswitch) - fprintf(stderr,">Z " COUNTER_FMT - " graphs converted from %s to %s\n", - nin,infilename,outfilename); - - exit(0); -} diff --git a/tools/nauty25r9_unix/formats.txt b/tools/nauty25r9_unix/formats.txt deleted file mode 100644 index 0677027..0000000 --- a/tools/nauty25r9_unix/formats.txt +++ /dev/null @@ -1,164 +0,0 @@ -Description of graph6 and sparse6 encodings -------------------------------------------- -Brendan McKay, bdm@cs.anu.edu.au -Updated May 2005. - -General principles: - - All numbers in this description are in decimal unless obviously - in binary. - - Apart from the header, there is one object per line. Apart from the - header and the end-of-line characters, all bytes have a value in the - range 63-126 (which are all printable ASCII characters). A file of - objects is a text file, so whatever end-of-line convention is locally - used is fine). - -Bit vectors: - - A bit vector x of length k can be represented as follows. - Example: 1000101100011100 - - (1) Pad on the right with 0 to make the length a multiple of 6. - Example: 100010110001110000 - - (2) Split into groups of 6 bits each. - Example: 100010 110001 110000 - - (3) Add 63 to each group, considering them as bigendian binary numbers. - Example: 97 112 111 - - These values are then stored one per byte. - So, the number of bytes is ceiling(k/6). - - Let R(x) denote this representation of x as a string of bytes. - -Small nonnegative integers: - - Let n be an integer in the range 0-68719476735 (2^36-1). - - If 0 <= n <= 62, define N(n) to be the single byte n+63. - If 63 <= n <= 258047, define N(n) to be the four bytes - 126 R(x), where x is the bigendian 18-bit binary form of n. - If 258048 <= n <= 68719476735, define N(n) to be the eight bytes - 126 126 R(x), where x is the bigendian 36-bit binary form of n. - - Examples: N(30) = 93 - N(12345) = N(000011 000000 111001) = 126 66 63 120 - N(460175067) = N(000000 011011 011011 011011 011011 011011) - = 126 126 63 90 90 90 90 90 - - -Description of graph6 format. ----------------------------- - -Data type: - simple undirected graphs of order 0 to 68719476735. - -Optional Header: - >>graph6<< (without end of line!) - -File name extension: - .g6 - -One graph: - Suppose G has n vertices. Write the upper triangle of the adjacency - matrix of G as a bit vector x of length n(n-1)/2, using the ordering - (0,1),(0,2),(1,2),(0,3),(1,3),(2,3),...,(n-1,n). - - Then the graph is represented as N(n) R(x). - -Example: - Suppose n=5 and G has edges 0-2, 0-4, 1-3 and 3-4. - - x = 0 10 010 1001 - - Then N(n) = 68 and R(x) = R(010010 100100) = 81 99. - So, the graph is 68 81 99. - - -Description of sparse6 format. ------------------------------- - -Data type: - Undirected graphs of order 0 to 68719476735. - Loops and multiple edges are permitted. - -Optional Header: - >>sparse6<< (without end of line!) - -File name extension: - .s6 - -General structure: - - Each graph occupies one text line. Except for end-of-line characters, - each byte has the form 63+x, where 0 <= x <= 63. The byte encodes - the six bits of x. - - The encoded graph consists of: - (1) The character ':'. (This is present to distinguish - the code from graph6 format.) - (2) The number of vertices. - (3) A list of edges. - (4) end-of-line - - Loops and multiple edges are supported, but not directed edges. - -Number of vertices n: - - 1, 4, or 8 bytes N(n) as above. - This is the same as graph6 format. - -List of edges: - - Let k be the number of bits needed to represent n-1 in binary. - - The remaining bytes encode a sequence - - b[0] x[0] b[1] x[1] b[2] x[2] ... b[m] x[m] - - Each b[i] occupies 1 bit, and each x[i] occupies k bits. - Pack them together in bigendian order, and pad up to a - multiple of 6 as follows: - 1. If (n,k) = (2,1), (4,2), (8,4) or (16,5), and vertex - n-2 has an edge but n-1 doesn't have an edge, and - there are k+1 or more bits to pad, then pad with one - 0-bit and enough 1-bits to complete the multiple of 6. - 2. Otherwise, pad with enough 1-bits to complete the - multiple of 6. - These rules are to match the gtools procedures, and to avoid - the padding from looking like an extra loop in unusual cases. - - Then represent this bit-stream 6 bits per byte as indicated above. - - The vertices of the graph are 0..n-1. - The edges encoded by this sequence are determined thus: - - v = 0 - for i from 0 to m do - if b[i] = 1 then v = v+1 endif; - if x[i] > v then v = x[i] else output {x[i],v} endif - endfor - - In decoding, an incomplete (b,x) pair at the end is discarded. - -Example: - - :Fa@x^ - - ':' indicates sparse6 format. - Subtract 63 from the other bytes and write them in binary, - six bits each. - - 000111 100010 000001 111001 011111 - - The first byte is not 63, so it is n. n=7 - n-1 needs 3 bits (k=3). Write the other bits in groups - of 1 and k: - - 1 000 1 000 0 001 1 110 0 101 1 111 - - This is the b/x sequence 1,0 1,0 0,1 1,6 0,5 1,7. - The 1,7 at the end is just padding. - The remaining parts give the edges 0-1 0-2 1-2 5-6. diff --git a/tools/nauty25r9_unix/genbg b/tools/nauty25r9_unix/genbg deleted file mode 100644 index d3c456409eb928a1385d8cfa7ece633fd9bcf127..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109757 zcmc${4}28W)jvF&>_P%bCupKUQ4(F0C}5&sSx96DCoqc}#R6je3ofMa6d}ScpoJv3 zyO`-Pfmt54}u+ghuYDpEj5b`$ak{1=jn{HYR9bcP59R0sjd`#pDNHk*|6d7k(8 zdp~cK%)RHHd+xpGo_o%@XYSmT6?!Kn*le8jlfd1@QSN!Cn}Lkq9QU%n8^_I!<&rr! zcRhD4*AG|@{Il@fX3BbYnANOj5^(7!5&!J?H#UKC^mNlB_8h`;9A`bP*6B&@b^o}{ zr19MHn1N|MIWCKp6O{Uzw$La~TR5A+t>-+Gs5FIv@hgiZsC!gzxLI$wSvAl2?Volz_?F$&^-{}bse;__DVJ`lbfyrU2N%0A#9_5pYG zLH|r2_ziu)pY8)by$|@PKHxk0fIrsirV|;BxK0 z-v@kPA8@e`czGZ2xqZM%urAl1%s$3t?*s1c1HPmW`rq#ZUeE`8av$__`oM4N1OD4S z-~;-g{~GWIaf7+?C9{#@I7|OMX~HXd!9O$M>w3XC=o25Qk2|^I;st>v^SI&#i+n#W zp1)u&_xR%_i{~%&7eDTs_hWAE^7(%5anF5^mjwJiu6R+&+=X1p+{KF*Ee78FC5wD6 z*W*i;_+~FGMt+HZw(rMO?eXH-^A~W7=gwXLs@xL)ocXB5>MrpwUH}q-g+H1LdQZ-M za>-oKe;gDSE_xiuv;FfIEd-!At`DfcDB$OcjV|E#5~}Dcd73NsEm*W;w(GlA3Q&q zG`$Z%f?Yj-ekxh|MP`2e&wc?jVCSAT^XaTSkqepmz%^7qfvZHGemWM-W>2ym@$1); zQ!@8tOROJDP6=+=7b>≪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 line more atomic - 29 Aug 2008 : include PLUGIN insertion - 29 Nov 2008 : slight improvement of connectivity testing - 27 Jul 2011 : fixed error in PRUNE1 found by Stephen Hartke - 8 Jan 2012 : add antichains -A suggested by Andrew Juell - 23 Jan 2013 : fix splitlevinc initialization - 16 Feb 2014 : add a missing call to PRUNE2 - -**************************************************************************/ - -#define NAUTY_PGM 2 /* 1 = geng, 2 = genbg, 3 = gentourng */ -#undef MAXN -#define MAXN WORDSIZE - -#ifndef MAXN1 -#define MAXN1 24 /* not more than 30 */ -#endif -#define ONE_WORD_SETS -#include "gtools.h" /* which includes nauty.h and stdio.h */ - -static void (*outproc)(FILE*,graph*,int,int); -#ifdef OUTPROC -extern void OUTPROC(FILE*,graph*,int,int); -#endif - -static FILE *outfile; /* file for output graphs */ -static boolean connec; /* presence of -c */ -static boolean verbose; /* presence of -v */ -static boolean simple; /* presence of -z */ -boolean nautyformat; /* presence of -n */ -boolean nooutput; /* presence of -u */ -boolean canonise; /* presence of -l */ -boolean graph6; /* presence of -g */ -boolean sparse6; /* presence of -s */ -boolean greout; /* presence of -a */ -boolean quiet; /* presence of -q */ -boolean footfree; /* presence of -F */ -boolean cutfree; /* presence of -L */ -boolean antichain; /* presence of -A */ -int class1size; /* same as n1 */ -int maxcommon; /* -1 or value of -Z */ -static int maxdeg1,maxdeg2,n1,maxn2,mine,maxe,nprune,mod,res,curres; -static int mindeg1,mindeg2; -static graph gcan[MAXN]; -static int xval[MAXN]; /* x-bit version of second class, xval[0..] */ - -#if MAXN1 <= 16 -static int xbit[] = {0x0001,0x0002,0x0004,0x0008, - 0x0010,0x0020,0x0040,0x0080, - 0x0100,0x0200,0x0400,0x0800, - 0x1000,0x2000,0x4000,0x8000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : 15-leftbit[((x)>>8)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] + bytecount[(x)&0xFF]) -#elif MAXN1 <= 24 -static int xbit[] = {0x000001,0x000002,0x000004,0x000008, - 0x000010,0x000020,0x000040,0x000080, - 0x000100,0x000200,0x000400,0x000800, - 0x001000,0x002000,0x004000,0x008000, - 0x010000,0x020000,0x040000,0x080000, - 0x100000,0x200000,0x400000,0x800000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : 23-leftbit[((x)>>16)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + bytecount[(x)&0xFF]) -#else -static int xbit[] = {0x00000001,0x00000002,0x00000004,0x00000008, - 0x00000010,0x00000020,0x00000040,0x00000080, - 0x00000100,0x00000200,0x00000400,0x00000800, - 0x00001000,0x00002000,0x00004000,0x00008000, - 0x00010000,0x00020000,0x00040000,0x00080000, - 0x00100000,0x00200000,0x00400000,0x00800000, - 0x01000000,0x02000000,0x04000000,0x08000000, - 0x10000000,0x20000000,0x40000000,0x80000000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : \ - (x)&0xFF0000 ? 23-leftbit[((x)>>16)&0xFF] : \ - 31-leftbit[((x)>>24)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + \ - + bytecount[((x)>>24)&0xFF] + bytecount[(x)&0xFF]) -#endif - -typedef struct -{ - int ne,dmax; /* values used for xlb,xub calculation */ - int xlb,xub; /* saved bounds on extension degree */ - int lo,hi; /* work purposes for orbit calculation */ - int *xorb; /* min orbit representative */ -} leveldata; - -typedef struct -{ - long hi,lo; -} bigint; - -#define ZEROBIG(big) big.hi = big.lo = 0L -#define ISZEROBIG(big) (big.lo == 0 && big.hi == 0) -#define SETBIG(big,value) {big.hi = 0L; big.lo = (value);} -#define ADDBIG(big,extra) if ((big.lo += (extra)) >= 1000000000L) \ - { ++big.hi; big.lo -= 1000000000L;} -#define PRINTBIG(file,big) if (big.hi == 0) \ - fprintf(file,"%ld",big.lo); else fprintf(file,"%ld%09ld",big.hi,big.lo) -#define BIGTODOUBLE(big) (big.hi * 1000000000.0 + big.lo) -#define SUMBIGS(big1,big2) {if ((big1.lo += big2.lo) >= 1000000000L) \ - {big1.lo -= 1000000000L; big1.hi += big2.hi + 1L;} \ - else big1.hi += big2.hi;} -#define SUBBIGS(big1,big2) {if ((big1.lo -= big2.lo) < 0L) \ - {big1.lo += 1000000000L; big1.hi -= big2.hi + 1L;} \ - else big1.hi -= big2.hi;} -/* Note: SUBBIGS must not allow the value to go negative. - SUMBIGS and SUBBIGS both permit big1 and big2 to be the same bigint. */ -#define ISEQBIG(big1,big2) (big1.lo == big2.lo && big1.hi == big2.hi) -#define ISASBIG(big,value) (big.hi > 0 || big.lo >= (value)) - -#define IFLE1BITS(ww) if (!((ww)&((ww)-1))) - -static leveldata data[MAXN]; /* data[n] is data for n -> n+1 */ -static bigint ecount[1+MAXN*MAXN/4]; /* counts by number of edges */ -static int xstart[MAXN+1]; /* index into xset[] for each cardinality */ -static int *xset; /* array of all x-sets in card order */ -static int *xcard; /* cardinalities of all x-sets */ -static int *xinv; /* map from x-set to index in xset */ - -#ifdef INSTRUMENT -static long nodes[MAXN],rigidnodes[MAXN],fertilenodes[MAXN]; -static long a1calls,a1nauty,a1succs; -static long a2calls,a2nauty,a2uniq,a2succs; -#endif - -#ifdef SPLITTEST -static unsigned long splitcases = 0; -#endif - -#ifdef PLUGIN -#include PLUGIN -#endif - -/************************************************************************/ - -void -writeny(FILE *f, graph *g, int n1, int n2) -/* write graph g (n1+n2 vertices) to file f in y format */ -{ - static char ybit[] = {32,16,8,4,2,1}; - char s[(MAXN*(MAXN-1)/2 + 5)/6 + 4]; - int i,j,k; - char y,*sp; - int n; - - n = n1 + n2; - sp = s; - *(sp++) = 0x40 | n; - y = 0x40; - - k = -1; - for (j = 1; j < n; ++j) - for (i = 0; i < j; ++i) - { - if (++k == 6) - { - *(sp++) = y; - y = 0x40; - k = 0; - } - if (g[i] & bit[j]) y |= ybit[k]; - } - if (n >= 2) *(sp++) = y; - *(sp++) = '\n'; - *sp = '\0'; - - if (fputs(s,f) == EOF || ferror(f)) - { - fprintf(stderr,">E writeny : error on writing file\n"); - exit(2); - } -} - -/************************************************************************/ - -void -writeg6x(FILE *f, graph *g, int n1, int n2) -/* write graph g (n1+n2 vertices) to file f in graph6 format */ -{ - writeg6(f,g,1,n1+n2); -} - -/************************************************************************/ - -void -writes6x(FILE *f, graph *g, int n1, int n2) -/* write graph g (n1+n2 vertices) to file f in graph6 format */ -{ - writes6(f,g,1,n1+n2); -} - -/************************************************************************/ - -void -writegre(FILE *f, graph *g, int n1, int n2) -/* write graph g (n1+n2 vertices) to file f in Greechie diagram format */ -{ - static char atomname[] = "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\ -abcdefghijklmnopqrstuvwxyz!\"#$%&'()*-/:;<=>?@[\\]^_`{|}~"; - char grestr[MAXN*MAXN+MAXN+5]; - int i,j,k; - setword gi; - - k = 0; - for (i = n1; i < n1+n2; ++i) - { - if (i > n1) grestr[k++] = ','; - gi = g[i]; - while (gi) - { - TAKEBIT(j,gi); - grestr[k++] = atomname[j]; - } - } - grestr[k++] = '.'; - grestr[k++] = '\n'; - grestr[k] = '\0'; - if (fputs(grestr,f) == EOF || ferror(f)) - { - fprintf(stderr,">E genbg : error on writing file\n"); - gt_abort("genbg"); - } -} - -/***********************************************************************/ - -static void -nullwrite(FILE *f, graph *g, int n1, int n2) -/* don't write graph g (n1+n2 vertices) to file f */ -{ -} - -/***********************************************************************/ - -#ifdef OUTPROC1 - -static void -write12(FILE *f, graph *g, int n1, int n2) -/* pass to OUTPROC1 */ -{ - OUTPROC1(f,g,1,n1+n2); -} - -#endif - -/***********************************************************************/ - -void -writenauty(FILE *f, graph *g, int n1, int n2) -/* write graph g (n1+n2 vertices) to file f in nauty format */ -{ - int nn; - - nn = n1+n2; - - if (fwrite((char *)&nn,sizeof(int),(size_t)1,f) != 1 || - fwrite((char*)g,sizeof(setword),(size_t)nn,f) != nn) - { - fprintf(stderr,">E writenauty : error on writing file\n"); - exit(2); - } -} - -/*********************************************************************/ - -static void -fragments(int *x, int nx, int *frag, int *nfrag) -/* For each v in union(x[0..nx-1]), find the components of the - hypergraph x - v and add them to frag if there are more than one. */ -/* This implementation is shocking. Improve it! */ -{ - int allx,i,j,v; - int vbit,nw,w[MAXN]; - boolean done; - - allx = 0; - for (i = 0; i < nx; ++i) allx |= x[i]; - - *nfrag = 0; - - while (allx) - { - v = XNEXTBIT(allx); - vbit = xbit[v]; - allx &= ~vbit; - - for (i = 0; i < nx; ++i) w[i] = x[i] & ~vbit; - nw = nx; - - done = FALSE; - while (!done && nw > 1) - { - done = TRUE; - for (i = 0; i < nw-1; ++i) - for (j = i+1; j < nw; ) - if ((w[i] & w[j]) != 0) - { - w[i] |= w[j]; - w[j] = w[nw-1]; - --nw; - done = FALSE; - } - else - ++j; - } - - if (nw > 1) - for (i = 0; i < nw; ++i) - frag[(*nfrag)++] = w[i]; - } -} - -/*********************************************************************/ - -static boolean -isconnected(graph *g, int n) -/* test if g is connected */ -{ - setword seen,expanded,toexpand,allbits; - int i; - - allbits = ALLMASK(n); - - expanded = bit[n-1]; - seen = expanded | g[n-1]; - - while (seen != allbits && (toexpand = (seen & ~expanded))) /* not == */ - { - i = FIRSTBITNZ(toexpand); - expanded |= bit[i]; - seen |= g[i]; - } - - return seen == allbits; -} - -/**************************************************************************/ - -static boolean -distinvar(graph *g, int *invar, int n1, int n2) - /* make distance invariant/ - exit immediately FALSE if n-1 not maximal else exit TRUE - Note: only invar[n1..n1+n2-1] set */ -{ - int w,n; - setword workset,frontier; - setword sofar; - int inv,d,v; - - n = n1 + n2; - for (v = n-1; v >= n1; --v) - { - inv = 0; - sofar = frontier = bit[v]; - for (d = 1; frontier != 0; ++d) - { - workset = 0; - inv += POPCOUNT(frontier) ^ (0x57 + d); - while (frontier) - { - w = FIRSTBITNZ(frontier); - frontier &= ~bit[w]; - workset |= g[w]; - } - frontier = workset & ~sofar; - sofar |= frontier; - } - invar[v] = inv; - if (v < n-1 && inv > invar[n-1]) return FALSE; - } - return TRUE; -} - -/**************************************************************************/ - -static void -makeleveldata(void) -/* make the level data for each level */ -{ - int i,j,h; - int nn,nxsets,tttn; - long ncj; - leveldata *d; - int xw,cw; - - nn = maxdeg2 <= n1 ? maxdeg2 : n1; - ncj = nxsets = 1; - for (j = 1; j <= nn; ++j) - { - ncj = (ncj * (n1 - j + 1)) / j; - nxsets += ncj; - } - - tttn = 1 << n1; - xset = (int*) ALLOCS(nxsets,sizeof(int)); - xcard = (int*) ALLOCS(nxsets,sizeof(int)); - xinv = (int*) ALLOCS(tttn,sizeof(int)); - if (xset==NULL || xcard==NULL || xinv==NULL) - { - fprintf(stderr,">E genbg: malloc failed in makeleveldata()\n"); - exit(2); - } - - j = 0; - for (i = 0; i < tttn; ++i) - if ((h = XPOPCOUNT(i)) <= maxdeg2) - { - xset[j] = i; - xcard[j] = h; - ++j; - } - - if (j != nxsets) - { - fprintf(stderr,">E genbg: j=%d mxsets=%d\n",j,nxsets); - exit(2); - } - - /* The following is not SORT_OF_SORT 1, 2 or 3 */ - - h = 1; - do - h = 3 * h + 1; - while (h < nxsets); - - do - { - for (i = h; i < nxsets; ++i) - { - xw = xset[i]; - cw = xcard[i]; - for (j = i; xcard[j-h] > cw || - (xcard[j-h] == cw && xset[j-h] > xw); ) - { - xset[j] = xset[j-h]; - xcard[j] = xcard[j-h]; - if ((j -= h) < h) break; - } - xset[j] = xw; - xcard[j] = cw; - } - h /= 3; - } - while (h > 0); - - for (i = 0; i < nxsets; ++i) xinv[xset[i]] = i; - - xstart[0] = 0; - for (i = 1; i < nxsets; ++i) - if (xcard[i] > xcard[i-1]) xstart[xcard[i]] = i; - xstart[xcard[nxsets-1]+1] = nxsets; - - for (i = 0; i < maxn2; ++i) - { - - d = &data[i]; - - d->xorb = (int*) ALLOCS(nxsets,sizeof(int)); - - if (d->xorb==NULL) - { - fprintf(stderr,">E genbg: malloc failed in makeleveldata()\n"); - exit(2); - } - - d->ne = d->dmax = d->xlb = d->xub = -1; - } -} - -/**************************************************************************/ - -static UPROC -userautomproc(int count, int *p, int *orbits, int numorbits, - int stabvertex, int n) -/* Automorphism procedure called by nauty - Form orbits on powerset of VG - Operates on data[n-n1] */ -{ - int i,j1,j2; - int moved,pxi,pi; - int w,lo,hi; - int *xorb; - - xorb = data[n-n1].xorb; - lo = data[n-n1].lo; - hi = data[n-n1].hi; - - if (count == 1) /* first automorphism */ - for (i = lo; i < hi; ++i) xorb[i] = i; - - moved = 0; - for (i = 0; i < n; ++i) - if (p[i] != i) moved |= xbit[i]; - - for (i = lo; i < hi; ++i) - { - if ((w = xset[i] & moved) == 0) continue; - pxi = xset[i] & ~moved; - while (w) - { - j1 = XNEXTBIT(w); - w &= ~xbit[j1]; - pxi |= xbit[p[j1]]; - } - pi = xinv[pxi]; - - j1 = xorb[i]; - while (xorb[j1] != j1) j1 = xorb[j1]; - j2 = xorb[pi]; - while (xorb[j2] != j2) j2 = xorb[j2]; - - if (j1 < j2) xorb[j2] = xorb[i] = xorb[pi] = j1; - else if (j1 > j2) xorb[j1] = xorb[i] = xorb[pi] = j2; - } -} - -/***************************************************************************** -* * -* refinex(g,lab,ptn,level,numcells,count,active,goodret,code,m,n) is a * -* custom version of refine() which can exit quickly if required. * -* * -* Only use at level==0. * -* goodret : whether to do an early return for code 1 * -* code := -1 for n-1 not max, 0 for maybe, 1 for definite * -* * -*****************************************************************************/ - -static void -refinex(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, boolean goodret, - int *code, int m, int n) -{ - int i,c1,c2,labc1; - setword x; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - set *gptr; - setword workset; - int workperm[MAXN]; - int bucket[MAXN+2]; - - if (n == 1) - { - *code = 1; - return; - } - - *code = 0; - split1 = -1; - while (*numcells < n && ((split1 = nextelement(active,1,split1)) >= 0 - || (split1 = nextelement(active,1,-1)) >= 0)) - { - DELELEMENT1(active,split1); - for (split2 = split1; ptn[split2] > 0; ++split2) - {} - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],1); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT1(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = 0; - ++*numcells; - ADDELEMENT1(active,c1); - } - } - } - - else /* nontrivial splitting cell */ - { - workset = 0; - for (i = split1; i <= split2; ++i) - workset |= bit[lab[i]]; - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - if ((x = workset & g[lab[i]])) /* not == */ - cnt = POPCOUNT(x); - else - cnt = 0; - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - if ((x = workset & g[lab[i]])) /* not == */ - cnt = POPCOUNT(x); - else - cnt = 0; - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) continue; - c1 = cell1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - if (c1 != cell1) - { - ADDELEMENT1(active,c1); - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = 0; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) - lab[i] = workperm[i]; - } - } - - if (ptn[n-2] == 0) - { - if (lab[n-1] == n-1) - { - *code = 1; - if (goodret) return; - } - else - { - *code = -1; - return; - } - } - else - { - i = n - 1; - while (1) - { - if (lab[i] == n-1) break; - --i; - if (ptn[i] == 0) - { - *code = -1; - return; - } - } - } - } -} - -/**************************************************************************/ - -static void -makecanon(graph *g, graph *gcan, int n1, int n2) -/* gcan := canonise(g) */ -{ - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - setword active[1]; - int i; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - - options.writemarkers = FALSE; - options.writeautoms = FALSE; - options.getcanon = TRUE; - options.defaultptn = FALSE; - - for (i = 0; i < n1+n2; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n1-1] = ptn[n1+n2-1] = 0; - EMPTYSET(active,1); - ADDELEMENT(active,0); - ADDELEMENT(active,n1); - - nauty(g,lab,ptn,active,orbits,&options,&stats, - workspace,50,1,n1+n2,gcan); -} - -/**************************************************************************/ - -static boolean -accept1(graph *g, int n2, int x, graph *gx, int *deg, boolean *rigid) - /* decide if n2 in theta(g+x) -- version for n2+1 < maxn2 */ -{ - int i,n; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int count[MAXN]; - graph h[MAXN]; - int xw; - int nx,numcells,code; - int i0,i1,degn; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - -#ifdef INSTRUMENT - ++a1calls; -#endif - - n = n1 + n2; - nx = n + 1; - for (i = 0; i < n; ++i) gx[i] = g[i]; - gx[n] = 0; - deg[n] = degn = XPOPCOUNT(x); - - xw = x; - while (xw) - { - i = XNEXTBIT(xw); - xw &= ~xbit[i]; - gx[i] |= bit[n]; - gx[n] |= bit[i]; - ++deg[i]; - } -#ifdef PRUNE1 - if (PRUNE1(gx,deg,n1,n2+1,maxn2)) return FALSE; -#endif - - for (i = 0; i < n1; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n1-1] = 0; - - i0 = n1; - i1 = n; - for (i = n1; i < nx; ++i) - { - if (deg[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - - ptn[n] = 0; - - if (i0 == n1) - { - numcells = 2; - active[0] = bit[0] | bit[n1]; - } - else - { - numcells = 3; - active[0] = bit[0] | bit[n1] | bit[i1+1]; - ptn[i1] = 0; - } - refinex(gx,lab,ptn,0,&numcells,count,active,FALSE,&code,1,nx); - - if (code < 0) return FALSE; - - if (numcells == nx) - { - *rigid = TRUE; -#ifdef INSTRUMENT - ++a1succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,deg,n1,n2+1,maxn2)) return FALSE; -#endif - return TRUE; - } - - options.writemarkers = FALSE; - options.writeautoms = FALSE; - options.getcanon = TRUE; - options.defaultptn = FALSE; - options.userautomproc = userautomproc; - - active[0] = 0; -#ifdef INSTRUMENT - ++a1nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,h); - - if (orbits[lab[n]] == orbits[n]) - { - *rigid = stats.numorbits == nx; -#ifdef INSTRUMENT - ++a1succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,deg,n1,n2+1,maxn2)) return FALSE; -#endif - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static boolean -accept2(graph *g, int n2, int x, graph *gx, int *deg, boolean nuniq) -/* decide if n in theta(g+x) -- version for n+1 == maxn */ -{ - int i,n; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int degx[MAXN],invar[MAXN]; - setword vmax,gv; - int qn,qv; - int count[MAXN]; - int xw; - int nx,numcells,code; - int degn,i0,i1,j,j0,j1; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - -#ifdef INSTRUMENT - ++a2calls; - if (nuniq) ++a2uniq; -#endif - n = n1 + n2; - nx = n + 1; - for (i = 0; i < n; ++i) - { - gx[i] = g[i]; - degx[i] = deg[i]; - } - gx[n] = 0; - degx[n] = degn = XPOPCOUNT(x); - - xw = x; - while (xw) - { - i = XNEXTBIT(xw); - xw &= ~xbit[i]; - gx[i] |= bit[n]; - gx[n] |= bit[i]; - ++degx[i]; - } -#ifdef PRUNE1 - if (PRUNE1(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - - if (nuniq) - { -#ifdef INSTRUMENT - ++a2succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - if (canonise) makecanon(gx,gcan,n1,n2+1); - return TRUE; - } - - for (i = 0; i < n1; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n1-1] = 0; - - i0 = n1; - i1 = n; - for (i = n1; i < nx; ++i) - { - if (degx[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - - ptn[n] = 0; - - if (i0 == n1) - { - numcells = 2; - active[0] = bit[0] | bit[n1]; - - if (!distinvar(gx,invar,n1,n2+1)) return FALSE; - qn = invar[n]; - j0 = n1; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - qv = invar[j]; - if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > n1) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - if (canonise) makecanon(gx,gcan,n1,n2+1); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - else - { - numcells = 3; - ptn[i1] = 0; - active[0] = bit[0] | bit[n1] | bit[i1+1]; - - vmax = 0; - j = MAXN; - for (i = 0; i < n1; ++i) - if (degx[i] < j && degx[i] > 0) - { - j = degx[i]; - vmax = bit[i]; - } - else if (degx[i] == j) - vmax |= bit[i]; - - gv = gx[n] & vmax; - qn = POPCOUNT(gv); - - j0 = i1+1; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - gv = gx[j] & vmax; - qv = POPCOUNT(gv); - if (qv > qn) - return FALSE; - else if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > i1+1) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - if (canonise) makecanon(gx,gcan,n1,n2+1); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - - refinex(gx,lab,ptn,0,&numcells,count,active,TRUE,&code,1,nx); - - if (code < 0) - return FALSE; - else if (code > 0 || numcells >= nx-4) - { -#ifdef INSTRUMENT - ++a2succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - if (canonise) makecanon(gx,gcan,n1,n2+1); - return TRUE; - } - - options.writemarkers = FALSE; - options.writeautoms = FALSE; - options.getcanon = TRUE; - options.defaultptn = FALSE; - - active[0] = 0; -#ifdef INSTRUMENT - ++a2nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,gcan); - - if (orbits[lab[n]] == orbits[n]) - { -#ifdef INSTRUMENT - ++a2succs; -#endif -#ifdef PRUNE2 - if (PRUNE2(gx,degx,n1,n2+1,maxn2)) return FALSE; -#endif - if (canonise) makecanon(gx,gcan,n1,n2+1); - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static void -xbnds(int n2, int ne, int dmax) -/* find bounds on degree for vertex n2 - Store answer in data[*].* */ -{ - int xlb,xub,m; - - xlb = n2 == 0 ? (connec ? 1 : 0) : dmax; - if (xlb < mindeg2) xlb = mindeg2; - m = mine - ne - (maxn2 - n2 -1)*maxdeg2; - if (m > xlb) xlb = m; - - xub = maxdeg2; - m = (maxe - ne) / (maxn2 - n2); - if (m < xub) xub = m; - - data[n2].ne = ne; - data[n2].dmax = dmax; - data[n2].xlb = xlb; - data[n2].xub = xub; -} - -/**************************************************************************/ - -static void -genextend(graph *g, int n2, int *deg, int ne, boolean rigid, int xlb, int xub) -/* extend from n2 to n2+1 */ -{ - int x,y,d; - int *xorb,xc; - int nx,i,j,imin,imax,dmax; - int xlbx,xubx,n; - graph gx[MAXN]; - int degx[MAXN]; - boolean rigidx; - int dneed,need,nfeet,hideg,deg1,ft[MAXN],nfrag,frag[MAXN]; - -#ifdef INSTRUMENT - boolean haschild; - - haschild = FALSE; - ++nodes[n2]; - if (rigid) ++rigidnodes[n2]; -#endif - - n = n1 + n2; - nx = n2 + 1; - dmax = deg[n-1]; - - d = 0; - dneed = mindeg1 - maxn2 + n2; - need = 0; - hideg = 0; - deg1 = 0; - for (i = 0; i < n1; ++i) - { - if (deg[i] == maxdeg1) d |= xbit[i]; - if (deg[i] <= dneed) need |= xbit[i]; - if (deg[i] >= 2) hideg |= xbit[i]; - if (deg[i] == 1) deg1 |= xbit[i]; - } - - if (xlb < XPOPCOUNT(need)) xlb = XPOPCOUNT(need); - if (xlb > xub) return; - - imin = xstart[xlb]; - imax = xstart[xub+1]; - xorb = data[n2].xorb; - - if (nx == maxn2) - { - if (footfree) - { - nfeet = 0; - for (j = 0; j < n2; ++j) - { - x = xval[j] & hideg; - IFLE1BITS(x) ft[nfeet++] = xval[j] & deg1; - } - } - if (cutfree) fragments(xval,n2,frag,&nfrag); - - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if ((x & d) != 0) continue; - if ((need & ~x) != 0) continue; - - if (simple) - { - for (j = n2; --j >= 0;) - if (x == xval[j]) break; - if (j >= 0) continue; - } - if (maxcommon >= 0) - { - for (j = n2; --j >= 0;) - { - y = x & xval[j]; - if (XPOPCOUNT(y) > maxcommon) break; - } - if (j >= 0) continue; - } - if (antichain) - { - for (j = 0; j < n2; ++j) - if ((xval[j] & ~x) == 0) break; - if (j < n2) continue; - } - if (footfree) - { - y = x & (hideg | deg1); - IFLE1BITS(y) continue; - for (j = 0; j < nfeet; ++j) - if ((x & ft[j]) == 0) break; - if (j < nfeet) continue; - } - if (cutfree) - { - y = x & (hideg | deg1); - IFLE1BITS(y) continue; - for (j = 0; j < nfrag; ++j) - if ((x & frag[j]) == 0) break; - if (j < nfrag) continue; - } - - xval[n2] = x; - - if (nx == nprune) - { - if (curres == 0) curres = mod; -#ifdef SPLITTEST - --curres; - ++splitcases; - continue; -#else - if (--curres != 0) continue; -#endif - } - if (accept2(g,n2,x,gx,deg,xc > dmax)) - if (!connec || isconnected(gx,n+1)) - { - ADDBIG(ecount[ne+xc],1); -#ifdef INSTRUMENT - haschild = TRUE; -#endif - (*outproc)(outfile,canonise ? gcan : gx,n1,n2+1); - } - } - } - else - { - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if ((x & d) != 0) continue; - if ((need & ~x) != 0) continue; - - if (nx == nprune) - { - if (curres == 0) curres = mod; -#ifdef SPLITTEST - --curres; - ++splitcases; - continue; -#else - if (--curres != 0) continue; -#endif - } - - if (simple) - { - for (j = n2; --j >= 0;) - if (x == xval[j]) break; - if (j >= 0) continue; - } - if (maxcommon >= 0) - { - for (j = n2; --j >= 0;) - { - y = x & xval[j]; - if (XPOPCOUNT(y) > maxcommon) break; - } - if (j >= 0) continue; - } - if (antichain) - { - for (j = 0; j < n2; ++j) - if ((xval[j] & ~x) == 0) break; - if (j < n2) continue; - } - xval[n2] = x; - - for (j = 0; j < n; ++j) degx[j] = deg[j]; - if (data[nx].ne != ne+xc || data[nx].dmax != xc) - xbnds(nx,ne+xc,xc); - xlbx = data[nx].xlb; - xubx = data[nx].xub; - if (xlbx > xubx) continue; - - data[nx].lo = xstart[xlbx]; - data[nx].hi = xstart[xubx+1]; - if (accept1(g,n2,x,gx,degx,&rigidx)) - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - genextend(gx,nx,degx,ne+xc,rigidx,xlbx,xubx); - } - } - } -#ifdef INSTRUMENT - if (haschild) ++fertilenodes[n2]; -#endif -} - -/**************************************************************************/ -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *arg; - boolean badargs,gotD,gote,gotf,gotmr,gotZ,gotd,gotX; - long Dval1,Dval2; - long dval1,dval2; - int i,j,imin,imax,argnum,sw; - int splitlevinc; - graph g[MAXN1]; - int deg[MAXN1]; - bigint nout; - double t1,t2; - char *outfilename; - char msg[201]; - - HELP; - nauty_check(WORDSIZE,1,MAXN,NAUTYVERSIONID); - - if (MAXN > WORDSIZE || MAXN1 > 8*sizeof(int)-2) - { - fprintf(stderr,"genbg: incompatible MAXN, MAXN1 or WORDSIZE\n"); - fprintf(stderr,"--See notes in program source\n"); - exit(1); - } - - badargs = FALSE; - connec = FALSE; - verbose = FALSE; - nautyformat = FALSE; - nooutput = FALSE; - canonise = FALSE; - greout = FALSE; - simple = FALSE; - graph6 = FALSE; - sparse6 = FALSE; - quiet = FALSE; - footfree = FALSE; - cutfree = FALSE; - - gote = FALSE; - gotf = FALSE; - gotmr = FALSE; - gotD = FALSE; - gotd = FALSE; - gotZ = FALSE; - gotX = FALSE; - outfilename = NULL; - - maxdeg1 = maxdeg2 = MAXN; - mindeg1 = mindeg2 = 0; - - argnum = 0; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('n',nautyformat) - else SWBOOLEAN('u',nooutput) - else SWBOOLEAN('q',quiet) - else SWBOOLEAN('v',verbose) - else SWBOOLEAN('z',simple) - else SWBOOLEAN('F',footfree) - else SWBOOLEAN('L',cutfree) - else SWBOOLEAN('A',antichain) - else SWBOOLEAN('l',canonise) - else SWBOOLEAN('c',connec) - else SWBOOLEAN('a',greout) - else SWBOOLEAN('g',graph6) - else SWBOOLEAN('s',sparse6) - else SWINT('Z',gotZ,maxcommon,"genbg -Z") - else SWINT('X',gotX,splitlevinc,"geng -X") - else SWRANGE('D',":-",gotD,Dval1,Dval2,"genbg -D") - else SWRANGE('d',":-",gotd,dval1,dval2,"genbg -d") -#ifdef PLUGIN_SWITCHES -PLUGIN_SWITCHES -#endif - else badargs = TRUE; - } - } - else if (arg[0] == '-' && arg[1] == '\0') - gotf = TRUE; - else - { - if (argnum == 0) - { - if (sscanf(arg,"%d",&n1) != 1) badargs = TRUE; - ++argnum; - } - else if (argnum == 1) - { - if (sscanf(arg,"%d",&maxn2) != 1) badargs = TRUE; - ++argnum; - } - else if (gotf) - badargs = TRUE; - else - { - if (!gotmr) - { - if (sscanf(arg,"%d/%d",&res,&mod) == 2) - { - gotmr = TRUE; - continue; - } - } - if (!gote) - { - if (sscanf(arg,"%d:%d",&mine,&maxe) == 2 - || sscanf(arg,"%d-%d",&mine,&maxe) == 2) - { - gote = TRUE; - if (maxe == 0 && mine > 0) maxe = MAXN*MAXN/4; - continue; - } - else if (sscanf(arg,"%d",&mine) == 1) - { - gote = TRUE; - maxe = mine; - continue; - } - } - if (!gotf) - { - outfilename = arg; - gotf = TRUE; - continue; - } - } - } - } - - if (argnum < 2) - badargs = TRUE; - else if (n1 < 1 || maxn2 < 0 || n1 > MAXN1 || n1+maxn2 > MAXN) - { - fprintf(stderr, - ">E genbg: must have n1=1..%d, n1+n2=1..%d\n",MAXN1,MAXN); - badargs = TRUE; - } - - if (!gote) - { - mine = 0; - maxe = n1 * maxn2; - } - - if (!gotmr) - { - mod = 1; - res = 0; - } - else if (argnum == 5 || argnum > 6) - badargs = TRUE; - - if (gotd) - { - mindeg1 = dval1; - mindeg2 = dval2; - } - if (gotD) - { - maxdeg1 = Dval1; - maxdeg2 = Dval2; - } - if (maxdeg1 > maxn2) maxdeg1 = maxn2; - if (maxdeg2 > n1) maxdeg2 = n1; - if (connec && mine < n1+maxn2-1) mine = n1 + maxn2 - 1; - if (connec && mindeg1 == 0) mindeg1 = 1; - if (connec && mindeg2 == 0) mindeg2 = 1; - if (maxe > n1*maxdeg1) maxe = n1*maxdeg1; - if (maxe > maxn2*maxdeg2) maxe = maxn2*maxdeg2; - if (mine < n1*mindeg1) mine = n1*mindeg1; - if (mine < maxn2*mindeg2) mine = maxn2*mindeg2; - - if (!badargs && (mine > maxe || maxe < 0 || maxdeg1 < 0 || maxdeg2 < 0)) - { - fprintf(stderr,">E genbg: impossible mine,maxe,maxdeg values\n"); - badargs = TRUE; - } - - if (!gotZ) maxcommon = -1; - - if (!badargs && (mine > maxe || maxe < 0 || maxdeg1 < 0 || maxdeg2 < 0)) - { - fprintf(stderr, - ">E genbg: impossible mine,maxe,mindeg,maxdeg values\n"); - badargs = TRUE; - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if ((nautyformat!=0) + (graph6!=0) + (greout!=0) - + (sparse6!=0) + (nooutput!=0) > 1) - gt_abort(">E genbg: -ungsa are incompatible\n"); - -#ifdef OUTPROC - outproc = OUTPROC; -#else -#ifdef OUTPROC1 - outproc = write12; -#endif - if (nautyformat) outproc = writenauty; - else if (nooutput) outproc = nullwrite; - else if (sparse6) outproc = writes6x; - else if (greout) outproc = writegre; - else outproc = writeg6x; -#endif - -#ifdef PLUGIN_INIT -PLUGIN_INIT -#endif - - for (i = 0; i <= maxe; ++i) ZEROBIG(ecount[i]); - - if (nooutput) - outfile = stdout; - else if (!gotf || outfilename == NULL) - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename, - nautyformat ? "wb" : "w")) == NULL) - { - fprintf(stderr, - ">E genbg: can't open %s for writing\n",outfilename); - gt_abort(NULL); - } - -/* - if (!quiet) - { - fprintf(stderr,">A %s n=%d+%d e=%d:%d d=%d:%d D=%d:%d ", - argv[0],n1,maxn2,mine,maxe, - mindeg1,mindeg2,maxdeg1,maxdeg2); - if (simple) fprintf(stderr,"z"); - if (footfree) fprintf(stderr,"F"); - if (connec) fprintf(stderr,"c"); - if (maxcommon >= 0) fprintf(stderr,"Z%d",maxcommon); - if (mod > 1) fprintf(stderr," class=%d/%d",res,mod); - fprintf(stderr,"\n"); - } -*/ - - if (!quiet) - { - msg[0] = '\0'; - if (strlen(argv[0]) > 75) - fprintf(stderr,">A %s",argv[0]); - else - CATMSG1(">A %s",argv[0]); - CATMSG4(" n=%d+%d e=%d:%d",n1,maxn2,mine,maxe); - CATMSG4(" d=%d:%d D=%d:%d ",mindeg1,mindeg2,maxdeg1,maxdeg2); - if (simple) CATMSG0("z"); - if (footfree) CATMSG0("F"); - if (antichain) CATMSG0("A"); - if (connec) CATMSG0("c"); - if (maxcommon >= 0) CATMSG1("Z%d",maxcommon); - if (cutfree) CATMSG0("L"); - if (mod > 1) CATMSG2(" class=%d/%d",res,mod); - CATMSG0("\n"); - fputs(msg,stderr); - fflush(stderr); - } - - class1size = n1; - - for (i = 0; i < n1; ++i) - { - g[i] = 0; - deg[i] = 0; - } - - t1 = CPUTIME; - - if (maxn2 == 0) - { - if (res == 0) - { - ADDBIG(ecount[0],1); - (*outproc)(outfile,g,n1,0); - } - } - else - { - makeleveldata(); - curres = res; - if (mod <= 1) nprune = 0; - else if (maxn2 >= 6) nprune = maxn2 - 2; - else if (maxn2 >= 3) nprune = maxn2 - 1; - else nprune = maxn2; - - if (gotX) - { - nprune += splitlevinc; - if (nprune > maxn2) nprune = maxn2; - if (nprune < 0) nprune = 0; - } - - xbnds(0,0,0); - imin = xstart[data[0].xlb]; - imax = xstart[data[0].xub+1]; - - for (i = imin; i < imax; ++i) - data[0].xorb[i] = -1; - - for (i = data[0].xlb; i <= data[0].xub; ++i) - data[0].xorb[xstart[i]] = xstart[i]; - - genextend(g,0,deg,0,FALSE,data[0].xlb,data[0].xub); - } - t2 = CPUTIME; - - ZEROBIG(nout); - for (i = 0; i <= maxe; ++i) SUMBIGS(nout,ecount[i]); - - if (verbose) - for (i = 0; i <= maxe; ++i) - if (!ISZEROBIG(ecount[i])) - { - fprintf(stderr,">C "); - PRINTBIG(stderr,ecount[i]); - fprintf(stderr," graphs with %d edges\n",i); - } - -#ifdef INSTRUMENT - fprintf(stderr,"\n>N node counts\n"); - for (i = 0; i < maxn2; ++i) - fprintf(stderr," level %2d: %7ld (%ld rigid, %ld fertile)\n", - i,nodes[i],rigidnodes[i],fertilenodes[i]); - fprintf(stderr,">A1 %ld calls to accept1, %ld nauty, %ld succeeded\n", - a1calls,a1nauty,a1succs); - fprintf(stderr, - ">A2 %ld calls to accept2, %ld nuniq, %ld nauty, %ld succeeded\n", - a2calls,a2uniq,a2nauty,a2succs); - fprintf(stderr,"\n"); -#endif - -#ifdef SPLITTEST - fprintf(stderr,">Z %lu splitting cases at level %d; cpu=%3.2f sec\n", - splitcases,nprune,t2-t1); -#else - if (!quiet) - { - fprintf(stderr,">Z "); - PRINTBIG(stderr,nout); - fprintf(stderr," graphs generated in %3.2f sec\n",t2-t1); - } -#endif - - exit(0); -} diff --git a/tools/nauty25r9_unix/geng b/tools/nauty25r9_unix/geng deleted file mode 100755 index 3e9294cb032463428a8f782af323a58d662deeff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118401 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

      oq>Bj4D-u7>V8?C^nG}Ur7?UNccLdyMv~S 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

      6|A?nT%%ytGs7*j)vA~Y7y9eff!Tn7% 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 diff --git a/tools/nauty25r9_unix/labelg.c b/tools/nauty25r9_unix/labelg.c deleted file mode 100644 index a78304d..0000000 --- a/tools/nauty25r9_unix/labelg.c +++ /dev/null @@ -1,352 +0,0 @@ -/* labelg.c version 1.6; B D McKay, Jan 2011 */ - -#define USAGE "labelg [-qsg] [-fxxx] [-S|-t] [-i# -I#:# -K#] [infile [outfile]]" - -#define HELPTEXT \ -" Canonically label a file of graphs.\n\ -\n\ - -s force output to sparse6 format\n\ - -g force output to graph6 format\n\ - If neither -s or -g are given, the output format is\n\ - determined by the header or, if there is none, by the\n\ - format of the first input graph. Also see -S. \n\ - -S Use sparse representation internally.\n\ - Note that this changes the canonical labelling.\n\ - Multiple edges are not supported. One loop per vertex is ok.\n\ - -t Use Traces.\n\ - Note that this changes the canonical labelling.\n\ - Multiple edges and loops are not supported, nor invariants.\n\ -\n\ - The output file will have a header if and only if the input file does.\n\ -\n\ - -fxxx Specify a partition of the point set. xxx is any\n\ - string of ASCII characters except nul. This string is\n\ - considered extended to infinity on the right with the\n\ - character 'z'. One character is associated with each point,\n\ - in the order given. The labelling used obeys these rules:\n\ - (1) the new order of the points is such that the associated\n\ - characters are in ASCII ascending order\n\ - (2) if two graphs are labelled using the same string xxx,\n\ - the output graphs are identical iff there is an\n\ - associated-character-preserving isomorphism between them.\n\ - No option can be concatenated to the right of -f.\n\ -\n\ - -i# select an invariant (1 = twopaths, 2 = adjtriang(K), 3 = triples,\n\ - 4 = quadruples, 5 = celltrips, 6 = cellquads, 7 = cellquins,\n\ - 8 = distances(K), 9 = indsets(K), 10 = cliques(K), 11 = cellcliq(K),\n\ - 12 = cellind(K), 13 = adjacencies, 14 = cellfano, 15 = cellfano2,\n\ - 16 = refinvar(K))\n\ - -I#:# select mininvarlevel and maxinvarlevel (default 1:1)\n\ - -K# select invararg (default 3)\n\ -\n\ - -q suppress auxiliary information\n" - - -/*************************************************************************/ - -#include "gtools.h" -#include "nautinv.h" -#include "gutils.h" -#include "traces.h" - -static struct invarrec -{ - void (*entrypoint)(graph*,int*,int*,int,int,int,int*, - int,boolean,int,int); - char *name; -} invarproc[] - = {{NULL, "none"}, - {twopaths, "twopaths"}, - {adjtriang, "adjtriang"}, - {triples, "triples"}, - {quadruples, "quadruples"}, - {celltrips, "celltrips"}, - {cellquads, "cellquads"}, - {cellquins, "cellquins"}, - {distances, "distances"}, - {indsets, "indsets"}, - {cliques, "cliques"}, - {cellcliq, "cellcliq"}, - {cellind, "cellind"}, - {adjacencies, "adjacencies"}, - {cellfano, "cellfano"}, - {cellfano2, "cellfano2"}, - {refinvar, "refinvar"} - }; - -#define NUMINVARS ((int)(sizeof(invarproc)/sizeof(struct invarrec))) - -static nauty_counter orbtotal; -static double unorbtotal; -extern int gt_numorbits; - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - graph *g; - sparsegraph sg,sh; - int m,n,codetype; - int argnum,j,outcode; - char *arg,sw,*fmt; - boolean badargs; - boolean sswitch,gswitch,qswitch,fswitch,Oswitch; - boolean iswitch,Iswitch,Kswitch,Mswitch,Sswitch; - boolean uswitch,tswitch; - int inv,mininvarlevel,maxinvarlevel,invararg; - long minil,maxil; - double t; - char *infilename,*outfilename; - FILE *infile,*outfile; - nauty_counter nin; - int ii,secret,loops; - DEFAULTOPTIONS_TRACES(traces_opts); - TracesStats traces_stats; -#if MAXN - graph h[MAXN*MAXM]; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; -#else - DYNALLSTAT(graph,h,h_sz); - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); -#endif - - HELP; - - nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - sswitch = gswitch = qswitch = FALSE; - fswitch = Oswitch = Mswitch = FALSE; - iswitch = Iswitch = Kswitch = FALSE; - uswitch = Sswitch = tswitch = FALSE; - infilename = outfilename = NULL; - inv = 0; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('s',sswitch) - else SWBOOLEAN('g',gswitch) - else SWBOOLEAN('u',uswitch) - else SWBOOLEAN('q',qswitch) - else SWBOOLEAN('O',Oswitch) - else SWBOOLEAN('S',Sswitch) - else SWBOOLEAN('t',tswitch) - else SWINT('i',iswitch,inv,"labelg -i") - else SWINT('K',Kswitch,invararg,"labelg -K") - else SWRANGE('k',":-",Iswitch,minil,maxil,"labelg -k") - else SWRANGE('I',":-",Iswitch,minil,maxil,"labelg -I") - else if (sw == 'f') - { - fswitch = TRUE; - fmt = arg; - break; - } - else SWINT('M',Mswitch,secret,"labelg -M") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (sswitch && gswitch) - gt_abort(">E labelg: -s and -g are incompatible\n"); - - if (tswitch && (fswitch || Sswitch)) - gt_abort(">E labelg: -t is incompatible with -S and -f \n"); - - if (!Sswitch && iswitch && (inv > NUMINVARS)) - gt_abort(">E labelg: -i value must be 0..16\n"); - if (Sswitch && iswitch && (inv != 8)) - gt_abort(">E labelg: only distances (-i8) is available with -S"); - if (tswitch && iswitch) - gt_abort(">E labelg: invariants are not available with -t"); - - if (iswitch && inv == 0) iswitch = FALSE; - - if (iswitch) - { - if (Iswitch) - { - mininvarlevel = minil; - maxinvarlevel = maxil; - } - else - mininvarlevel = maxinvarlevel = 1; - if (!Kswitch) invararg = 3; - } - - if (!Mswitch) secret = 1; - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!qswitch) - { - fprintf(stderr,">A labelg"); - if (sswitch || gswitch || fswitch || iswitch - || tswitch || Sswitch) - fprintf(stderr," -"); - if (sswitch) fprintf(stderr,"s"); - if (gswitch) fprintf(stderr,"g"); - if (Sswitch) fprintf(stderr,"S"); - if (tswitch) fprintf(stderr,"t"); - if (iswitch) - fprintf(stderr,"i=%s[%d:%d,%d]",invarproc[inv].name, - mininvarlevel,maxinvarlevel,invararg); - if (fswitch) fprintf(stderr,"f%s",fmt); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (uswitch) - outcode = 0; - else if (sswitch || (!gswitch && (codetype&SPARSE6))) - outcode = SPARSE6; - else - outcode = GRAPH6; - - if (!fswitch) fmt = NULL; - - if (!uswitch && (codetype&HAS_HEADER)) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nin = 0; - orbtotal = 0; - unorbtotal = 0.0; - t = CPUTIME; - if (Sswitch) - { - SG_INIT(sg); - SG_INIT(sh); - while (TRUE) - { - if (read_sg_loops(infile,&sg,&loops) == NULL) break; - ++nin; - n = sg.nv; - m = (n + WORDSIZE - 1) / WORDSIZE; - SG_ALLOC(sh,n,sg.nde,"labelg"); - for (ii = 0; ii < secret; ++ii) - fcanonise_inv_sg(&sg,m,n,&sh,fmt,iswitch?distances_sg:NULL, - mininvarlevel,maxinvarlevel,invararg,loops>0); - sortlists_sg(&sh); - orbtotal += gt_numorbits; - unorbtotal += 1.0 / gt_numorbits; - if (outcode == SPARSE6) writes6_sg(outfile,&sh); - else if (outcode == GRAPH6) writeg6_sg(outfile,&sh); - } - } - else if (tswitch) - { - SG_INIT(sg); - SG_INIT(sh); - traces_opts.getcanon = TRUE; - traces_opts.writeautoms = FALSE; - traces_opts.verbosity = 0; - traces_opts.outfile = stdout; - - while (TRUE) - { - if (read_sg_loops(infile,&sg,&loops) == NULL) break; - if (loops > 0) gt_abort(">E Traces does not allow loops\n"); - ++nin; - n = sg.nv; - DYNALLOC1(int,lab,lab_sz,n,"traces@labelg"); - DYNALLOC1(int,ptn,ptn_sz,n,"traces@labelg"); - DYNALLOC1(int,orbits,orbits_sz,n,"traces@labelg"); - SG_ALLOC(sh,n,sg.nde,"labelg"); - for (ii = 0; ii < n; ++ii) { lab[ii] = ii; ptn[ii] = 1; } - ptn[n-1] = 0; - for (ii = 0; ii < secret; ++ii) - Traces(&sg,lab,ptn,orbits,&traces_opts,&traces_stats,&sh); - sortlists_sg(&sh); - orbtotal += gt_numorbits; - unorbtotal += 1.0 / gt_numorbits; - if (outcode == SPARSE6) writes6_sg(outfile,&sh); - else if (outcode == GRAPH6) writeg6_sg(outfile,&sh); - SG_FREE(sh); - } - } - else - { - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; -#if !MAXN - DYNALLOC2(graph,h,h_sz,n,m,"labelg"); -#endif - loops = loopcount(g,m,n); - for (ii = 0; ii < secret; ++ii) - fcanonise_inv(g,m,n,h,fmt,invarproc[inv].entrypoint, - mininvarlevel,maxinvarlevel,invararg,loops>0); - orbtotal += gt_numorbits; - unorbtotal += 1.0 / gt_numorbits; - if (outcode == SPARSE6) writes6(outfile,h,m,n); - if (outcode == GRAPH6) writeg6(outfile,h,m,n); - FREES(g); - } - } - t = CPUTIME - t; - -#if LONG_LONG_COUNTERS - if (Oswitch) - fprintf(stderr,">C orbit totals = %lld %15.8f\n", - orbtotal,unorbtotal); - if (!qswitch) - fprintf(stderr, - ">Z %lld graphs labelled from %s to %s in %3.2f sec.\n", - nin,infilename,outfilename,t); -#else - if (Oswitch) - fprintf(stderr,">C orbit totals = %ld %15.8f\n", - orbtotal,unorbtotal); - if (!qswitch) - fprintf(stderr, - ">Z %ld graphs labelled from %s to %s in %3.2f sec.\n", - nin,infilename,outfilename,t); -#endif - - exit(0); -} diff --git a/tools/nauty25r9_unix/linegraphg b/tools/nauty25r9_unix/linegraphg deleted file mode 100644 index 2de73ae4d2dc71b10e4d9646604a13c9de298b7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126166 zcmc${3w%>m);^rHNold2Q?%8hAVrIUic+Q8SZWhU;RI5w11MerBOMqoAf&)JK#NJR zXO4k-8*$!InbDc?I--sUsBKfA1r#k*xjG6cdJY9a6e#7=?|Jq)Nz)4Rf8X!_e!s8& zjTx_|> zk_0R}{*U50%~15)YG#XmlYz^>MEq~V|M>}w@$2L#_U$EN7EAOSEuCMM*YW2xgU0vs zr3Pm7Yq4aDbV6Cz^nV)Z>HnN0;L-1RRtA6LuQ9&Se5@Yx^*8hNH}gfmO$Iqj^c!s- z$?^ZOX8Xn_I1yvq$&bY?{_Xgh#al}E`tM`7y22n_UEva#(eLME9R8x;XueyJkM;cT z{-v9Uzc$M|8($8Y?TdcRsO6dmrrvw~;Ab zEcExB1^@lCz^9%C?mi3r>a)OKI}3dFS>WW&nfUYaS>P#WX>Y<=;MW754O(6QmH}|4 za%;{4Kj$p)>1Tmc8qY+Z0(2&L+gad0p9Ox&S=#G63;qpffft?yKHx0$2b=|e=UL#3 z&jNoQ@E(?)mdbY~A!M;c_1WDfys8WQa}!?O1#W?U@KGIHZz(H#pnT>OOW6a{eD{}4 zePFU>!i4EFrat5^o8X&rzh&~Asea1@&&?C2m-~H|vT4&NKV+FcdB%)sGk`bKKgoAL z(I%8ln)-lc#^gy4fQn_N|Guff61X${Gaf*e@`rvi8TlWa{NT*Vpf>>&9-1}*$dmk2 zr#%EfSzMXOKdszvDKm=1zcZQ9H~n{(GT#H!W=^&|Xp~dtpN#U5xg3?B&0;~;QZ{?W zRR3g48ESK%rL6p+SiAgFADk>GJveRFWMI$mJvbei$qBY(hJV6?lThz6qjhC7Cr`eA znq}tiX8NW*R7P^-%x@l?_K=A@!7{?@89HpjwO3zv_25`IwCN z@a{3F#WE!hP8}Hin;r*GjRNtV69-2}#r`Ve;J=DNEtaY{xD*Gkj)O;KgUL(c;638- zm&U>4`~8(T_<3>o%i`el5u$%9;^3K4Aii~R@blx~>*C-S#KD{5;PgeJf7{~VJ)=N; zcg4XkjDu@&@QdQ$hvMMzPDyJVymuVFiV1Kf#+K;@{*CL1N{C4d+j2bzxCV6!n5`yh{dw|m3?_2yU^>HG^_!J`PyV~*B zZwKQXa(a`9Z)TiBO|KL24UBV$>B~gCo^cK>eW{4AVw^)tuNLul80S#ZD@FV@#yN!a z=_3AD#yNEKi6Z_d#yMp4QW1ZWaSj#TDdK-%oI^w(B;t=U&Y_`ai})jqb4cjvB0ht0 z4h7vJ;=g5_LqI=t8i0QHGEULgcZv8Nj8o+GCK3NN;}mthPQ*ttP7&9aiTF^)Dcbr{ z5x*BBo-X2t8K)@f77^daI7LuDbc*fY!+191yF`2k;}ki)331nL zu3KH>Tw`6z$#JrBWQ@FE|9A*TpxrvZOjd^{*Is*@%d(Q)D=Q5@{oUWAGXI+Lg33A8 zqVl}TISH2XYgR4=#;Q5vU6z`BglZ{Txpmr4sEoW|4T&$SOR1wVCg$R+8S*jWCZ-xcJ zApk{S5TGL9M1Wbc4T|p&CagP-VrPGhGT63pDUVTvp%6X~I|ib50$jVA>#5 z{^zBAEgr|3Sp!*-(1l>u$ncQ8K(Kg~ep`{KJ$l0An0*DJQg8%#tF88Ix~TZ9k6;+q!uibyDCb7OQL@9UijQsOvW+ z%9@tkva6*&K?2w>DX8vfB{km@h=4-t$VA&up1>NbC(xLT8cTs!fi}`N_HU^F7JtQz zjk4-TO;lU6?92G09QLNSOMNV|W8Lf=kFwD-V6A7<0grVpa=a;W3_!M7`JQmG6*#lL ztbOHn7kK8)N!PNWB|#_0t0E@*@==$0FZQ*JR5P@ZN=Cju4TA3pm$bM1wWGeZ{bSj8 zL+Qq6*Ncd+eCbs__7?baWdCq7Cff^H$|7~emJ{Wl$J#g}gMyQ7^8^~Kn-p{+9wN7-6C&hZsOjvQU#486s-?TVplJ zX4%SWDYy;+5TZ!Rfw?*PVhm6NQ}$UH>X0s?q=<+G5&s3EskujG<)9qS5T$4rgE}A} z(jP?Zwa@pp_`U4TL0)xiPJfr0@xDhL@}unA0Kt;2$7RQ7GcOf-(W9o;1@>Va*IBJ& z!xmx^izw@6?13J%dL3J4)QI|7J&m>;GG_(qfl7LF@}-6QSwY{}&`D3?*fp&lC1VX~ z$&ScuT}IjYMnxlg613kPgZ}KOWoA#*QVRY>kiy^|hN4HSsfWBuYL4uy_gdG!IP^)Zhb1PQ2((5UfhK72r>)Fsq=K^OuA*2z)+h2Ng0;Cy? zodbRQnW*dBobgnN>2f-7FGui`!g+8 zZ#O>LV}OJ7T&RXM;=ffW9iqF}*PA_Dw zlpQf~)pQIP7{q`5S6{;p5`CTMsKe4d>lj;&K>cCqu83BIa&z0YEPQBcI-0XEANB5r z=0FA90ZKFk&MVL|YP9kC0*(dLG9UeREn25vNNo;<&Gu^g&w!j3b|-BhGOwa@DQt4> zI5KDDQP|O){vy^Fl`c#HPHx>QAJPPt_6iUJEmnVTVmN{E{hvT3mJX}G5E!zW_Zi@| zbal1jBLo!I0H8gGFzP!OaEpE)$D3OC9urDgu`gJ6Bxi}__h=+gagH`^5Ys;}Aslzw z#f0n!#OT&`xT$)wXqh)>3doLT#Y%7Qa5)a3Y<&bfT*$$v%<#0JXtbm^Gfa)Ov)^=S*A`(-zsOF~2>ql5qmj)h{4`w>pO{u&C-J>XF`-6Jbd z6W<;x9qVbVO9ySaF|zblei}=E<+Nz;{?y+7b6NF@Y4A$M$pfe0BL`Z4B`bSpC)~Yy zg(w8>>(6)BGO2x+)TffL6^upkBdv+Rmz8=svad+CHp!b>%aM7Nk$E#R!>Km%?=kaN z7QVftuf zz@F+ejc=g+CRt6A7CntJ7qqt@Otdsu=Fh)fX=`v==SSKu4%8P_l_n@{k+!VBo+1%T zWbE8%%*I%1G-g-Y0^b)!+L8i|MSwZ0=5!NzlH_n{vaFoH+Q24J>n~6fjlzHmzvFx~ z$Bm8(m%?!cA=uaRSC>_DJ_2Ry8s|}txW;MJQnpAz?i)d#&*>L_vXLv{MRRM0ZvBT3h`iN6xThxnNkj6nG62OcpIG zW0Kv{@_ZNg1XmbRmy5|r`;D^lmGpF-TWN=0b}7a1H%T&Z$~wQqr50OW=_Q4(fDiXd zwiLPx-{R0wDfAaq!SxYHVB(DmMvJ148!bv&ZV9w@FW=({thIU^2gGvSm; zh9Be%9+iSY;Sfc6Kb@T)j-&B_6tW9HD2lP5E5;-#^o{U_q8LNFVmu^;BAqav?}`B$ zFLuJ1)D>ff6q?rwV?bAo2~z0JP8bIS@8jCylR}P880B4QOp`(vbi#0S#eifT0Z%)m z)!G$fvJ`6Wgt4}3J+h_XemnbNh!lFI6KXBMo!AeIg}`t%7F%qnnEo1UlQGZjsKJYr zjQBpADTR`dDbV^GDfB3XA|@htbQKY>^|DSixTGrvy2jQC8@-YQhpElWF?rDqzP z((+FON3DU@$xi9%#=gg#!FDOQOPKtq0Qw~tg+<{OG>4Z_!6$65MVJD1*T`|y0t>9!wDJ5Mo&`Vo7VPu{G<6poapAy(p z+u*KIk73~@_zA-LACW5TLE5HjI4v-Frf<0mtk&+{Pxbe8l+D_M`$SxO4`1+l7o9&f z?OEm=8q3-LE|;ZcO-Hrg>^jUaQ2KPL_QPE&wXJ;pjQ`D^S;}ZI3 zWhacaT`{14p6!I8cEy1HDer_arYi<&I;IoGMO`t_Nx7Xco~OXZ*Ay5MFv#U>cG7il z0!=%MLEu>27hc2eRn>8_|AoQ-i9n?2FV{HW+NID<0Kjm=VoAYaOjHZo7Kt(BTERh7 zA{AqeMqf1@T_h$4aQ+qcDU5ulWl;2L1Q}Ox;Z`8lwjzsGVw9^HZtjc3=pVyaM~o{C zj0OW^9x*PDVJsy^ih=PmF;Mrm@6Ec87WGXV$t(k7S+ee?&(zPhvM=nnZe;l$Ss;D) zniN(umWj9jL zspZS{!<;!PUvu1QADhre^)C&mw$gw|q0!9UU_xI4H1{a-3vWaUJ^*IvH*>s#^g=UB za0xjUGWaO`UG4s8(mW)URqJnhnwYJ8ij9S!GjDa z@Xv|Dp9LKF=bQLH?KQ>VZsJ>F_&cL;4hrCZXEtGV6n>oeO$HS7Uys6T4f@MX{HLOD zwpL#n!~eYr4~78({dp$7FN%LR%!occhCeEbpMeepzRm2%>kPO{X+%e0n#;iqBPJ}< z4M?LC`8MEWf43;@uhG?dhFRi|-3e-wTK zECl{?6aOg_9{d{s`iC+8{yqv10}lL3vp;-McscRq82+dz{WgQYx0>{?i^A*3U#9^@ zeJ+Z^7aI7NnfQrO`kACZ0*PoX@LRqyxDY&L;GbipXw6ahUI6rFgX_TmAPV1T;6IBL z3|pbI=yK$)*Q-nt)h23aFN=KMggz35z6ofx&T5kHz9`sFi?CgvhR>z`mlCCWI5CVNT2~KujQz$oqOtG5r#eWuY z8Fg_cM)oEJ^di(KWg~(qYn7{|AWFfH1i@}Yx=X=sKrYVRj6J6`{RGAy_2rQ6{$417RhE~?K3k}6B3wypJ@^Q` z-POj-)~lTBy2ota6x2;lWPSA_R%;`oHlwN{Y>x{kp&8wbctMnMx@|U{0lTC;#NK`R(3U? zP__qlTLZ_fuE4+BbJyn{75Y20zI-e;)8^kCsw>ZNOEr=lzS&w#Z?7KtU4i4^6IW(j zXq~Klwk*l*sH=EHi6}q0m9Lt=YyKv8ec%VHYd~FYoxAU+DPM)w`4Y~f2br9_lMa9==Z0IOf zt(0R}zr(tf(p)}SUT|Xf{Tr&V0itYQ^=WkR73);+4IkWv-gC70v3HgCb`Yz>H==IZ zc*C8kL1IHKjk5~ClJM>k1d&?7L{Oj1CMa8>zptn)7)70wvqitJ6yT_5dV zS@}WczFhMUfk?8m>RPu$FK>}U2mCps!b65|1W@3BrPc35JsoSM&|&WWZBn5TOwP(D0b{G-&P!+ zmr&ws*WX3Y81h({i;A#{TGbAWHUxAT70Er&(k%QR06F^z)V8ok$DX7pd@b;0BZ*o3 zyIYo!?A?orx#sz)rLLolEMq~&mHq?$ug z(22>hJ6smQIDq@`7J36lWfIKC{vrWdd@Vpy&BL(Lo!&)sV$+W+|&(Vf_1GRQD8(Rx`d}iZ>+#HpOb)iQQJ1@$z?FhLW-#k#Kx`%x!9m3Aonr8BJl#ylS(&_;Cf+c;H2dVgh@lhorvY#)yI_v#;dICT z2@F}(zgaJaHV?jhi?$2jM%m$3wluc|_E-aL==1G#Y&IMIM>#Cl{8FgyzGRmiF0pd^ zgo~wt6L4xcO2Il>%Fx8WBxlOlXRsb;oS ze-|SUHPC;DvTLW));-QyOPu|Mepa?}FqSB5X-hvbPT65dYCi&1Y`Qc+Yx(~{%XU6S zNoD?x9wj1#90#YsekJo}Bo<4{d$__wBSVU2XTsj|unj@Q;X5L($`eJiekcxZmV)1L z#8kF*mqMEvl4>sYDu*ghU@VPdN469NPKa5}cn$-EE2hEwhTLMZ@J)2G@G*iZt05m! z@K5Ng;!wM^C=a>aN-IXQW1IB&9}t61mxB2$M7bMDZN)fd1hwu}j%jl+W0n={{&X54 zhCE0$;|>2G#l!zcNgoUUUz9GwcB3XDZ213Ys9C5C94{I0Bbp$De11l5`+^fxLQd($ zMx0{#$cC!RzMnj+UVqK_!?6o*czC<#*dAHgBuDf_Om;jFw{>!4SAsmC0l`B!H*yZ} zh!feD2#J%eTRo2BQt%jhy>`ladQHvL9ltuLtN%TD33B?koNHB=J*(a(^E*4g1K0I zNA`RkqDqz)`cbYRGP4sAWX>0TY805Q^^XzCl7a^WF3VEZ!m}w+rzOwtD{5ez_%W(s zo==+Jj4H6~N(Y9}P?U!j!yJtzk#LC(UbhfGW3-C>Y(+EXIj}nthM#G68lq+=DPXY% ztUR}5v+l$Zp7Jf2SYTDt=5`z_uXlxqpN^V9Ih-oy;<^;eVhJV4V|+)T2n4Zb=L87NZ!a5$_Xg z|3ktUF`$04Q#*zXLNkrX#<^Cc8m+EGdTzV$8jVFy=+WHG#<&jX*e7o)?}0JVD@U9c z=FYKcYX^IMIL}m~j{U+?9KPLJV%>!Bykxg>*E5!(%HS#_7uw7e01Iuy6%s1URS&ghIjQN`U&K8*RIs+CM9t$lnCG{vEu)sosjTkI&TnrlK z*Ra6RqfW~*qzoOPzXLGGgh0Z;&@BLf-`RSELp^+(VK1tL zy*PwvGR^fl&?9syV)hz7tvIK96`SWWO~6`&W461Y83)1KIq6*uIQE-j_B&gu=|c-e zL&*7*Fod5oK=X|y37T*E_Z{ZD*{y7jv)?=7?YA2oPnSY3Ap?#0)y0k-cjPNcMm`{Nu_9b*Yc{{GwJ z2*&{7mtum3QIsv%&T*wp{R~E*Ou?AS?mVU*yBI=JqTZIBTW1awdS5%h2eSu@u>@m! zUxBYp=c`iiNvtca7wbxwia`VyHb?ZK3p7O^<}=Vz1Sf*aO6#P>2ayy0%YcaCgf%ON zyL954)%3r37SpkHt`{n%S_=0RlVrk11|(_HercR@~uIGXCJtMqi3U zh$SkVEO83)4!FMXz2bQ!uqRF<;#Dw|1HaVY}k=r=kz0cdoS4s!4? z-*DC;+@W#E++?lt(>S$L3>1%2Pev!}Z=!PzJp&ieJz$+nITj}&fC<;FSUHYWFsx^7 zz#^18Wrr}$=KLH?GyJ!w3^@^c1ZN1ZQu4d#5w=b5gBla1i)!WUdGWVsg>C~Gk6Hnn z3dO4Z{S%@iq?co}0dT{dX^Ud;ECZfR{A6vG2~XC8ZSYjxIagWr&Cm^^$f)>s*6L#7 zej~7XIyG6p5Fy$HlqG1U8!YS{EzscG64bKx5xNIIV>6%l^g(}y5BdeCh3VRZKY$>Q z_G3ZEeh6nfrC?u-8Tg=b%m;lHJ)vZNj6|%TSY2T!ebAoKbr1NV1Q&;8_@T#z9}1B_ zfIL{hgCEKeoC_R;+XeuwD3h?7ie03e(r&p;f!LeZBeQuE>KhXP} z1()+j+7Qoxx)SNFh$m2Y4)9{$=V5rCGQH1pP+;vYdY=RLvm2@R!o$G#nqgLPRiVTG zq{^kLB79mwlZ#>}r>feP5zPghw8>{n{(NwZU-NBf@(R-vXDt2{>58x_CO) zkl?v{!VmO-`+kJ$OAFH|DbzaROgc`VD+7;C>ub?^Y%pctehg75m>?u-t*m^fd@U3aqn^4)qf23%thzeN}!DX0$nQ1d6<25AG7A=D4e@(X!zCI2y`d z#cTt@fHl@<1ILs67xLPID5-fD^BGH78OR4;nzs~qurVX2!P1@41~fmg2AWDUyrtE$ zI?#?58_SPs;qiySjBgvE)V^kyHn1bt;v|5Ov)KBg?EAr7VwAz?_mBruiX3ANS9)wM z%|DLAVwt({RnmJJ^r8#7K>)-;?u+Z991j5`1z$rhkJ7Nhk5yhblyOc;I29*J{W*ig z^r|80Mqc!QpNQ!sPTFhNV2*^TCXbLOW2r$3-U9+ys}q|#ZRM>ln9O$L2&SufFVuGq zx_wa}C^U?=1L!cYXDo;-+pz3$-~%}EP$9hgg8MlSVv3zB%1OrQ$(aA*R*t%rLs+H= z>?*=ag-0EHNDd8N%k>8-crS#&-c z^#IUt^fWw!WdRebN7nVO58&s69bi5SJ(_y}nMKK>Hs$qhWv5&DBDAx-m#Ae!QSO0v zlSIE@nO7jP9;ldqlv}|DNz1j2i(0jaritRrrkSOfO=D$In*UtZaHI7=%f>kV!=^V_ ziyfz>MbjakE;x?fMD&@v0P-S*N&yR;Nb+K_G}&M1a(p>2)fFCb8s3qyO#p@}+rbeW z*?|O!QQN!=&RFwaktIdL@Tp1=)n~H=Rzm{D4X`yPnq)z)vnd4W+N!nDK{5S)4vJ@lnC6W^gtbZLU5PBZ znyh5Hyy*vALz_jpl9j@%fuz3ze?;_oi`9BmIilZ=azsPj%5J5x`Fpnm2baWkOsrrV ztiT1E@Tm6YUD)E(tm2+*)c^LXdHQeJP%T5B3XcR^q!?iOG6ZWsp=RLukIw5`;{K>u zX_z9bn5(1G*v=XOg~LmNm;*6@Z#q7MQJxf(q3J=`h1FQjeOy>;#Jm*k9L&|4D~|1B zFw)v*K)tMXlYNKfjzt`-%&7JoSi?>GWGk+Rz!-#I)u?``>%WfELw$jzrLG2dh0af4 zwD+1Qvl9`Of*%tf&QI8V<$h|Q!PGvbg73n@8k(oHA@N4-ohC>hZj(iCf8w^Ft9iFr z9V_O@R_)8CqFRlRP4u88cfAmGuuu7v^wN3l4VnhGP-NA1i~%PsgzOvqz6`H2_%f{z zB;DMPQE+1j8Dwubbs@*m2=%^|CyTK&v-m+GI-qD~4}sdb3T0C5U^zpmorsnIy;Dhs zcul?2)6hF;qoH?<=D9dT8vc{=DUB(gQlWezQkaKYseG_G9Vs8A(^WL>-`Vt!)=B^T z_}|e#qFkYWG>Uxb+4Rr5Nl=a8EbxW?DK+%Z0skl{pX<$f#p$1sajF$JdE#0J6=?m| z?a=%^ibFq_e*y*cNpw7*p}5Fs^%e|)vYCyM#an;lcZRlbvNKlXeX%s267y zxS9uiV{I6l%C9qB$amxih~9_G#aL7dp8{MDbx}<>p=eVz=}JTMcetrGSPJbB74FbY zrE$7xE7I7nf>rvL#8i8a5M{2_i=maotPaXV{|KwjhKfqwjnHN)tJByd=XQ99f9$$V zWQbcH%~GeOd)410%j$$IuR1Lo=VIocm%BcCCMJTl1Kuvc?$s%|ChD1bl~zx<0-ou2 z9$ZZ1TCw4o)_avU!#TxCg(h*;7EV3TpdJ=X2B&~p685JjdaR#%91YS!4@WbdQ!fHo zJjcHB?ZDIgwb2f^15qh>6O!R7(K$Wng>uj?#Y`_eu3cUktrBMJ@Q1fjF9z!E!X@6F zTjx=>dLjoCN^k@K+Xmz#{6d_)#{wd5NVb+AgfhbQ;Pu71J3|LLJnx|mwtV3{4sCGf zTP^cvM#sZY)uxV8Gq4L-%$*lc*#C@WzNdq~USCqNqiNn%CDv`2%Frv1>`P!}!WqAo z6XBa$H+u#&xuoUQODDQ4$?2pA?E=kb!x4~3iS=XdY`7g8E1t=%W378aR56c{v8b7t zk;7_NCKR#e2k6vxHpVbsSKSA(GtO)mW+SYf^AQ}|mmoK_+bI$IzY-D=J0Br@TIHCs zMcJUG^9GrkxjjsY-YzCBShUtw)&N{!uLrms_rJc@T0ay=91`waU7LIlXf6TGD1S_P z+PB=?Q8U9`Xgz4qniZqfCB*t!Mjeyilgn1SXRadYrs!M zaNSjUs?L=hk%9_n$bmLVT3CUQM``v%TCj4y4dcW{(GTVW>JZBfJe^ zAWub_$N=~hq)$XflAH+qDJC((L>gcxKly2>RFUeC9{mj+I|m&1)GR5q2#v-%qio&b zfh@}5JFE@13oIoZ%SA})#G%kv=nNd)X!+a~z9(wgeLLmEi_r_eo@DgG!bgZi6>t#w zAz!l6`+B5l4}T!w(EB$aDg{%?N2M{^Q$g-+B7*z9BazXq9L7YY#P?}rUsgm*c2~_# zsJbl?(5eyE$iDQF(E6$o_Nv=#NJxT{$)duuyP4^ydjNZl5a?3uMoTxc;9~xOcL8 zmB5EMZTAeoDY@gOy_c4!E<`n5RjJ%#LAC2=@7Hezr_6N9GW7}8tcENs#wxix4s)MQ zYi_U+Y(f3OHo?geR{va%gX&Iv>M5jO@JUTw7-iGXf=xrKypP$SJs-1!FUbrfS%y}* zA4??v$df+c$=euxcT7NEPhJ5n#rIo2AQ$u_2!SPG!5@ua5u!NN_NU6}hqDs3yQt7E zLa38{ld+L)xa2%ng~gWf!YeNrfx}QiOnGIoI&d3~gjisliU}x3=4r-F z4EXNi!v!vE*R7tFD@1eyWiUMC-(zbz!G&+e{-T zF9sv$^JdO`BWJjCPVCQ(F>*SwYj_b)A}!>#8d3Jeabhn zP?5J}q1()feSgSviE?tZGNf*F_^OXs6SuO*J)li&Zv|gR9OoxaV?Z56(5sf9@x|#L z?3D#_AhsSXlFQ1xWNf?llpU?o!W!_%3lZ`vCE#WsFFd}5;{l69Oc99RikjnKuTspD zIFWDCU6F6HT#?<$?v$PGl#j97egfCFYEWw6gk}CPuVa$aKiOD9$8O4=p-Qi-ab?sN zt!n62YNXf^w`r)H9G)X8CoRtciHeVKHwQHtrer)yd2@>m(?xYCphUq!8N65hFoX&6 z9Jb|v%`@M#F}PNe&c*~PDFh(wb$rH#gSHfSU%=wpl5EsIG!%8JT}R=p z+S*|cW%YO2Bg2FDqGWUmR>(Q~&Gy2{%+l(XcM=|vanUv7<8%TGGo&K(J(IM)0WK)un2mCw{?xys@aYB|%7*a0F*vvS z1Z&mubQwEkfxn0bb46_&IUqX@O98%*W%%ms(1gf0$tl}7n53$yNO9Gmzb#UTr$Y=< z<3OrO3j8dxO$VuRgVYu&Kp~R3ya(BUQo2kaJ{E@vV1L;G%#t`vX?YUlLI}~`L_-h=ofqqh zS9vJnKh#PADM3eB-K937c|8Q1$dHLZ4ApVm2;(6syaj}vh09n}3ys@NMp5kXWGy#Z zMMR_!x6*4%$)%q0NU5Umap*9a1DNiF&bHSk-wD(oaIm3vDKmYG5E@}n-nz_eyrBFN z(dQ7UHXi96Ab}=?YptweKnv17;Ks;Q3yg8;IL9keIrjCd;xQgFX|Q%t5=X(0j`d0gC308?0ufD!2R|I&WH20izGW50!= z|E2wIlmfr7-^sAu>5*Mooy_-Yl;2^#%l?D;zO9q_{{0!v_bRCGF6KLe0%GQyMv;Dd zC;P2dQ|7$t-LT)=;_dg>wBN8K$-gw%e)C0%v)b==k*%}+UN2x>?Dvy#h%x(3(TZAn!+zuFJf$eIC%KdT z9tlJ#*oWw6vfsC}t)~56`u~Ide)aYLnf(^>V`)H6O)YA4D|i0&lP&l^NbjpDz5h0W?>%EtpY zX3EzJj4r0UZ#>3JCXIMg-a=E}dA*sJFT83u9Fnr|k{mbpj00aFbw=tc3l>|k)-ZZ>-`KMRhrubl<+XFYup_9T(<+w6IbYQ8g&{E4T}A$E z*6HDj7*whHu0T)Ef)=n(xXsyj??E#!X5bf&H-d{)C3pxf7P+KKh zy}ScowEJ?lJ8u10MZq8AC{8kZa-e?#{>AmjFHj9v*u(pe(!z70q>F>={khWeU*U6w zD<2Ci-vC1nkG8g)Yw#J1M#cF!NGbTngZ;tH<@>xigf$q_uJa(iz(YZ@)r%z@(N`|q zlN^#Vdp5TEC^!(BmaC2REmvUQpqsDy*cH;K1hNJU>-} zgYaA(kZRI#j{x#?B4t)XiL${%VZu`u;CpxY48ir~C0+%mY`WdKnnjB`VD)MNt2YwW zgJk_Ys)N@{{vjl50gixF%Z&-V{0J(Z#t1`Tz`N4&^MjlHZ{%Z|6B~g23yz|RXft*}S}uW{f*Uwe^dz>G zu{iy3^qy(1j1#O^$;t-iLYIXfZgN(hPMNg{y)7TxZrm|NahV>^4=`2yBzO&;1I&@>DUfb#MwE|vE4H6R&^XWJQRO+E)W3^))7Zs zcj19UkE2ZrW<%JG1BV~t{DhbX;Jl$!Gs>!eZp=HlitJpTpwAakr+Ln>=C5X-t^Hp( zXZSJ)NuB;re2jC3gHRXaoZ)2*iF1a%5b7d7V$nOfvdH4UF?S~~1Xs@OjTaS<$l>2x zwO&RI{r!3Ejs3ISn`x;^P3LU`*|B5RL0S}ap5S!u&X!MWXJEi;@6|``A?#hC-C3Tt z;P?|hi)B8ZkA|_uYd${>$L(zyW^z?O^pUZDQGvn)A#E~?RntBt(sUyAjUn9;LvkX- z`(nJjsT{3oDs$nMv`g8@*V#WG=f-_N#?sXb|AI^i)&9A-rKBU-bUnAeg9A4-p~#%kearU)8Y zNKp&xjl$j5W7-HK?=q8AYo5sP7iQQ`Qr{E6c7Ct*GEhS%>PDm#JNEjoL;(*I{{->h zkK!NH_8YXunfT8e(cwg0@>`%jE&yQXee!h%bIXUKi}T}FnGJib7WQDK@8=@ZZOCLi zyMXz3;c+<%FCv_qHk$p#sNZ4U*EU|ZJi_C!3-)gVM?9(pt6X!1#>0c;xU(sqx^u$s zExZ5}z2V1=cgDkbDptY6k#G)h^cjzt%c{L$1ehLhW?5DH2?PNxRqa;fLI}wtP*a4Q zs{Ks^map31H9~__`${9!ABdw7B+YDu_mL*TcoRC9Q^`I<1hWeJ?Zrj{YGxk@ftD3p zj`sOb@h0>#;JNV%H1Y9DMh`h)?+H5AKr41tHehuiJgmLI{w#8V*c>VNEI_LLeH4qs zqgUZf)SQCCsYsQAld%z|W|klv+C2YUY^7hqVsSb+oH4S@tz4mI_5fiXNSTYr{FkCU z=qy|_ZJO7sp!fBH1b4f*ulg_wiSEy%&d;%7DDFlzljE^isy*OV9~UItIQFY-Cu7yZ zzakCm%js(73L}KAf_?2xqQrvUpQAQXa6TUMb*qKPK#>Q*LObB;tw3pz@62nFtKg3Q z^AnXj`UhGQrQjSS1X^uUa66g?hT!nbKZoJ2dfIqk!tvv>S3%zE0AVXA84({=vF%qP z5w%(4#wVQ7pnY6Kj`ai7tq#10ysg9Leq^R5@P=i<3&cCz*l97GS*;VCEx zkzcAB4XW<&{n&@QFK4{zm#OvyMAeH!bdey;SIH$NE;6IEG=ZHN|WaR~eM0*BU?M)d(@$($pf^MzQ66?M!-or5=$6PcsQiOuu-;V?7(hVa;DY-arn zvgRcpmzo6%2F^mDpm!;wNlI@SUo~?E*|yn#SwZh9CVZm6 zx)A?Xq$|D8#kbMUy75oV+k-e;IuWhc#$97_R8s1puh6VH`0)J9 zg?0QKY2mvFxRiCc)Q0=NTEbBCM*?{0#%9BW?I)?imH;_TcRLzp=#JwszrIG7Iyk5d zel$G7>WIw0P+k&fOd!Z{9KiYA`P71H`%tm1LcK>62|l}4v{%5N@BIp@rS!g6{CgGt zZL|-?zx;#Zcb6upnX?ebOY?OAIhqwa`_J6VRMYOb3B(H0eE6WtPl}}Tv6ial?Lye& zi{O?eo*;@SIAM!tNUntB;x7hJV-Yh=fPBOE))S zOSdG#v%7u4VTau+ipoT|(e45!#avH9lp}%1AK2Au=5K+9U+oaG02wGiG%6Cp^mw4w z@Y@H_ww1(0I2&ObtC8_2Vp(eDZ1g2UFimMj2-5JhDGfLyr|i?7L93AK(?aAjYzU#{hAEpU2oxS?X*6XP2U&jyps-bm_^6qMMj2a( zq87G;zO}AcotGLjadSaa+lmXarukwW-34<}{nOoQ=FMPOF;1q1R-pc{X0U622Ekt# zwXMvg+UrCqna?4HcHN7ZFluSrkcY2qg-S`rt{7-Dh~`^YVEco#_zJ9Us&)$?1@`Xv z7i+4}7_2yO_NX{Rna4;ggzZ2iAi!$APfuJQcUI!h{#G>FBGJ2f@TJPmLZp#whHY-d)Rt4 zuTXS;;rWPZe}U4`|A-be+W!hL|CHWuAf!(`inFO5ba84mZ_SN>Ujbw_?RJobY#v5Q zagM@joPN<43q5VWK@{u~1yjaQ@ETx4BA!Qz*5A-}n^@HO$kC;!+ga2f&{DifVCW#O z_BbLHKkC(JdhO-qE|cGHL0AR<^tB)Z2E9-xEw95fV)_uY0NUf9C<2UlA0IXCZBd2H z9UzYi%>)b;qCB=|E*E%d72;#BViL4`9XR5};((eroDj9}W~M7?Q$VOa^ASX_WN!a0 zV&wrfb134u=uZ1~Q9$7geBc{o$iCFa*bdQ%dKa$CSL_#0nCZ{5Z}Ym7C^ou6FQLvn zoDUjl&logD<3kD=ppa@%XmBa1PgLwz?bo7Qhuw>R=XU3KvFIZ}4_6Y@v_=5oUyFXq z8)=Yw3b6LfkMJ*iv(Hp}B2uZ?Y|ssQGIE;hj?wq1c*8U{v*CHwi97`{UU@v{ag=3B zIet!RyKq&fb24E8@#r*%N6v9@%};w7G_t6L5)kkhnh!^R#axH+QQ^A=(llbilg?x@ z;kgw&LCC4vKQv&N@YEY2OnBBAA)45`5fmmC;p1#5a)}8K`;HM#c&6kV39RD~2g5MA z--wB#{SBn4Pm8WD8>(bXfwo!tO-CSrJ8t380yvytAgNy&WObV1Rpob@mb}2cS)u|F8+B zm!PJ7%oyAR(@cQgb2soIu$(th9lXw9dktC2NElNlq`nS(6rZl>u}KrMiauo>QNgLi zz(FJ+F9NBdQf6__RVXnPaJKhn)CydzNy+gvd4W$;m2bg{70G7yBL&&Omw$T2)q z{4&ACm^Ue_!^K$d{T7Xz($XLM368b!-&o=f{9pqzU;w+UYqX%qhF>eHnn4YU`7R3Z z`cB}y`3fwXu2b!M2vF11>!J3QZRY#{b(}(8L-ZiA?B^3;noHTK>`;1FqBZ6efm&m_ zm?ESaQv~MmM7~Kh2p}&HI49Z!*gs?N#ApD!)dV_=xW|xz&N9r$5>`JGzF^SGWxUQIhP2J zeZq!?J*+<$^#A2NV&DyE$h_`o!W6}RCBg**?Sv#L15bgjnszz(i6v|tN<|3|tVKf!l3 zj#C~*Hng%DpTklQT$}ks3Z5n`bFOHL6k;=xeIv3{@J3_)k05^ehOTQdgip!A?|#`g zq7Il0Y!M%H0pu*o!p7lbW zn9{IJ)Cc0i9x=N|pMfNaW?6}tIgjKZB{$rvGnI#3G4DO7J=+4E{Q~H^)qWqa`T@HS`S6bEw{tGVto~WR zFsq-_r(oa^Rwq1EFl7*F-ynh^V6=Rp41AE^?dS+M(lGX)2Nztc=*DC8mm(5cuMB); zFls#T9r5p%_}8UO=?_nSY@dXojqXcq)Q8fdzoU{oE;bS7@>#*l%~+Gg%w!7=Z=~}| zfyc2~daB-)yb0^m&=X>2asdJ^WdrYWPR!lx!d(+=vqFIy z=b++WfM1X#7=(%Crw|Jm@qtHBV`bo5;@{ul-$wgl{L8;ad$}2s7V#}g$`IO^_SChU zdyPQ@H_72!%&Av18t6>M&)H0Z(;R5U)N4Efc$qGDGpAnr5{8FUJDPT$IrYLSTYb9A zad@`waztV++XScKNoDX8uJA1#EsJmthL){E0$WC_;#-fFEker_EFD$xwxF9AGS#$Y zx#%lCGP{tEIIxzoV=LaW5tT)~qm}&(sm032xkqts92(9LizPo{dUyjLq$B%t zv9kyE@0fu~q6Y(D1#Wh_rT0^3Ll#mW4$rXS>Dy_zV;v7m0PM~#utdN{bb;9byRHk& z4p<++0`*CPq~i-w(A;y-$I|1^U)6UPv&@Z7*@fsi%VI@ zYA9#tNWx8+^)$4ICKFZJhu@WB0K6KD?(8rem`CVKkU8etPtjgdV!r)!T8}CIA@J+} zeGRn+V#2SlAPxrhbknb&LciXhL7#qloKL?Ij$X`*oucX3a1az*wvo$IDgacjH;oErW!%`5GUt<$a~Cy_mxUKRy7Pu@X@9;$I=XYAG(hYz{wS<%%Zu zI=*r#I@UG0rsc-`4^5%J1AJHe9@Bpn{x7o1%4s$8D+biU%kk0PK|5Lk%(}YMeG6K; z2(H<=ZuKZf&Hb8UWz9HTzQ9Y;#&(UpAIhK^ocC>q8Ju}P?uUUg4M1pf`Ak&(E1=Qb z-2{78367u(rxz=`-O2-SxO(MymD8Lb2$?x1Ox;*a<;B^Uv}Qm7%A$Gu#fF6wg~0A) zUX0>sc0!w3s6R}r0As4`U_ox)E!6m4zy2^(vcV5=uN$sh?_uaFyhmG}(vmIq1CRL06H5ULfSaR`-*(3J?i&SLmmlZEdfq@}S=jrJ#_^$3W~ zJ?_h^g|{G+wm&Eka!CMxEgzcW1?dkn{SzadxFY?@j`SZ{z#B&TCbIy2GL2auC+WY< z^v8|#C!*;E9qA(f16}f`b)?_I{9YqHH=3VMbeQyeF#Rec{l_bf`sr_Xq;CRDOEuEp zj;05Y9=~7Oala5hdkSHN_d5)}E05vBfg0ph|CO^84R^z7U4buzlO9DKf>Q9GSh>JU zLip8IS%oc;`{QXLS;>43ypmP^99-IR5tMNSAX7DG{lm*Rse{(-#A4cTCy|ni=z-f z=FP#sA`^Gd3V%x+H7)Uqz7{M#6=C-Q>reP)-(uc73k^93gknF3YyUTRuT6OrRpPRk z{VPO~p}c49wWzXo5L#c&>G2N>adPp-P zMsp;h^v5UpS#qUGlp#BKqx zYBlY*AO_a_L@K`H(AG}YY=o%U^#-wzSTm-eb{~`AtQf&hNbo{~poPt~UkG{_pH8o@ zRp_x;{oI1&b#Wv?PSo%67&%eDiwtsa_a?cI(fk-WCu^!-ZnW2+cV1_DpCD1&S{ZHc zMnua^dXogb-<$MI{_#-_Cy4rih__q#MmC%86m|V91s7(+LyAz(v7}oOqdP8+Zi=9L zDd@Vxb4b9@e|9Ty*e^o_t#>NS_NzORV3cOGe({rfOzRjc+tfmne(0|{WGcfQAq{dz=jcfH)+avAU6s}~qA z!r|7DHg`TxbG2)Je7Pb5Mrq|+nDE74o(e2Au&r!$VvUJ|JXeEczxMI?R~?p$_aQ_eL$O~b0#mrWcn*R%*pHXM=~b0(A)MrBPb(yA%g0#u^4DoeYikl zpDF<32{;NBtJq}$xC>K3`#=Q!1^o5(b!=$)AZUV>mm2yAQ#s43tMQLes|==gT4ccx=%YMh_M4tOdU!Y%JbTnRDvvewFBy!`)Ey|I;*TyJcry8@>$lld1E zFDAjb`kmQhr^SLdE3m7zIh^_)s{^RL1+O*Yo0f=Fe7AA>;==sJRwkX^fr*UQ4#irR zjthAU*#w}hZrR!~KSy`^ySwnbxfB#XjTI>T3xokZFok;qYT754Ko?$!rmeal+EQ&i zWWjKYZ$ikh8|tu9{hrfYF24f#v40X;-{=mVWG$sdkE5;OTX@urH(R-D+;X8g-a73W zOTh<$=~lt9&E=Ho6qs(~WrH6PCj{U+RMGR_%)+wGjV&bg0L-Hd4_x>^BQ$ zahNpPzk$^94?)cgVvc4QLAnP2U|JYY$w0?u^SYpnCAnmeqL*MVA5Jrzm&^bHH|a56B*N2)jejaX7@P;orm7uRssvhi^?N zlODq3NQgMYw7* zYP63)2oeKb@_5cGfXx3Dv`RxZgweo-qrQwqDrpb*fnHrv_b#MaNpmyOSS&nCY=Ae~ zUqlxEHQL94B1iOd7(TZn%s&M0F@wiW$4LG#plKCr0f!A6=y-q*>i@*WFpx>#p~{(u zz$Z2D5#-|@>>Z$q{dW`truG9cck_bdEJrHdwBU3R=qRP77)WizP)eN$er*J0Y4Ir} zBijqehB4qDreURAtTrpPX`J@9L?_uN@5ctHh%3EjzbKnF+aDr$L&1! z{G-LPps*G>SSe}IU?gk*f{(9Xfsm;$v7P_~3{9_aZEKxigLVy&)Jz@4;`}H6)t`eh zF!Z-uEl}$Dt3~bj(IUMy23M~m7y}tl>RwDv@ z61f0KJ*~ei)^>qk_%=Cz)hr<_PW?S>!5Q<~m4I{W%Be|6q!;1TUllEJvz)@`dL!S@ z9>VVJYTp?S`KGTH2Kv%Trm6Rk5({=1g#l97d)7Qh{0AEfZ z4CVInMYPE{{0*%XcIQDQ(Gq_#doX^c+f89HbW&Gayu}lqn}?s=*8F}$DbXZD5r@{# z|FzgJ!Ea}5!2_rGsvyV)B;L4#w8A3Lk=Je+W&9O6`)I_D%* zH~i$oT$S8Z@h%L!&fhPr0n;t|J7_=+?TY>iLo`SF3k=av=}$966QuuvAsa)L2=O%* z&^Nn4SlRjt{Je-b_5f8mswXxVAzP-GS@jzi<}+va{g_)w#BHfTM8zjxPR5%Rd*Ojzt_7`0cmFccTwL@xx86@)A_; zG1-TR<1ije3PH5nN5Sh;^QFZf0gZ2X_CcYzVc^~BvEpXV?Y5He1ng8cdX-bWccg4= z>1)V&u{!gl8&7RKei3>W&(Yvt9OcJ*Q20MQ^Q1TIJBimhW^R*}pFE1jlb=iE0WBp1 zTIt$V%l{8=Zvq}wc{YA$$OIA%p70uNY=edp+eASVjmns$=D-;^12cdvDq7mo4nVDTH^~i>DMm8R7;JOrKKtEd9$N1kpfYi9N1skG2M4H|B(5vvWc|e6>Xi z7ojt^9KTZts5*_T!}_pzz_-&$+tN2}tE2_XgN2LSR1sM{PVtcMfMf-H+qK0VS=&|0 z5gtRn?Ud}m!d!3ItTj9Y_=kK@A&Xms<+rLlsh`o4vo=n&-P#p!9!j4Ao=T+=i9Rf$X}e|OH!`9$Q1`mH+wWP5;KygTICGBM^o50#6dX(7)Sy6@A-jk;Z|TNmrr5Zx{^?BRZ^fVbGsy9uLJ zsoOvE>JXc{b&FTGuJ!8nEU#gQy?$%Dm!wF(-@Z1}Z+#D+3jEq;reS}N_sMwtodEmr zi(oN+wmZzWZam0sX662EvZ4mw0TI~i#m8XK8QP>3{^Aw*SC$nGdfK2b;V2B!n&$Ue zO||O5*xiI8xtagJpA*6judFURYoJV-?>?!z0=4UP4^4jQA$=4wApQ17!idUiqsQvo2en z(a3Zc@t&0;b6lcxTV#tdO{^p{74&okJ)I#>2hR2)HyHLn!y06r>$lSlJIimu1I4HN z=x&L1d9`7WRqJS2vho!*4R ztL9@3vbTt5Via~yjOD6OEiBkLJKr6|XqNjw18WlA4ahOLu^013 z7E-$cJuhRS7ew1Er-QFcYnmlRJGJ0`f~*w&JJ9ytfH8Kp_Srbw(2mLo1wk9WE|>&b z^K&vFv|5`krjh}@q6LrhnWixiAt3E0iBgOw>(CL-!3v&*&C&EBmDF;|sa^MuC*hFLPp#>C68*k*1NV4Z=y+lruPAuPdEAF1kBO}KRcEyvhn{qJ32QWP zEbE2%d!Ve{XjwCsi!?EFR;#rwaRsX-qiLo8%MzE-x;i+4+r${M_^h&vqnF|ppN`Go zN6{gT>*iELKL%c=j{K{$)`~;;!1_cW+!`F7-Gzs_=%qT8+)I)T6&caV;dt*#=0N94 z4n$0*WDF15;*c(q3~8^eL`D&)KOm8Y4bKV*M(V($YUNPxd(hSxa`M-ye2EIU+6?1C z|Gjj53ZFSkERn1YLJuNdJtX$r=v>@0%*5&SmsvAhQO|-JocVJIt(BnoYeTm8O>0%# z`vXG|>E$z90@`b>X8nGArSJEwF_#1{_Z}{|MNjh!DQJlM`}eM4_~Y%e)shUwkyX|~ z)hPUsHVCp+;mwX-&~|)4aeK`B zptaW1THFfw?kY6Vs93#S#fv_&vvc4`(U*A6lc4_qi?e=mMQN68 zSh`J(b7I*0JHKypqzd(_-zU>s@Oc)-urs$=x6i-;e*b7Ydtq{LFF}gG;$XN9qGlmz z4Ij_Zy-2aH)-8a!12=G6>z>B-eQR%d{7*LS?nA(+rKU@_ z&PcZR#JkmRKwm^e-ER@UcQqZwL=ny&P;}TaT@G5y#i$K%0+jLszKtRQn0(Jj-Faonz8D^Y4NQ$3j=N&H|@Hs z5{u}NL;nwvQ_@<4IS=q=64B9tw?I~Ir|pp>Ko3@&-?y{&`T%BSAjUv!%HXu1=RM!o zYg;)4m0w2#qMEa>0}u3T{n{ik9QT&z52*e`0dohTOI(1??Ez?~)w;g{jC~zeI_Hyq z0}fDiAnN*%^;RlGr_33%Rm2Uhg#n1dV4hI^=(M960?x@HM~22@CP{NFZ(+BiAs|P4 zUTi89{xXaT{N)w(66=VfX*GDKoN{K$o(MG#uRuWgFHck-vNjvVy8wUP8W;@!Q?(r6 zVmLl^F_c*!;mkTKm3KNG2o!G|FW18Ok7hdSm51N`x>3aTG>SivNjzbCI=E#%=AGGM zUnXC+4sbz~Fpk_1)jD97FTowLJBe-=4#jlCDqy~f`e18kzEEq7n6Yta9uXpBEL?p& z%XUEoXSPL*`r~KceT{QDU#YK+OUw;ajm+C=pT&Y)1UZL{AaR8{0c zOhAB#PIFjpS4T_gUTxahq+~m6+4j2q3WXX#H|wSBaW}e)6%4<3U9iU#moTs*-$E&$ zP2h7b)obr52o|sSDu@Nh-;Q5|iU1)yQO47)EdZhzoN;w_0aRd;Bl$1MEEis^WA-S+ zQUTw5Uqtthvm$@yCX~XF`VaLVp^nmLKf`~m-^KC+VByX9e?})&-A~Qf?KxsUyf&#@ z@8a%U*Zj-C&#|)Q0xaBsu2TC3de4b>V%h`DBWujYfm-7d3V=t!R>^bm{(D9y8RLf= zXJz7@m*CQ^(O-&^7sqe(y`X2S7!t8YkiRU|Zk9@Ct)?RqIs5LLxNk)+5`Ua4WuX+7 z6eY3#E2aCk%-%(e)kx-e+k07Hn4dklRn*NE{s=^wf)K%?tPfeqU7VAtbqw0s?Ll`P zbwaQ2OSUsTz4O!fd89%Vao*{Wi_s-*v(I+sS@dJz=Sb3BhpYpyH2&Nb?!N>ngu>Gd z_dGwSP0e_my06UbU*HK6rr;6MmW71&Z97fPJ!q+>}v%5#Kx?1B^+}#n0{#n{1-f}Ue;_v)~z9^ae zMZ9Va#gq{_T%(^Jh&*mT^JeW%Rbw|0I<0;W^w;NR@g_69@=!K{yV5=JZ%9L^t_sHz zeQtWOg&c!kWTKY%tZ9ybC zvY$_Q-7Ck$41cDtvu5OLEv)iO$ku^Ehaa}wp=Wl)6Vn;a3;r|+nuPuumqXTM$I>Ex zUz4H5SCVgVQN#^u1V{YNI%}_swvL3(scPtsoKK?-RA5E`YEh7Th)TNl`gh1B9yi^| z0bRo=zxB*vY2#wIR(cG(aDl;vH?zwtS7&(8$7I_1axrfbszW#y1@Q?qB#j2~-Cu;; zdI(*$?vGO1>Ey$V%tAL|F7?weEXI!$JQ+rJ8wZ@O+PS{_6Mu2EEjmn)k2gngR zA|Hsseg0EkH4`%a%oLp4*@dN_rw^_^1BiItfrx8qG!Q-|L|Afgs+{=H-(;;gvgbd7 z!`Ku!Q~(Y)c%pCmIy;Su(zF_agNRfx{FZ`)W2Wc$%ognhpIZOUFR%YEiQH7ZQw0dw z!Z?`aOVa(meKp_G)#5Le#c$yPsMhDRAFB1KNs|TI?T_6yaA|=|pS43RYWyAY)f&t4 zUeF7FsrCJ*Q{P!%Tn~DMd6B6#et1d{OaIB9BMZx9%i>BWQYcmbQQ{Z!8G%QU&c2sE zcw`m`$(hZAlnjQu6xn=M4}4i&0a(EQc{<^N3*o$S^r9(VqB>3XL|6MdA)dXZXkgS0 zsL@3(D{~rDzn-sSg z%(8XV*b|feZv8-}+Sy?7-VG+x9sdP+D%efx`$x8P;x%?;X?N8N9(CPx6ToAV z@));2wXlg06Wx>7TJ@qQaXWkh@bnqr>3HKb+I@*DbNmaQmi{+eBworZ{NqsgsD6Dg zd_cd>Z>bQ`Zg@V0rBSfVczF=4dvsqgXtX{uSw^wrXYwW zoo6Trt}%=K)_TLYCNhJ&%Y)p0%LCz6$sz9k45BO$UO_2a_jPo6?`O1W(cK38KH|Eo zn`8F&)Xk9)?-D1#@7qxK0(U9O)4M!Hd5SVZmN(nX;*ybkjU~EyApLy* zCYI=rtfI3zi{bOj`GGxK$m$dlDu5Ff2tQ6>lq55TQ^ySdws1ckRH~A4a283tvQa_I zR9a zL8;_TNsUd;RAfnVNQ+_*w8I`)t~DsRuYCqJB60WvCR_p&7J+Al)$tP5(lm23?MjE0 zLNVrKV$1S4?-PyTnUyIwvKnhy4O(48bF?Zy zJ+0RLjT9M*>bi_44|2NS5DF-2i1V zJ){=ko{{FoPU=@}oV8}UBZMccZv4CS*zFUfz?|{;t6LHzL4C`;lgUgJnMXEpVZdux zS*DpjIGHY5B0cyHTg`#Go!jEdanKlueyZC8;o+3R#;tsf(u`-C`ynCLm35EhKpGfC zJ}IE%?kDtcQW7}5d_+SimV1@o{<;ypdrja~ZhUyhuXyeL_&tfrJwK+_WoB%5D#2RqU6KfhJ(HwtLwo(d7vr0H;H8 zCQ5j~!_@i{f}wy>1xu+tp{y-aJ3^^dscrczpTKa?>Ao~x| z@A}Fmo?+m~fzEwM-4E=_he?a)z!gQ2BP#j)6BOBjcv5S65Mmv~rmi0T*pK9X3x0zO zC?>l(P)+qGvjnFtVoh4K=EtcF@~OSOeh+3c%bBh2S3y$P>fY>yI(a5DP<+xX{zB0W zx;>&W(A5g^><$&j&G2%=&Rrma_7h1$Wmci{!9v8nL0_xZu$eE}$YZk8VMrR~xlPsY z3FR`{8li=JpGE(v^!zsPB^|Fperu<6)s<1+>gA?T?OjAiwI=9FxU+-iofM&@VS5*7 z&EE%MT5*v{nqlukx(-i5Vws=_pZ_UVwGT+r2ZjtFfHc(se6CSKL zAb24)5C$2sLM6>pA|M#X=pKl`r$|IV*_SGTPZ2~8e2zo+5UBA3{DzrG?fk_b1w5Ng z5!SsKxynA%Zxbwmk#Jx)#SWD(?{Rjtn$=hzyLsBJCQ&E@pVi+3%|1 zu{&gV@0*@20nZlQw=8mnZhLIvQ=exMrFb;<{I$b%k>A|N=tKy4qgRAg8fgd`MeulS zCc#P&3~5a}rCYK!?q$}o^@D8!98Sq^fp39y=nJjsb|^igczGb)CEP$Wyg{TFC~rM# zSO&moP4O;DOrcB)?*bpNIe=pUXXtQtP2%F-e7`-!J`es0yP=IqzY&4cwI?_?q8}%2 z0i1iz0|GsYvYJhr0cDSxo$!HH2nnJ>*z;`0dfMLZCIGrbkNNyg(ngN zsBVVGA>_Fslf9<;hPJ}jm_ZR8nf%ffc2j$515S}`mo1tB3%wL)^HGnz(fl?rKy;O+ zLaE!X1(6snXIfFt3l91WdDWn!?Abvlg5ezMj8*^VK4SP*YR&Vg2}f3IdXEP~;48R_ zuOhi(o+Y$lQz;J=2(5)dm?)G~C9V2{lrLV+67wxtWzg-yv6hkFGM+z+fC07I^Pt^R zOD*e+a0+DTZAsiohP1ejU%p#=zu$*V#7d-2s}lFIZ~{zM%I^v-w1SZ57xAn*wvU-4 zGt>@8BJn;i$fpF=_FldYb%5g%Hq$G=v!xNSx2RwW`I5-q(Bot3L(M3iG8G zpWo1f&kqYe&lQB?;PVF{Q6JKp7c&Qf&wm0wH@iBR8-iLo2pwgN*safGg3SZPgjA|R z5wJ~gxo%$`h>bZx)axW+F-Wg^f~#*CYBS2pZTrWrG5~WE62cn&$T^ z6pk#}+T@Sj(2K$!5)}S`LgByQ8xH=qHLba<2YcJOfQ^H>eQWI!t+`o{Hd4Tkt?3_3)t7MfwiK?uf#y*m$kY~ucw&<+LWU2xKhrP4NBIG3pYI24J1Co9 z#PE@9Qoz>}z}FMN*KL8~qk-Z!g{_Z*t&f4NThRc(@)v~NrWd0DBtfYGey!=R3^Ej( zO3VP54L=l&9rA4!^#vmnMf>9dEk_yS0Ul(Gh#HhWf}?5jDVio@V4QlajoI+=DrltqedBysATx6T4@e_bgYd;!j`@>&zU zku%UQ;5pNp2)gFTehh@6&~+*Ej*H^}LTAu*?n9y~<+l)3*Rzd`;?-&ox(<3D z5_J7QVisitS|P3hR)JZqF`Kl+SpK+p+_33;D_FV{b%&`ZtceOqClaVDQltvF2MG*K zR;2Emf}fS{!Gp9RnRP>bYvJSBIRSD6FPq-v*53Uq@QU_}!p_!IZ(^eQH2co_!fy{x zsXTEIQ)}>drk+Z8%9JN%qN?!}|M_@2*_E;HFsb}gRC+Iba39W+ zQifA1;g(9i=)z|zzwosD*lGFR{`taVR`8pu|6xG&BGtaqaZvc*{rTuhSX9uW z_*?xUiIrzi(zFI*6t%5(NQ)UJo~7k|QSQdRj=KHe2G}Wsv2_WCjrk`+=|d~#d3Nrj7B?7S_4roI-V^Yw5S1ah(+10P z3!_f~GJXBi(xWTs5mSYyb6EB=Ram_Aov-*|G-SA7kB~_zkm-TnqvlA>R(4^+X8o3y z{DNEN{U52KtdUH6|58GnAd=`KU*j72J;mj)m8yLcLoma)GtZ+-P&6^o4Dc<#``b#a zBv!Pn>mC`VY28v1pKH3SHzreSSTCvem{F!Le%ElyN28SeyIXctd`eH*JiN$~9Iz`` z>@ih{9`F8!lpkqY_lab7K)k4@Y(eBl(zz0c86`M@Tk~AisC{2SeCJp((5Wa)F6*U_ z?fdfLU6LNg24A5IM_yz9GBf^6PkNc!4hABS@5r284;v%-u&lT9K9+Z-NZaDPU&*`E z;CWQ+JAY!E7rlui{#qO^3iyQEb*=^FWeY{4R(e{K2b)&o^vA(DcI+HZJeA*ZqWUv_ zId4`=j$#j@%2lgjZ7fb_f7jZf(vWNSUoXdBmpGXg{-$X`Gm0hxj#$tvxC8a2A#}m- z8_|%`E2uO47=_)yZn@B3KBBPt0=WvKVuZF5q* zA5${>gtew-J5AR8-N85GGK1kmE(gU4A`kS8W7jJn&6seY0B(4v%TWCc)DGuaZ9J?b zFCjDTV^tg^a4D}^!)=g?Fl-O*?^|(i|B4&PjHmTf+{mleaG_K2*ZnF!(Z6D~RP6Gn zzF4CwiW^|QSkTs#p)KjrgReX>#)@Jy8QC_+B#|aY3b{@x@XY<;ljoZv6 zAy9q!ZQJI7er3mrT|1Xn>BR@tM>G90`;Ry$0CVkDmECNA*3 zQMauA6odR<>M6*8N56ERAkC3W_|YbH)*l_LE!af185>U&%+-NdNSGC^CKTA>Ha!!{ zU(CnxPBT;6*DBs=L`R@C<)TJ3*Tg&mCc7wMoWVsG|1a(Ld;$#`8IKZ%E_R0U4~e7v z5X{2k+h233F7}2?bl-u~3)JMIdo-rYh)Luy?7NQp($rxSlosZyF@N3&WA1S?`zWEoRF*qNt zDg3C~>~ZD!3u*?AsW<+d=Fz)YFXqRsN$Bcj=vaNMHQ&ar=4PhbA!b;ZqH2aqyORXu zZ9_A^ky%?IcaBiIsZBytimlRF_kmz5yrN!{SOvx7@SnIeH>M$0w(=LMa1qw##NWvT zD89QF02(ivj%&g)&gGVh7po|GSx(vo5anA}y!lZ9dJrEvG`05P75|p^*t9}1gusjW(04!Oz4Swr zFrnU+(nIF>FtB9!c4-aW49ZU=;c?~J|D!dYOCM$u&bxY&?foQRXLq5SP&)yCHW6J> zHAp0^ox(OJ(&RM63PKyHvtD9t=EU2ppqgb5xW~KXg3^nGlU}0C_yXYrCi*awCdGg; zfd;|f;flEqJnu)f={1Iwd*AHcp%|Mk5KhxxtQa%Xw<+oa-)nC9?71_26%(T0a%;`r zV{Mdu5c0jNH4f`$@vSRf{II~;0cbT@=lqp7btssHJD&=J7XA-*oW^!0t ztx-Z|Cw?F;q`oKgDXx3;>q6m#qFt19ZyaRkZAwjXszg~gEibf%a~P5197YAEJ+|jm z`qyqbT$bN`74V@oe(a!nMXjjC2wEc-QzHI58HS=yAL3Q5j@EFL(nPNR2Ppu^tNes~ zhefx+yxUJCcCB$P1t!F*Me?Wau zbvMAh^L^FjOxhK_9z|j@<)-Orm6yrrNQSIq0c#%$j+k1*IA~D-E!sULv9a6`hsr*~ z=E+QpTqQs~*#&BRVaURx`8K7nOn|y5ez1~N#%!QW;JHW^dXzY@s#2&zcExOk=%Esy z>@QDSD3BS%FxV>l-t2u+2p0JJ!C3wxpcrn}T!A~zv`K5-f_DuMgtO~)I~ap@Jw}7~ z&GcP`o+8a4gp-D}+1m}@`_Z3?5=@RBt3@#T1dU7x8_#)7JGXFBc*?Wh3HGf=P?1Cb z2AwpuV{zatQ`m6Cf#JvBlj%b@gG6hTIwGoXgjnk9MFxww0ydEJ6VtSWOd6Sp!Q~PixkS(AcbUaLb^pR6yPuu zH_FMOt{C5@kjhPbMnz7Yk7e_g4}FGOY9nw7q;TSL{wVUbcf2Wl&#ePAZ{Lt8}IJ^S4xT$gWPbO)Q4ojkOXFPP!g90VK&H*>wI14-WIZg{r0Z;POLx=Z1V0x8UM zj<)bR;8qlr{=%=E@_Ko8Vbs!IJm<}w1){(CU%E?E4NZP5W9SOuFH5SzgA0Ze`1!St zg)G>SM+nkBbKddp>XasC$S&+c_^LI%4?y)G`y6*)OcTFMIDZvAgCc_l@d<|Qb9}?q zf&zIGjbZjJxw1n_1mllV$iB3dgAMxg50Oa@eTb=^+81$9{9Upy1jkhuiqa*DWQ7X@ zVQ*my-v|2O`?3b`{aw*3-P*JF=)SntBv&vq7WIU}w?2OYiuAA1b0ngHbyzX3d)G_w z|BiyR#7(TQ^aERop8%J=>w}B2tJ!kM9|u3q*(syVi_c_uGM+pKc|J-;z*-f#@+Ifg z&A48gyj6h4IWY3#xd?exjpRT0l3Wkcm~SX`|d z-x~c>;u|!GevZ{8`tBQD7KVy0G}W-jajsr?ic?4_OsZ}IPbWzTh2vt6SQYYpBnbRN zt#J=f;v#S$2?X9rvG}i~i|R1w;#ClMm8@Q-)*$v$FFQjUeBXAEtH}AANHlGK9zb?8 zX`&8r9l$C<>PIe6{ZLSfd9I6oP3JzPuJx=dg3v_)yR6Mdy3c3wLb1YsNE*_9Ne;zE z{6l--YCfVhd-$t>63=XI<^05DX5s?zYQGU=dGpcYMSp_E~N1jAb=#-{xs zZKm!kkG?C}rR#hhGj;3ix^3_#qdB5^iP)$1r`GXAmcWx$Ir?2W`I4flW-xQ=o3*9# zeOi13iStZfbtoB(my z%w%(B#$(8W)S@O%^Z=gk9RbaZb`DRKg`#cb3_%W6i9rtDdyy;!LeN2i_oS|SPW8|$ z5G$smjWh>}1cB!50+7E@HI2equ+kuHhswJ&4Umk>3xyAdd>>20Qxz^sQ8Fb88B&TG z4oOpVx1j)c8fQJ`lvm1v7jVBmi{|267?T6Hn)(`UcV(dqv<8FXOC7ka?AR)B3yMrC zxK)i~*%1m43ECyl7(qMVxuV&*^Aue%g33Aq3w(8EETA&Ie}+>EVp(jY>0N<31YO{s z?#{0}|2O`#`HH32N+f4st>CkzFpf+$Ua z+{q5+7R-C6e6VPItn66<-3DNQ#={OLPRIZQKHh9R@xo9-0d8U}e+lrG>%bc_s!1CK z=qM=kL|MHZ`4_cMDRRQ_4RYy;&lNp!mCzHrqrViT%>o@QUI>c+m9NQ0RipzH#UH#A z?Z_^IC7 z`AjMs4tc@QD;Rn*+u<|GP$E9;jqr9d)9`uk>PJ^d-M2TpA2uxH$;;;S+Z>W``bJV0 z7(gff)5`@J^OT77?2{pD)js)ePE?g8`(%g!!qmj06e6a=*QDd+Ll;R2foiR>R<=u{ z+Ahv|$$nWIu#N}{Kc!GO`tRcCki~|M?_oIKR$$-520CX1ZJGA%iW-2p87Z$8Cu6vi z(Th$@=G{LBHnhfb1kz#^%oWS8j$?>g4rk6_0XN9>DL|~1v5liA{yz-Q*)s3)Dqsdr zi;}QZ6%kt`h@eDk5cxvtOq;)nLryfm)`9+Y>z?cBu{a#(;F$(Hb+LD0xl`9J787X3R5+xI3X6H*})!mLb@ zYbiUo|J20qDRrRu6pJA#VzT<>%bb;rAbBu<>=l zptL2|zB?$XH9kd3;(7k4@#{AzR{p7!$`ksW@T9R+gZkM8UcUyw<)-vs;g)gSQUYT}VYq^7tTU~#0ptkTvT0{P2U92tm zoq8OALAL0avta&GIsL``^nIJX5x#XA7v z!;;1M&BYQ-T7?yGQ|af)Gtgh*KIGeY*Clqvb7+$zfaX?N6pfFyVYZMbPRjh&s1WQy zF{bcs9Boz1oxRS{^IcoF1YqlHRJZg;!T|V0;%wU)yEruxHLNsB#n+=(v@-FYf`-a2 zIZlAX%=pPmT<}PglJ#;rolLwWPqI-|sL7W(hVZf@X&LhL-}1zarzKi=LZf3WKfUxU z_YX1VQ?7pl)=9-enD^--%FC%N3c{jy>I$ml-byzF^?)R}Ag4~?sq}ufbh1ZN_`V!! z^=b-VM`nEbr738;o>!cYpDSOWeq`tN2*|isPl?zj`W8P!(@g6-U0s3slM`RX-`*5_oNYaO%Tr z8~U`=y|<_CGpg<-^j3dWkrjqD^pY3UdJS{m5fk|8Z!+S8I>we;#awDgMG z(m6v^ORP!hHp6~GsTZ5pcG1XWY4V)wGS0QmS;?s;VKC4mHC@ea3rq8l;|1*!H0IuS z8~3o!a!o6#HE3sne(eX;qL+S-v*xF$EE*d(34sBX_K?a-{uj5a1@QAYq5W3w+}d(t zv~t9_A|6PtGY#K0wOd1;1J*&8Zq61Cwa9wF+l!3y>Om)}cT>G?IYBj}xE$;rpfznB zEbGIN>@@UrHv@TE({eyN5F6_iJDR+Zby!9>hcdZxsaU{_(aVoHYvlTf_l8k~?!t_8 zJ_1XH>a^IxY-!*QWIS?5&rN&J5M?I4S-3~{)FxSRTRblDyKEqe>Bo!62O#5BCbrdyT6@fAPWZGSrh`Uqn znC#B`TV0<#eHe%B~Gb_8Rp-nEloYYz< z-Hh>!6_}2|jjfz0&#_!_aJ2Yh4jb9$`oHBbB)&)5c`;-6+XZRZt*CaabKd1mw>GMl zc5Uo!=|g#TS_;sTVoK@iFWi>DPzhW(l)+4sO%DnPhP{hT+q(wacdg+7I0tgKK-%C8 zoC>BTGRd#h>&Tz0pUOY+;{p~KeSx^S$wP0&!ZC=t-$0kn^yAUq2IXSqns0`&#LWK@ zgxc_k#solvZWYNOj)H#U(50=jSD_aP(LCr(`F!OcHVEanQAp&x_!Ek6BZj#`r_h^p zr#J6X$h<-pfeL?8m=A~vNm%}j^((&v33A4*=(%P$DaZPD2l!G947 zjD1mq+GjROga>B&ePwq>-xa@Cl+gi5EBkq8>ue7=s@hx|x+ld7)7>G|AMMr}G64XY zKDZ$TGS5hnKNuhnqkI3#kkXY75Y!RWzBT2wG)r{P zHsgQOgT5@zNJZTW5Xh6~$9R@u7ty!+blin$4Gnx91`x)pTElediP|TW8RgDYFdgQC zj`FQlorm!BVw!S$k2-GMZEE6Ecxtm_V*H*mF~(kBHWaQUOuNKvd@DMdvbko~0U7BX zBHlMKG!A!IWecs%GFfa?`8vBsVvYHZnpQ_-icF+e~ZlbJSqNY^98F%e$CZJ_%yjD7>En&c!;i zg7(l+(hBfpXPm`TfUu}cAgmS^n#EIy61Qv_YzasjF}_e;=Wa4e%2cU+C8GkBXESRl zlw*eTZPWIyz>B}u@PLe#m6~eCMl3At!+#4Kuc6rQs2U)PY%qNB$c>m}q4XMvl}!Yn zoEy=>C+8}C5OJHJ_LcV$`68QLj9Q>HQ~N>eS=8q1@-CLqvim$IsuN@Cy=Qs?;Wf%Z zhHvNWMJA45O5mLf`$|Sjxx5qF1KiQO!BJq`Ad1WdTC?~MQ!Cbkgi2iC7x?)nH$R=5 zkW6lYd@g8hACF#+Pq-vhS7X#ObMQdgX1ig7y2h%qS&~=9&@GL_{=Qhvzwm@)h zC^l^{Yj(EH9f{bWHF#?=27B#DBks+jKVb16mXBfaaPEnqXLpZZUNejUT=WRry&_le z9f)2<+eZ1Q>W^gT1@6$XUo6lX_P_;)#wpO3d%=dQfeF*$woMJdO@uS;kq3eI9 zpT9_C)P>9tQ~+>v{)~o)%ZRbS)7tg+vVvI(Ia1S^SocT63 zIR$?CI}EpAq3~PD7y8i4zE!n_)of)HPU0IVwul@%b{iw zzmccj;s`80zzkO6SzslqSof#&gTkl*wsPTJVOV8N(ftBQMfGV=gzQ1lcekoXorwP2 zu=ZaJ4Ec+>S)mmF7K_5FjY<(Q)@EyKUzZQP_!v9CwOZrvC~xgFvsO_Ff>O@c33LfK zvnpD8aB^Z5V9u4_C~kMh4?1WB!1n^N1~8o367jQ~i_st%mUU1u8S3A^hRq@Be}Gu- z2Gs-Sbe^RsGlsWN@La0Psm;L191<)mx62)+iocwPBO;@CzptxiDCi{D?U3LqI^!-1 zsA;;67L$&dOYD8dD6=+;DH8$3U~9EtJ;!7+7@L-f%aSTeaNGljunO0J^qlLYLn)xq zf^9w>tS&6V7(Byk9kdR#9UoXf$Ro!O%BJqoqr<)qWM$)a^YTFWEWVb@3?S3P{}USl z4|b{k;r%W44UXDCxH^OTa`tPIZ6p20F_zXS+;AWwBb(TW$^0I8fal!m^$8YmV=_et z3*KDTrM_=KY{xK;WH_4Cj|ftl~J)MaU~f+beQB8p{^8W zc%On;PN})p0CmbHUOyyVtlYS&AkEqs-}#oj0qq>BACT00X3+dUNO0j(9j%FuV{Yl5 zVmWTUiYYt%FjMZ(DUDMJWa`o+>avxXPC{xhiCv6R);KpYQBg=Nd@rpcYmg^qe#8gF zLl)A-w&T|*d%t4ddQASvWsMxNWsQ}dF!%tSuB6ivYXzjEZ00H!$us0q%`NO|6`~|D z;GlHwllYMHVSMe`uO?*qO0L6clJH$8;T=iXH@zo{sH(T8^JRvD1+!wct*gBc;B=Olm)GQSW1YC znPJ{TP|Z#5dEI`@f{aSar1q1MS*DY1U&CphXK3PDN;V-K~Rit=P$xF zfgJla0WNUg!4Y3>i*IXmCVO7_kkhFZt3HFH{y4p#Z(;BV-cgbU3?Y)5*rdNQXy5HFsQ90MTRJSj- z;QNXL_FF(*XW{^kG9}Isgd)RCkP{u-4Y=7g-wlSprdz9JV5(7Diz1raAT2}8Op>4F zOxgfzkUc=R23WW{UY~qgb*1(%f!K&g)UH6O1W%KpG`^Vpm8_h*8hp6wOD8)E z*9{%4yzfx-+(5XT(|U3j$C}GgF|6FzV|NikPHR}qDev1}JH?1y$7Qoj0RRZ#o0QhE z`Vn!Khx;{=KCy;=&`;&!=er8yVMTVrtgA+8zXv=L+9X>Qsz@ej# zDmbN6t~#MLwgX|-4r^6$XYp1@k>>gG-fnfu`Gk*TIh@K4%c0App*w!H*?1)SV>9cN zX*^FH+epCk5b-3e4v!v?EcNfPY+yf@%_H?1gnPOBkU$UgY)r zY#`_LZFz0vRp<^YaXPlf7g`%&msrjg2yc>aTlp4JKz;{WPU5c@P$^;jL0{3b;?;;lqhQTmzMdW@P@9VLoU%z}VmY7UqV8Ix$`PY-03 zt)-KDi+2>a`wohNP<6JDuK;@<+oM}N!1(rPv8UCQSnlHX&`Err?%ZLIim76-v zXUbl~;>QK66bQ%`&u>xal0ch**t9FXE@YtqX03ykqi$|nH%B0Mi1)9V=u$_atX%lx zyNMUWO3UDKg5k5r*xnZKy@D-zFkOo^u+XS^_y|4vi#_^C==FTBbQ_YTuW+EU?Ui= zSc1o)$Y#58b{nS&qU0*i&iLm~(Peo?c>^sxy?)t%_#a7oeKuHwwD`lkunR|svk@OV zjJAqIlTip|X}AP#-?MNnTE^HF|I~da>n=*K9FqD#{84G%+Pk!X((#MV?fq7~k{nTi z!&~+}%cRH|Qe==6kr|YMG+(7oKg7Cy{6TGyU0&Z$6VBmt25>0kI4*D)a+t|k`{dBf zRNdsV|7^fop1d+8-%fRFTx>>}C*E{UpT7O!f1O^KLr_~NPmqX zspH-0=|t2DfG?c!K7As+ayfIS7AQVJeXPs*Sclg1ysG8QtvE4?ugdKm1EZ?ey< zU>i|i^tsd&t9={)Jw+3XIWzmfk1S>YRPXdhmR0qeemq4#2!rADLw#x~4W}kB{@p&` zjsKLKknd!4Me2j`%jH|&mT#%{PMe`CD6b;j#J@P3BE9|T*)O8MH%eq?jq60Cs=!^- z(=9;IyJE46w1yqbi?s$fH?ksHbBO{N&crlph}N)`3rE5_AQ;uQ4Ww}O z7{NDSvH?01?GgLsA!lN^;#r*0;r^xLo(s(4%}~8?>iT&d-DI+#W-AH-l3eQc|HnyJ}`W^7txyUb>Y7NfbVO^ z6`NdJ-+GM}SOa2plt9DWc(KM2NrH??Pu#wSQuL`2630lpDhW4dZ@@K0VsSAGs~ z`pP#Lt`bGW_fptVsDDR|U~r`rx?!mNPya#RGJw}$(XVIKiqIg?8ZKfd zfWNR+CIU-9i0=@1KQjc|E|2?@tZAlWw;~=NdieL)!9AQ7NYCD6`ra_L(OYElM5^@( zN5x}wi5*jhF7iS2Mzw|AytBg(JLyWX%|A-zNKrgq4M0Jz3TC@jFD?a`7OnAOd9bk! zvwl#eNZ1EK0j*_0LzDR)k`=yF3pdaN; zD0TcTvVcpU5_;~er{(x0F)^Gp#TSuw9_=#^v{$0qa%C(zabHh^Fo#ux8`zdkgRlKP z)nFTG(l7f51qp$e6ko%xDR8D~ot7&4nkp&;j!b2ZbAyQgqbI*uRqx4%qsZjNA9V9` z64#P%c6ke>KK`CAk={(^Io_P(4t+Uxc|@R+0{j-azXk4Zp8IRMzg6zH*q=0-V?7@0G7g?td>k!$}2tUn|h;%iiNHpF&%;B1Hvp5(m0LCN!#rjYot z!UcfgCyECcbn8k&;UmE?u33m5;lLv#azK0Lu<6;M@Sj<~7eCsEw1toGEz>?%v>=cj zZ89x*-ek4yD*>;Js?uH{7))c@?Rr`|0X_JUGHv^cB%@zS!Ix6l@KI-I34L0M({-Ce4nyDC)^eE2U}8mfWs!4N2`|4ee!ZDWd?-LNjdr?P=Pxzw}>f_(}sD7~@8Ot=#S^aWR z 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

      a~5vF(Tk>wb{V`(M3Gt*GUx= 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 EAApIQng9R* diff --git a/tools/nauty25r9_unix/linegraphg.c b/tools/nauty25r9_unix/linegraphg.c deleted file mode 100644 index 540e78f..0000000 --- a/tools/nauty25r9_unix/linegraphg.c +++ /dev/null @@ -1,218 +0,0 @@ -/* linegraphg.c version 1.1; B D McKay, Sep 2012. */ - -#define USAGE "linegraphg [-q] [infile [outfile]]" - -#define HELPTEXT \ -" Take the linegraphs of a file of graphs.\n\ - Input graphs with no edges produce only a warning message.\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -q Suppress auxiliary information.\n" - -/*************************************************************************/ - -#include "gtools.h" - -/**************************************************************************/ - -static void -linegraph(sparsegraph *g, sparsegraph *h) -/* h := linegraph of g */ -{ - DYNALLSTAT(size_t,eno,eno_sz); /* edge number */ - int *ge,*gd,*he,*hd; - size_t *gv,*hv; - int gnv,hnv; - size_t i,j,k,gnde,hnde,xhnde,num; - size_t hi,lo,mid,v,w; - - sortlists_sg(g); - SG_VDE(g,gv,gd,ge); - gnv = g->nv; - gnde = g->nde; - DYNALLOC1(size_t,eno,eno_sz,gnde,"linegraphg"); - - hnv = gnde/2; - if (hnv != gnde/2) gt_abort(">E linegraphg: too many input edges\n"); - - hnde = 0; - num = 0; - for (i = 0; i < gnv; ++i) - { - xhnde = hnde; - hnde += gd[i]*((size_t)gd[i]-1); - if (hnde < xhnde) gt_abort(">E linegraphg: too many output edges\n"); - - for (j = gv[i]; j < gv[i]+gd[i]; ++j) - { - if (ge[j] == i) - gt_abort(">E linegraphg can't handle loops\n"); - else if (ge[j] > i) - eno[j] = num++; - else - { - lo = gv[ge[j]]; - hi = lo + gd[ge[j]] - 1; - while (lo <= hi) - { - mid = lo + (hi-lo)/2; - if (ge[mid] == i) break; - else if (ge[mid] < i) lo = mid+1; - else hi = mid-1; - } - if (lo > hi) - gt_abort(">E linegraphg : binary search failed\n"); - eno[j] = eno[mid]; - } - } - } - - SG_ALLOC(*h,hnv,hnde,"linegraphg"); - h->nv = hnv; - h->nde = hnde; - SG_VDE(h,hv,hd,he); - - for (i = 0; i < hnv; ++i) hd[i] = 0; - for (i = 0; i < gnv; ++i) - { - for (j = gv[i]; j < gv[i]+gd[i]; ++j) - hd[eno[j]] += gd[i]-1; - } - - hv[0] = 0; - for (i = 1; i < hnv; ++i) hv[i] = hv[i-1] + hd[i-1]; - for (i = 0; i < hnv; ++i) hd[i] = 0; - - for (i = 0; i < gnv; ++i) - { - for (j = gv[i]; j < gv[i]+gd[i]-1; ++j) - for (k = j+1; k < gv[i]+gd[i]; ++k) - { - v = eno[j]; w = eno[k]; - he[hv[v]+(hd[v]++)] = w; - he[hv[w]+(hd[w]++)] = v; - } - } -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile,*outfile; - boolean badargs,quiet; - int j,m,n,argnum; - int codetype,outcode; - sparsegraph g,h; - nauty_counter nin,nullgraphs; - char *arg,sw; - static graph *gq; - double t; - - HELP; - - SG_INIT(g); - SG_INIT(h); - - infilename = outfilename = NULL; - quiet = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('q',quiet) - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A linegraphg"); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - nin = 0; - nullgraphs = 0; - t = CPUTIME; - while (read_sg(infile,&g)) - { - ++nin; - - if (g.nde > 0) - { - linegraph(&g,&h); - if (outcode == SPARSE6) writes6_sg(outfile,&h); - else writeg6_sg(outfile,&h); - } - else - ++nullgraphs; - } - t = CPUTIME - t; - - if (!quiet) - { - if (nullgraphs > 0) - fprintf(stderr,">W " COUNTER_FMT " null graphs not written\n", - nullgraphs); - - fprintf(stderr,">Z " COUNTER_FMT - " graphs converted from %s to %s in %3.2f sec.\n", - nin,infilename,outfilename,t); - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/listg b/tools/nauty25r9_unix/listg deleted file mode 100644 index e944013cda5c768056d94bc640fe9d485b8d5490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61998 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 P-BX`%0}n*!8`bz9gfJ4A diff --git a/tools/nauty25r9_unix/listg.c b/tools/nauty25r9_unix/listg.c deleted file mode 100644 index c29d19a..0000000 --- a/tools/nauty25r9_unix/listg.c +++ /dev/null @@ -1,616 +0,0 @@ -/* listg.c version 1.6; B D McKay, March 2012 */ - -#define USAGE \ - "listg [-fp#:#l#o#Ftq] [-a|-A|-c|-d|-e|-H|-M|-s|-b|-G|-y|-Yxxx]" \ - " [infile [outfile]]" - -#define HELPTEXT \ -" Write graphs in human-readable format.\n\ -\n\ - -f : assume inputs have same size (only used from a file\n\ - and only if -p is given)\n\ - -p#, -p#:#, -p#-# : only display one graph or a sequence of\n\ - graphs. The first graph is number 1. A second number\n\ - which is empty or zero means infinity.\n\ - -a : write as adjacency matrix, not as list of adjacencies\n\ - -A : same as -a with a space between entries\n\ - -l# : specify screen width limit (default 78, 0 means no limit)\n\ - This is not currently implemented with -a or -A.\n\ - -o# : specify number of first vertex (default is 0).\n\ - -d : write output to satisfy dreadnaut \n\ - -c : write ascii form with minimal line-breaks\n\ - -e : write a list of edges, preceded by the order and the\n\ - number of edges\n\ - -H : write in HCP operations research format\n\ - -M : write in Magma format\n\ - -W : write matrix in Maple format\n\ - -b : write in Bliss format\n\ - -G : write in GRAPE format\n\ - -y : write in dot file format\n\ - -Yxxx : extra dotty commands for dot files (arg continues to end of param)\n\ - -t : write upper triangle only (affects -a, -A, -d and default)\n\ - -s : write only the numbers of vertices and edges\n\ - -F : write a form-feed after each graph except the last\n\ - -q : suppress auxiliary output\n\ -\n\ - -a, -A, -c, -d, -M, -W, -H and -e are incompatible.\n" - -#define MAPLE_MATRIX 1 /* 1 for Matrix(..), 0 for array(..) */ - -/************************************************************************* - - June 26, 2007 : Fix error in putve() reported by Evan Heidtmann - -*************************************************************************/ - -#include "gtools.h" -#define LABELORG 0 /* number of first vertex (any integer >= 0) */ -#define LINELEN CONSOLWIDTH /* max characters per line (0 = no limit) */ - -static FILE *infile,*outfile; -static unsigned long nin; -extern int labelorg; - -/***************************************************************************** -* putsetx(f,set1,curlenp,linelength,m,compress,start) writes the set * -* set1 to file f using at most linelength characters per line (excluding * -* '\n'). Set elements less than or equal to start are ignored. * -* *curlenp is the number of characters on the line so far; it is updated. * -* A range j1,j1+1,...,j2 for j2-j1>=2 is written as "j1:j2" if compress * -* is nonzero (eg. TRUE); otherwise each element is written separately. * -* No final '\n' is written. labelorg is used. * -* * -* FUNCTIONS CALLED: nextelement(),itos() * -* * -*****************************************************************************/ - -void -putsetx(FILE *f, set *set1, int *curlenp, int linelength, int m, - boolean compress, int start) -{ - int slen,j1,j2; - char s[40]; - boolean first; - - first = TRUE; - j1 = start; - while ((j1 = nextelement(set1,m,j1)) >= 0) - { - j2 = j1; - if (compress) - { - while (nextelement(set1,m,j2) == j2 + 1) - ++j2; - if (j2 == j1+1) - j2 = j1; - } - slen = itos(j1 + labelorg,s); - if (j2 >= j1 + 2) - { - s[slen] = ':'; - slen += 1 + itos(j2 + labelorg,&s[slen+1]); - } - - if (*curlenp + slen + 1 >= linelength && linelength > 0) - { - fprintf(f,"\n "); - *curlenp = 1; - } - if (first) - { - fprintf(f,"%s",s); - *curlenp += slen; - first = FALSE; - } - else - { - fprintf(f," %s",s); - *curlenp += slen + 1; - } - j1 = j2; - } -} - -/***************************************************************************** -* * -* STOLEN FROM naututil.c * -* putgraphx(f,g,linelength,m,n) writes a list of the edges of g to f * -* using at most linelength characters per line (excluding '\n'). * -* If triang, only write the upper triangle. * -* labelorg is used. * -* * -*****************************************************************************/ - -void -putgraphx(FILE *f, graph *g, int linelength, boolean triang, int m, int n) -{ - int i,curlen; - set *pg; - - for (i = 0, pg = g; i < n; ++i, pg += m) - { - fprintf(f,"%3d : ",i + labelorg); - curlen = 7; - putsetx(f,pg,&curlen,linelength,m,FALSE,triang ? i-1 : -1); - fprintf(f,";\n"); - } -} - -/***************************************************************************/ - -void -putedges(FILE *f, graph *g, boolean ptn, int linelength, int m, int n) -/* Write list of edges, preceded by the numbers of vertices and - edges and optionally by "1" if "ptn" is TRUE. Use labelorg */ -{ - int i,j,curlen,ne; - char s[20]; - set *pg; - - ne = 0; - for (i = 0, pg = g; i < n; ++i, pg += m) - { - for (j = i-1; (j = nextelement(pg,m,j)) >= 0;) - ++ne; - } - - if (ptn) fprintf(f,"%d %d 1\n",n,ne); - else fprintf(f,"%d %d\n",n,ne); - - curlen = 0; - for (i = 0, pg = g; i < n; ++i, pg += m) - { - for (j = i-1; (j = nextelement(pg,m,j)) >= 0;) - { - if (curlen > linelength - 10 && linelength > 0) - { - fprintf(f,"\n"); - curlen = 0; - } - if (curlen > 0) - { - fprintf(f," "); - curlen += 2; - } - curlen += itos(i+labelorg,s); - fprintf(f,"%s",s); - fprintf(f," "); - curlen += 1 + itos(j+labelorg,s); - fprintf(f,"%s",s); - } - } - fprintf(f,"\n"); -} - -/***************************************************************************/ - -void -putHCP(FILE *f, graph *g, int m, int n) -/* Write list of edges in HCP format. labelorg is ignored */ -{ - int i,j,curlen,ne; - char s[20]; - set *pg; - - fprintf(f,"NAME : G%lu\n",nin); - fprintf(f,"TYPE : HCP\n"); - fprintf(f,"DIMENSION : %d\n",n); - fprintf(f,"EDGE_DATA_FORMAT : EDGE_LIST\n"); - fprintf(f,"EDGE_DATA_SECTION\n"); - - for (i = 0, pg = g; i < n; ++i, pg += m) - { - for (j = -1; (j = nextelement(pg,m,j)) >= 0;) - fprintf(f,"%d %d\n",i+1,j+1); - } - fprintf(f,"-1\nEOF\n"); -} - -/***************************************************************************/ - -void -putcgraph(FILE *f, graph *g, int linelength, int m, int n) -/* write compressed form, using labelorg */ -{ - int i,curlen; - int semicolons; - char s[20]; - set *pg; - - curlen = itos(n,s)+2; - fprintf(f,";n%sg",s); - - semicolons = 0; - for (i = 0, pg = g; i < n; ++i, pg += m) - { - if (nextelement(pg,m,i-1) >= 0) - { - while (semicolons > 0) - { - if (curlen >= linelength-1 && linelength > 0) - { - fprintf(f,"\n "); - curlen = 1; - } - fprintf(f,";"); - ++curlen; - --semicolons; - } - putsetx(f,pg,&curlen,linelength,m,FALSE,i-1); - semicolons = 1; - } - else - ++semicolons; - } - fprintf(f,".\n"); -} - -/**************************************************************************/ - -static void -putve(FILE *f, unsigned long id, graph *g, int m, int n) -/* Write the numbers of vertices and edges */ -{ - unsigned long ne; - setword x,*pg; - - ne = 0; - for (pg = g + m*(size_t)n; --pg >= g;) - if ((x = *pg) != 0) ne += POPCOUNT(x); - - fprintf(f,"Graph %lu has %d vertices and %lu edges.\n",id,n,ne/2); -} - -/**************************************************************************/ - -static void -putGRAPE(FILE *f, graph *g, int m, int n) -/* Write the graph in GRAPE format */ -{ - int i,j; - setword *pg; - boolean first; - - fprintf(f, - "rec( isGraph:=true, order:=%d, group:=Group([],()),\n",n); - fprintf(f, - " representatives := Immutable([1..%d]),\n",n); - fprintf(f," adjacencies := [\n"); - - for (i = 0, pg = g; i < n; ++i, pg += m) - { - first = TRUE; - fprintf(f," ["); - for (j = nextelement(pg,m,-1); j >= 0; j = nextelement(pg,m,j)) - { - if (!first) fprintf(f,","); - fprintf(f,"%d",j+1); - first = FALSE; - } - if (i < n-1) fprintf(f,"],\n"); - else fprintf(f,"]],\n"); - } - - fprintf(f," schreierVector := Immutable([-1,-2..-%d]) )",n); -} - -/**************************************************************************/ - -static void -putdotty(FILE *f, graph *g, unsigned long id, char *extras, int m, int n) -/* Write the graph in dotty format */ -{ - int i,j; - setword *pg; - boolean first; - - fprintf(f,"graph G%lu {\n",id); - if (extras) fprintf(f,"%s\n",extras); - - for (i = 0, pg = g; i < n; ++i, pg += m) - { - for (j = nextelement(pg,m,i); j >= 0; j = nextelement(pg,m,j)) - { - fprintf(f,"%d--%d;\n",labelorg+i,labelorg+j); - } - } - - fprintf(f,"}\n"); -} - -/**************************************************************************/ - -static void -putbliss(FILE *f, unsigned long id, graph *g, int m, int n) -/* Write the graph in Bliss format, according to - * http://www.tcs.hut.fi/Software/bliss/fileformat.shtml */ -{ - unsigned long ne; - setword x,*pg; - int i,j; - - ne = 0; - for (pg = g + m*(size_t)n; --pg >= g;) - if ((x = *pg) != 0) ne += POPCOUNT(x); - ne /= 2; - - fprintf(f,"c Graph %lu\n",id); - fprintf(f,"p edge %d %lu\n",n,ne); - - for (i = 0, pg = g; i < n; ++i, pg += m) - for (j = nextelement(pg,m,i); j >= 0; j = nextelement(pg,m,j)) - fprintf(f,"e %d %d\n",i+1,j+1); -} - -/**************************************************************************/ - -static void -putam(FILE *f, graph *g, int linelength, boolean space, - boolean triang, int m, int n) -/* write adjacency matrix */ -{ - set *gi; - int i,j; - boolean first; - - for (i = 0, gi = (set*)g; i < n - (triang!=0); ++i, gi += m) - { - first = TRUE; - for (j = triang ? i+1 : 0; j < n; ++j) - { - if (!first && space) putc(' ',f); - else first = FALSE; - if (ISELEMENT(gi,j)) putc('1',f); - else putc('0',f); - } - putc('\n',f); - } -} - -/**************************************************************************/ - -static void -putMagma(FILE *outfile, graph *g, int linelength, int m, int n, long index) -{ - int i,j; - set *gi; - boolean first; - - fprintf(outfile,"g%ld := Graph<%d|[\n",index,n); - - for (i = 0, gi = (set*)g; i < n; ++i, gi += m) - { - fprintf(outfile,"{"); - first = TRUE; - for (j = i; (j = nextelement(gi,m,j)) >= 0; ) - { - if (!first) fprintf(outfile,","); - first = FALSE; - fprintf(outfile,"%d",j+1); - } - fprintf(outfile,"}"); - if (i != n-1) fprintf(outfile,",\n"); - } - fprintf(outfile,"]>;\n"); -} - -/**************************************************************************/ - -static void -putMaple(FILE *outfile, graph *g, int linelength, int m, int n, long index) -{ - int i,j; - set *gi; - boolean first; - -#if MAPLE_MATRIX - fprintf(outfile,"f%ld := Matrix(%d,%d,[\n",index,n,n); -#else - fprintf(outfile,"f%ld := array(1..%d,1..%d,[\n",index,n,n); -#endif - - for (i = 0, gi = (set*)g; i < n; ++i, gi += m) - { - fprintf(outfile,"["); - first = TRUE; - for (j = 0; j < n; ++j) - { - if (!first) fprintf(outfile,","); - first = FALSE; - fprintf(outfile,"%d",(ISELEMENT(gi,j)?1:0)); - } - fprintf(outfile,"]"); - if (i != n-1) fprintf(outfile,",\n"); - } - fprintf(outfile,"]);\n"); -} - -/**************************************************************************/ -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - graph *g; - int m,n,codetype; - int argnum,j; - char *arg,sw; - boolean badargs,first; - unsigned long maxin; - long pval1,pval2; - boolean fswitch,pswitch,cswitch,dswitch; - boolean aswitch,lswitch,oswitch,Fswitch; - boolean Aswitch,eswitch,tswitch,qswitch; - boolean sswitch,Mswitch,Wswitch,Eswitch; - boolean bswitch,Gswitch,yswitch,Yswitch,Hswitch; - int linelength; - char *infilename,*outfilename,*yarg; - - HELP; - - fswitch = pswitch = cswitch = dswitch = FALSE; - aswitch = lswitch = oswitch = Fswitch = FALSE; - Aswitch = eswitch = tswitch = qswitch = FALSE; - sswitch = Mswitch = Wswitch = Eswitch = FALSE; - bswitch = Gswitch = yswitch = Yswitch = Hswitch = FALSE; - infilename = outfilename = NULL; - linelength = LINELEN; - labelorg = 0; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('a',aswitch) - else SWBOOLEAN('A',Aswitch) - else SWBOOLEAN('c',cswitch) - else SWBOOLEAN('d',dswitch) - else SWBOOLEAN('e',eswitch) - else SWBOOLEAN('H',Hswitch) - else SWBOOLEAN('E',Eswitch) - else SWBOOLEAN('f',fswitch) - else SWBOOLEAN('F',Fswitch) - else SWBOOLEAN('t',tswitch) - else SWBOOLEAN('b',bswitch) - else SWBOOLEAN('G',Gswitch) - else SWBOOLEAN('q',qswitch) - else SWBOOLEAN('M',Mswitch) - else SWBOOLEAN('W',Wswitch) - else SWBOOLEAN('s',sswitch) - else SWBOOLEAN('y',yswitch) - else SWRANGE('p',":-",pswitch,pval1,pval2,"listg -p") - else SWINT('l',lswitch,linelength,"listg -l") - else SWINT('o',oswitch,labelorg,"listg -o") - else if (sw == 'Y') - { - Yswitch = TRUE; - yarg = arg; - break; - } - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (Yswitch) yswitch = TRUE; - - if (labelorg < 0) gt_abort(">E listg: negative origin forbidden.\n"); - - if ((aswitch!=0) + (Aswitch!=0) + (eswitch!=0) + (Mswitch!=0) + - (Wswitch!=0) + (sswitch!=0) + (dswitch!=0) + (cswitch!=0) + - (Eswitch!=0) + (bswitch!=0) + (Gswitch!=0) + (yswitch!=0) + - (Hswitch!=0) > 1) - gt_abort(">E listg: -aAbMWeEHcdsGy are incompatible\n"); - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - fprintf(stderr," Try listg -help for more detailed help.\n"); - exit(1); - } - - if (!pswitch || pval1 < 1) pval1 = 1; - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,fswitch, - pswitch ? pval1 : 1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - nin = 0; - if (!pswitch || pval2 == NOLIMIT) - maxin = NOLIMIT; - else if (pval1 < 1) maxin = pval2; - else maxin = pval2 - pval1 + 1; - first = TRUE; - while (nin < maxin || maxin == NOLIMIT) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - - if (Gswitch) - { - if (first) fprintf(outfile,"graphs := [\n"); - else fprintf(outfile,",\n"); - } - - first = FALSE; - - if (Fswitch && nin > 1) fprintf(outfile,"\f"); - - if (cswitch) - putcgraph(outfile,g,linelength,m,n); - else if (dswitch) - { - if (qswitch) - fprintf(outfile,"%d\n",n); - else - { - fprintf(outfile,"\n!Graph %lu.\n",pval1+nin-1); - fprintf(outfile,"n=%d $=%d g\n",n,labelorg); - } - putgraphx(outfile,g,linelength,tswitch,m,n); - if (!qswitch) fprintf(outfile,"$$\n"); - } - else if (Mswitch) - putMagma(outfile,g,linelength,m,n,pval1+nin-1); - else if (Wswitch) - putMaple(outfile,g,linelength,m,n,pval1+nin-1); - else if (sswitch) - putve(outfile,pval1+nin-1,g,m,n); - else if (bswitch) - putbliss(outfile,pval1+nin-1,g,m,n); - else if (Gswitch) - putGRAPE(outfile,g,m,n); - else if (yswitch) - putdotty(outfile,g,pval1+nin-1,(Yswitch?yarg:NULL),m,n); - else if (Hswitch) - putHCP(outfile,g,m,n); - else - { - if (qswitch) - { - if (!eswitch && !Eswitch) fprintf(outfile,"%d\n",n); - } - else fprintf(outfile,"\nGraph %lu, order %d.\n", - pval1+nin-1,n); - if (aswitch|Aswitch) - putam(outfile,g,linelength,Aswitch,tswitch,m,n); - else if (eswitch || Eswitch) - putedges(outfile,g,Eswitch,linelength,m,n); - else - putgraphx(outfile,g,linelength,tswitch,m,n); - } - FREES(g); - if (ferror(outfile)) gt_abort(">E listg output error\n"); - } - - if (Gswitch && !first) fprintf(outfile,"\n];\n"); - - exit(0); -} diff --git a/tools/nauty25r9_unix/makefile b/tools/nauty25r9_unix/makefile deleted file mode 100644 index dd26955..0000000 --- a/tools/nauty25r9_unix/makefile +++ /dev/null @@ -1,486 +0,0 @@ -# makefile for nauty 2.5 -# makefile. Generated from makefile.in by configure. - -SHELL=/bin/sh -CC=gcc -CFLAGS= -O4 -SAFECFLAGS= -O4 -LDFLAGS= -THREADLIB=-lpthread -LOK=1 # 0 if no 64-bit integers -TESTPROGS=dreadtest dreadtestS dreadtestS1 dreadtest4K dreadtest1 dreadtestW dreadtestW1 dreadtestL1 dreadtestL -EXEEXT= - -SMALL=-DMAXN=WORDSIZE -S1=-DMAXN=WORDSIZE -DWORDSIZE=16 -W1=-DMAXN=WORDSIZE -DWORDSIZE=32 -L1=-DMAXN=WORDSIZE -DWORDSIZE=64 -S=-DWORDSIZE=16 -W=-DWORDSIZE=32 -L=-DWORDSIZE=64 - -CCOBJ=${CC} -c ${CFLAGS} -o $@ -GTOOLSH=gtools.h nauty.h naututil.h nausparse.h naurng.h - -# ++++++ This file is automatically generated, don't edit it by hand! ++++++ - -all : nauty gtools ; - -nauty : dreadnaut nauty.a nauty1.a ; - -gtools : copyg listg labelg dretog amtog geng complg showg NRswitchg \ - biplabg addedgeg deledgeg countg pickg genrang newedgeg catg genbg directg \ - ranlabg multig planarg gentourng linegraphg watercluster2 \ - subdivideg shortg ; - -NAUTYO=nauty.o nautil.o nausparse.o naugraph.o schreier.o naurng.o -NAUTY1O=nauty1.o nautil1.o nausparse.o naugraph1.o schreier.o naurng.o -NAUTYSO=nautyS.o nautilS.o nausparseS.o naugraphS.o schreierS.o naurng.o -NAUTYS1O=nautyS1.o nautilS1.o nausparseS.o naugraphS1.o schreierS.o naurng.o -NAUTYWO=nautyW.o nautilW.o nausparseW.o naugraphW.o schreierW.o naurng.o -NAUTYW1O=nautyW1.o nautilW1.o nausparseW.o naugraphW1.o schreierW.o naurng.o -NAUTYLO=nautyL.o nautilL.o nausparseL.o naugraphL.o schreierL.o naurng.o -NAUTYL1O=nautyL1.o nautilL1.o nausparseL.o naugraphL1.o schreierL.o naurng.o - -nauty.o: nauty.h schreier.h nauty.c - ${CCOBJ} nauty.c -nauty1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${SMALL} nauty.c -nautyS.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S} nauty.c -nautyS1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S1} nauty.c -nautyW.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W} nauty.c -nautyW1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W1} nauty.c -nautyL.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L} nauty.c -nautyL1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L1} nauty.c - -nautil.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} nautil.c -nautil1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${SMALL} nautil.c -nautilS.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S} nautil.c -nautilS1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S1} nautil.c -nautilW.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W} nautil.c -nautilW1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W1} nautil.c -nautilL.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L} nautil.c -nautilL1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L1} nautil.c - -naugraph.o: nauty.h naugraph.c - ${CCOBJ} naugraph.c -naugraph1.o: nauty.h naugraph.c - ${CCOBJ} ${SMALL} naugraph.c -naugraphS.o: nauty.h naugraph.c - ${CCOBJ} ${S} naugraph.c -naugraphS1.o: nauty.h naugraph.c - ${CCOBJ} ${S1} naugraph.c -naugraphW.o: nauty.h naugraph.c - ${CCOBJ} ${W} naugraph.c -naugraphW1.o: nauty.h naugraph.c - ${CCOBJ} ${W1} naugraph.c -naugraphL.o: nauty.h naugraph.c - ${CCOBJ} ${L} naugraph.c -naugraphL1.o: nauty.h naugraph.c - ${CCOBJ} ${L1} naugraph.c - -naututil.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} naututil.c -naututil1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${SMALL} naututil.c -naututilS.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S} naututil.c -naututilS1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S1} naututil.c -naututilW.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W} naututil.c -naututilW1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W1} naututil.c -naututilL.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L} naututil.c -naututilL1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L1} naututil.c - -nautinv.o: nauty.h naututil.h nautinv.c - ${CCOBJ} nautinv.c -nautinv1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${SMALL} nautinv.c -nautinvS.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S} nautinv.c -nautinvS1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S1} nautinv.c -nautinvW.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W} nautinv.c -nautinvW1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W1} nautinv.c -nautinvL.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L} nautinv.c -nautinvL1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L1} nautinv.c - -schreier.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} schreier.c -schreierS.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${S} schreier.c -schreierW.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${W} schreier.c -schreierL.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${L} schreier.c - -nausparse.o : nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} nausparse.c -nausparseS.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${S} nausparse.c -nausparseW.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${W} nausparse.c -nausparseL.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${L} nausparse.c - -traces.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} traces.c -tracesS.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${S} traces.c -tracesW.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${W} traces.c -tracesL.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${L} traces.c - -gtools.o : ${GTOOLSH} gtools.c - ${CCOBJ} gtools.c -gtoolsS.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${S} gtools.c -gtoolsW.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${W} gtools.c -gtoolsL.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${L} gtools.c - -nautaux.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} nautaux.c -nautauxS.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${S} nautaux.c -nautauxW.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${W} nautaux.c -nautauxL.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${L} nautaux.c - -gtnauty.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} gtnauty.c -gtnautyL1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L1} gtnauty.c -gtnautyW1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W1} gtnauty.c -gtnautyL.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L} gtnauty.c -gtnautyW.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W} gtnauty.c - -naurng.o: naurng.c nauty.h - ${CCOBJ} naurng.c -rng.o: rng.c nauty.h - ${CCOBJ} rng.c - -dreadnaut: dreadnaut.c naututil.o nautinv.o traces.o gtools.o ${NAUTYO} - ${CC} -o dreadnaut ${SAFECFLAGS} dreadnaut.c naututil.o \ - nautinv.o gtools.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} -dreadnautL: dreadnaut.c naututilL.o nautyL.o nautilL.o nautinvL.o \ - nausparseL.o naugraphL.o naurng.o schreierL.o tracesL.o gtoolsL.o - ${CC} -o dreadnautL ${SAFECFLAGS} ${L} dreadnaut.c naututilL.o \ - nautyL.o nautilL.o nautinvL.o naugraphL.o naurng.o gtoolsL.o \ - nausparseL.o schreierL.o tracesL.o ${LDFLAGS} -dreadnaut1: dreadnaut.c naututil1.o nauty1.o nautil1.o nautinv1.o \ - nausparse.o naugraph1.o naurng.o schreier.o traces.o gtools.o - ${CC} -o dreadnaut1 ${SAFECFLAGS} ${SMALL} dreadnaut.c naututil1.o \ - nauty1.o nautil1.o nautinv1.o naugraph1.o naurng.o gtools.o \ - nausparse.o schreier.o traces.o ${LDFLAGS} - -nauty.a: ${NAUTYO} traces.o gtools.o naututil.o nautinv.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty.a - ar crs nauty.a ${NAUTYO} traces.o gtools.o naututil.o \ - nautinv.o gutil1.o gutil2.o gtnauty.o naugroup.o \ - naurng.o schreier.o - -nauty1.a: ${NAUTY1O} traces.o gtools.o naututil1.o nautinv1.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty1.a - ar crs nauty1.a ${NAUTY1O} traces.o gtools.o naututil1.o \ - nautinv1.o gutil1.o gutil2.o gtnauty.o naugroup.o - -nautyW.a: ${NAUTYWO} traces.o gtoolsW.o naututilW.o nautinvW.o \ - gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - rm -rf nautyW.a - ar crs nautyW.a ${NAUTYWO} traces.o gtoolsW.o naututilW.o \ - nautinvW.o gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - -nautyW1.a: ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o nautinvW1.o \ - gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - rm -rf nautyW1.a - ar crs nautyW1.a ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o \ - nautinvW1.o gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - -nautyL.a: ${NAUTYLO} traces.o gtoolsL.o naututilL.o nautinvL.o \ - gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - rm -rf nautyL.a - ar crs nautyL.a ${NAUTYL1O} traces.o gtoolsL.o naututilL.o \ - nautinvL.o gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - -nautyL1.a: ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o nautinvL1.o \ - gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - rm -rf nautyL1.a - ar crs nautyL1.a ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o \ - nautinvL1.o gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - -clean: - rm -f *.o config.log config.cache config.status - rm -f dreadtest${EXEEXT} dreadtestL${EXEEXT} \ - dreadtestW${EXEEXT} \ - dreadtestS${EXEEXT} dreadtestS1${EXEEXT} \ - dreadtest4K${EXEEXT} dreadtest1${EXEEXT} \ - dreadtestL1${EXEEXT} dreadtestW1${EXEEXT} - -gutil1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} gutil1.c -gutil2.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} gutil2.c -gutil1W1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W1} gutil1.c -gutil2W1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W1} gutil2.c -gutil1L1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L1} gutil1.c -gutil2L1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L1} gutil2.c -gutil1W.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W} gutil1.c -gutil2W.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W} gutil2.c -gutil1L.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L} gutil1.c -gutil2L.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L} gutil2.c - -catg : ${GTOOLSH} catg.c gtools.o - ${CC} -o catg ${CFLAGS} catg.c gtools.o ${LDFLAGS} - -copyg : ${GTOOLSH} copyg.c gtools.o - ${CC} -o copyg ${CFLAGS} copyg.c gtools.o ${LDFLAGS} - -listg : ${GTOOLSH} listg.c gtools.o nautil.o - ${CC} -o listg ${CFLAGS} listg.c gtools.o nautil.o ${LDFLAGS} - -labelg : ${GTOOLSH} naututil.h labelg.c gtools.o gtnauty.o ${NAUTYO} \ - nautinv.o nausparse.h gutils.h gutil2.o traces.h traces.o - ${CC} -o labelg ${SAFECFLAGS} labelg.c gtools.o gtnauty.o \ - nautinv.o gutil2.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} - -shortg : ${GTOOLSH} shortg.c gtools.o gtnauty.o ${NAUTYO} \ - nausparse.h gutils.h gutil2.o nautinv.h nautinv.o traces.o - ${CC} -o shortg ${CFLAGS} shortg.c gtools.o gtnauty.o nautinv.o \ - ${NAUTYO} gutil2.o traces.o ${LDFLAGS} ${THREADLIB} - -dretog : ${GTOOLSH} dretog.c naututil.o gtools.o ${NAUTYO} - ${CC} -o dretog ${CFLAGS} dretog.c naututil.o gtools.o \ - ${NAUTYO} ${LDFLAGS} - -amtog : ${GTOOLSH} amtog.c gtools.o ${NAUTYO} - ${CC} -o amtog ${CFLAGS} amtog.c gtools.o ${NAUTYO} ${LDFLAGS} - -genbg : ${GTOOLSH} genbg.c gtoolsW.o nautyW1.o nautilW1.o naugraphW1.o \ - schreierW.o naurng.o - ${CC} -o genbg ${CFLAGS} ${W1} genbg.c gtoolsW.o schreierW.o \ - nautyW1.o nautilW1.o naugraphW1.o naurng.o ${LDFLAGS} - -genbgL : ${GTOOLSH} genbg.c gtoolsL.o nautyL1.o nautilL1.o naugraphL1.o \ - schreierL.o naurng.o - ${CC} -o genbgL ${CFLAGS} ${L1} -DMAXN1=30 genbg.c gtoolsL.o \ - schreierL.o naurng.o nautyL1.o nautilL1.o naugraphL1.o ${LDFLAGS} - -geng : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng ${CFLAGS} -DMAXN=32 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng16 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng16 ${CFLAGS} -DMAXN=16 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng24 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng24 ${CFLAGS} -DMAXN=24 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -gentourng : ${GTOOLSH} gentourng.c gtools.o nauty1.o nautil1.o \ - naugraph1.o schreier.o naurng.o - ${CC} -o gentourng ${CFLAGS} -DMAXN=24 gentourng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -genrang : ${GTOOLSH} genrang.c gtools.o naututil.o ${NAUTYO} - ${CC} -o genrang ${CFLAGS} genrang.c \ - gtools.o naututil.o ${NAUTYO} ${LDFLAGS} - -complg : ${GTOOLSH} complg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o complg ${CFLAGS} complg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -linegraphg : ${GTOOLSH} linegraphg.c gtools.o ${NAUTYO} - ${CC} -o linegraphg ${CFLAGS} linegraphg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -subdivideg : ${GTOOLSH} subdivideg.c gtools.o ${NAUTYO} - ${CC} -o subdivideg ${CFLAGS} subdivideg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -biplabg : ${GTOOLSH} gutils.h biplabg.c gtools.o gutil1.o ${NAUTYO} - ${CC} -o biplabg ${CFLAGS} biplabg.c \ - gtools.o gutil1.o ${NAUTYO} ${LDFLAGS} - -ranlabg : ${GTOOLSH} ranlabg.c gtools.o ${NAUTYO} - ${CC} -o ranlabg ${CFLAGS} ranlabg.c gtools.o ${NAUTYO} ${LDFLAGS} - -NRswitchg : ${GTOOLSH} NRswitchg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o NRswitchg ${CFLAGS} NRswitchg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -deledgeg : ${GTOOLSH} deledgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o deledgeg ${CFLAGS} deledgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -addedgeg : ${GTOOLSH} gutils.h addedgeg.c gtools.o gtnauty.o gutil1.o ${NAUTYO} - ${CC} -o addedgeg ${CFLAGS} addedgeg.c gtools.o gtnauty.o \ - gutil1.o ${NAUTYO} ${LDFLAGS} - -newedgeg : ${GTOOLSH} gutils.h newedgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o newedgeg ${CFLAGS} newedgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -pickg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o pickg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -countg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o countg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -directg : ${GTOOLSH} naugroup.h directg.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o directg ${CFLAGS} directg.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -multig : ${GTOOLSH} naugroup.h multig.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o multig ${CFLAGS} multig.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -planarg : ${GTOOLSH} planarg.c gtools.o planarity.c - ${CC} -o planarg ${CFLAGS} \ - planarg.c planarity.c gtools.o ${LDFLAGS} - -watercluster2 : ${GTOOLSH} nauty.h watercluster2.c gtools.o ${NAUTYO} - ${CC} -o watercluster2 ${CFLAGS} -DMAXN=32 watercluster2.c \ - gtools.o ${NAUTYO} ${LDFLAGS} - -showg : showg.c - ${CC} -o showg ${CFLAGS} showg.c ${LDFLAGS} - -readg : - echo "*** readg is now called showg ***" - make showg - - -sumlines : sumlines.c - ${CC} -o sumlines ${CFLAGS} sumlines.c ${LDFLAGS} -lgmp - -naugroup.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} naugroup.c -naugroupW.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${W} naugroup.c -naugroupL.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${L} naugroup.c - -nautyex1 : nauty.h nautyex1.c nauty.a - ${CC} -o nautyex1 ${CFLAGS} nautyex1.c nauty.a ${LDFLAGS} -nautyex2 : nauty.h nautyex2.c ${NAUTYO} - ${CC} -o nautyex2 ${CFLAGS} nautyex2.c nauty.a ${LDFLAGS} -nautyex3 : nauty.h nautyex3.c nauty.a - ${CC} -o nautyex3 ${CFLAGS} nautyex3.c nauty.a ${LDFLAGS} -nautyex4 : nauty.h nausparse.h nautyex4.c nauty.a - ${CC} -o nautyex4 ${CFLAGS} nautyex4.c nauty.a ${LDFLAGS} -nautyex5 : nauty.h nausparse.h nautyex5.c nauty.a - ${CC} -o nautyex5 ${CFLAGS} nautyex5.c nauty.a ${LDFLAGS} -nautyex6 : nauty.h nautyex6.c nauty.a - ${CC} -o nautyex6 ${CFLAGS} nautyex6.c nauty.a ${LDFLAGS} -nautyex7 : nauty.h nautyex7.c traces.h nauty.a - ${CC} -o nautyex7 ${CFLAGS} nautyex7.c nauty.a ${LDFLAGS} -nautyex8 : nauty.h nausparse.h nautyex8.c nauty.a - ${CC} -o nautyex8 ${CFLAGS} nautyex8.c nauty.a ${LDFLAGS} -nautyex9 : nauty.h nautyex9.c nauty.a - ${CC} -o nautyex9 ${CFLAGS} nautyex9.c nauty.a ${LDFLAGS} -nautyex10 : nauty.h nautyex10.c nauty.a - ${CC} -o nautyex10 ${CFLAGS} nautyex10.c nauty.a ${LDFLAGS} - -checks: naucompare ${TESTPROGS} ; - -naucompare : naucompare.c - ${CC} -o naucompare ${CFLAGS} naucompare.c ${LDFLAGS} - -dreadtest: dreadnaut.c nautinv.o ${NAUTYO} naututil.o traces.o gtools.o - ${CC} -o dreadtest ${SAFECFLAGS} -DDREADTEST dreadnaut.c \ - nautinv.o naututil.o traces.o gtools.o ${NAUTYO} ${LDFLAGS} -dreadtest1: dreadnaut.c nautinv1.o ${NAUTY1O} naututil1.o traces.o gtools.o - ${CC} -o dreadtest1 ${SAFECFLAGS} ${SMALL} -DDREADTEST dreadnaut.c \ - nautinv1.o naututil1.o traces.o gtools.o ${NAUTY1O} ${LDFLAGS} -dreadtestS: dreadnaut.c nautinvS.o ${NAUTYSO} naututilS.o tracesS.o gtoolsS.o - ${CC} -o dreadtestS ${SAFECFLAGS} ${S} -DDREADTEST dreadnaut.c \ - nautinvS.o naututilS.o tracesS.o gtoolsS.o ${NAUTYSO} ${LDFLAGS} -dreadtestS1: dreadnaut.c nautinvS1.o ${NAUTYS1O} naututilS1.o \ - tracesS.o gtoolsS.o - ${CC} -o dreadtestS1 ${SAFECFLAGS} ${S1} -DDREADTEST dreadnaut.c \ - nautinvS1.o naututilS1.o tracesS.o gtoolsS.o ${NAUTYS1O} ${LDFLAGS} -dreadtestW: dreadnaut.c nautinvW.o ${NAUTYWO} naututilW.o tracesW.o gtoolsW.o - ${CC} -o dreadtestW ${SAFECFLAGS} ${W} -DDREADTEST dreadnaut.c \ - nautinvW.o naututilW.o tracesW.o gtoolsW.o ${NAUTYWO} ${LDFLAGS} -dreadtestW1: dreadnaut.c nautinvW1.o ${NAUTYW1O} naututilW1.o \ - tracesW.o gtoolsW.o - ${CC} -o dreadtestW1 ${SAFECFLAGS} ${W1} -DDREADTEST dreadnaut.c \ - nautinvW1.o naututilW1.o tracesW.o gtoolsW.o ${NAUTYW1O} ${LDFLAGS} -dreadtestL: dreadnaut.c nautinvL.o ${NAUTYLO} naututilL.o tracesL.o gtoolsL.o - ${CC} -o dreadtestL ${SAFECFLAGS} ${L} -DDREADTEST dreadnaut.c \ - nautinvL.o naututilL.o tracesL.o gtoolsL.o ${NAUTYLO} ${LDFLAGS} -dreadtestL1: dreadnaut.c nautinvL1.o ${NAUTYL1O} naututilL1.o \ - tracesL.o gtoolsL.o - ${CC} -o dreadtestL1 ${SAFECFLAGS} ${L1} -DDREADTEST dreadnaut.c \ - nautinvL1.o naututilL1.o tracesL.o gtoolsL.o ${NAUTYL1O} ${LDFLAGS} -dreadtest4K: dreadnaut.c nausparse.c schreier.c naututil.c nauty.c \ - nautil.c nautinv.c naugraph.c naurng.o gtools.c traces.c - ${CC} -o dreadtest4K ${SAFECFLAGS} -DMAXN=4096 -DDREADTEST \ - dreadnaut.c naututil.c nauty.c nautil.c nautinv.c \ - naugraph.c nausparse.c naurng.o schreier.c gtools.c \ - traces.c ${LDFLAGS} - -checks6: checks6.c ${GTOOLSH} gtools.o - ${CC} -o checks6 ${SAFECFLAGS} checks6.c gtools.o - -bigs: gtnauty.o gutil2.o nausparse.o nautil.o naututil.o gtools.o \ - naugraph.o nautaux.o nautinv.o nauty.o schreier.o - rm -f gtnautyB.o gutil2B.o nausparseB.o nautilB.o naututilB.o \ - gtoolsB.o naugraphB.o nautauxB.o nautinvB.o nautyB.o - cp gtnauty.o gtnautyB.o - cp gutil2.o gutil2B.o - cp nausparse.o nausparseB.o - cp nautil.o nautilB.o - cp naututil.o naututilB.o - cp gtools.o gtoolsB.o - cp naugraph.o naugraphB.o - cp nautaux.o nautauxB.o - cp nautinv.o nautinvB.o - cp nauty.o nautyB.o - cp schreier.o schreierB.o - -# ++++++ This file is automatically generated, don't edit it by hand! ++++++ diff --git a/tools/nauty25r9_unix/makefile.basic b/tools/nauty25r9_unix/makefile.basic deleted file mode 100644 index 11f6122..0000000 --- a/tools/nauty25r9_unix/makefile.basic +++ /dev/null @@ -1,486 +0,0 @@ -# makefile for nauty 2.5 -# makefile. Generated from makefile.in by configure. - -SHELL=/bin/sh -CC=gcc -CFLAGS=-O2 -SAFECFLAGS= -O4 -LDFLAGS= -THREADLIB=-lpthread -LOK=1 # 0 if no 64-bit integers -TESTPROGS=dreadtest dreadtestS dreadtestS1 dreadtest4K dreadtest1 dreadtestW dreadtestW1 dreadtestL1 dreadtestL -EXEEXT= - -SMALL=-DMAXN=WORDSIZE -S1=-DMAXN=WORDSIZE -DWORDSIZE=16 -W1=-DMAXN=WORDSIZE -DWORDSIZE=32 -L1=-DMAXN=WORDSIZE -DWORDSIZE=64 -S=-DWORDSIZE=16 -W=-DWORDSIZE=32 -L=-DWORDSIZE=64 - -CCOBJ=${CC} -c ${CFLAGS} -o $@ -GTOOLSH=gtools.h nauty.h naututil.h nausparse.h naurng.h - -# ++++++ This file is automatically generated, don't edit it by hand! ++++++ - -all : nauty gtools ; - -nauty : dreadnaut nauty.a nauty1.a ; - -gtools : copyg listg labelg dretog amtog geng complg showg NRswitchg \ - biplabg addedgeg deledgeg countg pickg genrang newedgeg catg genbg directg \ - ranlabg multig planarg gentourng linegraphg watercluster2 \ - subdivideg shortg ; - -NAUTYO=nauty.o nautil.o nausparse.o naugraph.o schreier.o naurng.o -NAUTY1O=nauty1.o nautil1.o nausparse.o naugraph1.o schreier.o naurng.o -NAUTYSO=nautyS.o nautilS.o nausparseS.o naugraphS.o schreierS.o naurng.o -NAUTYS1O=nautyS1.o nautilS1.o nausparseS.o naugraphS1.o schreierS.o naurng.o -NAUTYWO=nautyW.o nautilW.o nausparseW.o naugraphW.o schreierW.o naurng.o -NAUTYW1O=nautyW1.o nautilW1.o nausparseW.o naugraphW1.o schreierW.o naurng.o -NAUTYLO=nautyL.o nautilL.o nausparseL.o naugraphL.o schreierL.o naurng.o -NAUTYL1O=nautyL1.o nautilL1.o nausparseL.o naugraphL1.o schreierL.o naurng.o - -nauty.o: nauty.h schreier.h nauty.c - ${CCOBJ} nauty.c -nauty1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${SMALL} nauty.c -nautyS.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S} nauty.c -nautyS1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S1} nauty.c -nautyW.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W} nauty.c -nautyW1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W1} nauty.c -nautyL.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L} nauty.c -nautyL1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L1} nauty.c - -nautil.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} nautil.c -nautil1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${SMALL} nautil.c -nautilS.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S} nautil.c -nautilS1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S1} nautil.c -nautilW.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W} nautil.c -nautilW1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W1} nautil.c -nautilL.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L} nautil.c -nautilL1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L1} nautil.c - -naugraph.o: nauty.h naugraph.c - ${CCOBJ} naugraph.c -naugraph1.o: nauty.h naugraph.c - ${CCOBJ} ${SMALL} naugraph.c -naugraphS.o: nauty.h naugraph.c - ${CCOBJ} ${S} naugraph.c -naugraphS1.o: nauty.h naugraph.c - ${CCOBJ} ${S1} naugraph.c -naugraphW.o: nauty.h naugraph.c - ${CCOBJ} ${W} naugraph.c -naugraphW1.o: nauty.h naugraph.c - ${CCOBJ} ${W1} naugraph.c -naugraphL.o: nauty.h naugraph.c - ${CCOBJ} ${L} naugraph.c -naugraphL1.o: nauty.h naugraph.c - ${CCOBJ} ${L1} naugraph.c - -naututil.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} naututil.c -naututil1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${SMALL} naututil.c -naututilS.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S} naututil.c -naututilS1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S1} naututil.c -naututilW.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W} naututil.c -naututilW1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W1} naututil.c -naututilL.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L} naututil.c -naututilL1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L1} naututil.c - -nautinv.o: nauty.h naututil.h nautinv.c - ${CCOBJ} nautinv.c -nautinv1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${SMALL} nautinv.c -nautinvS.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S} nautinv.c -nautinvS1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S1} nautinv.c -nautinvW.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W} nautinv.c -nautinvW1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W1} nautinv.c -nautinvL.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L} nautinv.c -nautinvL1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L1} nautinv.c - -schreier.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} schreier.c -schreierS.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${S} schreier.c -schreierW.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${W} schreier.c -schreierL.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${L} schreier.c - -nausparse.o : nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} nausparse.c -nausparseS.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${S} nausparse.c -nausparseW.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${W} nausparse.c -nausparseL.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${L} nausparse.c - -traces.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} traces.c -tracesS.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${S} traces.c -tracesW.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${W} traces.c -tracesL.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${L} traces.c - -gtools.o : ${GTOOLSH} gtools.c - ${CCOBJ} gtools.c -gtoolsS.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${S} gtools.c -gtoolsW.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${W} gtools.c -gtoolsL.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${L} gtools.c - -nautaux.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} nautaux.c -nautauxS.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${S} nautaux.c -nautauxW.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${W} nautaux.c -nautauxL.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${L} nautaux.c - -gtnauty.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} gtnauty.c -gtnautyL1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L1} gtnauty.c -gtnautyW1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W1} gtnauty.c -gtnautyL.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L} gtnauty.c -gtnautyW.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W} gtnauty.c - -naurng.o: naurng.c - ${CCOBJ} naurng.c -rng.o: rng.c - ${CCOBJ} rng.c - -dreadnaut: dreadnaut.c naututil.o nautinv.o traces.o gtools.o ${NAUTYO} - ${CC} -o dreadnaut ${SAFECFLAGS} dreadnaut.c naututil.o \ - nautinv.o gtools.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} -dreadnautL: dreadnaut.c naututilL.o nautyL.o nautilL.o nautinvL.o \ - nausparseL.o naugraphL.o naurng.o schreierL.o tracesL.o gtoolsL.o - ${CC} -o dreadnautL ${SAFECFLAGS} ${L} dreadnaut.c naututilL.o \ - nautyL.o nautilL.o nautinvL.o naugraphL.o naurng.o gtoolsL.o \ - nausparseL.o schreierL.o tracesL.o ${LDFLAGS} -dreadnaut1: dreadnaut.c naututil1.o nauty1.o nautil1.o nautinv1.o \ - nausparse.o naugraph1.o naurng.o schreier.o traces.o gtools.o - ${CC} -o dreadnaut1 ${SAFECFLAGS} ${SMALL} dreadnaut.c naututil1.o \ - nauty1.o nautil1.o nautinv1.o naugraph1.o naurng.o gtools.o \ - nausparse.o schreier.o traces.o ${LDFLAGS} - -nauty.a: ${NAUTYO} traces.o gtools.o naututil.o nautinv.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty.a - ar crs nauty.a ${NAUTYO} traces.o gtools.o naututil.o \ - nautinv.o gutil1.o gutil2.o gtnauty.o naugroup.o \ - naurng.o schreier.o - -nauty1.a: ${NAUTY1O} traces.o gtools.o naututil1.o nautinv1.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty1.a - ar crs nauty1.a ${NAUTY1O} traces.o gtools.o naututil1.o \ - nautinv1.o gutil1.o gutil2.o gtnauty.o naugroup.o - -nautyW.a: ${NAUTYWO} traces.o gtoolsW.o naututilW.o nautinvW.o \ - gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - rm -rf nautyW.a - ar crs nautyW.a ${NAUTYWO} traces.o gtoolsW.o naututilW.o \ - nautinvW.o gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - -nautyW1.a: ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o nautinvW1.o \ - gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - rm -rf nautyW1.a - ar crs nautyW1.a ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o \ - nautinvW1.o gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - -nautyL.a: ${NAUTYLO} traces.o gtoolsL.o naututilL.o nautinvL.o \ - gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - rm -rf nautyL.a - ar crs nautyL.a ${NAUTYL1O} traces.o gtoolsL.o naututilL.o \ - nautinvL.o gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - -nautyL1.a: ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o nautinvL1.o \ - gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - rm -rf nautyL1.a - ar crs nautyL1.a ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o \ - nautinvL1.o gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - -clean: - rm -f *.o config.log config.cache config.status - rm -f dreadtest${EXEEXT} dreadtestL${EXEEXT} \ - dreadtestW${EXEEXT} \ - dreadtestS${EXEEXT} dreadtestS1${EXEEXT} \ - dreadtest4K${EXEEXT} dreadtest1${EXEEXT} \ - dreadtestL1${EXEEXT} dreadtestW1${EXEEXT} - -gutil1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} gutil1.c -gutil2.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} gutil2.c -gutil1W1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W1} gutil1.c -gutil2W1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W1} gutil2.c -gutil1L1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L1} gutil1.c -gutil2L1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L1} gutil2.c -gutil1W.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W} gutil1.c -gutil2W.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W} gutil2.c -gutil1L.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L} gutil1.c -gutil2L.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L} gutil2.c - -catg : ${GTOOLSH} catg.c gtools.o - ${CC} -o catg ${CFLAGS} catg.c gtools.o ${LDFLAGS} - -copyg : ${GTOOLSH} copyg.c gtools.o - ${CC} -o copyg ${CFLAGS} copyg.c gtools.o ${LDFLAGS} - -listg : ${GTOOLSH} listg.c gtools.o nautil.o - ${CC} -o listg ${CFLAGS} listg.c gtools.o nautil.o ${LDFLAGS} - -labelg : ${GTOOLSH} naututil.h labelg.c gtools.o gtnauty.o ${NAUTYO} \ - nautinv.o nausparse.h gutils.h gutil2.o traces.h traces.o - ${CC} -o labelg ${SAFECFLAGS} labelg.c gtools.o gtnauty.o \ - nautinv.o gutil2.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} - -shortg : ${GTOOLSH} shortg.c gtools.o gtnauty.o ${NAUTYO} \ - nausparse.h gutils.h gutil2.o nautinv.h nautinv.o traces.o - ${CC} -o shortg ${CFLAGS} shortg.c gtools.o gtnauty.o nautinv.o \ - ${NAUTYO} gutil2.o traces.o ${LDFLAGS} ${THREADLIB} - -dretog : ${GTOOLSH} dretog.c naututil.o gtools.o ${NAUTYO} - ${CC} -o dretog ${CFLAGS} dretog.c naututil.o gtools.o \ - ${NAUTYO} ${LDFLAGS} - -amtog : ${GTOOLSH} amtog.c gtools.o ${NAUTYO} - ${CC} -o amtog ${CFLAGS} amtog.c gtools.o ${NAUTYO} ${LDFLAGS} - -genbg : ${GTOOLSH} genbg.c gtoolsW.o nautyW1.o nautilW1.o naugraphW1.o \ - schreierW.o naurng.o - ${CC} -o genbg ${CFLAGS} ${W1} genbg.c gtoolsW.o schreierW.o \ - nautyW1.o nautilW1.o naugraphW1.o naurng.o ${LDFLAGS} - -genbgL : ${GTOOLSH} genbg.c gtoolsL.o nautyL1.o nautilL1.o naugraphL1.o \ - schreierL.o naurng.o - ${CC} -o genbgL ${CFLAGS} ${L1} -DMAXN1=30 genbg.c gtoolsL.o \ - schreierL.o naurng.o nautyL1.o nautilL1.o naugraphL1.o ${LDFLAGS} - -geng : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng ${CFLAGS} -DMAXN=32 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng16 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng16 ${CFLAGS} -DMAXN=16 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng24 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng24 ${CFLAGS} -DMAXN=24 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -gentourng : ${GTOOLSH} gentourng.c gtools.o nauty1.o nautil1.o \ - naugraph1.o schreier.o naurng.o - ${CC} -o gentourng ${CFLAGS} -DMAXN=24 gentourng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -genrang : ${GTOOLSH} genrang.c gtools.o naututil.o ${NAUTYO} - ${CC} -o genrang ${CFLAGS} genrang.c \ - gtools.o naututil.o ${NAUTYO} ${LDFLAGS} - -complg : ${GTOOLSH} complg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o complg ${CFLAGS} complg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -linegraphg : ${GTOOLSH} linegraphg.c gtools.o ${NAUTYO} - ${CC} -o linegraphg ${CFLAGS} linegraphg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -subdivideg : ${GTOOLSH} subdivideg.c gtools.o ${NAUTYO} - ${CC} -o subdivideg ${CFLAGS} subdivideg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -biplabg : ${GTOOLSH} gutils.h biplabg.c gtools.o gutil1.o ${NAUTYO} - ${CC} -o biplabg ${CFLAGS} biplabg.c \ - gtools.o gutil1.o ${NAUTYO} ${LDFLAGS} - -ranlabg : ${GTOOLSH} ranlabg.c gtools.o ${NAUTYO} - ${CC} -o ranlabg ${CFLAGS} ranlabg.c gtools.o ${NAUTYO} ${LDFLAGS} - -NRswitchg : ${GTOOLSH} NRswitchg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o NRswitchg ${CFLAGS} NRswitchg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -deledgeg : ${GTOOLSH} deledgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o deledgeg ${CFLAGS} deledgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -addedgeg : ${GTOOLSH} gutils.h addedgeg.c gtools.o gtnauty.o gutil1.o ${NAUTYO} - ${CC} -o addedgeg ${CFLAGS} addedgeg.c gtools.o gtnauty.o \ - gutil1.o ${NAUTYO} ${LDFLAGS} - -newedgeg : ${GTOOLSH} gutils.h newedgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o newedgeg ${CFLAGS} newedgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -pickg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o pickg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -countg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o countg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -directg : ${GTOOLSH} naugroup.h directg.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o directg ${CFLAGS} directg.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -multig : ${GTOOLSH} naugroup.h multig.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o multig ${CFLAGS} multig.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -planarg : ${GTOOLSH} planarg.c gtools.o planarity.c - ${CC} -o planarg ${CFLAGS} \ - planarg.c planarity.c gtools.o ${LDFLAGS} - -watercluster2 : ${GTOOLSH} nauty.h watercluster2.c gtools.o ${NAUTYO} - ${CC} -o watercluster2 ${CFLAGS} -DMAXN=32 watercluster2.c \ - gtools.o ${NAUTYO} ${LDFLAGS} - -showg : showg.c - ${CC} -o showg ${CFLAGS} showg.c ${LDFLAGS} - -readg : - echo "*** readg is now called showg ***" - make showg - - -sumlines : sumlines.c - ${CC} -o sumlines ${CFLAGS} sumlines.c ${LDFLAGS} -lgmp - -naugroup.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} naugroup.c -naugroupW.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${W} naugroup.c -naugroupL.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${L} naugroup.c - -nautyex1 : nauty.h nautyex1.c nauty.a - ${CC} -o nautyex1 ${CFLAGS} nautyex1.c nauty.a ${LDFLAGS} -nautyex2 : nauty.h nautyex2.c ${NAUTYO} - ${CC} -o nautyex2 ${CFLAGS} nautyex2.c nauty.a ${LDFLAGS} -nautyex3 : nauty.h nautyex3.c nauty.a - ${CC} -o nautyex3 ${CFLAGS} nautyex3.c nauty.a ${LDFLAGS} -nautyex4 : nauty.h nausparse.h nautyex4.c nauty.a - ${CC} -o nautyex4 ${CFLAGS} nautyex4.c nauty.a ${LDFLAGS} -nautyex5 : nauty.h nausparse.h nautyex5.c nauty.a - ${CC} -o nautyex5 ${CFLAGS} nautyex5.c nauty.a ${LDFLAGS} -nautyex6 : nauty.h nautyex6.c nauty.a - ${CC} -o nautyex6 ${CFLAGS} nautyex6.c nauty.a ${LDFLAGS} -nautyex7 : nauty.h nautyex7.c traces.h nauty.a - ${CC} -o nautyex7 ${CFLAGS} nautyex7.c nauty.a ${LDFLAGS} -nautyex8 : nauty.h nausparse.h nautyex8.c nauty.a - ${CC} -o nautyex8 ${CFLAGS} nautyex8.c nauty.a ${LDFLAGS} -nautyex9 : nauty.h nautyex9.c nauty.a - ${CC} -o nautyex9 ${CFLAGS} nautyex9.c nauty.a ${LDFLAGS} -nautyex10 : nauty.h nautyex10.c nauty.a - ${CC} -o nautyex10 ${CFLAGS} nautyex10.c nauty.a ${LDFLAGS} - -checks: naucompare ${TESTPROGS} ; - -naucompare : naucompare.c - ${CC} -o naucompare ${CFLAGS} naucompare.c ${LDFLAGS} - -dreadtest: dreadnaut.c nautinv.o ${NAUTYO} naututil.o traces.o gtools.o - ${CC} -o dreadtest ${SAFECFLAGS} -DDREADTEST dreadnaut.c \ - nautinv.o naututil.o traces.o gtools.o ${NAUTYO} ${LDFLAGS} -dreadtest1: dreadnaut.c nautinv1.o ${NAUTY1O} naututil1.o traces.o gtools.o - ${CC} -o dreadtest1 ${SAFECFLAGS} ${SMALL} -DDREADTEST dreadnaut.c \ - nautinv1.o naututil1.o traces.o gtools.o ${NAUTY1O} ${LDFLAGS} -dreadtestS: dreadnaut.c nautinvS.o ${NAUTYSO} naututilS.o tracesS.o gtoolsS.o - ${CC} -o dreadtestS ${SAFECFLAGS} ${S} -DDREADTEST dreadnaut.c \ - nautinvS.o naututilS.o tracesS.o gtoolsS.o ${NAUTYSO} ${LDFLAGS} -dreadtestS1: dreadnaut.c nautinvS1.o ${NAUTYS1O} naututilS1.o \ - tracesS.o gtoolsS.o - ${CC} -o dreadtestS1 ${SAFECFLAGS} ${S1} -DDREADTEST dreadnaut.c \ - nautinvS1.o naututilS1.o tracesS.o gtoolsS.o ${NAUTYS1O} ${LDFLAGS} -dreadtestW: dreadnaut.c nautinvW.o ${NAUTYWO} naututilW.o tracesW.o gtoolsW.o - ${CC} -o dreadtestW ${SAFECFLAGS} ${W} -DDREADTEST dreadnaut.c \ - nautinvW.o naututilW.o tracesW.o gtoolsW.o ${NAUTYWO} ${LDFLAGS} -dreadtestW1: dreadnaut.c nautinvW1.o ${NAUTYW1O} naututilW1.o \ - tracesW.o gtoolsW.o - ${CC} -o dreadtestW1 ${SAFECFLAGS} ${W1} -DDREADTEST dreadnaut.c \ - nautinvW1.o naututilW1.o tracesW.o gtoolsW.o ${NAUTYW1O} ${LDFLAGS} -dreadtestL: dreadnaut.c nautinvL.o ${NAUTYLO} naututilL.o tracesL.o gtoolsL.o - ${CC} -o dreadtestL ${SAFECFLAGS} ${L} -DDREADTEST dreadnaut.c \ - nautinvL.o naututilL.o tracesL.o gtoolsL.o ${NAUTYLO} ${LDFLAGS} -dreadtestL1: dreadnaut.c nautinvL1.o ${NAUTYL1O} naututilL1.o \ - tracesL.o gtoolsL.o - ${CC} -o dreadtestL1 ${SAFECFLAGS} ${L1} -DDREADTEST dreadnaut.c \ - nautinvL1.o naututilL1.o tracesL.o gtoolsL.o ${NAUTYL1O} ${LDFLAGS} -dreadtest4K: dreadnaut.c nausparse.c schreier.c naututil.c nauty.c \ - nautil.c nautinv.c naugraph.c naurng.o gtools.c traces.c - ${CC} -o dreadtest4K ${SAFECFLAGS} -DMAXN=4096 -DDREADTEST \ - dreadnaut.c naututil.c nauty.c nautil.c nautinv.c \ - naugraph.c nausparse.c naurng.o schreier.c gtools.c \ - traces.c ${LDFLAGS} - -checks6: checks6.c ${GTOOLSH} gtools.o - ${CC} -o checks6 ${SAFECFLAGS} checks6.c gtools.o - -bigs: gtnauty.o gutil2.o nausparse.o nautil.o naututil.o gtools.o \ - naugraph.o nautaux.o nautinv.o nauty.o schreier.o - rm -f gtnautyB.o gutil2B.o nausparseB.o nautilB.o naututilB.o \ - gtoolsB.o naugraphB.o nautauxB.o nautinvB.o nautyB.o - cp gtnauty.o gtnautyB.o - cp gutil2.o gutil2B.o - cp nausparse.o nausparseB.o - cp nautil.o nautilB.o - cp naututil.o naututilB.o - cp gtools.o gtoolsB.o - cp naugraph.o naugraphB.o - cp nautaux.o nautauxB.o - cp nautinv.o nautinvB.o - cp nauty.o nautyB.o - cp schreier.o schreierB.o - -# ++++++ This file is automatically generated, don't edit it by hand! ++++++ diff --git a/tools/nauty25r9_unix/makefile.in b/tools/nauty25r9_unix/makefile.in deleted file mode 100644 index 459c551..0000000 --- a/tools/nauty25r9_unix/makefile.in +++ /dev/null @@ -1,486 +0,0 @@ -# makefile for nauty 2.5 -# @configure_input@ - -SHELL=/bin/sh -CC=@CC@ -CFLAGS=@CFLAGS@ @MORECFLAGS@ -SAFECFLAGS=@CFLAGS@ -LDFLAGS=@LDFLAGS@ @LIBS@ -THREADLIB=@threadlib@ -LOK=@lok@ # 0 if no 64-bit integers -TESTPROGS=@testprogs@ -EXEEXT=@EXEEXT@ - -SMALL=-DMAXN=WORDSIZE -S1=-DMAXN=WORDSIZE -DWORDSIZE=16 -W1=-DMAXN=WORDSIZE -DWORDSIZE=32 -L1=-DMAXN=WORDSIZE -DWORDSIZE=64 -S=-DWORDSIZE=16 -W=-DWORDSIZE=32 -L=-DWORDSIZE=64 - -CCOBJ=${CC} -c ${CFLAGS} -o $@ -GTOOLSH=gtools.h nauty.h naututil.h nausparse.h naurng.h - -# @edit_msg@ - -all : nauty gtools ; - -nauty : dreadnaut nauty.a nauty1.a ; - -gtools : copyg listg labelg dretog amtog geng complg showg NRswitchg \ - biplabg addedgeg deledgeg countg pickg genrang newedgeg catg genbg directg \ - ranlabg multig planarg gentourng linegraphg watercluster2 \ - subdivideg @shortg_or_null@ ; - -NAUTYO=nauty.o nautil.o nausparse.o naugraph.o schreier.o naurng.o -NAUTY1O=nauty1.o nautil1.o nausparse.o naugraph1.o schreier.o naurng.o -NAUTYSO=nautyS.o nautilS.o nausparseS.o naugraphS.o schreierS.o naurng.o -NAUTYS1O=nautyS1.o nautilS1.o nausparseS.o naugraphS1.o schreierS.o naurng.o -NAUTYWO=nautyW.o nautilW.o nausparseW.o naugraphW.o schreierW.o naurng.o -NAUTYW1O=nautyW1.o nautilW1.o nausparseW.o naugraphW1.o schreierW.o naurng.o -NAUTYLO=nautyL.o nautilL.o nausparseL.o naugraphL.o schreierL.o naurng.o -NAUTYL1O=nautyL1.o nautilL1.o nausparseL.o naugraphL1.o schreierL.o naurng.o - -nauty.o: nauty.h schreier.h nauty.c - ${CCOBJ} nauty.c -nauty1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${SMALL} nauty.c -nautyS.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S} nauty.c -nautyS1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S1} nauty.c -nautyW.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W} nauty.c -nautyW1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W1} nauty.c -nautyL.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L} nauty.c -nautyL1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L1} nauty.c - -nautil.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} nautil.c -nautil1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${SMALL} nautil.c -nautilS.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S} nautil.c -nautilS1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S1} nautil.c -nautilW.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W} nautil.c -nautilW1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W1} nautil.c -nautilL.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L} nautil.c -nautilL1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L1} nautil.c - -naugraph.o: nauty.h naugraph.c - ${CCOBJ} naugraph.c -naugraph1.o: nauty.h naugraph.c - ${CCOBJ} ${SMALL} naugraph.c -naugraphS.o: nauty.h naugraph.c - ${CCOBJ} ${S} naugraph.c -naugraphS1.o: nauty.h naugraph.c - ${CCOBJ} ${S1} naugraph.c -naugraphW.o: nauty.h naugraph.c - ${CCOBJ} ${W} naugraph.c -naugraphW1.o: nauty.h naugraph.c - ${CCOBJ} ${W1} naugraph.c -naugraphL.o: nauty.h naugraph.c - ${CCOBJ} ${L} naugraph.c -naugraphL1.o: nauty.h naugraph.c - ${CCOBJ} ${L1} naugraph.c - -naututil.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} naututil.c -naututil1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${SMALL} naututil.c -naututilS.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S} naututil.c -naututilS1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S1} naututil.c -naututilW.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W} naututil.c -naututilW1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W1} naututil.c -naututilL.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L} naututil.c -naututilL1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L1} naututil.c - -nautinv.o: nauty.h naututil.h nautinv.c - ${CCOBJ} nautinv.c -nautinv1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${SMALL} nautinv.c -nautinvS.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S} nautinv.c -nautinvS1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S1} nautinv.c -nautinvW.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W} nautinv.c -nautinvW1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W1} nautinv.c -nautinvL.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L} nautinv.c -nautinvL1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L1} nautinv.c - -schreier.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} schreier.c -schreierS.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${S} schreier.c -schreierW.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${W} schreier.c -schreierL.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${L} schreier.c - -nausparse.o : nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} nausparse.c -nausparseS.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${S} nausparse.c -nausparseW.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${W} nausparse.c -nausparseL.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${L} nausparse.c - -traces.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} traces.c -tracesS.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${S} traces.c -tracesW.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${W} traces.c -tracesL.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${L} traces.c - -gtools.o : ${GTOOLSH} gtools.c - ${CCOBJ} gtools.c -gtoolsS.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${S} gtools.c -gtoolsW.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${W} gtools.c -gtoolsL.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${L} gtools.c - -nautaux.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} nautaux.c -nautauxS.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${S} nautaux.c -nautauxW.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${W} nautaux.c -nautauxL.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${L} nautaux.c - -gtnauty.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} gtnauty.c -gtnautyL1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L1} gtnauty.c -gtnautyW1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W1} gtnauty.c -gtnautyL.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L} gtnauty.c -gtnautyW.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W} gtnauty.c - -naurng.o: naurng.c nauty.h - ${CCOBJ} naurng.c -rng.o: rng.c nauty.h - ${CCOBJ} rng.c - -dreadnaut: dreadnaut.c naututil.o nautinv.o traces.o gtools.o ${NAUTYO} - ${CC} -o dreadnaut ${SAFECFLAGS} dreadnaut.c naututil.o \ - nautinv.o gtools.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} -dreadnautL: dreadnaut.c naututilL.o nautyL.o nautilL.o nautinvL.o \ - nausparseL.o naugraphL.o naurng.o schreierL.o tracesL.o gtoolsL.o - ${CC} -o dreadnautL ${SAFECFLAGS} ${L} dreadnaut.c naututilL.o \ - nautyL.o nautilL.o nautinvL.o naugraphL.o naurng.o gtoolsL.o \ - nausparseL.o schreierL.o tracesL.o ${LDFLAGS} -dreadnaut1: dreadnaut.c naututil1.o nauty1.o nautil1.o nautinv1.o \ - nausparse.o naugraph1.o naurng.o schreier.o traces.o gtools.o - ${CC} -o dreadnaut1 ${SAFECFLAGS} ${SMALL} dreadnaut.c naututil1.o \ - nauty1.o nautil1.o nautinv1.o naugraph1.o naurng.o gtools.o \ - nausparse.o schreier.o traces.o ${LDFLAGS} - -nauty.a: ${NAUTYO} traces.o gtools.o naututil.o nautinv.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty.a - ar crs nauty.a ${NAUTYO} traces.o gtools.o naututil.o \ - nautinv.o gutil1.o gutil2.o gtnauty.o naugroup.o \ - naurng.o schreier.o - -nauty1.a: ${NAUTY1O} traces.o gtools.o naututil1.o nautinv1.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty1.a - ar crs nauty1.a ${NAUTY1O} traces.o gtools.o naututil1.o \ - nautinv1.o gutil1.o gutil2.o gtnauty.o naugroup.o - -nautyW.a: ${NAUTYWO} traces.o gtoolsW.o naututilW.o nautinvW.o \ - gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - rm -rf nautyW.a - ar crs nautyW.a ${NAUTYWO} traces.o gtoolsW.o naututilW.o \ - nautinvW.o gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - -nautyW1.a: ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o nautinvW1.o \ - gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - rm -rf nautyW1.a - ar crs nautyW1.a ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o \ - nautinvW1.o gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - -nautyL.a: ${NAUTYLO} traces.o gtoolsL.o naututilL.o nautinvL.o \ - gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - rm -rf nautyL.a - ar crs nautyL.a ${NAUTYL1O} traces.o gtoolsL.o naututilL.o \ - nautinvL.o gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - -nautyL1.a: ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o nautinvL1.o \ - gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - rm -rf nautyL1.a - ar crs nautyL1.a ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o \ - nautinvL1.o gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - -clean: - rm -f *.o config.log config.cache config.status - rm -f dreadtest${EXEEXT} dreadtestL${EXEEXT} \ - dreadtestW${EXEEXT} \ - dreadtestS${EXEEXT} dreadtestS1${EXEEXT} \ - dreadtest4K${EXEEXT} dreadtest1${EXEEXT} \ - dreadtestL1${EXEEXT} dreadtestW1${EXEEXT} - -gutil1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} gutil1.c -gutil2.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} gutil2.c -gutil1W1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W1} gutil1.c -gutil2W1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W1} gutil2.c -gutil1L1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L1} gutil1.c -gutil2L1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L1} gutil2.c -gutil1W.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W} gutil1.c -gutil2W.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W} gutil2.c -gutil1L.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L} gutil1.c -gutil2L.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L} gutil2.c - -catg : ${GTOOLSH} catg.c gtools.o - ${CC} -o catg ${CFLAGS} catg.c gtools.o ${LDFLAGS} - -copyg : ${GTOOLSH} copyg.c gtools.o - ${CC} -o copyg ${CFLAGS} copyg.c gtools.o ${LDFLAGS} - -listg : ${GTOOLSH} listg.c gtools.o nautil.o - ${CC} -o listg ${CFLAGS} listg.c gtools.o nautil.o ${LDFLAGS} - -labelg : ${GTOOLSH} naututil.h labelg.c gtools.o gtnauty.o ${NAUTYO} \ - nautinv.o nausparse.h gutils.h gutil2.o traces.h traces.o - ${CC} -o labelg ${SAFECFLAGS} labelg.c gtools.o gtnauty.o \ - nautinv.o gutil2.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} - -shortg : ${GTOOLSH} shortg.c gtools.o gtnauty.o ${NAUTYO} \ - nausparse.h gutils.h gutil2.o nautinv.h nautinv.o traces.o - ${CC} -o shortg ${CFLAGS} shortg.c gtools.o gtnauty.o nautinv.o \ - ${NAUTYO} gutil2.o traces.o ${LDFLAGS} ${THREADLIB} - -dretog : ${GTOOLSH} dretog.c naututil.o gtools.o ${NAUTYO} - ${CC} -o dretog ${CFLAGS} dretog.c naututil.o gtools.o \ - ${NAUTYO} ${LDFLAGS} - -amtog : ${GTOOLSH} amtog.c gtools.o ${NAUTYO} - ${CC} -o amtog ${CFLAGS} amtog.c gtools.o ${NAUTYO} ${LDFLAGS} - -genbg : ${GTOOLSH} genbg.c gtoolsW.o nautyW1.o nautilW1.o naugraphW1.o \ - schreierW.o naurng.o - ${CC} -o genbg ${CFLAGS} ${W1} genbg.c gtoolsW.o schreierW.o \ - nautyW1.o nautilW1.o naugraphW1.o naurng.o ${LDFLAGS} - -genbgL : ${GTOOLSH} genbg.c gtoolsL.o nautyL1.o nautilL1.o naugraphL1.o \ - schreierL.o naurng.o - ${CC} -o genbgL ${CFLAGS} ${L1} -DMAXN1=30 genbg.c gtoolsL.o \ - schreierL.o naurng.o nautyL1.o nautilL1.o naugraphL1.o ${LDFLAGS} - -geng : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng ${CFLAGS} -DMAXN=32 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng16 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng16 ${CFLAGS} -DMAXN=16 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng24 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng24 ${CFLAGS} -DMAXN=24 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -gentourng : ${GTOOLSH} gentourng.c gtools.o nauty1.o nautil1.o \ - naugraph1.o schreier.o naurng.o - ${CC} -o gentourng ${CFLAGS} -DMAXN=24 gentourng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -genrang : ${GTOOLSH} genrang.c gtools.o naututil.o ${NAUTYO} - ${CC} -o genrang ${CFLAGS} genrang.c \ - gtools.o naututil.o ${NAUTYO} ${LDFLAGS} - -complg : ${GTOOLSH} complg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o complg ${CFLAGS} complg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -linegraphg : ${GTOOLSH} linegraphg.c gtools.o ${NAUTYO} - ${CC} -o linegraphg ${CFLAGS} linegraphg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -subdivideg : ${GTOOLSH} subdivideg.c gtools.o ${NAUTYO} - ${CC} -o subdivideg ${CFLAGS} subdivideg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -biplabg : ${GTOOLSH} gutils.h biplabg.c gtools.o gutil1.o ${NAUTYO} - ${CC} -o biplabg ${CFLAGS} biplabg.c \ - gtools.o gutil1.o ${NAUTYO} ${LDFLAGS} - -ranlabg : ${GTOOLSH} ranlabg.c gtools.o ${NAUTYO} - ${CC} -o ranlabg ${CFLAGS} ranlabg.c gtools.o ${NAUTYO} ${LDFLAGS} - -NRswitchg : ${GTOOLSH} NRswitchg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o NRswitchg ${CFLAGS} NRswitchg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -deledgeg : ${GTOOLSH} deledgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o deledgeg ${CFLAGS} deledgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -addedgeg : ${GTOOLSH} gutils.h addedgeg.c gtools.o gtnauty.o gutil1.o ${NAUTYO} - ${CC} -o addedgeg ${CFLAGS} addedgeg.c gtools.o gtnauty.o \ - gutil1.o ${NAUTYO} ${LDFLAGS} - -newedgeg : ${GTOOLSH} gutils.h newedgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o newedgeg ${CFLAGS} newedgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -pickg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o pickg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -countg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o countg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -directg : ${GTOOLSH} naugroup.h directg.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o directg ${CFLAGS} directg.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -multig : ${GTOOLSH} naugroup.h multig.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o multig ${CFLAGS} multig.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -planarg : ${GTOOLSH} planarg.c gtools.o planarity.c - ${CC} -o planarg ${CFLAGS} \ - planarg.c planarity.c gtools.o ${LDFLAGS} - -watercluster2 : ${GTOOLSH} nauty.h watercluster2.c gtools.o ${NAUTYO} - ${CC} -o watercluster2 ${CFLAGS} -DMAXN=32 watercluster2.c \ - gtools.o ${NAUTYO} ${LDFLAGS} - -showg : showg.c - ${CC} -o showg ${CFLAGS} showg.c ${LDFLAGS} - -readg : - echo "*** readg is now called showg ***" - make showg - - -sumlines : sumlines.c - ${CC} -o sumlines ${CFLAGS} sumlines.c ${LDFLAGS} -lgmp - -naugroup.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} naugroup.c -naugroupW.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${W} naugroup.c -naugroupL.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${L} naugroup.c - -nautyex1 : nauty.h nautyex1.c nauty.a - ${CC} -o nautyex1 ${CFLAGS} nautyex1.c nauty.a ${LDFLAGS} -nautyex2 : nauty.h nautyex2.c ${NAUTYO} - ${CC} -o nautyex2 ${CFLAGS} nautyex2.c nauty.a ${LDFLAGS} -nautyex3 : nauty.h nautyex3.c nauty.a - ${CC} -o nautyex3 ${CFLAGS} nautyex3.c nauty.a ${LDFLAGS} -nautyex4 : nauty.h nausparse.h nautyex4.c nauty.a - ${CC} -o nautyex4 ${CFLAGS} nautyex4.c nauty.a ${LDFLAGS} -nautyex5 : nauty.h nausparse.h nautyex5.c nauty.a - ${CC} -o nautyex5 ${CFLAGS} nautyex5.c nauty.a ${LDFLAGS} -nautyex6 : nauty.h nautyex6.c nauty.a - ${CC} -o nautyex6 ${CFLAGS} nautyex6.c nauty.a ${LDFLAGS} -nautyex7 : nauty.h nautyex7.c traces.h nauty.a - ${CC} -o nautyex7 ${CFLAGS} nautyex7.c nauty.a ${LDFLAGS} -nautyex8 : nauty.h nausparse.h nautyex8.c nauty.a - ${CC} -o nautyex8 ${CFLAGS} nautyex8.c nauty.a ${LDFLAGS} -nautyex9 : nauty.h nautyex9.c nauty.a - ${CC} -o nautyex9 ${CFLAGS} nautyex9.c nauty.a ${LDFLAGS} -nautyex10 : nauty.h nautyex10.c nauty.a - ${CC} -o nautyex10 ${CFLAGS} nautyex10.c nauty.a ${LDFLAGS} - -checks: naucompare ${TESTPROGS} ; - -naucompare : naucompare.c - ${CC} -o naucompare ${CFLAGS} naucompare.c ${LDFLAGS} - -dreadtest: dreadnaut.c nautinv.o ${NAUTYO} naututil.o traces.o gtools.o - ${CC} -o dreadtest ${SAFECFLAGS} -DDREADTEST dreadnaut.c \ - nautinv.o naututil.o traces.o gtools.o ${NAUTYO} ${LDFLAGS} -dreadtest1: dreadnaut.c nautinv1.o ${NAUTY1O} naututil1.o traces.o gtools.o - ${CC} -o dreadtest1 ${SAFECFLAGS} ${SMALL} -DDREADTEST dreadnaut.c \ - nautinv1.o naututil1.o traces.o gtools.o ${NAUTY1O} ${LDFLAGS} -dreadtestS: dreadnaut.c nautinvS.o ${NAUTYSO} naututilS.o tracesS.o gtoolsS.o - ${CC} -o dreadtestS ${SAFECFLAGS} ${S} -DDREADTEST dreadnaut.c \ - nautinvS.o naututilS.o tracesS.o gtoolsS.o ${NAUTYSO} ${LDFLAGS} -dreadtestS1: dreadnaut.c nautinvS1.o ${NAUTYS1O} naututilS1.o \ - tracesS.o gtoolsS.o - ${CC} -o dreadtestS1 ${SAFECFLAGS} ${S1} -DDREADTEST dreadnaut.c \ - nautinvS1.o naututilS1.o tracesS.o gtoolsS.o ${NAUTYS1O} ${LDFLAGS} -dreadtestW: dreadnaut.c nautinvW.o ${NAUTYWO} naututilW.o tracesW.o gtoolsW.o - ${CC} -o dreadtestW ${SAFECFLAGS} ${W} -DDREADTEST dreadnaut.c \ - nautinvW.o naututilW.o tracesW.o gtoolsW.o ${NAUTYWO} ${LDFLAGS} -dreadtestW1: dreadnaut.c nautinvW1.o ${NAUTYW1O} naututilW1.o \ - tracesW.o gtoolsW.o - ${CC} -o dreadtestW1 ${SAFECFLAGS} ${W1} -DDREADTEST dreadnaut.c \ - nautinvW1.o naututilW1.o tracesW.o gtoolsW.o ${NAUTYW1O} ${LDFLAGS} -dreadtestL: dreadnaut.c nautinvL.o ${NAUTYLO} naututilL.o tracesL.o gtoolsL.o - ${CC} -o dreadtestL ${SAFECFLAGS} ${L} -DDREADTEST dreadnaut.c \ - nautinvL.o naututilL.o tracesL.o gtoolsL.o ${NAUTYLO} ${LDFLAGS} -dreadtestL1: dreadnaut.c nautinvL1.o ${NAUTYL1O} naututilL1.o \ - tracesL.o gtoolsL.o - ${CC} -o dreadtestL1 ${SAFECFLAGS} ${L1} -DDREADTEST dreadnaut.c \ - nautinvL1.o naututilL1.o tracesL.o gtoolsL.o ${NAUTYL1O} ${LDFLAGS} -dreadtest4K: dreadnaut.c nausparse.c schreier.c naututil.c nauty.c \ - nautil.c nautinv.c naugraph.c naurng.o gtools.c traces.c - ${CC} -o dreadtest4K ${SAFECFLAGS} -DMAXN=4096 -DDREADTEST \ - dreadnaut.c naututil.c nauty.c nautil.c nautinv.c \ - naugraph.c nausparse.c naurng.o schreier.c gtools.c \ - traces.c ${LDFLAGS} - -checks6: checks6.c ${GTOOLSH} gtools.o - ${CC} -o checks6 ${SAFECFLAGS} checks6.c gtools.o - -bigs: gtnauty.o gutil2.o nausparse.o nautil.o naututil.o gtools.o \ - naugraph.o nautaux.o nautinv.o nauty.o schreier.o - rm -f gtnautyB.o gutil2B.o nausparseB.o nautilB.o naututilB.o \ - gtoolsB.o naugraphB.o nautauxB.o nautinvB.o nautyB.o - cp gtnauty.o gtnautyB.o - cp gutil2.o gutil2B.o - cp nausparse.o nausparseB.o - cp nautil.o nautilB.o - cp naututil.o naututilB.o - cp gtools.o gtoolsB.o - cp naugraph.o naugraphB.o - cp nautaux.o nautauxB.o - cp nautinv.o nautinvB.o - cp nauty.o nautyB.o - cp schreier.o schreierB.o - -# @edit_msg@ diff --git a/tools/nauty25r9_unix/multig b/tools/nauty25r9_unix/multig deleted file mode 100644 index 96270e7645c39068c48d7a2c7abdf57d452d2b61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152910 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

      9JH! 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 ODNQhwz?iz2CH@B(zPddC diff --git a/tools/nauty25r9_unix/multig.c b/tools/nauty25r9_unix/multig.c deleted file mode 100644 index 1f56b57..0000000 --- a/tools/nauty25r9_unix/multig.c +++ /dev/null @@ -1,833 +0,0 @@ -/* multig.c version 1.6; B D McKay, Aug 31, 2011 */ - -#define USAGE \ -"multig [-q] [-u|-T|-G|-A|-B] [-e#|-e#:#] \n" \ -" [-m#] [-f#] [-D#|-r#|-l#] [infile [outfile]]" - -#define HELPTEXT \ -" Read undirected loop-free graphs and replace their edges with multiple\n\ - edges in all possible ways (multiplicity at least 1).\n\ - Isomorphic multigraphs derived from the same input are suppressed.\n\ - If the input graphs are non-isomorphic then the output graphs are also.\n\ -\n\ - -e# | -e#:# specify a value or range of the total number of edges\n\ - counting multiplicities\n\ - -m# maximum edge multiplicity (minimum is 1)\n\ - -D# upper bound on maximum degree\n\ - -r# make regular of specified degree (incompatible with -l, -D, -e)\n\ - -l# make regular multigraphs with multiloops, degree #\n\ - (incompatible with -r, -D, -e)\n\ - Either -l, -r, -D, -e or -m with a finite maximum must be given\n\ - -f# Use the group that fixes the first # vertices setwise\n\ - -T use a simple text output format (nv ne {v1 v2 mult})\n\ - -G like -T but includes group size as third item (if less than 10^10)\n\ - The group size does not include exchange of isolated vertices.\n\ - -A write as the upper triangle of an adjacency matrix, row by row,\n\ - including the diagonal, and preceded by the number of vertices\n\ - -B write as an integer matrix preceded by the number of rows and\n\ - number of columns, where -f determines the number of rows\n\ - -u no output, just count them\n\ - -q suppress auxiliary information\n" - -/*************************************************************************/ - -#include "gtools.h" -#include "naugroup.h" - -nauty_counter mg_nin,mg_nout; -FILE *outfile; - -#define MAXNV 128 -#define MAXNE 1024 -static int v0[MAXNE+MAXNV],v1[MAXNE+MAXNV]; -static int edgeno[MAXNV][MAXNV]; -static int lastlev[MAXNE]; - -static int ix[MAXNE+MAXNV],nix; -static boolean first; -static int lastreject[MAXNV]; -static boolean lastrejok; -static unsigned long groupsize; -static unsigned long newgroupsize; -static boolean Gswitch,Tswitch,Aswitch,Bswitch; -static int Brows; - -#define GROUPTEST_NOT -#ifdef GROUPTEST -static long long totallab; -#endif - -#define PATHCOUNTS_NOT -#ifdef PATHCOUNTS -static long long count0,count1,count2,count3,count4,count5; -static nauty_counter oldlo; -#endif - -/* If OUTPROC is defined at compile time, and -u is not used, the - * procedure OUTPROC is called for each graph. This must be linked - * by the compiler. The arguments are - * f = open output file - * n = number of vertices - * ne = number of edges - * gp = group size ignoring isolated vertices (note: may have overflowed) - * v0[*], v1[*], ix[*] = integer arrays. The edges are - * v0[i]-v1[i] with multiplicity ix[i] for i=0..ne-1. ix[i]>0 always. - */ - -/* SUMMARY feature - * - * If SUMMARY is defined, it must expand as the name of a procedure - * with prototype void SUMMARY(void). It is called at the end before - * the normal summary (which can be suppressed with -q). The numbers of - * graphs read and digraphs produced are available in the global variables - * mg_nin and mg_nout (type nauty_counter). - */ - -#ifdef OUTPROC -extern void OUTPROC(FILE*,int,int,unsigned long,int*,int*,int*); -#endif - -#ifdef SUMMARY -extern void SUMMARY(void); -#endif - -/**************************************************************************/ - -void -writeautom(int *p, int n) -/* Called by allgroup. */ -{ - int i; - - for (i = 0; i < n; ++i) printf(" %2d",p[i]); - printf("\n"); -} - -/**************************************************************************/ - -static boolean -ismax(int *p, int n) -/* test if x^p <= x */ -{ - int i,k; - - for (i = 0; i < nix; ++i) - { - k = edgeno[p[v1[i]]][p[v0[i]]]; - - if (ix[k] > ix[i]) return FALSE; - else if (ix[k] < ix[i]) return TRUE; - } - - ++newgroupsize; - return TRUE; -} - -/**************************************************************************/ - -void -testmax(int *p, int n, int *abort) -/* Called by allgroup2. */ -{ - int i; - - if (first) - { /* only the identity */ - first = FALSE; - return; - } - - if (!ismax(p,n)) - { - *abort = 1; - for (i = 0; i < n; ++i) lastreject[i] = p[i]; - lastrejok = TRUE; - } -} - -/**************************************************************************/ - -void -printam(FILE *f, int n, int ne, int *ix) -/* Write adjacency matrix formats */ -{ - int i,j; - - if (Aswitch) - { - fprintf(f,"%d ",n); - for (i = 0; i < n; ++i) - for (j = i; j < n; ++j) - fprintf(f," %d",(edgeno[i][j]>=0 ? ix[edgeno[i][j]]: 0)); - fprintf(f,"\n"); - } - else - { - if (Brows <= 0 || Brows > n) - { - fprintf(stderr,">E multig: impossible matrix size for output\n"); - exit(1); - } - fprintf(f,"%d %d",Brows,n-Brows); - - for (i = 0; i < Brows; ++i) - { - fprintf(f," "); - for (j = Brows; j < n; ++j) - fprintf(f," %d",(edgeno[i][j]>=0 ? ix[edgeno[i][j]]: 0)); - } - fprintf(f,"\n"); - } -} - -/**************************************************************************/ - -static void -trythisone(grouprec *group, - boolean lswitch, int *deg, int maxdeg, int ne, int n) -/* Try one solution, accept if minimal. */ -{ - int i,ne2; - boolean accept; - - nix = ne; - newgroupsize = 1; - - if (!group || groupsize == 1) - accept = TRUE; - else if (lastrejok && !ismax(lastreject,n)) - accept = FALSE; - else if (lastrejok && groupsize == 2) - accept = TRUE; - else - { - newgroupsize = 1; - first = TRUE; - - if (allgroup2(group,testmax) == 0) - accept = TRUE; - else - accept = FALSE; - } - - if (accept) - { -#ifdef GROUPTEST - if (groupsize % newgroupsize != 0) - gt_abort("group size error\n"); - totallab += groupsize/newgroupsize; -#endif - - ++mg_nout; - - if (outfile) - { - ne2 = ne; - if (lswitch) - for (i = 0; i < n; ++i) - if (deg[i] < maxdeg) - { - v0[ne2] = v1[ne2] = i; - ix[ne2] = (maxdeg-deg[i])/2; - ++ne2; - } -#ifdef OUTPROC - OUTPROC(outfile,n,ne2,newgroupsize,v0,v1,ix); -#else - if (Aswitch || Bswitch) - printam(outfile,n,ne2,ix); - else - { - fprintf(outfile,"%d %d",n,ne2); - if (Gswitch) fprintf(outfile," %lu",newgroupsize); - - for (i = 0; i < ne2; ++i) - fprintf(outfile," %d %d %d",v0[i],v1[i],ix[i]); - fprintf(outfile,"\n"); - } -#endif - } - return; - } - else - return; -} - -/**************************************************************************/ - -static void -scan(int level, int ne, long minedges, long maxedges, long sofar, - long maxmult, grouprec *group, int n) -/* Recursive scan for default case */ -{ - int left; - long min,max,k; - - if (level == ne) - { - trythisone(group,FALSE,NULL,0,ne,n); - return; - } - - left = ne - level - 1; - min = minedges - sofar - maxmult*left; - if (min < 1) min = 1; - max = maxedges - sofar - left; - if (max > maxmult) max = maxmult; - - for (k = min; k <= max; ++k) - { - ix[level] = k; - scan(level+1,ne,minedges,maxedges,sofar+k,maxmult,group,n); - } - - return; -} - -/**************************************************************************/ - -static void -scan_md(int level, int ne, long minedges, long maxedges, long sofar, - long maxmult, grouprec *group, int n, int *deg, int maxdeg) -/* Recursive scan, maxdeg version */ -{ - int left; - int min,max,k; - int x1,x2; - - if (level == ne) - { - trythisone(group,FALSE,deg,maxdeg,ne,n); - return; - } - - x1 = v0[level]; - x2 = v1[level]; - left = ne - level - 1; - min = minedges - sofar - maxmult*left; - if (min < 1) min = 1; - max = maxedges - sofar - left; - if (max > maxmult) max = maxmult; - if (deg[x1] + max - 1 > maxdeg) max = maxdeg - deg[x1] + 1; - if (deg[x2] + max - 1 > maxdeg) max = maxdeg - deg[x2] + 1; - - for (k = min; k <= max; ++k) - { - ix[level] = k; - deg[x1] += k-1; deg[x2] += k-1; - scan_md(level+1,ne,minedges,maxedges,sofar+k,maxmult,group, - n,deg,maxdeg); - deg[x1] -= k-1; deg[x2] -= k-1; - } - - return; -} - -/**************************************************************************/ - -static void -scan_lp(int level, int ne, long minedges, long maxedges, long sofar, - long maxmult, grouprec *group, int n, int *deg, int maxdeg) -/* Recursive scan, regular-with-loops version. */ -{ - int left; - long min,max,k; - int x1,x2; - boolean odd,even; - - if (level == ne) - { - trythisone(group,TRUE,deg,maxdeg,ne,n); - return; - } - - x1 = v0[level]; - x2 = v1[level]; - left = ne - level - 1; - min = minedges - sofar - maxmult*left; - if (min < 1) min = 1; - max = maxedges - sofar - left; - if (max > maxmult) max = maxmult; - if (deg[x1] + max - 1 > maxdeg) max = maxdeg - deg[x1] + 1; - if (deg[x2] + max - 1 > maxdeg) max = maxdeg - deg[x2] + 1; - - odd = even = FALSE; - if (lastlev[x1] == level) - { - if (((maxdeg-deg[x1])&1) == 1) even = TRUE; else odd = TRUE; - } - if (lastlev[x2] == level) - { - if (((maxdeg-deg[x2])&1) == 1) even = TRUE; else odd = TRUE; - } - if (even && odd) return; - - for (k = min; k <= max; ++k) - { - if (even && (k&1) == 1) continue; - if (odd && (k&1) == 0) continue; - - ix[level] = k; - deg[x1] += k-1; deg[x2] += k-1; - scan_lp(level+1,ne,minedges,maxedges,sofar+k,maxmult,group, - n,deg,maxdeg); - deg[x1] -= k-1; deg[x2] -= k-1; - } - - return; -} - -/**************************************************************************/ - -static void -scan_reg(int level, int ne, long minedges, long maxedges, long sofar, - long maxmult, grouprec *group, int n, int *delta, int *def, int maxdeg) -/* Recursive scan, regular version. */ -{ - int left; - long min,max,k; - int x1,x2; - - if (level == ne) - { - trythisone(group,FALSE,NULL,maxdeg,ne,n); - return; - } - - x1 = v0[level]; - x2 = v1[level]; - left = ne - level - 1; - min = minedges - sofar - maxmult*left; - if (min < 1) min = 1; - max = maxedges - sofar - left; - if (max > maxmult) max = maxmult; - if (max > def[x1] + 1) max = def[x1] + 1; - if (max > def[x2] + 1) max = def[x2] + 1; - - if (min < def[x2] + 1 - delta[x1]) min = def[x2] + 1 - delta[x1]; - if (min < def[x1] + 1 - delta[x2]) min = def[x1] + 1 - delta[x2]; - - if (lastlev[x1] == level && min < def[x1] + 1) min = def[x1] + 1; - if (lastlev[x2] == level && min < def[x2] + 1) min = def[x2] + 1; - - for (k = min; k <= max; ++k) - { - ix[level] = k; - delta[x1] += k-1 - def[x2]; - delta[x2] += k-1 - def[x1]; - def[x1] -= k-1; - def[x2] -= k-1; - scan_reg(level+1,ne,minedges,maxedges,sofar+k,maxmult,group, - n,delta,def,maxdeg); - def[x1] += k-1; - def[x2] += k-1; - delta[x1] -= k-1 - def[x2]; - delta[x2] -= k-1 - def[x1]; - } - - return; -} - -/**************************************************************************/ - -static void -multi(graph *g, int nfixed, long minedges, long maxedges, long maxmult, - int maxdeg, boolean lswitch, int m, int n) -{ - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - setword workspace[100]; - grouprec *group; - int ne; - int i,j,k,j0,j1,thisdeg,maxd,x0,x1; - set *gi; - int lab[MAXNV],ptn[MAXNV],orbits[MAXNV],deg[MAXNV]; - int delta[MAXNV],def[MAXNV]; - set active[(MAXNV+WORDSIZE-1)/WORDSIZE]; - boolean isreg; - -#ifdef PATHCOUNTS - ++count0; -#endif - - j0 = -1; /* last vertex with degree 0 */ - j1 = n; /* first vertex with degree > 0 */ - - ne = 0; - maxd = 0; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - thisdeg = 0; - for (j = 0; j < m; ++j) thisdeg += POPCOUNT(gi[j]); - deg[i] = thisdeg; - if (thisdeg > maxd) maxd = thisdeg; - if (thisdeg == 0) lab[++j0] = i; - else lab[--j1] = i; - ne += thisdeg; - } - ne /= 2; - - if (maxdeg >= 0 && maxd > maxdeg) return; - -#ifdef PATHCOUNTS - ++count1; -#endif - - if (Aswitch || Bswitch) - for (i = 0; i < n; ++i) - for (j = 0; j < n; ++j) - edgeno[i][j] = -1; - - if (ne == 0 && minedges <= 0 - && (!lswitch || (lswitch && (maxdeg&1) == 0))) - { - trythisone(NULL,lswitch,deg,maxdeg,0,n); - return; - } - -#ifdef PATHCOUNTS - ++count2; -#endif - - k = 0; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - for (j = i; (j = nextelement(gi,m,j)) >= 0; ) - { - v0[k] = i; - v1[k] = j; - edgeno[i][j] = edgeno[j][i] = k; - lastlev[i] = lastlev[j] = k; - ++k; - } - } - - isreg = !lswitch && (maxdeg >= 0 && 2*minedges == n*(long)maxdeg); - /* Case of regular multigraphs */ - - if (isreg) /* regular case */ - /* Condition: def(v) <= total def of neighbours */ - { - for (i = 0; i < n; ++i) - { - def[i] = maxdeg - deg[i]; - delta[i] = -def[i]; - } - - for (i = 0; i < k; ++i) - { - x0 = v0[i]; x1 = v1[i]; - delta[x0] += def[x1]; - delta[x1] += def[x0]; - } - - for (i = 0; i < n; ++i) if (delta[i] < 0) return; - } - - if ((isreg || lswitch) && (maxdeg & n & 1) == 1) return; - if (isreg && j0 >= 0 && maxdeg > 0) return; - if (lswitch && j0 >= 0 && (maxdeg&1) == 1) return; - -#ifdef PATHCOUNTS - ++count3; -#endif - - if (maxedges == NOLIMIT) - { - if (maxmult == NOLIMIT) maxedges = maxdeg*n/2; - else maxedges = ne*maxmult; - } - if (maxmult == NOLIMIT) maxmult = maxedges - ne + 1; - if (maxdeg >= 0 && maxmult > maxdeg) maxmult = maxdeg; - if (maxedges < ne || ne*maxmult < minedges) return; - -#ifdef PATHCOUNTS - ++count4; -#endif - - if (n > MAXNV || ne > MAXNE) - { - fprintf(stderr,">E multig: MAXNV or MAXNE exceeded\n"); - exit(1); - } - - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - for (i = 0; i < n; ++i) ptn[i] = 1; - ptn[n-1] = 0; - EMPTYSET(active,m); - if (j0 != n-1) ADDELEMENT(active,j0+1); - - for (i = 0; i <= j0; ++i) ptn[i] = 0; - - for (i = j0+1; i < n; ++i) - if (lab[i] < nfixed) break; - - if (i != j0+1 && i != n) - { - ptn[i-1] = 0; - ADDELEMENT(active,i); - } - - options.defaultptn = FALSE; - options.userautomproc = groupautomproc; - options.userlevelproc = grouplevelproc; - - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,100,m,n,NULL); - - if (stats.grpsize2 == 0) - groupsize = stats.grpsize1 + 0.1; - else - groupsize = 0; - - group = groupptr(FALSE); - makecosetreps(group); - - lastrejok = FALSE; - - if (isreg) - scan_reg(0,ne,minedges,maxedges,0,maxmult,group,n,delta,def,maxdeg); - else if (lswitch) - scan_lp(0,ne,minedges,maxedges,0,maxmult,group,n,deg,maxdeg); - else if (maxdeg >= 0) - scan_md(0,ne,minedges,maxedges,0,maxmult,group,n,deg,maxdeg); - else - scan(0,ne,minedges,maxedges,0,maxmult,group,n); -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - graph *g; - int m,n,codetype; - int argnum,j,nfixed,maxdeg,regdeg,ldeg; - char *arg,sw; - boolean badargs; - boolean fswitch,uswitch,eswitch,qswitch,mswitch,Dswitch; - boolean lswitch,rswitch; - long minedges,maxedges,maxmult; - double t; - char *infilename,*outfilename; - FILE *infile; - char msg[201]; - int msglen; - - HELP; - - nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - rswitch = fswitch = Tswitch = Gswitch = FALSE; - uswitch = eswitch = mswitch = qswitch = FALSE; - lswitch = Aswitch = Bswitch = Dswitch = FALSE; - infilename = outfilename = NULL; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWLONG('m',mswitch,maxmult,"multig -m") - else SWBOOLEAN('q',qswitch) - else SWBOOLEAN('u',uswitch) - else SWBOOLEAN('T',Tswitch) - else SWBOOLEAN('G',Gswitch) - else SWBOOLEAN('A',Aswitch) - else SWBOOLEAN('B',Bswitch) - else SWINT('f',fswitch,nfixed,"multig -f") - else SWINT('D',Dswitch,maxdeg,"multig -D") - else SWINT('r',rswitch,regdeg,"multig -r") - else SWINT('l',lswitch,ldeg,"multig -l") - else SWRANGE('e',":-",eswitch,minedges,maxedges,"multig -e") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if ((Gswitch!=0) + (Tswitch!=0) + (uswitch!=0) - + (Aswitch!=0) + (Bswitch!=0) >= 2) - gt_abort(">E multig: -G, -T, -A, -B and -u are incompatible\n"); - -#ifndef OUTPROC - if (!Tswitch && !Gswitch && !Aswitch && !Bswitch && !uswitch) - gt_abort(">E multig: must use -A, -B, -T, -G or -u\n"); -#endif - - if (rswitch && (Dswitch || eswitch)) - gt_abort(">E multig: -r is incompatible with -D and -e\n"); - - if (lswitch && (rswitch || Dswitch || eswitch)) - gt_abort(">E multig: -l is incompatible with -r, -D and -e\n"); - - if (!eswitch) - { - minedges = 0; - maxedges = NOLIMIT; - } - if (!mswitch) maxmult = NOLIMIT; - if (!fswitch) nfixed = 0; - - if (Bswitch && nfixed == 0) - gt_abort(">E multig: -B requires -f# with #>0\n"); - if (fswitch) Brows = nfixed; - - if (maxedges >= NOLIMIT && maxmult >= NOLIMIT - && !Dswitch && !rswitch && !lswitch) - gt_abort( - ">E multig: either -D or -e or -m or -r must impose a real limit\n"); - - if (!qswitch) - { - msg[0] = '\0'; - CATMSG0(">A multig"); - if (eswitch || mswitch || uswitch || (fswitch && nfixed > 0) - || lswitch || rswitch || Dswitch || Tswitch - || Gswitch || Aswitch || Bswitch) - CATMSG0(" -"); - if (mswitch) CATMSG1("m%ld",maxmult); - if (uswitch) CATMSG0("u"); - if (Tswitch) CATMSG0("T"); - if (Gswitch) CATMSG0("G"); - if (Aswitch) CATMSG0("A"); - if (Bswitch) CATMSG0("B"); - if (fswitch) CATMSG1("f%d",nfixed); - if (eswitch) CATMSG2("e%ld:%ld",minedges,maxedges); - if (Dswitch) CATMSG1("D%d",maxdeg); - if (rswitch) CATMSG1("r%d",regdeg); - if (lswitch) CATMSG1("l%d",ldeg); - msglen = strlen(msg); - if (argnum > 0) msglen += strlen(infilename); - if (argnum > 1) msglen += strlen(outfilename); - if (msglen >= 196) - { - fputs(msg,stderr); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - } - else - { - if (argnum > 0) CATMSG1(" %s",infilename); - if (argnum > 1) CATMSG1(" %s",outfilename); - CATMSG0("\n"); - fputs(msg,stderr); - } - fflush(stderr); - } - - if (rswitch) - { - eswitch = Dswitch = TRUE; - maxdeg = regdeg; - } - - if (lswitch) - { - eswitch = Dswitch = TRUE; - maxdeg = ldeg; - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (uswitch) - outfile = NULL; - else - { - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - } - - mg_nin = mg_nout = 0; - - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++mg_nin; -#ifdef PATHCOUNTS - oldlo = mg_nout; -#endif - if (rswitch) - { - minedges = ((long)n * (long)regdeg + 1) / 2; - maxedges = ((long)n * (long)regdeg) / 2; - } - if (lswitch) - { - maxedges = ((long)n * (long)ldeg) / 2; - if ((ldeg & 1) == 1) minedges = (n + 1) / 2; - else minedges = 0; - } - - multi(g,nfixed,minedges,maxedges,maxmult, - (Dswitch?maxdeg:-1),lswitch,m,n); -#ifdef PATHCOUNTS - if (mg_nout != oldlo) ++count5; -#endif - if (!uswitch && ferror(outfile)) - gt_abort(">E multig output error\n"); - FREES(g); - } - t = CPUTIME - t; - -#ifdef SUMMARY - SUMMARY(); -#endif - - if (!qswitch) - { - fprintf(stderr,">Z "); - PRINT_COUNTER(stderr,mg_nin); - fprintf(stderr," graphs read from %s",infilename); - fprintf(stderr,"; "); - PRINT_COUNTER(stderr,mg_nout); - if (!uswitch) - fprintf(stderr," multigraphs written to %s",outfilename); - else - fprintf(stderr," multigraphs generated"); - fprintf(stderr,"; %.2f sec\n",t); - } - -#ifdef GROUPTEST - fprintf(stderr,"Group test = %lld\n",totallab); -#endif - -#ifdef PATHCOUNTS - fprintf(stderr,"Counts: %lld %lld %lld %lld %lld %lld\n", - count0,count1,count2,count3,count4,count5); -#endif - - exit(0); -} diff --git a/tools/nauty25r9_unix/naucompare.c b/tools/nauty25r9_unix/naucompare.c deleted file mode 100644 index 836c153..0000000 --- a/tools/nauty25r9_unix/naucompare.c +++ /dev/null @@ -1,264 +0,0 @@ -/* naucompare - quick and dirty text file comparitor to compare - * two dreadnaut outputs. - */ - -#include -#include -#include -#include - -#define MAXLINELEN 100000 -#define MAXDIFFS 5 - -static char line1[MAXLINELEN+1]; -static char line2[MAXLINELEN+1]; -static char line1mod[MAXLINELEN+100]; -static char line2mod[MAXLINELEN+100]; - -/* special[] contains formats for lines that might not compare exactly. - * See scanline() for the meaning of the format characters. - * These strings should have \n at the end. - */ - -static char* special[] = /* Make sure to use \n */ -{ - "Dreadnaut version %*f (%*d bits).\n", - "cpu time = %*f seconds\n", - "canupdates=%d; cpu time = %*f seconds\n", - "Mode=%s m=%*d n=%d labelorg=%d edges=%d options=(%s))\n", - "group time: %*f, %*f, %*f, group order time: %*f;%\n", - ">Z %d graphs generated in %*f sec\n", - ">Z %d graphs labelled from %s to %s in %*f sec.\n", - "%d graphs altogether; cpu=%*f sec\n", - "group time: %*f,%*f,%*f, order:%*f total:%*f " - "(Schreier fails: %d); exp_paths time:%*f; aut_check time:%*f\n" -}; -#define NUMSPECIALS (sizeof(special)/sizeof(*special)) - -/***********************************************************************/ - -static int -scanline(char *in, char *fmt, char *out) -/* Compare input string against format and return 1 if it matches or - * 0 if it doesn't match. In the case of matching, construct an output - * string with volatile fields replaced by "*" and some standardisation - * of the non-volatile fields. Format specifiers are: - - %d - matches an integer (maybe with sign) - %f - matches a real number of the form ddd.ddd (maybe with sign) - %sx - matches a string, where 'x' is any character. - If 'x' is not a space, match zero or more characters from the - current position up but not including the first 'x'. - If 'x' is a space, match one or more characters from the current - position up to and including the first non-space character - which is followed by a space. - %c - matches a non-white character - %% - matches the character '%' - % - (with a space following the '%') matches zero or more spaces or - tabs, as many as appear in the input. In the output, this - sequence appears as one space. - % - (appearing exactly at the end of the format) matches zero or - more spaces at the end of the line. In the output, nothing. - %*d, %*f, %*sx, %*c - these are similar to the versions - without the '*' except that the fields are volatile. - * The entire line must match. */ -{ - int doass,dots; - char ends,*outf,*s,*f; - - outf = out; - s = in; - f = fmt; - - while (*f != '\0') - { - if (*f == '%') - { - ++f; - if (*f == '*') - { - doass = 0; - ++f; - } - else - doass = 1; - - if (*f == '%') - { - if (*s++ != '%') return 0; - ++f; - *outf++ = '%'; - } - else if (*f == '\n') - { - while (*s != '\0') - { - if (*s != ' ' && *s != '\n') return 0; - ++s; - } - --s; - } - else if (*f == 'c') - { - if (*s == ' ' || *s == '\t' || *s == '\n') return 0; - if (doass) *outf++ = *s; - else *outf++ = '*'; - ++f; - ++s; - } - else if (*f == 's') - { - ends = *(f+1); - if (ends == ' ') - { - dots = 0; - while (*s == ' ' || *s == '\t') - { - if (doass && dots == 0) *outf++ = ' '; - ++s; - ++dots; - } - } - while (*s != '\n' && *s != ends) - { - if (doass) *outf++ = *s; - ++s; - } - if (!doass) *outf++ = '*'; - ++f; - } - else if (*f == 'd') - { - while (*s == ' ' || *s == '\t') ++s; - if (!isdigit(*s) && *s != '-' && *s != '+') return 0; - if (*s == '-' || *s == '+') - { - if (doass) *outf++ = *s; - ++s; - } - while (isdigit(*s)) - { - if (doass) *outf++ = *s; - ++s; - } - if (!doass) *outf++ = '*'; - ++f; - } - else if (*f == 'f') - { - while (*s == ' ' || *s == '\t') ++s; - if (!isdigit(*s) && *s != '.' && *s != '-' && *s != '+') - return 0; - if (*s == '-' || *s == '+') - { - if (doass) *outf++ = *s; - ++s; - } - dots = 0; - while (isdigit(*s) || (dots == 0 && *s == '.')) - { - if (*s == '.') ++dots; - if (doass) *outf++ = *s; - ++s; - } - if (!doass) *outf++ = '*'; - ++f; - } - else if (*f == ' ') - { - while (*s == ' ' || *s == '\t') ++s; - *outf++ = ' '; - ++f; - } - else - { - fprintf(stderr,"Bad format item %%%c\n",*f); - exit(1); - } - } - else - { - if (*s != *f) return 0; - *outf++ = *f; - ++s; - ++f; - } - } - - if (*s != '\0') return 0; - - *outf = '\0'; - - return 1; -} - -/***********************************************************************/ - -int -main(int argc, char *argv[]) -{ - int i,diffs,lineno; - char *l1,*l2; - FILE *f1,*f2; - - if (argc != 3) - { - fprintf(stderr,"Usage: naucompare file1 file2\n"); - exit(0); - } - - if (strcmp(argv[1],"-") == 0) - f1 = stdin; - else if ((f1 = fopen(argv[1],"r")) == NULL) - { - fprintf(stderr,">E naucompare can't open file 1\n"); - exit(1); - } - - if (strcmp(argv[2],"-") == 0) - f2 = stdin; - else if ((f2 = fopen(argv[2],"r")) == NULL) - { - fprintf(stderr,">E naucompare can't open file 2\n"); - exit(1); - } - - diffs = lineno = 0; - - for (;;) - { - l1 = fgets(line1,MAXLINELEN,f1); - l2 = fgets(line2,MAXLINELEN,f2); - - if (l1 == NULL || l2 == NULL) break; - - ++lineno; - if (strcmp(l1,l2) != 0) - { - for (i = 0; i < NUMSPECIALS; ++i) - if (scanline(l1,special[i],line1mod) - && scanline(l2,special[i],line2mod) - && strcmp(line1mod,line2mod) == 0) - break; - if (i == NUMSPECIALS) - { - if (diffs >= MAXDIFFS) - { - printf("----And more differences not reported.\n"); - break; - } - printf("----Difference on line %d:\n",lineno); - printf("%s%s",l1,l2); - ++diffs; - } - } - } - - if (l1 != NULL || l2 != NULL) ++diffs; - if (l1 != NULL && l2 == NULL) printf("File 1 is longer\n"); - if (l1 == NULL && l2 != NULL) printf("File 2 is longer\n"); - - if (diffs == 0) printf("OK\n"); - - exit(diffs != 0); -} diff --git a/tools/nauty25r9_unix/naugraph.c b/tools/nauty25r9_unix/naugraph.c deleted file mode 100644 index 3c9058e..0000000 --- a/tools/nauty25r9_unix/naugraph.c +++ /dev/null @@ -1,711 +0,0 @@ -/***************************************************************************** -* * -* Graph-specific auxiliary source file for version 2.5 of nauty. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 16-Nov-00 : initial creation out of nautil.c * -* 22-Apr-01 : added aproto line for Magma * -* EXTDEFS is no longer required * -* removed dynamic allocation from refine1() * -* 21-Nov-01 : use NAUTYREQUIRED in naugraph_check() * -* 23-Nov-06 : add targetcell(); make bestcell() local * -* 10-Dec-06 : remove BIGNAUTY * -* 10-Nov-09 : remove shortish and permutation types * -* 23-May-10 : add densenauty() * -* 15-Jan-12 : add TLS_ATTR attributes * -* * -*****************************************************************************/ - -#define ONE_WORD_SETS -#include "nauty.h" - - /* macros for hash-codes: */ -#define MASH(l,i) ((((l) ^ 065435) + (i)) & 077777) - /* : expression whose long value depends only on long l and int/long i. - Anything goes, preferably non-commutative. */ - -#define CLEANUP(l) ((int)((l) % 077777)) - /* : expression whose value depends on long l and is less than 077777 - when converted to int then short. Anything goes. */ - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -/* aproto: header new_nauty_protos.h */ - -dispatchvec dispatch_graph = - {isautom,testcanlab,updatecan,refine,refine1,cheapautom,targetcell, - naugraph_freedyn,naugraph_check,NULL,NULL}; - -#if !MAXN -DYNALLSTAT(set,workset,workset_sz); -DYNALLSTAT(int,workperm,workperm_sz); -DYNALLSTAT(int,bucket,bucket_sz); -DYNALLSTAT(set,dnwork,dnwork_sz); -#else -static TLS_ATTR set workset[MAXM]; /* used for scratch work */ -static TLS_ATTR int workperm[MAXN]; -static TLS_ATTR int bucket[MAXN+2]; -static TLS_ATTR set dnwork[40*MAXM]; -#endif - -/***************************************************************************** -* * -* isautom(g,perm,digraph,m,n) = TRUE iff perm is an automorphism of g * -* (i.e., g^perm = g). Symmetry is assumed unless digraph = TRUE. * -* * -*****************************************************************************/ - -boolean -isautom(graph *g, int *perm, boolean digraph, int m, int n) -{ - set *pg; - int pos; - set *pgp; - int posp,i; - - for (pg = g, i = 0; i < n; pg += M, ++i) - { - pgp = GRAPHROW(g,perm[i],M); - pos = (digraph ? -1 : i); - - while ((pos = nextelement(pg,M,pos)) >= 0) - { - posp = perm[pos]; - if (!ISELEMENT(pgp,posp)) return FALSE; - } - } - return TRUE; -} - -/***************************************************************************** -* * -* testcanlab(g,canong,lab,samerows,m,n) compares g^lab to canong, * -* using an ordering which is immaterial since it's only used here. The * -* value returned is -1,0,1 if g^lab <,=,> canong. *samerows is set to * -* the number of rows (0..n) of canong which are the same as those of g^lab. * -* * -* GLOBALS ACCESSED: workset,permset(),workperm * -* * -*****************************************************************************/ - -int -testcanlab(graph *g, graph *canong, int *lab, int *samerows, int m, int n) -{ - int i,j; - set *ph; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"testcanlab"); - DYNALLOC1(set,workset,workset_sz,m,"testcanlab"); -#endif - - for (i = 0; i < n; ++i) workperm[lab[i]] = i; - - for (i = 0, ph = canong; i < n; ++i, ph += M) - { - permset(GRAPHROW(g,lab[i],M),workset,M,workperm); - for (j = 0; j < M; ++j) - if (workset[j] < ph[j]) - { - *samerows = i; - return -1; - } - else if (workset[j] > ph[j]) - { - *samerows = i; - return 1; - } - } - - *samerows = n; - return 0; -} - -/***************************************************************************** -* * -* updatecan(g,canong,lab,samerows,m,n) sets canong = g^lab, assuming * -* the first samerows of canong are ok already. * -* * -* GLOBALS ACCESSED: permset(),workperm * -* * -*****************************************************************************/ - -void -updatecan(graph *g, graph *canong, int *lab, int samerows, int m, int n) -{ - int i; - set *ph; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"updatecan"); -#endif - - for (i = 0; i < n; ++i) workperm[lab[i]] = i; - - for (i = samerows, ph = GRAPHROW(canong,samerows,M); - i < n; ++i, ph += M) - permset(GRAPHROW(g,lab[i],M),ph,M,workperm); -} - -/***************************************************************************** -* * -* refine(g,lab,ptn,level,numcells,count,active,code,m,n) performs a * -* refinement operation on the partition at the specified level of the * -* partition nest (lab,ptn). *numcells is assumed to contain the number of * -* cells on input, and is updated. The initial set of active cells (alpha * -* in the paper) is specified in the set active. Precisely, x is in active * -* iff the cell starting at index x in lab is active. * -* The resulting partition is equitable if active is correct (see the paper * -* and the Guide). * -* *code is set to a value which depends on the fine detail of the * -* algorithm, but which is independent of the labelling of the graph. * -* count is used for work space. * -* * -* GLOBALS ACCESSED: workset,bit,nextelement(),bucket,workperm * -* * -*****************************************************************************/ - -void -refine(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, int *code, int m, int n) -{ - -#if MAXM==1 - refine1(g,lab,ptn,level,numcells,count,active,code,m,n); -} -#else - - int i,c1,c2,labc1; - setword x; - set *set1,*set2; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - long longcode; - set *gptr; - int maxcell,maxpos,hint; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"refine"); - DYNALLOC1(set,workset,workset_sz,m,"refine"); - DYNALLOC1(int,bucket,bucket_sz,n+2,"refine"); -#endif - - longcode = *numcells; - split1 = -1; - hint = 0; - while (*numcells < n && ((split1 = hint, ISELEMENT(active,split1)) - || (split1 = nextelement(active,M,split1)) >= 0 - || (split1 = nextelement(active,M,-1)) >= 0)) - { - DELELEMENT(active,split1); - for (split2 = split1; ptn[split2] > level; ++split2) {} - longcode = MASH(longcode,split1+split2); - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],M); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = level; - longcode = MASH(longcode,c2); - ++*numcells; - if (ISELEMENT(active,cell1) || c2-cell1 >= cell2-c1) - { - ADDELEMENT(active,c1); - if (c1 == cell2) hint = c1; - } - else - { - ADDELEMENT(active,cell1); - if (c2 == cell1) hint = cell1; - } - } - } - } - - else /* nontrivial splitting cell */ - { - EMPTYSET(workset,m); - for (i = split1; i <= split2; ++i) - ADDELEMENT(workset,lab[i]); - longcode = MASH(longcode,split2-split1+1); - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - set1 = workset; - set2 = GRAPHROW(g,lab[i],m); - cnt = 0; - for (c1 = m; --c1 >= 0;) - if ((x = (*set1++) & (*set2++)) != 0) - cnt += POPCOUNT(x); - - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - set1 = workset; - set2 = GRAPHROW(g,lab[i],m); - cnt = 0; - for (c1 = m; --c1 >= 0;) - if ((x = (*set1++) & (*set2++)) != 0) - cnt += POPCOUNT(x); - - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) - { - longcode = MASH(longcode,bmin+cell1); - continue; - } - c1 = cell1; - maxcell = -1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - longcode = MASH(longcode,i+c1); - if (c2-c1 > maxcell) - { - maxcell = c2-c1; - maxpos = c1; - } - if (c1 != cell1) - { - ADDELEMENT(active,c1); - if (c2-c1 == 1) hint = c1; - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = level; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) lab[i] = workperm[i]; - if (!ISELEMENT(active,cell1)) - { - ADDELEMENT(active,cell1); - DELELEMENT(active,maxpos); - } - } - } - } - - longcode = MASH(longcode,*numcells); - *code = CLEANUP(longcode); -} -#endif /* else case of MAXM==1 */ - -/***************************************************************************** -* * -* refine1(g,lab,ptn,level,numcells,count,active,code,m,n) is the same as * -* refine(g,lab,ptn,level,numcells,count,active,code,m,n), except that * -* m==1 is assumed for greater efficiency. The results are identical in all * -* respects. See refine (above) for the specs. * -* * -*****************************************************************************/ - -void -refine1(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, int *code, int m, int n) -{ - int i,c1,c2,labc1; - setword x; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - long longcode; - set *gptr,workset0; - int maxcell,maxpos,hint; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"refine1"); - DYNALLOC1(int,bucket,bucket_sz,n+2,"refine1"); -#endif - - longcode = *numcells; - split1 = -1; - - hint = 0; - while (*numcells < n && ((split1 = hint, ISELEMENT1(active,split1)) - || (split1 = nextelement(active,1,split1)) >= 0 - || (split1 = nextelement(active,1,-1)) >= 0)) - { - DELELEMENT1(active,split1); - for (split2 = split1; ptn[split2] > level; ++split2) {} - longcode = MASH(longcode,split1+split2); - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],1); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT1(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = level; - longcode = MASH(longcode,c2); - ++*numcells; - if (ISELEMENT1(active,cell1) || c2-cell1 >= cell2-c1) - { - ADDELEMENT1(active,c1); - if (c1 == cell2) hint = c1; - } - else - { - ADDELEMENT1(active,cell1); - if (c2 == cell1) hint = cell1; - } - } - } - } - - else /* nontrivial splitting cell */ - { - workset0 = 0; - for (i = split1; i <= split2; ++i) - ADDELEMENT1(&workset0,lab[i]); - longcode = MASH(longcode,split2-split1+1); - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - if ((x = workset0 & g[lab[i]]) != 0) - cnt = POPCOUNT(x); - else - cnt = 0; - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - if ((x = workset0 & g[lab[i]]) != 0) - cnt = POPCOUNT(x); - else - cnt = 0; - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) - { - longcode = MASH(longcode,bmin+cell1); - continue; - } - c1 = cell1; - maxcell = -1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - longcode = MASH(longcode,i+c1); - if (c2-c1 > maxcell) - { - maxcell = c2-c1; - maxpos = c1; - } - if (c1 != cell1) - { - ADDELEMENT1(active,c1); - if (c2-c1 == 1) hint = c1; - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = level; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) lab[i] = workperm[i]; - if (!ISELEMENT1(active,cell1)) - { - ADDELEMENT1(active,cell1); - DELELEMENT1(active,maxpos); - } - } - } - } - - longcode = MASH(longcode,*numcells); - *code = CLEANUP(longcode); -} - -/***************************************************************************** -* * -* cheapautom(ptn,level,digraph,n) returns TRUE if the partition at the * -* specified level in the partition nest (lab,ptn) {lab is not needed here} * -* satisfies a simple sufficient condition for its cells to be the orbits of * -* some subgroup of the automorphism group. Otherwise it returns FALSE. * -* It always returns FALSE if digraph!=FALSE. * -* * -* nauty assumes that this function will always return TRUE for any * -* partition finer than one for which it returns TRUE. * -* * -*****************************************************************************/ - -boolean -cheapautom(int *ptn, int level, boolean digraph, int n) -{ - int i,k,nnt; - - if (digraph) return FALSE; - - k = n; - nnt = 0; - for (i = 0; i < n; ++i) - { - --k; - if (ptn[i] > level) - { - ++nnt; - while (ptn[++i] > level) {} - } - } - - return (k <= nnt + 1 || k <= 4); -} - -/***************************************************************************** -* * -* bestcell(g,lab,ptn,level,tc_level,m,n) returns the index in lab of the * -* start of the "best non-singleton cell" for fixing. If there is no * -* non-singleton cell it returns n. * -* This implementation finds the first cell which is non-trivially joined * -* to the greatest number of other cells. * -* * -* GLOBALS ACCESSED: bit,workperm,workset,bucket * -* * -*****************************************************************************/ - -static int -bestcell(graph *g, int *lab, int *ptn, int level, int tc_level, int m, int n) -{ - int i; - set *gp; - setword setword1,setword2; - int v1,v2,nnt; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"bestcell"); - DYNALLOC1(set,workset,workset_sz,m,"bestcell"); - DYNALLOC1(int,bucket,bucket_sz,n+2,"bestcell"); -#endif - - /* find non-singleton cells: put starts in workperm[0..nnt-1] */ - - i = nnt = 0; - - while (i < n) - { - if (ptn[i] > level) - { - workperm[nnt++] = i; - while (ptn[i] > level) ++i; - } - ++i; - } - - if (nnt == 0) return n; - - /* set bucket[i] to # non-trivial neighbours of n.s. cell i */ - - for (i = nnt; --i >= 0;) bucket[i] = 0; - - for (v2 = 1; v2 < nnt; ++v2) - { - EMPTYSET(workset,m); - i = workperm[v2] - 1; - do - { - ++i; - ADDELEMENT(workset,lab[i]); - } - while (ptn[i] > level); - for (v1 = 0; v1 < v2; ++v1) - { - gp = GRAPHROW(g,lab[workperm[v1]],m); -#if MAXM==1 - setword1 = *workset & *gp; - setword2 = *workset & ~*gp; -#else - setword1 = setword2 = 0; - for (i = m; --i >= 0;) - { - setword1 |= workset[i] & gp[i]; - setword2 |= workset[i] & ~gp[i]; - } -#endif - if (setword1 != 0 && setword2 != 0) - { - ++bucket[v1]; - ++bucket[v2]; - } - } - } - - /* find first greatest bucket value */ - - v1 = 0; - v2 = bucket[0]; - for (i = 1; i < nnt; ++i) - if (bucket[i] > v2) - { - v1 = i; - v2 = bucket[i]; - } - - return (int)workperm[v1]; -} - -/***************************************************************************** -* * -* targetcell(g,lab,ptn,level,tc_level,digraph,hint,m,n) returns the index * -* in lab of the next cell to split. * -* hint is a suggestion for the answer, which is obeyed if it is valid. * -* Otherwise we use bestcell() up to tc_level and the first non-trivial * -* cell after that. * -* * -*****************************************************************************/ - -int -targetcell(graph *g, int *lab, int *ptn, int level, int tc_level, - boolean digraph, int hint, int m, int n) -{ - int i; - - if (hint >= 0 && ptn[hint] > level && - (hint == 0 || ptn[hint-1] <= level)) - return hint; - else if (level <= tc_level) - return bestcell(g,lab,ptn,level,tc_level,m,n); - else - { - for (i = 0; i < n && ptn[i] <= level; ++i) {} - return (i == n ? 0 : i); - } -} - -/***************************************************************************** -* * -* densenauty(g,lab,ptn,orbits,&options,&stats,m,n,h) * -* is a slightly simplified interface to nauty(). It allocates enough * -* workspace for 20 automorphisms and checks that the densegraph dispatch * -* vector is in use. * -* * -*****************************************************************************/ - -void -densenauty(graph *g, int *lab, int *ptn, int *orbits, - optionblk *options, statsblk *stats, int m, int n, graph *h) -{ - if (options->dispatch != &dispatch_graph) - { - fprintf(ERRFILE,"Error: densenauty() needs standard options block\n"); - exit(1); - } - -#if !MAXN - DYNALLOC1(set,dnwork,dnwork_sz,2*60*m,"densenauty malloc"); -#endif - - nauty(g,lab,ptn,NULL,orbits,options,stats,dnwork,2*60*m,m,n,h); -} - -/***************************************************************************** -* * -* naugraph_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -naugraph_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in naugraph.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in naugraph.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in naugraph.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: naugraph.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* naugraph_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -naugraph_freedyn(void) -{ -#if !MAXN - DYNFREE(workset,workset_sz); - DYNFREE(workperm,workperm_sz); - DYNFREE(bucket,bucket_sz); - DYNFREE(dnwork,dnwork_sz); -#endif -} diff --git a/tools/nauty25r9_unix/naugraph.o b/tools/nauty25r9_unix/naugraph.o deleted file mode 100644 index 9bd6acca24cad3f01e240696d7e765b95f5b9a15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19440 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 X&hNRsE}Y+U&$w~6564_Mzn}gOokt;D diff --git a/tools/nauty25r9_unix/naugroup.c b/tools/nauty25r9_unix/naugroup.c deleted file mode 100644 index daf40d0..0000000 --- a/tools/nauty25r9_unix/naugroup.c +++ /dev/null @@ -1,457 +0,0 @@ -/* naugroup.c - -Procedures for handling groups found by nauty. -*/ - -#include "naugroup.h" - -static permrec *freelist = NULL; -static int freelist_n = 0; - -static grouprec *group = NULL; -static int group_depth = 0; -DYNALLSTAT(cosetrec,coset,coset_sz); -static permrec *gens; -DYNALLSTAT(set,workset,workset_sz); -DYNALLSTAT(int,allp,allp_sz); -DYNALLSTAT(int,id,id_sz); - -/**************************************************************************/ - -permrec -*newpermrec(int n) -/* Get a permrec of order n. This procedure and the next one are -designed to be efficient if lots of group ops are done with the -same value of n. */ -{ - permrec *p; - - if (freelist_n != n) - { - while (freelist != NULL) - { - p = freelist; - freelist = freelist->ptr; - free(p); - } - freelist_n = n; - } - - if (freelist != NULL) - { - p = freelist; - freelist = freelist->ptr; - return p; - } - - p = (permrec*) malloc(sizeof(permrec)+(freelist_n-2)*sizeof(int)); - - if (p == NULL) - { - fprintf(ERRFILE,">E malloc failed in newpermrec()\n"); - exit(1); - } - - return p; -} - -/**************************************************************************/ - -void -freepermrec(permrec *p, int n) -/* Free a permrec of given size. */ -{ - permrec *q; - - if (p == NULL) return; - - if (freelist_n != n) - { - while (freelist) - { - q = freelist; - freelist = freelist->ptr; - free(q); - } - freelist_n = n; - } - - p->ptr = freelist; - freelist = p; -} - -/**************************************************************************/ - -grouprec * -groupptr(boolean cutloose) -/* Give the address of the group structure, cutting it loose - if requested. */ -{ - grouprec *p; - - p = group; - - if (cutloose) - { - group = NULL; - group_depth = 0; - coset = NULL; - coset_sz = 0; - } - - return p; -} - -/**************************************************************************/ - -void -freegroup(grouprec *grp) -/* Free (or pretend to free) group structure. */ -{ - int i,j; - cosetrec *p; - permrec *q,*qq; - - for (i = 0; i < grp->depth; ++i) - { - p = grp->levelinfo[i].replist; - if (p != NULL) - for (j = grp->levelinfo[i].orbitsize; --j >= 0; ) - { - freepermrec(p[j].rep,grp->n); - p[j].rep = NULL; - } - } - - if (grp->depth > 0) - { - p = grp->levelinfo[0].replist; - if (p != NULL && p != coset) - { - free(p); - grp->levelinfo[0].replist = NULL; - } - - q = grp->levelinfo[0].gens; - while (q != NULL) - { - qq = q; - q = q->ptr; - freepermrec(qq,grp->n); - } - grp->levelinfo[0].gens = NULL; - } -} - -/**************************************************************************/ - -void -groupautomproc(int count, int *perm, int *orbits, - int numorbits, int stabvertex, int n) -{ - permrec *p; - int i; - - p = newpermrec(n); - for (i = 0; i < n; ++i) p->p[i] = perm[i]; - p->ptr = gens; - gens = p; -} - -/**************************************************************************/ - -void -grouplevelproc(int *lab, int *ptn, int level, int *orbits, statsblk *stats, - int tv, int index, int tcellsize, int numcells, int cc, int n) -{ - int depth; - size_t sz; - - if (numcells == n) /* first call */ - { - depth = level - 1; - - if (group) freegroup(group); - - if (depth > group_depth || !group) - { - if (depth <= 1) sz = sizeof(grouprec); - else sz = sizeof(grouprec) + (depth-1)*sizeof(levelrec); - if (group) group = (grouprec*)realloc((void*)group,sz); - else group = (grouprec*)malloc(sz); - if (group == NULL) - { - fprintf(ERRFILE,">E malloc failed in grouplevelproc\n"); - exit(1); - } - group_depth = depth; - } - - group->n = n; - group->depth = depth; - gens = NULL; - return; - } - - group->levelinfo[level-1].fixedpt = tv; - group->levelinfo[level-1].orbitsize = index; - group->levelinfo[level-1].gens = gens; - group->levelinfo[level-1].replist = NULL; - - if (level == 1) group->numorbits = stats->numorbits; -} - -/**************************************************************************/ - -void -makecosetreps(grouprec *grp) -/* Make all coset representatives for this group */ -{ - int i,j,k,n,depth; - int l,index; - int *p,*q; - permrec *gen,*g; - cosetrec *cr; - int head,tail; - DYNALLSTAT(int,queue,queue_sz); - DYNALLSTAT(int,lab,lab_sz); - - n = grp->n; - depth = grp->depth; - - DYNALLOC1(int,queue,queue_sz,n,"malloc"); - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - - j = 0; - for (i = 0; i < depth; ++i) - j += grp->levelinfo[i].orbitsize; - - if (j > 0) DYNALLOC1(cosetrec,coset,coset_sz,j,"malloc"); - - cr = coset; - for (i = 0; i < depth; ++i) - { - grp->levelinfo[i].replist = cr; - cr += grp->levelinfo[i].orbitsize; - } - - for (i = 0; i < depth; ++i) - { - cr = grp->levelinfo[i].replist; - gen = grp->levelinfo[i].gens; - for (j = 0; j < n; ++j) lab[j] = -1; - queue[0] = grp->levelinfo[i].fixedpt; - lab[queue[0]] = 0; - cr[0].image = queue[0]; - cr[0].rep = NULL; - head = 0; - tail = 1; - index = 0; - while (head < tail) - { - j = queue[head++]; - p = (cr[lab[j]].rep ? cr[lab[j]].rep->p : NULL); - for (g = gen; g != NULL; g = g->ptr) - { - k = g->p[j]; - if (lab[k] < 0) - { - ++index; - lab[k] = index; - queue[tail++] = k; - cr[index].image = k; - cr[index].rep = newpermrec(n); - q = cr[index].rep->p; - if (p == NULL) - for (l = 0; l < n; ++l) q[l] = g->p[l]; - else - for (l = 0; l < n; ++l) q[l] = g->p[p[l]]; - } - } - } - } -} - -/**************************************************************************/ - -int -permcycles(int *p, int n, int *len, boolean sort) -/* Puts in len[0..] the cycle lengths of p. If sort, sort them. - Return the number of cycles. */ -{ - int m,i,j,k,h,nc,leni; - - m = (n + WORDSIZE - 1) / WORDSIZE; - DYNALLOC1(set,workset,workset_sz,m,"malloc"); - - EMPTYSET(workset,m); - - nc = 0; - for (i = 0; i < n; ++i) - if (!ISELEMENT(workset,i)) - { - k = 1; - for (j = p[i]; j != i; j = p[j]) - { - ADDELEMENT(workset,j); - ++k; - } - len[nc++] = k; - } - - if (sort && nc > 1) - { - j = nc / 3; - h = 1; - do - h = 3 * h + 1; - while (h < j); - - do - { - for (i = h; i < nc; ++i) - { - leni = len[i]; - for (j = i; len[j-h] > leni; ) - { - len[j] = len[j-h]; - if ((j -= h) < h) break; - } - len[j] = leni; - } - h /= 3; - } - while (h > 0); - } - - return nc; -} - -/**************************************************************************/ - -static void -groupelts(levelrec *lr, int n, int level, void (*action)(int*,int), - int *before, int *after, int *id) -/* Recursive routine used by allgroup. */ -{ - int i,j,orbsize; - int *p,*cr; - cosetrec *coset; - - coset = lr[level].replist; - orbsize = lr[level].orbitsize; - - for (j = 0; j < orbsize; ++j) - { - cr = (coset[j].rep == NULL ? NULL : coset[j].rep->p); - if (before == NULL) - p = cr; - else if (cr == NULL) - p = before; - else - { - p = after; - for (i = 0; i < n; ++i) p[i] = cr[before[i]]; - } - - if (level == 0) - (*action)((p == NULL ? id : p),n); - else - groupelts(lr,n,level-1,action,p,after+n,id); - } -} - -/**************************************************************************/ - -void -allgroup(grouprec *grp, void (*action)(int*,int)) -/* Call action(p,n) for every element of the group, including the identity. - The identity is always the first call. */ -{ - int i,depth,n; - - depth = grp->depth; - n = grp->n; - - DYNALLOC1(int,id,id_sz,n,"malloc"); - for (i = 0; i < n; ++i) id[i] = i; - - if (depth == 0) - { - (*action)(id,n); - return; - } - - DYNALLOC1(int,allp,allp_sz,n*depth,"malloc"); - - groupelts(grp->levelinfo,n,depth-1,action,NULL,allp,id); -} - -/**************************************************************************/ - -static void -groupelts2(levelrec *lr, int n, int level, - void (*action)(int*,int,int*), int *before, - int *after, int *id, int *abort) -/* Recursive routine used by allgroup2. */ -{ - int i,j,orbsize; - int *p,*cr; - cosetrec *coset; - - coset = lr[level].replist; - orbsize = lr[level].orbitsize; - - for (j = 0; j < orbsize; ++j) - { - cr = (coset[j].rep == NULL ? NULL : coset[j].rep->p); - if (before == NULL) - p = cr; - else if (cr == NULL) - p = before; - else - { - p = after; - for (i = 0; i < n; ++i) p[i] = cr[before[i]]; - } - - if (level == 0) - (*action)((p == NULL ? id : p),n,abort); - else - groupelts2(lr,n,level-1,action,p,after+n,id,abort); - if (*abort) return; - } -} - -/**************************************************************************/ - -int -allgroup2(grouprec *grp, void (*action)(int*,int,int*)) -/* Call action(p,n,&abort) for every element of the group, including - the identity. The identity is always the first call. - If action() stores a non-zero value in abort, group generation is - aborted and the abort value is returned by this procedure. If no - non-zero value is ever returned in abort by action(), this - procedure returns 0. */ -{ - int i,depth,n,abort; - - depth = grp->depth; - n = grp->n; - - DYNALLOC1(int,id,id_sz,n,"malloc"); - for (i = 0; i < n; ++i) id[i] = i; - - abort = 0; - if (depth == 0) - { - (*action)(id,n,&abort); - return abort; - } - - DYNALLOC1(int,allp,allp_sz,n*depth,"malloc"); - - groupelts2(grp->levelinfo,n,depth-1,action,NULL,allp,id,&abort); - - return abort; -} diff --git a/tools/nauty25r9_unix/naugroup.h b/tools/nauty25r9_unix/naugroup.h deleted file mode 100644 index 7b131cf..0000000 --- a/tools/nauty25r9_unix/naugroup.h +++ /dev/null @@ -1,53 +0,0 @@ -/* naugroup.h - -Procedures for handling groups found by nauty. -*/ - -#include "nauty.h" - -typedef struct perm_struct -{ - struct perm_struct *ptr; /* general-purpose pointer */ - int p[2]; /* extendable section */ -} permrec; - -typedef struct coset_struct -{ - int image; /* image of fixed point */ - permrec *rep; /* pointer to a representative */ -} cosetrec; - -typedef struct level_struct -{ - int fixedpt; /* point that is fixed in this level */ - int orbitsize; /* the size of the orbit containing fixedpt */ - permrec *gens; /* pointer to list of generators */ - cosetrec *replist; /* array of orbitsize representatives */ -} levelrec; - -typedef struct group_struct -{ - int n; /* number of points */ - int numorbits; /* number of orbits */ - int depth; /* number of points in base */ - levelrec levelinfo[1]; /* extendable section */ -} grouprec; - -#ifdef __cplusplus -extern "C" { -#endif - -extern void freepermrec(permrec*, int); -extern grouprec *groupptr(boolean); -extern permrec *newpermrec(int); -extern void groupautomproc(int,int*,int*,int,int,int); -extern void - grouplevelproc(int*,int*,int,int*,statsblk*,int,int,int,int,int,int); -extern void makecosetreps(grouprec*); -extern int permcycles(int*,int,int*,boolean); -extern void allgroup(grouprec*,void(*)(int*,int)); -extern int allgroup2(grouprec*,void(*)(int*,int,int*)); - -#ifdef __cplusplus -} -#endif diff --git a/tools/nauty25r9_unix/naugroup.o b/tools/nauty25r9_unix/naugroup.o deleted file mode 100644 index ee578ccc87e9083e39c4ad949875aa83a41a3200..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17816 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 diff --git a/tools/nauty25r9_unix/naurng.c b/tools/nauty25r9_unix/naurng.c deleted file mode 100644 index 5853de2..0000000 --- a/tools/nauty25r9_unix/naurng.c +++ /dev/null @@ -1,133 +0,0 @@ -/* naurng.c - * This is thread-safe version of rng.c if thread-local support - * is available. - * - This file contains the code for a high-quality random number - generator written by Don Knuth. The auxilliary routine - ran_arr_cycle() has been modified slightly, and ran_init() is new. - - To use it: - - 0. #include "naurng.h" (or "naututil.h" if you are using nauty) - - 1. Call ran_init(seed), where seed is any long integer. - This step is optional, but if you don't use it you - will always get the same sequence of random numbers. - - 2. For each random number, use the NEXTRAN macro. It will - give a random value in the range 0..2^30-1. Alternatively, - KRAN(k) will have a random value in the range 0..k-1. - KRAN(k) actually gives you NEXTRAN mod k, so it is not - totally uniform if k is very large. In that case, you - can use the slightly slower GETKRAN(k,var) to set the - variable var to a better random number from 0..k-1. - - Brendan McKay, July 2002. Fixed Nov 2002 on advice of DEK. - -*/ - -/* This program by D E Knuth is in the public domain and freely copyable - * AS LONG AS YOU MAKE ABSOLUTELY NO CHANGES! - * It is explained in Seminumerical Algorithms, 3rd edition, Section 3.6 - * (or in the errata to the 2nd edition --- see - * http://www-cs-faculty.stanford.edu/~knuth/taocp.html - * in the changes to Volume 2 on pages 171 and following). */ - -/* N.B. The MODIFICATIONS introduced in the 9th printing (2002) are - included here; there's no backwards compatibility with the original. */ - -/* If you find any bugs, please report them immediately to - * taocp@cs.stanford.edu - * (and you will be rewarded if the bug is genuine). Thanks! */ - -/************ see the book for explanations and caveats! *******************/ -/************ in particular, you need two's complement arithmetic **********/ - -#include "naurng.h" - -#define KK 100 /* the long lag */ -#define LL 37 /* the short lag */ -#define MM (1L<<30) /* the modulus */ -#define mod_diff(x,y) (((x)-(y))&(MM-1)) /* subtraction mod MM */ - -static TLS_ATTR long ran_x[KK]; /* the generator state */ - -static void -ran_array(long aa[],int n) -{ - int i,j; - for (j=0;j=MM) ss-=MM-2; /* cyclic shift 29 bits */ - } - x[1]++; /* make x[1] (and only x[1]) odd */ - for (ss=seed&(MM-1),t=TT-1; t; ) { - for (j=KK-1;j>0;j--) x[j+j]=x[j], x[j+j-1]=0; /* "square" */ - for (j=KK+KK-2;j>=KK;j--) - x[j-(KK-LL)]=mod_diff(x[j-(KK-LL)],x[j]), - x[j-KK]=mod_diff(x[j-KK],x[j]); - if (is_odd(ss)) { /* "multiply by z" */ - for (j=KK;j>0;j--) x[j]=x[j-1]; - x[0]=x[KK]; /* shift the buffer cyclically */ - x[LL]=mod_diff(x[LL],x[KK]); - } - if (ss) ss>>=1; else t--; - } - for (j=0;j=0 ? *ran_arr_ptr++ : ran_arr_cycle()); -} diff --git a/tools/nauty25r9_unix/naurng.h b/tools/nauty25r9_unix/naurng.h deleted file mode 100644 index fa4b17e..0000000 --- a/tools/nauty25r9_unix/naurng.h +++ /dev/null @@ -1,40 +0,0 @@ -/* naurng.h : definitions for using Don Knuth's random number generator. - This version uses the attribute TLS_ATTR from nauty.h. - - To use it: - 1. Call ran_init(seed) with any long seed. (Optional, - but you will always get the same sequence otherwise.) - 2. Use NEXTRAN to get the next number (0..2^30-1). - Alternatively, use KRAN(k) to get a random number 0..k-1. - For large k, KRAN(k) is not quite uniform. In that case - use GETKRAN(k,var) to set the variable var to a better - random number 0..k-1. -*/ - -#ifndef NAURNG_H -#include "nauty.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void ran_init(long seed); -long ran_nextran(void); - -#ifdef __cplusplus -} -#endif - -#define MAXRAN (0x3fffffffL) /* Values are 0..MAXRAN */ -#define NEXTRAN (ran_nextran()) -#define KRAN(k) (NEXTRAN%(k)) -#define RANREAL ((NEXTRAN+0.5)/(MAXRAN+1.0)) /* Uniform (0,1) */ - -#define MAXSAFE(k) (((MAXRAN+1)/(k))*(k)) -#define GETKRAN(k,var) {long __getkran; \ - do {__getkran = NEXTRAN;} while (__getkran >= MAXSAFE(k)); \ - var = __getkran % (k);} -#define INITRANBYTIME ran_init((long)time(NULL)) - -#define NAURNG_H -#endif diff --git a/tools/nauty25r9_unix/naurng.o b/tools/nauty25r9_unix/naurng.o deleted file mode 100644 index ff59dd14702c0e1f27817af31d8acc8400a9b144..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4400 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 diff --git a/tools/nauty25r9_unix/nausparse.c b/tools/nauty25r9_unix/nausparse.c deleted file mode 100644 index f10952a..0000000 --- a/tools/nauty25r9_unix/nausparse.c +++ /dev/null @@ -1,1668 +0,0 @@ -/***************************************************************************** -* * -* Sparse-graph-specific auxiliary source file for version 2.5 of nauty. * -* * -* Copyright (2004-2014) Brendan McKay. All rights reserved. * -* Subject to waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 26-Oct-04 : initial creation * -* 23-Nov-06 : dispatch uses targetcell_sg, not bestcell_sg * -* 8-Dec-06 : add adjacencies_sg() * -* 10-Nov-09 : remove types shortish and permutation * -* 14-Nov-09 : added copy_sg() * -* 11-May-10 : use sorttemplates.c for sorting procedures * -* 19-May-10 : add two *_tr procedures for traces. * -* 21-May-10 : fixes for nde,v fields becoming size_t * -* 23-May-10 : add sparsenauty() * -* 15-Jan-12 : add TLS_ATTR attributes * -* * -*****************************************************************************/ - -#define TMP - -/* #define ONE_WORD_SETS not sure about this! See notes.txt. */ -#include "nausparse.h" - - /* macros for hash-codes: */ -#define MASH(l,i) ((((l) ^ 065435) + (i)) & 077777) - /* : expression whose long value depends only on long l and int/long i. - Anything goes, preferably non-commutative. */ - -#define CLEANUP(l) ((int)((l) % 077777)) - /* : expression whose value depends on long l and is less than 077777 - when converted to int then short. Anything goes. */ - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#define ACCUM(x,y) x = (((x) + (y)) & 077777) - -static const int fuzz1[] = {037541,061532,005257,026416}; -static const int fuzz2[] = {006532,070236,035523,062437}; - -#define FUZZ1(x) ((x) ^ fuzz1[(x)&3]) -#define FUZZ2(x) ((x) ^ fuzz2[(x)&3]) - -/* aproto: header new_nauty_protos.h */ - -dispatchvec dispatch_sparse = - {isautom_sg,testcanlab_sg,updatecan_sg,refine_sg,refine_sg,cheapautom_sg, - targetcell_sg,nausparse_freedyn,nausparse_check,init_sg,NULL}; - -#if !MAXN -DYNALLSTAT(short,vmark1,vmark1_sz); -DYNALLSTAT(short,vmark2,vmark2_sz); -DYNALLSTAT(int,work1,work1_sz); -DYNALLSTAT(int,work2,work2_sz); -DYNALLSTAT(int,work3,work3_sz); -DYNALLSTAT(int,work4,work4_sz); -DYNALLSTAT(set,snwork,snwork_sz); -#else -static TLS_ATTR short vmark1[MAXN]; -static TLS_ATTR short vmark2[MAXN]; -static TLS_ATTR int work1[MAXN]; -static TLS_ATTR int work2[MAXN]; -static TLS_ATTR int work3[MAXN]; -static TLS_ATTR int work4[MAXN]; -static TLS_ATTR set snwork[40*MAXM]; -#endif - -static TLS_ATTR short vmark1_val = 32000; -#define MARK1(i) vmark1[i] = vmark1_val -#define UNMARK1(i) vmark1[i] = 0 -#define ISMARKED1(i) (vmark1[i] == vmark1_val) -#define ISNOTMARKED1(i) (vmark1[i] != vmark1_val) - -static TLS_ATTR short vmark2_val = 32000; -#define MARK2(i) vmark2[i] = vmark2_val -#define UNMARK2(i) vmark2[i] = 0 -#define ISMARKED2(i) (vmark2[i] == vmark2_val) -#define ISNOTMARKED2(i) (vmark2[i] != vmark2_val) - -#if !MAXN -#define RESETMARKS1 {if (vmark1_val++ >= 32000) \ - {size_t ij; for (ij=0;ij= 32000) \ - {size_t ij; for (ij=0;ij= 32000) \ - {size_t ij; for (ij=0;ij= 32000) \ - {size_t ij; for (ij=0;ijnv; - if (g2->nv != n || g2->nde != g1->nde) return FALSE; - - SG_VDE(g1,v1,d1,e1); - SG_VDE(g2,v2,d2,e2); - - PREPAREMARKS1(n); - - for (i = 0; i < n; ++i) - { - di = d1[i]; - if (d2[i] != di) return FALSE; - - vi = v1[i]; - RESETMARKS1; - for (j = 0; j < di; ++j) MARK1(e1[vi+j]); - vi = v2[i]; - for (j = 0; j < di; ++j) if (ISNOTMARKED1(e2[vi+j])) return FALSE; - } - - return TRUE; -} - -/***************************************************************************** -* * -* testcanlab_sg(g,canong,lab,samerows,m,n) compares g^lab to canong, * -* using an ordering which is immaterial since it's only used here. The * -* value returned is -1,0,1 if g^lab <,=,> canong. *samerows is set to * -* the number of rows (0..n) of canong which are the same as those of g^lab. * -* * -*****************************************************************************/ - -int -testcanlab_sg(graph *g, graph *canong, int *lab, int *samerows, int m, int n) -{ - int *d,*e; - int *cd,*ce; - int i,k,di,dli; - size_t j,vi,vli,*v,*cv; - int mina; - - SG_VDE(g,v,d,e); - SG_VDE(canong,cv,cd,ce); - -#if !MAXN - DYNALLOC1(int,work1,work1_sz,n,"testcanlab_sg"); -#endif -#define INVLAB work1 - - PREPAREMARKS1(n); - - for (i = 0; i < n; ++i) INVLAB[lab[i]] = i; - - for (i = 0; i < n; ++i) - { - /* compare g[lab[i]]^INVLAB to canong[i] */ - vi = cv[i]; - di = cd[i]; - vli = v[lab[i]]; - dli = d[lab[i]]; - - if (di != dli) - { - *samerows = i; - if (di < dli) return -1; - return 1; - } - - RESETMARKS1; - mina = n; - for (j = 0; j < di; ++j) MARK1(ce[vi+j]); - for (j = 0; j < di; ++j) - { - k = INVLAB[e[vli+j]]; - if (ISMARKED1(k)) UNMARK1(k); - else if (k < mina) mina = k; - } - if (mina != n) - { - *samerows = i; - for (j = 0; j < di; ++j) - { - k = ce[vi+j]; - if (ISMARKED1(k) && k < mina) return -1; - } - return 1; - } - } - - *samerows = n; - return 0; -} - -/***************************************************************************** -* * -* updatecan_sg(g,canong,lab,samerows,m,n) sets canong = g^lab, assuming * -* the first samerows vertices of canong are ok already. Also assumes * -* contiguity and ample space in canong. * -* * -*****************************************************************************/ - -void -updatecan_sg(graph *g, graph *canong, int *lab, int samerows, int m, int n) -{ - int *d,*e; - int *cd,*ce; - int i,dli; - size_t *v,*cv,vli,j,k; - - SG_VDE(g,v,d,e); - SG_VDE(canong,cv,cd,ce); - -#if !MAXN - DYNALLOC1(int,work1,work1_sz,n,"testcanlab_sg"); -#endif -#define INVLAB work1 - - ((sparsegraph*)canong)->nv = n; - ((sparsegraph*)canong)->nde = ((sparsegraph*)g)->nde; - - for (i = 0; i < n; ++i) INVLAB[lab[i]] = i; - - if (samerows == 0) k = 0; - else k = cv[samerows-1]+cd[samerows-1]; - - for (i = samerows; i < n; ++i) - { - cv[i] = k; - cd[i] = dli = d[lab[i]]; - vli = v[lab[i]]; - for (j = 0; j < dli; ++j) ce[k++] = INVLAB[e[vli+j]]; - } -} - -/***************************************************************************** -* * -* comparelab_tr(g,lab1,invlab1,lab2,invlab2) compares g^lab1 to g^lab2 * -* and returns -1,0,1 according to the comparison. * -* invlab1[] and invlab2[] are assumed to hold inverses of lab1,lab2. * -* * -*****************************************************************************/ - -int -comparelab_tr(sparsegraph *g, - int *lab1, int *invlab1, int *lab2, int *invlab2) -{ - int d1,*e1,d2,*e2; - int i,j,k,n; - int mina; - - n = g->nv; - PREPAREMARKS1(n); - - for (i = 0; i < n; ++i) - { - e1 = g->e + g->v[lab1[i]]; - d1 = g->d[lab1[i]]; - e2 = g->e + g->v[lab2[i]]; - d2 = g->d[lab2[i]]; - if (d1 < d2) return -1; - else if (d1 > d2) return 1; - - RESETMARKS1; - mina = n; - for (j = 0; j < d1; ++j) MARK1(invlab1[e1[j]]); - - for (j = 0; j < d1; ++j) - { - k = invlab2[e2[j]]; - if (ISMARKED1(k)) UNMARK1(k); - else if (k < mina) mina = k; - } - if (mina != n) - { - for (j = 0; j < d1; ++j) - { - k = invlab1[e1[j]]; - if (ISMARKED1(k) && k < mina) return -1; - } - return 1; - } - } - - return 0; -} - -/***************************************************************************** -* * -* testcanlab_tr(g,canong,lab,invlab,samerows) compares g^lab to canong, * -* using an ordering which is immaterial since it's only used here. The * -* value returned is -1,0,1 if g^lab <,=,> canong. *samerows is set to * -* the number of rows (0..n) of canong which are the same as those of g^lab. * -* invlab[] is assumed to hold the inverse of lab[] * -* * -*****************************************************************************/ - -int -testcanlab_tr(sparsegraph *g, sparsegraph *canong, - int *lab, int *invlab, int *samerows) -{ - int *d,*e; - int *cd,*ce; - int i,di,dli; - int k,n; - size_t *v,*cv,vi,vli,j; - int mina; - - SG_VDE(g,v,d,e); - SG_VDE(canong,cv,cd,ce); - n = g->nv; - - PREPAREMARKS1(n); - - for (i = 0; i < n; ++i) - { - /* compare g[lab[i]]^invlab to canong[i] */ - vi = cv[i]; - di = cd[i]; - vli = v[lab[i]]; - dli = d[lab[i]]; - - if (di != dli) - { - *samerows = i; - if (di < dli) return -1; - return 1; - } - - RESETMARKS1; - mina = n; - for (j = 0; j < di; ++j) MARK1(ce[vi+j]); - - for (j = 0; j < di; ++j) - { - k = invlab[e[vli+j]]; - if (ISMARKED1(k)) UNMARK1(k); - else if (k < mina) mina = k; - } - if (mina != n) - { - *samerows = i; - for (j = 0; j < di; ++j) - { - k = ce[vi+j]; - if (ISMARKED1(k) && k < mina) return -1; - } - return 1; - } - } - - *samerows = n; - return 0; -} - -/***************************************************************************** -* * -* updatecan_tr(g,canong,lab,invlab,samerows) sets canong = g^lab, * -* assuming the first samerows vertices of canong are ok already. * -* Also assumes contiguity and ample space in canong. * -* Assumes invlab[] holds the inverse of lab[] * -* * -*****************************************************************************/ - -void -updatecan_tr(sparsegraph *g, sparsegraph *canong, - int *lab, int *invlab, int samerows) -{ - int *d,*e; - int *cd,*ce; - int i,dli,n; - size_t *v,*cv,vli,j,k; - - SG_VDE(g,v,d,e); - SG_VDE(canong,cv,cd,ce); - n = g->nv; - - PREPAREMARKS1(n); - - canong->nv = n; - canong->nde = g->nde; - - if (samerows == 0) k = 0; - else k = cv[samerows-1]+cd[samerows-1]; - - for (i = samerows; i < n; ++i) - { - cv[i] = k; - cd[i] = dli = d[lab[i]]; - vli = v[lab[i]]; - for (j = 0; j < dli; ++j) ce[k++] = invlab[e[vli+j]]; - } -} - -#define SORT_OF_SORT 3 -#define SORT_NAME sortindirect -#include "sorttemplates.c" - -#define SORT_OF_SORT 1 -#define SORT_NAME sortints -#include "sorttemplates.c" - -/***************************************************************************** -* * -* init_sg(graph *gin, graph **gout, graph *hin, graph **hout, * -* int *lab, int *ptn, set *active, optionblk *options, * -* int *status, int m, int n) * -* Initialse routine for dispatch vector. This one just makes sure * -* that *hin has enough space. * -* * -*****************************************************************************/ - -void -init_sg(graph *gin, graph **gout, graph *hin, graph **hout, int *lab, - int *ptn, set *active, struct optionstruct *options, int *status, - int m, int n) -{ - sparsegraph *sg,*sh; - - if (options->getcanon) - { - sg = (sparsegraph*)gin; - sh = (sparsegraph*)hin; - SG_ALLOC(*sh,sg->nv,sg->nde,"init_sg"); - } - *status = 0; -} - -/***************************************************************************** -* * -* distvals(sparsegraph *sg, int v0, int *dist, int n) sets dist[i] * -* to the distance from v0 to i, for each i, or to n if there is no such * -* distance. work4[] is used as a queue. * -* * -*****************************************************************************/ - -void -distvals(sparsegraph *g, int v0, int *dist, int n) -{ - int *d,*e; - int i,head,tail; - int di,k; - size_t *v,vi,j; - - SG_VDE(g,v,d,e); -#if !MAXN - DYNALLOC1(int,work4,work4_sz,n,"distvals"); -#endif -#define QUEUE work4 - - for (i = 0; i < n; ++i) dist[i] = n; - - QUEUE[0] = v0; - dist[v0] = 0; - - head = 0; - tail = 1; - while (tail < n && head < tail) - { - i = QUEUE[head++]; - vi = v[i]; - di = d[i]; - for (j = 0; j < di; ++j) - { - k = e[vi+j]; - if (dist[k] == n) - { - dist[k] = dist[i] + 1; - QUEUE[tail++] = k; - } - } - } -} - -/***************************************************************************** -* * -* refine_sg(g,lab,ptn,level,numcells,count,active,code,m,n) performs a * -* refinement operation on the partition at the specified level of the * -* partition nest (lab,ptn). *numcells is assumed to contain the number of * -* cells on input, and is updated. The initial set of active cells (alpha * -* in the paper) is specified in the set active. Precisely, x is in active * -* iff the cell starting at index x in lab is active. * -* The resulting partition is equitable if active is correct (see the paper * -* and the Guide). * -* *code is set to a value which depends on the fine detail of the * -* algorithm, but which is independent of the labelling of the graph. * -* count is used for work space. * -* * -*****************************************************************************/ - -void -refine_sg(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, int *code, int m, int n) -{ - int i,j,k,l,v1,v2,v3,isplit; - int w1,w2,w3; - long longcode; - int *d,*e; - int size,bigsize,bigpos; - int nactive,hitcells; - int lj,di,splitv; - boolean trivsplit; - size_t *v,vi,ii; - - SG_VDE(g,v,d,e); - -#if !MAXN - DYNALLOC1(int,work1,work1_sz,n,"refine_sg"); - DYNALLOC1(int,work2,work2_sz,n,"refine_sg"); - DYNALLOC1(int,work3,work3_sz,n,"refine_sg"); - DYNALLOC1(int,work4,work4_sz,n,"refine_sg"); -#endif -#define CELLSTART work1 -#define ACTIVE work2 -#define HITS work3 -#define HITCELL work4 - - PREPAREMARKS1(n); - PREPAREMARKS2(n); - - longcode = *numcells; - - /* Set ACTIVE[0..nactive-1] = queue of active cell starts */ - - nactive = 0; - for (i = -1; (i = nextelement(active,m,i)) >= 0;) - ACTIVE[nactive++] = i; - - if (nactive == 0) - { - *code = CLEANUP(longcode); - return; - } - - /* Set CELLSTART[i] = starting point in lab[] of nontrivial cell - containing i, or n if i is a singleton */ - - for (i = 0; i < n; ) - { - /* Just here, i is a cell starting position */ - if (ptn[i] <= level) - { - CELLSTART[lab[i]] = n; - ++i; - } - else - { - j = i; - do - { - CELLSTART[lab[i]] = j; - } while (ptn[i++] > level); - } - } - - if (level <= 2 && nactive == 1 && ptn[ACTIVE[0]] <= level - && *numcells <= n/8) - { - isplit = ACTIVE[--nactive]; - DELELEMENT(active,isplit); - - distvals((sparsegraph*)g,lab[isplit],HITS,n); - - for (v1 = 0; v1 < n; ) - { - if (ptn[v1] <= level) - { - ++v1; - continue; - } - - longcode = MASH(longcode,v1); - w1 = HITS[lab[v1]]; - - v2 = v1+1; - while (ptn[v2-1] > level && HITS[lab[v2]] == w1) ++v2; - - if (ptn[v2-1] <= level) - { - v1 = v2; - continue; - } - - w2 = NAUTY_INFINITY; - v3 = j = v2; - - do - { - lj = lab[j]; - w3 = HITS[lj]; - if (w3 == w1) - { - lab[j] = lab[v3]; - lab[v3] = lab[v2]; - lab[v2] = lj; - ++v2; - ++v3; - } - else if (w3 == w2) - { - lab[j] = lab[v3]; - lab[v3] = lj; - ++v3; - } - else if (w3 < w1) - { - lab[j] = lab[v2]; - lab[v2] = lab[v1]; - lab[v1] = lj; - v3 = v2 + 1; - v2 = v1 + 1; - w2 = w1; - w1 = w3; - } - else if (w3 < w2) - { - lab[j] = lab[v2]; - lab[v2] = lj; - v3 = v2 + 1; - w2 = w3; - } - } while (ptn[j++] > level); - - longcode = MASH(longcode,w2); - longcode = MASH(longcode,v2); - if (j != v2) /* At least two fragments - * v1..v2-1 = w1; v2..v3-1 = w2 */ - { - if (v2 == v1+1) - CELLSTART[lab[v1]] = n; - - if (v3 == v2+1) - CELLSTART[lab[v2]] = n; - else - for (k = v2; k < v3; ++k) - CELLSTART[lab[k]] = v2; - ++*numcells; - ptn[v2-1] = level; - - if (j == v3) - { - /* Two fragments only */ - if (v2-v1 <= v3-v2 && !ISELEMENT(active,v1)) - { - ADDELEMENT(active,v1); - ACTIVE[nactive++] = v1; - } - else - { - ADDELEMENT(active,v2); - ACTIVE[nactive++] = v2; - } - } - else - { - /* Extra fragments: v3..j-1 > w2 */ - sortindirect(lab+v3,HITS,j-v3); - ACTIVE[nactive++] = v2; - ADDELEMENT(active,v2); - if (v2-v1 >= v3-v2) - { - bigpos = -1; - bigsize = v2-v1; - } - else - { - bigpos = nactive-1; - bigsize = v3-v2; - } - for (k = v3-1; k < j-1;) - { - ptn[k] = level; - longcode = MASH(longcode,k); - ++*numcells; - l = k+1; - ADDELEMENT(active,l); - ACTIVE[nactive++] = l; - w3 = HITS[lab[l]]; - for (k = l; k < j-1 - && HITS[lab[k+1]] == w3; ++k) - CELLSTART[lab[k+1]] = l; - size = k-l+1; - if (size == 1) - CELLSTART[lab[l]] = n; - else - { - CELLSTART[lab[l]] = l; - if (size > bigsize) - { - bigsize = size; - bigpos = nactive-1; - } - } - } - - if (bigpos >= 0 && !ISELEMENT(active,v1)) - { - longcode = MASH(longcode,bigpos); - DELELEMENT(active,ACTIVE[bigpos]); - ADDELEMENT(active,v1); - ACTIVE[bigpos] = v1; - } - } - } - v1 = j; - } - } - - /* Iterate until complete */ - while (nactive > 0 && *numcells < n) - { - for (i = 0; i < nactive && i < 10; ++i) - if (ptn[ACTIVE[i]] <= level) break; - - if (i < nactive && i < 10) - { - trivsplit = TRUE; - isplit = ACTIVE[i]; - ACTIVE[i] = ACTIVE[--nactive]; - } - else - { - isplit = ACTIVE[--nactive]; - trivsplit = ptn[isplit] <= level; - } - - DELELEMENT(active,isplit); - longcode = MASH(longcode,isplit); - - if (trivsplit) - { - RESETMARKS1; - RESETMARKS2; - hitcells = 0; - splitv = lab[isplit]; - vi = v[splitv]; - di = d[splitv]; - for (ii = 0; ii < di; ++ii) - { - j = e[vi+ii]; - MARK2(j); - k = CELLSTART[j]; - if (k != n && ISNOTMARKED1(k)) - { - MARK1(k); - HITCELL[hitcells++] = k; - } - } - - if (hitcells > 1) sortints(HITCELL,hitcells); - longcode = MASH(longcode,hitcells); - - /* divide cells according to which vertices are hit */ - - for (i = 0; i < hitcells; ++i) - { - j = v1 = v2 = HITCELL[i]; - longcode = MASH(longcode,v2); - k = 0; - do - { - lj = lab[j]; - if (ISMARKED2(lj)) - HITS[k++] = lj; - else - lab[v2++] = lj; - } while (ptn[j++] > level); - - longcode = MASH(longcode,k); - v3 = v2; - while (--k >= 0) - { - j = HITS[k]; - CELLSTART[j] = v2; - lab[v3++] = j; - } - - if (v2 != v3 && v2 != v1) - { - ++*numcells; - if (v2 == v1+1) CELLSTART[lab[v1]] = n; - if (v3 == v2+1) CELLSTART[lab[v2]] = n; - ptn[v2-1] = level; - longcode = MASH(longcode,v2); - if (v2-v1 <= v3-v2 && !ISELEMENT(active,v1)) - { - ADDELEMENT(active,v1); - ACTIVE[nactive++] = v1; - } - else - { - ADDELEMENT(active,v2); - ACTIVE[nactive++] = v2; - } - } - } - } - else /* non-trivial splitting */ - { - /* isplit is the start of the splitting cell. - Set HITS[i] = hits of i for i in non-trivial cells, - HITCELL[0..hitcells-1] = starts of hit non-trivial cells */ - - RESETMARKS1; - hitcells = 0; - do - { - vi = v[lab[isplit]]; - di = d[lab[isplit]]; - for (ii = 0; ii < di; ++ii) - { - j = e[vi+ii]; - k = CELLSTART[j]; - if (k != n) - { - if (ISNOTMARKED1(k)) - { - MARK1(k); - HITCELL[hitcells++] = k; - do - { - HITS[lab[k]] = 0; - } while (ptn[k++] > level); - } - ++HITS[j]; - } - } - } while (ptn[isplit++] > level); - - if (hitcells > 1) sortints(HITCELL,hitcells); - - /* divide cells according to hit counts */ - - longcode = MASH(longcode,hitcells); - for (i = 0; i < hitcells; ++i) - { - v1 = HITCELL[i]; - w1 = HITS[lab[v1]]; - longcode = MASH(longcode,v1); - - v2 = v1+1; - while (ptn[v2-1] > level && HITS[lab[v2]] == w1) ++v2; - - if (ptn[v2-1] <= level) continue; - w2 = NAUTY_INFINITY; - v3 = j = v2; - - do - { - lj = lab[j]; - w3 = HITS[lj]; - if (w3 == w1) - { - lab[j] = lab[v3]; - lab[v3] = lab[v2]; - lab[v2] = lj; - ++v2; - ++v3; - } - else if (w3 == w2) - { - lab[j] = lab[v3]; - lab[v3] = lj; - ++v3; - } - else if (w3 < w1) - { - lab[j] = lab[v2]; - lab[v2] = lab[v1]; - lab[v1] = lj; - v3 = v2 + 1; - v2 = v1 + 1; - w2 = w1; - w1 = w3; - } - else if (w3 < w2) - { - lab[j] = lab[v2]; - lab[v2] = lj; - v3 = v2 + 1; - w2 = w3; - } - } while (ptn[j++] > level); - - longcode = MASH(longcode,w1); - longcode = MASH(longcode,v2); - if (j != v2) /* At least two fragments - * v1..v2-1 = w1; v2..v3-1 = w2 */ - { - if (v2 == v1+1) - CELLSTART[lab[v1]] = n; - - if (v3 == v2+1) - CELLSTART[lab[v2]] = n; - else - for (k = v2; k < v3; ++k) - CELLSTART[lab[k]] = v2; - ++*numcells; - ptn[v2-1] = level; - - if (j == v3) - { - /* Two fragments only */ - if (v2-v1 <= v3-v2 && !ISELEMENT(active,v1)) - { - ADDELEMENT(active,v1); - ACTIVE[nactive++] = v1; - } - else - { - ADDELEMENT(active,v2); - ACTIVE[nactive++] = v2; - } - } - else - { - /* Extra fragments: v3..j-1 > w2 */ - longcode = MASH(longcode,v3); - sortindirect(lab+v3,HITS,j-v3); - ACTIVE[nactive++] = v2; - ADDELEMENT(active,v2); - if (v2-v1 >= v3-v2) - { - bigpos = -1; - bigsize = v2-v1; - } - else - { - bigpos = nactive-1; - bigsize = v3-v2; - longcode = MASH(longcode,bigsize); - } - for (k = v3-1; k < j-1;) - { - ptn[k] = level; - ++*numcells; - l = k+1; - ADDELEMENT(active,l); - ACTIVE[nactive++] = l; - w3 = HITS[lab[l]]; - longcode = MASH(longcode,w3); - for (k = l; k < j-1 - && HITS[lab[k+1]] == w3; ++k) - CELLSTART[lab[k+1]] = l; - size = k-l+1; - if (size == 1) - CELLSTART[lab[l]] = n; - else - { - CELLSTART[lab[l]] = l; - if (size > bigsize) - { - bigsize = size; - bigpos = nactive-1; - } - } - } - - if (bigpos >= 0 && !ISELEMENT(active,v1)) - { - DELELEMENT(active,ACTIVE[bigpos]); - ADDELEMENT(active,v1); - ACTIVE[bigpos] = v1; - } - } - } - } - } - } - - longcode = MASH(longcode,*numcells); - *code = CLEANUP(longcode); -} - -/***************************************************************************** -* * -* cheapautom_sg(ptn,level,digraph,n) returns TRUE if the partition at the * -* specified level in the partition nest (lab,ptn) {lab is not needed here} * -* satisfies a simple sufficient condition for its cells to be the orbits of * -* some subgroup of the automorphism group. Otherwise it returns FALSE. * -* It always returns FALSE if digraph!=FALSE. * -* * -* nauty assumes that this function will always return TRUE for any * -* partition finer than one for which it returns TRUE. * -* * -*****************************************************************************/ - -boolean -cheapautom_sg(int *ptn, int level, boolean digraph, int n) -{ - int i,k,nnt; - - if (digraph) return FALSE; - - k = n; - nnt = 0; - for (i = 0; i < n; ++i) - { - --k; - if (ptn[i] > level) - { - ++nnt; - while (ptn[++i] > level) {} - } - } - - return (k <= nnt + 1 || k <= 4); -} - -/***************************************************************************** -* * -* bestcell_sg(g,lab,ptn,level,tc_level,m,n) returns the index in lab of * -* the start of the "best non-singleton cell" for fixing. If there is no * -* non-singleton cell it returns n. * -* This implementation finds the first cell which is non-trivially joined * -* to the greatest number of other cells, assuming equitability. * -* This is not good for digraphs! * -* * -*****************************************************************************/ - -static int -bestcell_sg(graph *g, int *lab, int *ptn, int level, - int tc_level, int m, int n) -{ - int nnt; - int *d,*e; - int i,k,di; - int *work1b; - int maxcnt; - size_t *v,vi,j; - - SG_VDE(g,v,d,e); - -#if !MAXN - DYNALLOC1(int,work1,work1_sz,n,"bestcell_sg"); - DYNALLOC1(int,work2,work2_sz,n,"bestcell_sg"); - DYNALLOC1(int,work3,work3_sz,n,"bestcell_sg"); - DYNALLOC1(int,work4,work4_sz,n,"bestcell_sg"); -#endif - work1b = work1 + (n/2); -#define START work1 -#define SIZE work1b -#define NNTCELL work2 -#define HITS work3 -#define COUNT work4 - - /* find non-singleton cells: put starts in START[0..nnt-1], - sizes in SIZE[0..nnt-1]. - Also NNTCELL[i] = n if {i} is a singelton, else index of - nontriv cell containing i. */ - - i = nnt = 0; - - while (i < n) - { - if (ptn[i] > level) - { - START[nnt] = i; - j = i; - do - NNTCELL[lab[j]] = nnt; - while (ptn[j++] > level); - SIZE[nnt] = j-i; - ++nnt; - i = j; - } - else - { - NNTCELL[lab[i]] = n; - ++i; - } - } - - if (nnt == 0) return n; - - /* set COUNT[i] to # non-trivial neighbours of n.s. cell i */ - - for (i = 0; i < nnt; ++i) HITS[i] = COUNT[i] = 0; - - for (i = 0; i < nnt; ++i) - { - vi = v[lab[START[i]]]; - di = d[lab[START[i]]]; - - for (j = 0; j < di; ++j) - { - k = NNTCELL[e[vi+j]]; - if (k != n) ++HITS[k]; - } - for (j = 0; j < di; ++j) - { - k = NNTCELL[e[vi+j]]; - if (k != n) - { - if (HITS[k] > 0 && HITS[k] < SIZE[k]) ++COUNT[i]; - HITS[k] = 0; - } - } - } - - /* find first greatest bucket value */ - - j = 0; - maxcnt = COUNT[0]; - for (i = 1; i < nnt; ++i) - if (COUNT[i] > maxcnt) - { - j = i; - maxcnt = COUNT[i]; - } - - return (int)START[j]; -} -/***************************************************************************** -* * -* targetcell_sg(g,lab,ptn,level,tc_level,digraph,hint,m,n) returns the * -* index in lab of the next cell to split. * -* hint is a suggestion for the answer, which is obeyed if it is valid. * -* Otherwise we use bestcell() up to tc_level and the first non-trivial * -* cell after that. * -* * -*****************************************************************************/ - -int -targetcell_sg(graph *g, int *lab, int *ptn, int level, int tc_level, - boolean digraph, int hint, int m, int n) -{ - int i; - - if (hint >= 0 && ptn[hint] > level && - (hint == 0 || ptn[hint-1] <= level)) - return hint; - else if (level <= tc_level) - return bestcell_sg(g,lab,ptn,level,tc_level,m,n); - else - { - for (i = 0; i < n && ptn[i] <= level; ++i) {} - return (i == n ? 0 : i); - } -} - -/***************************************************************************** -* * -* sortlists_sg(g) sorts the adjacency lists into numerical order * -* * -*****************************************************************************/ - -void -sortlists_sg(sparsegraph *g) -{ - int *d,*e; - int n,i; - size_t *v; - - SG_VDE(g,v,d,e); - n = g->nv; - - for (i = 0; i < n; ++i) - if (d[i] > 1) sortints(e+v[i],d[i]); -} - -/***************************************************************************** -* * -* put_sg(f,sg,digraph,linelength) writes the sparse graph to file f using * -* at most linelength characters per line. If digraph then all directed * -* edges are written; else one v-w for w>=v is written. * -* * -*****************************************************************************/ - -void -put_sg(FILE *f, sparsegraph *sg, boolean digraph, int linelength) -{ - int *d,*e; - int n,di; - int i,curlen,slen; - size_t *v,vi,j; - char s[12]; - - SG_VDE(sg,v,d,e); - n = sg->nv; - - for (i = 0; i < n; ++i) - { - vi = v[i]; - di = d[i]; - if (di == 0) continue; - slen = itos(i+labelorg,s); - putstring(f,s); - putstring(f," :"); - curlen = slen + 2; - - for (j = 0; j < di; ++j) - { - if (!digraph && e[vi+j] < i) continue; - slen = itos(e[vi+j]+labelorg,s); - if (linelength && curlen + slen + 1 >= linelength) - { - putstring(f,"\n "); - curlen = 2; - } - PUTC(' ',f); - putstring(f,s); - curlen += slen + 1; - } - PUTC('\n',f); - } -} - -/***************************************************************************** -* * -* sg_to_nauty(sg,g,reqm,&m) creates a nauty-format graph from a sparse * -* graph. reqm is the required m value (computed from n if reqm=0), and * -* m is the actual value used. g is dynamically generated if NULL is given. * -* A pointer to g is returned. * -* * -*****************************************************************************/ - -graph* -sg_to_nauty(sparsegraph *sg, graph *g, int reqm, int *pm) -{ - int *d,*e; - int m,n,i,di; - size_t *v,vi,j; - set *gi; - - SG_VDE(sg,v,d,e); - n = sg->nv; - if (reqm != 0 && reqm*WORDSIZE < n) - { - fprintf(ERRFILE,"sg_to_nauty: reqm is impossible\n"); - exit(1); - } - - if (reqm != 0) m = reqm; - else m = (n+WORDSIZE-1)/WORDSIZE; - - *pm = m; - - if (g == NULL) - { - if ((g = (graph*)ALLOCS(n,m*sizeof(graph))) == NULL) - { - fprintf(ERRFILE,"sg_to_nauty: malloc failed\n"); - exit(1); - } - } - - for (i = 0, gi = g; i < n; ++i, gi += m) - { - vi = v[i]; - di = d[i]; - EMPTYSET(gi,m); - for (j = 0; j < di; ++j) ADDELEMENT(gi,e[vi+j]); - } - - return g; -} - -/***************************************************************************** -* * -* copy_sg(sg1,sg2) makes a copy of sg1 into sg2. * -* If sg2 is not NULL, it is assumed that the vlen,dlen,elen fields are * -* correct and v,d,e are dynamically allocated (or NULL); they are * -* reallocated if necessary. If sg2==NULL, a new structure is allocated. * -* A pointer to the copy is returned. * -* The new graph e component is the same, no compression is done. * -* * -*****************************************************************************/ - -sparsegraph* -copy_sg(sparsegraph *sg1, sparsegraph *sg2) -{ - int *d1,*e1,*d2,*e2; - int i,n; - size_t *v1,*v2,k; - - if (!sg2) - { - if ((sg2 = (sparsegraph*)ALLOCS(1,sizeof(sparsegraph))) == NULL) - { - fprintf(ERRFILE,"copy_sg: malloc failed\n"); - exit(1); - } - SG_INIT(*sg2); - } - - SG_VDE(sg1,v1,d1,e1); - - n = sg1->nv; - - k = 0; - for (i = 0; i < n; ++i) - if (v1[i]+d1[i]>k) k = v1[i] + d1[i]; - - SG_ALLOC(*sg2,n,k,"copy_sg malloc"); - SG_VDE(sg2,v2,d2,e2); - - sg2->nv = n; - sg2->nde = sg1->nde; - memcpy(v2,v1,n*sizeof(size_t)); - memcpy(d2,d1,n*sizeof(int)); - memcpy(e2,e1,k*sizeof(int)); - - return sg2; -} - -/***************************************************************************** -* * -* nauty_to_sg(g,sg,m,n) creates a sparse graph from a nauty format graph * -* If sg is not NULL, it is assumed that the vlen,dlen,elen fields are * -* correct and v,d,e are dynamically allocated (or NULL); they are * -* reallocated if necessary. If sg==NULL, a new structure is allocated. * -* A pointer to the sparse graph is returned. * -* * -*****************************************************************************/ - -sparsegraph* -nauty_to_sg(graph *g, sparsegraph *sg, int m, int n) -{ - int *d,*e; - int i,k; - set *gi; - size_t j,*v,nde; - - if (!sg) - { - if ((sg = (sparsegraph*)ALLOCS(1,sizeof(sparsegraph))) == NULL) - { - fprintf(ERRFILE,"nauty_to_sg: malloc failed\n"); - exit(1); - } - SG_INIT(*sg); - } - - nde = 0; - for (gi = g + (size_t)m*(size_t)n; --gi >= g; ) - if (*gi != 0) nde += POPCOUNT(*gi); - - sg->nv = n; - sg->nde = nde; - - SG_ALLOC(*sg,n,nde,"nauty_to_sg"); - - SG_VDE(sg,v,d,e); - - j = 0; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - v[i] = j; - for (k = -1; (k = nextelement(gi,m,k)) >= 0; ) - e[j++] = k; - d[i] = j - v[i]; - } - - return sg; -} - -/***************************************************************************** -* * -* distances_sg() assigns to each vertex v a value depending on the number * -* of vertices at each distance from v, and what cells they lie in. * -* If we find any cell which is split in this manner, we don't try any * -* further cells. * -* * -*****************************************************************************/ - -void -distances_sg(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int *d,*e; - int i,k,dlim,wt; - int di; - int cell1,cell2,iv,liv,kcode; - int head,tail; - long longcode; - size_t *v,vi,j; - boolean success; - - SG_VDE(g,v,d,e); - -#if !MAXN - DYNALLOC1(int,work1,work1_sz,n,"distances_sg"); - DYNALLOC1(int,work4,work4_sz,n,"distances_sg"); - DYNALLOC1(int,work3,work3_sz,n,"distances_sg"); -#endif -#define CELLCODE work1 -#define QUEUE work4 -#define DIST work3 - - for (i = n; --i >= 0;) invar[i] = 0; - - wt = 1; - for (i = 0; i < n; ++i) - { - CELLCODE[lab[i]] = FUZZ1(wt); - if (ptn[i] <= level) ++wt; - } - - if (invararg > n || invararg == 0) dlim = n; - else dlim = invararg+1; - - success = FALSE; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell2 == cell1) continue; - - for (iv = cell1; iv <= cell2; ++iv) - { - liv = lab[iv]; - QUEUE[0] = liv; - DIST[liv] = 0; - RESETMARKS1; - MARK1(liv); - longcode = 0; - head = 0; - tail = 1; - - while (tail < n && head < tail) - { - i = QUEUE[head++]; - if (DIST[i] >= dlim) break; - vi = v[i]; - di = d[i]; - - for (j = 0; j < di; ++j) - { - k = e[vi+j]; - if (ISNOTMARKED1(k)) - { - MARK1(k); - DIST[k] = DIST[i] + 1; - kcode = DIST[k]+CELLCODE[k]; - ACCUM(longcode,FUZZ1(kcode)); - QUEUE[tail++] = k; - } - } - } - invar[liv] = CLEANUP(longcode); - if (invar[liv] != invar[lab[cell1]]) success = TRUE; - } - if (success) break; - } -} - -/***************************************************************************** -* * -* adjacencies_sg() assigns to each vertex v a code depending on which cells * -* it is joined to and from, and how many times. It is intended to provide * -* better partitioning that the normal refinement routine for digraphs. * -* It will not help with undirected graphs in nauty at all. * -* * -*****************************************************************************/ - -void -adjacencies_sg(graph *g, int *lab, int *ptn, int level, int numcells, - int tvpos, int *invar, int invararg, boolean digraph, - int m, int n) -{ - int *d,*e; - int vwt,wwt; - int *ei,di,i; - size_t *v,j; - - SG_VDE(g,v,d,e); - -#if !MAXN - DYNALLOC1(int,work2,work2_sz,n,"adjacencies_sg"); -#endif - - vwt = 1; - for (i = 0; i < n; ++i) - { - work2[lab[i]] = vwt; - if (ptn[i] <= level) ++vwt; - invar[i] = 0; - } - - for (i = 0; i < n; ++i) - { - vwt = FUZZ1(work2[i]); - wwt = 0; - di = d[i]; - ei = e + v[i]; - for (j = 0; j < di; ++j) - { - ACCUM(wwt,FUZZ2(work2[ei[j]])); - ACCUM(invar[ei[j]],vwt); - } - ACCUM(invar[i],wwt); - } -} - -/***************************************************************************** -* * -* sparsenauty(g,lab,ptn,orbits,&options,&stats,h) * -* is a slightly simplified interface to nauty(). It allocates enough * -* workspace for 20 automorphisms and checks that the sparsegraph dispatch * -* vector is in use. * -* * -*****************************************************************************/ - -void -sparsenauty(sparsegraph *g, int *lab, int *ptn, int *orbits, - optionblk *options, statsblk *stats, sparsegraph *h) -{ - int m,n; - - if (options->dispatch != &dispatch_sparse) - { - fprintf(ERRFILE,"Error: sparsenauty() needs standard options block\n"); - exit(1); - } - - n = g->nv; - m = SETWORDSNEEDED(n); - -#if !MAXN - DYNALLOC1(set,snwork,snwork_sz,2*60*m,"densenauty malloc"); -#endif - - nauty((graph*)g,lab,ptn,NULL,orbits,options,stats, - snwork,2*60*m,m,n,(graph*)h); -} - -/***************************************************************************** -* * -* nausparse_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -nausparse_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in nausparse.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in nausparse.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in nausparse.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: nausparse.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* nausparse_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -nausparse_freedyn(void) -{ -#if !MAXN - DYNFREE(vmark1,vmark1_sz); - DYNFREE(vmark2,vmark2_sz); - DYNFREE(work1,work1_sz); - DYNFREE(work2,work2_sz); - DYNFREE(work3,work3_sz); - DYNFREE(work4,work4_sz); - DYNFREE(snwork,snwork_sz); -#endif -} diff --git a/tools/nauty25r9_unix/nausparse.h b/tools/nauty25r9_unix/nausparse.h deleted file mode 100644 index 9203287..0000000 --- a/tools/nauty25r9_unix/nausparse.h +++ /dev/null @@ -1,102 +0,0 @@ -/* nausparse.h : header file for sparse digraphs, nauty 2.5 */ -/* This version allows only simple graphs with loops but - * contains the data structures for weights on the edges - * even though they aren't implemented yet. */ - -/***************************************************************************** -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-09 : removed types shortish and permutation * -* 20-May-10 : make some fields type size_t * -* 23-May-10 : add sparsenauty() * -* 3-Jun-10 : add *_tr procedures used by Traces * -* 30-Jun-10 : add DEFAULTOPTIONS_SPARSEDIGRAPH() * -* 18-Aug-12 : fix SG_DECL initialization order * -* * -*****************************************************************************/ - -#ifndef _NAUSPARSE_H_ /* only process this file once */ -#define _NAUSPARSE_H_ - -#include "nauty.h" - -#ifndef SG_WEIGHT -#define SG_WEIGHT int -#endif - -typedef struct -{ - size_t nde; /* Number of directed edges (loops contribute only 1) */ - size_t *v; /* Array of indexes into e[*] */ - int nv; /* Number of vertices */ - int *d; /* Array with out-degree of each vertex */ - int *e; /* Array to hold lists of neighbours */ - SG_WEIGHT *w; /* Not implemented, should be NULL. */ - size_t vlen,dlen,elen,wlen; /* Sizes of arrays in units of type */ -} sparsegraph; - - -#define SG_VDE(sgp,vv,dd,ee) do { vv = ((sparsegraph*)(sgp))->v; \ - dd = ((sparsegraph*)(sgp))->d; ee = ((sparsegraph*)(sgp))->e; } while(0) -#define SG_INIT(sg) do { (sg).v = NULL; (sg).d = (sg).e = (sg).w = NULL; \ - (sg).vlen = (sg).dlen = (sg).elen = (sg).wlen = 0; } while(0) -#define SG_ALLOC(sg,nlen,ndelen,msg) do { \ - DYNALLOC1(size_t,(sg).v,(sg).vlen,nlen,msg); \ - DYNALLOC1(int,(sg).d,(sg).dlen,nlen,msg); \ - DYNALLOC1(int,(sg).e,(sg).elen,ndelen,msg); } while (0) -#define SG_FREE(sg) do { \ - DYNFREE((sg).v,(sg).vlen); \ - DYNFREE((sg).d,(sg).dlen); \ - DYNFREE((sg).e,(sg).elen); } while (0) - -#define SG_DECL(sg) sparsegraph sg = {0,NULL,0,NULL,NULL,NULL,0,0,0,0} - -#define DEFAULTOPTIONS_SPARSEGRAPH(options) optionblk options = \ - {0,FALSE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,NULL,100,0,1,0,&dispatch_sparse,FALSE,NULL} -#define DEFAULTOPTIONS_SPARSEDIGRAPH(options) optionblk options = \ - {0,TRUE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,adjacencies_sg,100,0,999,0,&dispatch_sparse,FALSE,NULL} - -#ifdef __cplusplus -extern "C" { -#endif - -extern dispatchvec dispatch_sparse; - -extern int targetcell_sg(graph*,int*,int*,int,int,boolean,int,int,int); -extern boolean cheapautom_sg(int*,int,boolean,int); -extern void distvals(sparsegraph*,int,int*,int); -extern boolean isautom_sg(graph*,int*,boolean,int,int); -extern void refine_sg(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -extern int testcanlab_sg(graph*,graph*,int*,int*,int,int); -extern void updatecan_sg(graph*,graph*,int*,int,int,int); -extern int testcanlab_tr(sparsegraph*,sparsegraph*,int*,int*,int*); -extern int comparelab_tr(sparsegraph*,int*,int*,int*,int*); -extern void updatecan_tr(sparsegraph*,sparsegraph*,int*,int*,int); -extern void init_sg(graph*,graph**,graph*,graph**,int*,int*,set*, - struct optionstruct*,int*,int,int); -extern void nausparse_freedyn(void); -extern void nausparse_check(int,int,int,int); - -extern sparsegraph *nauty_to_sg(graph*,sparsegraph*,int,int); -extern graph* sg_to_nauty(sparsegraph*,graph*,int,int*); -extern void sortlists_sg(sparsegraph*); -extern boolean aresame_sg(sparsegraph*,sparsegraph*); -extern void put_sg(FILE*,sparsegraph*,boolean,int); -extern sparsegraph *copy_sg(sparsegraph*,sparsegraph*); - -extern void sparsenauty(sparsegraph*g,int*,int*,int*, - optionblk*,statsblk*,sparsegraph*); - -extern void adjacencies_sg(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void distances_sg(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/tools/nauty25r9_unix/nausparse.o b/tools/nauty25r9_unix/nausparse.o deleted file mode 100644 index 09e53ee30279fb0b8761ab4e8b1684e3aaf3f7f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40944 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 Sv */ -#include "nautaux.h" - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#if !MAXN -DYNALLSTAT(set,workset,workset_sz); -DYNALLSTAT(int,workperm,workperm_sz); -#else -static TLS_ATTR set workset[MAXM]; /* used for scratch work */ -static TLS_ATTR int workperm[MAXN+2]; -#endif - -/***************************************************************************** -* * -* ptncode(g,lab,ptn,level,m,n) returns a long integer invariant which * -* depends on the (assumed equitable) partition at the stated level, and * -* the number of edges betwen the various cells. * -* Neither nauty nor dreadnaut use this. * -* * -* GLOBALS ACCESSED: bit,setinter() * -* * -*****************************************************************************/ - -long -ptncode(graph *g, int *lab, int *ptn, int level, int m, int n) -{ - int i; - long code; - int v1,v2,nc,inter,cellend; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"testcanlab"); - DYNALLOC1(set,workset,workset_sz,m,"testcanlab"); -#endif - - /* find all cells: put starts in workperm[0..n] */ - - i = nc = 0; - code = 0; - - while (i < n) - { - workperm[nc++] = i; - code = ((code << 13) ^ (code >> 19)) + i; - while (ptn[i] > level) ++i; - ++i; - } - workperm[nc] = n; - - for (v2 = 0; v2 < nc; ++v2) - { - EMPTYSET(workset,m); - for (i = workperm[v2], cellend = workperm[v2+1] - 1; - i <= cellend; ++i) - ADDELEMENT(workset,lab[i]); - for (v1 = 0; v1 < nc; ++v1) - { - i = workperm[v1]; - cellend = workperm[v1+1] - 1; - inter = setinter(workset,GRAPHROW(g,lab[i],M),M); - code = ((code << 13) ^ (code >> 19)) + inter; - } - } - - return code; -} - -/***************************************************************************** -* * -* equitable(g,lab,ptn,level,m,n) checks that the partition at the given * -* level is equitable. Neither nauty nor dreadnaut use this. * -* * -* GLOBALS ACCESSED: bit,setinter() * -* * -*****************************************************************************/ - -boolean -equitable(graph *g, int *lab, int *ptn, int level, int m, int n) -{ - int i; - int v1,v2,nc,inter,cellend; - boolean ok; - - /* find all cells: put starts in workperm[0..n] */ - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"testcanlab"); - DYNALLOC1(set,workset,workset_sz,m,"testcanlab"); -#endif - - i = nc = 0; - - while (i < n) - { - workperm[nc++] = i; - while (ptn[i] > level) - ++i; - ++i; - } - workperm[nc] = n; - - ok = TRUE; - for (v2 = 0; v2 < nc && ok; ++v2) - { - EMPTYSET(workset,m); - for (i = workperm[v2], cellend = workperm[v2+1] - 1; - i <= cellend; ++i) - ADDELEMENT(workset,lab[i]); - for (v1 = 0; v1 < nc; ++v1) - { - i = workperm[v1]; - cellend = workperm[v1+1] - 1; - if (i == cellend) - continue; - inter = setinter(workset,GRAPHROW(g,lab[i],M),M); - while (++i <= cellend) - if (setinter(workset,GRAPHROW(g,lab[i],M),M) != inter) - ok = FALSE; - } - } - - return ok; -} - -/***************************************************************************** -* * -* component(g,v,c,m,n) determines the set of all vertices that can be * -* reached along directed paths starting at vertex v, including v itself. * -* This set is returned as c, unless c is null. The size of the set is * -* returned as the function value. * -* * -* GLOBALS ACCESSED: bit,setinter(),nextelement() * -* * -*****************************************************************************/ - -int -component(graph *g, int v, set *cmpt, int m, int n) -{ - int i,z; - set newverts[MAXM],*gx; - int head,tail,x; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"testcanlab"); -#endif - - EMPTYSET(workset,m); - ADDELEMENT(workset,v); - head = 0; - tail = 1; - workperm[head] = v; - - while (head < tail && tail < n) - { - x = workperm[head++]; - gx = GRAPHROW(g,x,m); - for (i = m; --i >= 0;) - { - newverts[i] = gx[i] & ~workset[i]; - workset[i] |= gx[i]; - } - for (z = -1; (z = nextelement(newverts,m,z)) >= 0; ) - workperm[tail++] = z; - } - - if (cmpt != NULL) - for (i = m; --i >= 0;) cmpt[i] = workset[i]; - - return tail; -} - -/***************************************************************************** -* * -* nautaux_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -nautaux_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in nautaux.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in nautaux.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in nautaux.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: nautaux.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* nautaux_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -nautaux_freedyn(void) -{ -#if !MAXN - DYNFREE(workset,workset_sz); - DYNFREE(workperm,workperm_sz); -#endif -} diff --git a/tools/nauty25r9_unix/nautaux.h b/tools/nauty25r9_unix/nautaux.h deleted file mode 100644 index b98af32..0000000 --- a/tools/nauty25r9_unix/nautaux.h +++ /dev/null @@ -1,34 +0,0 @@ -/***************************************************************************** -* * -* This is the header file for version 2.5 of nautaux.c. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 26-Apr-89 : initial creation for version 1.5. * -* 14-Oct-90 : renamed as version 1.6 (no changes to this file) * -* 5-Jun-93 : renamed as version 1.7+ (no changes to this file) * -* 18-Aug-93 : renamed as version 1.8 (no changes to this file) * -* 17-Sep-93 : renamed as version 1.9 (no changes to this file) * -* 19-Apr-95 : added prototype wrapper for C++ * -* 16-Nov-00 : made changes listed in nauty.h. * -* 3-Nov-04 : declared nautaux_freedyn and nautaux_check * -* 21-Aug-12 : remove nvector * -* * -*****************************************************************************/ - -#include "nauty.h" /* which includes stdio.h */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int component(graph*,int,set*,int,int); -extern boolean equitable(graph*,int*,int*,int,int,int); -extern long ptncode(graph*,int*,int*,int,int,int); -extern void nautaux_freedyn(void); -extern void nautaux_check(int,int,int,int); -#ifdef __cplusplus -} -#endif diff --git a/tools/nauty25r9_unix/nautest.c b/tools/nauty25r9_unix/nautest.c deleted file mode 100644 index 2b4adff..0000000 --- a/tools/nauty25r9_unix/nautest.c +++ /dev/null @@ -1,126 +0,0 @@ -/* Test for basic nauty functions (but not nauty itself) */ - -#include "nauty.h" - -int -main(int argc, char *argv[]) -{ - int i,j,bad; - setword w,ww; - - printf("NAUTYVERSION=%s NAUTYVERSIONID=%d\n", - NAUTYVERSION,NAUTYVERSIONID); - printf("MAXN=%d MAXM=%d WORDSIZE=%d NAUTY_INFINITY=%d\n", - MAXN,MAXM,WORDSIZE,NAUTY_INFINITY); - printf("sizes: short=%d int=%d long=%d double=%d\n", - (int)sizeof(short),(int)sizeof(int),(int)sizeof(long), - (int)sizeof(double)); - printf("sizes: boolean=%d setword=%d\n", - (int)sizeof(boolean),(int)sizeof(setword)); - printf("CLZ=%d,%d,%d\n",HAVE_CLZ,HAVE_CLZL,HAVE_CLZLL); - -#if SIZEOF_LONGLONG > 0 - printf("sizeof(long long)=%d\n",sizeof(long long)); -#endif - - printf("defined:"); -#ifdef __STDC__ - printf(" __STDC__"); -#endif -#ifdef BIGNAUTY - printf(" BIGNAUTY(obsolete!)"); -#endif -#ifdef SYS_UNIX - printf(" SYS_UNIX"); -#endif -#ifdef SYS_CRAY - printf(" SYS_CRAY"); -#endif -#ifdef SETWORD_SHORT - printf(" SETWORD_SHORT"); -#endif -#ifdef SETWORD_INT - printf(" SETWORD_INT"); -#endif -#ifdef SETWORD_LONG - printf(" SETWORD_LONG"); -#endif -#ifdef SETWORD_LONGLONG - printf(" SETWORD_LONGLONG"); -#endif - printf("\n"); - - bad = 0; - - if (8*sizeof(setword) != WORDSIZE) - { - printf("\n ***** NOTE: WORDSIZE mismatch *****\n\n"); - ++bad; - } - - for (i = 0; i < WORDSIZE; ++i) - { - w = ALLMASK(i); - if (POPCOUNT(w) != i) - { - printf("\n ***** POPCOUNT(ALLMASK) error %d *****\n\n",i); - ++bad; - } - } - - for (i = 0; i < WORDSIZE; ++i) - { - w = BITMASK(i); - if (POPCOUNT(w) != WORDSIZE-i-1) - { - printf("\n ***** POPCOUNT(BITMASK) error %d *****\n\n",i); - ++bad; - } - } - - for (i = 0; i < WORDSIZE; ++i) - if (POPCOUNT(ALLMASK(i)) != i) - { - printf("\n ***** POPCOUNT(ALLMASK) error %d *****\n\n",i); - ++bad; - } - - for (i = 0; i < WORDSIZE; ++i) - if (FIRSTBIT(BITT[i]) != i) - { - printf("\n ***** FIRSTBIT(BITT) error %d *****\n\n",i); - ++bad; - } - - if (FIRSTBIT((setword)0) != WORDSIZE) - { - printf("\n ***** FIRSTBIT(0) error *****\n\n"); - ++bad; - } - - for (i = 0; i < WORDSIZE; ++i) - if (POPCOUNT(BITT[i]) != 1) - { - printf("\n ***** POPCOUNT(BITT) error %d *****\n\n",i); - ++bad; - } - - for (i = 0; i < WORDSIZE; ++i) - { - w = 0; - for (j = 1; j <= WORDSIZE; ++j) - { - w |= BITT[(j*97+i)%WORDSIZE]; - if (POPCOUNT(w) != j) - { - printf("\n ***** POPCOUNT(w) error %d %d *****\n\n",i,j); - ++bad; - } - } - } - - if (!bad) printf("\nNo errors found\n"); - else printf("\nXXXXXXX %d errors found XXXXXXX\n",bad); - - exit(0); -} diff --git a/tools/nauty25r9_unix/nautest1.dre b/tools/nauty25r9_unix/nautest1.dre deleted file mode 100644 index 07d5917..0000000 --- a/tools/nauty25r9_unix/nautest1.dre +++ /dev/null @@ -1,58 +0,0 @@ -!Hoffman-Singleton graph -n=50 $=0 g - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -$$ -t ? x o -c -ax z jxz b -_ x o -f=3 x o -q diff --git a/tools/nauty25r9_unix/nautest1a.ans b/tools/nauty25r9_unix/nautest1a.ans deleted file mode 100644 index 5cd01ab..0000000 --- a/tools/nauty25r9_unix/nautest1a.ans +++ /dev/null @@ -1,149 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=dense m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -(5 45 35 25 15)(6 46 36 26 16)(7 47 37 27 17)(8 48 38 28 18)(9 49 39 29 19) - (10 11 12 13 14)(20 22 24 21 23)(30 33 31 34 32)(40 44 43 42 41) -(10 20 40 30)(11 21 41 31)(12 22 42 32)(13 23 43 33)(14 24 44 34)(15 35 45 25) - (16 36 46 26)(17 37 47 27)(18 38 48 28)(19 39 49 29) -level 4: 11 orbits; 10 fixed; index 20 -(1 6 21 23 46)(3 5 25 15 45)(4 7 37 27 47)(8 40 26 41 49)(9 42 14 44 48) - (10 13 19 22 38)(11 18 20 34 16)(12 36 31 24 39)(28 30 29 32 33) -level 3: 5 orbits; 1 fixed; index 36 -(1 4)(2 3)(6 9)(7 8)(11 14)(12 13)(15 45)(16 49)(17 48)(18 47)(19 46)(21 24) - (22 23)(25 35)(26 39)(27 38)(28 37)(29 36)(31 34)(32 33)(41 44)(42 43) -level 2: 3 orbits; 2 fixed; index 7 -(0 1 2 3 4)(5 16 27 38 49)(6 17 28 39 45)(7 18 29 35 46)(8 19 25 36 47)(9 15 - 26 37 48)(20 24 23 22 21)(30 33 31 34 32)(40 42 44 41 43) -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -cpu time = 0.00 seconds - 0:49 (50); -level 4: 11 orbits; 10 fixed; index 20 -level 3: 5 orbits; 1 fixed; index 36 -level 2: 3 orbits; 2 fixed; index 7 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[N4fa37bd7 27e16be2 7d20780d] -level 4: 11 orbits; 2 fixed; index 20 -level 3: 5 orbits; 1 fixed; index 36 -level 2: 3 orbits; 6 fixed; index 7 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[N4fa37bd7 27e16be2 7d20780d] - 0 6 46 29 8 35 17 30 42 43 34 19 10 22 1 14 11 27 31 24 45 44 21 7 40 25 37 4 - 5 38 2 49 33 20 47 23 16 28 3 41 13 18 15 26 32 12 36 39 9 48 - 0 : 1 2 3 4 5 6 7; - 1 : 0 8 9 10 11 12 13; - 2 : 0 14 25 26 27 28 29; - 3 : 0 17 23 30 38 46 47; - 4 : 0 16 21 31 40 41 42; - 5 : 0 19 24 32 34 39 44; - 6 : 0 18 20 33 36 43 48; - 7 : 0 15 22 35 37 45 49; - 8 : 1 14 20 21 22 23 24; - 9 : 1 19 27 30 37 41 48; - 10 : 1 16 25 43 44 45 47; - 11 : 1 18 29 32 35 38 42; - 12 : 1 17 26 31 33 39 49; - 13 : 1 15 28 34 36 40 46; - 14 : 2 8 15 16 17 18 19; - 15 : 7 13 14 30 39 42 43; - 16 : 4 10 14 32 46 48 49; - 17 : 3 12 14 35 36 41 44; - 18 : 6 11 14 31 34 37 47; - 19 : 5 9 14 33 38 40 45; - 20 : 6 8 29 30 40 44 49; - 21 : 4 8 25 36 37 38 39; - 22 : 7 8 28 32 33 41 47; - 23 : 3 8 26 34 42 45 48; - 24 : 5 8 27 31 35 43 46; - 25 : 2 10 21 30 33 34 35; - 26 : 2 12 23 32 37 40 43; - 27 : 2 9 24 36 42 47 49; - 28 : 2 13 22 31 38 44 48; - 29 : 2 11 20 39 41 45 46; - 30 : 3 9 15 20 25 31 32; - 31 : 4 12 18 24 28 30 45; - 32 : 5 11 16 22 26 30 36; - 33 : 6 12 19 22 25 42 46; - 34 : 5 13 18 23 25 41 49; - 35 : 7 11 17 24 25 40 48; - 36 : 6 13 17 21 27 32 45; - 37 : 7 9 18 21 26 44 46; - 38 : 3 11 19 21 28 43 49; - 39 : 5 12 15 21 29 47 48; - 40 : 4 13 19 20 26 35 47; - 41 : 4 9 17 22 29 34 43; - 42 : 4 11 15 23 27 33 44; - 43 : 6 10 15 24 26 38 41; - 44 : 5 10 17 20 28 37 42; - 45 : 7 10 19 23 29 31 36; - 46 : 3 13 16 24 29 33 37; - 47 : 3 10 18 22 27 39 40; - 48 : 6 9 16 23 28 35 39; - 49 : 7 12 16 20 27 34 38; -level 4: 20 orbits; 20 fixed; index 4 -level 3: 7 orbits; 2 fixed; index 30 -level 2: 3 orbits; 1 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds - 0:49 (50); -[fixing partition] -level 3: 20 orbits; 10 fixed; index 4 -level 2: 7 orbits; 1 fixed; index 30 -level 1: 3 orbits; 0 fixed; index 42 -3 orbits; grpsize=5040; 4 gens; 12 nodes; maxlev=4 -canupdates=1; cpu time = 0.00 seconds - 0:2 4 6:18 20:23 25 27 28 30:43 45:47 49 (42); 3; 5 19 24 26 29 44 48 (7); diff --git a/tools/nauty25r9_unix/nautest1a.dre b/tools/nauty25r9_unix/nautest1a.dre deleted file mode 100644 index b848622..0000000 --- a/tools/nauty25r9_unix/nautest1a.dre +++ /dev/null @@ -1,149 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=dense m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -(5 45 35 25 15)(6 46 36 26 16)(7 47 37 27 17)(8 48 38 28 18)(9 49 39 29 19) - (10 11 12 13 14)(20 22 24 21 23)(30 33 31 34 32)(40 44 43 42 41) -(10 20 40 30)(11 21 41 31)(12 22 42 32)(13 23 43 33)(14 24 44 34)(15 35 45 25) - (16 36 46 26)(17 37 47 27)(18 38 48 28)(19 39 49 29) -level 4: 11 orbits; 10 fixed; index 20 -(1 6 21 23 46)(3 5 25 15 45)(4 7 37 27 47)(8 40 26 41 49)(9 42 14 44 48) - (10 13 19 22 38)(11 18 20 34 16)(12 36 31 24 39)(28 30 29 32 33) -level 3: 5 orbits; 1 fixed; index 36 -(1 4)(2 3)(6 9)(7 8)(11 14)(12 13)(15 45)(16 49)(17 48)(18 47)(19 46)(21 24) - (22 23)(25 35)(26 39)(27 38)(28 37)(29 36)(31 34)(32 33)(41 44)(42 43) -level 2: 3 orbits; 2 fixed; index 7 -(0 1 2 3 4)(5 16 27 38 49)(6 17 28 39 45)(7 18 29 35 46)(8 19 25 36 47)(9 15 - 26 37 48)(20 24 23 22 21)(30 33 31 34 32)(40 42 44 41 43) -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -cpu time = 0.00 seconds - 0:49; -level 4: 11 orbits; 10 fixed; index 20 -level 3: 5 orbits; 1 fixed; index 36 -level 2: 3 orbits; 2 fixed; index 7 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[N4fa37bd7 27e16be2 7d20780d] -level 4: 11 orbits; 4 fixed; index 20 -level 3: 5 orbits; 3 fixed; index 36 -level 2: 3 orbits; 1 fixed; index 7 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[N4fa37bd7 27e16be2 7d20780d] - 0 1 2 25 47 21 17 12 30 44 33 6 11 27 3 40 18 29 24 36 42 14 19 23 28 49 16 - 48 7 10 4 22 43 8 32 13 39 38 34 46 5 45 35 41 15 37 31 9 26 20 - 0 : 1 2 3 4 5 6 7; - 1 : 0 8 9 10 11 12 13; - 2 : 0 14 25 26 27 28 29; - 3 : 0 17 23 30 38 46 47; - 4 : 0 16 21 31 40 41 42; - 5 : 0 19 24 32 34 39 44; - 6 : 0 18 20 33 36 43 48; - 7 : 0 15 22 35 37 45 49; - 8 : 1 14 20 21 22 23 24; - 9 : 1 19 27 30 37 41 48; - 10 : 1 16 25 43 44 45 47; - 11 : 1 18 29 32 35 38 42; - 12 : 1 17 26 31 33 39 49; - 13 : 1 15 28 34 36 40 46; - 14 : 2 8 15 16 17 18 19; - 15 : 7 13 14 30 39 42 43; - 16 : 4 10 14 32 46 48 49; - 17 : 3 12 14 35 36 41 44; - 18 : 6 11 14 31 34 37 47; - 19 : 5 9 14 33 38 40 45; - 20 : 6 8 29 30 40 44 49; - 21 : 4 8 25 36 37 38 39; - 22 : 7 8 28 32 33 41 47; - 23 : 3 8 26 34 42 45 48; - 24 : 5 8 27 31 35 43 46; - 25 : 2 10 21 30 33 34 35; - 26 : 2 12 23 32 37 40 43; - 27 : 2 9 24 36 42 47 49; - 28 : 2 13 22 31 38 44 48; - 29 : 2 11 20 39 41 45 46; - 30 : 3 9 15 20 25 31 32; - 31 : 4 12 18 24 28 30 45; - 32 : 5 11 16 22 26 30 36; - 33 : 6 12 19 22 25 42 46; - 34 : 5 13 18 23 25 41 49; - 35 : 7 11 17 24 25 40 48; - 36 : 6 13 17 21 27 32 45; - 37 : 7 9 18 21 26 44 46; - 38 : 3 11 19 21 28 43 49; - 39 : 5 12 15 21 29 47 48; - 40 : 4 13 19 20 26 35 47; - 41 : 4 9 17 22 29 34 43; - 42 : 4 11 15 23 27 33 44; - 43 : 6 10 15 24 26 38 41; - 44 : 5 10 17 20 28 37 42; - 45 : 7 10 19 23 29 31 36; - 46 : 3 13 16 24 29 33 37; - 47 : 3 10 18 22 27 39 40; - 48 : 6 9 16 23 28 35 39; - 49 : 7 12 16 20 27 34 38; -level 4: 20 orbits; 8 fixed; index 4 -level 3: 7 orbits; 4 fixed; index 30 -level 2: 3 orbits; 3 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 4 gens; 15 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds - 0:49; -[fixing partition] -level 3: 20 orbits; 8 fixed; index 4 -level 2: 7 orbits; 4 fixed; index 30 -level 1: 3 orbits; 0 fixed; index 42 -3 orbits; grpsize=5040; 3 gens; 10 nodes; maxlev=4 -canupdates=1; cpu time = 0.00 seconds - 0 1 4:17 19:23 25:28 31:35 37:39 41:49; 2 18 24 29 30 36 40; 3; diff --git a/tools/nauty25r9_unix/nautest1b.ans b/tools/nauty25r9_unix/nautest1b.ans deleted file mode 100644 index 45aa8cb..0000000 --- a/tools/nauty25r9_unix/nautest1b.ans +++ /dev/null @@ -1,150 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=sparse m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -(10 30 40 20)(11 31 41 21)(12 32 42 22)(13 33 43 23)(14 34 44 24)(15 25 45 35) - (16 26 46 36)(17 27 47 37)(18 28 48 38)(19 29 49 39) -level 4: 20 orbits; 15 fixed; index 4 -(2 5)(4 6)(7 9)(10 17)(11 49)(12 34)(13 43)(14 32)(18 38)(19 41)(20 27) - (21 39)(22 44)(24 42)(25 35)(26 36)(28 48)(29 31)(30 37)(40 47) -(2 5 15)(4 6 16)(7 10 19)(8 38 18)(9 41 17)(11 24 29)(12 13 22)(14 47 20) - (21 33 39)(23 37 30)(25 45 35)(26 46 36)(27 40 32)(31 42 49)(34 44 43) -level 3: 7 orbits; 7 fixed; index 30 -(1 4 9 8 7 6)(2 5 3)(10 18 37 20 28 47)(11 46 49 44 33 22)(12 21 36 29 24 13) - (14 23 32 41 16 19)(17 40 48 27 30 38)(25 35)(26 39 34 43 42 31) -level 2: 3 orbits; 1 fixed; index 42 -(0 1)(2 6)(4 5)(10 19)(11 47)(12 22)(14 24)(15 16)(17 41)(18 38)(20 29) - (21 37)(23 33)(25 36)(26 35)(27 31)(28 48)(30 39)(32 42)(34 44)(40 49) - (45 46) -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -cpu time = 0.00 seconds - 0:49 (50); -level 4: 20 orbits; 15 fixed; index 4 -level 3: 7 orbits; 7 fixed; index 30 -level 2: 3 orbits; 1 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[S7c9fbc52 9edc578 5ff84822] -level 4: 20 orbits; 6 fixed; index 4 -level 3: 7 orbits; 2 fixed; index 30 -level 2: 3 orbits; 1 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 6 gens; 18 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[S7c9fbc52 9edc578 5ff84822] - 0 6 35 8 17 30 29 46 1 2 13 9 40 19 48 12 28 21 20 47 44 34 18 16 32 10 23 26 - 41 15 22 36 39 7 3 49 45 33 43 4 37 5 38 25 24 11 31 42 27 14 - 0 : 1 2 3 4 5 6 7; - 1 : 0 13 21 25 30 38 47; - 2 : 0 12 19 24 28 37 44; - 3 : 0 10 20 22 29 35 45; - 4 : 0 11 18 23 27 36 46; - 5 : 0 14 15 16 17 26 49; - 6 : 0 9 31 32 33 34 48; - 7 : 0 8 39 40 41 42 43; - 8 : 7 44 45 46 47 48 49; - 9 : 6 35 36 37 38 43 49; - 10 : 3 26 30 32 36 40 44; - 11 : 4 26 28 33 38 41 45; - 12 : 2 26 27 31 35 39 47; - 13 : 1 26 29 34 37 42 46; - 14 : 5 19 25 34 36 39 45; - 15 : 5 21 23 33 35 42 44; - 16 : 5 20 24 31 38 40 46; - 17 : 5 18 22 32 37 41 47; - 18 : 4 17 25 29 31 43 44; - 19 : 2 14 22 30 33 43 46; - 20 : 3 16 23 28 34 43 47; - 21 : 1 15 24 27 32 43 45; - 22 : 3 17 19 27 38 42 48; - 23 : 4 15 20 30 37 39 48; - 24 : 2 16 21 29 36 41 48; - 25 : 1 14 18 28 35 40 48; - 26 : 5 10 11 12 13 43 48; - 27 : 4 12 21 22 34 40 49; - 28 : 2 11 20 25 32 42 49; - 29 : 3 13 18 24 33 39 49; - 30 : 1 10 19 23 31 41 49; - 31 : 6 12 16 18 30 42 45; - 32 : 6 10 17 21 28 39 46; - 33 : 6 11 15 19 29 40 47; - 34 : 6 13 14 20 27 41 44; - 35 : 3 9 12 15 25 41 46; - 36 : 4 9 10 14 24 42 47; - 37 : 2 9 13 17 23 40 45; - 38 : 1 9 11 16 22 39 44; - 39 : 7 12 14 23 29 32 38; - 40 : 7 10 16 25 27 33 37; - 41 : 7 11 17 24 30 34 35; - 42 : 7 13 15 22 28 31 36; - 43 : 7 9 18 19 20 21 26; - 44 : 2 8 10 15 18 34 38; - 45 : 3 8 11 14 21 31 37; - 46 : 4 8 13 16 19 32 35; - 47 : 1 8 12 17 20 33 36; - 48 : 6 8 22 23 24 25 26; - 49 : 5 8 9 27 28 29 30; -level 4: 20 orbits; 11 fixed; index 4 -level 3: 7 orbits; 2 fixed; index 30 -level 2: 3 orbits; 1 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds - 0:49 (50); -[fixing partition] -level 3: 11 orbits; 10 fixed; index 20 -level 2: 5 orbits; 0 fixed; index 36 -level 1: 3 orbits; 5 fixed; index 7 -3 orbits; grpsize=5040; 5 gens; 13 nodes; maxlev=4 -canupdates=1; cpu time = 0.00 seconds - 0:2 4 6:18 20:23 25 27 28 30:43 45:47 49 (42); 3; 5 19 24 26 29 44 48 (7); diff --git a/tools/nauty25r9_unix/nautest1b.dre b/tools/nauty25r9_unix/nautest1b.dre deleted file mode 100644 index 66216d1..0000000 --- a/tools/nauty25r9_unix/nautest1b.dre +++ /dev/null @@ -1,150 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=sparse m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -(10 30 40 20)(11 31 41 21)(12 32 42 22)(13 33 43 23)(14 34 44 24)(15 25 45 35) - (16 26 46 36)(17 27 47 37)(18 28 48 38)(19 29 49 39) -level 4: 20 orbits; 15 fixed; index 4 -(2 5)(4 6)(7 9)(10 17)(11 49)(12 34)(13 43)(14 32)(18 38)(19 41)(20 27) - (21 39)(22 44)(24 42)(25 35)(26 36)(28 48)(29 31)(30 37)(40 47) -(2 5 15)(4 6 16)(7 10 19)(8 38 18)(9 41 17)(11 24 29)(12 13 22)(14 47 20) - (21 33 39)(23 37 30)(25 45 35)(26 46 36)(27 40 32)(31 42 49)(34 44 43) -level 3: 7 orbits; 7 fixed; index 30 -(1 4 9 8 7 6)(2 5 3)(10 18 37 20 28 47)(11 46 49 44 33 22)(12 21 36 29 24 13) - (14 23 32 41 16 19)(17 40 48 27 30 38)(25 35)(26 39 34 43 42 31) -level 2: 3 orbits; 1 fixed; index 42 -(0 1)(2 6)(4 5)(10 19)(11 47)(12 22)(14 24)(15 16)(17 41)(18 38)(20 29) - (21 37)(23 33)(25 36)(26 35)(27 31)(28 48)(30 39)(32 42)(34 44)(40 49) - (45 46) -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -cpu time = 0.00 seconds - 0:49; -level 4: 20 orbits; 15 fixed; index 4 -level 3: 7 orbits; 7 fixed; index 30 -level 2: 3 orbits; 1 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[S7c9fbc52 9edc578 5ff84822] -level 4: 20 orbits; 1 fixed; index 4 -level 3: 7 orbits; 4 fixed; index 30 -level 2: 3 orbits; 3 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 4 gens; 15 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[S7c9fbc52 9edc578 5ff84822] - 0 1 21 47 17 12 25 2 3 4 5 26 28 6 20 37 38 19 8 32 14 33 45 39 15 11 13 41 - 46 35 27 31 9 23 34 22 42 43 44 48 16 7 10 49 36 18 24 30 29 40 - 0 : 1 2 3 4 5 6 7; - 1 : 0 13 21 25 30 38 47; - 2 : 0 12 19 24 28 37 44; - 3 : 0 10 20 22 29 35 45; - 4 : 0 11 18 23 27 36 46; - 5 : 0 14 15 16 17 26 49; - 6 : 0 9 31 32 33 34 48; - 7 : 0 8 39 40 41 42 43; - 8 : 7 44 45 46 47 48 49; - 9 : 6 35 36 37 38 43 49; - 10 : 3 26 30 32 36 40 44; - 11 : 4 26 28 33 38 41 45; - 12 : 2 26 27 31 35 39 47; - 13 : 1 26 29 34 37 42 46; - 14 : 5 19 25 34 36 39 45; - 15 : 5 21 23 33 35 42 44; - 16 : 5 20 24 31 38 40 46; - 17 : 5 18 22 32 37 41 47; - 18 : 4 17 25 29 31 43 44; - 19 : 2 14 22 30 33 43 46; - 20 : 3 16 23 28 34 43 47; - 21 : 1 15 24 27 32 43 45; - 22 : 3 17 19 27 38 42 48; - 23 : 4 15 20 30 37 39 48; - 24 : 2 16 21 29 36 41 48; - 25 : 1 14 18 28 35 40 48; - 26 : 5 10 11 12 13 43 48; - 27 : 4 12 21 22 34 40 49; - 28 : 2 11 20 25 32 42 49; - 29 : 3 13 18 24 33 39 49; - 30 : 1 10 19 23 31 41 49; - 31 : 6 12 16 18 30 42 45; - 32 : 6 10 17 21 28 39 46; - 33 : 6 11 15 19 29 40 47; - 34 : 6 13 14 20 27 41 44; - 35 : 3 9 12 15 25 41 46; - 36 : 4 9 10 14 24 42 47; - 37 : 2 9 13 17 23 40 45; - 38 : 1 9 11 16 22 39 44; - 39 : 7 12 14 23 29 32 38; - 40 : 7 10 16 25 27 33 37; - 41 : 7 11 17 24 30 34 35; - 42 : 7 13 15 22 28 31 36; - 43 : 7 9 18 19 20 21 26; - 44 : 2 8 10 15 18 34 38; - 45 : 3 8 11 14 21 31 37; - 46 : 4 8 13 16 19 32 35; - 47 : 1 8 12 17 20 33 36; - 48 : 6 8 22 23 24 25 26; - 49 : 5 8 9 27 28 29 30; -level 4: 20 orbits; 18 fixed; index 4 -level 3: 7 orbits; 4 fixed; index 30 -level 2: 3 orbits; 3 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 4 gens; 15 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds - 0:49; -[fixing partition] -level 3: 11 orbits; 4 fixed; index 20 -level 2: 5 orbits; 1 fixed; index 36 -level 1: 3 orbits; 2 fixed; index 7 -3 orbits; grpsize=5040; 4 gens; 11 nodes; maxlev=4 -canupdates=1; cpu time = 0.00 seconds - 0 1 4:17 19:23 25:28 31:35 37:39 41:49; 2 18 24 29 30 36 40; 3; diff --git a/tools/nauty25r9_unix/nautest1c.ans b/tools/nauty25r9_unix/nautest1c.ans deleted file mode 100644 index bed6def..0000000 --- a/tools/nauty25r9_unix/nautest1c.ans +++ /dev/null @@ -1,142 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=Traces m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d-P y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -Gen #1: (0 11 32 10 26 35 6 15 13 30 12 1)(2 17 34 38 22 24 21 23 8 33 29 4)(3 45 28 - 49 27 43 31 41 19 47 18 46)(5 14 36)(7 16 25 39)(9 37 20)(40 48 44) -Gen #2: (0 35 12 7 2)(3 36 46 6 4)(5 39 18 32 47)(8 37 45 31 29)(9 38 44 34 41) - (10 42 17 15 24)(11 19 28 13 40)(14 22 27 25 43)(20 23 21 49 48) -level 1: 3 cells; target cell: 50; 1 orbit; 3 nodes (1 kept); 1 update; -level 2: 7 cells; target cell: 42; 1 orbit; 1 node (1 kept); 1 update; -level 3: 20 cells; target cell: 30; 1 orbit; 1 node (1 kept); 1 update; -level 4: 50 cells; target cell: 4; 1 orbit; 1 node (1 kept); 1 update; -1 orbit; grpsize=252000; 2 gens; 16 nodes (2 peak); maxlev=4 -cpu time = 0.00 seconds - 0:49 (50); -level 1: 3 cells; target cell: 50; 1 orbit; 3 nodes (1 kept); 1 update; -level 2: 7 cells; target cell: 42; 1 orbit; 1 node (1 kept); 1 update; -level 3: 20 cells; target cell: 30; 1 orbit; 1 node (1 kept); 1 update; -level 4: 50 cells; target cell: 4; 1 orbit; 1 node (1 kept); 1 update; -1 orbit; grpsize=252000; 2 gens; 16 nodes (2 peak); maxlev=4 -canupdates=1; cpu time = 0.00 seconds -[T59831010 1d19a3af 43c72725] -level 1: 3 cells; target cell: 50; 1 orbit; 3 nodes (1 kept); 1 update; -level 2: 7 cells; target cell: 42; 1 orbit; 1 node (1 kept); 1 update; -level 3: 20 cells; target cell: 30; 1 orbit; 1 node (1 kept); 1 update; -level 4: 50 cells; target cell: 4; 1 orbit; 1 node (1 kept); 1 update; -1 orbit; grpsize=252000; 2 gens; 16 nodes (2 peak); maxlev=4 -canupdates=1; cpu time = 0.00 seconds -[T59831010 1d19a3af 43c72725] - 19 41 32 6 20 37 11 27 13 48 18 38 21 28 5 4 9 40 17 49 26 42 8 35 25 36 39 - 46 44 3 10 12 7 33 24 22 45 34 43 31 29 1 23 2 47 16 14 30 15 0 - 0 : 9 14 16 23 34 36 43; - 1 : 10 13 18 21 34 35 44; - 2 : 8 12 17 22 34 37 42; - 3 : 11 15 19 24 34 38 45; - 4 : 12 20 23 28 31 38 44; - 5 : 14 20 24 27 32 35 42; - 6 : 15 20 21 26 30 37 43; - 7 : 13 20 22 25 33 36 45; - 8 : 2 19 21 28 32 36 46; - 9 : 0 18 22 27 30 38 46; - 10 : 1 16 24 25 31 37 46; - 11 : 3 17 23 26 33 35 46; - 12 : 2 4 18 24 33 40 43; - 13 : 1 7 19 23 30 40 42; - 14 : 0 5 17 21 31 40 45; - 15 : 3 6 16 22 32 40 44; - 16 : 0 10 15 28 33 39 42; - 17 : 2 11 14 25 30 39 44; - 18 : 1 9 12 26 32 39 45; - 19 : 3 8 13 27 31 39 43; - 20 : 4 5 6 7 34 39 46; - 21 : 1 6 8 14 33 38 47; - 22 : 2 7 9 15 31 35 47; - 23 : 0 4 11 13 32 37 47; - 24 : 3 5 10 12 30 36 47; - 25 : 7 10 17 29 32 38 43; - 26 : 6 11 18 29 31 36 42; - 27 : 5 9 19 29 33 37 44; - 28 : 4 8 16 29 30 35 45; - 29 : 25 26 27 28 34 40 47; - 30 : 6 9 13 17 24 28 48; - 31 : 4 10 14 19 22 26 48; - 32 : 5 8 15 18 23 25 48; - 33 : 7 11 12 16 21 27 48; - 34 : 0 1 2 3 20 29 48; - 35 : 1 5 11 22 28 41 43; - 36 : 0 7 8 24 26 41 44; - 37 : 2 6 10 23 27 41 45; - 38 : 3 4 9 21 25 41 42; - 39 : 16 17 18 19 20 41 47; - 40 : 12 13 14 15 29 41 46; - 41 : 35 36 37 38 39 40 48; - 42 : 2 5 13 16 26 38 49; - 43 : 0 6 12 19 25 35 49; - 44 : 1 4 15 17 27 36 49; - 45 : 3 7 14 18 28 37 49; - 46 : 8 9 10 11 20 40 49; - 47 : 21 22 23 24 29 39 49; - 48 : 30 31 32 33 34 41 49; - 49 : 42 43 44 45 46 47 48; -level 1: 3 cells; target cell: 50; 1 orbit; 3 nodes (1 kept); 1 update; -level 2: 7 cells; target cell: 42; 1 orbit; 1 node (1 kept); 1 update; -level 3: 20 cells; target cell: 30; 1 orbit; 1 node (1 kept); 1 update; -level 4: 50 cells; target cell: 4; 1 orbit; 1 node (1 kept); 1 update; -1 orbit; grpsize=252000; 2 gens; 16 nodes (2 peak); maxlev=4 -canupdates=1; cpu time = 0.00 seconds - 0:49 (50); -level 1: 7 cells; target cell: 42; 3 orbits; 3 nodes (1 kept); 1 update; -level 2: 20 cells; target cell: 30; 3 orbits; 1 node (1 kept); 1 update; -level 3: 50 cells; target cell: 4; 3 orbits; 1 node (1 kept); 1 update; -3 orbits; grpsize=5040; 2 gens; 12 nodes (2 peak); maxlev=3 -canupdates=1; cpu time = 0.00 seconds - 0:2 4:23 25:28 31:35 37 38 40:43 45 47:49 (42); 3; 24 29 30 36 39 44 46 (7); diff --git a/tools/nauty25r9_unix/nautest1c.dre b/tools/nauty25r9_unix/nautest1c.dre deleted file mode 100644 index 9e86919..0000000 --- a/tools/nauty25r9_unix/nautest1c.dre +++ /dev/null @@ -1,143 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=Traces m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d-P y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -(0 16 5 24 20 47 29 46 25 1)(2 33 40 21 36)(3 15 10 9 22 48 41 12 34 26)(4 45 - 42 6 35 17 30 28 23 13)(7 31 43 18 32 27 8 19 49 44)(11 39)(14 38) -(0 45 22 19 18 30 47 2)(1 8 16 9)(3 33 24 4)(5 46 7 15 44 26 13 17)(6 23 42 - 14 36 43 10 34)(11 20 40 12 32 41 27 25)(21 39 48 37 35 49 38 31)(28 29) -group time: 0.0000, 0.0000, 0.0000, group order time: 0.0000; -0 refinements interrupted by trace comparison ------- -CandList length: 1; GarbList length: 1 -1 orbit; grpsize=252000; 2 gens; 16 nodes; maxlev=4; canlist=1 -cpu time = 0.00 seconds - 0:49; -group time: 0.0000, 0.0000, 0.0000, group order time: 0.0000; -0 refinements interrupted by trace comparison ------- -CandList length: 1; GarbList length: 1 -1 orbit; grpsize=252000; 2 gens; 16 nodes; maxlev=4; canlist=1 -canupdates=1; cpu time = 0.00 seconds -[T2248f06c 652ffd7d 4b56e2d9] -group time: 0.0000, 0.0000, 0.0000, group order time: 0.0000; -0 refinements interrupted by trace comparison ------- -CandList length: 1; GarbList length: 1 -1 orbit; grpsize=252000; 3 gens; 17 nodes; maxlev=4; canlist=1 -canupdates=1; cpu time = 0.00 seconds -[T2248f06c 652ffd7d 4b56e2d9] - 0 1 2 22 43 26 46 29 47 32 17 15 37 14 13 4 20 21 41 6 12 3 36 40 45 10 8 38 - 34 49 27 28 35 19 39 9 25 30 5 24 16 11 18 23 48 42 33 7 44 31 - 0 : 43 44 45 46 47 48 49; - 1 : 37 38 39 40 41 42 49; - 2 : 28 29 30 31 36 42 48; - 3 : 14 18 22 27 36 40 46; - 4 : 12 17 19 26 36 38 44; - 5 : 13 16 21 24 36 37 45; - 6 : 11 15 20 25 36 39 43; - 7 : 15 23 26 31 33 40 45; - 8 : 17 23 27 30 34 37 43; - 9 : 18 23 24 29 32 39 44; - 10 : 16 23 25 28 35 38 46; - 11 : 6 22 24 31 34 38 47; - 12 : 4 21 25 30 32 40 47; - 13 : 5 19 27 28 33 39 47; - 14 : 3 20 26 29 35 37 47; - 15 : 6 7 21 27 35 42 44; - 16 : 5 10 22 26 32 42 43; - 17 : 4 8 20 24 33 42 46; - 18 : 3 9 19 25 34 42 45; - 19 : 4 13 18 31 35 41 43; - 20 : 6 14 17 28 32 41 45; - 21 : 5 12 15 29 34 41 46; - 22 : 3 11 16 30 33 41 44; - 23 : 7 8 9 10 36 41 47; - 24 : 5 9 11 17 35 40 48; - 25 : 6 10 12 18 33 37 48; - 26 : 4 7 14 16 34 39 48; - 27 : 3 8 13 15 32 38 48; - 28 : 2 10 13 20 34 40 44; - 29 : 2 9 14 21 33 38 43; - 30 : 2 8 12 22 35 39 45; - 31 : 2 7 11 19 32 37 46; - 32 : 9 12 16 20 27 31 49; - 33 : 7 13 17 22 25 29 49; - 34 : 8 11 18 21 26 28 49; - 35 : 10 14 15 19 24 30 49; - 36 : 2 3 4 5 6 23 49; - 37 : 1 5 8 14 25 31 44; - 38 : 1 4 10 11 27 29 45; - 39 : 1 6 9 13 26 30 46; - 40 : 1 3 7 12 24 28 43; - 41 : 1 19 20 21 22 23 48; - 42 : 1 2 15 16 17 18 47; - 43 : 0 6 8 16 19 29 40; - 44 : 0 4 9 15 22 28 37; - 45 : 0 5 7 18 20 30 38; - 46 : 0 3 10 17 21 31 39; - 47 : 0 11 12 13 14 23 42; - 48 : 0 2 24 25 26 27 41; - 49 : 0 1 32 33 34 35 36; -group time: 0.0000, 0.0000, 0.0000, group order time: 0.0000; -0 refinements interrupted by trace comparison ------- -CandList length: 1; GarbList length: 1 -1 orbit; grpsize=252000; 2 gens; 16 nodes; maxlev=4; canlist=1 -canupdates=1; cpu time = 0.00 seconds - 0:49; -group time: 0.0000, 0.0000, 0.0000, group order time: 0.0000; -0 refinements interrupted by trace comparison ------- -CandList length: 1; GarbList length: 1 -3 orbits; grpsize=5040; 2 gens; 12 nodes; maxlev=3; canlist=1 -canupdates=1; cpu time = 0.00 seconds - 0:2 5:10 12:25 27:32 34:36 38 40:48; 3; 4 11 26 33 37 39 49; diff --git a/tools/nauty25r9_unix/nautest2.c b/tools/nauty25r9_unix/nautest2.c deleted file mode 100644 index c042482..0000000 --- a/tools/nauty25r9_unix/nautest2.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Test for basic nauty and dreadnaut functions (but not nauty itself) */ - -#include "naututil.h" - -long seed; - -int -main(int argc, char *argv[]) -{ - int i,j,bad; - setword w; - int curfile; - FILE *f; -#ifdef CPUDEFS - CPUDEFS -#endif - - printf("NAUTYVERSION=%s NAUTYVERSIONID=%d\n", - NAUTYVERSION,NAUTYVERSIONID); - printf("MAXN=%d MAXM=%d WORDSIZE=%d NAUTY_INFINITY=%d\n", - MAXN,MAXM,WORDSIZE,NAUTY_INFINITY); - - printf("defined:"); -#ifdef __STDC__ - printf(" __STDC__"); -#endif -#ifdef BIGNAUTY - printf(" BIGNAUTY(obsolete!)"); -#endif -#ifdef SYS_UNIX - printf(" SYS_UNIX"); -#endif -#ifdef SYS_CRAY - printf(" SYS_CRAY"); -#endif -#ifdef SETWORD_SHORT - printf(" SETWORD_SHORT"); -#endif -#ifdef SETWORD_INT - printf(" SETWORD_INT"); -#endif -#ifdef SETWORD_LONG - printf(" SETWORD_LONG"); -#endif -#ifdef SETWORD_LONGLONG - printf(" SETWORD_LONGLONG"); -#endif - printf("\n"); - -#ifdef DOPROMPT - curfile = 0; - printf("DOPROMPT(stdin)=%d DOPROMPT(stdout)=%d\n", - DOPROMPT(stdin),DOPROMPT(stdout)); -#else - printf("DOPROMPT is not defined\n"); -#endif - -#ifdef CPUTIME - printf("CPUTIME = %f\n",CPUTIME); -#else - printf("CPUTIME is not defined\n"); -#endif - -#ifdef INITSEED - INITSEED; - printf("INITSEED: seed=%ld\n",seed); -#else - printf("INITSEED is not defined\n"); -#endif - -#ifdef OPENOUT - OPENOUT(f,"nautest.txt",0); - fprintf(f,"test\n"); -#else - printf("OPENOUT is not defined\n"); -#endif - - exit(0); -} diff --git a/tools/nauty25r9_unix/nautest2.dre b/tools/nauty25r9_unix/nautest2.dre deleted file mode 100644 index f708f5c..0000000 --- a/tools/nauty25r9_unix/nautest2.dre +++ /dev/null @@ -1,7 +0,0 @@ -n=12 $=1 g -2;3;4;5;6;7;8;9;10;11;12;1. -v -i & -x -c xz jxz -q diff --git a/tools/nauty25r9_unix/nautest2a.ans b/tools/nauty25r9_unix/nautest2a.ans deleted file mode 100644 index caff68d..0000000 --- a/tools/nauty25r9_unix/nautest2a.ans +++ /dev/null @@ -1,24 +0,0 @@ -1-12:2 - 1 cell; code = 41; cpu time = 0.0000000 seconds -unit partition -(2 12)(3 11)(4 10)(5 9)(6 8) -level 2: 7 orbits; 5 fixed; index 2 -(1 2 3 4 5 6 7 8 9 10 11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 2 gens; 6 nodes; maxlev=3 -cpu time = 0.00 seconds -(2 12)(3 11)(4 10)(5 9)(6 8) -level 2: 7 orbits; 5 fixed; index 2 -(1 2 3 4 5 6 7 8 9 10 11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 2 gens; 6 nodes; maxlev=3 -canupdates=1; cpu time = 0.00 seconds -[N2552efde 394889fc 3c67aaf3] -(2 8)(3 9)(4 5)(6 7)(10 11) -level 2: 7 orbits; 2 fixed; index 2 -(1 2)(3 6)(4 12)(7 11)(9 10) -(1 3)(2 7)(4 6)(5 9)(8 10)(11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 3 gens; 8 nodes; maxlev=3 -canupdates=1; cpu time = 0.00 seconds -[N2552efde 394889fc 3c67aaf3] diff --git a/tools/nauty25r9_unix/nautest2b.ans b/tools/nauty25r9_unix/nautest2b.ans deleted file mode 100644 index 609c372..0000000 --- a/tools/nauty25r9_unix/nautest2b.ans +++ /dev/null @@ -1,24 +0,0 @@ -1-12:2 - 1 cell; code = 3; cpu time = 0.0000000 seconds -unit partition -(2 12)(3 11)(4 10)(5 9)(6 8) -level 2: 7 orbits; 5 fixed; index 2 -(1 2 3 4 5 6 7 8 9 10 11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 2 gens; 6 nodes; maxlev=3 -cpu time = 0.00 seconds -(2 12)(3 11)(4 10)(5 9)(6 8) -level 2: 7 orbits; 5 fixed; index 2 -(1 2 3 4 5 6 7 8 9 10 11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 2 gens; 6 nodes; maxlev=3 -canupdates=1; cpu time = 0.00 seconds -[S694e3b60 2ef1aacb 10268774] -(2 8)(3 9)(4 5)(6 7)(10 11) -level 2: 7 orbits; 2 fixed; index 2 -(1 2)(3 6)(4 12)(7 11)(9 10) -(1 3)(2 7)(4 6)(5 9)(8 10)(11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 3 gens; 8 nodes; maxlev=3 -canupdates=1; cpu time = 0.00 seconds -[S694e3b60 2ef1aacb 10268774] diff --git a/tools/nauty25r9_unix/nautest2c.ans b/tools/nauty25r9_unix/nautest2c.ans deleted file mode 100644 index a42d9e8..0000000 --- a/tools/nauty25r9_unix/nautest2c.ans +++ /dev/null @@ -1,17 +0,0 @@ -1-12:2 - 1 cell; code = 6f62; cpu time = 0.0000000 seconds -unit partition -Gen #1: (1 12 11 10 9 8 7 6 5 4 3 2) -Gen #2: (1 2)(3 12)(4 11)(5 10)(6 9)(7 8) -1 orbit; grpsize=24; 2 gens; 1 node (1 peak); maxlev=0 -cpu time = 0.00 seconds -Gen #1: (1 12 11 10 9 8 7 6 5 4 3 2) -Gen #2: (1 2)(3 12)(4 11)(5 10)(6 9)(7 8) -1 orbit; grpsize=24; 2 gens; 1 node (1 peak); maxlev=0 -canupdates=0; cpu time = 0.00 seconds -[T40ae9d28 336706d1 2832ac44] -Gen #1: (1 11 5 7 2 9 12 3 8 6 4 10) -Gen #2: (1 10)(2 3)(4 11)(5 6)(7 8)(9 12) -1 orbit; grpsize=24; 2 gens; 1 node (1 peak); maxlev=0 -canupdates=0; cpu time = 0.00 seconds -[T40ae9d28 336706d1 2832ac44] diff --git a/tools/nauty25r9_unix/nautesta.ans b/tools/nauty25r9_unix/nautesta.ans deleted file mode 100644 index d123db8..0000000 --- a/tools/nauty25r9_unix/nautesta.ans +++ /dev/null @@ -1,2 +0,0 @@ ->A ./geng -td1D7 n=11 e=6-30 ->Z 92779 graphs generated in 0.18 sec diff --git a/tools/nauty25r9_unix/nautestb.ans b/tools/nauty25r9_unix/nautestb.ans deleted file mode 100644 index 0685980..0000000 --- a/tools/nauty25r9_unix/nautestb.ans +++ /dev/null @@ -1,3391 +0,0 @@ -I??????~w -I?????@~g -I?????@~w -I?????B~O -I?????B~G -I?????B~W -I?????F}O -I?????F}G -I?????F}W -I?????N{O -I????AF]G -I?????N{W -I????GA}W -I???G?@}w -I???G?@~w -I????GB}G -I????GB}_ -I????GB}g -I????GB~_ -I????GB}W -I????GI{o -I????CK|o -I????OE{W -I????OE{w -I????CK{w -I????CK|w -I????CL{O -I????OF{_ -I????CL{_ -I????CL{o -I????GJ|_ -I????OF{G -I????OF{W -I????OF{g -I????_Mwo -I????C[xo -I????_MwW -I????_Mww -I????C[ww -I????C[xw -I???C@FMO -I????FaFO -I????C\wo -I????GZx_ -I???C@FMW -I???G?xoo -I????C{po -I???G?xow -I????C{ow -I????C{pw -I????CB~G -I????CF}O -I????CF~? -I????CF}G -I????CF~G -I????CN{O -I????CN|? -I????CN|G -I???OGB{G -I???OGB|? -I????SE~? -I????SE{G -I???GCH{W -I???OCD|G -I???GCH|G -I????SE~G -I????gIx_ -I????cKwg -I????gIxg -I????cKwW -I????KWww -I????gIxw -I???GCXwO -I???GCXx? -I????cMx? -I????SUz? -I????KYwO -I????KYwo -I????KYxO -I????SUxO -I????KYzO -I???_CLwW -I???GCXxG -I????cMxG -I????SUzG -I???@GYp_ -I????Wqoo -I????Sspo -I????Kwog -I???@GYpg -I???@C[ow -I???@_Mow -I???@GYpw -I????NKM_ -I????SurO -I????NKMg -I???CGN[_ -I???CGN[g -I????SF{_ -I????SF|? -I????SF~? -I????SF{G -I????SF|G -I????KXw_ -I????gJx_ -I???E?FMG -I????oFwg -I????cLwW -I???GCxoo -I????KZx? -I????SVz? -I????KZxO -I???CGZX_ -I???@SUr? -I????]QWg -I???CLcEg -I???@SUrG -I???BGY`_ -I???EGMKg -I????KZwO -I???BGY`w -I???EWiDg -I???_OCww -I???G_Gxw -I?C?G?@zw -I?C?G?@~w -I???G_Hwg -I???OGPx_ -I??G?_Bxg -I?C??GBz_ -I???G_Hxg -I???G_Hz_ -I???G_Hzg -I?C??GB~_ -I???_ODww -I???G_Hxw -I???OGRwO -I???_OFx? -I???G_Jx? -I???OGRxO -I???GORxO -I???_OFz? -I???OGRz? -I???OGRzO -I???OGR~? -I???_OFwW -I???_OFxG -I???_Ocpo -I??O?Cgro -I??G?Covo -I???OGoow -I???_Ocpw -I??G?Copw -I???H?Wrw -I??G?Corw -I??G?Covw -I???OGpoo -I??G@?Rp_ -I??@?GXp_ -I??G?Cppo -I???_Odr_ -I???GOppo -I???H?Xr_ -I???GOpr_ -I???GOpro -I???G_hv_ -I???OGqoW -I??@?_Low -I??G@?Rpg -I???H?Xpg -I???H?Xpw -I???H?Xrg -I??C?GZXO -I???K@dEo -I???OJKKo -I???OGrrO -I???OGrv? -I???_Pc`o -I?C??Dcbo -I??G?Dofo -I???OHo_w -I???_Pc`w -I??G?Do`w -I?C??Dcbw -I??G?Dobw -I??G?Dofw -I??C?GN[O -I??O?Dhb_ -I???K?xPo -I??O?Dkao -I???GPpb_ -I???GPpbo -I???G`hf_ -I???K?xPw -I??O?Dkaw -I?C??FcBo -I??G?FoFo -I?C??FcBw -I??G?FoBw -I??G?FoFw -I??G?CB|G -I??G?CB~G -I??G?CF{O -I???GOF{O -I??G?CF}? -I??G?CF}O -I???GOF}O -I??G?CF{G -I???GOF{W -I??G?CRxO -I?C??CFz? -I??G?CRzO -I??G?CR~? -I??O?CJxG -I?C??CFzG -I??G?CRzG -I??G?CR~G -I??G?CVyO -I???GOVyO -I???G_N}? -I??G?CrrO -I??G?Crv? -I??G?FKKw -I??G?CrvG -I???GON{O -I???GgIwG -I???W_DwG -I??GGCPy? -I??GGCPyG -I??OGCHyG -I??OOCDyG -I???GgI}? -I???GgI}G -I???WGPwW -I??OOGBwW -I???W_DyW -I???GgIwW -I???GcKyW -I???GgI}W -I???h?HpG -I???Gcgr? -I???`OErG -I??@_ODv? -I??@G_HpW -I??@?KWoW -I???HCWpG -I??@?SSpW -I???PCSrG -I??@?KWpW -I???OKorG -I??@?KWrW -I???OKovG -I??@_ODow -I??@G_Hpw -I???GckqO -I???OKwp? -I???GSsqO -I??GGCpqO -I???Ggiu? -I???GSsuO -I???OKsoo -I??G?Kqoo -I???_KkqO -I???_Kkqo -I??CGHHKW -I???HGYqW -I???OKwpG -I???GWqqW -I??GGCpqW -I???GgiuG -I???GgiuW -I???_Lgb? -I???_LgbO -I???OLof? -I???_Tc`o -I??OCGJWg -I???_LgbG -I???_KLwG -I???OLobG -I??A?SsbW -I???OLofG -I???OLo_w -I???_Tc`w -I??G?pbd_ -I??A?SubO -I??G?orp_ -I??G?orpg -I???OKK{G -I???WOD{W -I???OK[wO -I??GGCXwO -I???OK[{? -I???OK[{O -I??G?KYwo -I???OK[wo -I???OK[{o -I???WOTwW -I???OK[{G -I??G?Krq_ -I???ONILO -I???OKtu_ -I???OK{so -I???GcJx? -I???_SFz? -I???_SFxG -I???_SF~? -I??@?SVr? -I???OKrr? -I???OKrv? -I??__OBpG -I??O?Sar? -I@??OGBv? -I??H?_BrG -I??H?CPv? -I@??OGB~? -I??_OCPpG -I??H?CPpW -I??O@CIrG -I??_OCPrG -I@??GCHvG -I??G@CQrG -I??H?CPrW -I??H?CPvG -I?C?GC`vG -I?C?GC`~G -I???W_dqO -I??_?SUu? -I???gOdqO -I??G_CdqO -I???W_du? -I???gOduO -I??_G_Ju? -I??OOCd}? -I??GB?R`_ -I???Ogeoo -I??G?ceoo -I??O?SeqO -I???_Weqo -I??@?gMqO -I??@?WUuO -I??G?ceqO -I???Ogeqo -I??G?ceqo -I??G?ceuO -I???Ogeuo -I??G@CUuO -I??G?ce}O -I??GH?RqW -I??_?SUuG -I??A@OSb_ -I?C?AGaf_ -I??@AGW`g -I??OAOabg -I???IOobg -I???I_gfg -I??A@GW_w -I???P`C`w -I?C?AGabw -I???IOo`w -I???H`Gbw -I?C?AGafw -I???gP`b? -I???oH`bO -I???Q_ef? -I??E@_EAW -I???Oha`o -I??@?hIbO -I???M?JL? -I???Gpa`o -I???OhabO -I???Gpabo -I???H`IbO -I???PHQfO -I???[?pPW -I??@I?X`w -I??A@OUbW -I?C??Lab? -I??O@DKa_ -I?@?OCpf? -I??G_D`bO -I?C?GD`f? -I??GACqf? -I?C?GD`n? -I??G?da`O -I??G?da`o -I?C??LabO -I??_?dIbO -I??_?TQfO -I??G?dabO -I??G?dabo -I??G?dafO -I??G@DQfO -I??G?danO -I??S?GJWW -I?C??LabG -I??O@DKag -I?@?OCpfG -I??G_D`bG -I??I?CpbW -I?C?GD`fG -I??GACqfG -I?C?GD`nG -I??GG_rqO -I@G?GATQo -I???gPdao -I???W`deo -I??G@DUmO -I?C?@FCB_ -I???K`gF_ -I??GE?q@o -I??@?jGBo -I???HbGBo -I???HROFo -I?C?@FCBg -I???Gr_Bg -I???K`gFg -I???SGF[G -I???U?FLG -I?C?CHaBw -I???M?FMG -I???KPoBw -I???M?wBw -I???K`gFw -I???gR`Bo -I???S_VZ? -I???HO]{? -I??@?oNt? -I??G_F`Bo -I???GoN{? -I???K_N]? -I??G@FQNO -I???HO]{G -I???oGLwO -I??G_CLwO -I?CG?CF{? -I???oGL{O -I???GoMwO -I???GoMwo -I??G?cMwo -I???GoM{O -I???GoM{o -I?C?GOFwW -I?CG?CF{G -I???oGdqO -I??o?CJu? -I???Goeoo -I???Goeqo -I???H_MqO -I???HOUuO -I??o?CJuG -I???HOUqW -I???H_MqW -I???H_MuW -I???gOlso -I???HO]{O -I???OKTw_ -I??G?KRw_ -I??O?SFy? -I???_KLy_ -I??G?cFy? -I???OKTy_ -I??G?KRy_ -I??G?cF}? -I???_KL}_ -I??O?KJyG -I??G?KRyG -I??G?KR}G -I???OgFwg -I???_Wbp_ -I??@?KXr? -I???GSpp_ -I???Ocdr? -I???Gchr_ -I???OKpr? -I???_Khv? -I???KGXWg -I???PCTrG -I???Gpa_w -I??_?cJp_ -I?G??KRr? -I@???SFv? -I??G@CRr_ -I?C??Kbv? -I@???SF~? -I???cGLWg -I?C?@CFrG -I??G@CRrG -I??G@CRvG -I??@?WVq_ -I???Gpeao -I??G?deao -I???Gojt? -I???Ogfu_ -I??G@CV}? -I??G?cfuO -I?C?AGbb_ -I???H`Hb_ -I?C?AGbf_ -I??GE?RHg -I???M?XHg -I???J?Xbg -I??CACdEW -I???IOp`w -I???IOrb_ -I???S_fV? -I??_?pJd_ -I??GACrb_ -I???Gphd_ -I???K_xR_ -I??G@DRn? -I??G?dbfO -I???K_xRg -I???K`hF_ -I???GKXw_ -I???GoFy? -I???GKXy_ -I???GKXyG -I???GKXwW -I???GoN{_ -I???GoN{O -I??APGRf? -I??A@SUbG -I???PK[s_ -I??G@SU{? -I???HWYp_ -I???Gwisg -I???PWU{G -I???IWqag -I??OCoiPg -I???GpbbO -I???IgieW -I???aSff? -I?C?Agi`_ -I???`LKe_ -I???Owes? -I??GAcem? -IC???xIHg -I??GAKqag -I???aKkeg -I???_weqG -I??G@LQmG -I??ACWiDg -I??E?SsBW -I??OCoMWg -I??C?KZXO -I?C?EGi@w -I??C?tSJ? -I???G[ws? -I@??CTEN? -I?@?CoiDg -I??GECqBg -I???M_wBg -I???KoM[G -I??GDDQNG -I???_libO -I??G@pRh_ -I???PgMs_ -I???G[qqG -I??G?]QWg -I?C??weog -I???G[wsg -I???Glgag -I???Gph`o -I???N?XBg -I???G\oeW -I???`LYbO -I@??@yIPg -I??W?CByG -I???GKWwW -I???GoEyW -I???GKwqO -I???GKXwG -I???GKwqW -I???GNIMO -I???G[qu? -I???Gser? -I???Olcag -I???HcMuG -I???WKpuG -I???gWWwG -I?COOGBwW -I?C?GcKwW -I?CGGC`s? -I?CGH?BsG -I??GPGQ{? -I??g_OBoW -I?CG@CEsG -I?CH?CDsW -I??@OgK{G -I??GoG`oW -I??G_KgoW -I??GHCWsG -I??_OcKsW -I?CGGC`sG -I?CGGC`sW -I??GHOQ{G -I???XOSoW -I??GGcgow -I??GGcgsW -I??H?gIsw -I??GPGQ{W -I??OOKwwO -I??OGSwoo -I??W?Sqoo -I??GGoqoo -I??GGcwwO -I??OGSwwo -I??OOoewW -I???XHOe? -I?@_?cIm? -I???pHG`G -I??Y?C`aW -I??@I_KeG -I??GI_aeG -I?@_OCPmG -I??OPB@@o -I??OGT_aG -I???gX_eG -I??_aOEaW -I???iGgeG -I??OOL_mG -I???W```O -I?@?GSo_w -I??OGT_aW -I??GGd_aW -I??GGd_eW -I??@GpCaW -I?@?Goaaw -I??@GXOeW -I???X`CeW -I???iOcmW -I@GOO@D_o -I??W?Taco -I??_GTWco -I???gXgkO -I??GGpaco -I??GHDWco -I??GGdgkO -I?CGG_boW -I@GOO@D_w -I??GgP`_w -I???gohpG -I??GgP`cw -I??I?Sscw -I??GHPQkW -I???gWww? -I??GGobs? -I??GGf_MO -I???gWwwG -I??GGoRwG -I??@_oLpG -I???k_LYG -I??GHFOMW -I??GOctw_ -I??GGcXw_ -I??W?cJw_ -I??OGoJwg -I???ogLw_ -I???gWXx_ -I???ogLx_ -I??GHCXs_ -I??GPGR{? -I??GGobp_ -I???XGXs_ -I??GGobt_ -I???XOT{_ -I???Wgxx_ -I?C?GTsgo -I???Whde_ -I?@?Gcjf? -I??_GdMeO -I??_GdJn? -I???WpedO -I???gYqYO -I???gYqYW -I???Wpdd_ -I???WiqYO -I???golw_ -I?GP?`H`_ -I??@OhK{? -I??C_WsQO -I??_GpIco -I?COAKaaG -I??W@DIco -I??@OhKkO -I??C_xGHG -I??AOgkkO -I???qGkkO -I??@OhK{O -I??A@SUb? -I???pHK`o -I??@GpKco -I??@GpKdo -I??@OhKko -I??APG[co -I???iOkko -I??@OhK{o -IC?GO`DGw -I?GP?`H`g -I??@OhK{G -I??CaOcF? -I??@Oj?BG -I??APIOFG -I???[`_@W -I??COh_BW -I??CaOcFW -I??E@GW?w -I??CIOo@w -I??E@OSBw -I??CaOcFw -I??@QG[k? -I??@OgLs? -I??C_odR? -I??A_YcMO -I?CG?Kbs? -I??GGoqoO -I???iQcMO -I?@_s?D?w -I??@_NGBO -I??BGiGAW -I???pJCBo -I??@OjCEo -I??B?KXb? -I???ZASEo -I??@QISEo -I???YacMo -I??@QG[kG -I??OKPaAw -I??GK_RYG -I??GM?RMG -I??@S_TRG -I??GL@QMW -I??GJ?ru? -I??@GoNt? -I??@OgN{? -I??@OjK[o -I?G?OKTs_ -I??W@CJs_ -I???gWh{? -I??@OWT{G -I???oWdp_ -I??@OgLs_ -I???gWhp_ -I??_GSXt_ -I???pGLs_ -I??W?Sbt_ -I??@OgL{_ -I??@GWXsg -I???gWhsg -I???gWh{g -I?@_?cJm? -I?@G@CRb_ -I??A_Wde_ -I??B?gLe_ -I??B?gLm_ -I??@OhI`W -I??@aGLeg -I???iOdm? -I???s_dRG -I??CQKSIG -I??@GpDb_ -I???XHPe_ -I??@GXPe_ -I???gX`e_ -I???gX`m_ -I??@GhIaW -I??AGWqaW -I???iGheg -I???]?hDW -I??_GpJd_ -I???hQqRO -I??@IO\{_ -I??@OhLko -I??B?iIBO -I??E@OTB_ -I??CaOdF_ -I??E@OUBW -I??CGLHKW -I??@QG\k_ -I??@QG]kO -I??@OgN{O -I??@I_Nm? -I???iWwh_ -I???qgkw_ -I@??xAHPW -I??_KdIN? -I?C?aKkgg -I??@Olce? -I?C?_LbbO -I??GPadSo -I??GHpRh_ -I??GHyaSg -I??BCtSJG -I?COF@IH_ -I???g\oi? -I??@ogLw? -I???XhWg_ -I??@ShK[_ -I?OGBaQHg -I??CWpcDW -I??@goLwG -I??@QYS[g -I?COF@IHg -I??BAuKLG -I???g]qYO -I???g[wx? -I???g[wxG -I?@_GcJm? -I??_IcMeG -I???g\ceG -I??_GlIeG -I???g\cmG -I???ZOUkG -I???WtcdG -I???g\oiG -I???o[dsG -I???scdRG -I???YgikW -I???g[wwG -I??C_tcBW -I??@OlK{? -I??@YOTkG -I???{`HHW -I?A?GxQIg -I??@OlceG -I??@OlK{G -I??@QK[kG -I??CaSsBW -I??EdPKL? -I??AhZGkG -I??EdPMLO -I??__OFqO -I??H?_FqO -I??__OFu? -I??__OFuO -I??OP?FuO -I??__OF}? -I??OP?F}O -I?@@?_G`w -I??I@?Obw -I?C?I?_fw -IGC?G?@nw -IGC?G?@~w -I??OQ?``g -I??__P@b_ -I??_a?Hbg -I?@@?_Hf_ -I?C?I?`bg -I??H?`@f_ -I@??I?Hfg -IGC??GBn_ -I?C?I?`fg -I?C?I?`n_ -I?C?I?`ng -IGC??GB~_ -I??OQ?``w -I?C?I?`bw -I?C?I?`fw -I?C_?EIPO -I?C@?HBbO -I?C?H@BbO -I??_a?Jf? -I?@?_Obf? -I@??OHBfO -IG??OGRn? -I??H?`BbO -I??I@?Rf? -I??Ga?bf? -I??H?`BfO -I??G`@BfO -I??I@?Rn? -I@??OHBn? -I??H?`BnO -I@??OHB~? -I??OS?dOw -I?GO?DK_w -I??I@?RbW -I??I@?RfG -I?@?O_rbO -I??OS@XHo -I??__QwPo -I??OP@FmO -I??__PF}? -I?@@?aGBo -I??I@AOFo -IA?G?E_No -I@?G?F?^o -I??__R?@w -I?@@?aGBw -I?GO?F?Bw -I??I@AOFw -I?C?K@_Fw -I?C?K@_Nw -I@?G?F?Nw -I@?G?F?^w -I??_aAHB_ -I?GO?F@B_ -I??__R@Bo -I?@@?aHF_ -I??H?b@Bo -I?G?K@PF_ -I?G?Gb@F_ -I@??GR@Fo -I?O?HAPN_ -I?C?HB@Fo -I?C?K@`N_ -I?C?HB@N_ -I?C?HB@No -I?C?IA`^_ -I??OS@`@w -I??_aAHBg -I?C_?FCAw -I?C?K@`Bw -I?G?K@PFg -I?C?K@`Fg -I?C?K@`Fw -I?C?K@`Ng -I??H?_VqO -I??OQ?fm? -I?G?G_VqO -I?C?K?N[O -I??HA?]kO -I??H?_N{? -I??H?bBNO -I@??OJB^? -I?GO?CBrG -I@?G?CBvG -I@?G?CB~G -I?C@?GFqO -I?G?G_FqO -I@?G?CFu? -I@?G?CFuO -I@??GOFuO -I?C_?CFuO -I?C?H?FuO -I@?G?CF}? -I@?G?CF}O -I?C?H?F}O -I?G?G_FqW -I?C_?CFuG -I?C?H?FuW -I??__ON{O -I??H?_N{O -I?GO?DBbO -I?O_?CRf? -I@?G?DBfO -IG?G?CRn? -I@?G?DBnO -I@?G?DB~? -I?O_?CRfG -I?D??CbfG -IG?G?CRnG -I@?G?DBnG -I@?G?DB~G -I??I?_rbO -I?C?K@XHo -I@?G?EwPo -I@?G?DFmO -I?C?H@FmO -I@?G?DF}? -I?C?K@XHw -I??K?`pBo -I?C?I?fm? -I@?G?FBNO -I@?G?FB^? -I?C?I?fmG -I@?G?CN{G -I@?G?FB^G -I@??GON{O -I??OS?dOo -I??OPHAe? -I??P?TCaW -I??OY?`eG -I??PI?HeG -I?@@G_Hm? -I?@@?WQeW -I?@?_ScmG -I?@@G_H}? -I?@@G_H_w -I??IH?PaW -I?@?X?Paw -I??OY?`eW -I?@@G_H`w -I??P?XBe_ -I?@@?STm? -I??OPHBe_ -I??GaCdm? -I?@?_Wbe_ -I??__XBm_ -I??OPHB}? -I?AAHGICW -I??I?cdb_ -I??I@GRag -I??OPHBf_ -I?GO?LAaG -I?G?GdCe? -I?OOGC`eG -I?G?IGQeG -I?GOI?BeG -IG??GgIm? -IG??OKSmG -I?C?IGaeG -I?C@I?DeG -I?D?GC`m? -I@??OLCmG -I?D?GC`mG -I@@?OCDmG -IG?OOGB}? -I@??OLC}G -I?O?h?DaW -I?O__GBaW -I?G?gH@eW -I?C@GH@eW -I?D@?GBeW -I?C@I?DmW -I?O?HGQaW -I?G?GdCeW -IG??GgImW -I?C?IGaeW -I?C?ICcmW -IG??GgI}W -I??G`EIPO -I??H?hIco -I?@?OckkO -I??OSocOg -I??G`HIco -I??OQCkkO -I@?G`AIPO -I??_OdKkO -I??HG`HkO -I??G`HIko -I?GOGDHkO -I??Gh@H{? -I??_OdK{O -I?CA@CFb? -I?CACCdB_ -I??OPDK`o -I??a?S[co -I??P?TKco -I??__XIco -I??P?TKdo -I?C_?LIco -I??Q?SkkO -I?C?ICkko -I?COS?dOw -I??Gq?dcw -I?O?HGYkW -I?C_AECAg -I?A?`DGF? -I?A@Q?PFG -I?@?_U_N? -I?C@IA@FG -I??HAEON? -I?CAK?`NG -I@?E?OD^? -I?@CP?PBW -I??Ka?`FW -I??Ge?BHG -I?C@?N?BG -I??c?dGBW -I?@?cCgFG -I?CC?L_BW -I?A?_T_FG -I??c?TOFW -I?A?_T_NG -I??K?d_BW -I??GcD_FG -I??K@DOFW -I??HCDONG -I??K?d_FW -I@??ON?NG -I??K?d_NW -I@??ON?^G -I?AB?_H@w -I??Q@EGBw -I??M@?PBw -I??I@EOFw -I?C@ECEBG -I??OY?wgO -I?CB?GFaO -I??S?WbU? -I??HAOUk? -I??_OjAEo -I@??OK[w? -I??OXB@MO -I??I?ecMO -I??__VC]? -I?B@G_H?w -I??H?fCAo -I??H?fCBo -I??I@ESEo -I??S?XaAw -I?COS?FWW -I??OY?wgW -I??__VC@w -I@??gOloo -I??_bAJV? -I?A?W`dEo -I?C?ICmkO -I??K?cdU? -I?C@?KLs? -I??HQ?Tk? -I?O?GecMO -I?C?GKhs? -I??HAC[k? -I?C?IEcMO -I@CG?CFw? -I?C?HFCMO -I@?GGF@MO -I@??ONC]? -I?C?HFC]O -I?C@?NCAo -I?@@?WRe? -I?O@?MSEo -I??H?cLs? -I?C@?NCEo -I?C_?NAEo -I?CA?McMO -I?C?IEcMo -I??PC_JRG -I??H?oRpG -I?CK?_FWW -I??HQ?TkG -I?_?HHQMW -I?C?K_FYG -I?c?G_FWW -I??HAC[kG -I?C?KHaMW -I@CG?CFwG -I?C?HJAMW -I@?GGF@MW -I@??ONC]G -I?C?IIa]W -I?G?GoVw_ -I??_b@Jf? -I?A?gON[O -I?C@?KLs_ -I?GO?KJs_ -I?G?_KLs_ -I??__WJ{? -I?C@?KL{_ -I?GO?SF{_ -I??__WJp_ -I??__SLt_ -I??P?WJsg -I??__WJ|_ -I@??OKKsG -I@?GOGBsW -I@??OKK{G -I@?GOGB{W -I??H?gYoo -I@?G?KYoo -I??__S[wO -I??OX?XwO -I??H?gYwo -I@?GGCXwO -I@?G?KYwo -I@??OK[oo -I??__S[po -I@??OK[wo -I??__S[xo -I??_gPhco -I@?GGDXgo -I?A?_TUJO -I?A?gOlSo -I@??OMiTO -I??P?XJl_ -I?@@?S\{_ -IA??OKkkO -I@?G?LIco -I@??OLKkO -I@?GGDHkO -I@??OLK{? -I@??OLK{O -I@?G?LIko -I@??OLKco -IA??OKkko -I@??OLKko -I@??OLK{o -I?CK?_bPW -I@?H?`K_w -I@?GGPBkW -I@??OLK{G -I??__T[ho -I?@?_S{wo -I??IBApF_ -I?C_GCxoo -I?@?_Slk_ -I??H?c\w_ -I??HAC\k_ -I?C@?ND]_ -I??IBApFg -I@??J?Nu? -I@?G?cNw_ -I??H?cN{? -I@??ONK[o -I??OPGJs_ -I?G?GKXs_ -I??G_Wb{? -I?C?GKh{_ -I??G_Wbp_ -I??G`CLs_ -I??G_Wbt_ -I??OPGYoo -I??G`C[wO -I??_gOXwO -I??OPGYwo -I?C_GCXwO -I??H?c[oo -I??_OgYoo -I??OPC[po -I?C_?KYoo -I?C?H_MwW -I@C?GOFwW -I?CA?Kda_ -I??_OhIco -I??_gPHkO -I??I?ckkO -I??H?dK{? -I??H?dK`o -I??I@C[co -I?O?HOUkW -I??H?dK{G -I??I@C[cw -I??__Xico -I??_OgZx_ -I??__S{po -I??OOKbr? -I?C@?SFpG -I??_GcJu? -I??_GcJv? -I??H?KRqG -I??GHCRr? -I??OGSbu? -I??OHCJv? -I??OHCJuG -I??_GcJ}? -I??_GcJ~? -I@?A?SFf? -I?CA@CFbG -IG??_SFn? -I??H?dBbG -I??I@CRf? -I@?A?SFn? -I??I@CRfG -IG??_SF~? -I?@?_Sff? -I?@?_Sfm? -I?@?Ogfe_ -I??_aCNm? -I@??OL[go -I??__TFn? -I?@?_Sf}? -I?@?_S{go -I??GaC{go -I@??OK{oo -I@??ONB^? -I??H?cN|? -I??IGchl? -I??I@SU{? -I??GaSef? -I?@?Owecg -I?C?Hgip_ -I??_`S[p_ -I??OPp``g -I??OQoewW -I?@@O_LkO -I??PQ?LkO -I??aO_LkO -I?GQ?CLkO -I?@H?_J{? -I??aO_L{O -I?@@?oMcO -I?@@?oMco -I??S?scQG -I??_aOMco -I??PAOMco -I?GOACMco -I?O?`GMkO -I?@?`OMko -I??Q@OMko -I??_aOMkO -I??_aOMko -I?GOACMko -I??_aOM{O -I??_aOM{o -I??_aOMk? -I??R?QDMO -I?B?_Ob]? -I??GbAEAo -I??K?oeSO -I??_QaEEo -I??HAaEEo -I??P?WYoO -I??IC_eMO -I??OOoeoO -I??ORAEEo -I??ORAEMO -I??ORAEMo -I??OU?eMO -I??OT@E]O -I?__a?H@g -I?O_?eAF? -I?`@?_BN? -I?EA@?BFG -I?D?@EAN? -I`??OGB^? -I@?KA?BNG -I@?K?D@^? -I`??OGB~? -I?O__E@BG -I?GS?D@BW -I?O_CCQFG -I?O__E@FG -I?`?_C`NG -I?D?CCaFG -I@?K?D@FW -I?D?CCaNG -I@A?OD@NG -I_C?GC`^G -I@?GCDANG -I@?K?D@NW -I@?K?D@^G -IGC?GE@^G -IGC?GE@~G -I@GCA?MDO -I??XA?Jk? -I?O@GaDMO -I?GACG[K_ -I_?OOCd]? -I@C?I?MgO -I?C@IADMO -I?CACGwH_ -I@A?ODD]? -I??HA_Mk? -I?CAHADMO -I?Ca?EDMO -IG?G?eE]? -I?CAHAD]O -I?E?I?b]? -IG?G?eE}? -I?CA@IEAo -I??a?SXd? -I?O@?iEEo -I??a?S[cO -I?`??ceMO -I?CC?cdR? -I@??QIEEo -I@?GAEEEo -IG?G?eEMO -I?O?`IEMo -IA?GCCeMO -IC?G@DE]O -I??K?WqSO -I?C@AIEEo -I?C_AEEEo -I?D?@EEMO -I?CA@IEMo -I?D?CCeMO -I?CC@HE]O -I@?GAEEMO -I?C@AIEMo -I?C_AEEMo -I@?GAEE]O -I?C@AIE]o -I@?GCDE]O -I@?GAEE}O -I?OOc?bBW -I@GCA?MDW -IA?Gc?bBW -IC?I?_bBW -I@C?I?MgW -I@?GK@BMW -I?CACGwHg -I@A?ODD]G -I??XA@JkO -Io?OO@XHo -I?C?J?Nk_ -I??PAQM[o -I??_cPM{O -I?CB?GLkO -I??J?_LkO -I?G?I_Mco -I??HA_Mco -I??G_waoG -I?C?J?Mco -I??Gb?Mco -I??HA_MkO -I?C?J?Mko -I??Gb?Mko -I??Ha?Lcw -IA?@OGLkO -I@?AOGLkO -I@?I?CLkO -I@??IOM{? -I@?AOGL{O -I??K?waSG -I@??IOMco -I@?GACMco -IG??GoMkO -IA??HOMko -I@??IOMkO -I@??IOMko -I@?GACMko -I@??IOM{O -I@??IOM{o -I@O?GOFkW -I@??IOM{G -I??_Q_]wo -I?C@I?\wo -I?CB?IDMO -I?F??Cb]? -I?CB?IDAo -I?G?IaEEo -I??H?c[oO -I?O?K_eMO -I?C?JAEEo -I?C?JAEMo -I?C?M?eMO -I?C?L@E]O -I@??IOMkG -I?F??Cb]G -I?_?J?UMW -I?C?L@EMW -I?C?M?eMW -I?C?M?e]W -I@?GIBBMO -IoC?G@XHo -I??HA_Nk_ -IG??gQL[o -I@??KPM{O -IoC?G@XHw -I?@?OKpe_ -I??P?LHe_ -I??OOL`e_ -I??OR?Fm? -I??_OLPm_ -I?O?_od`g -I??OOp``g -I??OOL`mG -I?GA?KTe_ -I?G?_LDe_ -I?GO?LBe_ -IG?G?cFm? -I?O@?KTm_ -I?CA?Kde_ -I?D??Kbe_ -I@@??SFm? -I?CA?Kdm_ -I@?GACFm? -I?C@?LDm_ -I?C_?LBm_ -I@?GACF}? -I?CA?Kd}_ -I?GA?oT`g -I??Q?oh`g -IG?G?KRmG -I?O?Gop`g -I?D??KbmG -I@?G?LBmG -I@?G?LB}G -I??PCOJPg -I??HC_RRG -I?C@AGFeg -I?@?`ONk_ -I?C@I?NkO -I?C@AGNk_ -I?GOACNk_ -I??OR?fu? -I??_aON{_ -I??_aON{O -I??_QEPF_ -I?@@?UPN? -I??I@EPF_ -I??K?d`N? -I??G`F@F_ -I??HAEPN? -I??HAEPN_ -I??H?f@N? -I??I?e`^? -I?CAC_dBg -IA??K_hBg -I?C?K``Bg -I??HCDPNG -I??Ge?bBg -I??HE?RFG -I?C?M?h@w -I@??QG]go -I??OU?f]? -IQ???SFN? -I@?GCDBF_ -IOC??LBN? -I`???SF^? -I@?GCDBN_ -IGC??MB^? -I`???SF~? -I?@@C_XBg -I??IC_pBg -IG?GCCRNG -I@?GCDBNG -I@?GCDB^G -I?@@O_\go -I?A?b?jV? -I??Ha?\go -I??KB?rV? -I??Gb?]go -I@?GAC]go -I??GbAbV? -I?C@AIF]_ -I??HE@RN? -I@?GCDF}? -I@?GAEF]O -I?G?GLPe_ -I?C?GL`e_ -I?C?J?Fm? -I?C?GL`m_ -I?CA?od`g -I?C?Gp``g -I?C?GL`mG -I?C?M?FMG -I?C?GL`eW -I?@?P_Zh_ -I@??QGNk_ -I@?GACNk_ -I?C?J?fu? -I@??ION{_ -I@??ION{O -I??HA_]go -I?C?M?f]? -I??cGTPN? -I?@@GUP]? -I??aGiIEW -I??OqCkgW -I_?GB_iD_ -I??_aYIL_ -I??PF?MU? -I?C@CLK[_ -I??_aYI{? -I??Pq?LgW -I??_WTPl? -I?C?G\al? -I??_WTPlG -I?A?`TKDg -I??_aS[h_ -I??P?\Ww_ -I?G?Ic[h_ -I??__\Ww_ -I@??wH`aW -I??__xIhg -I?GO?\acg -I??Q?skwg -I??OSXaDg -I?C?ISekG -I??_`oMog -I?H?BaEEg -I??S?SfUO -I?CA@GNkO -I??G`Xbd_ -I??HF?[S_ -I@??SLK[_ -I_??HWY{? -I@??KXIL_ -I?@?PoUgg -I?`?B_UIg -I??Gb_Mgg -I@?GAcMgg -IA?GF?qBg -I??IBaQJG -I@??QYE[g -I@??KXI{G -I??OOlbj? -I??QAUeMO -I??a?]R]? -IQ??EWeEg -I??GWd`l? -I?A?WSsSW -I??HAc[h_ -I??_OtSw_ -I??K?dbFO -I??I@_\go -I??G_weog -I?C?G\ogg -I@?G@pB`g -I??OO|cgg -I??G`xa`g -I??QCTeMO -I??OV@WH_ -I?CADGM[_ -I?@?PKYkG -I??HQCTkG -I??HOcTwG -I?GO@cMog -I?O_BaQBg -I??__^G[g -I??K?cN[O -I?C?N@WH_ -I@??UGM[_ -I?@?oSdkG -I??H_cLwG -I@?G@cMog -IG?GBaQBg -I@??G^G[g -I@?GECqBg -I?C?N@WHg -I??I?likO -I??IAcmkO -I??G_WaoW -I?Cg?CBsG -I??H?cKsW -I??H?cK{G -I??GX?Pow -I?G?I_EeG -I?D_?CBmG -I?O?H_EaW -I?G?GLOeW -I?C?GL_eW -I?C?J?EmW -I??K?d`B_ -I??G_Xaco -I?C?GLgkO -I??H?WRog -I??G_Xbd_ -I@??GMiUO -I?C?GN_MO -I?C@?oFpG -I?C?GoFwG -I?C?GN_MW -I??G_clw_ -I?C?GoEwW -I??G_cLw_ -I??OOgJx_ -I?C?GoFwW -I??G_Wqoo -I?C?GKwwO -I?C?GoewW -I??OWSpx? -I?C?G[qx? -I??HOcTr? -I?C@OKTr? -I??HOcTxG -I?C?G[qwG -I??aGSXl? -I?C?HLI{? -I?C?HLIf? -I?C?IKil? -I?A?gXQIW -I??OQKilG -I??__\gcg -I?C?ISe{G -I?@?OsedG -I?C?HNA]? -I?C?IMaN? -I?@?dCkEg -I?C@ECeFG -I??HAc[gg -I?C?MCe]G -I?@?Ossgg -I??K_d`BW -I??G`ckog -I??Gackgg -I@??WN@]G -I??OPgjp_ -I??OgShx? -I??POSTr? -I??OWT`dG -I??G_[qwG -I??OgShxG -I??_`WYp_ -I?C?Hp``g -I?C?IoewW -I??[?c`QG -I@GOOH@_g -IA?GHCWgW -I?COPHAw? -I?CGI_awG -I?C@IOSwG -I?D@?WQ_W -I@?I?KW_w -I@CGGD@gW -I@CI?CDgW -I??K_o`PG -I@?G_LG_w -I@C?GTCgW -I@CAGODgW -I?@G`CWgW -I?D@_GHgw -I?C@GXOwW -I??qO_HwW -I?COPHA_W -I??Y?So_w -I?CGHDOgW -I?CH_H@gw -I?COPHAwW -I?COPHA`w -I??OpHHw_ -I?CGICph_ -I??GiOph_ -I??OX`Hx_ -I@CGACEgG -I@CACGKGg -I?o?HGQ[? -I?o?Gcc[G -I??qO_H_W -I??i_Q@KW -I??K_`HHO -I??J?iGKW -I?o?HGQ[W -I?CGG_boO -I?CC_GdQO -I??aO_LcO -I?CGI_agG -I??GqI_KW -I??PGOXoO -I?CH?GRoO -I??HOgooG -I??HOj?KW -I??IOi_KW -I?CI?M_KW -I??HOj?[G -I??HK`G[W -I??W@FAAo -I?GU?CH@W -I?CGHF?Cw -I??ka?HCw -I?Oc_ODCw -I?CGIE_Kw -I??G@eIP_ -I??GjAGCw -I??KaOcCw -I??HIaGKw -I??HOj?Kw -I??M@OS[w -I?COGSbp? -I?C?G[qp? -I?G?GtSg_ -I?C@_KLw? -I?CP?SFw? -I?C?XbCHo -I?COV?cOg -I??GhROWo -I??g_VOWo -I?CGH_bog -I??QJ?heG -I?GAJ?TeG -I?E?gOFWW -I??GiahX_ -I@G?GgIoW -I@GOOGBoW -I?GP_ODow -I?C@_Wdp_ -I?C?XGpp_ -I?COPGbp_ -I??_hOXp_ -I??_hOXr_ -I?COPDc`o -I??X?Tooo -I?GOOLooo -I??HOho_o -I?C?X`c`o -I??HOhooo -I?GOOLoow -I@??WjHX_ -I??_hOZr? -I?COHCJx? -I?CH?cFr? -I??X?cJx? -I??W_SbxG -I?CG`CFz? -I??GpIiTO -I??W`DJj? -I?CGICrz? -I??WQCrj? -I??gQER\? -I?OOOMb\? -I??GqGrj? -I??HOgrr? -I?GOONB^? -I??_ojHX_ -IK`@??LCo -I??I`IWwO -I?_GGcsOo -I@C?GTc_o -I?@__Sw_o -I??oSDWWo -I?C?KLSI_ -I@??G\Wg_ -I@??wH`aO -Ih???wI@g -I??SHPWWo -I?C?G\og_ -I?COOLagO -I?CAHQSHo -I??HV?SSG -I??PIQWWo -I?GGIaQWo -I??HU?T[? -I??PKPWWo -I??QHQWwO -I??PIQWwo -I???hLKe? -I?_GGLQKO -I?_WGCpOo -I?@H?eWBo -I?@?Osek? -I?@?XaWHo -I?O?XaSHo -I?@?PoUg_ -I??IK_wHo -I?A?X`WWo -I??k?dWXo -I?H?GoRgg -I?O?j?deG -IH?GI?RaW -IK`@??LCw -I??KaOswW -I?D_?Sqoo -I?OH?cs`o -I?@__Swoo -I?G?XhO_g -I?CAHOs`o -I??O]@`M? -I??_Y_woo -I?CGJ?qoo -I?C?Z?s`o -I?G?Y_spo -I?@__Sw`o -I?@H?cwbo -I?@__Swpo -I?@GPCRk? -I?A__TWWo -I??__\gc_ -I??P?[wo_ -I??O\@WWo -I?C?ZASHo -I???g[wp? -I?@__UWHo -I??O]?wHo -I?A__TWXo -Io??OLYLO -I@?AOiLX_ -I?@COgxx_ -I??O\@wpo -I?OGHCRl? -I?CGICbkG -I??Y@CJ{? -I??g_TBf? -I?@?WoecW -I??gaCJl? -I?@GPCRl? -I?OGHCRn? -I??WQCblG -I?@GPCR|? -I?B@?cJ]? -I?Aa?cJN? -I?@@K_MEW -I?B@?cJN? -I?B@?cJ^? -IH??OM[oo -I?AAHO][O -I??_iOxb_ -I?@H?eJ\? -I?B?_S{Wo -I?AH?dJ|? -I?C@QGTh_ -I??HOhPw_ -I??gOdPw_ -I??PGpHb_ -I?@?hOXh_ -IA?OGShh_ -I@?@OhI`W -I??QGohwg -I??IGophg -I@C?QGFgg -I??HK`H[_ -I??O[KoQG -I??W_Sbp? -I??IGq`L_ -I??OqGigW -I?A?XOUSW -I??HU?TKg -I??OoSdoW -I?_APGT[_ -I??_kPH{? -I??KQScDG -I??GqGdc_ -I?AAHOXL_ -I?@?l?hEg -I??O]@`MG -I?O@GrSgo -I?AAHO\[_ -I?A@OhXw_ -I?C?Z?Th_ -I??OZ?Xh_ -I?C?gXagW -I??OWp``g -I??OWp`hg -I?D_OEpPo -I?G?qGVj? -I??aOiXX_ -I?@?hOZxO -I??OZ?xpo -I?B?_Sl[_ -I??_iONm? -I?@__UwPo -I??_iON{O -I?B?_Sf]? -I?CI_M`Z? -I?C?iWeiG -I??HGlge? -I?B__SbU? -I??OZagp_ -I?C?]GtY_ -I??OZahp_ -I??wPCRq? -I?C?Xj_Pg -I??x?cJqG -I??OXr_Pg -IB?GOGBgW -I??OWo`oG -I??OZ?WgW -I??Z?_H_w -I?CR?ODgw -I?COOKbwG -I??GoiiXO -I??OXp``g -I??OXL`eG -I??HGlgeG -I??OXLWwW -I??HGkwqG -I??aGoNkO -I??HGnG[G -IG??gWWwG -IGCOOGBgW -IGC?GcKgW -IGCOOGBwW -IGC?GcKwW -I?GP_XA_W -I?GQ?Wqoo -I@G?gXA_W -I?D?PCs`o -IG?GM?RM? -I??Y@Oqoo -I?O_Gcwoo -I?H?Ocspo -IA?g?Sqoo -IA?GHOqoo -I??gq?o_W -I?`G@CQ[? -I?Oc?_RBO -I?_@GhG[G -I?G[A?o?w -I?_IH?P[? -I?AIP?P{? -I?C_AEEAo -I?@@_OX`O -I?CK?GbSO -I??i?qAKW -I??QKOoIG -I@C?IGIgG -I?`G?ca[G -I??a_OLcO -I?H?k?HCw -I?@K?oaKW -I??i?eGKW -I?_@GpC[W -I??OZ?WgG -I?GY?E@KW -I?_H?dC[G -I?@H?eG[G -I?@H?eG{G -I?GOCDBB_ -I?CK_H@GW -I??gs@@KW -I??WACba_ -I?_IH?P@w -I?GGk@@Cw -I?CKI?`Cw -I?CHK@@Kw -I@GOOH@__ -I@GQC?H@g -I_?GPGQ[? -I@_GGD@[? -I@_?ICK[G -I@?GSHA{? -I?d@?_D?w -IA?k?CHKW -I_?@OgK[G -I@@K?OBKW -I@_GACE[G -I@_AGOD[W -I_?@OgK{G -I?CaO_D_W -I?Ca?CLcO -I?CQCGgGg -IA?K?KgKW -I@CGI?BgG -IAGGGE@KW -I_?GHOQ[G -I@C?IOEgG -I@?IOI@KW -I@?I?MGKW -I@_GGD@[G -I@_?GTC[W -I@?GIQA[G -I@?IK?H[W -IGC?GUC{G -I?CS?DHHO -IC?I?KgCw -IA?GHEGKW -IA?GHQAKw -I_??XOS[W -I@?GSHAKW -I@?GIEGKw -I@?GKDG[W -I@?K?LG[w -I_??XOS{W -I@@?OSTg_ -IWEA??LCo -I?_GgK`SG -I?G_GtO_g -I_?GR_cCg -I?@G`ORg_ -I?O__USHo -I?CHF?ESG -I?@H?qQWo -I@@G?UQWo -Ig??P_FF? -I?I?GdWWo -I?GAGiWwO -I?C?XHEcO -I@C?G\__g -I@G?GMQQO -I?GOOLo_o -I?Ca?USHo -I?GOGUaSO -I??aV?WDG -I??XAQQWo -I@?GIQQWo -I?@PE?JM? -I?GOKDWWo -I?O?hIWwO -I@C?Y?FgW -I?D@F?W@g -IWEA??X@o -IG?OOMWwO -I?H?OcFk? -I?D?`OFg_ -I_?GJ?RM? -IO?OGTWWo -I??Hf?KSG -IG?OGUWWo -IG?W?UQWo -IG?GGqQWo -IG?GGeWwO -IG?OGUWwo -IAG?J?FeG -IHC?IAH@w -IWEA??X@w -IG?OOqEwW -I?O__cLw_ -IA?H?WRh_ -I?H?_cLh_ -I?D@?KXw_ -I?H?_cLx_ -I?H?_Wq_o -I?@G`Oq_o -I?O__Ss`o -I?@G`Oqoo -I@@G?Sqoo -I?C_QCs`o -I??gaOqoo -I@?GIOqoo -I@?I`?Low -I?_GGceSO -I?@P?SXg_ -I@?OOL`a_ -I??gaQQWo -I?D?M?bM? -I?CAHIWwO -I??Ka_kwW -IA?_OiJX_ -I?D?GSbl? -I?O_GcJl? -I?C_ICJl? -I?GQ?SF{? -I?O_OKR|? -I?H?OKRkG -I?GOOLo_w -I?GOOLB{G -I?O__SFf? -I?C_OLBf? -I?O_GcJn? -I?Ca?SFdG -I?GQ?SFn? -I?GOOLB~? -IA?__SLh_ -I?@P?SXw_ -I?L??cFw_ -I??i?oRb_ -I?@@_oLh_ -IA?g?SRh_ -I?@H?cXh_ -I@@?GSXh_ -I?OH?cTj_ -I@@G?SRh_ -I?@@_WXw_ -I?@@_WXx_ -I?GA_WTx_ -I?@@OoThg -I?C_QCTh_ -I?CH?LPw_ -I?C_OLPw_ -I@?GgP`_w -I??X?dHb_ -I?@?pOTh_ -IA?GHORh_ -I??_qOTh_ -I@?GICXh_ -I?CH?dDj_ -I??_oXPw_ -I?@?pOTx_ -I@??YOTh_ -I?G?gXPx_ -IGC?_KLw_ -IGCO?SFw_ -I?H?P_R`g -I?CAJ?deG -IG?OGoJwg -I?@@`OX`_ -IG??gWXh_ -IG??ogLh_ -IG??ogLw_ -IG??gWXx_ -IG??ogLx_ -I??Y@Orr_ -I??gcDH[_ -I?C@IQD{? -IG?GM?RMG -I??I@SUb? -I??GpHBd? -I??Gx@DcO -I??Y@QBL_ -I?_@GhH[_ -I??GYCpd? -I??SPHHF_ -I@??WhHg_ -I?@H?qBL_ -I@??WlGgG -I??XAQBL_ -I??_sHH[_ -I?@H?qB\_ -I?C?gXagO -I?GAGqDL_ -I?CCHHH[_ -I?C@KHH[_ -I?CAHIH{_ -I?AAOoeDW -I?OOPEF\? -IA?_GUwoo -I??XQ?rbO -I_?_GdJN? -I??XAOrb_ -I??PQOubO -I?O_GeJ\? -I?C_QEF^? -I@A?GT[Wo -I?Q?HC][O -I?`?HCZ|? -I?GOQCVj? -I??aOqTX_ -I?GA_iLX_ -I_??gYqYO -I@?GKDH[_ -I_??XOT{? -I@?HA_M_w -I?D?M?bMG -I?@?pOTg_ -IG?GGqBL_ -I_??XOT[_ -I@?@_]GPG -I@?GIQBL_ -I@??[HH[_ -I@?GIQB\_ -I_??XOT{_ -I@?GPaDOw -I?C@IG]iO -I??XAaJX_ -I?G?iaLX_ -I_??WiqYO -IG?OON`e_ -IG??WiXX_ -IG??oiLX_ -IG??WqTX_ -I_??Wj`M_ -IG??WiXx_ -I??oOTPw_ -I??POhHb_ -I?@G_chh_ -I??PQOTh_ -I??H_XPw_ -I??PQOTx_ -I@@?OekPo -I?D?HCZz? -I??HaaLX_ -I?CI`EDZ? -I??[Acix? -I??gapab_ -I??JAosb_ -I?Ca_MHZ? -I?E?Icix? -I@?GcTEN? -I@?IOeDXG -I?O_Guoog -I??GhXWg_ -I_?BSgcEG -IG?Q?UFMO -IoC?Agi@w -I?GOKTXX_ -I??XCdJx? -I@`CA?XH_ -I?@PS?XwO -I@G?W`D_o -I_??j_KIG -I??kA_YWo -Ig?G@oQ@g -I?AHA_YWo -I?I?I_YWo -I??XE?J[? -I?@HC_YWo -I?OoCCYWo -I??caO[wO -I?@HC_Ywo -I???sLSJ? -I?@?`WYg_ -I?AAP_[Ho -I?_AH_[Ho -IC?APG[Wo -I?AA`O[Xo -I@??xAHPO -I??caO[Ho -I?GAK_[Ho -I??cQ_[Wo -I??cQ_[Xo -I?GCI_[Xo -I@?CQG[wo -I?AA`O[xo -IAH@C?RBW -I?@GP_Rg_ -Ig??H_XB_ -I?A_Q_YWo -I??p?SXo_ -I@?GM@BM? -I??oU?YWo -I???Wssp? -I??H@c[o_ -I??PU?[Ho -I@?@gPDaO -I??QT?[Ho -I?CAL?[Ho -I??LA_[Wo -I??LA_[Xo -I?D?L?bEg -I@?GM@BMG -Ig??gOlco -I?B?`ON[_ -I@A?ION[_ -I_?@OjKKo -I??caO{po -I?cA?Kd[_ -I??cb@HFG -I??OOsep? -I??OSLSI_ -I?@c?SXL_ -I?C@`GLo_ -I?B@?SXL_ -I@?@OhI`O -I?AP?THL_ -I?GA_YDL_ -I?CE@GL[_ -I??TAOL\_ -I?C@aGLgg -I??c_XH[g -I?AA`OUBW -I?@HC_J[_ -I??abAHFG -I??GcLSI_ -I??Y?U`L_ -I@?@OhEaO -I?@G_U`L_ -I?H?GUPL_ -I??X?V@L_ -I?CAL?L[_ -I??g_V@\_ -I?@?Wopgg -I??OqOdgg -I??Gh_hog -I?C@GZ@[g -I@_?OLD[_ -I@@GCCJ[_ -IG??kOL{? -I?AAb?hFG -I??MB?pFG -I??IbA`FG -IG?OGUH{G -I?@?hOXg_ -IO@?GSXL_ -I?@@_WXg_ -IG?W?UBL_ -I_?@OgL[_ -I@?@_XDa_ -I@@G?UBL_ -I@?CQGL[_ -I@A?GTHL_ -I@?CIOL\_ -I@?ASGL[_ -I@@G?UB\_ -I@?CQGL{_ -I?@@d?LEg -I?@@OoTgg -IC?@GXH[g -I??Ha_Lgg -I@?CGXH[g -I@?AGYH[g -I@?AGYH{g -I?AA`PMLO -I@A?IO]Wo -I_??hQqRO -I??iC_Zx_ -I@?CQG\wo -I??OWSpp? -I??OgShp? -I??I_Y`L_ -I?C?qGdgg -I?B?p@LKo -I?B@O_\Wo -I@?CQGN{O -I?K?gN@Z? -I??gpGRoW -I??GphKg_ -I?B@GcXY? -I_?BdOSBG -I??GXqcS_ -I?B_oc`QG -I??JCgwR_ -I?B@GdHM? -I??aOyop_ -Io??wHPIW -I?@?k\gKg -I_?DbOUBW -I??Gx`Di? -I?A@iGXY? -I?B__dIIO -I?O?lGwR_ -I_?@YoSgG -I??i?uop_ -I?OOHUop_ -I?C_oN@Z? -I??gWcpq? -IG?I?cNkO -I??GhdKi? -I?B__TQIO -I_?@v?SBG -I??J?yop_ -I?F?J?bEg -I_??hZGKg -I?G?mHYJO -I??gePRh_ -IG?GKorp_ -I?GOMDXJ_ -I??_u`Lh_ -I??j?cXr? -I@?QHOJf? -I??r?SXr? -I?D?PiaPg -I@?GWf@XG -I?AOPTQx? -I?KA_MDZ? -IG?__^Gcg -I?@OPeIXG -I?AOQcixG -IB??G]gog -I?@AlGhEg -I?OGGma]? -I@B?HCJUG -I??GyGpiG -I??GxGpqG -I??GiWqiG -I?OGgM`[G -I?OGGma]G -I??hGcXqG -I??i?cNkO -I??pOgJu? -I??_WvOXG -I??OXT`dG -I??OYgiwW -I?CGHLQy? -I?DOHCJm? -I?C@iGLiG -I@??WnGXG -I??OpTKhG -I??I`qcPg -I?CBAeDJG -I?GBAcTbG -I??HOgrpO -I??gqIB{? -I?AAHS[[G -I?@?XeWx? -I?O?XjOgg -I@?AOmKXG -I?A?YcwxG -I??WXDPy? -I??_iWYiG -I?@?XeWXG -I??J?kwr? -I??XOf@XG -I?B?hChUG -I??QHO\go -I?A@OlWwG -I??PQeKXG -I??M@TSKW -I?GBCcTRG -I??GpHbdO -I?O@Gkwr? -I?CB@iKPg -I?QGHCR]? -I?`GHCR{? -I??a[OXLG -I?Q?HSU[G -I??gy?paW -I_??g\cMG -I?B?j?hEg -I?O@GzOgg -I??q?S\go -I?_BAcTJG -IG??g]Wx? -IG??g]WXG -IG??WuSXG -I_??g^_MG -IG??g]WxG -I?CWICby? -I?CWICbiG -I??oOvAXG -I??JAePJG -I??MBCpFG -I?AA`S[x? -I?B?aSkKg -I?AA`TKLG -I??GYgqy? -I??_xIPQW -I??GXadSo -I??OiUgXG -I?hO?]QWg -I??MPucTG -I?D@?oE_W -I?CAHGWwG -I??K_WoOW -I@?I?cK_w -I?D?HCWgW -I@C?IOEgW -I??H_XOwW -I@?CQGoBG -I?C@GGXoO -I??I_Y_KW -I??GCdaB_ -I??Kb?KCw -I??G\@OKw -I?C?Gsep? -I??H_cLw? -I?C?Gtcg_ -I??H_ZOWo -IG?GJ?ReG -I?C?qGdw_ -I??QOihX_ -I?SoON__w -I?S@G]opG -IgC?H?RBO -I??gu@@KG -I@GO?SFo_ -I@?G@KYo_ -I@GU?ODOw -I@?M@GWOw -IAH@C?RBO -IGD@C?LCo -II?HG_H_w -IGD?gO``w -IoCOOGaOO -IK_PA?H@g -I@Q?_CdAo -I`?GJ?BEG -IgCOP?D?w -I`GOQ?D?w -IoCQ@?EAW -I@@K`?HoW -I?L??ce_o -Ih?G?oB@g -I_?_j?HEG -IGCGM?BKG -IIGOS?B@W -IqGOO?B@W -I@?IOi_oW -I@@G?SRg_ -I?HO?Sq_o -I@D??SFg_ -I@O__UC@w -Ig??p_DBG -I@AJ?_HOw -I@EB?GHOw -I?WOM?BKG -IH?G_MGOw -IH?GoI@Ow -I@CAGY_oW -I@@GOe_ow -I?GO?\ac_ -I?K_GDP_o -I?K_aIA@w -I?OHM?PKG -I@?J?iGOw -I@CJ?I@Ow -I@GOQIAoW -I?GPaQCow -IAJ@GCHCW -IGF?GCJKO -I?N@GD@CW -IK?@Wj?AW -I?F__ChOo -I?N?GCRWO -I@?gaFGBo -Io??yOcCW -I?D?Xb_`o -I@@GaChb_ -I?AAhXGKG -I?@H_p`b_ -I?@PQOpf_ -I@OP?UFV? -I@E?GTbv? -I@?Y?Sbr? -I@GQ?SFr? -I?GY@CRr? -I?GW`DK_w -I?GX?dBrG -I@@?iOhb_ -I@?XAPBb_ -IAC_GVBj? -I?CQPJEiO -I@?GjAHp_ -IAC_ONDi_ -I?CQPIipO -I@D?GUbV? -I?KAIadF_ -ICCGICrZ? -I?S__NabO -I?L?_Mbr? -I`@@WGHCW -IAI?GLaEO -IQ?@gZ?AW -I?J?GSR[? -I?F?GSqWO -IIA?GKiEO -I@AGaDgBo -Io?@WhGCW -I?OGl@o`o -I?SD?hc`o -I?CLA`c`o -I?BAHcgEG -I?o_GcpR_ -I?oo@CRR_ -Io??ohIHO -I?SD?gdp_ -I_@@OoeDW -Io??gXQIW -I?B@HdGEG -I?hO?cbR_ -I?@SP_hF_ -I?_J@_TR_ -I?@SP_hp_ -I?@c`OXr_ -Io??gpIHO -I?S@Gi`p_ -I@?HOhK_o -I@?QOY`p_ -I?GI`aDPg -I?B@GtGKG -I?gOI_bR_ -I?KAHIPF_ -I?_Ha_dR_ -I?B@gOXWO -I?WOKCpR_ -I??qOq`p_ -I??ZC_hR_ -I??i_q`r_ -ICD?HCZZ? -I?gQ?LqbO -I?hO?dbb_ -I?hO_Ddao -I?GGhb@Pg -Io??okgPG -I?SOHE`p_ -I@?HOhI`O -I?CQPI`p_ -Ic??WgiWW -I?P@OiacW -I?F@O`DGw -I?_IH_VyO -I@C_G^AUG -I??KYosw? -I?@PUQoF_ -I??MTHSM? -I?@PO~GkG -I?Q`_cLu? -ICCQHHIIW -I?o__]cSg -IOGOG^AUG -I@E_ICJu? -ICCPPHIPW -IA?geQBHg -I?hO@eIPg -I??guAdSo -I?ASZ@TIo -I?KR?NG`W -I??XUAdSo -I@?I@SUr? -I?GQ@KYr? -I?GSA?MKO -I?Oc?_FMO -I?__a?FMO -I_?__OF]? -I_?OP?F]O -I@?KA?[Go -I?EA@?FMO -I?CcA?FMO -IGA?_OF]? -I?EA@?F]O -IG?OS?F]O -I_?__OF}? -IG?OS?F}O -I?D@C?X@w -IO?OQ@FMO -IG?OS@FMO -I_?__QF]? -I?O_c?N{O -ICO_?CBFG -I@`??CBNG -I`?G?CB^G -I`?G?CB~G -ICO_?CFMO -ICO?H?FMO -I@OC?GFMO -I@_?I?FMO -I`?G?CF]? -I`?G?CF]O -I_C?H?F]O -IGE??CF]O -IGC?K?F]O -I`?G?CF}? -I`?G?CF}O -IGC?K?F}O -I@?KA?MKW -I@_?I?FMW -IGE??CF]G -IGC?K?F]W -I?E@A@FMO -IOC?I@FMO -IGC?K@FMO -I`?G?EF]? -I_?__ON{O -IGC?K?N{O -I`??GON{O -I`?G?FBNG -I?`@?gJ[_ -I?CcAGJ[_ -I?H?cGJ[_ -I?OcB?RFG -I?`?_Kh[_ -I?GQCCL{? -I?Cc?LH{_ -I?COPHB`_ -I?_P?TDL_ -I?GQ?UDL_ -I?GPa?L_w -I?H?_UDL_ -I?GQCCL[_ -I?OP?UD\_ -I@?GgP`_o -I_?_b_KAg -I?_PAGYWo -I@?KAGYWo -IG?OU?FM? -I?OPCGYWo -I_GSA?MKO -I?O_cC[wO -I?OSH?XwO -I@?ICGYwo -IAGCGGXwO -I?_W_CdOo -I?H?Ocs_o -I?`?_chH_ -I?O_cC[Ho -I?D?P_e_o -I?IA?c[Ho -I_?OR?FM? -I?Oc?c[Wo -I?Q@?gYWo -I?Oc?c[Xo -IAI??KYWo -I?D@c?LGw -I_C@?KL[_ -I_GO?SF[_ -IGCC?KL[_ -I@`??KJ[_ -I@_A?KL[_ -I_?__WJ{? -IGCC?KL{_ -I_GO?SF{_ -I?_G_dEHO -IA?c?SLL_ -I_?__WJ\_ -I@AA?WJL_ -IG?S?SL\_ -I@@C?WJ[g -I_?__WJ|_ -I_?P?XJL_ -IGA?_TUJO -IQ??ONILO -I?Oc?gZx_ -IQ?GOGBKW -I`??OKK[G -I`??WOD[W -I`??OKK{G -I`??WOD{W -I?D?HOq_o -I_?_b?JF? -IO?I?gYWo -I`?G?KYWo -I_?Gb_KGg -IG?K?gYWo -IK?G?KYWo -IGA?_S[wO -IG?O[?XwO -IG?K?gYwo -IG_?gGXwO -I`?G?KYwo -I?Q@?csAo -IGA?_S[Ho -I`??OK[Wo -I_?__S[Xo -IK??OK[Wo -IGA?_S[Xo -I`??OK[wo -IGA?_S[xo -I_G?W`dco -ICO_GCxoo -I_?__T[Ho -IGA?_S{Po -IQ??OK{oo -I?O_k?xpo -I_C?GKh[_ -I@@?SGJ[_ -IG?KB?RFG -I@_?GLH[_ -IGC?KOF{? -IGC?GMH{_ -I?_GgccOW -IG?G_YBL_ -I@?Ha?L_w -I@?I?YBL_ -I@?ICCL[_ -I@?I?YB\_ -I@?I@_L_w -I?Q@?ciDO -I@@@?SX`_ -I@A?QGYWo -I?E@AGYWo -I`?KA?[Go -I?`@G_XwO -I?D@K?XwO -I?_WgD@GW -I?C?sLCHG -I@?GxA@OW -I?GSAC[Ho -I?CcAC[Ho -I?D@K?bEW -IGD@C?X@w -I?EA@CFFG -I@AAGO\Wo -I?EAH?\Wo -I@@?GSXg_ -I_?Gb?bF? -IO?OQGYWo -IGC?M?FM? -IG?OSGYWo -I`?KA?MKO -IG?GcC[wO -IG?KG_XwO -IG?OSGYwo -IGCCGGXwO -I?D?HCw_o -I?Q?`ccAg -IG?OSC[Ho -I_C?J?FM? -IG?K?c[Wo -IGA?OgYWo -IG?K?c[Xo -IGE??KYWo -I@?KB@BFG -IH?KA?RBW -IGC?M?FMG -IWC?I?X@w -I`?KA?MKW -IGC?K_MwW -IG?K__LwW -I_G?Gpeco -IGA?Wb`Eo -I?Q@G_N[O -I@AAGON[O -I`??ONILO -IGA?OgZx_ -I`??gOloo -I_C_GCxoo -I_?__TFN? -I`??OK{oo -I_?__S{po -IGA?GcJN? -I?O_GeBN? -I?H?SCRLG -IO@?GcJ]? -I_?_GcJ^? -I?E?ICbN? -I?D?KCbMG -IGA?GcJ]? -IGA?GcJ^? -I@?HAC[_w -I?C_KDBN? -I@@?GUB]? -I?DC?Kb^? -I?D?KCb]G -IGA?GcJ}? -IGA?GcJ~? -I?`@?cN|? -I_?H?cN|? -I?Gg_dH`_ -I?O__mIZ? -I@@?O]Qx? -IA?_oUDZ? -I@O?KSUx? -I?Ggi?RaW -I?GQ[?hDW -I?GX?dH`_ -I?GgohA_W -I?D?hEHZ? -I?E@?\Qx? -IA?GpEDZ? -I@?KASUx? -I?GPIC[aW -I?E?iCkWW -IGA?yGHKG -I?OS@ckp_ -I@AA?wip_ -ICO?Hckp_ -I_?__xIHg -I?Q@?tSHg -IGC?gMHZ? -IGC?G]Qx? -IG?G_mIZ? -IG?OWUPx? -I@?JAEPBW -IG?OOuEXG -I@O?G]oog -IG?OScMxG -I?F@Gd@IG -I?D@@iIPg -I?GSACN[O -I?H?cWVY_ -I_?G`Xbd_ -I_@@GghE_ -I`??HWYp_ -I_?OPckp_ -IG?OTFKDo -I?GXOhA_W -I?D?pEDZ? -I@?I?]Qx? -I_@_gcHIG -IGA@iGHEG -I?Oc?ssp_ -IGA?_\gcg -I_GO?^AKg -IAB@GcHIG -I?F@I?bEW -IK??wIHWW -I?D@?CX`O -I?CaCGWGg -IA?K@CKKW -I_?H?cK[G -I@?I?YAKW -I@`G?CB[G -I@_?IOE[W -I_?H?cK{G -IC?I@CKCw -I@?G[@@Kw -I?D@@CX`_ -I?C_Gt__g -IA?H?YQWo -IAG?GMWwO -I?GQ?iJX_ -IQ??GNIMO -IGC?GoEgW -IGC?GoEwW -IG?OOgJh_ -IG?G_cLw_ -IG?OOgJx_ -IGC?GoFwW -I?D@?oe_o -I@?H_XA_W -IG?G_Wqoo -I@?I?Wqoo -I?D@?KXg_ -IG?G_YQWo -IGC?GMWwO -IGC?J?FeG -IGC?GqEwW -IG?OOiJX_ -I`??GNIMO -I?O_gchr? -I@O?Gkir? -IG?G_kir? -IGC?gKhr? -I?O_`SUrG -I?GQEWiDg -I?O`GcXr? -IGC?oKdr? -I?GQ@SUr? -I@@?SSUx? -IAG?oMDZ? -I_@?gWqIW -I@@?OmIXG -I?O__^_cg -I@@?OmIxG -IG?OgUHx? -IGC?oMDZ? -I_?_WTPLG -IG?OgUHXG -IG?G_^_cg -IG?OgUHxG -I@?MACpBW -I@BAHCHEG -I?FAHC`EG -I@?KACN[O -I_?OPgjp_ -I_@@GgiEO -I_?OPgip_ -I`??G[wog -I`?G?^AKg -IK?CQKWHG -I@OOHEHp_ -I?R@gO`CW -I?O_haHp_ -IAAAXG`EG -I@?GhXG_g -I@?YCChR_ -I??gx`@aG -I?K_i?FaW -I?O_kOpR_ -I`?BGiGAW -IK_AHGICW -I@OCOhc`o -IGB?GcJM? -Ig?_wGPAW -Ik??wODGW -I?QH?do`o -ICCI@Dc`o -IAA@GKXY? -IGQ?gKHKG -I`@?GKiEO -I_D_GCJKO -I@?[ADgBo -I_@_GcJM? -I?`H?doBo -IC?Y@DgBo -IGQ?gQ`Cw -I?_aOiXX_ -I_?_iOxb_ -ICO?hQdR_ -I?__iPpb_ -I_OH?esBo -I?`H?foBo -I?E?iOeWW -I?EI@CRx? -I@CGKDBx? -I?GW`DK_o -I?GcQGYDW -I?EGaCbZ? -ICCGICbZ? -I?_Y@ERZ? -I?CpQIBu? -ICKR?GFQO -IC?I`Lgf? -I?EA`LgbG -ICO?hUcRG -ICSr?CH@W -I_?WRIQGw -I?Cq?U`p_ -I@?GxAHPO -I@O?kGhR_ -IAIAHGPAg -I??OpTKh? -I?E@IHQIO -I_@_x?PAW -I?_PGp`R_ -I?J@gP@CW -I?O_k_hR_ -IK?CQKSIG -ICO?gY`Wg -I@?Y?U`p_ -I?OPGq`p_ -I?Ci?e`r_ -I@OOGU`p_ -IOGI?cTR_ -I?SS@Cdp_ -I??PPhIb? -I?EAHHQIO -IAGH?cFb? -IGAAGkgEG -I?_Y@CpR_ -IK?CQSSHG -I?`@OhacW -I?DCP_dp_ -IG_W?cbR_ -I@OD?gLp_ -I?CqCOJHg -IGAA`OUBW -IGAAGghE_ -IQ?E@GXB_ -I?Os?chp_ -IA__HORp_ -IAG@GKXb? -IG_?godR_ -IOCI?cdR_ -I@Oc?cLp_ -IA?k@CXr_ -I??_hpKa_ -I?`@_odR_ -I@IA?WRp_ -I?MA?gbr_ -I`G?I?TAo -I`G?GgIoW -I`GOOGBoW -I_GP_ODOw -I_GP_ODow -IK?B?iIBO -I`??pGLp_ -I_C?X_dp_ -I_COPGbp_ -I_@@GkgEG -I_?_hOXR_ -I_?OX_hp_ -I_?_hOXr_ -Iq?@OoD@g -IoCA`OE@W -IcG@IGHCg -I_GTA_EAW -IGQ@gGHCW -IAIBGGPAW -I_D_gC`AW -IoCAWG`CW -I?MA?dc`o -ICOf?_H@W -IAI?_Tc`o -I_CH?dc`o -I?EBGHPIO -I`?AXOS_W -I?EA`Pc`o -I_C@Ohc`o -IAI?_Tc@w -ICOP?MiRO -I?`P?dkao -I_?_gphb_ -I_@_gSHKG -IAG@OKTb? -IGI?iGHCg -I??OxPHh? -IAB@HCHEG -I?R@GcPIG -I?EAHL_EG -I?_X@DPR_ -I@?I_Y`p_ -I?J@GcPQG -I?OT?ghp_ -IA?H@KYb? -I`@@GgIAW -IA_H@CTR_ -I??OxHHi? -I?gQ?gbR_ -IBAAHGIAW -I?_a_odR_ -I@@CP_Lp_ -I?Sc?cdp_ -I?DD?odr_ -I`??WgioW -Ik?@OgI@W -IcG?X_EOW -IIA@GKHEG -I`@@GKHEG -I@QAGKHKG -I?R?GciKO -Ig?_gKHEG -I`?@iIGAW -Ik??WoEGW -I?CcQ`c`o -IoC?wH@GW -ICC_QDc`o -IGCCOhc`o -IGa?gP`Cw -IGE?gOFWW -I?QP?dkao -I_GQ?KybO -I?HS?dhb_ -I_G?grDJ_ -ICD?HCJZ? -IGC_GVO_w -I?M?ICRx? -I?COQgi`_ -I?U@?cFN? -I_@?XOUKW -I?M?_LBZ? -I@@GOeBN? -I@@GOeBXG -I?S_cCFZ? -I?F?QCsGw -I?c__LBZ? -IA_G_KbZ? -ICD?HCJ^? -I@AI?SRx? -I@@GOeBxG -I?S__MBz? -IA___KJZ? -ICO__SFZ? -IAI?GcJx? -ICO__SFz? -I?CWCdIH_ -I@`?_SFN? -ICO__SF^? -ICO__SF~? -IGCOON__w -IGCGKCRx? -I_?OWp`Hg -I_CG`CFZ? -IG?W_UBXG -IGCGcCFZ? -IG?[?cJx? -IG?W_UBxG -IGCG_MBz? -IC?IPGyTO -I_C_OMiTO -I@EA?Sfv? -ICC_Y?xPo -ICCI@GrR_ -I_GOONBN? -I@`?OKrv? -IECHY?`@W -IKCOOLIHO -I?HL?dPf? -IGGOOnCag -ICSq?CFIO -I?`HOhQgO -ICKQBGEAg -IECgQGBGg -IKCOOTEHO -IH?KQGRN? -I?HT?dHf? -I?S`aEDFG -IGCOPNCag -I@?G]QcS_ -I??X[PPw? -I@?KIMWY? -I?D@MQoF_ -IOCa_NGBW -I?GQQMYhO -I@Gg_dH`_ -IAI_GSR]? -I@Q_GcJu? -I@O_G]QUG -IOC_G^AUG -IECGX@BHO -IGDOHCJm? -I?C[ASe{? -I@H??cJ`_ -Ih?GO_D?w -I_?OZ?`EG -I`__a?H@g -IOCR?ODOw -I@IAG_HoW -I@GO?]AOg -I?K_k@@@w -I?OoPCRr? -IAGG_Kbf? -IGCH?fC@w -I@O_GcJr? -IGCG`CFr? -I@D@?KJv? -I@D@?UFV? -I_COOMiXO -I@@?qGhb_ -I?D@Gp`b_ -I?NAGC`CW -I?aIPGqSO -ICKQ@GFQ_ -IECHQGDGg -I?Ot?dHf? -I??YPUSw? -I@?KINGM? -I_?_hrGBg -I?DH@eMsO -I@?G]AdSo -I?DQPGbm? -I?C[ASew? -I?OgpGR{? -ICCY@CFY? -IGGOQMSag -I?GY@fAbG -I?CoQN_ag -I?_IJOUKW -I?@QPegFG -I?__iON[O -I?C_]?tQo -I?O_WmoUG -I?_IHXQKW -I?O_g]oqG -I?OGl@p`o -I?C_lPHPg -I?__iOxPo -I_?_g^GMG -I@?KqgkwG -I?OkSHPK_ -I?Sc@dEf? -I?DcAcif? -I@`KACXH_ -ICCQPKgPG -IK?GaSef? -ICO_aKif? -I@?IKXWg_ -I??XUQcS_ -ICCYACiHO -I?`HKOqSO -I?`HOhacO -IE?H@LIf? -IEG@GLHf? -ICD@@WYPg -I?Sc@eERG -I?GUAMYJO -I`H?gWQAW -IC@I`Chf? -IC@a_Shf? -I`C@GLHf? -I_O_cKkEg -ICCY@DIHO -I?aIPHQKO -IEG@OLDf? -I_?gu?dCw -I@aIACXH_ -ICCQQKcIG -ICO_aSef? -I??guQcS_ -I@?IKZAM? -I?d@Agrb_ -I?D`SCTu? -I?CQPNCiG -I?C_mDHJG -I?OpSCTu? -I?`@OmWXG -I?O_onGhG -I?`?hOZXO -I@OgGeBu? -IOCoICJu? -I_?pOgJu? -I_GOG^AMG -I?C_qMcqG -I@OoGUBu? -I_G?gvCJG -I_?WPjAGw -IAA`_SLu? -I?GQ]?hDW -I@KGKdEwG -I@OGM?BKG -Ih??GoH@g -I_C_J?BEG -IqGO?CK?w -I@?I_Y_oW -I@@G?Sq_o -I@`@_CH@W -IH?GcCKOw -I@?G?]aS_ -I@?JC_KOw -I@?HcPCow -IGD@C?X@o -II?GX?P_w -I?CY@FIhO -I`?@Wj?AW -I@R?GCJKO -I?F_oD@GW -I?D@Gr_`o -I?C[ACbx? -I?D@Gr`b_ -Ig?_gWQAW -I??gpGRq? -I?o_`GRR_ -I`_?X_EOW -I?F?HCYWO -IGE?GLaEO -I`?@gZ?AW -I?DD?pc`o -I?J?_dhb_ -I?E@IH`E_ -I?CY@E`p_ -I?E?pH`og -I?F@HD@EG -IgC?H?X@o -I@?G@cMo_ -I@?M@_KOw -I@?JIqobG -IQ`@_GH?w -I`Q@G_H?w -I`?L?hG?w -IoD@?WQ@w -I@A@WpHp? -IB?KSHIHO -IK?KQSSHG -I@?IGzAi? -IGIOaEKAw -IG?qSaHF_ -I@?IWj@i? -IB?KASeb? -I@?IOzCg_ -I@AAGwiq? -I`?I@SUb? -IGAPSPPF_ -I??g}P_cG -I@@?yQHh? -I?HK`b@F_ -IKCY?CdAo -IGCQPII`W -IGLC?cFf? -IKOG_Kbf? -IKO__SFf? -ICCQPScPG -I@`ICC[Go -ICOgaCbf? -ICOhAC[Cw -I?DH[APWO -IEGH?LBf? -IPOG_LBN? -I@GSIQiTO -I?DKb?xh_ -I?HcQ_Zl? -I@GQSGN{? -I@GQQIhd_ -Ii?HOsSHG -I?Ka_mDqG -I?CpShIoW -I@GO[hIw? -I?EJQ_phG -I@KaKIQQO -IG`HOgR{? -I@C[QIaWW -I?dS@pEGw -I@GG[hQw? -I`Gg_dH`_ -I@KGIeEw? -I?GTbPSb? -I@GTQhG`G -IgEP?KJ]? -I?`ad_kEg -I?GTbHWb? -IAISQCd]? -I@GTcXGPG -I@GTShGPG -I``@_OD?w -I`?LA_K?w -I@@AWqHh? -IB?K@MIR? -I@?[IDHi? -IpD?GUbV? -IsP@OkWHG -I`?M@_K?w -I@AISHBM? -I_OgpGR{? -I?dPcPDGw -I@KcIIQQO -It?IQGiDO -IsPH@CYDO -IqKaK?X@w ->A ./geng -cfd1D9 n=10 e=9-16 ->Z 3389 graphs generated in 0.01 sec diff --git a/tools/nauty25r9_unix/nautestc.ans b/tools/nauty25r9_unix/nautestc.ans deleted file mode 100644 index db37078..0000000 --- a/tools/nauty25r9_unix/nautestc.ans +++ /dev/null @@ -1,2 +0,0 @@ - 100 graphs : n=114; e=171; mindeg=3; maxdeg=3; regular - 100 graphs altogether; cpu=0.000 sec diff --git a/tools/nauty25r9_unix/nauthread1.c b/tools/nauty25r9_unix/nauthread1.c deleted file mode 100644 index c15d2e7..0000000 --- a/tools/nauty25r9_unix/nauthread1.c +++ /dev/null @@ -1,134 +0,0 @@ -/* nauthread1.c - - This program tests dense nauty running in multiple threads. - It must be linked with nauty as configured with - --enable-tls and will only run on systems which support - thread-local storage. -*/ - -#include -#include "nauty.h" -/* MAXN=0 is defined by nauty.h, which implies dynamic allocation */ - -#define THREADS 1000 /* Total number of threads to run */ -#define ATONCE 20 /* Number of threads to run at once */ -#define GRAPHSIZE 200 /* Least graph size to use */ - -typedef struct -{ - int n; - boolean writeautoms; -} params; /* Used to pass parameters to the thread */ - -static void* -runit(void * threadarg) /* Main routine for one thread */ -{ - DYNALLSTAT(graph,g,g_sz); - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - set *gv; - - int n,m,v; - - n = ((params*)threadarg)->n; - - /* Default options are set by the DEFAULTOPTIONS_GRAPH macro above. - Here we change those options that we want to be different from the - defaults. writeautoms=TRUE causes automorphisms to be written. */ - - options.writeautoms = ((params*)threadarg)->writeautoms; - - m = SETWORDSNEEDED(n); - - /* The following optional call verifies that we are linking - to compatible versions of the nauty routines. */ - - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC2(graph,g,g_sz,m,n,"malloc"); - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - - /* Now we will make a polygon of n vertices */ - - EMPTYGRAPH(g,m,n); - for (v = 0; v < n; ++v) ADDONEEDGE(g,v,(v+1)%n,m); - - if (options.writeautoms) - printf("Generators for Aut(C[%d]):\n",n); - densenauty(g,lab,ptn,orbits,&options,&stats,m,n,NULL); - - if (options.writeautoms) - { - printf("order = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - } - if (stats.numorbits != 1 || stats.grpsize1 != 2*n) - fprintf(stderr,">E group error\n"); - - /* If we are using multiple threads, we need to free all the dynamic - memory we have allocated. We don't have to do this after each - call to nauty, just once before the thread finishes. */ - - DYNFREE(g,g_sz); - DYNFREE(lab,lab_sz); - DYNFREE(ptn,ptn_sz); - DYNFREE(orbits,orbits_sz); - nauty_freedyn(); - nautil_freedyn(); - naugraph_freedyn(); /* Use nausparse_freedyn() instead if - sparse format is being used. */ - - return NULL; -} - - -int -main(int argc, char *argv[]) -{ - int n,ret; - pthread_t thread[THREADS]; - params par[THREADS]; - int started,finished; - -#if !HAVE_TLS - fprintf(stderr,">E This program needs to be linked with a version\n"); - fprintf(stderr," of nauty successfully configured with --enable-tls.\n"); - exit(1); -#endif - - for (started = finished = 0; finished < THREADS; ) - { - if (started == THREADS || started-finished == ATONCE) - { - if ((ret = pthread_join(thread[finished],NULL)) != 0) - { - fprintf(stderr,">E Thread joining failed, code=%d\n",ret); - exit(1); - } - ++finished; - } - else - { - /* We vary the graph size a bit as it tests the - thread independence better. */ - par[started].n = GRAPHSIZE + (started % 17); - par[started].writeautoms = FALSE; - - if ((ret = pthread_create(&thread[started],NULL, - runit,&par[started])) != 0) - { - fprintf(stderr,">E Thread creation failed, code=%d\n",ret); - exit(1); - } - ++started; - } - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/nauthread2.c b/tools/nauty25r9_unix/nauthread2.c deleted file mode 100644 index 89b74b3..0000000 --- a/tools/nauty25r9_unix/nauthread2.c +++ /dev/null @@ -1,140 +0,0 @@ -/* nauthread2.c - - This program tests sparse nauty running in multiple threads. - It must be linked with nauty as configured with - --enable-tls and will only run on systems which support - thread-local storage. -*/ - -#include -#include "nauty.h" -#include "nausparse.h" -/* MAXN=0 is defined by nauty.h, which implies dynamic allocation */ - -#define THREADS 1000 /* Total number of threads to run */ -#define ATONCE 20 /* Number of threads to run at once */ -#define GRAPHSIZE 500 /* Least graph size to use */ - -typedef struct -{ - int n; - boolean writeautoms; -} params; /* Used to pass parameters to the thread */ - -static void* -runit(void * threadarg) /* Main routine for one thread */ -{ - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DEFAULTOPTIONS_SPARSEGRAPH(options); - statsblk stats; - sparsegraph sg; /* Declare sparse graph structure */ - - int n,m,i; - - n = ((params*)threadarg)->n; - options.writeautoms = ((params*)threadarg)->writeautoms; - - /* Initialise sparse graph structure. */ - - SG_INIT(sg); - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - - /* SG_ALLOC makes sure that the v,d,e fields of a sparse graph - structure point to arrays that are large enough. This only - works if the structure has been initialised. */ - - SG_ALLOC(sg,n,2*n,"malloc"); - - sg.nv = n; /* Number of vertices */ - sg.nde = 2*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg.v[i] = 2*i; - sg.d[i] = 2; - sg.e[2*i] = (i+n-1)%n; /* edge i->i-1 */ - sg.e[2*i+1] = (i+n+1)%n; /* edge i->i+1 */ - } - - if (options.writeautoms) - printf("Generators for Aut(C[%d]):\n",n); - sparsenauty(&sg,lab,ptn,orbits,&options,&stats,NULL); - - if (options.writeautoms) - { - printf("Automorphism group size = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - } - if (stats.numorbits != 1 || stats.grpsize1 != 2*n) - fprintf(stderr,">E group error\n"); - - /* If we are using multiple threads, we need to free all the dynamic - memory we have allocated. We don't have to do this after each - call to nauty, just once before the thread finishes. */ - - SG_FREE(sg); - DYNFREE(lab,lab_sz); - DYNFREE(ptn,ptn_sz); - DYNFREE(orbits,orbits_sz); - nauty_freedyn(); - nautil_freedyn(); - nausparse_freedyn(); /* Use naugraph_freedyn() instead if - dense format is being used. */ - - return NULL; -} - - -int -main(int argc, char *argv[]) -{ - int n,ret; - pthread_t thread[THREADS]; - params par[THREADS]; - int started,finished; - -#if !HAVE_TLS - fprintf(stderr,">E This program needs to be linked with a version\n"); - fprintf(stderr," of nauty successfully configured using --enable-tls.\n"); - exit(1); -#endif - - for (started = finished = 0; finished < THREADS; ) - { - if (started == THREADS || started-finished == ATONCE) - { - if ((ret = pthread_join(thread[finished],NULL)) != 0) - { - fprintf(stderr,">E Thread joining failed, code=%d\n",ret); - exit(1); - } - ++finished; - } - else - { - /* We vary the graph size a bit as it tests the - thread independence better. */ - par[started].n = GRAPHSIZE + (started % 17); - par[started].writeautoms = FALSE; - - if ((ret = pthread_create(&thread[started],NULL, - runit,&par[started])) != 0) - { - fprintf(stderr,">E Thread creation failed, code=%d\n",ret); - exit(1); - } - ++started; - } - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/nautil.c b/tools/nauty25r9_unix/nautil.c deleted file mode 100644 index eca6b56..0000000 --- a/tools/nauty25r9_unix/nautil.c +++ /dev/null @@ -1,743 +0,0 @@ -/***************************************************************************** -* * -* Auxiliary source file for version 2.5 of nauty. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : renamed to version 1.3 (no changes to this file) * -* 28-Sep-88 : renamed to version 1.4 (no changes to this file) * -* 23-Mar-89 : changes for version 1.5 : * -* - added procedure refine1() * -* - changed type of ptn from int* to nvector* in fmptn() * -* - declared level in breakout() * -* - changed char[] to char* in a few places * -* - minor rearrangement in bestcell() * -* 31-Mar-89 : - added procedure doref() * -* 5-Apr-89 : - changed MAKEEMPTY uses to EMPTYSET * -* 12-Apr-89 : - changed writeperm() and fmperm() to not use MARKing * -* 5-May-89 : - redefined MASH to gain about 8% efficiency * -* 18-Oct-90 : changes for version 1.6 : * -* - improved line breaking in writeperm() * -* 10-Nov-90 : - added dummy routine nautil_null() * -* 27-Aug-92 : changes for version 1.7 : * -* - made linelength <= 0 mean no line breaks * -* 5-Jun-93 : renamed to version 1.7+ (no changes to this file) * -* 18-Aug-93 : renamed to version 1.8 (no changes to this file) * -* 17-Sep-93 : renamed to version 1.9 (no changes to this file) * -* 29-Jun-95 : changes for version 1.10 : * -* - replaced loop in nextelement() to save reference past * -* end of array (thanks to Kevin Maylsiak) * -* 11-Jul-96 : changes for version 2.0 : * -* - added alloc_error() * -* - added dynamic allocation * -* 21-Oct-98 : use 077777 in place of INFINITY for CLEANUP() * -* 9-Jan-00 : added nautil_check() * -* 12-Feb-00 : did a little formating of the code * -* 28-May-00 : added nautil_freedyn() * -* 16-Aug-00 : added OLDNAUTY behaviour * -* 16-Nov-00 : moved graph-specific things to naugraph.c * -* use function prototypes, remove UPROC, nvector * -* 22-Apr-01 : added code for compilation into Magma * -* removed nautil_null() * -* removed EXTDEFS and included labelorg * -* 21-Nov-01 : use NAUTYREQUIRED in nautil_check() * -* 26-Jun-02 : revised permset() to avoid fetch past the end of * -* the array (thanks to Jan Kieffer) * -* 17-Nov-03 : changed INFINITY to NAUTY_INFINITY * -* 14-Sep-04 : extended prototypes to recursive functions * -* 23-Nov-06 : replave targetcell() by maketargetcell() * -* 10-Dec-06 : remove BIGNAUTY * -* 10-Dec-10 : remove shortish and permutation types * -* 11-May-10 : use sorttemplates.c * -* 27-Mar-11 : add writegroupsize() * -* 15-Jan-12 : add TLS_ATTR attributes * -* 16-Sep-12 : small change to objoin(), more efficient for sparse case * -* 22-Sep-12 : change documentation of orbjoin() * -* * -*****************************************************************************/ - -#define ONE_WORD_SETS -#include "nauty.h" -#ifdef NAUTY_IN_MAGMA -#include "io.e" -#endif - - /* macros for hash-codes: */ - /* Don't use NAUTY_INFINITY here as that would make the canonical - * labelling depend on whether BIGNAUTY is in operation */ -#define MASH(l,i) ((((l) ^ 065435) + (i)) & 077777) - /* : expression whose long value depends only on long l and int/long i. - Anything goes, preferably non-commutative. */ - -#define CLEANUP(l) ((int)((l) % 077777)) - /* : expression whose value depends on long l and is less than 077777 - when converted to int then short. Anything goes. */ - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#if !MAXN -DYNALLSTAT(int,workperm,workperm_sz); -#else -static TLS_ATTR int workperm[MAXN]; -#endif - -int labelorg = 0; /* no TLS_ATTR on purpose */ - -/* aproto: header new_nauty_protos.h */ - -/***************************************************************************** -* * -* nextelement(set1,m,pos) = the position of the first element in set set1 * -* which occupies a position greater than pos. If no such element exists, * -* the value is -1. pos can have any value less than n, including negative * -* values. * -* * -* GLOBALS ACCESSED: none * -* * -*****************************************************************************/ - -int -nextelement(set *set1, int m, int pos) -{ - setword setwd; - int w; - -#if MAXM==1 - if (pos < 0) setwd = set1[0]; - else setwd = set1[0] & BITMASK(pos); - - if (setwd == 0) return -1; - else return FIRSTBITNZ(setwd); -#else - if (pos < 0) - { - w = 0; - setwd = set1[0]; - } - else - { - w = SETWD(pos); - setwd = set1[w] & BITMASK(SETBT(pos)); - } - - for (;;) - { - if (setwd != 0) return TIMESWORDSIZE(w) + FIRSTBITNZ(setwd); - if (++w == m) return -1; - setwd = set1[w]; - } - -#endif -} - -/***************************************************************************** -* * -* permset(set1,set2,m,perm) defines set2 to be the set * -* {perm[i] | i in set1}. * -* * -* GLOBALS ACCESSED: bit,leftbit * -* * -*****************************************************************************/ - -void -permset(set *set1, set *set2, int m, int *perm) -{ - setword setw; - int pos,w,b; - - EMPTYSET(set2,m); - -#if MAXM==1 - setw = set1[0]; - while (setw != 0) - { - TAKEBIT(b,setw); - pos = perm[b]; - ADDELEMENT(set2,pos); - } -#else - for (w = 0; w < m; ++w) - { - setw = set1[w]; - while (setw != 0) - { - TAKEBIT(b,setw); - pos = perm[TIMESWORDSIZE(w)+b]; - ADDELEMENT(set2,pos); - } - } -#endif -} - -/***************************************************************************** -* * -* putstring(f,s) writes the nul-terminated string s to file f. * -* * -*****************************************************************************/ - -void -putstring(FILE *f, char *s) -{ - while (*s != '\0') - { - PUTC(*s,f); - ++s; - } -} - -/***************************************************************************** -* * -* itos(i,s) converts the int i to a nul-terminated decimal character * -* string s. The value returned is the number of characters excluding * -* the nul. * -* * -* GLOBALS ACCESSED: NONE * -* * -*****************************************************************************/ - -int -itos(int i, char *s) -{ - int digit,j,k; - char c; - int ans; - - if (i < 0) - { - k = 0; - i = -i; - j = 1; - s[0] = '-'; - } - else - { - k = -1; - j = 0; - } - - do - { - digit = i % 10; - i = i / 10; - s[++k] = digit + '0'; - } - while (i); - - s[k+1] = '\0'; - ans = k + 1; - - for (; j < k; ++j, --k) - { - c = s[j]; - s[j] = s[k]; - s[k] = c; - } - - return ans; -} - -/***************************************************************************** -* * -* orbits represents a partition of {0,1,...,n-1}, by orbits[i] = the * -* smallest element in the same cell as i. map[] is any array with values * -* in {0,1,...,n-1}. orbjoin(orbits,map,n) joins the cells of orbits[] * -* together to the minimum extent such that for each i, i and map[i] are in * -* the same cell. The function value returned is the new number of cells. * -* * -* GLOBALS ACCESSED: NONE * -* * -*****************************************************************************/ - -int -orbjoin(int *orbits, int *map, int n) -{ - int i,j1,j2; - - for (i = 0; i < n; ++i) - if (map[i] != i) - { - j1 = orbits[i]; - while (orbits[j1] != j1) j1 = orbits[j1]; - j2 = orbits[map[i]]; - while (orbits[j2] != j2) j2 = orbits[j2]; - - if (j1 < j2) orbits[j2] = j1; - else if (j1 > j2) orbits[j1] = j2; - } - - j1 = 0; - for (i = 0; i < n; ++i) - if ((orbits[i] = orbits[orbits[i]]) == i) ++j1; - - return j1; -} - -/***************************************************************************** -* * -* writeperm(f,perm,cartesian,linelength,n) writes the permutation perm to * -* the file f. The cartesian representation (i.e. perm itself) is used if * -* cartesian != FALSE; otherwise the cyclic representation is used. No * -* more than linelength characters (not counting '\n') are written on each * -* line, unless linelength is ridiculously small. linelength<=0 causes no * -* line breaks at all to be made. The global int labelorg is added to each * -* vertex number. * -* * -* GLOBALS ACCESSED: itos(),putstring() * -* * -*****************************************************************************/ - -void -writeperm(FILE *f, int *perm, boolean cartesian, int linelength, int n) -{ - int i,k,l,curlen,intlen; - char s[30]; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"writeperm"); -#endif - - /* CONDNL(x) writes end-of-line and 3 spaces if x characters - won't fit on the current line. */ -#define CONDNL(x) if (linelength>0 && curlen+(x)>linelength)\ - {putstring(f,"\n ");curlen=3;} - - curlen = 0; - if (cartesian) - { - for (i = 0; i < n; ++i) - { - intlen = itos(perm[i]+labelorg,s); - CONDNL(intlen+1); - PUTC(' ',f); - putstring(f,s); - curlen += intlen + 1; - } - PUTC('\n',f); - } - else - { - for (i = n; --i >= 0;) workperm[i] = 0; - - for (i = 0; i < n; ++i) - { - if (workperm[i] == 0 && perm[i] != i) - { - l = i; - intlen = itos(l+labelorg,s); - if (curlen > 3) CONDNL(2*intlen+4); - PUTC('(',f); - do - { - putstring(f,s); - curlen += intlen + 1; - k = l; - l = perm[l]; - workperm[k] = 1; - if (l != i) - { - intlen = itos(l+labelorg,s); - CONDNL(intlen+2); - PUTC(' ',f); - } - } - while (l != i); - PUTC(')',f); - ++curlen; - } - } - - if (curlen == 0) putstring(f,"(1)\n"); - else PUTC('\n',f); - } -} - -/***************************************************************************** -* * -* fmperm(perm,fix,mcr,m,n) uses perm to construct fix and mcr. fix * -* contains those points are fixed by perm, while mcr contains the set of * -* those points which are least in their orbits. * -* * -* GLOBALS ACCESSED: bit * -* * -*****************************************************************************/ - -void -fmperm(int *perm, set *fix, set *mcr, int m, int n) -{ - int i,k,l; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"writeperm"); -#endif - - EMPTYSET(fix,m); - EMPTYSET(mcr,m); - - for (i = n; --i >= 0;) workperm[i] = 0; - - for (i = 0; i < n; ++i) - if (perm[i] == i) - { - ADDELEMENT(fix,i); - ADDELEMENT(mcr,i); - } - else if (workperm[i] == 0) - { - l = i; - do - { - k = l; - l = perm[l]; - workperm[k] = 1; - } - while (l != i); - - ADDELEMENT(mcr,i); - } -} - -/***************************************************************************** -* * -* fmptn(lab,ptn,level,fix,mcr,m,n) uses the partition at the specified * -* level in the partition nest (lab,ptn) to make sets fix and mcr. fix * -* represents the points in trivial cells of the partition, while mcr * -* represents those points which are least in their cells. * -* * -* GLOBALS ACCESSED: bit * -* * -*****************************************************************************/ - -void -fmptn(int *lab, int *ptn, int level, set *fix, set *mcr, int m, int n) -{ - int i,lmin; - - EMPTYSET(fix,m); - EMPTYSET(mcr,m); - - for (i = 0; i < n; ++i) - if (ptn[i] <= level) - { - ADDELEMENT(fix,lab[i]); - ADDELEMENT(mcr,lab[i]); - } - else - { - lmin = lab[i]; - do - if (lab[++i] < lmin) lmin = lab[i]; - while (ptn[i] > level); - ADDELEMENT(mcr,lmin); - } -} - -#define SORT_TYPE1 int -#define SORT_TYPE2 int -#define SORT_OF_SORT 2 -#define SORT_NAME sortparallel -#include "sorttemplates.c" - -/***************************************************************************** -* * -* doref(g,lab,ptn,level,numcells,qinvar,invar,active,code,refproc, * -* invarproc,mininvarlev,maxinvarlev,invararg,digraph,m,n) * -* is used to perform a refinement on the partition at the given level in * -* (lab,ptn). The number of cells is *numcells both for input and output. * -* The input active is the active set for input to the refinement procedure * -* (*refproc)(), which must have the argument list of refine(). * -* active may be arbitrarily changed. invar is used for working storage. * -* First, (*refproc)() is called. Then, if invarproc!=NULL and * -* |mininvarlev| <= level <= |maxinvarlev|, the routine (*invarproc)() is * -* used to compute a vertex-invariant which may refine the partition * -* further. If it does, (*refproc)() is called again, using an active set * -* containing all but the first fragment of each old cell. Unless g is a * -* digraph, this guarantees that the final partition is equitable. The * -* arguments invararg and digraph are passed to (*invarproc)() * -* uninterpretted. The output argument code is a composite of the codes * -* from all the calls to (*refproc)(). The output argument qinvar is set * -* to 0 if (*invarproc)() is not applied, 1 if it is applied but fails to * -* refine the partition, and 2 if it succeeds. * -* See the file nautinv.c for a further discussion of vertex-invariants. * -* Note that the dreadnaut I command generates a call to this procedure * -* with level = mininvarlevel = maxinvarlevel = 0. * -* * -*****************************************************************************/ - -void -doref(graph *g, int *lab, int *ptn, int level, int *numcells, - int *qinvar, int *invar, set *active, int *code, - void (*refproc)(graph*,int*,int*,int,int*,int*,set*,int*,int,int), - void (*invarproc)(graph*,int*,int*,int,int,int,int*, - int,boolean,int,int), - int mininvarlev, int maxinvarlev, int invararg, - boolean digraph, int m, int n) -{ - int pw; - int i,cell1,cell2,nc,tvpos,minlev,maxlev; - long longcode; - boolean same; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"doref"); -#endif - - if ((tvpos = nextelement(active,M,-1)) < 0) tvpos = 0; - - (*refproc)(g,lab,ptn,level,numcells,invar,active,code,M,n); - - minlev = (mininvarlev < 0 ? -mininvarlev : mininvarlev); - maxlev = (maxinvarlev < 0 ? -maxinvarlev : maxinvarlev); - if (invarproc != NULL && *numcells < n - && level >= minlev && level <= maxlev) - { - (*invarproc)(g,lab,ptn,level,*numcells,tvpos,invar,invararg, - digraph,M,n); - EMPTYSET(active,m); - for (i = n; --i >= 0;) workperm[i] = invar[lab[i]]; - nc = *numcells; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - pw = workperm[cell1]; - same = TRUE; - for (cell2 = cell1; ptn[cell2] > level; ++cell2) - if (workperm[cell2+1] != pw) same = FALSE; - - if (same) continue; - - sortparallel(workperm+cell1, lab+cell1, cell2-cell1+1); - - for (i = cell1 + 1; i <= cell2; ++i) - if (workperm[i] != workperm[i-1]) - { - ptn[i-1] = level; - ++*numcells; - ADDELEMENT(active,i); - } - } - - if (*numcells > nc) - { - *qinvar = 2; - longcode = *code; - (*refproc)(g,lab,ptn,level,numcells,invar,active,code,M,n); - longcode = MASH(longcode,*code); - *code = CLEANUP(longcode); - } - else - *qinvar = 1; - } - else - *qinvar = 0; -} - -/***************************************************************************** -* * -* maketargetcell(g,lab,ptn,level,tcell,tcellsize,&cellpos, * -* tc_level,digraph,hint,targetcell,m,n) * -* calls targetcell() to determine the target cell at the specified level * -* in the partition nest (lab,ptn). It must be a nontrivial cell (if not, * -* the first cell. The intention of hint is that, if hint >= 0 and there * -* is a suitable non-trivial cell starting at position hint in lab, * -* that cell is chosen. * -* tc_level and digraph are input options. * -* When a cell is chosen, tcell is set to its contents, *tcellsize to its * -* size, and cellpos to its starting position in lab. * -* * -* GLOBALS ACCESSED: bit * -* * -*****************************************************************************/ - -void -maketargetcell(graph *g, int *lab, int *ptn, int level, set *tcell, - int *tcellsize, int *cellpos, int tc_level, boolean digraph, - int hint, - int (*targetcell)(graph*,int*,int*,int,int,boolean,int,int,int), - int m, int n) -{ - int i,j,k; - - i = (*targetcell)(g,lab,ptn,level,tc_level,digraph,hint,m,n); - for (j = i + 1; ptn[j] > level; ++j) {} - - *tcellsize = j - i + 1; - - EMPTYSET(tcell,m); - for (k = i; k <= j; ++k) ADDELEMENT(tcell,lab[k]); - - *cellpos = i; -} - -/***************************************************************************** -* * -* shortprune(set1,set2,m) ANDs the contents of set set2 into set set1. * -* * -* GLOBALS ACCESSED: NONE * -* * -*****************************************************************************/ - -void -shortprune(set *set1, set *set2, int m) -{ - int i; - - for (i = 0; i < M; ++i) INTERSECT(set1[i],set2[i]); -} - -/***************************************************************************** -* * -* breakout(lab,ptn,level,tc,tv,active,m) operates on the partition at * -* the specified level in the partition nest (lab,ptn). It finds the * -* element tv, which is in the cell C starting at index tc in lab (it had * -* better be) and splits C in the two cells {tv} and C\{tv}, in that order. * -* It also sets the set active to contain just the element tc. * -* * -* GLOBALS ACCESSED: bit * -* * -*****************************************************************************/ - -void -breakout(int *lab, int *ptn, int level, int tc, int tv, - set *active, int m) -{ - int i,prev,next; - - EMPTYSET(active,m); - ADDELEMENT(active,tc); - - i = tc; - prev = tv; - - do - { - next = lab[i]; - lab[i++] = prev; - prev = next; - } - while (prev != tv); - - ptn[tc] = level; -} - -/***************************************************************************** -* * -* longprune(tcell,fix,bottom,top,m) removes zero or elements of the set * -* tcell. It is assumed that addresses bottom through top-1 contain * -* contiguous pairs of sets (f1,m1),(f2,m2), ... . tcell is intersected * -* with each mi such that fi is a subset of fix. * -* * -* GLOBALS ACCESSED: NONE * -* * -*****************************************************************************/ - -void -longprune(set *tcell, set *fix, set *bottom, set *top, int m) -{ - int i; - - while (bottom < top) - { - for (i = 0; i < M; ++i) - if (NOTSUBSET(fix[i],bottom[i])) break; - bottom += M; - - if (i == M) - for (i = 0; i < M; ++i) INTERSECT(tcell[i],bottom[i]); - bottom += M; - } -} - -/***************************************************************************** -* * -* writegroupsize(f,gpsize1,gpsize2) writes a real number gpsize1*10^gpsize2 * -* It is assumed that gpsize1 >= 1 and that gpsize1 equals an integer in the * -* case that gpsize2==0. These assumptions are true for group sizes * -* computed by nauty. * -* * -*****************************************************************************/ - -void -writegroupsize(FILE *f, double gpsize1, int gpsize2) -{ - if (gpsize2 == 0) - fprintf(f,"%.0f",gpsize1+0.1); - else - { - while (gpsize1 >= 10.0) - { - gpsize1 /= 10.0; - ++gpsize2; - } - fprintf(f,"%14.12fe%d",gpsize1,gpsize2); - } -} - -/***************************************************************************** -* * -* nautil_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -nautil_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in nautil.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in nautil.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in nautil.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: nautil.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* alloc_error() writes a message and exits. Used by DYNALLOC? macros. * -* * -*****************************************************************************/ - -void -alloc_error(char *s) -{ - fprintf(ERRFILE,"Dynamic allocation failed: %s\n",s); - exit(2); -} - -/***************************************************************************** -* * -* nautil_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -nautil_freedyn(void) -{ -#if !MAXN - DYNFREE(workperm,workperm_sz); -#endif -} diff --git a/tools/nauty25r9_unix/nautil.o b/tools/nauty25r9_unix/nautil.o deleted file mode 100644 index a2979c210868cef40ea41e0ac8cc9f239b3e747b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14296 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 E1AKS}2mk;8 diff --git a/tools/nauty25r9_unix/nautil1.o b/tools/nauty25r9_unix/nautil1.o deleted file mode 100644 index 49b22bc0485797ab1a805731319ad6fafb475725..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11984 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 diff --git a/tools/nauty25r9_unix/nautinv.c b/tools/nauty25r9_unix/nautinv.c deleted file mode 100644 index 149f4b7..0000000 --- a/tools/nauty25r9_unix/nautinv.c +++ /dev/null @@ -1,1751 +0,0 @@ -/***************************************************************************** -* * -* Vertex-invariants source file for nauty 2.5. * -* * -* Copyright (1989-2013) Brendan McKay. All rights reserved. * -* Subject to waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 13-Mar-90 : initial release for version 1.5 * -* 10-Nov-90 : changes for version 1.6 : * -* - added dummy routine nautinv_null() * -* 27-Aug-92 : renamed to version 1.7, no changes to this file * -* 5-Jun-93 : renamed to version 1.7+, no changes to this file * -* 18-Aug-93 : renamed to version 1.8, no changes to this file * -* 17-Sep-93 : changes for version 1.9 : * -* - added invariant routine adjacencies() * -* 20-Jun-96 : changes for version 2.0 : * -* - added invariants cellfano() and cellfano2() * -* 11-Jul-96 - added dynamic allocation * -* 21-Oct-98 - use shortish in place of short for BIGNAUTY * -* 9-Jan-00 - added nautinv_check() * -* 12-Feb-00 - minor code formatting * -* 16-Nov-00 - made changes listed in nauty.h * -* 22-Apr-01 : changes for version 2.1 : * -* - made all large dynamic memory external to routines * -* - added nautinv_freedyn() to free all such memory * -* - include nautinv.h rather than naututil.h * -* - removed nautinv_null() * -* - added code to facilitate compilation into Magma * -* - removed EXTDEFS * -* 12-Jul-01 - use invararg in distances() * -* - fixed comments in ind and cliq routines * -* 21-Nov-01 : use NAUTYREQUIRED in nautinv_check() * -* 10-Dec-06 : remove BIGNAUTY * -* 10-Nov-09 : remove types shortish and permutation * -* 23-Nov-09 : add refinvar() * -* 12-Jun-10 : fixed identical errors in cellcliq() and cellind() * -* 15-Jan-12 : add TLS_ATTR attributes * -* 23-Aug-12 : fix getbigcells(), thanks to Fatih Demirkale * -* * -*****************************************************************************/ - -#define ONE_WORD_SETS -#include "nautinv.h" - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#define MASH(l,i) ((((l) ^ 056345) + (i)) & 077777) - /* : expression whose long value depends only on long l and int/long i. - Anything goes, preferably non-commutative. */ - -#define CLEANUP(l) ((int)((l) % 077777)) - /* : expression whose value depends on long l and is less than 077777 - when converted to int then short. Anything goes. */ - -#define ACCUM(x,y) x = (((x) + (y)) & 077777) - /* : must be commutative. */ - -static const int fuzz1[] = {037541,061532,005257,026416}; -static const int fuzz2[] = {006532,070236,035523,062437}; - -#define FUZZ1(x) ((x) ^ fuzz1[(x)&3]) -#define FUZZ2(x) ((x) ^ fuzz2[(x)&3]) - -#define MAXCLIQUE 10 /* max clique size for cliques() and maxindset() */ - -#if MAXN -static TLS_ATTR int workshort[MAXN+2]; -static TLS_ATTR int vv[MAXN],ww[MAXN]; -static TLS_ATTR int workperm[MAXN]; -static TLS_ATTR int bucket[MAXN+2]; -static TLS_ATTR int count[MAXN]; -static TLS_ATTR set workset[MAXM]; -static TLS_ATTR set w01[MAXM],w02[MAXM],w03[MAXM],w12[MAXM],w13[MAXM],w23[MAXM]; -static TLS_ATTR set pt0[MAXM],pt1[MAXM],pt2[MAXM]; -static TLS_ATTR set wss[MAXCLIQUE-1][MAXM]; -static TLS_ATTR set ws1[MAXM],ws2[MAXM]; -#else -DYNALLSTAT(int,workshort,workshort_sz); -DYNALLSTAT(int,vv,vv_sz); -DYNALLSTAT(int,ww,ww_sz); -DYNALLSTAT(int,workperm,workperm_sz); -DYNALLSTAT(int,bucket,bucket_sz); -DYNALLSTAT(int,count,count_sz); -DYNALLSTAT(set,ws1,ws1_sz); -DYNALLSTAT(set,ws2,ws2_sz); -DYNALLSTAT(set,workset,workset_sz); -DYNALLSTAT(set,w01,w01_sz); -DYNALLSTAT(set,w02,w02_sz); -DYNALLSTAT(set,w03,w03_sz); -DYNALLSTAT(set,w12,w12_sz); -DYNALLSTAT(set,w13,w13_sz); -DYNALLSTAT(set,w23,w23_sz); -DYNALLSTAT(set,pt0,pt0_sz); -DYNALLSTAT(set,pt1,pt1_sz); -DYNALLSTAT(set,pt2,pt2_sz); -DYNALLSTAT(set,wss,wss_sz); -#endif - -/* aproto: header new_nauty_protos.h */ - -/***************************************************************************** -* * -* This file contains a number of procedures which compute vertex-invariants * -* for stronger partition refinement. Since entirely different * -* vertex-invariants seem to work better for different types of graph, we * -* cannot do more than give a small collection of representative examples. * -* Any serious computations with difficult graphs may well need to use * -* specially-written vertex-invariants. The use of vertex-invariants * -* procedures is supported by nauty from version 1.5 onwards, via the * -* options userinvarproc, mininvarlevel, maxinvarlevel and invararg. * -* The meaning of these fields in detail are as follows: * -* userinvarproc is the address of the vertex-invariant procedure. If * -* no vertex-invariants is required, this field should * -* have the value NULL. * -* maxinvarlevel The absolute value of this is the maximum level in the * -* search tree at which the vertex-invariant will be * -* computed. The root of the tree is at level 1, so the * -* vertex-invariant will not be invoked at all if * -* maxinvarlevel==0. Negative values of maxinvarlevel * -* request nauty to not compute the vertex-invariant at * -* a level greater than that of the earliest node (if any) * -* on the path to the first leaf of the search tree at * -* which the vertex-invariant refines the partition. * -* mininvarlevel The absolute value of this is the minimum level in the * -* search tree at which the vertex-invariant will be * -* computed. The root of the tree is at level 1, so there * -* is no effective limit if mininvarlevel is -1, 0 or 1. * -* Negative values of mininvarlevel request nauty to not * -* compute the vertex-invariant at a level less than * -* that of the earliest node (if any) on the path to the * -* first leaf of the search tree at which the * -* vertex-invariant refines the partition. * -* invararg is passed to the vertex-invariant procedure via the * -* argument of the same name. It can be used by the * -* procedure for any purpose. * -* Note that negative values of maxinvarlevel and mininvarlevel make the * -* canonical labelling invalid, but can speed automorphism group finding. * -* Nauty already knows this and takes their absolute values. * -* * -* A vertex-invariant must be declared thus: * -* void invarproc(g,lab,ptn,level,numcells,tvpos,invar,invararg,digraph,m,n) * -* All of these arguments must be treated as read-only except for invar. * -* g : the graph, exactly as passed to nauty() * -* lab,ptn : the current partition nest (see nauty.h for the format) * -* level : the level of this node in the search tree. * -* numcells : the number of cells in the partition at this node. * -* tvpos : the index in (lab,ptn) of one cell in the partition. * -* If level <= 1, the cell will be the first fragment of the * -* first active cell (as provided by the initial call to nauty), * -* or the first cell, if there were no active cells. * -* If level > 1, the cell will be the singleton cell which was * -* created to make this node of the search tree from its parent. * -* invararg : a copy of options.invararg * -* digraph : a copy of options.digraph * -* m,n : size parameters as passed to nauty() * -* invar : an array to return the answer in. The procedure must put in * -* each invar[i] (0 <= i < n) an invariant of the 6-tuple * -* (,g,,level, * -* invararg,digraph) * -* Note that invar[] is declared as an int array. Since the * -* absolute value of the invariant is irrelevant, only the * -* comparative values, any short, int or long value can be * -* assigned to the entries of invar[] without fear. However, * -* you should assign a value less than 077777 to ensure machine- * -* independence of the canonical labelling. * -* * -* The refinement procedure has already been called before the invariant * -* procedure is called. That means that the partition is equitable if * -* digraph==FALSE. * -* * -*****************************************************************************/ - -/***************************************************************************** -* * -* twopaths() assigns to each vertex v the sum of the weights of each vertex * -* which can be reached from v along a walk of length two (including itself * -* usually). The weight of each vertex w is defined as the ordinal number * -* of the cell containing w, starting at 1 for the first cell. * -* * -*****************************************************************************/ - -void -twopaths(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,v,w; - int wt; - set *gv,*gw; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"twopaths"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"twopaths"); -#endif - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = wt; - if (ptn[i] <= level) ++wt; - } - - for (v = 0, gv = (set*)g; v < n; ++v, gv += M) - { - EMPTYSET(workset,m); - w = -1; - while ((w = nextelement(gv,M,w)) >= 0) - { - gw = GRAPHROW(g,w,m); - for (i = M; --i >= 0;) UNION(workset[i],gw[i]); - } - wt = 0; - w = -1; - while ((w = nextelement(workset,M,w)) >= 0) ACCUM(wt,workshort[w]); - invar[v] = wt; - } -} - -/***************************************************************************** -* * -* quadruples() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2,v3), where w(v,v1,v2,v3) depends on the number of * -* vertices adjacent to an odd number of {v,v1,v2,v3}, and to the cells * -* that v,v1,v2,v3 belong to. {v,v1,v2,v3} are permitted to range over all * -* distinct 4-tuples which contain at least one member in the cell tvpos. * -* * -*****************************************************************************/ - -void -quadruples(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - set *gw; - int wt; - int v,iv,v1,v2,v3; - set *gv; - long wv,wv1,wv2,wv3; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"quadruples"); - DYNALLOC1(set,ws1,ws1_sz,m,"quadruples"); - DYNALLOC1(set,workset,workset_sz,m,"quadruples"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ2(wt); - if (ptn[i] <= level) ++wt; - } - - iv = tvpos - 1; - do - { - v = lab[++iv]; - gv = GRAPHROW(g,v,m); - wv = workshort[v]; - for (v1 = 0; v1 < n-2; ++v1) - { - wv1 = workshort[v1]; - if (wv1 == wv && v1 <= v) continue; - wv1 += wv; - gw = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv[i] ^ gw[i]; - for (v2 = v1+1; v2 < n-1; ++v2) - { - wv2 = workshort[v2]; - if (wv2 == wv && v2 <= v) continue; - wv2 += wv1; - gw = GRAPHROW(g,v2,m); - for (i = M; --i >= 0;) ws1[i] = workset[i] ^ gw[i]; - for (v3 = v2+1; v3 < n; ++v3) - { - wv3 = workshort[v3]; - if (wv3 == wv && v3 <= v) continue; - wv3 += wv2; - gw = GRAPHROW(g,v3,m); - pc = 0; - for (i = M; --i >= 0;) - if ((sw = ws1[i] ^ gw[i]) != 0) pc += POPCOUNT(sw); - wt = (FUZZ1(pc)+wv3) & 077777; - wt = FUZZ2(wt); - ACCUM(invar[v],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - ACCUM(invar[v3],wt); - } - } - } - } - while (ptn[iv] > level); -} - -/***************************************************************************** -* * -* triples() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2), where w(v,v1,v2) depends on the number of vertices * -* adjacent to an odd number of {v,v1,v2}, and to the cells that * -* v,v1,v2 belong to. {v,v1,v2} are permitted to range over all distinct * -* triples which contain at least one member in the cell tvpos. * -* * -*****************************************************************************/ - -void -triples(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - set *gw; - int wt; - int v,iv,v1,v2; - set *gv; - long wv,wv1,wv2; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"triples"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"triples"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ1(wt); - if (ptn[i] <= level) ++wt; - } - - iv = tvpos - 1; - do - { - v = lab[++iv]; - gv = GRAPHROW(g,v,m); - wv = workshort[v]; - for (v1 = 0; v1 < n-1; ++v1) - { - wv1 = workshort[v1]; - if (wv1 == wv && v1 <= v) continue; - wv1 += wv; - gw = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv[i] ^ gw[i]; - for (v2 = v1+1; v2 < n; ++v2) - { - wv2 = workshort[v2]; - if (wv2 == wv && v2 <= v) continue; - wv2 += wv1; - gw = GRAPHROW(g,v2,m); - pc = 0; - for (i = M; --i >= 0;) - if ((sw = workset[i] ^ gw[i]) != 0) pc += POPCOUNT(sw); - wt = (FUZZ1(pc)+wv2) & 077777; - wt = FUZZ2(wt); - ACCUM(invar[v],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - } - } - } - while (ptn[iv] > level); -} - -/***************************************************************************** -* * -* adjtriang() assigns to each vertex v a value depending on the numbers * -* of common neighbours between each pair {v1,v2} of neighbours of v, and * -* which cells v1 and v2 lie in. The vertices v1 and v2 must be adjacent * -* if invararg == 0 and not adjacent if invararg == 1. * -* * -*****************************************************************************/ - -void -adjtriang(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int j,pc; - setword sw; - set *gi; - int wt; - int i,v1,v2; - boolean v1v2; - set *gv1,*gv2; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"adjtriang"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"adjtriang"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ1(wt); - if (ptn[i] <= level) ++wt; - } - - for (v1 = 0, gv1 = g; v1 < n; ++v1, gv1 += M) - { - for (v2 = (digraph ? 0 : v1+1); v2 < n; ++v2) - { - if (v2 == v1) continue; - v1v2 = (ISELEMENT(gv1,v2) != 0); - if ((invararg == 0 && !v1v2) - || (invararg == 1 && v1v2)) continue; - wt = workshort[v1]; - ACCUM(wt,workshort[v2]); - ACCUM(wt,v1v2); - - gv2 = GRAPHROW(g,v2,m); - for (i = M; --i >= 0;) workset[i] = gv1[i] & gv2[i]; - i = -1; - while ((i = nextelement(workset,M,i)) >= 0) - { - pc = 0; - gi = GRAPHROW(g,i,m); - for (j = M; --j >= 0;) - if ((sw = workset[j] & gi[j]) != 0) pc += POPCOUNT(sw); - pc = (pc + wt) & 077777; - ACCUM(invar[i],pc); - } - } - } -} - -/***************************************************************************** -* * -* getbigcells(ptn,level,minsize,bigcells,cellstart,cellsize,n) is an * -* auxiliary procedure to make a list of all the large cells in the current * -* partition. On entry, ptn, level and n have their usual meanings, * -* while minsize is the smallest size of an interesting cell. On return, * -* bigcells is the number of cells of size at least minsize, cellstart[0...] * -* contains their starting positions in ptn, and cellsize[0...] contain * -* their sizes. These two arrays are in increasing order of cell size, * -* then position. * -* * -*****************************************************************************/ - -void -getbigcells(int *ptn, int level, int minsize, int *bigcells, - int *cellstart, int *cellsize, int n) -{ - int cell1,cell2,j; - int si,st; - int bc,i,h; - - bc = 0; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - - if (cell2 >= cell1 + minsize - 1) - { - cellstart[bc] = cell1; - cellsize[bc] = cell2 - cell1 + 1; - ++bc; - } - } - *bigcells = bc; - - j = bc / 3; - h = 1; - do - h = 3 * h + 1; - while (h < j); - - do /* shell sort */ - { - for (i = h; i < bc; ++i) - { - st = cellstart[i]; - si = cellsize[i]; - for (j = i; cellsize[j-h] > si || - (cellsize[j-h] == si && cellstart[j-h] > st); ) - { - cellsize[j] = cellsize[j-h]; - cellstart[j] = cellstart[j-h]; - if ((j -= h) < h) break; - } - cellsize[j] = si; - cellstart[j] = st; - } - h /= 3; - } - while (h > 0); -} - -/***************************************************************************** -* * -* celltrips() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2), where w(v,v1,v2) depends on the number of vertices * -* adjacent to an odd number of {v,v1,v2}. {v,v1,v2} are constrained to * -* belong to the same cell. We try the cells in increasing order of size, * -* and stop as soon as any cell splits. * -* * -*****************************************************************************/ - -void -celltrips(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - set *gw; - int wt; - int v,iv,v1,iv1,v2,iv2; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - set *gv; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"celltrips"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"celltrips"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,3,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (iv = cell1; iv <= cell2 - 2; ++iv) - { - v = lab[iv]; - gv = GRAPHROW(g,v,m); - for (iv1 = iv + 1; iv1 <= cell2 - 1; ++iv1) - { - v1 = lab[iv1]; - gw = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv[i] ^ gw[i]; - for (iv2 = iv1 + 1; iv2 <= cell2; ++iv2) - { - v2 = lab[iv2]; - gw = GRAPHROW(g,v2,m); - pc = 0; - for (i = M; --i >= 0;) - if ((sw = workset[i] ^ gw[i]) != 0) - pc += POPCOUNT(sw); - wt = FUZZ1(pc); - ACCUM(invar[v],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - } - } - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} - -/***************************************************************************** -* * -* cellquads() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2,v3), where w(v,v1,v2,v3) depends on the number of * -* vertices adjacent to an odd number of {v,v1,v2,v3}. {v,v1,v2,v3} are * -* constrained to belong to the same cell. We try the cells in increasing * -* order of size, and stop as soon as any cell splits. * -* * -*****************************************************************************/ - -void -cellquads(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - set *gw; - int wt; - int v,iv,v1,iv1,v2,iv2,v3,iv3; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - set *gv; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"cellquads"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellquads"); - DYNALLOC1(set,ws1,ws1_sz,m,"cellquads"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,4,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (iv = cell1; iv <= cell2 - 3; ++iv) - { - v = lab[iv]; - gv = GRAPHROW(g,v,m); - for (iv1 = iv + 1; iv1 <= cell2 - 2; ++iv1) - { - v1 = lab[iv1]; - gw = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv[i] ^ gw[i]; - for (iv2 = iv1 + 1; iv2 <= cell2 - 1; ++iv2) - { - v2 = lab[iv2]; - gw = GRAPHROW(g,v2,m); - for (i = M; --i >= 0;) ws1[i] = workset[i] ^ gw[i]; - for (iv3 = iv2 + 1; iv3 <= cell2; ++iv3) - { - v3 = lab[iv3]; - gw = GRAPHROW(g,v3,m); - pc = 0; - for (i = M; --i >= 0;) - if ((sw = ws1[i] ^ gw[i]) != 0) - pc += POPCOUNT(sw); - wt = FUZZ1(pc); - ACCUM(invar[v],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - ACCUM(invar[v3],wt); - } - } - } - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} - -/***************************************************************************** -* * -* cellquins() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2,v3,v4), where w(v,v1,v2,v3,v4) depends on the number * -* of vertices adjacent to an odd number of {v,v1,v2,v3,v4}. * -* {v,v1,v2,v3,v4} are constrained to belong to the same cell. We try the * -* cells in increasing order of size, and stop as soon as any cell splits. * -* * -*****************************************************************************/ - -void -cellquins(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - set *gw; - int wt; - int v,iv,v1,iv1,v2,iv2,v3,iv3,v4,iv4; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - set *gv; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"cellquins"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellquins"); - DYNALLOC1(set,ws1,ws1_sz,m,"cellquins"); - DYNALLOC1(set,ws2,ws2_sz,m,"cellquins"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,5,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (iv = cell1; iv <= cell2 - 4; ++iv) - { - v = lab[iv]; - gv = GRAPHROW(g,v,m); - for (iv1 = iv + 1; iv1 <= cell2 - 3; ++iv1) - { - v1 = lab[iv1]; - gw = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv[i] ^ gw[i]; - for (iv2 = iv1 + 1; iv2 <= cell2 - 2; ++iv2) - { - v2 = lab[iv2]; - gw = GRAPHROW(g,v2,m); - for (i = M; --i >= 0;) ws1[i] = workset[i] ^ gw[i]; - for (iv3 = iv2 + 1; iv3 <= cell2 - 1; ++iv3) - { - v3 = lab[iv3]; - gw = GRAPHROW(g,v3,m); - for (i = M; --i >= 0;) ws2[i] = ws1[i] ^ gw[i]; - for (iv4 = iv3 + 1; iv4 <= cell2; ++iv4) - { - v4 = lab[iv4]; - gw = GRAPHROW(g,v4,m); - pc = 0; - for (i = M; --i >= 0;) - if ((sw = ws2[i] ^ gw[i]) != 0) - pc += POPCOUNT(sw); - wt = FUZZ1(pc); - ACCUM(invar[v],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - ACCUM(invar[v3],wt); - ACCUM(invar[v4],wt); - } - } - } - } - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} - -/***************************************************************************** -* * -* uniqinter(s1,s2,m) returns the number in both sets if it is unique, * -* or -1 if there is none or it is not unique. * -*****************************************************************************/ - -static int -uniqinter(set *s1, set *s2, int m) -{ - int i,j; - setword w; - - for (i = 0; i < M; ++i) - { - if ((w = s1[i] & s2[i]) != 0) - { - j = FIRSTBITNZ(w); - if (w != BITT[j]) return -1; - j += TIMESWORDSIZE(i); - for (++i; i < M; ++i) - if (s1[i] & s2[i]) return -1; - return j; - } - } - return -1; -} - -/***************************************************************************** -* * -* cellfano2() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2,v3), where w(v,v1,v2,v3) depends on the number of * -* fano-plane analogues containing {v,v1,v2,v3}. {v,v1,v2,v3} are * -* constrained to belong to the same cell and being independent and * -* non-collinear. We try the cells in increasing order of size, and stop * -* as soon as any cell splits. * -* * -*****************************************************************************/ - -void -cellfano2(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - int wt; - int v0,v1,v2,v3,iv0,iv1,iv2,iv3; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - int nw,x01,x02,x03,x12,x13,x23; - int pnt0,pnt1,pnt2; - set *gv0,*gv1,*gv2,*gv3; - set *gp0,*gp1,*gp2; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellfano2"); - DYNALLOC1(int,vv,vv_sz,n,"cellfano2"); - DYNALLOC1(int,ww,ww_sz,n,"cellfano2"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,4,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (iv0 = cell1; iv0 <= cell2 - 3; ++iv0) - { - v0 = lab[iv0]; - gv0 = GRAPHROW(g,v0,m); - nw = 0; - for (iv1 = iv0 + 1; iv1 <= cell2; ++iv1) - { - v1 = lab[iv1]; - if (ISELEMENT(gv0,v1)) continue; - if ((x01 = uniqinter(gv0,GRAPHROW(g,v1,m),m)) < 0) continue; - vv[nw] = v1; - ww[nw] = x01; - ++nw; - } - - for (iv1 = 0; iv1 < nw-2; ++iv1) - { - v1 = vv[iv1]; - gv1 = GRAPHROW(g,v1,m); - x01 = ww[iv1]; - - for (iv2 = iv1 + 1; iv2 < nw-1; ++iv2) - { - x02 = ww[iv2]; - if (x02 == x01) continue; - v2 = vv[iv2]; - if (ISELEMENT(gv1,v2)) continue; - gv2 = GRAPHROW(g,v2,m); - if ((x12 = uniqinter(gv1,gv2,m)) < 0) continue; - - for (iv3 = iv2 + 1; iv3 < nw; ++iv3) - { - x03 = ww[iv3]; - if (x03 == x01 || x03 == x02) continue; - v3 = vv[iv3]; - if (ISELEMENT(gv1,v3) || ISELEMENT(gv2,v3)) - continue; - gv3 = GRAPHROW(g,v3,m); - if ((x13 = uniqinter(gv1,gv3,m)) < 0) continue; - if ((x23 = uniqinter(gv2,gv3,m)) < 0 - || x23 == x13) continue; - - if ((pnt0 = uniqinter(GRAPHROW(g,x01,m), - GRAPHROW(g,x23,m),m)) < 0) - continue; - if ((pnt1 = uniqinter(GRAPHROW(g,x02,m), - GRAPHROW(g,x13,m),m)) < 0) - continue; - if ((pnt2 = uniqinter(GRAPHROW(g,x03,m), - GRAPHROW(g,x12,m),m)) < 0) - continue; - - gp0 = GRAPHROW(g,pnt0,m); - gp1 = GRAPHROW(g,pnt1,m); - gp2 = GRAPHROW(g,pnt2,m); - - pc = 0; - for (i = M; --i >= 0;) - { - sw = gp0[i] & gp1[i] & gp2[i]; - if (sw) pc += POPCOUNT(sw); - } - wt = FUZZ1(pc); - ACCUM(invar[v0],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - ACCUM(invar[v3],wt); - } - } - } - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} - -/***************************************************************************** -* * -* setnbhd(g,m,n,w,wn) is an auxiliary routine that sets wn to the union * -* of the neighbours of the vertices in w. * -* * -*****************************************************************************/ - -void -setnbhd(graph *g, int m, int n, set *w, set *wn) -{ - int i,j; - set *gi; - - i = nextelement(w,M,-1); - if (i < 0) - { - EMPTYSET(wn,M); - return; - } - - gi = GRAPHROW(g,i,M); - for (j = M; --j >= 0;) wn[j] = gi[j]; - - while ((i = nextelement(w,M,i)) >= 0) - { - gi = GRAPHROW(g,i,M); - for (j = M; --j >= 0;) wn[j] |= gi[j]; - } -} - -/***************************************************************************** -* * -* cellfano() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2,v3), where w(v,v1,v2,v3) depends on the number of * -* fano-plane analogues containing {v,v1,v2,v3}. {v,v1,v2,v3} are * -* constrained to belong to the same cell and being independent. We try * -* the cells in increasing order of size, and stop as soon as any cell * -* splits. * -* * -*****************************************************************************/ - -void -cellfano(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - int wt; - int v0,v1,v2,v3,iv0,iv1,iv2,iv3; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - set *gv0,*gv1,*gv2,*gv3; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellfano"); - DYNALLOC1(set,w01,w01_sz,m,"cellfano"); - DYNALLOC1(set,w02,w02_sz,m,"cellfano"); - DYNALLOC1(set,w03,w03_sz,m,"cellfano"); - DYNALLOC1(set,w12,w12_sz,m,"cellfano"); - DYNALLOC1(set,w13,w13_sz,m,"cellfano"); - DYNALLOC1(set,w23,w23_sz,m,"cellfano"); - DYNALLOC1(set,pt0,pt0_sz,m,"cellfano"); - DYNALLOC1(set,pt1,pt1_sz,m,"cellfano"); - DYNALLOC1(set,pt2,pt2_sz,m,"cellfano"); - DYNALLOC1(set,workset,workset_sz,m,"cellfano"); -#else -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,4,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (iv0 = cell1; iv0 <= cell2 - 3; ++iv0) - { - v0 = lab[iv0]; - gv0 = GRAPHROW(g,v0,m); - for (iv1 = iv0 + 1; iv1 <= cell2 - 2; ++iv1) - { - v1 = lab[iv1]; - if (ISELEMENT(gv0,v1)) continue; - gv1 = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv0[i] & gv1[i]; - setnbhd(g,m,n,workset,w01); - - for (iv2 = iv1 + 1; iv2 <= cell2 - 1; ++iv2) - { - v2 = lab[iv2]; - if (ISELEMENT(gv0,v2) || ISELEMENT(gv1,v2)) - continue; - gv2 = GRAPHROW(g,v2,m); - for (i = M; --i >= 0;) workset[i] = gv0[i] & gv2[i]; - setnbhd(g,m,n,workset,w02); - for (i = M; --i >= 0;) workset[i] = gv1[i] & gv2[i]; - setnbhd(g,m,n,workset,w12); - - for (iv3 = iv2 + 1; iv3 <= cell2; ++iv3) - { - v3 = lab[iv3]; - if (ISELEMENT(gv0,v3) || ISELEMENT(gv1,v3) || - ISELEMENT(gv2,v3)) - continue; - gv3 = GRAPHROW(g,v3,m); - for (i = M; --i >= 0;) workset[i] = gv0[i] & gv3[i]; - setnbhd(g,m,n,workset,w03); - for (i = M; --i >= 0;) workset[i] = gv1[i] & gv3[i]; - setnbhd(g,m,n,workset,w13); - for (i = M; --i >= 0;) workset[i] = gv2[i] & gv3[i]; - setnbhd(g,m,n,workset,w23); - - for (i = M; --i >= 0;) workset[i] = w01[i] & w23[i]; - setnbhd(g,m,n,workset,pt0); - for (i = M; --i >= 0;) workset[i] = w03[i] & w12[i]; - setnbhd(g,m,n,workset,pt1); - for (i = M; --i >= 0;) workset[i] = w02[i] & w13[i]; - setnbhd(g,m,n,workset,pt2); - pc = 0; - for (i = M; --i >= 0;) - { - sw = pt0[i] & pt1[i] & pt2[i]; - if (sw) pc += POPCOUNT(sw); - } - wt = FUZZ1(pc); - ACCUM(invar[v0],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - ACCUM(invar[v3],wt); - } - } - } - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} - -/***************************************************************************** -* * -* distances() assigns to each vertex v a value depending on the number of * -* vertices at each distance from v, and what cells they lie in. * -* If we find any cell which is split in this manner, we don't try any * -* further cells. * -* * -*****************************************************************************/ - -void -distances(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i; - set *gw; - int wt; - int d,dlim,cell1,cell2,iv,v,w; - boolean success; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"distances"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"distances"); - DYNALLOC1(set,ws1,ws1_sz,m,"distances"); - DYNALLOC1(set,ws2,ws2_sz,m,"distances"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ1(wt); - if (ptn[i] <= level) ++wt; - } - - if (invararg > n || invararg == 0) dlim = n; - else dlim = invararg+1; - - success = FALSE; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell2 == cell1) continue; - - for (iv = cell1; iv <= cell2; ++iv) - { - v = lab[iv]; - EMPTYSET(ws1,m); - ADDELEMENT(ws1,v); - EMPTYSET(ws2,m); - ADDELEMENT(ws2,v); - for (d = 1; d < dlim; ++d) - { - EMPTYSET(workset,m); - wt = 0; - w = -1; - while ((w = nextelement(ws2,M,w)) >= 0) - { - gw = GRAPHROW(g,w,m); - ACCUM(wt,workshort[w]); - for (i = M; --i >= 0;) workset[i] |= gw[i]; - } - if (wt == 0) break; - ACCUM(wt,d); - wt = FUZZ2(wt); - ACCUM(invar[v],wt); - for (i = M; --i >= 0;) - { - ws2[i] = workset[i] & ~ws1[i]; - ws1[i] |= ws2[i]; - } - } - if (invar[v] != invar[lab[cell1]]) success = TRUE; - } - if (success) break; - } -} - -/***************************************************************************** -* * -* indsets() assigns to each vertex v a value depending on which cells the * -* vertices which join v in an independent set lie in. The size of the * -* independent sets which are used is the smallest of invararg and MAXCLIQUE.* -* * -*****************************************************************************/ - -void -indsets(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i; - int wt; - set *gv; - int ss,setsize; - int v[MAXCLIQUE]; - long wv[MAXCLIQUE]; - set *s0,*s1; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"indsets"); - DYNALLOC2(set,wss,wss_sz,m,MAXCLIQUE-1,"indsets"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - if (invararg <= 1 || digraph) return; - - if (invararg > MAXCLIQUE) setsize = MAXCLIQUE; - else setsize = invararg; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ2(wt); - if (ptn[i] <= level) ++wt; - } - - for (v[0] = 0; v[0] < n; ++v[0]) - { - wv[0] = workshort[v[0]]; - s0 = (set*)wss; - EMPTYSET(s0,m); - for (i = v[0]+1; i < n; ++i) ADDELEMENT(s0,i); - gv = GRAPHROW(g,v[0],m); - for (i = M; --i >= 0;) s0[i] &= ~gv[i]; - ss = 1; - v[1] = v[0]; - while (ss > 0) - { - if (ss == setsize) - { - wt = FUZZ1(wv[ss-1]); - for (i = ss; --i >= 0;) ACCUM(invar[v[i]],wt); - --ss; - } - else if ((v[ss] = nextelement((set*)wss+M*(ss-1),M,v[ss])) < 0) - --ss; - else - { - wv[ss] = wv[ss-1] + workshort[v[ss]]; - ++ss; - if (ss < setsize) - { - gv = GRAPHROW(g,v[ss-1],m); - s1 = (set*)wss + M*(ss-2); - for (i = M; --i >= 0;) s1[i+M] = s1[i] & ~gv[i]; - v[ss] = v[ss-1]; - } - } - } - } -} - -/***************************************************************************** -* * -* cliques() assigns to each vertex v a value depending on which cells the * -* vertices which join v in a clique lie in. The size of the cliques used * -* is the smallest of invararg and MAXCLIQUE. * -* * -*****************************************************************************/ - -void -cliques(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i; - int wt; - set *gv; - int ss,setsize; - int v[MAXCLIQUE]; - long wv[MAXCLIQUE]; - set *ns; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"cliques"); - DYNALLOC2(set,wss,wss_sz,m,MAXCLIQUE-1,"cliques"); -#else - set wss[MAXCLIQUE-1][MAXM]; -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - if (invararg <= 1 || digraph) return; - - if (invararg > MAXCLIQUE) setsize = MAXCLIQUE; - else setsize = invararg; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ2(wt); - if (ptn[i] <= level) ++wt; - } - - for (v[0] = 0; v[0] < n; ++v[0]) - { - wv[0] = workshort[v[0]]; - gv = GRAPHROW(g,v[0],m); - ns = (set*)wss; - for (i = M; --i >= 0;) ns[i] = gv[i]; - ss = 1; - v[1] = v[0]; - while (ss > 0) - { - if (ss == setsize) - { - wt = FUZZ1(wv[ss-1]); - for (i = ss; --i >= 0;) ACCUM(invar[v[i]],wt); - --ss; - } - else if ((v[ss] = nextelement((set*)wss+M*(ss-1),M,v[ss])) < 0) - --ss; - else - { - wv[ss] = wv[ss-1] + workshort[v[ss]]; - ++ss; - if (ss < setsize) - { - gv = GRAPHROW(g,v[ss-1],m); - ns = (set*)wss + M*(ss-2); - for (i = M; --i >= 0;) ns[i+M] = ns[i] & gv[i]; - v[ss] = v[ss-1]; - } - } - } - } -} - -/***************************************************************************** -* * -* cellcliq() assigns to each vertex v a value depending on the number of * -* cliques which v lies in and which lie in the same cell as v. The size * -* of clique counted is the smallest of invararg and MAXCLIQUE. We try the * -* cells in increasing order of size and stop as soon as any cell splits. * -* * -*****************************************************************************/ - -void -cellcliq(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i; - int wt; - set *gv; - int ss,setsize; - int v[MAXCLIQUE]; - set *ns; - int *cellstart,*cellsize; - int iv,icell,bigcells,cell1,cell2; - int pc; - setword sw; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"cellcliq"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellcliq"); - DYNALLOC2(set,wss,wss_sz,m,MAXCLIQUE-1,"cellcliq"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - if (invararg <= 1 || digraph) return; - - if (invararg > MAXCLIQUE) setsize = MAXCLIQUE; - else setsize = invararg; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,setsize > 6 ? setsize : 6,&bigcells, - cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - - EMPTYSET(workset,m); - for (iv = cell1; iv <= cell2; ++iv) ADDELEMENT(workset,lab[iv]); - - for (iv = cell1; iv <= cell2; ++iv) - { - v[0] = lab[iv]; - gv = GRAPHROW(g,v[0],m); - ns = (set*)wss; - pc = 0; - - for (i = M; --i >= 0;) - { - ns[i] = gv[i] & workset[i]; - if ((sw = ns[i]) != 0) pc += POPCOUNT(sw); - } - if (pc <= 1 || pc >= cellsize[icell] - 2) continue; - - ss = 1; - v[1] = v[0]; - while (ss > 0) - { - if (ss == setsize) - { - for (i = ss; --i >= 0;) ++invar[v[i]]; - --ss; - } - else if ((v[ss] - = nextelement((set*)wss+M*(ss-1),M,v[ss])) < 0) - --ss; - else - { - ++ss; - if (ss < setsize) - { - gv = GRAPHROW(g,v[ss-1],m); - ns = (set*)wss + M*(ss-2); - for (i = M; --i >= 0;) ns[i+M] = ns[i] & gv[i]; - v[ss] = v[ss-1]; - } - } - } - } - wt = invar[lab[cell1]]; - for (iv = cell1 + 1; iv <= cell2; ++iv) - if (invar[lab[iv]] != wt) return; - } -} - -/***************************************************************************** -* * -* cellind() assigns to each vertex v a value depending on the number of * -* independent sets which v lies in and which lie in the same cell as v. * -* The size of clique counted is the smallest of invararg and MAXCLIQUE. * -* We try the cells in increasing order of size and stop as soon as any * -* cell splits. * -* * -*****************************************************************************/ - -void -cellind(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i; - int wt; - set *gv; - int ss,setsize; - int v[MAXCLIQUE]; - set *ns; - int *cellstart,*cellsize; - int iv,icell,bigcells,cell1,cell2; - int pc; - setword sw; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"cellind"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellind"); - DYNALLOC2(set,wss,wss_sz,m,MAXCLIQUE-1,"cellind"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - if (invararg <= 1 || digraph) return; - - if (invararg > MAXCLIQUE) setsize = MAXCLIQUE; - else setsize = invararg; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,setsize > 6 ? setsize : 6,&bigcells, - cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - - EMPTYSET(workset,m); - for (iv = cell1; iv <= cell2; ++iv) ADDELEMENT(workset,lab[iv]); - - for (iv = cell1; iv <= cell2; ++iv) - { - v[0] = lab[iv]; - gv = GRAPHROW(g,v[0],m); - ns = (set*)wss; - pc = 0; - - for (i = M; --i >= 0;) - { - ns[i] = ~gv[i] & workset[i]; - if ((sw = ns[i]) != 0) pc += POPCOUNT(sw); - } - if (pc <= 1 || pc >= cellsize[icell] - 2) continue; - - ss = 1; - v[1] = v[0]; - while (ss > 0) - { - if (ss == setsize) - { - for (i = ss; --i >= 0;) ++invar[v[i]]; - --ss; - } - else if ((v[ss] - = nextelement((set*)wss+M*(ss-1),M,v[ss])) < 0) - --ss; - else - { - ++ss; - if (ss < setsize) - { - gv = GRAPHROW(g,v[ss-1],m); - ns = (set*)wss + M*(ss-2); - for (i = M; --i >= 0;) ns[i+M] = ns[i] & ~gv[i]; - v[ss] = v[ss-1]; - } - } - } - } - wt = invar[lab[cell1]]; - for (iv = cell1 + 1; iv <= cell2; ++iv) - if (invar[lab[iv]] != wt) return; - } -} - -/***************************************************************************** -* * -* adjacencies() assigns to each vertex v a code depending on which cells * -* it is joined to and from, and how many times. It is intended to provide * -* better partitioning that the normal refinement routine for digraphs. * -* It will not help with undirected graphs in nauty at all. * -* * -*****************************************************************************/ - -void -adjacencies(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,v,w; - int vwt,wwt; - set *gv; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"adjacencies"); -#endif - - vwt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = vwt; - if (ptn[i] <= level) ++vwt; - invar[i] = 0; - } - - for (v = 0, gv = (set*)g; v < n; ++v, gv += M) - { - vwt = FUZZ1(workshort[v]); - wwt = 0; - w = -1; - while ((w = nextelement(gv,M,w)) >= 0) - { - ACCUM(wwt,FUZZ2(workshort[w])); - ACCUM(invar[w],vwt); - } - ACCUM(invar[v],wwt); - } -} - -/***************************************************************************** -* * -* nautinv_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -nautinv_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in nautinv.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in nautinv.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in nautinv.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: nautinv.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* nautinv_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -nautinv_freedyn(void) -{ -#if !MAXN - DYNFREE(workset,workset_sz); - DYNFREE(workshort,workshort_sz); - DYNFREE(ws1,ws1_sz); - DYNFREE(ws2,ws2_sz); - DYNFREE(vv,vv_sz); - DYNFREE(ww,ww_sz); - DYNFREE(w01,w01_sz); - DYNFREE(w02,w02_sz); - DYNFREE(w03,w03_sz); - DYNFREE(w12,w12_sz); - DYNFREE(w13,w13_sz); - DYNFREE(w23,w23_sz); - DYNFREE(pt0,pt0_sz); - DYNFREE(pt1,pt1_sz); - DYNFREE(pt2,pt2_sz); - DYNFREE(wss,wss_sz); -#endif -} - -/*===================================================================*/ - - -/***************************************************************************** -* * -* semirefine(g,lab,ptn,level,numcells,strength,active,m,n) performs a * -* refinement operation on the partition at the specified level of the * -* partition nest (lab,ptn). *numcells is assumed to contain the number of * -* cells on input, and is updated. The initial set of active cells (alpha * -* in the paper) is specified in the set active. Precisely, x is in active * -* iff the cell starting at index x in lab is active. * -* *code is set to a value which depends on the fine detail of the * -* algorithm, but which is independent of the labelling of the graph. * -* * -*****************************************************************************/ - -static int -semirefine(graph *g, int *lab, int *ptn, int level, int *numcells, - int strength, set *active, int m, int n) -{ - int i,c1,c2,labc1; - setword x; - set *set1,*set2; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - long longcode; - set *gptr; - int maxcell,maxpos,hint; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"refine"); - DYNALLOC1(set,workset,workset_sz,m,"refine"); - DYNALLOC1(int,bucket,bucket_sz,n+2,"refine"); - DYNALLOC1(int,count,count_sz,n,"refine"); -#endif - - longcode = *numcells; - split1 = -1; - hint = 0; - while (*numcells < n && ((split1 = hint, ISELEMENT(active,split1)) - || (split1 = nextelement(active,M,split1)) >= 0 - || (split1 = nextelement(active,M,-1)) >= 0)) - { - DELELEMENT(active,split1); - for (split2 = split1; ptn[split2] > level; ++split2) {} - longcode = MASH(longcode,split1+split2); - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],M); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = level; - longcode = MASH(longcode,FUZZ1(c2)); - ++*numcells; - if (ISELEMENT(active,cell1) || c2-cell1 >= cell2-c1) - { - ADDELEMENT(active,c1); - if (c1 == cell2) hint = c1; - } - else - { - ADDELEMENT(active,cell1); - if (c2 == cell1) hint = cell1; - } - } - } - } - else /* nontrivial splitting cell */ - { - EMPTYSET(workset,m); - for (i = split1; i <= split2; ++i) - ADDELEMENT(workset,lab[i]); - longcode = MASH(longcode,FUZZ2(split2-split1+1)); - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - set1 = workset; - set2 = GRAPHROW(g,lab[i],m); - cnt = 0; - for (c1 = m; --c1 >= 0;) - if ((x = (*set1++) & (*set2++)) != 0) - cnt += POPCOUNT(x); - - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - set1 = workset; - set2 = GRAPHROW(g,lab[i],m); - cnt = 0; - for (c1 = m; --c1 >= 0;) - if ((x = (*set1++) & (*set2++)) != 0) - cnt += POPCOUNT(x); - - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) - { - longcode = MASH(longcode,FUZZ1(bmin+cell1)); - continue; - } - c1 = cell1; - maxcell = -1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - longcode = MASH(longcode,i+c1); - if (c2-c1 > maxcell) - { - maxcell = c2-c1; - maxpos = c1; - } - if (c1 != cell1) - { - ADDELEMENT(active,c1); - if (c2-c1 == 1) hint = c1; - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = level; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) lab[i] = workperm[i]; - if (!ISELEMENT(active,cell1)) - { - ADDELEMENT(active,cell1); - DELELEMENT(active,maxpos); /* check maxpos is alwas defined */ - } - } - } - if (--strength == 0) break; /* negative is fine! */ - } - - longcode = MASH(longcode,FUZZ2(*numcells)); - return CLEANUP(longcode); -} - -void -refinvar(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,j; - int wt; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - int newnumcells; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"refinvar"); - DYNALLOC1(int,vv,vv_sz,n,"refinvar"); - DYNALLOC1(int,ww,ww_sz,n,"refinvar"); - DYNALLOC1(set,ws1,ws1_sz,n,"refinvar"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,2,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (i = cell1; i <= cell2; ++i) - { - for (j = 0; j < n; ++j) - { - vv[j] = lab[j]; - ww[j] = ptn[j]; - } - newnumcells = numcells + 1; - ww[cell1] = level; - EMPTYSET(ws1,m); - ADDELEMENT(ws1,cell1); - vv[i] = lab[cell1]; - vv[cell1] = lab[i]; - invar[lab[i]] = semirefine(g,vv,ww,level,&newnumcells, - invararg,ws1,m,n); - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} diff --git a/tools/nauty25r9_unix/nautinv.h b/tools/nauty25r9_unix/nautinv.h deleted file mode 100644 index 738d8c2..0000000 --- a/tools/nauty25r9_unix/nautinv.h +++ /dev/null @@ -1,42 +0,0 @@ -/***************************************************************************** -* This is the header file for versions 2.5 of nautinv.c. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 20-Apr-01 : initial creation out of naututil.h * -* 10-Nov-10 : remove types shortish and permutation * -* * -*****************************************************************************/ - -#include "nauty.h" /* which includes stdio.h */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void adjacencies(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void adjtriang(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellcliq(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellfano(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellfano2(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellind(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellquads(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellquins(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void celltrips(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellstarts(int*,int,set*,int,int); -extern void cliques(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void distances(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void getbigcells(int*,int,int,int*,int*,int*,int); -extern void indsets(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void nautinv_check(int,int,int,int); -extern void nautinv_freedyn(void); -extern void quadruples(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void refinvar(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void setnbhd(graph*,int,int,set*,set*); -extern void triples(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void twopaths(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -#ifdef __cplusplus -} -#endif diff --git a/tools/nauty25r9_unix/nautinv.o b/tools/nauty25r9_unix/nautinv.o deleted file mode 100644 index f6dc8105f5284c12d07c9a13c5e3ed3131690af9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60808 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 T_MFaz0oQ4z&z)Y>uz6-6N;ko~>qV{&qntKD^< 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 v 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 E2L`d9*#H0l diff --git a/tools/nauty25r9_unix/naututil-h.in b/tools/nauty25r9_unix/naututil-h.in deleted file mode 100644 index c618bdb..0000000 --- a/tools/nauty25r9_unix/naututil-h.in +++ /dev/null @@ -1,278 +0,0 @@ -/***************************************************************************** -* This is the header file for versions 2.5 of naututil.c and dreadnaut.c. * -* @configure_input@ -*****************************************************************************/ - -/* The parts between the ==== lines are modified by configure when -creating naututil.h out of naututil-h.in. If configure is not being -used, it is necessary to check they are correct. -====================================================================*/ - -/* Check whether various headers are available */ - -#define HAVE_ISATTY @have_isatty@ /* if isatty() is available */ -#define HAVE_TIMES @have_times@ /* if times() is available */ -#define HAVE_TIME @have_time@ /* if time() is available */ -#define HAVE_GETRUSAGE @have_getrusage@ /* if getrusage() is available */ -#define HAVE_GETTIMEOFDAY @have_gettimeofday@ /* if gettimeofday() */ - -/*==================================================================*/ - -/***************************************************************************** -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : changes for version 1.3 : * -* - added declarations of readinteger() and readstring() * -* - added definition of DEFEXT : default file-name * -* extension for dreadnaut input files * -* 28-Sep-88 : changes for version 1.4 : * -* - added support for PC Turbo C * -* 29-Nov-88 : - added getc macro for AZTEC C on MAC * -* 23-Mar-89 : changes for version 1.5 : * -* - added DREADVERSION macro * -* - added optional ANSI function prototypes * -* - changed file name to naututil.h * -* - moved ALLOCS to nauty.h and defined DYNALLOC * -* 25-Mar-89 : - added declaration of twopaths() * -* 29-Mar-89 : - added declaration of putmapping() * -* 4-Apr-89 : - added declarations of triples, quadruples, adjtriang * -* - only define ERRFILE if not in nauty.h * -* 25-Apr-89 : - added declarations of cellquads,distances,getbigcells * -* 26-Apr-89 : - added declarations of indsets,cliques,cellquins * -* - removed declarations of ptncode and equitable * -* 27-Apr-89 : - added declaration of putquotient * -* 18-Aug-89 : - added new arg to putset, and changed mathon * -* 2-Mar-90 : - added declarations of celltrips, cellcliq, cellind * -* - changed declarations to use EXTPROC * -* 12-Mar-90 : - added changes for Cray version * -* 20-Mar-90 : - added changes for THINK version * -* 27-Mar-90 : - split SYS_MSDOS into SYS_PCMS4 and SYS_PCMS5 * -* 13-Oct-90 : changes for version 1.6 : * -* - changed CPUTIME to use HZ on Unix for times() * -* 14-Oct-90 : - added SYS_APOLLO variant * -* 19-Oct-90 : - changed CPUTIME defs for BSDUNIX to avoid conficting * -* declarations of size_t and ptrdiff_t in gcc * -* 27-Aug-92 : changes for version 1.7 : * -* - added SYS_IBMC variant * -* - removed workaround for bad gcc installation * -* 5-Jun-93 : changes for version 1.8 : * -* - changed CRAY version of CPUTIME to use CLK_TCK * -* if HZ could not be found (making 1.7+) * -* 30-Jul-93 : - added SYS_ALPHA variant * -* 17-Sep-93 : changes for version 1.9 : * -* - declared adjacencies() * -* 24-Feb-94 : changes for version 1.10 : * -* - added version SYS_AMIGAAZT (making 1.9+) * -* 19-Apr-95 : - added C++ prototype wrapper * -* 6-Mar-96 : - added SYS_ALPHA32 code * -* 23-Jul-96 : changes for version 2.0 : * -* - changed readstring() declaration * -* - removed DYNALLOC definition * -* - added sublabel() definition * -* 15-Aug-96 : - added sethash() definition * -* 30-Aug-96 : - added KRAN and D. Knuth routines * -* 16-Sep-96 : - fixed the above! * -* 7-Feb-96 : - declared nautinv_null() and setnbhd() * -* 4-Sep-97 : - arg of time() is type time_t*, was long* * -* 22-Sep-97 : - defined fileno() and time_t for SYS_PCTURBO * -* 10-Dec-97 : - revised KRAN for new rng.c from Knuth * -* 18-Feb-98 : - changed time() to time_t for Unix * -* 21-Oct-98 : - changed short to shortish as needed * -* 9-Jan-00 : - declared nautinv_check() and naututil_check() * -* 16-Nov-00 : - applied changes logged in nauty.h * -* 22-Apr-01 : changes for version 2.1 : * -* - prototypes for nautinv.c are now in nautinv.h * -* - CPUTIME for UNIX uses CLK_TCK (needs revision!) * -* 2-Jun-01 : - prototype for converse() * -* 18-Oct-01 : - complete revision; sysdeps in separate files * -* 28-Aug-02 : changes for version 2.2 : * -* - revised for autoconf * -* 17-Nov-02 : added explicit "extern" where it was implicit before * -* 11-Apr-02 : added rangraph2() * -* 10-Sep-07 : Define CPUTIME=0.0 for hosts that don't provide it * -* 4-Nov-09 : added readgraph_sg(), putgraph_sg(), putcanon_sg() * -* 10-Nov-09 : removed types shortish and permutation * -* 14-Nov-09 : added relabel_sg(), copy_sg(), putdegs_sg(), * -* sublabel_sg() * -* 19-Nov-09 : added individualise() * -* 20-Nov-09 : added hashgraph_sg(), listhash(), hashgraph() * -* 19-Dec-09 : added ranreg(), rangraph2_sg() * -* 5-Jun-10 : added mathon_sg() and converse_sg() * -* 10-Jun-10 : added putquotient_sg() and complement_sg() * -* 15-Jan-12 : added TLS_ATTR to static declarations * -* 3-Mar-12 : added putorbitsplus() and putset_firstbold() * -* 17-Mar-12 : include naurng.h and remove redundant lines * -* * -* @edit_msg@ -* * -*****************************************************************************/ - -#include "nauty.h" /* which includes stdio.h */ -#include "nausparse.h" -#include "naurng.h" -/* At this point we can assume that , , , - , or and if necessary have - been included if they exist. */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void complement(graph*,int,int); -extern void converse(graph*,int,int); -extern void converse_sg(sparsegraph*, sparsegraph*); -extern void copycomment(FILE*,FILE*,int); -extern void complement_sg(sparsegraph*, sparsegraph*); -extern void flushline(FILE*); -extern void fixit(int*,int*,int*,int,int); -extern int getint(FILE*); -extern long hash(set*,long,int); -extern long hashgraph(graph*,int,int,long); -extern long hashgraph_sg(sparsegraph*,long); -extern void individualise(int*,int*,int,int,int*,int*,int); -extern long listhash(int*,int,long); -extern void mathon(graph*,int,int,graph*,int,int); -extern void mathon_sg(sparsegraph*,sparsegraph*); -extern void naututil_check(int,int,int,int); -extern void naututil_freedyn(void); -extern void putcanon(FILE*,int*,graph*,int,int,int); -extern void putcanon_sg(FILE*,int*,sparsegraph*,int); -extern void putdegs(FILE*,graph*,int,int,int); -extern void putdegs_sg(FILE*,sparsegraph*,int); -extern void putgraph(FILE*,graph*,int,int,int); -extern void putgraph_sg(FILE*,sparsegraph*,int); -extern void putmapping(FILE*,int*,int,int*,int,int,int); -extern void putorbits(FILE*,int*,int,int); -extern void putorbitsplus(FILE*,int*,int,int); -extern void putptn(FILE*,int*,int*,int,int,int); -extern void putquotient(FILE*,graph*,int*,int*,int,int,int,int); -extern void putquotient_sg(FILE*,sparsegraph*,int*,int*,int,int); -extern void putset(FILE*,set*,int*,int,int,boolean); -extern void putset_firstbold(FILE*,set*,int*,int,int,boolean); -extern void rangraph(graph*,boolean,int,int,int); -extern void rangraph2(graph*,boolean,int,int,int,int); -extern void rangraph2_sg(sparsegraph*,boolean,int,int,int); -extern void ranreg_sg(sparsegraph *sg, int degree, int n); -extern void ranperm(int*,int); -extern void readgraph(FILE*,graph*,boolean,boolean,boolean,int,int,int); -extern void readgraph_sg(FILE*,sparsegraph*,boolean,boolean,int,int); -extern boolean readinteger(FILE*,int*); -extern void readperm(FILE*,int*,boolean,int); -extern void readptn(FILE*,int*,int*,int*,boolean,int); -extern void readvperm(FILE*,int*,boolean,int,int*); -extern boolean readstring(FILE*,char*,int); -extern void relabel(graph*,int*,int*,graph*,int,int); -extern void relabel_sg(sparsegraph*,int*,int*,sparsegraph*); -extern long sethash(set*,int,long,int); -extern int setinter(set*,set*,int); -extern int setsize(set*,int); -extern void sublabel(graph*,int*,int,graph*,int,int); -extern void sublabel_sg(sparsegraph*,int*,int,sparsegraph*); -extern void unitptn(int*,int*,int*,int); - -#ifdef __cplusplus -} -#endif - -#define MAXREG 8 /* Used to limit ranreg_sg() degree */ - -#define PROMPTFILE stdout /* where to write prompts */ -#ifndef ERRFILE -#define ERRFILE stderr /* where to write error messages */ -#endif -#define MAXIFILES 10 /* how many input files can be open at once */ -#define EXIT exit(0) /* how to stop normally */ -#define DEFEXT ".dre" /* extension for dreadnaut files */ - -/************************************************************************* - The following macros may represent differences between system. This - file contains the UNIX/POSIX editions. For other systems, a separate - file of definitions is read in first. That file should define the - variables NAUTY_*_DEFINED for sections that are to replace the UNIX - versions. See the provided examples for more details. - - If your system does not have a predefined macro you can use to cause - a definitions file to be read, you have to make up one and arrange for - it to be defined when this file is read. - - The system-dependent files can also redefine the macros just ahead of - this comment. -**************************************************************************/ - -#ifdef __weirdmachine__ -#include "weird.h" /* Some weird machine (ILLUSTRATION ONLY) */ -#endif - -/*************************************************************************/ - -#ifndef NAUTY_PROMPT_DEFINED -#if HAVE_ISATTY -#define DOPROMPT(fp) (isatty(fileno(fp)) && isatty(fileno(PROMPTFILE))) -#else -#define DOPROMPT(fp) (curfile==0) -#endif -#endif /*NAUTY_PROMPT_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_OPEN_DEFINED -#define OPENOUT(fp,name,append) fp = fopen(name,(append)?"a":"w") -#endif /*NAUTY_OPEN_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_CPU_DEFINED -#if HAVE_TIMES -#include -#define CPUDEFS static TLS_ATTR struct tms timebuffer; -#ifndef CLK_TCK -#include -#endif -#if !defined(CLK_TCK) && defined(_SC_CLK_TCK) -#define CLK_TCK sysconf(_SC_CLK_TCK) -#endif -#ifndef CLK_TCK -#define CLK_TCK 60 -#endif -#define CPUTIME (times(&timebuffer),\ - (double)(timebuffer.tms_utime + timebuffer.tms_stime) / CLK_TCK) -#else -#if HAVE_GETRUSAGE -#include -#include -#define CPUDEFS struct rusage ruse; -#define CPUTIME (getrusage(RUSAGE_SELF,&ruse),\ - ruse.ru_utime.tv_sec + ruse.ru_stime.tv_sec + \ - 1e-6 * (ruse.ru_utime.tv_usec + ruse.ru_stime.tv_usec)) -#endif -#endif - -#ifndef CPUTIME -#define CPUTIME 0.0 -#endif - -#endif /*NAUTY_CPU_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_SEED_DEFINED -#if HAVE_GETTIMEOFDAY -#include -#define INITSEED \ -{struct timeval nauty_tv; \ - struct timezone nauty_tz; \ - gettimeofday(&nauty_tv,&nauty_tz); \ - seed = ((nauty_tv.tv_sec<<10) + (nauty_tv.tv_usec>>10)) & 0x7FFFFFFFL;} -#else -#if HAVE_TIME -#include -#define INITSEED seed = ((time((time_t*)NULL)<<1) | 1) & 0x7FFFFFFFL -#endif -#endif -#endif /*NAUTY_SEED_DEFINED*/ - -/* @edit_msg@ */ diff --git a/tools/nauty25r9_unix/naututil.c b/tools/nauty25r9_unix/naututil.c deleted file mode 100644 index 34ef062..0000000 --- a/tools/nauty25r9_unix/naututil.c +++ /dev/null @@ -1,2714 +0,0 @@ -/***************************************************************************** -* * -* miscellaneous utilities for use with nauty 2.5. * -* None of these procedures are needed by nauty, but all are by dreadnaut. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : changes made for version 1.3 : * -* - added procedures readinteger() and readstring() * -* - replaced all uses of fscanf() by appropriate uses * -* of readinteger() or readstring() * -* - "N:" is now illegal in readgraph() if N is too large * -* or too small * -* 28-Sep-88 : renamed to version 1.4 (no changes to this file) * -* 23-Mar-89 : changes for version 1.5 : * -* - declared key in hash() * -* - changed file name to naututil.c * -* 29-Mar-89 : - declared workperm[] and workset[], and modified * -* many routines to use them. * -* - added putmapping() * -* - reworked some code in mathon() and rangraph() * -* 3-Apr-89 : - changed putorbits() to use O(n) algorithm * -* 5-Apr-89 : - modifed readgraph() to not require fresh line * -* - changed MAKEEMPTY uses to EMPTYSET uses * -* 26-Apr-89 : - moved ptncode() and equitable() to nautaux.c * -* - added putquotient() * -* 18-Aug-89 : - modified putset() to use "i:j" syntax optionally * -* - modified putorbits() to use putset() * -* - modified calling sequence for mathon() * -* 19-Aug-90 : - changed delimeter arg of copycomment to int * -* 14-Oct-90 : renamed to version 1.6 (no changes to this file) * -* 23-Jan-91 : changes for version 1.7 : * -* - fixed bug in complement() * -* 27-Aug-92 : - made linelength <= 0 mean no line breaks * -* 5-Jun-93 : renamed to version 1.7+ (no changes to this file) * -* 18-Aug-93 : renamed to version 1.8 (no changes to this file) * -* 17-Sep-93 : renamed to version 1.9 (no changes to this file) * -* 13-Jul-96 : changes for version 2.0 : * -* - added dynamic allocation * -* - added limit parameter to readstring * -* - added readvperm() and sublabel() * -* 31-Aug-96 : - converted from RAN to KRAN * -* 6-Feb-97 : - corrected DYNALLOC1 call in putmapping * -* 10-Dec-97 : - KRAN now initialises automatically * -* 9-Jan-00 : - added naututil_check() * -* 12-Feb-00 : - some minor code formatting * -* 16-Nov-00 : - changes as listed in nauty.h * -* 23-Apr-01 : changes for version 2.1 : * -* - removed EXTDEFS * -* 2-Jun-01 : - added converse() * -* 21-Nov-01 : use NAUTYREQUIRED in naututil_check() * -* 11-Apr-03 : changes for version 2.2 : * -* - added rangraph2() * -* 17-Nov-03 : changed INFINITY to NAUTY_INFINITY * -* 10-Dec-06 : removed BIGNAUTY * -* 4-Nov-09 : added readgraph_sg, putgraph_sg, putcanon_sg * -* 10-Nov-09 : removed shortish and permutation types * -* 14-Nov-09 : added relabel_sg(), putdegs_sg(), sublabel_sg() * -* 19-Nov-09 : added individualise() * -* 20-Nov-09 : added hashgraph_sg(), listhash(), hashgraph() * -* 19-Dec-09 : added ranreg_sg(), rangraph2_sg() * -* 21-May-10 : conform to type changes in sparsegraph * -* 5-Jun-10 : add mathon_sg() * -* 10-Jun-10 : add putquotient_sg() and complement_sg() * -* 26-Jan-11 : fix nde error in sublabel_sg() * -* 15-Jan-12 : add TLS_ATTR attributes * -* 3-Mar-12 : add putorbitsplus() and putset_firstbold() * -* : write orbit sizes if not trivial * -* 17-Mar-12 : move seed definition to naututil.h * -* 20-Sep-12 : allow quoted strings in readstring() * -* 20-Sep-12 : the first argument of ungetc is int, not char * -* * -*****************************************************************************/ - -#define ONE_WORD_SETS -#include "naututil.h" /* which includes nauty.h, nautinv.h and stdio.h */ -#include "nausparse.h" - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#if !MAXN -DYNALLSTAT(int,workperm,workperm_sz); -DYNALLSTAT(set,workset,workset_sz); -#else -static TLS_ATTR int workperm[MAXN+2]; /* used for scratch purposes */ -static TLS_ATTR set workset[MAXM]; /* used for scratch purposes */ -#endif - -#define ECHUNKSIZE 1000 /* should be even */ -typedef struct echunk {struct echunk *next; int edge[2*ECHUNKSIZE];} echunk; -static TLS_ATTR echunk first_echunk = {NULL,{0}}; - -#ifdef NLMAP -#define GETNW(c,f) do c = getc(f); while (c==' '||c=='\t') -#define GETNWC(c,f) do c = getc(f); while (c==' '||c==','||c=='\t') -#define GETNWL(c,f) do c = getc(f); while (c==' '||c=='\n'||c=='\t') -#else -#define GETNW(c,f) do c = getc(f); while (c==' '||c=='\t'||c=='\r') -#define GETNWC(c,f) do c = getc(f); while (c==' '||c==','||c=='\t'||c=='\r') -#define GETNWL(c,f) do c = getc(f); while (c==' '||c=='\n'||c=='\t'||c=='\r') -#endif - -#define ISDIGIT(c) ((c) >= '0' && (c) <= '9') - -static const long fuzz1[] = {1984625421L, 971524688L,1175081625L, 377165387L}; -static const long fuzz2[] = {2001381726L,1615243355L, 191176436L,1212176501L}; -#define FUZZ1(x) ((x) ^ fuzz1[(x)&3L]) -#define FUZZ2(x) ((x) ^ fuzz2[(x)&3L]) - - -/***************************************************************************** -* * -* setinter(set1,set2,m) = the number of elements in the intersection of * -* the sets set1 and set2. * -* * -*****************************************************************************/ - -int -setinter(set *set1, set *set2, int m) -{ - setword x; - -#if MAXM==1 - if ((x = *set1 & *set2) != 0) return POPCOUNT(x); - else return 0; -#else - int count,i; - - count = 0; - for (i = m; --i >= 0;) - if ((x = (*set1++) & (*set2++)) != 0) count += POPCOUNT(x); - - return count; -#endif -} - -/***************************************************************************** -* * -* setsize(set1,m) = the number of elements in the set set1. * -* * -*****************************************************************************/ - -int -setsize(set *set1, int m) -{ - -#if MAXM==1 - if (set1 != 0) return POPCOUNT(*set1); - else return 0; -#else - int count,i; - setword x; - - count = 0; - for (i = m; --i >= 0;) - if ((x = *set1++) != 0) count += POPCOUNT(x); - - return count; -#endif -} - -/***************************************************************************** -* * -* flushline(f) reads from f until '\n' or EOF. * -* If non-trivial characters are skipped, the user is informed. * -* * -*****************************************************************************/ - -void -flushline(FILE *f) -{ - boolean msg; - int c; - - msg = FALSE; - - while ((c = getc(f)) != EOF && c != '\n') - if (msg) - PUTC((char)c,ERRFILE); - else if (c != ' ' && c != '\t' && c != '\f' && - c != '\r' && c != ',') - { - msg = TRUE; - fprintf(ERRFILE,"input skipped : '%c",(char)c); - } - if (msg) fprintf(ERRFILE,"'\n\n"); -} - -/***************************************************************************** -* * -* readinteger(f,&i) reads an optionally-signed integer from f, preceded by * -* any amount of white space. The function value returned is TRUE if an * -* integer was found, FALSE otherwise. * -* * -*****************************************************************************/ - -boolean -readinteger(FILE *f, int *p) -{ - int c,ans,minus; - - GETNWL(c,f); - if (!ISDIGIT(c) && c != '-' && c != '+') - { - if (c != EOF) ungetc(c,f); - return FALSE; - } - - minus = c == '-'; - ans = (c == '-' || c == '+' ? 0 : c - '0'); - - c = getc(f); - while (ISDIGIT(c)) - { - ans *= 10; - ans += c - '0'; - c = getc(f); - } - - if (c != EOF) ungetc(c,f); - - *p = (minus ? -ans : ans); - return TRUE; -} - -/***************************************************************************** -* * -* readstring(f,s,slen) reads a string from f. First any amount of white * -* space is skipped (including newlines). If the next character is a * -* double-quote, everything after that before the next double-quote or * -* newline is put into s. If the next character is not a double-quote, * -* everything before the next white space is put into s. A nul is added, * -* but no more than slen characters are ever put into s. The function * -* value is TRUE if a string was found and FALSE otherwise. * -* * -*****************************************************************************/ - -boolean -readstring(FILE *f, char *s, int slen) -{ - int c; - char *slim; - - slim = s + slen - 1; - GETNWL(c,f); - if (c == EOF) - { - *s = '\0'; - return FALSE; - } - - if (c == '"') - { - c = getc(f); - while (c != '"' && c != '\n' && c != '\r' && c != EOF) - { - if (s <= slim) *s++ = c; - c = getc(f); - } - if (c != '"' && c != EOF) ungetc(c,f); - } - else - { - if (s <= slim) *s++ = c; - c = getc(f); - while (c != ' ' && c != '\n' && c != '\t' && c != '\r' && c != EOF) - { - if (s <= slim) *s++ = c; - c = getc(f); - } - if (c != EOF) ungetc(c,f); - } - if (s <= slim) *s = '\0'; - else *slim = '\0'; - - return TRUE; -} - -/***************************************************************************** -* * -* getint(f) reads an integer from f, optionally preceded by '=' * -* and white space. -1 is returned if the attempt was unsuccessful. * -* * -*****************************************************************************/ - -int -getint(FILE *f) -{ - int i,c; - - GETNWL(c,f); - if (c != '=') ungetc(c,f); - - if (readinteger(f,&i)) return i; - else return -1; -} - -/***************************************************************************** -* * -* putset(f,set1,curlenp,linelength,m,compress) writes the set set1 to * -* file f using at most linelength characters per line (excluding '\n'). * -* A value of linelength <= 0 dictates no line breaks at all. * -* *curlenp is the number of characters on the line so far; it is updated. * -* A range j1,j1+1,...,j2 for j2-j1>=2 is written as "j1:j2" if compress * -* is nonzero (eg. TRUE); otherwise each element is written separately. * -* No final '\n' is written. labelorg is used. * -* * -* FUNCTIONS CALLED: nextelement(),itos() * -* * -*****************************************************************************/ - -void -putset(FILE *f, set *set1, int *curlenp, int linelength, - int m, boolean compress) -{ - int slen,j1,j2; - char s[40]; - - j1 = -1; - while ((j1 = nextelement(set1,m,j1)) >= 0) - { - j2 = j1; - if (compress) - { - while (nextelement(set1,m,j2) == j2 + 1) ++j2; - if (j2 == j1+1) j2 = j1; - } - slen = itos(j1+labelorg,s); - if (j2 >= j1 + 2) - { - s[slen] = ':'; - slen += 1 + itos(j2+labelorg,&s[slen+1]); - } - - if (linelength > 0 && *curlenp + slen + 1 >= linelength) - { - fprintf(f,"\n "); - *curlenp = 3; - } - fprintf(f," %s",s); - *curlenp += slen + 1; - j1 = j2; - } -} - -/***************************************************************************** -* * -* putset_firstbold(f,set1,curlenp,linelength,m,compress) is the same as * -* putset(f,set1,curlenp,linelength,m,compress) except that the first * -* element of the set is written bold. This is only useful when output is * -* to a device that interprets ANSI control sequences. * -* * -* FUNCTIONS CALLED: nextelement(),itos() * -* * -*****************************************************************************/ - -void -putset_firstbold(FILE *f, set *set1, int *curlenp, int linelength, - int m, boolean compress) -{ - int slen,slen1,j1,j2; - char s[50],c; - boolean bold; - - bold = TRUE; - j1 = -1; - while ((j1 = nextelement(set1,m,j1)) >= 0) - { - j2 = j1; - if (compress) - { - while (nextelement(set1,m,j2) == j2 + 1) ++j2; - if (j2 == j1+1) j2 = j1; - } - slen1 = slen = itos(j1+labelorg,s); - if (j2 >= j1 + 2) - { - s[slen] = ':'; - slen += 1 + itos(j2+labelorg,&s[slen+1]); - } - c = s[slen1]; - - if (linelength > 0 && *curlenp + slen + 1 >= linelength) - { - fprintf(f,"\n "); - *curlenp = 3; - } - if (bold) - { - s[slen1] = '\0'; - fprintf(f," \033[1m%s\033[0m",s); - s[slen1] = c; - fprintf(f,"%s",&s[slen1]); - bold = FALSE; - } - else - fprintf(f," %s",s); - - *curlenp += slen + 1; - j1 = j2; - } -} - -/***************************************************************************** -* * -* readgraph(f,g,digraph,prompt,edit,linelength,m,n) reads a graph g from f. * -* Commands: (There is always a "current vertex" v, initially labelorg; * -* n is an unsigned integer.) * -* n : add edge (v,n) * -* -n : delete edge (v,n) * -* n: : set v := n, and exit if v >= n. * -* ? : type neighbours of vertex v * -* ; : increment v, and exit if v >= n. * -* . : exit * -* ! : skip rest of input line * -* * -* If digraph==FALSE, loops are illegal and (x,y) => (y,x) * -* If edit==FALSE, the graph is initialized to empty. * -* If prompt==TRUE, prompts are written to PROMPTFILE. * -* linelength is a limit on the number of characters per line caused by '?' * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED : putset() * -* * -*****************************************************************************/ - -void -readgraph(FILE *f, graph *g, boolean digraph, boolean prompt, - boolean edit, int linelength, int m, int n) -{ - int v,c; - int curlen,w; - graph *gv; - boolean neg; - - if (!edit) - for (v = 0, gv = g; v < n; ++v, gv += M) EMPTYSET(gv,m); - - v = 0; - gv = g; - neg = FALSE; - - while (TRUE) - { - GETNWC(c,f); - if (ISDIGIT(c)) - { - ungetc(c,f); - readinteger(f,&w); - w -= labelorg; - if (neg) - { - neg = FALSE; - if (w < 0 || w >= n || (!digraph && w == v)) - fprintf(ERRFILE,"illegal edge (%d,%d) ignored\n\n", - v+labelorg,w+labelorg); - else - { - DELELEMENT(gv,w); - if (!digraph) DELELEMENT(GRAPHROW(g,w,M),v); - } - } - else - { - GETNWC(c,f); - if (c == ':') - if (w < 0 || w >= n) - fprintf(ERRFILE, - "illegal vertex number %d ignored\n\n", - w+labelorg); - else - { - v = w; - gv = GRAPHROW(g,v,M); - } - else - { - ungetc(c,f); - if (w < 0 || w >= n || (!digraph && w == v)) - fprintf(ERRFILE,"illegal edge (%d,%d) ignored\n\n", - v+labelorg,w+labelorg); - else - { - ADDELEMENT(gv,w); - if (!digraph) ADDELEMENT(GRAPHROW(g,w,M),v); - } - } - } - } - else switch(c) - { - case ';': - neg = FALSE; - ++v; - if (v >= n) return; - gv = GRAPHROW(g,v,M); - break; - case '?': - neg = FALSE; - fprintf(PROMPTFILE,"%2d : ",v+labelorg); - curlen = 5; - putset(PROMPTFILE,gv,&curlen,linelength,M,FALSE); - fprintf(PROMPTFILE,";\n"); - break; - case '\n': - neg = FALSE; - if (prompt) fprintf(PROMPTFILE,"%2d : ",v+labelorg); - break; - case EOF: - case '.': - return; - case '-': - neg = TRUE; - break; - case '!': - do - c = getc(f); - while (c != '\n' && c != EOF); - if (c == '\n') ungetc(c,f); - break; - default : - fprintf(ERRFILE,"illegal char '%c' - use '.' to exit\n\n", - (char)c); - } - } -} - -/**************************************************************************/ - -void -ranreg_sg(sparsegraph *sg, int degree, int n) -/* Make a random regular simple undirected graph. - * For MAXN!=0, the maximum degree is MAXREG. - * sg must be initialised - */ -{ - long i,k,v,w; - boolean ok; - int *dd,*ee; - size_t *vv,nde,j; - -#if MAXN - int p[MAXREG*MAXN]; -#else - DYNALLSTAT(int,p,p_sz); - - DYNALLOC2(int,p,p_sz,degree,n,"genrang"); -#endif - - nde = (size_t)n * (size_t)degree; - - SG_ALLOC(*sg,n,nde,"ranreg_sg"); - SG_VDE(sg,vv,dd,ee); - if (sg->w) - { - FREES(sg->w); - sg->w = NULL; - sg->wlen = 0; - } - - sg->nv = n; - sg->nde = nde; - - for (i = j = 0; i < n; ++i) - for (k = 0; k < degree; ++k) p[j++] = i; - - for (i = 0; i < n; ++i) vv[i] = i*(size_t)degree; - - do - { - ok = TRUE; - - for (j = nde; j > 0; j -= 2) - { - i = KRAN(j-1); - k = p[i]; - if (k == p[j-1]) break; - p[i] = p[j-2]; p[j-2] = k; - } - if (j > 0) { ok = FALSE; continue; } - - for (i = 0; i < n; ++i) dd[i] = 0; - - for (j = nde; j > 0; ) - { - v = p[--j]; - w = p[--j]; - if (v != w) - { - for (i = dd[w]; --i >= 0;) if (ee[vv[w]+i] == v) break; - if (i >= 0) { ok = FALSE; break; } - } - ee[vv[w]+(dd[w]++)] = v; - ee[vv[v]+(dd[v]++)] = w; - } - } - while (!ok); -} - -/***************************************************************************** -* * -* readgraph_sg(f,sg,digraph,prompt,linelength,n) reads a graph g from f. * -* Commands: (There is always a "current vertex" v, initially labelorg; * -* n is an unsigned integer.) * -* n : add edge (v,n) * -* -n : delete edge (v,n) * -* n: : set v := n, and exit if v >= n. * -* ? : type neighbours of vertex v ** NOT IMPLEMENTED ** * -* ; : increment v, and exit if v >= n. * -* . : exit * -* ! : skip rest of input line * -* sg must be initialised * -* * -* If digraph==FALSE, loops are illegal and (x,y) => (y,x) * -* If prompt==TRUE, prompts are written to PROMPTFILE. * -* linelength is a limit on the number of characters per line caused by '?' * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -*****************************************************************************/ - -void -readgraph_sg(FILE *f, sparsegraph *sg, boolean digraph, boolean prompt, - int linelength, int n) -{ - int i,j,k,vv,ww,c; - boolean neg,done; - int *d,*e,*evi; - echunk *ec,*ecnext,*ec_end; - size_t ned,*v,iec,iec_end; - - sg->nv = n; - DYNALLOC1(size_t,sg->v,sg->vlen,n,"malloc"); - DYNALLOC1(int,sg->d,sg->dlen,n,"malloc"); - if (sg->w) - { - FREES(sg->w); - sg->w = NULL; - sg->wlen = 0; - } - v = sg->v; - d = sg->d; - - for (i = 0; i < n; ++i) d[i] = 0; - - ec = &first_echunk; - iec = 0; - vv = 0; - neg = done = FALSE; - - while (!done) - { - GETNWC(c,f); - if (ISDIGIT(c)) - { - ungetc(c,f); - readinteger(f,&ww); - ww -= labelorg; - if (neg) - { - neg = FALSE; - if (ww < 0 || ww >= n || (!digraph && ww == vv)) - fprintf(ERRFILE,"illegal edge (%d,%d) ignored\n\n", - vv+labelorg,ww+labelorg); - else - { - if (iec == ECHUNKSIZE) - { - if (!ec->next) - { - ecnext = (echunk*)ALLOCS(1,sizeof(echunk)); - if (!ecnext) alloc_error("malloc"); - ecnext->next = NULL; - ec->next = ecnext; - } - ec = ec->next; - iec = 0; - } - ec->edge[iec++] = vv; - ec->edge[iec++] = -1 - ww; - ++d[vv]; - if (!digraph && ww != vv) ++d[ww]; - } - } - else - { - GETNWC(c,f); - if (c == ':') - { - if (ww < 0 || ww >= n) - fprintf(ERRFILE, - "illegal vertex number %d ignored\n\n", - ww+labelorg); - else - vv = ww; - } - else - { - ungetc(c,f); - if (ww < 0 || ww >= n || (!digraph && ww == vv)) - fprintf(ERRFILE,"illegal edge (%d,%d) ignored\n\n", - vv+labelorg,ww+labelorg); - else - { - if (iec == ECHUNKSIZE) - { - if (!ec->next) - { - ecnext = (echunk*)ALLOCS(1,sizeof(echunk)); - if (!ecnext) alloc_error("malloc"); - ecnext->next = NULL; - ec->next = ecnext; - } - ec = ec->next; - iec = 0; - } - ec->edge[iec++] = vv; - ec->edge[iec++] = ww; - ++d[vv]; - if (!digraph && ww != vv) ++d[ww]; - } - } - } - } - else switch(c) - { - case ';': - neg = FALSE; - ++vv; - if (vv >= n) done = TRUE; - break; - case '?': - neg = FALSE; - fprintf(ERRFILE,"Command \'?\' not implemented.\n\n"); - break; - case '\n': - neg = FALSE; - if (prompt) fprintf(PROMPTFILE,"%2d : ",vv+labelorg); - break; - case EOF: - case '.': - done = TRUE; - break; - case '-': - neg = TRUE; - break; - case '!': - do - c = getc(f); - while (c != '\n' && c != EOF); - if (c == '\n') ungetc(c,f); - break; - default : - fprintf(ERRFILE,"illegal char '%c' - use '.' to exit\n\n", - (char)c); - } - } - - ned = 0; - for (i = 0; i < n; ++i) ned += d[i]; - DYNALLOC1(int,sg->e,sg->elen,ned,"malloc"); - e = sg->e; - - v[0] = 0; - for (i = 1; i < n; ++i) v[i] = v[i-1] + d[i-1]; - for (i = 0; i < n; ++i) d[i] = 0; - - iec_end = iec; - ec_end = ec; - - iec = 0; - ec = &first_echunk; - - if (ned != 0) while (TRUE) - { - vv = ec->edge[iec++]; - ww = ec->edge[iec++]; - - if (ww >= 0) - { - e[v[vv]+(d[vv]++)] = ww; - if (!digraph && ww != vv) e[v[ww] +(d[ww]++)] = vv; - } - else - { - ww = -1 - ww; - for (i = 0; i < d[vv]; ++i) - if (e[v[vv]+i] == ww) break; - if (i < d[vv]) - { - e[v[vv]+i] = e[v[vv]+d[vv]-1]; - --d[vv]; - } - if (!digraph && ww != vv) - { - for (i = 0; i < d[ww]; ++i) - if (e[v[ww]+i] == vv) break; - if (i < d[ww]) - { - e[v[ww]+i] = e[v[ww]+d[ww]-1]; - --d[ww]; - } - } - } - if (iec == iec_end && ec == ec_end) break; - if (iec == ECHUNKSIZE) { iec = 0; ec = ec->next; } - } - - sortlists_sg(sg); - - ned = 0; - for (i = 0; i < n; ++i) - { - if (d[i] > 1) - { - evi = e + v[i]; - j = 1; - for (k = 1; k < d[i]; ++k) - if (evi[k] != evi[j-1]) evi[j++] = evi[k]; - d[i] = j; - } - ned += d[i]; - } - sg->nde = ned; -} - -/***************************************************************************** -* * -* putgraph(f,g,linelength,m,n) writes a list of the edges of g to f * -* using at most linelength characters per line (excluding '\n'). * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED: putset() * -* * -*****************************************************************************/ - -void -putgraph(FILE *f, graph *g, int linelength, int m, int n) -{ - int i,curlen; - set *pg; - - for (i = 0, pg = g; i < n; ++i, pg += M) - { - fprintf(f,"%3d : ",i+labelorg); - curlen = 7; - putset(f,pg,&curlen,linelength,M,FALSE); - fprintf(f,";\n"); - } -} - -/***************************************************************************** -* * -* putgraph_sg(f,sg,linelength,m,n) writes a list of the edges of g to f * -* using at most linelength characters per line (excluding '\n'). * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -*****************************************************************************/ - -void -putgraph_sg(FILE *f, sparsegraph *sg, int linelength) -{ - int i,n,curlen,slen; - int *d,*e; - size_t *v,j; - char s[60]; - - n = sg->nv; - SG_VDE(sg,v,d,e); - - for (i = 0; i < n; ++i) - { - fprintf(f,"%3d : ",i+labelorg); - curlen = 7; - - for (j = v[i]; j < v[i]+d[i]; ++j) - { - slen = itos(e[j]+labelorg,s); - if (linelength > 0 && curlen + slen + 1 > linelength) - { - putstring(f,"\n "); - curlen = 2; - } - PUTC(' ',f); - putstring(f,s); - curlen += slen + 1; - } - putstring(f,";\n"); - } -} - -/***************************************************************************** -* * -* putmapping(f,lab1,org1,lab2,org2,linelength,n) writes n pairs * -* (lab1[i]+org1)-(lab2[i]+org2) to file f in increasing order of lab1[i]. * -* lab1 and lab2 are assumed to be permutations. At most linelength * -* characters (excluding '\n') are written per line. * -* A value of linelength <= 0 dictates no line breaks at all. * -* * -* FUNCTIONS CALLED: itos(),putstring() * -* * -*****************************************************************************/ - -void -putmapping(FILE *f, int *lab1, int org1,int *lab2, int org2, - int linelength, int n) -{ - int i,curlen,slen; - char s[60]; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putmapping"); -#endif - - for (i = 0; i < n; ++i) workperm[lab1[i]] = lab2[i]; - - curlen = 0; - for (i = 0; i < n; ++i) - { - slen = itos(i+org1,s); - s[slen++] = '-'; - slen += itos(workperm[i]+org2,&s[slen]); - if (linelength > 0 && curlen + slen + 1 > linelength) - { - putstring(f,"\n "); - curlen = 2; - } - PUTC(' ',f); - putstring(f,s); - curlen += slen + 1; - } - PUTC('\n',f); -} - -/***************************************************************************** -* * -* putorbits(f,orbits,linelength,n) writes the orbits to f as lists * -* of integers separated by semicolons. No more than linelength characters * -* (excluding '\n') are written per line. * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED: itos(),putset() * -* * -*****************************************************************************/ - -void -putorbits(FILE *f, int *orbits, int linelength, int n) -{ - int i,j; - int m,curlen,sz,slen; - char s[20]; - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putorbits"); - DYNALLOC1(set,workset,workset_sz,m,"putorbits"); -#endif - - for (i = n; --i >= 0;) workperm[i] = 0; - for (i = n; --i >= 0;) - if ((j = orbits[i]) < i) - { - workperm[i] = workperm[j]; - workperm[j] = i; - } - - curlen = 0; - for (i = 0; i < n; ++i) - if (orbits[i] == i) - { - sz = 0; - EMPTYSET(workset,m); - j = i; - do - { - ADDELEMENT(workset,j); - j = workperm[j]; - ++sz; - } - while (j > 0); - putset(f,workset,&curlen,linelength-1,m,TRUE); - if (sz > 1) - { - s[0] = ' '; - s[1] = '('; - slen = 2 + itos(sz,s+2); - s[slen++] = ')'; - s[slen] = '\0'; - if (linelength > 0 && curlen + slen + 1 >= linelength) - { - fprintf(f,"\n "); - curlen = 3; - } - fprintf(f,"%s",s); - curlen += slen; - } - - PUTC(';',f); - ++curlen; - } - PUTC('\n',f); -} - - -/***************************************************************************** -* * -* putorbitsplus(f,orbits,linelength,n) is the same as * -* putorbits(f,orbits,linelength,n) except that the first element of each * -* orbit is written bold. This only works if output is to a device that * -* interprets ANSI controls. * -* * -* FUNCTIONS CALLED: itos(),putset() * -* * -*****************************************************************************/ - -void -putorbitsplus(FILE *f, int *orbits, int linelength, int n) -{ - int i,j; - int m,curlen,sz,slen; - char s[20]; - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putorbits"); - DYNALLOC1(set,workset,workset_sz,m,"putorbits"); -#endif - - for (i = n; --i >= 0;) workperm[i] = 0; - for (i = n; --i >= 0;) - if ((j = orbits[i]) < i) - { - workperm[i] = workperm[j]; - workperm[j] = i; - } - - curlen = 0; - for (i = 0; i < n; ++i) - if (orbits[i] == i) - { - sz = 0; - EMPTYSET(workset,m); - j = i; - do - { - ADDELEMENT(workset,j); - j = workperm[j]; - ++sz; - } - while (j > 0); - putset_firstbold(f,workset,&curlen,linelength-1,m,TRUE); - if (sz > 1) - { - s[0] = ' '; - s[1] = '('; - slen = 2 + itos(sz,s+2); - s[slen++] = ')'; - s[slen] = '\0'; - if (linelength > 0 && curlen + slen + 1 >= linelength) - { - fprintf(f,"\n "); - curlen = 3; - } - fprintf(f,"%s",s); - curlen += slen; - } - - PUTC(';',f); - ++curlen; - } - PUTC('\n',f); -} - -/***************************************************************************** -* * -* putquotient(f,g,lab,ptn,level,linelength,m,n) writes the quotient matrix * -* of g defined by the partition at the given level. Precisely, for each * -* cell W, it writes the number w of the least vertex in W, then the size * -* of W, then the number of times w is joined FROM each cell. A complete * -* join is written as "*", while an empty join is written as "-". No more * -* than linelength characters (excluding '\n') are written per line unless * -* linelength is very small. A value of linelength <= 0 dictates no line * -* breaks at all. labelorg is used. * -* * -* FUNCTIONS CALLED: itos() * -* * -*****************************************************************************/ - -void -putquotient(FILE *f, graph *g, int *lab, int *ptn, int level, - int linelength, int m, int n) -{ - int i; - char s[50]; - int ic,curlen,v,w,cell1,cell2,numcells,jc,csize,k; - set *gw; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putquotient"); - DYNALLOC1(set,workset,workset_sz,m,"putquotient"); -#endif - - numcells = 0; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - w = lab[cell1]; - for (i = cell1 + 1; i <= cell2; ++i) - if (lab[i] < w) w = lab[i]; - workperm[numcells++] = w; - } - - for (ic = cell1 = 0; ic < numcells; ++ic, cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - EMPTYSET(workset,M); - for (i = cell1; i <= cell2; ++i) ADDELEMENT(workset,lab[i]); - v = workperm[ic]; - csize = cell2 - cell1 + 1; - if (v + labelorg < 10) - { - s[0] = ' '; - curlen = 1; - } - else - curlen = 0; - curlen += itos(v+labelorg,&s[curlen]); - s[curlen++] = '['; - curlen += itos(csize,&s[curlen]); - fprintf(f,"%s",s); - if (csize < 10) - { - fprintf(f,"] :"); - curlen += 4; - } - else - { - fprintf(f,"] :"); - curlen += 3; - } - - for (jc = 0; jc < numcells; ++jc) - { - w = workperm[jc]; - gw = GRAPHROW(g,w,m); - k = setinter(gw,workset,M); - if (k == 0 || k == csize) - { - if (linelength > 0 && curlen + 2 > linelength) - { - fprintf(f,"\n "); - curlen = 4; - } - if (k == 0) fprintf(f," -"); - else fprintf(f," *"); - curlen += 2; - } - else - { - i = itos(k,s); - if (linelength > 0 && curlen + i + 1 > linelength) - { - fprintf(f,"\n "); - curlen = 4; - } - fprintf(f," %s",s); - curlen += i + 1; - } - } - fprintf(f,"\n"); - } -} - -/***************************************************************************** -* * -* putquotient_sg(f,g,lab,ptn,level,linelength) writes the quotient matrix * -* of g defined by the partition at the given level. Precisely, for each * -* cell W, it writes the number w of the least vertex in W, then the size * -* of W, then the number of times w is joined FROM each cell. A complete * -* join is written as "*", while an empty join is written as "-". No more * -* than linelength characters (excluding '\n') are written per line unless * -* linelength is very small. A value of linelength <= 0 dictates no line * -* breaks at all. labelorg is used. * -* * -* FUNCTIONS CALLED: itos() * -* * -*****************************************************************************/ - -void -putquotient_sg(FILE *f, sparsegraph *g, int *lab, int *ptn, - int level, int linelength) -{ - int i,m,n; - char s[50]; - int ic,curlen,v,w,cell1,cell2,numcells,jc,csize,k; - int *dd,*ee; - size_t *vv,j; - - n = g->nv; - m = SETWORDSNEEDED(n); - SG_VDE(g,vv,dd,ee); - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putquotient"); - DYNALLOC1(set,workset,workset_sz,m,"putquotient"); -#endif - - numcells = 0; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - w = lab[cell1]; - for (i = cell1 + 1; i <= cell2; ++i) - if (lab[i] < w) w = lab[i]; - workperm[numcells++] = w; - } - - for (ic = cell1 = 0; ic < numcells; ++ic, cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - EMPTYSET(workset,M); - for (i = cell1; i <= cell2; ++i) ADDELEMENT(workset,lab[i]); - v = workperm[ic]; - csize = cell2 - cell1 + 1; - if (v + labelorg < 10) - { - s[0] = ' '; - curlen = 1; - } - else - curlen = 0; - curlen += itos(v+labelorg,&s[curlen]); - s[curlen++] = '['; - curlen += itos(csize,&s[curlen]); - fprintf(f,"%s",s); - if (csize < 10) - { - fprintf(f,"] :"); - curlen += 4; - } - else - { - fprintf(f,"] :"); - curlen += 3; - } - - for (jc = 0; jc < numcells; ++jc) - { - w = workperm[jc]; - k = 0; - for (j = vv[w]; j < vv[w]+dd[w]; ++j) - if (ISELEMENT(workset,ee[j])) ++k; - - if (k == 0 || k == csize) - { - if (linelength > 0 && curlen + 2 > linelength) - { - fprintf(f,"\n "); - curlen = 4; - } - if (k == 0) fprintf(f," -"); - else fprintf(f," *"); - curlen += 2; - } - else - { - i = itos(k,s); - if (linelength > 0 && curlen + i + 1 > linelength) - { - fprintf(f,"\n "); - curlen = 4; - } - fprintf(f," %s",s); - curlen += i + 1; - } - } - fprintf(f,"\n"); - } -} - -/***************************************************************************** -* * -* putptn(f,lab,ptn,level,linelength,n) writes the partition at the given * -* level as sorted lists of integers separated by semicolons. No more than * -* linelength characters (excluding '\n') are written per line. * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED: itos(),putset() * -* * -*****************************************************************************/ - -void -putptn(FILE *f, int *lab, int *ptn, int level, int linelength, int n) -{ - int i; - int curlen,m; - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"putptn"); -#endif - - PUTC('[',f); - curlen = 1; - i = 0; - while (i < n) - { - EMPTYSET(workset,m); - while (TRUE) - { - ADDELEMENT(workset,lab[i]); - if (ptn[i] > level) ++i; - else break; - } - putset(f,workset,&curlen,linelength-2,m,TRUE); - if (i < n-1) - { - fprintf(f," |"); - curlen += 2; - } - ++i; - } - fprintf(f," ]\n"); -} - -/***************************************************************************** -* * -* putcanon(f,canonlab,canong,linelength,m,n) writes the label canonlab * -* and the graph canong to f, using at most linelength characters * -* (excluding '\n') per line. labelorg is used. * -* A value of linelength <= 0 dictates no line breaks at all. * -* * -* FUNCTIONS CALLED: writeperm(),putgraph() * -* * -*****************************************************************************/ - -void -putcanon(FILE *f, int *canonlab, graph *canong, int linelength, int m, int n) -{ - int i; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putcanon"); -#endif - - for (i = 0; i < n; ++i) workperm[i] = canonlab[i]; - writeperm(f,workperm,TRUE,linelength,n); - putgraph(f,canong,linelength,m,n); -} - -/***************************************************************************** -* * -* putcanon_sg(f,canonlab,canong,linelength) writes the label canonlab * -* and the graph canong to f, using at most linelength characters * -* (excluding '\n') per line. labelorg is used. * -* A value of linelength <= 0 dictates no line breaks at all. * -* * -* FUNCTIONS CALLED: writeperm(),putgraph_sg() * -* * -*****************************************************************************/ - -void -putcanon_sg(FILE *f, int *canonlab, sparsegraph *canong, int linelength) -{ - int i,n; - - n = canong->nv; -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putcanon"); -#endif - - for (i = 0; i < n; ++i) workperm[i] = canonlab[i]; - writeperm(f,workperm,TRUE,linelength,n); - putgraph_sg(f,canong,linelength); -} - -/***************************************************************************** -* * -* readptn(f,lab,ptn,&numcells,prompt,n) reads a partition from f * -* and establishes it in (lab,ptn). * -* The format can be just a number, which is fixed alone, or an arbitrary * -* partition [...|...|...]. Ranges x:y can be used. * -* labelorg is used. * -* * -*****************************************************************************/ - -void -readptn(FILE *f, int *lab, int *ptn, int *numcells, boolean prompt, int n) -{ - int i,j; - int c,v1,v2,m; - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"readptn"); -#endif - - GETNW(c,f); - if (c == '=') GETNW(c,f); - if (ISDIGIT(c)) - { - ungetc(c,f); - readinteger(f,&v1); - v1 -= labelorg; - if (v1 >= 0 && v1 < n) - fixit(lab,ptn,numcells,v1,n); - else - { - fprintf(ERRFILE,"vertex out of range (%d), fixing nothing\n\n", - v1+labelorg); - unitptn(lab,ptn,numcells,n); - } - return; - } - if (c != '[') - { - ungetc(c,f); - fprintf(ERRFILE,"illegal partition, fixing nothing\n\n"); - unitptn(lab,ptn,numcells,n); - return; - } - EMPTYSET(workset,m); - *numcells = 0; - for (i = 0; i < n; ++i) ptn[i] = NAUTY_INFINITY; - i = 0; - j = -1; - while (TRUE) - { - GETNWC(c,f); - if (ISDIGIT(c)) - { - ungetc(c,f); - readinteger(f,&v1); - v1 -= labelorg; - GETNWC(c,f); - if (c == ':') - if (!readinteger(f,&v2)) - { - fprintf(ERRFILE,"unfinished range\n\n"); - v2 = v1; - } - else - v2 -= labelorg; - else - { - ungetc(c,f); - v2 = v1; - } - while (v1 <= v2) - { - if (v1 < 0 || v1 >= n || ISELEMENT(workset,v1)) - fprintf(ERRFILE,"illegal or repeated number : %d\n\n", - v1+labelorg); - else - { - ADDELEMENT(workset,v1); - lab[++j] = v1; - } - ++v1; - } - } - else if (c == '|' || c == ']' || c == EOF) - { - if (j >= i) - { - ++*numcells; - ptn[j] = 0; - } - if (c == '|') - i = j + 1; - else if (j == n - 1) - return; - else - { - i = j + 1; - ++*numcells; - for (j = 0; j < n; ++j) - if (!ISELEMENT(workset,j)) lab[i++] = j; - ptn[n-1] = 0; - return; - } - } - else if (c == '\n') - { - if (prompt) fprintf(PROMPTFILE,"] "); - } - else - fprintf(ERRFILE,"illegal character '%c' in partition\n\n",c); - } -} - -/***************************************************************************** -* * -* unitptn(lab,ptn,&numcells,n) establishes the partition with one cell. * -* * -*****************************************************************************/ - -void -unitptn(int *lab,int *ptn, int *numcells, int n) -{ - int i; - - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = NAUTY_INFINITY; - } - ptn[n-1] = 0; - *numcells = 1; -} - -/***************************************************************************** -* * -* individualise(lab,ptn,level,v,&pos,&numcells,n) individualises vertex v. * -* numcells is updated and the position of the possibly-new singleton is * -* returned in pos. -* * -*****************************************************************************/ - -void -individualise(int *lab,int *ptn, int level, - int v, int *pos, int *numcells, int n) -{ - int i,j; - - for (i = 0; i < n; ++i) if (lab[i] == v) break; - - for (j = i; j > 0 && ptn[j-1] > level; --j) {}; - - *pos = j; - if (ptn[j] <= level) return; /* individual already */ - - lab[i] = lab[j]; - lab[j] = v; - ptn[j] = level; - ++*numcells; -} - -/***************************************************************************** -* * -* cellstarts(ptn,level,cell,m,n) sets the set cell to contain the indices * -* of the starts in ptn of the partition at level level. * -* * -*****************************************************************************/ - -void -cellstarts(int *ptn, int level, set *cell, int m, int n) -{ - int i; - - EMPTYSET(cell,m); - i = 0; - while (i < n) - { - ADDELEMENT(cell,i); - while (ptn[i] > level) ++i; - ++i; - } -} - -/***************************************************************************** -* * -* fixit(lab,ptn,&numcells,fixedvertex,n) establishes the partition * -* with one cell {fixedvertex} and all the other vertices (if any) in * -* another cell. * -* * -*****************************************************************************/ - -void -fixit(int *lab, int *ptn, int *numcells, int fixedvertex, int n) -{ - int i; - - for (i = 1; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - - lab[0] = fixedvertex; - lab[fixedvertex] = 0; - ptn[0] = 0; - ptn[n-1] = 0; - if (n == 1) *numcells = 1; - else *numcells = 2; -} - -/***************************************************************************** -* * -* sethash(s,n,seed,key) is a function whose value depends only on the * -* set s, a long seed, and an integer key. It is intended to be independent * -* of the word size provided long ints have at least 32 bits, and also * -* independent of m. n is the underlying universal set size. * -* 31 bits of seed and 15 bits of key are significant. * -* The result is in 0..2^31-1. * -* * -*****************************************************************************/ - -long -sethash(set *s, int n, long seed, int key) -{ - int i,j,lsh,rsh; - unsigned long l,res,lshmask,salt; - setword si; - - lsh = key & 0xF; - rsh = 28 - lsh; - salt = (key >> 4) & 0x7FFL; - res = seed & 0x7FFFFFFFUL; - lshmask = (1UL << lsh) - 1; - - j = 0; - for (i = 0; ; ++i) - { - si = s[i]; - l = SWCHUNK0(si); - res = (((res << lsh) ^ ((res >> rsh) & lshmask) ^ l) + salt) - & 0x7FFFFFFFUL; - res = FUZZ1(res); - if ((j += 16) >= n) break; -#if WORDSIZE > 16 - l = SWCHUNK1(si); - res = (((res << lsh) ^ ((res >> rsh) & lshmask) ^ l) + salt) - & 0x7FFFFFFFUL; - res = FUZZ1(res); - if ((j += 16) >= n) break; -#if WORDSIZE == 64 - l = SWCHUNK2(si); - res = (((res << lsh) ^ ((res >> rsh) & lshmask) ^ l) + salt) - & 0x7FFFFFFFUL; - res = FUZZ1(res); - if ((j += 16) >= n) break; - l = SWCHUNK3(si); - res = (((res << lsh) ^ ((res >> rsh) & lshmask) ^ l) + salt) - & 0x7FFFFFFFUL; - res = FUZZ1(res); - if ((j += 16) >= n) break; -#endif -#endif - } - - return res; -} - -/***************************************************************************** -* * -* listhash(x,nx,key) is a function whose value depends on the SET of values * -* in the first 'nx' entries of the array 'x', and the value of key. * -* Machine-independent if long ints have at least 32 bits, otherwise not. * -* The result is in 0..2^31-1. * -* * -*****************************************************************************/ - -long -listhash(int *x, int nx, long key) -{ - unsigned long lkey,val,accum; - int i; - - lkey = (unsigned long)key & 0x7FFFFFFFUL; - accum = nx; - - for (i = 0; i < nx; ++i) - { - val = (unsigned long)x[i] & 0x7FFFFFFFUL; - val = (val + lkey) & 0x7FFFFFFFUL; - accum += FUZZ1(val); - } - - return accum & 0x7FFFFFFFUL; -} - -/***************************************************************************** -* * -* hashgraph_sg(sg,key) is a function whose value depends on the sparse * -* graph or digraph sg. * -* Machine-independent if long ints have at least 32 bits, otherwise not. * -* The result is in 0..2^31-1. * -* * -*****************************************************************************/ - -long -hashgraph_sg(sparsegraph *sg, long key) -{ - int n,i; - int *d,*e; - size_t *v; - unsigned long val,accum; - - accum = n = sg->nv; - - SG_VDE(sg,v,d,e); - - for (i = 0; i < n; ++i) - if (d[i] == 0) - accum += FUZZ1(i); - else - { - accum = (accum>>7) | ((accum<<24)&0x7FFFFFFFUL); - val = listhash(e+v[i],d[i],key); - val = (val + i) & 0x7FFFFFFFUL; - accum += FUZZ2(val); - } - - return (long)(accum & 0x7FFFFFFFUL); -} - -/***************************************************************************** -* * -* hashgraph(g,m,n,key) is a function whose value depends on the * -* graph or digraph sg. * -* Machine-independent if long ints have at least 32 bits, otherwise not. * -* The result is in 0..2^31-1. * -* * -*****************************************************************************/ - -long -hashgraph(graph *g, int m, int n, long key) -{ - int i; - set *gi; - unsigned long val,accum; - - accum = n; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - accum = (accum>>12) | ((accum<<19)&0x7FFFFFFFUL); - val = sethash(gi,n,key,(key&0xFL)+i); - val = (val + i) & 0x7FFFFFFFUL; - accum += FUZZ2(val); - } - - return (long)(accum & 0x7FFFFFFFUL); -} - -/***************************************************************************** -* * -* hash(setarray,length,key) is a function whose value depends only on the * -* first 'length' entries of the array 'setarray', and the value of key. * -* key should be in the range 1..31 and preferably odd. * -* This works best if long ints have at least 32 bits, but it's valid anyway.* -* Not machine-indpendent! Use sethash() in preference. * -* * -*****************************************************************************/ - -long -hash(set *setarray, long length, int key) -{ - long code; - set *sptr; - - code = length; - sptr = setarray + length; - - while (--sptr >= setarray) - code = (code<>(32-key)) + *sptr); - - return code; -} - -/***************************************************************************** -* * -* readperm is like readvperm without the last argument. It is provided * -* only for backward compatibility. * -* * -*****************************************************************************/ - -void -readperm(FILE *f, int *perm, boolean prompt, int n) -{ - int nv; - - readvperm(f,perm,prompt,n,&nv); -} - -/***************************************************************************** -* * -* readvperm(f,perm,prompt,n,nv) reads a permutation of order n from * -* f, terminated by a semicolon. Any repeated or illegal numbers or * -* characters are reported then ignored. Missing numbers are filled in * -* in numerical order. A prompt is issued for each line if prompt!=FALSE. * -* labelorg is used. *nv is set equal to the number of numbers actually * -* given. Ranges like v1:v2 are allowed. * -* * -*****************************************************************************/ - -void -readvperm(FILE *f, int *perm, boolean prompt, int n, int *nv) -{ - int i; - int m,c,v1,v2; - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"readperm"); -#endif - - EMPTYSET(workset,m); - - i = 0; - - while (TRUE) - { - GETNWC(c,f); - if (c == ';' || c == EOF) break; - if (ISDIGIT(c)) - { - ungetc(c,f); - readinteger(f,&v1); - v1 -= labelorg; - GETNWC(c,f); - if (c == ':') - if (!readinteger(f,&v2)) - { - fprintf(ERRFILE,"unfinished range\n\n"); - v2 = v1; - } - else - v2 -= labelorg; - else - { - ungetc(c,f); - v2 = v1; - } - - if (v1 < 0 || v1 >= n || v2 >= n || v1 > v2) - { - if (v1 < v2) - fprintf(ERRFILE, - "illegal range in permutation : %d:%d\n\n", - v1+labelorg,v2+labelorg); - else - fprintf(ERRFILE, - "illegal number in permutation : %d\n\n", - v1+labelorg); - } - else - for (; v1 <= v2; ++v1) - { - if (!ISELEMENT(workset,v1)) - { - perm[i++] = v1; - ADDELEMENT(workset,v1); - } - else - fprintf(ERRFILE, - "repeated number in permutation : %d\n\n", - v1+labelorg); - } - } - else - { - if (c == '\n' && prompt) - fprintf(PROMPTFILE,"+ "); - if (c != '\n') - fprintf(ERRFILE,"bad character '%c' in permutation\n\n", - (char)c); - } - } - - *nv = i; - - for (v1 = 0; v1 < n; ++v1) - if (!ISELEMENT(workset,v1)) perm[i++] = v1; -} - -/***************************************************************************** -* * -* ranperm(perm,n) creates a random permutation in perm. * -* * -*****************************************************************************/ - -void -ranperm(int *perm, int n) -{ - int i,j,t; - - for (i = n; --i >= 0; ) perm[i] = i; - - for (i = n; --i > 0; ) - { - j = KRAN(i+1); - t = perm[i]; - perm[i] = perm[j]; - perm[j] = t; - } -} - -/***************************************************************************** -* * -* relabel(g,perm,lab,workg,m,n) replaces g by g^perm, using workg as * -* scratch space. If lab!=NULL, it is taken as a labelling vector and * -* also permuted. * -* * -* FUNCTIONS CALLED: updatecan() * -* * -*****************************************************************************/ - -void -relabel(graph *g, int *lab, int *perm, graph *workg, int m, int n) -{ - long li; - int i; - - for (li = (long)M * (long)n; --li >= 0;) workg[li] = g[li]; - - updatecan(workg,g,perm,0,M,n); - if (lab != NULL) - { -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"relabel"); -#endif - for (i = 0; i < n; ++i) workperm[perm[i]] = i; - for (i = 0; i < n; ++i) lab[i] = workperm[lab[i]]; - } -} - -/***************************************************************************** -* * -* relabel_sg(g,perm,lab,workg,m,n) replaces g by g^perm, using workg as * -* scratch space. If lab!=NULL, it is taken as a labelling vector and * -* also permuted. * -* * -* FUNCTIONS CALLED: copy_sg(), updatecan_sg() * -* * -*****************************************************************************/ - -void -relabel_sg(sparsegraph *sg, int *lab, int *perm, sparsegraph *workg) -{ - int i,n; - sparsegraph *tempsg; - sparsegraph tmp; - - n = sg->nv; - - if (workg) - { - tempsg = copy_sg(sg,workg); - updatecan_sg((graph*)tempsg,(graph*)sg,perm,0,SETWORDSNEEDED(n),n); - } - else - { - SG_INIT(tmp); - tempsg = copy_sg(sg,&tmp); - updatecan_sg((graph*)tempsg,(graph*)sg,perm,0,SETWORDSNEEDED(n),n); - SG_FREE(tmp); - } - - if (lab != NULL) - { -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"relabel_sg"); -#endif - for (i = 0; i < n; ++i) workperm[perm[i]] = i; - for (i = 0; i < n; ++i) lab[i] = workperm[lab[i]]; - } -} - -/***************************************************************************** -* * -* sublabel(g,perm,nperm,workg,m,n) replaces g by g^perm, using workg as * -* scratch space. perm is a partial vector, of length nperm, where it is * -* known that the elements of perm are distinct. * -* * -*****************************************************************************/ - -void -sublabel(graph *g, int *perm, int nperm, graph *workg, int m, int n) -{ - long li; - int i,j,k; - int newm; - set *gi,*wgi; - - for (li = (long)m * (long)n; --li >= 0;) workg[li] = g[li]; - - newm = SETWORDSNEEDED(nperm); - - for (li = (long)newm * (long)nperm; --li >= 0;) g[li] = 0; - - for (i = 0, gi = (set*)g; i < nperm; ++i, gi += newm) - { - wgi = GRAPHROW(workg,perm[i],m); - for (j = 0; j < nperm; ++j) - { - k = perm[j]; - if (ISELEMENT(wgi,k)) ADDELEMENT(gi,j); - } - } -} - -/***************************************************************************** -* * -* sublabel_sg(sg,perm,nperm,workg) replaces g by g^perm, using workg as * -* scratch space. perm is a partial vector, of length nperm, where it is * -* known that the elements of perm are distinct. * -* * -*****************************************************************************/ - -void -sublabel_sg(sparsegraph *sg, int *perm, int nperm, sparsegraph *workg) -{ - int i,j,k,n; - size_t newnde,kk; - sparsegraph *tempsg; - sparsegraph tmp; - int *d,*e; - int *dd,*ee; - size_t *v,*vv; - - n = sg->nv; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"relabel_sg"); -#endif - for (i = 0; i < n; ++i) workperm[i] = -1; - for (i = 0; i < nperm; ++i) workperm[perm[i]] = i; - - newnde = 0; - SG_VDE(sg,v,d,e); - - for (i = 0; i < nperm; ++i) - { - j = perm[i]; - for (k = 0; k < d[j]; ++k) - if (workperm[e[v[j]+k]] >= 0) ++newnde; - } - - if (workg) - tempsg = workg; - else - { - SG_INIT(tmp); - tempsg = &tmp; - } - - SG_ALLOC(*tempsg,nperm,newnde,"sublabel_sg"); - SG_VDE(tempsg,vv,dd,ee); - - kk = 0; - for (i = 0; i < nperm; ++i) - { - j = perm[i]; - vv[i] = kk; - dd[i] = 0; - for (k = 0; k < d[j]; ++k) - if (workperm[e[v[j]+k]] >= 0) - { - ee[vv[i]+dd[i]] = workperm[e[v[j]+k]]; - ++dd[i]; - } - kk += dd[i]; - } - tempsg->nv = nperm; - tempsg->nde = newnde; - - copy_sg(tempsg,sg); - - if (!workg) SG_FREE(tmp); -} - -/***************************************************************************** -* * -* copycomment(fin,fout,delimiter) copies fin to fout until either EOF or * -* the character 'delimiter' is read. The delimiter itself isn't written. * -* Escape sequences \n,\t,\b,\r,\f,\\,\',\",\\n are recognised. Otherwise, * -* '\' is ignored. * -* * -*****************************************************************************/ - -void -copycomment(FILE *fin, FILE *fout, int delimiter) -{ - int c,backslash; - - backslash = FALSE; - - while ((c = getc(fin)) != EOF && (c != delimiter || backslash)) - if (backslash) - { - switch (c) - { - case '\n': - break; - case 'n': - PUTC('\n',fout); - break; - case 't': - PUTC('\t',fout); - break; - case 'b': - PUTC('\b',fout); - break; - case 'r': - PUTC('\r',fout); - break; - case 'f': - PUTC('\f',fout); - break; - case '\\': - PUTC('\\',fout); - break; - case '\'': - PUTC('\'',fout); - break; - case '"': - PUTC('"',fout); - break; - default: - PUTC(c,fout); - } - backslash = FALSE; - } - else if (c == '\\') - backslash = TRUE; - else - PUTC(c,fout); -} - -/***************************************************************************** -* * -* converse_sg(g1,g2) performs a digraph converse operation on g1, * -* leaving the result in g2. g2 must exist and be initialised. * -* If g1 is an undirected graph, g2 will be the same. * -* * -*****************************************************************************/ - -void -converse_sg(sparsegraph *g1, sparsegraph *g2) -{ - int *e1,*d1,*e2,*d2; - size_t *v1,*v2,j; - int i,k,n; - - n = g1->nv; - - SG_ALLOC(*g2,n,g1->nde,"converse_sg"); - g2->nv = n; - g2->nde = g1->nde; - if (g2->w) - { - FREES(g2->w); - g2->w = NULL; - g2->wlen = 0; - } - - SG_VDE(g1,v1,d1,e1); - SG_VDE(g2,v2,d2,e2); - - for (i = 0; i < n; ++i) d2[i] = 0; - for (i = 0; i < n; ++i) - for (j = v1[i]; j < v1[i]+d1[i]; ++j) ++d2[e1[j]]; - - v2[0] = 0; - for (i = 1; i < n; ++i) v2[i] = v2[i-1] + d2[i-1]; - for (i = 0; i < n; ++i) d2[i] = 0; - - for (i = 0; i < n; ++i) - for (j = v1[i]; j < v1[i]+d1[i]; ++j) - { - k = e1[j]; - e2[v2[k] + (d2[k]++)] = i; - } -} - -/***************************************************************************** -* * -* complement_sg(g1,g2) sets g2 to the complement of g1. * -* If g1 has loops then the loop set is also complemented; otherwise * -* no loops are created. g2 must exist and be initialised. * -* * -*****************************************************************************/ - -void -complement_sg(sparsegraph *g1, sparsegraph *g2) -{ - int *e1,*d1,*e2,*d2; - size_t *v1,*v2,j,ndec; - int i,l,m,n; - int loops; - - n = g1->nv; - SG_VDE(g1,v1,d1,e1); - - loops = 0; - for (i = 0; i < n; ++i) - for (j = v1[i]; j < v1[i] + d1[i]; ++j) - if (e1[j] == i) ++loops; - - if (loops > 1) ndec = n*(size_t)n - g1->nde; - else ndec = n*(size_t)n - n - g1->nde; - SG_ALLOC(*g2,n,ndec,"converse_sg"); - g2->nv = n; - SG_VDE(g2,v2,d2,e2); - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"putorbits"); -#endif - - if (g2->w) - { - FREES(g2->w); - g2->w = NULL; - g2->wlen = 0; - } - - ndec = 0; - - for (i = 0; i < n; ++i) - { - EMPTYSET(workset,m); - for (j = v1[i]; j < v1[i]+d1[i]; ++j) ADDELEMENT(workset,e1[j]); - if (loops == 0) ADDELEMENT(workset,i); - - v2[i] = ndec; - for (l = 0; l < n; ++l) - if (!ISELEMENT(workset,l)) e2[ndec++] = l; - d2[i] = ndec - v2[i]; - } - g2->nde = ndec; -} - -/***************************************************************************** -* * -* mathon_sg(g1,g2) performs a Mathon doubling operation on g1, * -* leaving the result in g2. g2 must exist and be initialised. * -* * -*****************************************************************************/ - -void -mathon_sg(sparsegraph *g1, sparsegraph *g2) -{ - int *e1,*d1,*e2,*d2; - size_t *v1,*v2,j; - int i,k,m,n1,n2; - - n1 = g1->nv; - n2 = 2*n1 + 2; - SG_ALLOC(*g2,n2,n2*(size_t)n1,"mathon_sg"); - g2->nv = n2; - g2->nde = n2*(size_t)n1; - if (g2->w) - { - FREES(g2->w); - g2->w = NULL; - g2->wlen = 0; - } - - SG_VDE(g1,v1,d1,e1); - SG_VDE(g2,v2,d2,e2); - - m = SETWORDSNEEDED(n1); -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"mathon_sg"); -#endif - - for (i = 0; i < n2; ++i) - { - v2[i] = i*(size_t)n1; - d2[i] = 0; - } - - for (i = 0; i < n1; ++i) - { - e2[v2[0]+(d2[0]++)] = i+1; - e2[v2[i+1]+(d2[i+1]++)] = 0; - e2[v2[n1+1]+(d2[n1+1]++)] = i+n1+2; - e2[v2[i+n1+2]+(d2[i+n1+2]++)] = n1+1; - } - - for (i = 0; i < n1; ++i) - { - EMPTYSET(workset,m); - for (j = v1[i]; j < v1[i]+d1[i]; ++j) - { - k = e1[j]; - if (k == i) continue; /* ignore loops */ - ADDELEMENT(workset,k); - e2[v2[i+1]+(d2[i+1]++)] = k+1; - e2[v2[i+n1+2]+(d2[i+n1+2]++)] = k+n1+2; - } - for (k = 0; k < n1; ++k) - if (k != i && !ISELEMENT(workset,k)) - { - e2[v2[i+1]+(d2[i+1]++)] = k+n1+2; - e2[v2[k+n1+2]+(d2[k+n1+2]++)] = i+1; - } - } -} - -/***************************************************************************** -* * -* mathon(g1,m1,n1,g2,m2,n2) performs a Mathon doubling operation on g1, * -* leaving the result in g2. * -* m1,n1 and m2,n2 are the values of m,n before and after the operation. * -* * -*****************************************************************************/ - -void -mathon(graph *g1, int m1, int n1, graph *g2, int m2, int n2) -{ - int i,j,ii,jj; - long li; - set *rowptr,*gp; - - for (li = (long)m2 * (long)n2; --li >= 0;) g2[li] = 0; - - for (i = 1; i <= n1; ++i) - { - ii = i + n1 + 1; - gp = GRAPHROW(g2,0,m2); /* unnecessarily convoluted code */ - ADDELEMENT(gp,i); /* needed to avoid compiler bug */ - gp = GRAPHROW(g2,i,m2); /* in MSDOS version */ - ADDELEMENT(gp,0); - gp = GRAPHROW(g2,n1+1,m2); - ADDELEMENT(gp,ii); - gp = GRAPHROW(g2,ii,m2); - ADDELEMENT(gp,n1+1); - } - - for (i = 0, rowptr = g1; i < n1; ++i, rowptr += m1) - for (j = 0; j < n1; ++j) - if (j != i) - { - ii = i + n1 + 2; - jj = j + n1 + 2; - if (ISELEMENT(rowptr,j)) - { - gp = GRAPHROW(g2,i+1,m2); - ADDELEMENT(gp,j+1); - gp = GRAPHROW(g2,ii,m2); - ADDELEMENT(gp,jj); - } - else - { - gp = GRAPHROW(g2,i+1,m2); - ADDELEMENT(gp,jj); - gp = GRAPHROW(g2,ii,m2); - ADDELEMENT(gp,j+1); - } - } -} - -/***************************************************************************** -* * -* rangraph(g,digraph,invprob,m,n) makes a random graph (or digraph if * -* digraph!=FALSE) with edge probability 1/invprob. * -* * -*****************************************************************************/ - -void -rangraph(graph *g, boolean digraph, int invprob, int m, int n) -{ - int i,j; - long li; - set *row,*col; - - for (li = (long)m * (long)n; --li >= 0;) g[li] = 0; - - for (i = 0, row = g; i < n; ++i, row += m) - if (digraph) - { - for (j = 0; j < n; ++j) - if (KRAN(invprob) == 0) ADDELEMENT(row,j); - } - else - { - for (j = i + 1, col = GRAPHROW(g,j,m); j < n; ++j, col += m) - if (KRAN(invprob) == 0) - { - ADDELEMENT(row,j); - ADDELEMENT(col,i); - } - } -} - - -/***************************************************************************** -* * -* rangraph2(g,digraph,p1,p2,m,n) makes a random graph (or digraph if * -* digraph!=FALSE) with edge probability p1/p2. * -* * -*****************************************************************************/ - -void -rangraph2(graph *g, boolean digraph, int p1, int p2, int m, int n) -{ - int i,j; - long li; - set *row,*col; - - for (li = (long)m * (long)n; --li >= 0;) g[li] = 0; - - for (i = 0, row = g; i < n; ++i, row += m) - if (digraph) - { - for (j = 0; j < n; ++j) - if (KRAN(p2) < p1) ADDELEMENT(row,j); - } - else - for (j = i + 1, col = GRAPHROW(g,j,m); j < n; ++j, col += m) - if (KRAN(p2) < p1) - { - ADDELEMENT(row,j); - ADDELEMENT(col,i); - } -} - -/***************************************************************************** -* * -* rangraph2_sg(sg,digraph,p1,p2,n) makes a random graph (or digraph if * -* digraph!=FALSE) with edge probability p1/p2. sg must be initialised. * -* * -*****************************************************************************/ - -void -rangraph2_sg(sparsegraph *sg, boolean digraph, int p1, int p2, int n) -{ - int i,j,k; - int *dd,*ee; - double rn,expec,var,sd; - int ldeg; - size_t *vv,inc,nde; - - sg->nv = n; - - rn = n; - expec = (rn*rn-rn)*(double)p1/(double)p2; - var = expec*(double)(p2-p1)/(double)p2; - if (!digraph) var *= 2.0; - sd = 1.0; - if (var > 1.0) - for (i = 0; i < 19; ++i) sd = (sd + var/sd) / 2.0; - inc = sd + 20; - - SG_ALLOC(*sg,n,(size_t)expec+4*inc,"rangraph2_sg"); - SG_VDE(sg,vv,dd,ee); - if (sg->w) - { - FREES(sg->w); - sg->w = NULL; - sg->wlen = 0; - } - - for (i = 0; i < n; ++i) dd[i] = 0; - vv[0] = 0; - nde = 0; - - if (!digraph) - { - for (i = 0; i < n; ++i) - { - ldeg = 0; - for (j = i+1; j < n; ++j) - if (KRAN(p2) < p1) - { - nde += 2; - if (nde > sg->elen) - { - DYNREALLOC(int,sg->e,sg->elen,sg->elen+inc, - "rangraph2_sg realloc"); - ee = sg->e; - } - ee[vv[i]+ldeg++] = j; - ++dd[j]; - } - if (i < n-1) vv[i+1] = vv[i] + dd[i] + ldeg; - dd[i] = ldeg; - } - for (i = 0; i < n; ++i) - for (k = 0; k < dd[i]; ++k) - { - j = ee[vv[i]+k]; - if (j > i) ee[vv[j]+dd[j]++] = i; - } - sg->nde = nde; - } - else - { - for (i = 0; i < n; ++i) - { - ldeg = 0; - for (j = 0; j < n; ++j) - if (j != i && KRAN(p2) < p1) - { - ++nde; - if (nde > sg->elen) - { - DYNREALLOC(int,sg->e,sg->elen,sg->elen+inc, - "rangraph2_sg realloc"); - ee = sg->e; - } - ee[vv[i]+ldeg++] = j; - } - if (i < n-1) vv[i+1] = vv[i] + ldeg; - dd[i] = ldeg; - } - sg->nde = nde; - } -} - -/****************************************************************************/ - -static void -putsequence(FILE *f, int *x, int linelength, int n) -/* Write n integers to f with equal values collapsed. - * labelorg is used. */ -{ - char s[60]; - int j,v1,v2,xval,curlen; - - curlen = 0; - v1 = 0; - while (v1 < n) - { - xval = x[v1]; - - for (v2 = v1; v2 < n - 1 && x[v2+1] == xval; ++v2) {} - j = itos(v1+labelorg,s); - if (v2 > v1) - { - s[j++] = '-'; - j += itos(v2+labelorg,&s[j]); - } - s[j++] = ':'; - j += itos(xval,&s[j]); - s[j] = ' '; - s[j+1] = '\0'; - if (linelength > 0 && curlen + j >= linelength) - { - PUTC('\n',f); - curlen = 0; - } - curlen += j + 1; - putstring(f,s); - v1 = v2 + 1; - } - PUTC('\n',f); -} - -/***************************************************************************** -* * -* putdegs(f,g,linelength,m,n) writes the degree of each vertex of g to * -* file f, using at most linelength characters per line (excluding '\n'). * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED : itos(),putstring(),setsize() * -* * -*****************************************************************************/ - -void -putdegs(FILE *f, graph *g, int linelength, int m, int n) -{ - int i; - graph *gp; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putdegs"); -#endif - - for (i = 0, gp = g; i < n; ++i, gp += M) - workperm[i] = setsize(gp,m); - - putsequence(f,workperm,linelength,n); -} - -/***************************************************************************** -* * -* putdegs_sg(f,sg,linelength) writes the degree of each vertex of sg to * -* file f, using at most linelength characters per line (excluding '\n'). * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED : itos(),putstring(), * -* * -*****************************************************************************/ - -void -putdegs_sg(FILE *f, sparsegraph *sg, int linelength) -{ - putsequence(f,sg->d,linelength,sg->nv); -} - -/***************************************************************************** -* * -* complement(g,m,n) replaces the graph g by its complement * -* No loops are created unless there are loops present, in which case the * -* loops are also complemented. * -* * -*****************************************************************************/ - -void -complement(graph *g, int m, int n) -{ - boolean loops; - int i,j; - graph *gp; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"complement"); -#endif - - loops = FALSE; - for (i = 0, gp = g; i < n && !loops; ++i, gp += M) - if (ISELEMENT(gp,i)) loops = TRUE; - - EMPTYSET(workset,m); - for (i = 0; i < n; ++ i) ADDELEMENT(workset,i); - - for (i = 0, gp = g; i < n; ++i, gp += M) - { - for (j = 0; j < M; ++j) gp[j] = workset[j] & ~gp[j]; - if (!loops) DELELEMENT(gp,i); - } -} - -/***************************************************************************** -* * -* converse(g,m,n) replaces the digraph g by its converse. * -* There is no effect on an undirected graph. * -* * -*****************************************************************************/ - -void -converse(graph *g, int m, int n) -{ - int i,j; - graph *gi,*gj; - - for (i = 0, gi = g; i < n; ++i, gi += M) - for (j = i+1, gj = gi+M; j < n; ++j, gj += M) - if ((ISELEMENT(gi,j)!=0) + (ISELEMENT(gj,i)!=0) == 1) - { - FLIPELEMENT(gi,j); - FLIPELEMENT(gj,i); - } -} - -/***************************************************************************** -* * -* naututil_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -naututil_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in naututil.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in naututil.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in naututil.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: naututil.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* naututil_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -naututil_freedyn(void) -{ - echunk *ec1,*ec2; - -#if !MAXN - DYNFREE(workperm,workperm_sz); - DYNFREE(workset,workset_sz); -#endif - ec1 = first_echunk.next; - - while (ec1) - { - ec2 = ec1->next; - FREES(ec1); - ec1 = ec2; - } -} diff --git a/tools/nauty25r9_unix/naututil.h b/tools/nauty25r9_unix/naututil.h deleted file mode 100644 index 047ce3e..0000000 --- a/tools/nauty25r9_unix/naututil.h +++ /dev/null @@ -1,278 +0,0 @@ -/***************************************************************************** -* This is the header file for versions 2.5 of naututil.c and dreadnaut.c. * -* naututil.h. Generated from naututil-h.in by configure. -*****************************************************************************/ - -/* The parts between the ==== lines are modified by configure when -creating naututil.h out of naututil-h.in. If configure is not being -used, it is necessary to check they are correct. -====================================================================*/ - -/* Check whether various headers are available */ - -#define HAVE_ISATTY 1 /* if isatty() is available */ -#define HAVE_TIMES 1 /* if times() is available */ -#define HAVE_TIME 1 /* if time() is available */ -#define HAVE_GETRUSAGE 1 /* if getrusage() is available */ -#define HAVE_GETTIMEOFDAY 1 /* if gettimeofday() */ - -/*==================================================================*/ - -/***************************************************************************** -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : changes for version 1.3 : * -* - added declarations of readinteger() and readstring() * -* - added definition of DEFEXT : default file-name * -* extension for dreadnaut input files * -* 28-Sep-88 : changes for version 1.4 : * -* - added support for PC Turbo C * -* 29-Nov-88 : - added getc macro for AZTEC C on MAC * -* 23-Mar-89 : changes for version 1.5 : * -* - added DREADVERSION macro * -* - added optional ANSI function prototypes * -* - changed file name to naututil.h * -* - moved ALLOCS to nauty.h and defined DYNALLOC * -* 25-Mar-89 : - added declaration of twopaths() * -* 29-Mar-89 : - added declaration of putmapping() * -* 4-Apr-89 : - added declarations of triples, quadruples, adjtriang * -* - only define ERRFILE if not in nauty.h * -* 25-Apr-89 : - added declarations of cellquads,distances,getbigcells * -* 26-Apr-89 : - added declarations of indsets,cliques,cellquins * -* - removed declarations of ptncode and equitable * -* 27-Apr-89 : - added declaration of putquotient * -* 18-Aug-89 : - added new arg to putset, and changed mathon * -* 2-Mar-90 : - added declarations of celltrips, cellcliq, cellind * -* - changed declarations to use EXTPROC * -* 12-Mar-90 : - added changes for Cray version * -* 20-Mar-90 : - added changes for THINK version * -* 27-Mar-90 : - split SYS_MSDOS into SYS_PCMS4 and SYS_PCMS5 * -* 13-Oct-90 : changes for version 1.6 : * -* - changed CPUTIME to use HZ on Unix for times() * -* 14-Oct-90 : - added SYS_APOLLO variant * -* 19-Oct-90 : - changed CPUTIME defs for BSDUNIX to avoid conficting * -* declarations of size_t and ptrdiff_t in gcc * -* 27-Aug-92 : changes for version 1.7 : * -* - added SYS_IBMC variant * -* - removed workaround for bad gcc installation * -* 5-Jun-93 : changes for version 1.8 : * -* - changed CRAY version of CPUTIME to use CLK_TCK * -* if HZ could not be found (making 1.7+) * -* 30-Jul-93 : - added SYS_ALPHA variant * -* 17-Sep-93 : changes for version 1.9 : * -* - declared adjacencies() * -* 24-Feb-94 : changes for version 1.10 : * -* - added version SYS_AMIGAAZT (making 1.9+) * -* 19-Apr-95 : - added C++ prototype wrapper * -* 6-Mar-96 : - added SYS_ALPHA32 code * -* 23-Jul-96 : changes for version 2.0 : * -* - changed readstring() declaration * -* - removed DYNALLOC definition * -* - added sublabel() definition * -* 15-Aug-96 : - added sethash() definition * -* 30-Aug-96 : - added KRAN and D. Knuth routines * -* 16-Sep-96 : - fixed the above! * -* 7-Feb-96 : - declared nautinv_null() and setnbhd() * -* 4-Sep-97 : - arg of time() is type time_t*, was long* * -* 22-Sep-97 : - defined fileno() and time_t for SYS_PCTURBO * -* 10-Dec-97 : - revised KRAN for new rng.c from Knuth * -* 18-Feb-98 : - changed time() to time_t for Unix * -* 21-Oct-98 : - changed short to shortish as needed * -* 9-Jan-00 : - declared nautinv_check() and naututil_check() * -* 16-Nov-00 : - applied changes logged in nauty.h * -* 22-Apr-01 : changes for version 2.1 : * -* - prototypes for nautinv.c are now in nautinv.h * -* - CPUTIME for UNIX uses CLK_TCK (needs revision!) * -* 2-Jun-01 : - prototype for converse() * -* 18-Oct-01 : - complete revision; sysdeps in separate files * -* 28-Aug-02 : changes for version 2.2 : * -* - revised for autoconf * -* 17-Nov-02 : added explicit "extern" where it was implicit before * -* 11-Apr-02 : added rangraph2() * -* 10-Sep-07 : Define CPUTIME=0.0 for hosts that don't provide it * -* 4-Nov-09 : added readgraph_sg(), putgraph_sg(), putcanon_sg() * -* 10-Nov-09 : removed types shortish and permutation * -* 14-Nov-09 : added relabel_sg(), copy_sg(), putdegs_sg(), * -* sublabel_sg() * -* 19-Nov-09 : added individualise() * -* 20-Nov-09 : added hashgraph_sg(), listhash(), hashgraph() * -* 19-Dec-09 : added ranreg(), rangraph2_sg() * -* 5-Jun-10 : added mathon_sg() and converse_sg() * -* 10-Jun-10 : added putquotient_sg() and complement_sg() * -* 15-Jan-12 : added TLS_ATTR to static declarations * -* 3-Mar-12 : added putorbitsplus() and putset_firstbold() * -* 17-Mar-12 : include naurng.h and remove redundant lines * -* * -* ++++++ This file is automatically generated, don't edit it by hand! ++++++ -* * -*****************************************************************************/ - -#include "nauty.h" /* which includes stdio.h */ -#include "nausparse.h" -#include "naurng.h" -/* At this point we can assume that , , , - , or and if necessary have - been included if they exist. */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void complement(graph*,int,int); -extern void converse(graph*,int,int); -extern void converse_sg(sparsegraph*, sparsegraph*); -extern void copycomment(FILE*,FILE*,int); -extern void complement_sg(sparsegraph*, sparsegraph*); -extern void flushline(FILE*); -extern void fixit(int*,int*,int*,int,int); -extern int getint(FILE*); -extern long hash(set*,long,int); -extern long hashgraph(graph*,int,int,long); -extern long hashgraph_sg(sparsegraph*,long); -extern void individualise(int*,int*,int,int,int*,int*,int); -extern long listhash(int*,int,long); -extern void mathon(graph*,int,int,graph*,int,int); -extern void mathon_sg(sparsegraph*,sparsegraph*); -extern void naututil_check(int,int,int,int); -extern void naututil_freedyn(void); -extern void putcanon(FILE*,int*,graph*,int,int,int); -extern void putcanon_sg(FILE*,int*,sparsegraph*,int); -extern void putdegs(FILE*,graph*,int,int,int); -extern void putdegs_sg(FILE*,sparsegraph*,int); -extern void putgraph(FILE*,graph*,int,int,int); -extern void putgraph_sg(FILE*,sparsegraph*,int); -extern void putmapping(FILE*,int*,int,int*,int,int,int); -extern void putorbits(FILE*,int*,int,int); -extern void putorbitsplus(FILE*,int*,int,int); -extern void putptn(FILE*,int*,int*,int,int,int); -extern void putquotient(FILE*,graph*,int*,int*,int,int,int,int); -extern void putquotient_sg(FILE*,sparsegraph*,int*,int*,int,int); -extern void putset(FILE*,set*,int*,int,int,boolean); -extern void putset_firstbold(FILE*,set*,int*,int,int,boolean); -extern void rangraph(graph*,boolean,int,int,int); -extern void rangraph2(graph*,boolean,int,int,int,int); -extern void rangraph2_sg(sparsegraph*,boolean,int,int,int); -extern void ranreg_sg(sparsegraph *sg, int degree, int n); -extern void ranperm(int*,int); -extern void readgraph(FILE*,graph*,boolean,boolean,boolean,int,int,int); -extern void readgraph_sg(FILE*,sparsegraph*,boolean,boolean,int,int); -extern boolean readinteger(FILE*,int*); -extern void readperm(FILE*,int*,boolean,int); -extern void readptn(FILE*,int*,int*,int*,boolean,int); -extern void readvperm(FILE*,int*,boolean,int,int*); -extern boolean readstring(FILE*,char*,int); -extern void relabel(graph*,int*,int*,graph*,int,int); -extern void relabel_sg(sparsegraph*,int*,int*,sparsegraph*); -extern long sethash(set*,int,long,int); -extern int setinter(set*,set*,int); -extern int setsize(set*,int); -extern void sublabel(graph*,int*,int,graph*,int,int); -extern void sublabel_sg(sparsegraph*,int*,int,sparsegraph*); -extern void unitptn(int*,int*,int*,int); - -#ifdef __cplusplus -} -#endif - -#define MAXREG 8 /* Used to limit ranreg_sg() degree */ - -#define PROMPTFILE stdout /* where to write prompts */ -#ifndef ERRFILE -#define ERRFILE stderr /* where to write error messages */ -#endif -#define MAXIFILES 10 /* how many input files can be open at once */ -#define EXIT exit(0) /* how to stop normally */ -#define DEFEXT ".dre" /* extension for dreadnaut files */ - -/************************************************************************* - The following macros may represent differences between system. This - file contains the UNIX/POSIX editions. For other systems, a separate - file of definitions is read in first. That file should define the - variables NAUTY_*_DEFINED for sections that are to replace the UNIX - versions. See the provided examples for more details. - - If your system does not have a predefined macro you can use to cause - a definitions file to be read, you have to make up one and arrange for - it to be defined when this file is read. - - The system-dependent files can also redefine the macros just ahead of - this comment. -**************************************************************************/ - -#ifdef __weirdmachine__ -#include "weird.h" /* Some weird machine (ILLUSTRATION ONLY) */ -#endif - -/*************************************************************************/ - -#ifndef NAUTY_PROMPT_DEFINED -#if HAVE_ISATTY -#define DOPROMPT(fp) (isatty(fileno(fp)) && isatty(fileno(PROMPTFILE))) -#else -#define DOPROMPT(fp) (curfile==0) -#endif -#endif /*NAUTY_PROMPT_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_OPEN_DEFINED -#define OPENOUT(fp,name,append) fp = fopen(name,(append)?"a":"w") -#endif /*NAUTY_OPEN_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_CPU_DEFINED -#if HAVE_TIMES -#include -#define CPUDEFS static TLS_ATTR struct tms timebuffer; -#ifndef CLK_TCK -#include -#endif -#if !defined(CLK_TCK) && defined(_SC_CLK_TCK) -#define CLK_TCK sysconf(_SC_CLK_TCK) -#endif -#ifndef CLK_TCK -#define CLK_TCK 60 -#endif -#define CPUTIME (times(&timebuffer),\ - (double)(timebuffer.tms_utime + timebuffer.tms_stime) / CLK_TCK) -#else -#if HAVE_GETRUSAGE -#include -#include -#define CPUDEFS struct rusage ruse; -#define CPUTIME (getrusage(RUSAGE_SELF,&ruse),\ - ruse.ru_utime.tv_sec + ruse.ru_stime.tv_sec + \ - 1e-6 * (ruse.ru_utime.tv_usec + ruse.ru_stime.tv_usec)) -#endif -#endif - -#ifndef CPUTIME -#define CPUTIME 0.0 -#endif - -#endif /*NAUTY_CPU_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_SEED_DEFINED -#if HAVE_GETTIMEOFDAY -#include -#define INITSEED \ -{struct timeval nauty_tv; \ - struct timezone nauty_tz; \ - gettimeofday(&nauty_tv,&nauty_tz); \ - seed = ((nauty_tv.tv_sec<<10) + (nauty_tv.tv_usec>>10)) & 0x7FFFFFFFL;} -#else -#if HAVE_TIME -#include -#define INITSEED seed = ((time((time_t*)NULL)<<1) | 1) & 0x7FFFFFFFL -#endif -#endif -#endif /*NAUTY_SEED_DEFINED*/ - -/* ++++++ This file is automatically generated, don't edit it by hand! ++++++ */ diff --git a/tools/nauty25r9_unix/naututil.o b/tools/nauty25r9_unix/naututil.o deleted file mode 100644 index 22b3dbb7be712bd8e5074a9699569fc9d4094952..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70432 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 S!{0ZS=je5C8ce)i@8=k12e3&54TK5ZfQkuB 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 */ -#define HAVE_SYSTYPES_H @header_sys_types_h@ /* */ -#define HAVE_STDDEF_H @header_stddef_h@ /* */ -#define HAVE_STDLIB_H @header_stdlib_h@ /* */ -#define HAVE_STRING_H @header_string_h@ /* */ -#define MALLOC_DEC @malloc_dec@ /* 1 = malloc() is declared in stdlib.h, */ - /* 2 = in malloc.h, 0 = in neither place */ -#define HAS_MATH_INF @has_math_inf@ /* INFINITY is defined in math.h or */ - /* some system header likely to be used */ -#define HAS_STDIO_UNLOCK @stdio_nolock@ /* Whether there are getc_unlocked, */ - /* putc_unlocked,flockfile and funlockfile*/ - -#define DEFAULT_WORDSIZE @default_wordsize@ -#define SIZEOF_INT @ac_cv_sizeof_int@ -#define SIZEOF_LONG @ac_cv_sizeof_long@ -#define SIZEOF_LONG_LONG @ac_cv_sizeof_long_long@ /* 0 if nonexistent */ - -#define HAVE_CONST @have_const@ /* compiler properly supports const */ - -#define HAVE_TLS @have_tls@ /* have storage attribute for thread-local */ -#define TLS_ATTR @ac_cv_tls@ /* if so, what it is. if not, empty */ - -#define USE_ANSICONTROLS @have_ansicontrols@ - /* whether --enable-ansicontrols is used */ - -#define _FILE_OFFSET_BITS @ac_cv_sys_file_offset_bits@ -#if _FILE_OFFSET_BITS == 64 -#define _LARGEFILE_SOURCE -#else -#undef _FILE_OFFSET_BITS -#endif - -/* Support of gcc extensions __builtin_clz, __builtin_clzl, __builtin_clzll */ -#define HAVE_CLZ @have_clz@ -#define HAVE_CLZL @have_clzl@ -#define HAVE_CLZLL @have_clzll@ - -/*==================================================================*/ - -/* The following line must be uncommented for compiling into Magma. */ -/* #define NAUTY_IN_MAGMA */ - -#ifdef NAUTY_IN_MAGMA -#include "defs.h" -#include "system.h" -#include "bs.h" -#define OLDEXTDEFS -#else -#include -#define P_(x) x -#endif - -#if defined(__cray) || defined(__cray__) || defined(cray) -#define SYS_CRAY /* Cray UNIX, portable or standard C */ -#endif - -#if defined(__unix) || defined(__unix__) || defined(unix) -#define SYS_UNIX -#endif - -#if !HAVE_CONST -#define const -#endif - -/***************************************************************************** -* * -* AUTHOR: Brendan D. McKay * -* Research School of Computer Science * -* Australian National University * -* Canberra, ACT 0200, Australia * -* phone: +61 2 6125 3845 fax: +61 2 6125 0010 * -* email: bdm@cs.anu.edu.au * -* * -* Nauty is copyright (1984-2013) Brendan McKay. All rights reserved. * -* Permission -* is hereby given for use and/or distribution with the exception of * -* sale for profit or application with nontrivial military significance. * -* You must not remove this copyright notice, and you must document any * -* changes that you make to this program. * -* This software is subject to this copyright only, irrespective of * -* any copyright attached to any package of which this is a part. * -* * -* This program is only provided "as is". No responsibility will be taken * -* by the author, his employer or his pet rabbit* for any misfortune which * -* befalls you because of its use. I don't think it will delete all your * -* files, burn down your computer room or turn your children against you, * -* but if it does: stiff cheddar. On the other hand, I very much welcome * -* bug reports, or at least I would if there were any bugs. * -* * RIP, 1989 * -* Traces is copyright Adolfo Piperno (2011-). * -* * -* Reference manual: * -* B. D. McKay and A. Piperno, nauty User's Guide (Version 2.5), * -* http://pallini.di.uniroma1.it * -* http://cs.anu.edu.au/~bdm/nauty/ * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : renamed to version 1.3 (no changes to this file) * -* 28-Sep-88 : added PC Turbo C support, making version 1.4 * -* 23-Mar-89 : changes for version 1.5 : * -* - reworked M==1 code * -* - defined NAUTYVERSION string * -* - made NAUTYH_READ to allow this file to be read twice * -* - added optional ANSI function prototypes * -* - added validity check for WORDSIZE * -* - added new fields to optionblk structure * -* - updated DEFAULTOPTIONS to add invariants fields * -* - added (set*) cast to definition of GRAPHROW * -* - added definition of ALLOCS and FREES * -* 25-Mar-89 : - added declaration of new function doref() * -* - added UNION macro * -* 29-Mar-89 : - reduced the default MAXN for small machines * -* - removed OUTOFSPACE (no longer used) * -* - added SETDIFF and XOR macros * -* 2-Apr-89 : - extended statsblk structure * -* 4-Apr-89 : - added IS_* macros * -* - added ERRFILE definition * -* - replaced statsblk.outofspace by statsblk.errstatus * -* 5-Apr-89 : - deleted definition of np2vector (no longer used) * -* - introduced EMPTYSET macro * -* 12-Apr-89 : - eliminated MARK, UNMARK and ISMARKED (no longer used) * -* 18-Apr-89 : - added MTOOBIG and CANONGNIL * -* 12-May-89 : - made ISELEM1 and ISELEMENT return 0 or 1 * -* 2-Mar-90 : - added EXTPROC macro and used it * -* 12-Mar-90 : - added SYS_CRAY, with help from N. Sloane and A. Grosky * -* - added dummy groupopts field to optionblk * -* - select some ANSI things if __STDC__ exists * -* 20-Mar-90 : - changed default MAXN for Macintosh versions * -* - created SYS_MACTHINK for Macintosh THINK compiler * -* 27-Mar-90 : - split SYS_MSDOS into SYS_PCMS4 and SYS_PCMS5 * -* 13-Oct-90 : changes for version 1.6: * -* - fix definition of setword for WORDSIZE==64 * -* 14-Oct-90 : - added SYS_APOLLO version to avoid compiler bug * -* 15-Oct-90 : - improve detection of ANSI conformance * -* 17-Oct-90 : - changed temp name in EMPTYSET to avoid A/UX bug * -* 16-Apr-91 : changes for version 1.7: * -* - made version SYS_PCTURBO use free(), not cfree() * -* 2-Sep-91 : - noted that SYS_PCMS5 also works for Quick C * -* - moved MULTIPLY to here from nauty.c * -* 12-Jun-92 : - changed the top part of this comment * -* 27-Aug-92 : - added version SYS_IBMC, thanks to Ivo Duentsch * -* 5-Jun-93 : - renamed to version 1.7+, only change in naututil.h * -* 29-Jul-93 : changes for version 1.8: * -* - fixed error in default 64-bit version of FIRSTBIT * -* (not used in any version before ALPHA) * -* - installed ALPHA version (thanks to Gordon Royle) * -* - defined ALLOCS,FREES for SYS_IBMC * -* 3-Sep-93 : - make calloc void* in ALPHA version * -* 17-Sep-93 : - renamed to version 1.9, * -* changed only dreadnaut.c and nautinv.c * -* 24-Feb-94 : changes for version 1.10: * -* - added version SYS_AMIGAAZT, thanks to Carsten Saager * -* (making 1.9+) * -* 19-Apr-95 : - added prototype wrapper for C++, * -* thanks to Daniel Huson * -* 5-Mar-96 : - added SYS_ALPHA32 version (32-bit setwords on Alpha) * -* 13-Jul-96 : changes for version 2.0: * -* - added dynamic allocation * -* - ERRFILE must be defined * -* - added FLIPELEM1 and FLIPELEMENT macros * -* 13-Aug-96 : - added SWCHUNK? macros * -* - added TAKEBIT macro * -* 28-Nov-96 : - include sys/types.h if not ANSI (tentative!) * -* 24-Jan-97 : - and stdlib.h if ANSI * -* - removed use of cfree() from UNIX variants * -* 25-Jan-97 : - changed options.getcanon from boolean to int * -* Backwards compatibility is ok, as boolean and int * -* are the same. Now getcanon=2 means to get the label * -* and not care about the group. Sometimes faster. * -* 6-Feb-97 : - Put in #undef for FALSE and TRUE to cope with * -* compilers that illegally predefine them. * -* - declared nauty_null and nautil_null * -* 2-Jul-98 : - declared ALLBITS * -* 21-Oct-98 : - allow WORDSIZE==64 using unsigned long long * -* - added BIGNAUTY option for really big graphs * -* 11-Dec-99 : - made bit, leftbit and bytecount static in each file * -* 9-Jan-00 : - declared nauty_check() and nautil_check() * -* 12-Feb-00 : - Used #error for compile-time checks * -* - Added DYNREALLOC * -* 4-Mar-00 : - declared ALLMASK(n) * -* 27-May-00 : - declared CONDYNFREE * -* 28-May-00 : - declared nautil_freedyn() * -* 16-Aug-00 : - added OLDNAUTY and changed canonical labelling * -* 16-Nov-00 : - function prototypes are now default and unavoidable * -* - removed UPROC, now assume all compilers know void * -* - removed nvector, now just int (as it always was) * -* - added extra parameter to targetcell() * -* - removed old versions which were only to skip around * -* bugs that should have been long fixed: * -* SYS_APOLLO and SYS_VAXBSD. * -* - DEFAULTOPIONS now specifies no output * -* - Removed obsolete SYS_MACLSC version * -* 21-Apr-01 : - Added code to satisfy compilation into Magma. This * -* is activated by defining NAUTY_IN_MAGMA above. * -* - The *_null routines no longer exist * -* - Default maxinvarlevel is now 1. (This has no effect * -* unless an invariant is specified.) * -* - Now labelorg has a concrete declaration in nautil.c * -* and EXTDEFS is not needed * -* 5-May-01 : - NILFUNCTION, NILSET, NILGRAPH now obsolete. Use NULL. * -* 11-Sep-01 : - setword is unsigned int in the event that UINT_MAX * -* is defined and indicates it is big enough * -* 17-Oct-01 : - major rewrite for 2.1. SYS_* variables gone! * -* Some modernity assumed, eg size_t * -* 8-Aug-02 : - removed MAKEEMPTY (use EMPTYSET instead) * -* - deleted OLDNAUTY everywhere * -* 27-Aug-02 : - converted to use autoconf. Now the original of this * -* file is nauty-h.in. Run configure to make nauty.h. * -* 20-Dec-02 : - increased INFINITY * -* some reorganization to please Magma * -* - declared nauty_freedyn() * -* 17-Nov-03 : - renamed INFINITY to NAUTY_INFINITY * -* 29-May-04 : - added definition of SETWORD_FORMAT * -* 14-Sep-04 : - extended prototypes even to recursive functions * -* 16-Oct-04 : - added DEFAULTOPTIONS_GRAPH * -* 24-Oct-04 : Starting 2.3 * -* - remove register declarations as modern compilers * -* tend to find them a nuisance * -* - Don't define the obsolete symbol INFINITY if it is * -* defined already * -* 17-Nov-04 : - make 6 counters in statsblk unsigned long * -* 17-Jan-04 : - add init() and cleanup() to dispatchvec * -* 12-Nov-05 : - Changed NAUTY_INFINITY to 2^30+2 in BIGNAUTY case * -* 22-Nov-06 : Starting 2.4 * -* - removed usertcellproc from options * -* changed bestcell to targetcell in dispatch vector * -* declare targetcell and maketargetcell * -* 29-Nov-06 : - add extraoptions to optionblk * -* - add declarations of extra_autom and extra_level * -* 10-Dec-06 : - BIGNAUTY is gone! Now permutation=shortish=int. * -* NAUTY_INFINITY only depends on whether sizeof(int)=2. * -* 27-Jun-08 : - define nauty_counter and LONG_LONG_COUNTERS * -* 30-Jun-08 : - declare version 2.4 * -* 8-Nov-09 : - final release of version 2.4; * -* 10-Nov-10 : Starting 2.5 * -* - declare shortish and permutation obsolete, now int * -* 14-Nov-10 : - SETWORDSNEEDED(n) * -* 23-May-10 : - declare densenauty() * -* 29-Jun-10 : - add PRINT_COUNTER(f,x) * -* - add DEFAULTOPTIONS_DIGRAPH() * -* 27-Mar-11 : - declare writegroupsize() * -* 14-Jan-12 : - add HAVE_TLS and TLS_ATTR * -* 21-Feb-12 : - add ENABLE_ANSI * -* 18-Mar-12 : - add COUNTER_FMT * -* 18-Aug-12 : - add ADDONEARC, ADDONEEDGE, EMPTYGRAPH * -* 29-Aug-12 : - add CLZ macros and FIRSTBITNZ * -* 19-Oct-12 : - add DEFAULT_WORDSIZE * -* 3-Jan-12 : Released 2.5rc1 * -* * -* @edit_msg@ -* * -*****************************************************************************/ - -/***************************************************************************** -* * -* 16-bit, 32-bit and 64-bit versions can be selected by defining WORDSIZE. * -* The largest graph that can be handled has MAXN vertices. * -* Both WORDSIZE and MAXN can be defined on the command line. * -* WORDSIZE must be 16, 32 or 64; MAXN must be <= NAUTY_INFINITY-2; * -* * -* With a very slight loss of efficiency (depending on platform), nauty * -* can be compiled to dynamically allocate arrays. Predefine MAXN=0 to * -* achieve this effect, which is default behaviour from version 2.0. * -* In that case, graphs of size up to NAUTY_INFINITY-2 can be handled * -* if the the memory is available. * -* * -* If only very small graphs need to be processed, use MAXN<=WORDSIZE * -* since this causes substantial code optimizations. * -* * -* Conventions and Assumptions: * -* * -* A 'setword' is the chunk of memory that is occupied by one part of * -* a set. This is assumed to be >= WORDSIZE bits in size. * -* * -* The rightmost (loworder) WORDSIZE bits of setwords are numbered * -* 0..WORDSIZE-1, left to right. It is necessary that the 2^WORDSIZE * -* setwords with the other bits zero are totally ordered under <,=,>. * -* This needs care on a 1's-complement machine. * -* * -* The int variables m and n have consistent meanings throughout. * -* Graphs have n vertices always, and sets have m setwords always. * -* * -* A 'set' consists of m contiguous setwords, whose bits are numbered * -* 0,1,2,... from left (high-order) to right (low-order), using only * -* the rightmost WORDSIZE bits of each setword. It is used to * -* represent a subset of {0,1,...,n-1} in the usual way - bit number x * -* is 1 iff x is in the subset. Bits numbered n or greater, and * -* unnumbered bits, are assumed permanently zero. * -* * -* A 'graph' consists of n contiguous sets. The i-th set represents * -* the vertices adjacent to vertex i, for i = 0,1,...,n-1. * -* * -* A 'permutation' is an array of n ints repesenting a permutation of * -* the set {0,1,...,n-1}. The value of the i-th entry is the number to * -* which i is mapped. * -* * -* If g is a graph and p is a permutation, then g^p is the graph in * -* which vertex i is adjacent to vertex j iff vertex p[i] is adjacent * -* to vertex p[j] in g. * -* * -* A partition nest is represented by a pair (lab,ptn), where lab and ptn * -* are int arrays. The "partition at level x" is the partition whose * -* cells are {lab[i],lab[i+1],...,lab[j]}, where [i,j] is a maximal * -* subinterval of [0,n-1] such that ptn[k] > x for i <= k < j and * -* ptn[j] <= x. The partition at level 0 is given to nauty by the user. * -* This is refined for the root of the tree, which has level 1. * -* * -*****************************************************************************/ - -#ifndef NAUTY_IN_MAGMA -#if HAVE_SYSTYPES_H -#include -#endif -#if HAVE_UNISTD_H -#include -#endif -#if HAVE_STDDEF_H -#include -#endif -#if HAVE_STDLIB_H -#include -#endif -#if HAVE_STRING_H -#include -#else -#include -#endif -#endif - -/* WORDSIZE is the number of set elements per setword (16, 32 or 64). - WORDSIZE and setword are defined as follows: - - DEFAULT_WORDSIZE is usually 0 but is set by the configure script - to NN if --enable-wordsize=NN is used, where NN is 16, 32 or 64. - - If WORDSIZE is not defined, but DEFAULT_WORDSIZE > 0, then set - WORDSIZE to the same value as DEFAULT_WORDSIZE. - If WORDSIZE is so far undefined, use 32 unless longs have more - than 32 bits, in which case use 64. - Define setword thus: - WORDSIZE==16 : unsigned short - WORDSIZE==32 : unsigned int unless it is too small, - in which case unsigned long - WORDSIZE==64 : the first of unsigned int, unsigned long, - unsigned long long, which is large enough. -*/ - -#ifdef NAUTY_IN_MAGMA -#undef WORDSIZE -#define WORDSIZE WORDBITS -#endif - -#ifndef WORDSIZE -#if DEFAULT_WORDSIZE > 0 -#define WORDSIZE DEFAULT_WORDSIZE -#endif -#endif - -#ifdef WORDSIZE - -#if (WORDSIZE != 16) && (WORDSIZE != 32) && (WORDSIZE != 64) - #error "WORDSIZE must be 16, 32 or 64" -#endif - -#else /* WORDSIZE undefined */ - -#if SIZEOF_LONG>4 -#define WORDSIZE 64 -#else -#define WORDSIZE 32 -#endif - -#endif /* WORDSIZE */ - -#ifdef NAUTY_IN_MAGMA -typedef t_uint setword; -#define SETWORD_INT /* Don't assume this is correct in Magma. */ - -#else /* NAUTY_IN_MAGMA */ - -#if WORDSIZE==16 -typedef unsigned short setword; -#define SETWORD_SHORT -#endif - -#if WORDSIZE==32 -#if SIZEOF_INT>=4 -typedef unsigned int setword; -#define SETWORD_INT -#else -typedef unsigned long setword; -#define SETWORD_LONG -#endif -#endif - -#if WORDSIZE==64 -#if SIZEOF_INT>=8 -typedef unsigned int setword; -#define SETWORD_INT -#else -#if SIZEOF_LONG>=8 -typedef unsigned long setword; -#define SETWORD_LONG -#else -typedef unsigned long long setword; -#define SETWORD_LONGLONG -#endif -#endif -#endif - -#endif /* NAUTY_IN_MAGMA else */ - -#if SIZEOF_LONG_LONG>=8 && SIZEOF_LONG==4 -typedef unsigned long long nauty_counter; -#define LONG_LONG_COUNTERS 1 -#define COUNTER_FMT "%llu" -#else -typedef unsigned long nauty_counter; -#define LONG_LONG_COUNTERS 0 -#define COUNTER_FMT "%lu" -#endif -#define PRINT_COUNTER(f,x) fprintf(f,COUNTER_FMT,x) - -#define NAUTYVERSIONID (25490+HAVE_TLS) /* 10000*version + HAVE_TLS */ -#define NAUTYREQUIRED NAUTYVERSIONID /* Minimum compatible version */ - -#if WORDSIZE==16 -#define NAUTYVERSION "2.5 (16 bits)" -#endif -#if WORDSIZE==32 -#define NAUTYVERSION "2.5 (32 bits)" -#endif -#if WORDSIZE==64 -#define NAUTYVERSION "2.5 (64 bits)" -#endif - -#ifndef MAXN /* maximum allowed n value; use 0 for dynamic sizing. */ -#define MAXN 0 -#define MAXM 0 -#else -#define MAXM ((MAXN+WORDSIZE-1)/WORDSIZE) /* max setwords in a set */ -#endif /* MAXN */ - -/* Starting at version 2.2, set operations work for all set sizes unless - ONE_WORD_SETS is defined. In the latter case, if MAXM=1, set ops - work only for single-setword sets. In any case, macro versions - ending with 1 work for single-setword sets and versions ending with - 0 work for all set sizes. -*/ - -#if WORDSIZE==16 -#define SETWD(pos) ((pos)>>4) /* number of setword containing bit pos */ -#define SETBT(pos) ((pos)&0xF) /* position within setword of bit pos */ -#define TIMESWORDSIZE(w) ((w)<<4) -#define SETWORDSNEEDED(n) ((((n)-1)>>4)+1) /* setwords needed for n bits */ -#endif - -#if WORDSIZE==32 -#define SETWD(pos) ((pos)>>5) -#define SETBT(pos) ((pos)&0x1F) -#define TIMESWORDSIZE(w) ((w)<<5) -#define SETWORDSNEEDED(n) ((((n)-1)>>5)+1) -#endif - -#if WORDSIZE==64 -#define SETWD(pos) ((pos)>>6) -#define SETBT(pos) ((pos)&0x3F) -#define TIMESWORDSIZE(w) ((w)<<6) /* w*WORDSIZE */ -#define SETWORDSNEEDED(n) ((((n)-1)>>6)+1) -#endif - -#ifdef NAUTY_IN_MAGMA -#define BITT bs_bit -#else -#define BITT bit -#endif - -#define ADDELEMENT1(setadd,pos) (*(setadd) |= BITT[pos]) -#define DELELEMENT1(setadd,pos) (*(setadd) &= ~BITT[pos]) -#define FLIPELEMENT1(setadd,pos) (*(setadd) ^= BITT[pos]) -#define ISELEMENT1(setadd,pos) ((*(setadd) & BITT[pos]) != 0) -#define EMPTYSET1(setadd,m) *(setadd) = 0; -#define GRAPHROW1(g,v,m) ((set*)(g)+(v)) -#define ADDONEARC1(g,v,w,m) (g)[v] |= BITT[w] -#define ADDONEEDGE1(g,v,w,m) { ADDONEARC1(g,v,w,m); ADDONEARC1(g,w,v,m); } -#define EMPTYGRAPH1(g,m,n) EMPTYSET0(g,n) /* really EMPTYSET0 */ - -#define ADDELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] |= BITT[SETBT(pos)]) -#define DELELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] &= ~BITT[SETBT(pos)]) -#define FLIPELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] ^= BITT[SETBT(pos)]) -#define ISELEMENT0(setadd,pos) (((setadd)[SETWD(pos)] & BITT[SETBT(pos)]) != 0) -#define EMPTYSET0(setadd,m) \ - {setword *es; \ - for (es = (setword*)(setadd)+(m); --es >= (setword*)(setadd);) *es=0;} -#define GRAPHROW0(g,v,m) ((set*)(g) + (m)*(size_t)(v)) -#define ADDONEARC0(g,v,w,m) ADDELEMENT0(GRAPHROW0(g,v,m),w) -#define ADDONEEDGE0(g,v,w,m) { ADDONEARC0(g,v,w,m); ADDONEARC0(g,w,v,m); } -#define EMPTYGRAPH0(g,m,n) EMPTYSET0(g,(m)*(size_t)(n)) - -#if (MAXM==1) && defined(ONE_WORD_SETS) -#define ADDELEMENT ADDELEMENT1 -#define DELELEMENT DELELEMENT1 -#define FLIPELEMENT FLIPELEMENT1 -#define ISELEMENT ISELEMENT1 -#define EMPTYSET EMPTYSET1 -#define GRAPHROW GRAPHROW1 -#define ADDONEARC ADDONEARC1 -#define ADDONEEDGE ADDONEEDGE1 -#define EMPTYGRAPH EMPTYGRAPH1 -#else -#define ADDELEMENT ADDELEMENT0 -#define DELELEMENT DELELEMENT0 -#define FLIPELEMENT FLIPELEMENT0 -#define ISELEMENT ISELEMENT0 -#define EMPTYSET EMPTYSET0 -#define GRAPHROW GRAPHROW0 -#define ADDONEARC ADDONEARC0 -#define ADDONEEDGE ADDONEEDGE0 -#define EMPTYGRAPH EMPTYGRAPH0 -#endif - - -#ifdef NAUTY_IN_MAGMA -#undef EMPTYSET -#define EMPTYSET(setadd,m) {t_int _i; bsp_makeempty(setadd,m,_i);} -#endif - -#define NOTSUBSET(word1,word2) ((word1) & ~(word2)) /* test if the 1-bits - in setword word1 do not form a subset of those in word2 */ -#define INTERSECT(word1,word2) ((word1) &= (word2)) /* AND word2 into word1 */ -#define UNION(word1,word2) ((word1) |= (word2)) /* OR word2 into word1 */ -#define SETDIFF(word1,word2) ((word1) &= ~(word2)) /* - word2 into word1 */ -#define XOR(word1,word2) ((word1) ^= (word2)) /* XOR word2 into word1 */ -#define ZAPBIT(word,x) ((word) &= ~BITT[x]) /* delete bit x in setword */ -#define TAKEBIT(iw,w) {(iw) = FIRSTBITNZ(w); (w) ^= BITT[iw];} - -#ifdef SETWORD_LONGLONG -#define MSK3232 0xFFFFFFFF00000000ULL -#define MSK1648 0xFFFF000000000000ULL -#define MSK0856 0xFF00000000000000ULL -#define MSK1632 0x0000FFFF00000000ULL -#define MSK0840 0xFF0000000000ULL -#define MSK1616 0xFFFF0000ULL -#define MSK0824 0xFF000000ULL -#define MSK0808 0xFF00ULL -#define MSK63C 0x7FFFFFFFFFFFFFFFULL -#define MSK31C 0x7FFFFFFFULL -#define MSK15C 0x7FFFULL -#define MSK64 0xFFFFFFFFFFFFFFFFULL -#define MSK32 0xFFFFFFFFULL -#define MSK16 0xFFFFULL -#define MSK8 0xFFULL -#endif - -#ifdef SETWORD_LONG -#define MSK3232 0xFFFFFFFF00000000UL -#define MSK1648 0xFFFF000000000000UL -#define MSK0856 0xFF00000000000000UL -#define MSK1632 0x0000FFFF00000000UL -#define MSK0840 0xFF0000000000UL -#define MSK1616 0xFFFF0000UL -#define MSK0824 0xFF000000UL -#define MSK0808 0xFF00UL -#define MSK63C 0x7FFFFFFFFFFFFFFFUL -#define MSK31C 0x7FFFFFFFUL -#define MSK15C 0x7FFFUL -#define MSK64 0xFFFFFFFFFFFFFFFFUL -#define MSK32 0xFFFFFFFFUL -#define MSK16 0xFFFFUL -#define MSK8 0xFFUL -#endif - -#if defined(SETWORD_INT) || defined(SETWORD_SHORT) -#define MSK3232 0xFFFFFFFF00000000U -#define MSK1648 0xFFFF000000000000U -#define MSK0856 0xFF00000000000000U -#define MSK1632 0x0000FFFF00000000U -#define MSK0840 0xFF0000000000U -#define MSK1616 0xFFFF0000U -#define MSK0824 0xFF000000U -#define MSK0808 0xFF00U -#define MSK63C 0x7FFFFFFFFFFFFFFFU -#define MSK31C 0x7FFFFFFFU -#define MSK15C 0x7FFFU -#define MSK64 0xFFFFFFFFFFFFFFFFU -#define MSK32 0xFFFFFFFFU -#define MSK16 0xFFFFU -#define MSK8 0xFFU -#endif - -#if defined(SETWORD_LONGLONG) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04llx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08llx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16llx" -#endif -#endif - -#if defined(SETWORD_LONG) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04lx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08lx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16lx" -#endif -#endif - -#if defined(SETWORD_INT) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04x" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08x" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16x" -#endif -#endif - -#if defined(SETWORD_SHORT) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04hx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08hx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16hx" -#endif -#endif - -/* POPCOUNT(x) = number of 1-bits in a setword x - FIRSTBIT(x) = number of first 1-bit in non-zero setword (0..WORDSIZE-1) - or WORDSIZE if x == 0 - FIRSTBITNZ(x) = as FIRSTBIT(x) but assumes x is not zero - BITMASK(x) = setword whose rightmost WORDSIZE-x-1 (numbered) bits - are 1 and the rest 0 (0 <= x < WORDSIZE) - (I.e., bits 0..x are unselected and the rest selected.) - ALLBITS = all (numbered) bits in a setword */ - -#if WORDSIZE==64 -#define POPCOUNT(x) (bytecount[(x)>>56 & 0xFF] + bytecount[(x)>>48 & 0xFF] \ - + bytecount[(x)>>40 & 0xFF] + bytecount[(x)>>32 & 0xFF] \ - + bytecount[(x)>>24 & 0xFF] + bytecount[(x)>>16 & 0xFF] \ - + bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK3232 ? \ - (x) & MSK1648 ? \ - (x) & MSK0856 ? \ - 0+leftbit[((x)>>56) & MSK8] : \ - 8+leftbit[(x)>>48] \ - : (x) & MSK0840 ? \ - 16+leftbit[(x)>>40] : \ - 24+leftbit[(x)>>32] \ - : (x) & MSK1616 ? \ - (x) & MSK0824 ? \ - 32+leftbit[(x)>>24] : \ - 40+leftbit[(x)>>16] \ - : (x) & MSK0808 ? \ - 48+leftbit[(x)>>8] : \ - 56+leftbit[x]) -#define BITMASK(x) (MSK63C >> (x)) -#define ALLBITS MSK64 -#define SWCHUNK0(w) ((long)((w)>>48)&0xFFFFL) -#define SWCHUNK1(w) ((long)((w)>>32)&0xFFFFL) -#define SWCHUNK2(w) ((long)((w)>>16)&0xFFFFL) -#define SWCHUNK3(w) ((long)(w)&0xFFFFL) -#endif - -#if WORDSIZE==32 -#define POPCOUNT(x) (bytecount[(x)>>24 & 0xFF] + bytecount[(x)>>16 & 0xFF] \ - + bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK1616 ? ((x) & MSK0824 ? \ - leftbit[((x)>>24) & MSK8] : 8+leftbit[(x)>>16]) \ - : ((x) & MSK0808 ? 16+leftbit[(x)>>8] : 24+leftbit[x])) -#define BITMASK(x) (MSK31C >> (x)) -#define ALLBITS MSK32 -#define SWCHUNK0(w) ((long)((w)>>16)&0xFFFFL) -#define SWCHUNK1(w) ((long)(w)&0xFFFFL) -#endif - -#if WORDSIZE==16 -#define POPCOUNT(x) (bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK0808 ? leftbit[((x)>>8) & MSK8] : 8+leftbit[x]) -#define BITMASK(x) (MSK15C >> (x)) -#define ALLBITS MSK16 -#define SWCHUNK0(w) ((long)(w)&0xFFFFL) -#endif - -#if defined(SETWORD_LONGLONG) && HAVE_CLZLL -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clzll(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif -#if defined(SETWORD_LONG) && HAVE_CLZL -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clzl(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif -#if defined(SETWORD_INT) && HAVE_CLZ -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clz(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif - -#ifndef FIRSTBITNZ -#define FIRSTBITNZ FIRSTBIT -#endif - -#ifdef SYS_CRAY -#undef POPCOUNT -#undef FIRSTBIT -#undef BITMASK -#define POPCOUNT(x) _popcnt(x) -#define FIRSTBIT(x) _leadz(x) -#define BITMASK(x) _mask(65+(x)) -#endif - -#ifdef NAUTY_IN_MAGMA -#undef POPCOUNT -#undef FIRSTBIT -#undef BITMASK -#define POPCOUNT(x) bs_popcount(x) -#define FIRSTBIT(x) bs_firstbit(x) -#define BITMASK(x) bs_bitmask(x) -#endif - -#define ALLMASK(n) ((n)?~BITMASK((n)-1):(setword)0) /* First n bits */ - - /* various constants: */ -#undef FALSE -#undef TRUE -#define FALSE 0 -#define TRUE 1 - -#if SIZEOF_INT>=4 -#define NAUTY_INFINITY 0x40000002 -#else -#define NAUTY_INFINITY 0x7FFF -#endif - -/* The following four types are obsolete, use int in new code. */ -typedef int shortish; -typedef shortish permutation; -typedef int nvector,np2vector; - -/* For backward compatibility: */ -#if !HAS_MATH_INF && !defined(INFINITY) -#define INFINITY NAUTY_INFINITY -#endif - -#if MAXN > NAUTY_INFINITY-2 - #error MAXN must be at most NAUTY_INFINITY-2 -#endif - - /* typedefs for sets, graphs, permutations, etc.: */ - -typedef int boolean; /* boolean MUST be the same as int */ - -#define UPROC void /* obsolete */ - -typedef setword set,graph; -#ifdef NAUTY_IN_MAGMA -typedef graph nauty_graph; -typedef set nauty_set; -#endif - -typedef struct -{ - double grpsize1; /* size of group is */ - int grpsize2; /* grpsize1 * 10^grpsize2 */ -#define groupsize1 grpsize1 /* for backwards compatibility */ -#define groupsize2 grpsize2 - int numorbits; /* number of orbits in group */ - int numgenerators; /* number of generators found */ - int errstatus; /* if non-zero : an error code */ -#define outofspace errstatus; /* for backwards compatibility */ - unsigned long numnodes; /* total number of nodes */ - unsigned long numbadleaves; /* number of leaves of no use */ - int maxlevel; /* maximum depth of search */ - unsigned long tctotal; /* total size of all target cells */ - unsigned long canupdates; /* number of updates of best label */ - unsigned long invapplics; /* number of applications of invarproc */ - unsigned long invsuccesses; /* number of successful uses of invarproc() */ - int invarsuclevel; /* least level where invarproc worked */ -} statsblk; - -/* codes for errstatus field (see nauty.c for more accurate descriptions): */ -#define NTOOBIG 1 /* n > MAXN or n > WORDSIZE*m */ -#define MTOOBIG 2 /* m > MAXM */ -#define CANONGNIL 3 /* canong = NULL, but getcanon = TRUE */ - -/* manipulation of real approximation to group size */ -#define MULTIPLY(s1,s2,i) if ((s1 *= i) >= 1e10) {s1 /= 1e10; s2 += 10;} - -struct optionstruct; /* incomplete definition */ - -typedef struct -{ - boolean (*isautom) /* test for automorphism */ - (graph*,int*,boolean,int,int); - int (*testcanlab) /* test for better labelling */ - (graph*,graph*,int*,int*,int,int); - void (*updatecan) /* update canonical object */ - (graph*,graph*,int*,int,int,int); - void (*refine) /* refine partition */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - void (*refine1) /* refine partition, MAXM==1 */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - boolean (*cheapautom) /* test for easy automorphism */ - (int*,int,boolean,int); - int (*targetcell) /* decide which cell to split */ - (graph*,int*,int*,int,int,boolean,int,int,int); - void (*freedyn)(void); /* free dynamic memory */ - void (*check) /* check compilation parameters */ - (int,int,int,int); - void (*init)(graph*,graph**,graph*,graph**,int*,int*,set*, - struct optionstruct*,int*,int,int); - void (*cleanup)(graph*,graph**,graph*,graph**,int*,int*, - struct optionstruct*,statsblk*,int,int); -} dispatchvec; - -typedef struct optionstruct -{ - int getcanon; /* make canong and canonlab? */ -#define LABELONLY 2 /* new value UNIMPLEMENTED */ - boolean digraph; /* multiple edges or loops? */ - boolean writeautoms; /* write automorphisms? */ - boolean writemarkers; /* write stats on pts fixed, etc.? */ - boolean defaultptn; /* set lab,ptn,active for single cell? */ - boolean cartesian; /* use cartesian rep for writing automs? */ - int linelength; /* max chars/line (excl. '\n') for output */ - FILE *outfile; /* file for output, if any */ - void (*userrefproc) /* replacement for usual refine procedure */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - void (*userautomproc) /* procedure called for each automorphism */ - (int,int*,int*,int,int,int); - void (*userlevelproc) /* procedure called for each level */ - (int*,int*,int,int*,statsblk*,int,int,int,int,int,int); - void (*usernodeproc) /* procedure called for each node */ - (graph*,int*,int*,int,int,int,int,int,int); - void (*invarproc) /* procedure to compute vertex-invariant */ - (graph*,int*,int*,int,int,int,int*,int,boolean,int,int); - int tc_level; /* max level for smart target cell choosing */ - int mininvarlevel; /* min level for invariant computation */ - int maxinvarlevel; /* max level for invariant computation */ - int invararg; /* value passed to (*invarproc)() */ - dispatchvec *dispatch; /* vector of object-specific routines */ - boolean schreier; /* use random schreier method */ - void *extra_options; /* arbitrary extra options */ -#ifdef NAUTY_IN_MAGMA - boolean print_stats; /* CAYLEY specfic - GYM Sep 1990 */ - char *invarprocname; /* Magma - no longer global sjc 1994 */ - int lab_h; /* Magma - no longer global sjc 1994 */ - int ptn_h; /* Magma - no longer global sjc 1994 */ - int orbitset_h; /* Magma - no longer global sjc 1994 */ -#endif -} optionblk; - -#ifndef CONSOLWIDTH -#define CONSOLWIDTH 78 -#endif - -/* The following are obsolete. Just use NULL. */ -#define NILFUNCTION ((void(*)())NULL) /* nil pointer to user-function */ -#define NILSET ((set*)NULL) /* nil pointer to set */ -#define NILGRAPH ((graph*)NULL) /* nil pointer to graph */ - -#define DEFAULTOPTIONS_GRAPH(options) optionblk options = \ - {0,FALSE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,NULL,100,0,1,0,&dispatch_graph,FALSE,NULL} -#define DEFAULTOPTIONS_DIGRAPH(options) optionblk options = \ - {0,TRUE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,adjacencies,100,0,999,0,&dispatch_graph,FALSE,NULL} - -#ifndef DEFAULTOPTIONS -#define DEFAULTOPTIONS DEFAULTOPTIONS_GRAPH -#endif - -#ifdef NAUTY_IN_MAGMA -#define PUTC(c,f) io_putchar(c) -#else -#ifdef IS_JAVA -extern void javastream(FILE* f,char c); -#define PUTC(c,f) javastream(f,c) -#else -#define PUTC(c,f) putc(c,f) -#endif -#endif - -/* We hope that malloc, free, realloc are declared either in - or . Otherwise we will define them. We also assume that - size_t has been defined by the time we get to define malloc(). */ -#ifndef NAUTY_IN_MAGMA -#if MALLOC_DEC==2 -#include -#endif -#if MALLOC_DEC==0 -extern void *malloc(size_t); -extern void *realloc(void*,size_t); -extern void free(void*); -#endif -#endif - -/* ALLOCS(x,y) should return a pointer (any pointer type) to x*y units of new - storage, not necessarily initialised. A "unit" of storage is defined by - the sizeof operator. x and y are integer values of type int or larger, - but x*y may well be too large for an int. The macro should cast to the - correct type for the call. On failure, ALLOCS(x,y) should return a NULL - pointer. FREES(p) should free storage previously allocated by ALLOCS, - where p is the value that ALLOCS returned. */ - -#ifdef NAUTY_IN_MAGMA -#define ALLOCS(x,y) mem_malloc((size_t)(x)*(size_t)(y)) -#define REALLOCS(p,x) mem_realloc(p,(size_t)(x)) -#define FREES(p) mem_free(p) -#else -#define ALLOCS(x,y) malloc((size_t)(x)*(size_t)(y)) -#define REALLOCS(p,x) realloc(p,(size_t)(x)) -#define FREES(p) free(p) -#endif - -/* The following macros are used by nauty if MAXN=0. They dynamically - allocate arrays of size dependent on m or n. For each array there - should be two static variables: - type *name; - size_t name_sz; - "name" will hold a pointer to an allocated array. "name_sz" will hold - the size of the allocated array in units of sizeof(type). DYNALLSTAT - declares both variables and initialises name_sz=0. DYNALLOC1 and - DYNALLOC2 test if there is enough space allocated, and if not free - the existing space and allocate a bigger space. The allocated space - is not initialised. - - In the case of DYNALLOC1, the space is allocated using - ALLOCS(sz,sizeof(type)). - In the case of DYNALLOC2, the space is allocated using - ALLOCS(sz1,sz2*sizeof(type)). - - DYNREALLOC is like DYNALLOC1 except that the old contents are copied - into the new space. realloc() is assumed. This is not currently - used by nauty or dreadnaut. - - DYNFREE frees any allocated array and sets name_sz back to 0. - CONDYNFREE does the same, but only if name_sz exceeds some limit. -*/ - -#define DYNALLSTAT(type,name,name_sz) \ - static TLS_ATTR type *name; static TLS_ATTR size_t name_sz=0 -#define DYNALLOC1(type,name,name_sz,sz,msg) \ - if ((size_t)(sz) > name_sz) \ - { if (name_sz) FREES(name); name_sz = (sz); \ - if ((name=(type*)ALLOCS(sz,sizeof(type))) == NULL) {alloc_error(msg);}} -#define DYNALLOC2(type,name,name_sz,sz1,sz2,msg) \ - if ((size_t)(sz1)*(size_t)(sz2) > name_sz) \ - { if (name_sz) FREES(name); name_sz = (size_t)(sz1)*(size_t)(sz2); \ - if ((name=(type*)ALLOCS((sz1),(sz2)*sizeof(type))) == NULL) \ - {alloc_error(msg);}} -#define DYNREALLOC(type,name,name_sz,sz,msg) \ - {if ((size_t)(sz) > name_sz) \ - { if ((name = (type*)REALLOCS(name,(sz)*sizeof(type))) == NULL) \ - {alloc_error(msg);} else name_sz = (sz);}} -#define DYNFREE(name,name_sz) if (name_sz) {FREES(name); name_sz = 0;} -#define CONDYNFREE(name,name_sz,minsz) \ - if (name_sz > (size_t)(minsz)) {FREES(name); name_sz = 0;} - -/* File to write error messages to (used as first argument to fprintf()). */ -#define ERRFILE stderr - -/* Don't use OLDEXTDEFS, it is only still here for Magma. */ -#ifdef OLDEXTDEFS -#define EXTDEF_CLASS -#ifdef EXTDEFS -#define EXTDEF_TYPE 1 -#else -#define EXTDEF_TYPE 2 -#endif -#else -#define EXTDEF_CLASS static -#define EXTDEF_TYPE 2 -#endif - -extern int labelorg; /* Declared in nautil.c */ - -#ifndef NAUTY_IN_MAGMA - /* Things equivalent to bit, bytecount, leftbit are defined - in bs.h for Magma. */ -#if EXTDEF_TYPE==1 -extern setword bit[]; -extern int bytecount[]; -extern int leftbit[]; - -#else - /* array giving setwords with single 1-bit */ -#if WORDSIZE==64 -#ifdef SETWORD_LONGLONG -EXTDEF_CLASS const -setword bit[] = {01000000000000000000000LL,0400000000000000000000LL, - 0200000000000000000000LL,0100000000000000000000LL, - 040000000000000000000LL,020000000000000000000LL, - 010000000000000000000LL,04000000000000000000LL, - 02000000000000000000LL,01000000000000000000LL, - 0400000000000000000LL,0200000000000000000LL, - 0100000000000000000LL,040000000000000000LL, - 020000000000000000LL,010000000000000000LL, - 04000000000000000LL,02000000000000000LL, - 01000000000000000LL,0400000000000000LL,0200000000000000LL, - 0100000000000000LL,040000000000000LL,020000000000000LL, - 010000000000000LL,04000000000000LL,02000000000000LL, - 01000000000000LL,0400000000000LL,0200000000000LL, - 0100000000000LL,040000000000LL,020000000000LL,010000000000LL, - 04000000000LL,02000000000LL,01000000000LL,0400000000LL, - 0200000000LL,0100000000LL,040000000LL,020000000LL, - 010000000LL,04000000LL,02000000LL,01000000LL,0400000LL, - 0200000LL,0100000LL,040000LL,020000LL,010000LL,04000LL, - 02000LL,01000LL,0400LL,0200LL,0100LL,040LL,020LL,010LL, - 04LL,02LL,01LL}; -#else -EXTDEF_CLASS const -setword bit[] = {01000000000000000000000,0400000000000000000000, - 0200000000000000000000,0100000000000000000000, - 040000000000000000000,020000000000000000000, - 010000000000000000000,04000000000000000000, - 02000000000000000000,01000000000000000000, - 0400000000000000000,0200000000000000000, - 0100000000000000000,040000000000000000,020000000000000000, - 010000000000000000,04000000000000000,02000000000000000, - 01000000000000000,0400000000000000,0200000000000000, - 0100000000000000,040000000000000,020000000000000, - 010000000000000,04000000000000,02000000000000, - 01000000000000,0400000000000,0200000000000,0100000000000, - 040000000000,020000000000,010000000000,04000000000, - 02000000000,01000000000,0400000000,0200000000,0100000000, - 040000000,020000000,010000000,04000000,02000000,01000000, - 0400000,0200000,0100000,040000,020000,010000,04000, - 02000,01000,0400,0200,0100,040,020,010,04,02,01}; -#endif -#endif - -#if WORDSIZE==32 -EXTDEF_CLASS const -setword bit[] = {020000000000,010000000000,04000000000,02000000000, - 01000000000,0400000000,0200000000,0100000000,040000000, - 020000000,010000000,04000000,02000000,01000000,0400000, - 0200000,0100000,040000,020000,010000,04000,02000,01000, - 0400,0200,0100,040,020,010,04,02,01}; -#endif - -#if WORDSIZE==16 -EXTDEF_CLASS const -setword bit[] = {0100000,040000,020000,010000,04000,02000,01000,0400,0200, - 0100,040,020,010,04,02,01}; -#endif - - /* array giving number of 1-bits in bytes valued 0..255: */ -EXTDEF_CLASS const -int bytecount[] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8}; - - /* array giving position (1..7) of high-order 1-bit in byte: */ -EXTDEF_CLASS const -int leftbit[] = {8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; -#endif /* EXTDEFS */ - -#endif /* not NAUTY_IN_MAGMA */ - -#define ANSIPROT 1 -#define EXTPROC(func,args) extern func args; /* obsolete */ - -/* The following is for C++ programs that read nauty.h. Compile nauty - itself using C, not C++. */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void alloc_error(char*); -extern void breakout(int*,int*,int,int,int,set*,int); -extern boolean cheapautom(int*,int,boolean,int); -extern void doref(graph*,int*,int*,int,int*,int*,int*,set*,int*, - void(*)(graph*,int*,int*,int,int*,int*,set*,int*,int,int), - void(*)(graph*,int*,int*,int,int,int,int*,int,boolean,int,int), - int,int,int,boolean,int,int); -extern void extra_autom(int*,int); -extern void extra_level(int,int*,int*,int,int,int,int,int,int); -extern boolean isautom(graph*,int*,boolean,int,int); -extern dispatchvec dispatch_graph; -extern int itos(int,char*); -extern void fmperm(int*,set*,set*,int,int); -extern void fmptn(int*,int*,int,set*,set*,int,int); -extern void longprune(set*,set*,set*,set*,int); -extern void nauty(graph*,int*,int*,set*,int*,optionblk*, - statsblk*,set*,int,int,int,graph*); -extern void maketargetcell(graph*,int*,int*,int,set*,int*,int*,int,boolean, - int,int (*)(graph*,int*,int*,int,int,boolean,int,int,int),int,int); -extern int nextelement(set*,int,int); -extern int orbjoin(int*,int*,int); -extern void permset(set*,set*,int,int*); -extern void putstring(FILE*,char*); -extern void refine(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -extern void refine1(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -extern void shortprune(set*,set*,int); -extern int targetcell(graph*,int*,int*,int,int,boolean,int,int,int); -extern int testcanlab(graph*,graph*,int*,int*,int,int); -extern void updatecan(graph*,graph*,int*,int,int,int); -extern void writeperm(FILE*,int*,boolean,int,int); -extern void nauty_freedyn(void); -extern void nauty_check(int,int,int,int); -extern void naugraph_check(int,int,int,int); -extern void nautil_check(int,int,int,int); -extern void nautil_freedyn(void); -extern void naugraph_freedyn(void); -extern void densenauty(graph*,int*,int*,int*, - optionblk*,statsblk*,int,int,graph*); -extern void writegroupsize(FILE*,double,int); - -#ifdef __cplusplus -} -#endif - -/* @edit_msg@ */ - - -#endif /* _NAUTY_H_ */ diff --git a/tools/nauty25r9_unix/nauty.a b/tools/nauty25r9_unix/nauty.a deleted file mode 100644 index 9c2bc761b900a2308e81ad303d772517176dce05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652526 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

      |h=jB}zJ^0tu8Hx!7T3pqUu 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%0DwU?E+FdwW2!EvccS6kz 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 z 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%0DVSj_ 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 j53iUBxBE{2_{>6hw=yBRo-ZsM%;t@GCTpE#wi zJ~qu0olR%xseha&=()CT)?Cjw8|oU=ai10Eoj2Hd8h~4MWFH+mhRfs;^Cak$I~QqN*_UPr30xW_-NwAc}&m4;P^g-2zcrZbEe1YJToU>SEr&mr>=f32{Su75mL;a zqt6kffTA}>XVj^;P6!}VHv^s2zeVS*XXgrVG9aBH@j1;NoFA4f%NdH_9 zR0^EvcXGJqnI}5j@43+5E%37i|9b^a{GVX{FAIEtp#Q7Dr9AH&xaO0`?WWelGUne$ z;8M^11TOiXD{vZTX#G?$PCX&&eG@NoBLw}qc-Hha0;eIE#%~Zfh1(xLazAjve=Kk* z|NjV_`1Da+Jf8avycgqJUGVJ!m;7H5IPur=%d|5V$NCBLpt_ zL(3bs&o>hpYoOa38&OMUJTIMHkVZ@S5Y29|DZi2YyE5fSG(Yo1TOXb4aQA9&ldDj z&({lF#_KKvAI5R`lMCJUor)mwFy8aMFY36EkovXR8bT1A)tQ{~yLp zd4414r96)aT*~vPz$Jg1$B$ZXIzOy*!T%s|sn16QF7v~77yS0qodh-W!-f6~PJDEJ z7-!&G&rt){dd{az2B+ht`5Y&3DgPG*F7@_h#!da7E$F5G2MS#Bk+#gGe)^q}EvJ^h zzrbaBjS#rx9}&2u|0Cn3{B43>%1=DW<>Dv%QF?}q_)tGeJ05N-`eJ~(Tyu4(aM_RY zvq$1jKkamS5_XIRac$&#O+P8e0X7-9o^R6MTQt3%KdNAV8rSnjmVxW}quUK!&mXNb za6NxiM2z7ye?1>G&A|2i&V2^1=XbPidd;Vv%MYe?=FGZQTXYdNT?Te<)1{)Ktjw?6 zXSeBcw@`eQicOWLz|+$+E=)_d-wy6;%XygKhx~aS&lq2PFfLX5I&yvSi=8{KFWw7x z_U86f-o7>7cdehtdL#;LpIQsJZ%uBjm+t{@!BpFe-8=2MO|Rs{j`7{^Em-391)DyY z;%hk>o+I{}U^2KIOSOh!S@A`IHCRx*#y4tX(}6tSEgwSr;Y5D;>?H?q_i!DAS@dW0 z2rk0HyRf~4Q-3lDDh##lp$e9tyU+?cJbncJEwT5R4ly zRuO-M^}svYu{_v|^}%h0fyd_T%y~1=73*VRQE#Go?=F;;@Y&6Kw_}0PnG}hz?cE!W zet^9%dDwwbX(eyo3li%B3LOtb@4KVjdG>v;Ex+B@JQ-@ht4^>;(-A+DE&#f81lo8_ z*}J~k&AG%CH@D}KH^HB z%A>-eHEYaXu_fKS>s!b{?4=-{3n#$ZI$M1`x%z7|4D3I2*1ppGZ~2yory!8*g!0A5 zAcPbx6@x-lXi9OurrFSKIJva4guEi|SYvj34n^BKyA^D(WuPs8(JPbymhAu+Q0{8j zuJ>?;llN5;efgu#nllR+u=?MpvS{TOiYL5g+i z1!w*1`$TwpBZWvtfUd|5j$1?qO)gS9>=x~=LM?42?<=OvY1yw@_OA4rX3H+La$w8m zR+NA?YZ11>BI>?NH(d+aglKdH^zm@!7S}GAqj>r$&hk_4RBV4_v z5c}1 zN{QB8l#&@tJx2n&8XgVqTc6`=UJe0NMTBL=mi#8)g8g6H*>naN48@g>I=V!ccZnr)7t+Esya0J=VEo~yyLN*341{m#CwXdUm3{;hMw4D+*P)YVR~c0?_mz%QbEyi?b|cgMa>g!MJFeCx8Fx!-i|M)nMWME8qUAWdmKP)qK}f}&)eRp4Lh#R8(mM`5i} z)6t^}_V&t~i*-e`s0eGL(#vqv+A*4{yd6JsXE_%S^;7QVd({V-Qc!r~u?6`fXn^Hd7|YCVK{4Gk0!!l}&VRtbB-PKy>!ZnRTKOkoXIomSc1Rr;)i!q50}0)vnsyR_D%H*(uZ_3v_cj=!Yw(@fvANf*9$)iC!ZeR zbYG9=4GCv5dZnD71=4gHH^cujUUV1!DkjwaDSQgU44?Y3gqh(}xg@9iyv~!y_l2Z zWf5){d!Xz{VVU8ROx=Z_&-r&g-b-hOFW<>~qWj0KB}v!D=^&`Jk!wj*od}GkDs!-w zWX0(Ysh=Z9Qz=Bhf}dA#M2Z!CX4Qq(PX*%+myF)37}xn%(~nkoM$RQ1KKbu%4U2o)gn=CaR~pDd}hWpv=A|PHC7q)A0!&6R&BQN?)tX==1Q*+1J-8 zvgxz%v6|>-VFf0xN^B}O4ARQ)$)zTSCA*TWzHo{U&Z0wW8k{Jm>Zoor*3-P96j5Twx8=V*D`Qmc^S;;!hQC+ zmSyzOkzJL#Rv~`JVJsIM7fQ~a5*!<}55iPR;#7J`Hiz=N!ZdcZyAmT{hT-f`U>Do< zncpK6==8Pxfant6F6>ku65n?AR{`-mi0$mjhs~0PhaM>dkpq)4khQV7HPQF5gYA9t z8*cw=u6l=EV3s`syNlP0N7%J+9+kP85&l>uSwR_ukxFa;Th|HM(O$5#ksb=Eu^t=V z5pb6IlQR%-cjiyxhaaMB=j`Y7UHTl4gEC`T80b0QN*qJs!#t8|>AMOu`w^A3QS3s- zzBugY+tTosp0wytof0d)F9yRxN0aw+wD%rL&#+Poe;A6|R=zd#qy`x0QTfK|P%Rgk zL<&*L9FEmsfTzd8O&@v|oRcUBSpJ6o<&R=ta93|d2a|L8#h5PehKBYkXgEHoOwny> z=zMo=45r|!kaE~=7dX(`@NjwC+Nl}&$*{w|AZFkW@y<9l5EXp`Moy-TfqkKK9Xafm z6IZ~F#l-x;Hnvu^5c%R2U(2mfA1C#WsjUsqrj1sWWL{uz?Jan+I`BuAs(f{|*V@yH zY7%uA{eRn!{g%HbG-B^l>|nPe7Qu`SZENm_d;&!kg<*#TCU8cmlG-t%50%_7EaRlJ zLaW7k?-<2FeAF>YjRm{zwCqzX`|A9zM?O==&~qPGz&ZmJnreH!n)$$1_@>?SX#Z!S z9t+#UifK>tG_opKiLI`d6IKol#&8#Rr~6z#zy&wuX+n@m=D>VNMPJe@GS`;9NMmr{jOul1Fqxg zYOf)i7HeS8;ss0DnrVMEk8Vn=WS=-ygY+87MZ`nY}AIXFJ|N=OB*$?n9xj# zb4k;%8$7Yy7f1UHsYw>U9Bvv`>}i0Fffvg6=<*6V?r2&M10BPj^TghXKrdF;nb1QG zCXIsjj30WCa#pm@kHSsE3v)6|klT~q!h9kKsiP4?{td6 z+g-n!+8VSyN++q;G2KIvu}ESab&@}&oOSdzI( zXyv7@OCT?73C0E~n#D~yl@l#F; z(NPXm@_i+~w-^@gs6Hlj-zhW{e+h|JT@C{@-eOFVj?b|YD5c1)xQ8Al_>x~mAE>+y zI<$JMCEJQr>rmzh*>5N<=!Axkv6zjUrz^(b#I;#DC)hDu)rzSHF-xa(d_By`LBUfX z^`|KqDXHS2QdW9?3K{g%J(FT|)u~J(EvAoQD)f7qK@~-+r2FJW{{U7vRaPRCBsraq z#h`6BoN1MIDt|6EgB)zoV4AZrkg6%@`NzLsZEu%@<#?8hSZ#%g<`Fd#H`8>C|k zLJLO@?UnE~uLp6+?s0LncOn#c%-7t5AuD^-mF&`EB?j)7mWFnaoDv-Fyb`R;JD3 zFWrKU*Wk zE9^RdnE~1SrEK!c<@KAHaw(bnT_Mlxzp~-;(|Is+ScF~xxpMi)3TWr$TbW6Cu2L6< zC%-&FyCyH+&j(4aB4t>z*6n9`wl8-9lS8SiFkn@@L|YnFzG`PyA@uof=<}t8sS6@#_L1;QsUtPeaY|vpV{7swrRUT* zw*+d!ucdw-OT(rT>|)o?FUmA-TX1EKzSO997_&%Vnbo9>QYQtV!`Mx zJvZ2rI-E7pH6Uw`6~}yF-q4f$Qo?~k00a8aw}GS^@q@*~?a(=t9FY4c<>t98pQiW0 zHrPivFyu(*pSi8su^(H{WzhQ3YEQ2YkuKp>mBhFCw==)t4@J_&>o9#O2>+(#FeiM_ z@~inwsrFlQ`6u?rX4C#0G~2dgL4X(k? zHzBze1rv{_Xg!WDcCwdK3yK0UI$=n3B&{^Ubk*wWiWAIV6Q(DA@|dU4BY&6PPMM2Q zPb{(3P9XI8&Pjeu*~?o>dPBMV*UC^4rjoEccwZ=8gep#b=tUT~`=BMwiA}&%xCl*w zqfD5=z9au}9F}jpQ{~WWh7?#S+;9o%1n!4IT`9NJ6=n(pN~UDqc6Y~@0?0Mx%y`^F z|26hYVbxe{6b@=!Z27(MP6xu zu+ynkK|F8@66u>!S7B+kqW7N}elRvx0$^b9)=(+nC9)fYuX;!<^i_IAY3^4>P(%=htC8cy}T_y(G00f|y^zc!bIg(Ir) z-P}H?ZI6q0sQ7-+-p1wD|6pKY~qg;|4s5IQ_9;5U)KSg$KL7eoBa03Fl!j zlo&p?YICeDjJF{|s53CZ7~_#oT0P914G8U_;zVWwM2vFtKT!tbiP19ukzXC7adY@$ zX-uWJ(pYIA!y`+QmpRwO)2C3OBEMvQW)5OZ1&f=&%t)VE1v>QnnaA-c*PgU}vEOQw zyXg;TUd;4oFrvN=tP+SG^J$n);(G?1K$awGUyg@+jETj^(NUn8b~1&Dv|68HkdW>G zvV$KDF@^LoC9wM51!5SFUX2dpPL+z7Goj3Z0r78#pnz7E-W%*#2ELVZ5b4Lkj&As4 zG(7n{3|`}PlitzU@^l8rsSn1G_}Wh@OP>pNj0bU~lHEY(O1!Ye#ZZ(_jZ;>JVQQDQ z{`9BJ>zF~XitbP|2`=)0KxZD;(t0}H!I27>eWO1?18af2m?$UoGF`0m?!MYr4A#|a zJldD8wY%f6bt|olXIJQ28>b;$B(M?D^-rX$0yR$mczRs#!z%WKQ7m%JD~`;x)4k;5fQ)ybC?5yh?ZNi1O6xBW z`S9AACEuXlht>FgJuSsq5gK*V%V{Lb1{NnSF>i4OG zmB-QplFc}IpcN%puo}e!8mjoPB{|ja6yF=G9Z*?}>NcH|!t}?_u=T`Y6A`Zpp`J2S z?>QXLVzpy{`6J=tCsSX-3@Q9c>KJ-uYZ(|*T&O)f2nZEtLXC5sY6ck3llydAu*Y)M z96oPAm$6aK(XhtHi4Y1+u2eNS4(p0Nt0$C?G058x31DtB(K)JvUgn65=bY*)dXzd0QyWyzg4u8%Em3G@!Z{6Z~m zU_5`{9?zjmM8XGJaOxD-DfQ@~hVuz!dNhCQC`WT`hndG7&7guzy`8#v0F9}3SEc`f zV8^RSzJg$e7p6pGehj$kTmg&=&Yc)nd;E#o7bjJYT^sCp476(8JvWLq7O1kUDr{!O z$TKW?OsM=pSu1E(LGeT1%R1Cqsxla}kF{1^IshVA8y$>uQr=I$F4gFKvo4seN5PIK zK&b1|ktkGo_RLUELIs&=tVOVn&wljRZ*w6HKI*V2wan9)t)U-;MChn0SqUxGfE_6x z&OuHneRS{{1giez`e?;F6UMB9;Z&GwTw#zak@O3hBcNg3mMWHcSdTLCyxElIHyE^_ zo51#zq4_%1&9jqLlc(M%vYkNY8a&PR=Mk=VSEqM!Utq7=7obK@UFzkTFjJ|{ z)Bmruyca>03)H0F>e#(vZu)m^Z(a|7&na|^rF%#pt9>cfS-dlb`qQyDRo+`E>%=7W zqDy{}M!I7scgKd|w84r9jLCNFUb*8LjL4_W;ybjtEx~m^f_She9Z6TCtF6JnvkFnd zAiMPN7Qyh0(dXv`c`WScCFv~dH^p}3Uk8!64TAj*749Dnf zdl*+7=SE^bDcJsF+*Cs-GsB4Y9KzecX1y}u+y?#b^bMV`%HDEG<|mL+)%&>KAB(qb zg`Nj<+w6yGob$NX&>J`J`t6Um{UemoS0m0ejz&9b(&xvWX`sgfSG%GwN~F)KaR${m zXT{TT43p=_(|01Lu8XG!_5M)D<5ZVmc{h@tjTxMt-Wf5ij9zgYY(uIQzjjtoYye`> zlli`_T8~RlXVb%Cn6}OTJDmYFp(*LoO>wl@YMf8>$KFjj{a>c?528&V5V+%18_po8 zLZ03h(Ts=2oSQg$Z6QDSWwhh5O^4%c*ZB-#a!54&33j4jfn4c-x-L`SOE~jGPpOKt zg)ek!tr4$Lj^nyo*nfZWPcSLolRjvwBMcE+HJ3GT*2~zMQT#f(SN<9;-JV%M{~gCN z?ih<6D5j0pXMO>{lrM(3b-2Z*Styf&7|}Glgusz9ykN|h6Hiw&KQljOc(e7yk=rBy zzRYa)UnepSG76!O9K{Rn3o(Xvi>LRf?JTuEz|{e@L^zZ4cl5HQT09z3=gUd4^pS|lW2`C+ zLRC=lvA!fPg!YD2f{qg_-$fgWw0(R!8jSYfN$Ty2ZWV#zD>mlU$pcm3NL!?81#awz2D}ph?j|>U+U`cbH$XOMLFk?XRL0^oONdJ!7 z2V>9A@QocMu&T#61w!QmhR{-s+nCpzeL9qylz+sTGNju1+ECbtuW_c7#PB7AN;W<- zz$-A4c#Kq7$}s0apw{A;6Y%JGX6J`W=vek1ipBK`KSxGS!t zsd1KLh3VZ?2bN`m?R*D_k_Yl6&l8)eN0mblk8*Qr0#T>BSjkw?E%IslS!JadIySOv z!6qEloGKoufdw=O8$(Aj%_&|HTXPCgVXig_WU5hf@`9&B@``(kGip54f~b>R6Jn-R zbn6^ZF-6)wD@aa`rZcWoNAQxhBEYI9k48n;1+@ZE`^QLr*VMj9swqygHIzDD4Ta+O zdGS_sD+W-Qn1wiTrW7+Ev`gj@-vG#!E;b!1-ciJe2#u(n$?`eHoBPTel2q&t58WKR ze+zcU3L*u2VqiWbwX>od>Btj7@kISbCv)=N8jSBx$c=Fi@?3> z(e3O-w;`=Eb02OLKj;hTPvX=UaBebYvFVQ@vue`MNabQ!CC*WyJ3XJ#ns4812B{zGu%L9mIY z--y@#=Hx!K$n^#9#R^Wr8u5C6#Y^Z%qLnxe=B5H{)1WKIK4ExQ>e%t%JcS-z7Xm}pzU;3>g+YA zHr3)Vq{|Uq0NT7-xKLrA`7$C<%|=C)Gg+KRbg2gsDjvUHXj4kI5Br&{XW6@Pd3S-l zyVt=nN6B}$i$$jBuRP}ooSzr|r+?*nE1n}O zvyQ{c=efS@TEn=MyfT+HfbBs?+er<}>guy}q0opiSFH#&)i0blVo55rbn(Oybs=SR ziJnGXO(0M;Eihdhnseif=*;*xVT5~8^V0dr+B;}}TOuC~o7#ph2Zff`H#IL>){qTR zt3I-EXjq@AovJV=YQVsRAdNtFKhG020RhvvT)rT4&US-G^ zQf8!@DQh`?spk5+k$`C(OB2ut6^&~(UmF@xH)=#(k#A~!Lw(cy#z4~{Vb*7x& zzaE~@+=u#2@=cvQ`PxwV>;G0iCbqI+ZQI0tvY_x$f1g&Iv)`MIH!a4PXHj`Y{f2HS|M2ZwTfcr&@yS_a;5P>a zRQkNK7;ctwIc>K5te+gTyN(0Knq+!ya@(uh}?%w{B z2aRtVFm=$p!r#yiH=r}@aFf@^hSwurylgw%)B8>FV5Q0`YI>2ie1SG6m&?|+vNt|u z5NvHjZKpe4B-a%F%t*l^F;@h+@va}ww)C)-5S@Y^mm)EI$!WiQ8K2SmdBx}oxs~f^d|U~dzoTy}lb12Ga*lPuc3$6B`q*i~b*VQC zU{?x$W^I5VoPj;kb(N%y%pscw;%Y{JeL|PV&uHnLr#9 z;IK&M8-|}dey?vkH-{N2clLz7J2U?TcV8*j|J}EpedRFoO>GtAMO}cSs1c$W)*)ZkSv{AUKA?!tem@Bs$J#Z8M==;|h{7Hk0 z&i^%omzeTadOyP53cN4*x!!b+)e}lSH5y#P2+j{J1XBW;Kd$oig?9p{{PWa;na?MB z|34YL)!<6^2d^I+{C$Iq&d(Pu6d!iTa7ypTb*sU<4X$*2;JbnMCC@=af5<#kdOYZl z7`)5a3spKf@Q(~0x)3*TN+-tkFCP4hkngIzE>YxJy_fc|h>QIyrTcbI9QEoJ~(F&BT<6S2`q7M^6olN5|4rz-`eUztf4e%U9C z=t|g4pDQ9tSSu($OurJ^Gyccs8B7<;>e}SFGOaFIGFK;@`5_QirW)!PO)5D*iM2G} z{JOkbeEDA6xYDev)h@$Qf^TVRNz(Z0mvRlwHl&W=SRvD^U_NAET^>+Zzob4{pK4e- zziBbPz(;9m8|$vsIs5DS+v~BOwqOyg#Akg=7d7~@3wZnrA6%6o7D?1xWx^ic@;3_N zn>%-5W7DFBz9plYD#m#BuSm!aNGXVfG$ zEOG1>e6o6~hpS=mW8X%(ga;DJBlfxm0vm%=an zKQMR^uD15m5B&%oi}=yk}mw1hJ70?{42olij#5=Shy|!FfxS`{=z5ef!nqMMk1W# z!!A>q+t>>HF)677H;!jW#Qz%!SGq{!Y3H~2@m{d z7H;!@&cew*VfcJz;a32Yayi?mw30s}PpJ!+@~SjAHEN^cs2JKk@RKe+$BaB>Y;bVA z@W**8og4s5c}C+Wa*i?dBB!M5N~78fF7jVv;dZ~F?2>`6&`Y{v9`v&;+|JK$Sh&sK zv2eTobXmAfzqA;_z`66G$>8pMxZ8t%jR(EsLEq&;|A2*4{$oly^k**ofWhCf@ZrFu zyiQuU&F2e7PnYx>HohW*yVHA)h1+~adEgZmZs&8{!fie$T=-BUP{_;=q@D=A*M&c8 z=s)wo`fr)|yUYD?5Bi^b(C_r1A8aCW^IztHFE_Z9m*m4L3%Ap?%ivO8CuLBlt z=kxfBbvVX*6@HR$Gc4SWce%mc<+9F${s{}W^Zz{;F6ljG;dcGJ+pJ?rdMmWpzRd=w z{FRpce{j*?VCau}&=3BSCJ_D$41Jlw-Tc2|;Y`;kL;p1wZnE9i=;ANwU1ibR@{3J7 zk!Q8xFE-~WPZ@qvUawmGITf33=->0;KQN>Tgui3xhZ@|S-q9950kjhD41)`w`|ylz zPDou;d$i?TVQ`_}tjT<9EqXg2er9lYJKEvm^IwL~pFQ{#urk3(ywB@f-?;{Nr#I@N zf7Z~?^q^nvqTgxgTP=D!AMSV2Oa4D>(cAg3%|*Z6@PE~VzHqoEkn}!j=+8B{JG~=a z^df(SMQ_XBY~guGWakTev84s>cT4x9(LgggI{Oib~#pCIOXS9NH^Vu zOaH&v!fifD4}6se-r<37vT({HX3!oeEwwN z;@OguDc#%u^$Uf<(E_&Gyjgb&e v=w(0jkPDan&{2i?^ka;kSLMQG-*bZtmwn9lU3hDm=3C6dgA;iU8T@|%ley7Z diff --git a/tools/nauty25r9_unix/nauty.c b/tools/nauty25r9_unix/nauty.c deleted file mode 100644 index a6fbe2a..0000000 --- a/tools/nauty25r9_unix/nauty.c +++ /dev/null @@ -1,1202 +0,0 @@ -/***************************************************************************** -* * -* Main source file for version 2.5 of nauty. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. Permission * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : renamed to version 1.3 (no changes to this file) * -* 28-Sep-88 : renamed to version 1.4 (no changes to this file) * -* 23-Mar-89 : changes for version 1.5 : * -* - add use of refine1 instead of refine for m==1 * -* - changes for new optionblk syntax * -* - disable tc_level use for digraphs * -* - interposed doref() interface to refine() so that * -* options.invarproc can be supported * -* - declared local routines static * -* 28-Mar-89 : - implemented mininvarlevel/maxinvarlevel < 0 options * -* 2-Apr-89 : - added invarproc fields in stats * -* 5-Apr-89 : - modified error returns from nauty() * -* - added error message to ERRFILE * -* - changed MAKEEMPTY uses to EMPTYSET * -* 18-Apr-89 : - added MTOOBIG and CANONGNIL * -* 8-May-89 : - changed firstcode[] and canoncode[] to short * -* 10-Nov-90 : changes for version 1.6 : * -* - added dummy routine nauty_null (see dreadnaut.c) * -* 2-Sep-91 : changes for version 1.7 : * -* - moved MULTIPLY into nauty.h * -* 27-Mar-92 : - changed 'n' into 'm' in error message in nauty() * -* 5-Jun-93 : renamed to version 1.7+ (no changes to this file) * -* 18-Aug-93 : renamed to version 1.8 (no changes to this file) * -* 17-Sep-93 : renamed to version 1.9 (no changes to this file) * -* 13-Jul-96 : changes for version 2.0 : * -* - added dynamic allocation * -* 21-Oct-98 : - made short into shortish for BIGNAUTY as needed * -* 7-Jan-00 : - allowed n=0 * -* - added nauty_check() and a call to it * -* 12-Feb-00 : - used better method for target cell memory allocation * -* - did a little formating of the code * -* 27-May-00 : - fixed error introduced on Feb 12. * -* - dynamic allocations in nauty() are now deallocated * -* before return if n >= 320. * -* 16-Nov-00 : - use function prototypes, change UPROC to void. * -* - added argument to tcellproc(), removed nvector * -* - now use options.dispatch, options.groupopts is gone. * -* 22-Apr-01 : - Added code for compilation into Magma * -* - Removed nauty_null() and EXTDEFS * -* 2-Oct-01 : - Improved error message for bad dispatch vector * -* 21-Nov-01 : - use NAUTYREQUIRED in nauty_check() * -* 20-Dec-02 : changes for version 2.2: * -* - made tcnode0 global * -* - added nauty_freedyn() * -* 17-Nov-03 : changed INFINITY to NAUTY_INFINITY * -* 14-Sep-04 : extended prototypes even to recursive functions * -* 16-Oct-04 : disallow NULL dispatch vector * -* 11-Nov-05 : changes for version 2.3: * -* - init() and cleanup() optional calls * -* 23-Nov-06 : changes for version 2.4: * -* - use maketargetcell() instead of tcellproc() * -* 29-Nov-06 : add extra_autom, extra_level, extra_options * -* 10-Dec-06 : remove BIGNAUTY * -* 10-Nov-09 : remove shortish and permutation types * -* 16-Nov-11 : added Shreier option * -* 15-Jan012 : added TLS_ATTR to static declarations * -* * -*****************************************************************************/ - -#define ONE_WORD_SETS -#include "nauty.h" -#include "schreier.h" - -#ifdef NAUTY_IN_MAGMA -#include "cleanup.e" -#define NAUTY_ABORT (-11) -#endif - -typedef struct tcnode_struct -{ - struct tcnode_struct *next; - set *tcellptr; -} tcnode; - -/* aproto: header new_nauty_protos.h */ - -#ifndef NAUTY_IN_MAGMA -#if !MAXN -static int firstpathnode0(int*, int*, int, int, tcnode*); -static int othernode0(int*, int*, int, int, tcnode*); -#else -static int firstpathnode(int*, int*, int, int); -static int othernode(int*, int*, int, int); -#endif -static void firstterminal(int*, int); -static int processnode(int*, int*, int, int); -static void recover(int*, int); -static void writemarker(int, int, int, int, int, int); -#endif - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#define OPTCALL(proc) if (proc != NULL) (*proc) - - /* copies of some of the options: */ -static TLS_ATTR - boolean getcanon,digraph,writeautoms,domarkers,cartesian,doschreier; -static TLS_ATTR int linelength,tc_level,mininvarlevel,maxinvarlevel,invararg; -static TLS_ATTR void (*usernodeproc)(graph*,int*,int*,int,int,int,int,int,int); -static TLS_ATTR void (*userautomproc)(int,int*,int*,int,int,int); -static TLS_ATTR void (*userlevelproc) - (int*,int*,int,int*,statsblk*,int,int,int,int,int,int); -static TLS_ATTR void (*invarproc) - (graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -static TLS_ATTR FILE *outfile; -static TLS_ATTR dispatchvec dispatch; - - /* local versions of some of the arguments: */ -static TLS_ATTR int m,n; -static TLS_ATTR graph *g,*canong; -static TLS_ATTR int *orbits; -static TLS_ATTR statsblk *stats; - /* temporary versions of some stats: */ -static TLS_ATTR unsigned long invapplics,invsuccesses; -static TLS_ATTR int invarsuclevel; - - /* working variables: */ -static TLS_ATTR int gca_first, /* level of greatest common ancestor of - current node and first leaf */ - gca_canon, /* ditto for current node and bsf leaf */ - noncheaplevel, /* level of greatest ancestor for which cheapautom==FALSE */ - allsamelevel, /* level of least ancestor of first leaf for - which all descendant leaves are known to be - equivalent */ - eqlev_first, /* level to which codes for this node match those - for first leaf */ - eqlev_canon, /* level to which codes for this node match those - for the bsf leaf. */ - comp_canon, /* -1,0,1 according as code at eqlev_canon+1 is - <,==,> that for bsf leaf. Also used for - similar purpose during leaf processing */ - samerows, /* number of rows of canong which are correct for - the bsf leaf BDM:correct description? */ - canonlevel, /* level of bsf leaf */ - stabvertex, /* point fixed in ancestor of first leaf at level - gca_canon */ - cosetindex; /* the point being fixed at level gca_first */ - -static TLS_ATTR boolean needshortprune; /* used to flag calls to shortprune */ - -#if !MAXN -DYNALLSTAT(set,defltwork,defltwork_sz); -DYNALLSTAT(int,workperm,workperm_sz); -DYNALLSTAT(set,fixedpts,fixedpts_sz); -DYNALLSTAT(int,firstlab,firstlab_sz); -DYNALLSTAT(int,canonlab,canonlab_sz); -DYNALLSTAT(short,firstcode,firstcode_sz); -DYNALLSTAT(short,canoncode,canoncode_sz); -DYNALLSTAT(int,firsttc,firsttc_sz); -DYNALLSTAT(set,active,active_sz); - -/* In the dynamically allocated case (MAXN=0), each level of recursion - needs one set (tcell) to represent the target cell. This is - implemented by using a linked list of tcnode anchored at the root - of the search tree. Each node points to its child (if any) and to - the dynamically allocated tcell. Apart from the the first node of - the list, each node always has a tcell good for m up to alloc_m. - tcnodes and tcells are kept between calls to nauty, except that - they are freed and reallocated if m gets bigger than alloc_m. */ - -static TLS_ATTR tcnode tcnode0 = {NULL,NULL}; -static TLS_ATTR int alloc_m = 0; - -#else -static TLS_ATTR set defltwork[2*MAXM]; /* workspace in case none provided */ -static TLS_ATTR int workperm[MAXN]; /* various scratch uses */ -static TLS_ATTR set fixedpts[MAXM]; /* points which were explicitly - fixed to get current node */ -static TLS_ATTR int firstlab[MAXN], /* label from first leaf */ - canonlab[MAXN]; /* label from bsf leaf */ -static TLS_ATTR short firstcode[MAXN+2], /* codes for first leaf */ - canoncode[MAXN+2]; /* codes for bsf leaf */ -static TLS_ATTR int firsttc[MAXN+2]; /* index of target cell for left path */ -static TLS_ATTR set active[MAXM]; /* used to contain index to cells now - active for refinement purposes */ -#endif - -static TLS_ATTR set *workspace,*worktop; /* first and just-after-last - addresses of work area to hold automorphism data */ -static TLS_ATTR set *fmptr; /* pointer into workspace */ - -static TLS_ATTR schreier *gp; /* These two for Schreier computations */ -static TLS_ATTR permnode *gens; - -/***************************************************************************** -* * -* This procedure finds generators for the automorphism group of a * -* vertex-coloured graph and optionally finds a canonically labelled * -* isomorph. A description of the data structures can be found in * -* nauty.h and in the "nauty User's Guide". The Guide also gives * -* many more details about its use, and implementation notes. * -* * -* Parameters - means read-only, means write-only, means both: * -* g - the graph * -* lab,ptn - used for the partition nest which defines the colouring * -* of g. The initial colouring will be set by the program, * -* using the same colour for every vertex, if * -* options->defaultptn!=FALSE. Otherwise, you must set it * -* yourself (see the Guide). If options->getcanon!=FALSE, * -* the contents of lab on return give the labelling of g * -* corresponding to canong. This does not change the * -* initial colouring of g as defined by (lab,ptn), since * -* the labelling is consistent with the colouring. * -* active - If this is not NULL and options->defaultptn==FALSE, * -* it is a set indicating the initial set of active colours. * -* See the Guide for details. * -* orbits - On return, orbits[i] contains the number of the * -* least-numbered vertex in the same orbit as i, for * -* i=0,1,...,n-1. * -* options - A list of options. See nauty.h and/or the Guide * -* for details. * -* stats - A list of statistics produced by the procedure. See * -* nauty.h and/or the Guide for details. * -* workspace - A chunk of memory for working storage. * -* worksize - The number of setwords in workspace. See the Guide * -* for guidance. * -* m - The number of setwords in sets. This must be at * -* least ceil(n / WORDSIZE) and at most MAXM. * -* n - The number of vertices. This must be at least 1 and * -* at most MAXN. * -* canong - The canononically labelled isomorph of g. This is * -* only produced if options->getcanon!=FALSE, and can be * -* given as NULL otherwise. * -* * -* FUNCTIONS CALLED: firstpathnode(),updatecan() * -* * -*****************************************************************************/ - -void -nauty(graph *g_arg, int *lab, int *ptn, set *active_arg, - int *orbits_arg, optionblk *options, statsblk *stats_arg, - set *ws_arg, int worksize, int m_arg, int n_arg, graph *canong_arg) -{ - int i; - int numcells; - int retval; - int initstatus; -#if !MAXN - tcnode *tcp,*tcq; -#endif - - /* determine dispatch vector */ - - if (options->dispatch == NULL) - { - fprintf(ERRFILE,">E nauty: null dispatch vector\n"); - fprintf(ERRFILE,"Maybe you need to recompile\n"); - exit(1); - } - else - dispatch = *(options->dispatch); - - if (options->userrefproc) - dispatch.refine = options->userrefproc; - else if (dispatch.refine1 && m_arg == 1) - dispatch.refine = dispatch.refine1; - - if (dispatch.refine == NULL || dispatch.updatecan == NULL - || dispatch.targetcell == NULL || dispatch.cheapautom == NULL) - { - fprintf(ERRFILE,">E bad dispatch vector\n"); - exit(1); - } - - /* check for excessive sizes: */ - -#if !MAXN - if (m_arg > NAUTY_INFINITY/WORDSIZE+1) - { - stats_arg->errstatus = MTOOBIG; - fprintf(ERRFILE,"nauty: need m <= %d, but m=%d\n\n", - NAUTY_INFINITY/WORDSIZE+1,m_arg); - return; - } - if (n_arg > NAUTY_INFINITY-2 || n_arg > WORDSIZE * m_arg) - { - stats_arg->errstatus = NTOOBIG; - fprintf(ERRFILE,"nauty: need n <= min(%d,%d*m), but n=%d\n\n", - NAUTY_INFINITY-2,WORDSIZE,n_arg); - return; - } -#else - if (m_arg > MAXM) - { - stats_arg->errstatus = MTOOBIG; - fprintf(ERRFILE,"nauty: need m <= %d\n\n",MAXM); - return; - } - if (n_arg > MAXN || n_arg > WORDSIZE * m_arg) - { - stats_arg->errstatus = NTOOBIG; - fprintf(ERRFILE, - "nauty: need n <= min(%d,%d*m)\n\n",MAXM,WORDSIZE); - return; - } -#endif - if (n_arg == 0) /* Special code for zero-sized graph */ - { - stats_arg->grpsize1 = 1.0; - stats_arg->grpsize2 = 0; - stats_arg->numorbits = 0; - stats_arg->numgenerators = 0; - stats_arg->errstatus = 0; - stats_arg->numnodes = 1; - stats_arg->numbadleaves = 0; - stats_arg->maxlevel = 1; - stats_arg->tctotal = 0; - stats_arg->canupdates = (options->getcanon != 0); - stats_arg->invapplics = 0; - stats_arg->invsuccesses = 0; - stats_arg->invarsuclevel = 0; - return; - } - - /* take copies of some args, and options: */ - m = m_arg; - n = n_arg; - - nautil_check(WORDSIZE,m,n,NAUTYVERSIONID); - OPTCALL(dispatch.check)(WORDSIZE,m,n,NAUTYVERSIONID); - -#if !MAXN - DYNALLOC1(set,defltwork,defltwork_sz,2*m,"nauty"); - DYNALLOC1(set,fixedpts,fixedpts_sz,m,"nauty"); - DYNALLOC1(set,active,active_sz,m,"nauty"); - DYNALLOC1(int,workperm,workperm_sz,n,"nauty"); - DYNALLOC1(int,firstlab,firstlab_sz,n,"nauty"); - DYNALLOC1(int,canonlab,canonlab_sz,n,"nauty"); - DYNALLOC1(short,firstcode,firstcode_sz,n+2,"nauty"); - DYNALLOC1(short,canoncode,canoncode_sz,n+2,"nauty"); - DYNALLOC1(int,firsttc,firsttc_sz,n+2,"nauty"); - if (m > alloc_m) - { - tcp = tcnode0.next; - while (tcp != NULL) - { - tcq = tcp->next; - FREES(tcp->tcellptr); - FREES(tcp); - tcp = tcq; - } - alloc_m = m; - tcnode0.next = NULL; - } -#endif - - /* OLD g = g_arg; */ - orbits = orbits_arg; - stats = stats_arg; - - getcanon = options->getcanon; - digraph = options->digraph; - writeautoms = options->writeautoms; - domarkers = options->writemarkers; - cartesian = options->cartesian; - doschreier = options->schreier; - if (doschreier) schreier_check(WORDSIZE,m,n,NAUTYVERSIONID); - linelength = options->linelength; - if (digraph) tc_level = 0; - else tc_level = options->tc_level; - outfile = (options->outfile == NULL ? stdout : options->outfile); - usernodeproc = options->usernodeproc; - userautomproc = options->userautomproc; - userlevelproc = options->userlevelproc; - - invarproc = options->invarproc; - if (options->mininvarlevel < 0 && options->getcanon) - mininvarlevel = -options->mininvarlevel; - else - mininvarlevel = options->mininvarlevel; - if (options->maxinvarlevel < 0 && options->getcanon) - maxinvarlevel = -options->maxinvarlevel; - else - maxinvarlevel = options->maxinvarlevel; - invararg = options->invararg; - - if (getcanon) - if (canong_arg == NULL) - { - stats_arg->errstatus = CANONGNIL; - fprintf(ERRFILE, - "nauty: canong=NULL but options.getcanon=TRUE\n\n"); - return; - } - - /* initialize everything: */ - - if (options->defaultptn) - { - for (i = 0; i < n; ++i) /* give all verts same colour */ - { - lab[i] = i; - ptn[i] = NAUTY_INFINITY; - } - ptn[n-1] = 0; - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - } - else - { - ptn[n-1] = 0; - numcells = 0; - for (i = 0; i < n; ++i) - if (ptn[i] != 0) ptn[i] = NAUTY_INFINITY; - else ++numcells; - if (active_arg == NULL) - { - EMPTYSET(active,m); - for (i = 0; i < n; ++i) - { - ADDELEMENT(active,i); - while (ptn[i]) ++i; - } - } - else - for (i = 0; i < M; ++i) active[i] = active_arg[i]; - } - - g = canong = NULL; - initstatus = 0; - OPTCALL(dispatch.init)(g_arg,&g,canong_arg,&canong, - lab,ptn,active,options,&initstatus,m,n); - if (initstatus) - { - stats->errstatus = initstatus; - return; - } - - if (g == NULL) g = g_arg; - if (canong == NULL) canong = canong_arg; - - if (doschreier) newgroup(&gp,&gens,n); - - for (i = 0; i < n; ++i) orbits[i] = i; - stats->grpsize1 = 1.0; - stats->grpsize2 = 0; - stats->numgenerators = 0; - stats->numnodes = 0; - stats->numbadleaves = 0; - stats->tctotal = 0; - stats->canupdates = 0; - stats->numorbits = n; - EMPTYSET(fixedpts,m); - noncheaplevel = 1; - eqlev_canon = -1; /* needed even if !getcanon */ - - if (worksize >= 2 * m) - workspace = ws_arg; - else - { - workspace = defltwork; - worksize = 2 * m; - } - worktop = workspace + (worksize - worksize % (2 * m)); - fmptr = workspace; - - /* here goes: */ - stats->errstatus = 0; - needshortprune = FALSE; - invarsuclevel = NAUTY_INFINITY; - invapplics = invsuccesses = 0; - -#if !MAXN - retval = firstpathnode0(lab,ptn,1,numcells,&tcnode0); -#else - retval = firstpathnode(lab,ptn,1,numcells); -#endif - -#ifdef NAUTY_IN_MAGMA - if (retval != NAUTY_ABORT) -#endif - { - if (getcanon) - { - (*dispatch.updatecan)(g,canong,canonlab,samerows,M,n); - for (i = 0; i < n; ++i) lab[i] = canonlab[i]; - } - stats->invarsuclevel = - (invarsuclevel == NAUTY_INFINITY ? 0 : invarsuclevel); - stats->invapplics = invapplics; - stats->invsuccesses = invsuccesses; - } - -#if !MAXN -#ifndef NAUTY_IN_MAGMA - if (n >= 320) -#endif - { - nautil_freedyn(); - OPTCALL(dispatch.freedyn)(); - nauty_freedyn(); - } -#endif - OPTCALL(dispatch.cleanup)(g_arg,&g,canong_arg,&canong, - lab,ptn,options,stats,m,n); - - if (doschreier) - { - freeschreier(&gp,&gens); - if (n >= 320) schreier_freedyn(); - } -} - -/***************************************************************************** -* * -* firstpathnode(lab,ptn,level,numcells) produces a node on the leftmost * -* path down the tree. The parameters describe the level and the current * -* colour partition. The set of active cells is taken from the global set * -* 'active'. If the refined partition is not discrete, the leftmost child * -* is produced by calling firstpathnode, and the other children by calling * -* othernode. * -* For MAXN=0 there is an extra parameter: the address of the parent tcell * -* structure. * -* The value returned is the level to return to. * -* * -* FUNCTIONS CALLED: (*usernodeproc)(),doref(),cheapautom(), * -* firstterminal(),nextelement(),breakout(), * -* firstpathnode(),othernode(),recover(),writestats(), * -* (*userlevelproc)(),(*tcellproc)(),shortprune() * -* * -*****************************************************************************/ - -static int -#if !MAXN -firstpathnode0(int *lab, int *ptn, int level, int numcells, - tcnode *tcnode_parent) -#else -firstpathnode(int *lab, int *ptn, int level, int numcells) -#endif -{ - int tv; - int tv1,index,rtnlevel,tcellsize,tc,childcount,qinvar,refcode; -#if !MAXN - set *tcell; - tcnode *tcnode_this; - - tcnode_this = tcnode_parent->next; - if (tcnode_this == NULL) - { - if ((tcnode_this = (tcnode*)ALLOCS(1,sizeof(tcnode))) == NULL || - (tcnode_this->tcellptr - = (set*)ALLOCS(alloc_m,sizeof(set))) == NULL) - alloc_error("tcell"); - tcnode_parent->next = tcnode_this; - tcnode_this->next = NULL; - } - tcell = tcnode_this->tcellptr; -#else - set tcell[MAXM]; -#endif - - ++stats->numnodes; - - /* refine partition : */ - doref(g,lab,ptn,level,&numcells,&qinvar,workperm, - active,&refcode,dispatch.refine,invarproc, - mininvarlevel,maxinvarlevel,invararg,digraph,M,n); - firstcode[level] = (short)refcode; - if (qinvar > 0) - { - ++invapplics; - if (qinvar == 2) - { - ++invsuccesses; - if (mininvarlevel < 0) mininvarlevel = level; - if (maxinvarlevel < 0) maxinvarlevel = level; - if (level < invarsuclevel) invarsuclevel = level; - } - } - - tc = -1; - if (numcells != n) - { - /* locate new target cell, setting tc to its position in lab, tcell - to its contents, and tcellsize to its size: */ - maketargetcell(g,lab,ptn,level,tcell,&tcellsize, - &tc,tc_level,digraph,-1,dispatch.targetcell,M,n); - stats->tctotal += tcellsize; - } - firsttc[level] = tc; - - /* optionally call user-defined node examination procedure: */ - OPTCALL(usernodeproc) - (g,lab,ptn,level,numcells,tc,(int)firstcode[level],M,n); - - if (numcells == n) /* found first leaf? */ - { - firstterminal(lab,level); - OPTCALL(userlevelproc)(lab,ptn,level,orbits,stats,0,1,1,n,0,n); - return level-1; - } - - if (noncheaplevel >= level - && !(*dispatch.cheapautom)(ptn,level,digraph,n)) - noncheaplevel = level + 1; - - /* use the elements of the target cell to produce the children: */ - index = 0; - for (tv1 = tv = nextelement(tcell,M,-1); tv >= 0; - tv = nextelement(tcell,M,tv)) - { - if (orbits[tv] == tv) /* ie, not equiv to previous child */ - { - breakout(lab,ptn,level+1,tc,tv,active,M); - ADDELEMENT(fixedpts,tv); - cosetindex = tv; - if (tv == tv1) - { -#if !MAXN - rtnlevel = firstpathnode0(lab,ptn,level+1,numcells+1, - tcnode_this); -#else - rtnlevel = firstpathnode(lab,ptn,level+1,numcells+1); -#endif - childcount = 1; - gca_first = level; - stabvertex = tv1; - } - else - { -#if !MAXN - rtnlevel = othernode0(lab,ptn,level+1,numcells+1, - tcnode_this); -#else - rtnlevel = othernode(lab,ptn,level+1,numcells+1); -#endif - ++childcount; - } - DELELEMENT(fixedpts,tv); - if (rtnlevel < level) - return rtnlevel; - if (needshortprune) - { - needshortprune = FALSE; - shortprune(tcell,fmptr-M,M); - } - recover(ptn,level); - } - if (orbits[tv] == tv1) /* ie, in same orbit as tv1 */ - ++index; - } - MULTIPLY(stats->grpsize1,stats->grpsize2,index); - - if (tcellsize == index && allsamelevel == level + 1) - --allsamelevel; - - if (domarkers) - writemarker(level,tv1,index,tcellsize,stats->numorbits,numcells); - OPTCALL(userlevelproc)(lab,ptn,level,orbits,stats,tv1,index,tcellsize, - numcells,childcount,n); - return level-1; -} - -/***************************************************************************** -* * -* othernode(lab,ptn,level,numcells) produces a node other than an ancestor * -* of the first leaf. The parameters describe the level and the colour * -* partition. The list of active cells is found in the global set 'active'. * -* The value returned is the level to return to. * -* * -* FUNCTIONS CALLED: (*usernodeproc)(),doref(),refine(),recover(), * -* processnode(),cheapautom(),(*tcellproc)(),shortprune(), * -* nextelement(),breakout(),othernode(),longprune() * -* * -*****************************************************************************/ - -static int -#if !MAXN -othernode0(int *lab, int *ptn, int level, int numcells, - tcnode *tcnode_parent) -#else -othernode(int *lab, int *ptn, int level, int numcells) -#endif -{ - int tv; - int tv1,refcode,rtnlevel,tcellsize,tc,qinvar; - short code; -#if !MAXN - set *tcell; - tcnode *tcnode_this; - - tcnode_this = tcnode_parent->next; - if (tcnode_this == NULL) - { - if ((tcnode_this = (tcnode*)ALLOCS(1,sizeof(tcnode))) == NULL || - (tcnode_this->tcellptr - = (set*)ALLOCS(alloc_m,sizeof(set))) == NULL) - alloc_error("tcell"); - tcnode_parent->next = tcnode_this; - tcnode_this->next = NULL; - } - tcell = tcnode_this->tcellptr; -#else - set tcell[MAXM]; -#endif - -#ifdef NAUTY_IN_MAGMA - if (main_seen_interrupt) return NAUTY_ABORT; -#endif - - ++stats->numnodes; - - /* refine partition : */ - doref(g,lab,ptn,level,&numcells,&qinvar,workperm,active, - &refcode,dispatch.refine,invarproc,mininvarlevel,maxinvarlevel, - invararg,digraph,M,n); - code = (short)refcode; - if (qinvar > 0) - { - ++invapplics; - if (qinvar == 2) - { - ++invsuccesses; - if (level < invarsuclevel) invarsuclevel = level; - } - } - - if (eqlev_first == level - 1 && code == firstcode[level]) - eqlev_first = level; - if (getcanon) - { - if (eqlev_canon == level - 1) - { - if (code < canoncode[level]) - comp_canon = -1; - else if (code > canoncode[level]) - comp_canon = 1; - else - { - comp_canon = 0; - eqlev_canon = level; - } - } - if (comp_canon > 0) canoncode[level] = code; - } - - tc = -1; - /* If children will be required, find new target cell and set tc to its - position in lab, tcell to its contents, and tcellsize to its size: */ - - if (numcells < n && (eqlev_first == level || - (getcanon && comp_canon >= 0))) - { - if (!getcanon || comp_canon < 0) - { - maketargetcell(g,lab,ptn,level,tcell,&tcellsize,&tc, - tc_level,digraph,firsttc[level],dispatch.targetcell,M,n); - if (tc != firsttc[level]) eqlev_first = level - 1; - } - else - maketargetcell(g,lab,ptn,level,tcell,&tcellsize,&tc, - tc_level,digraph,-1,dispatch.targetcell,M,n); - stats->tctotal += tcellsize; - } - - /* optionally call user-defined node examination procedure: */ - OPTCALL(usernodeproc)(g,lab,ptn,level,numcells,tc,(int)code,M,n); - - /* call processnode to classify the type of this node: */ - - rtnlevel = processnode(lab,ptn,level,numcells); - if (rtnlevel < level) /* keep returning if necessary */ - return rtnlevel; - if (needshortprune) - { - needshortprune = FALSE; - shortprune(tcell,fmptr-M,M); - } - - if (!(*dispatch.cheapautom)(ptn,level,digraph,n)) - noncheaplevel = level + 1; - - /* use the elements of the target cell to produce the children: */ - for (tv1 = tv = nextelement(tcell,M,-1); tv >= 0; - tv = nextelement(tcell,M,tv)) - { - breakout(lab,ptn,level+1,tc,tv,active,M); - ADDELEMENT(fixedpts,tv); -#if !MAXN - rtnlevel = othernode0(lab,ptn,level+1,numcells+1,tcnode_this); -#else - rtnlevel = othernode(lab,ptn,level+1,numcells+1); -#endif - DELELEMENT(fixedpts,tv); - - if (rtnlevel < level) return rtnlevel; - /* use stored automorphism data to prune target cell: */ - if (needshortprune) - { - needshortprune = FALSE; - shortprune(tcell,fmptr-M,M); - } - if (tv == tv1) - { - longprune(tcell,fixedpts,workspace,fmptr,M); - if (doschreier) pruneset(fixedpts,gp,&gens,tcell,M,n); - } - - recover(ptn,level); - } - - return level-1; -} - -/***************************************************************************** -* * -* Process the first leaf of the tree. * -* * -* FUNCTIONS CALLED: NONE * -* * -*****************************************************************************/ - -static void -firstterminal(int *lab, int level) -{ - int i; - - stats->maxlevel = level; - gca_first = allsamelevel = eqlev_first = level; - firstcode[level+1] = 077777; - firsttc[level+1] = -1; - - for (i = 0; i < n; ++i) firstlab[i] = lab[i]; - - if (getcanon) - { - canonlevel = eqlev_canon = gca_canon = level; - comp_canon = 0; - samerows = 0; - for (i = 0; i < n; ++i) canonlab[i] = lab[i]; - for (i = 0; i <= level; ++i) canoncode[i] = firstcode[i]; - canoncode[level+1] = 077777; - stats->canupdates = 1; - } -} - -/***************************************************************************** -* * -* Process a node other than the first leaf or its ancestors. It is first * -* classified into one of five types and then action is taken appropriate * -* to that type. The types are * -* * -* 0: Nothing unusual. This is just a node internal to the tree whose * -* children need to be generated sometime. * -* 1: This is a leaf equivalent to the first leaf. The mapping from * -* firstlab to lab is thus an automorphism. After processing the * -* automorphism, we can return all the way to the closest invocation * -* of firstpathnode. * -* 2: This is a leaf equivalent to the bsf leaf. Again, we have found an * -* automorphism, but it may or may not be as useful as one from a * -* type-1 node. Return as far up the tree as possible. * -* 3: This is a new bsf node, provably better than the previous bsf node. * -* After updating canonlab etc., treat it the same as type 4. * -* 4: This is a leaf for which we can prove that no descendant is * -* equivalent to the first or bsf leaf or better than the bsf leaf. * -* Return up the tree as far as possible, but this may only be by * -* one level. * -* * -* Types 2 and 3 can't occur if getcanon==FALSE. * -* The value returned is the level in the tree to return to, which can be * -* anywhere up to the closest invocation of firstpathnode. * -* * -* FUNCTIONS CALLED: isautom(),updatecan(),testcanlab(),fmperm(), * -* writeperm(),(*userautomproc)(),orbjoin(), * -* shortprune(),fmptn() * -* * -*****************************************************************************/ - -static int -processnode(int *lab, int *ptn, int level, int numcells) -{ - int i,code,save,newlevel; - boolean ispruneok; - int sr; - - code = 0; - if (eqlev_first != level && (!getcanon || comp_canon < 0)) - code = 4; - else if (numcells == n) - { - if (eqlev_first == level) - { - for (i = 0; i < n; ++i) workperm[firstlab[i]] = lab[i]; - - if (gca_first >= noncheaplevel || - (*dispatch.isautom)(g,workperm,digraph,M,n)) - code = 1; - } - if (code == 0) - { - if (getcanon) - { - sr = 0; - if (comp_canon == 0) - { - if (level < canonlevel) - comp_canon = 1; - else - { - (*dispatch.updatecan) - (g,canong,canonlab,samerows,M,n); - samerows = n; - comp_canon - = (*dispatch.testcanlab)(g,canong,lab,&sr,M,n); - } - } - if (comp_canon == 0) - { - for (i = 0; i < n; ++i) workperm[canonlab[i]] = lab[i]; - code = 2; - } - else if (comp_canon > 0) - code = 3; - else - code = 4; - } - else - code = 4; - } - } - - if (code != 0 && level > stats->maxlevel) stats->maxlevel = level; - - switch (code) - { - case 0: /* nothing unusual noticed */ - return level; - - case 1: /* lab is equivalent to firstlab */ - if (fmptr == worktop) fmptr -= 2 * M; - fmperm(workperm,fmptr,fmptr+M,M,n); - fmptr += 2 * M; - if (writeautoms) - writeperm(outfile,workperm,cartesian,linelength,n); - stats->numorbits = orbjoin(orbits,workperm,n); - ++stats->numgenerators; - OPTCALL(userautomproc)(stats->numgenerators,workperm,orbits, - stats->numorbits,stabvertex,n); - if (doschreier) addgenerator(&gp,&gens,workperm,n); - return gca_first; - - case 2: /* lab is equivalent to canonlab */ - if (fmptr == worktop) fmptr -= 2 * M; - fmperm(workperm,fmptr,fmptr+M,M,n); - fmptr += 2 * M; - save = stats->numorbits; - stats->numorbits = orbjoin(orbits,workperm,n); - if (stats->numorbits == save) - { - if (gca_canon != gca_first) needshortprune = TRUE; - return gca_canon; - } - if (writeautoms) - writeperm(outfile,workperm,cartesian,linelength,n); - ++stats->numgenerators; - OPTCALL(userautomproc)(stats->numgenerators,workperm,orbits, - stats->numorbits,stabvertex,n); - if (doschreier) addgenerator(&gp,&gens,workperm,n); - if (orbits[cosetindex] < cosetindex) - return gca_first; - if (gca_canon != gca_first) - needshortprune = TRUE; - return gca_canon; - - case 3: /* lab is better than canonlab */ - ++stats->canupdates; - for (i = 0; i < n; ++i) canonlab[i] = lab[i]; - canonlevel = eqlev_canon = gca_canon = level; - comp_canon = 0; - canoncode[level+1] = 077777; - samerows = sr; - break; - - case 4: /* non-automorphism terminal node */ - ++stats->numbadleaves; - break; - } /* end of switch statement */ - - /* only cases 3 and 4 get this far: */ - if (level != noncheaplevel) - { - ispruneok = TRUE; - if (fmptr == worktop) fmptr -= 2 * M; - fmptn(lab,ptn,noncheaplevel,fmptr,fmptr+M,M,n); - fmptr += 2 * M; - } - else - ispruneok = FALSE; - - save = (allsamelevel > eqlev_canon ? allsamelevel-1 : eqlev_canon); - newlevel = (noncheaplevel <= save ? noncheaplevel-1 : save); - - if (ispruneok && newlevel != gca_first) needshortprune = TRUE; - return newlevel; - } - -/***************************************************************************** -* * -* Recover the partition nest at level 'level' and update various other * -* parameters. * -* * -* FUNCTIONS CALLED: NONE * -* * -*****************************************************************************/ - -static void -recover(int *ptn, int level) -{ - int i; - - for (i = 0; i < n; ++i) - if (ptn[i] > level) ptn[i] = NAUTY_INFINITY; - - if (level < noncheaplevel) noncheaplevel = level + 1; - if (level < eqlev_first) eqlev_first = level; - if (getcanon) - { - if (level < gca_canon) gca_canon = level; - if (level <= eqlev_canon) - { - eqlev_canon = level; - comp_canon = 0; - } - } -} - -/***************************************************************************** -* * -* Write statistics concerning an ancestor of the first leaf. * -* * -* level = its level * -* tv = the vertex fixed to get the first child = the smallest-numbered * -* vertex in the target cell * -* cellsize = the size of the target cell * -* index = the number of vertices in the target cell which were equivalent * -* to tv = the index of the stabiliser of tv in the group * -* fixing the colour partition at this level * -* * -* numorbits = the number of orbits of the group generated by all the * -* automorphisms so far discovered * -* * -* numcells = the total number of cells in the equitable partition at this * -* level * -* * -* FUNCTIONS CALLED: itos(),putstring() * -* * -*****************************************************************************/ - -static void -writemarker(int level, int tv, int index, int tcellsize, - int numorbits, int numcells) -{ - char s[30]; - -#define PUTINT(i) itos(i,s); putstring(outfile,s) -#define PUTSTR(x) putstring(outfile,x) - - PUTSTR("level "); - PUTINT(level); - PUTSTR(": "); - if (numcells != numorbits) - { - PUTINT(numcells); - PUTSTR(" cell"); - if (numcells == 1) PUTSTR("; "); - else PUTSTR("s; "); - } - PUTINT(numorbits); - PUTSTR(" orbit"); - if (numorbits == 1) PUTSTR("; "); - else PUTSTR("s; "); - PUTINT(tv+labelorg); - PUTSTR(" fixed; index "); - PUTINT(index); - if (tcellsize != index) - { - PUTSTR("/"); - PUTINT(tcellsize); - } - PUTSTR("\n"); -} - -/***************************************************************************** -* * -* nauty_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -nauty_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in nauty.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in nauty.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in nauty.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: nauty.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* extra_autom(p,n) - add an extra automophism, hard to do correctly * -* * -*****************************************************************************/ - -void -extra_autom(int *p, int n) -{ - if (writeautoms) - writeperm(outfile,p,cartesian,linelength,n); - stats->numorbits = orbjoin(orbits,p,n); - ++stats->numgenerators; - OPTCALL(userautomproc)(stats->numgenerators,p,orbits, - stats->numorbits,stabvertex,n); -} - -/***************************************************************************** -* * -* extra_level(level,lab,ptn,numcells,tv1,index,tcellsize,childcount) * -* creates an artificial level in the search. This is dangerous. * -* * -*****************************************************************************/ - -void -extra_level(int level, int *lab, int *ptn, int numcells, int tv1, int index, - int tcellsize, int childcount, int n) -{ - MULTIPLY(stats->grpsize1,stats->grpsize2,index); - if (domarkers) - writemarker(level,tv1,index,tcellsize,stats->numorbits,numcells); - OPTCALL(userlevelproc)(lab,ptn,level,orbits,stats,tv1,index,tcellsize, - numcells,childcount,n); -} - -/***************************************************************************** -* * -* nauty_freedyn() frees all the dynamic memory used in this module. * -* * -*****************************************************************************/ - -void -nauty_freedyn(void) -{ -#if !MAXN - tcnode *tcp,*tcq; - - tcp = tcnode0.next; - while (tcp != NULL) - { - tcq = tcp->next; - FREES(tcp->tcellptr); - FREES(tcp); - tcp = tcq; - } - alloc_m = 0; - tcnode0.next = NULL; - DYNFREE(firsttc,firsttc_sz); - DYNFREE(canoncode,canoncode_sz); - DYNFREE(firstcode,firstcode_sz); - DYNFREE(workperm,workperm_sz); - DYNFREE(canonlab,canonlab_sz); - DYNFREE(firstlab,firstlab_sz); - DYNFREE(defltwork,defltwork_sz); - DYNFREE(fixedpts,fixedpts_sz); - DYNFREE(active,active_sz); -#endif -} diff --git a/tools/nauty25r9_unix/nauty.h b/tools/nauty25r9_unix/nauty.h deleted file mode 100644 index f1bb218..0000000 --- a/tools/nauty25r9_unix/nauty.h +++ /dev/null @@ -1,1177 +0,0 @@ -/************************************************************************** -* This is the header file for Version 2.5 of nauty(). * -* nauty.h. Generated from nauty-h.in by configure. -**************************************************************************/ - -#ifndef _NAUTY_H_ /* only process this file once */ -#define _NAUTY_H_ - -/* The parts between the ==== lines are modified by configure when -creating nauty.h out of nauty-h.in. If configure is not being used, -it is necessary to check they are correct. -====================================================================*/ - -/* Check whether various headers or options are available */ -#define HAVE_UNISTD_H 1 /* */ -#define HAVE_SYSTYPES_H 1 /* */ -#define HAVE_STDDEF_H 1 /* */ -#define HAVE_STDLIB_H 1 /* */ -#define HAVE_STRING_H 1 /* */ -#define MALLOC_DEC 1 /* 1 = malloc() is declared in stdlib.h, */ - /* 2 = in malloc.h, 0 = in neither place */ -#define HAS_MATH_INF 1 /* INFINITY is defined in math.h or */ - /* some system header likely to be used */ -#define HAS_STDIO_UNLOCK 1 /* Whether there are getc_unlocked, */ - /* putc_unlocked,flockfile and funlockfile*/ - -#define DEFAULT_WORDSIZE 0 -#define SIZEOF_INT 4 -#define SIZEOF_LONG 8 -#define SIZEOF_LONG_LONG 8 /* 0 if nonexistent */ - -#define HAVE_CONST 1 /* compiler properly supports const */ - -#define HAVE_TLS 0 /* have storage attribute for thread-local */ -#define TLS_ATTR /* if so, what it is. if not, empty */ - -#define USE_ANSICONTROLS 0 - /* whether --enable-ansicontrols is used */ - -#define _FILE_OFFSET_BITS 0 -#if _FILE_OFFSET_BITS == 64 -#define _LARGEFILE_SOURCE -#else -#undef _FILE_OFFSET_BITS -#endif - -/* Support of gcc extensions __builtin_clz, __builtin_clzl, __builtin_clzll */ -#define HAVE_CLZ 1 -#define HAVE_CLZL 1 -#define HAVE_CLZLL 1 - -/*==================================================================*/ - -/* The following line must be uncommented for compiling into Magma. */ -/* #define NAUTY_IN_MAGMA */ - -#ifdef NAUTY_IN_MAGMA -#include "defs.h" -#include "system.h" -#include "bs.h" -#define OLDEXTDEFS -#else -#include -#define P_(x) x -#endif - -#if defined(__cray) || defined(__cray__) || defined(cray) -#define SYS_CRAY /* Cray UNIX, portable or standard C */ -#endif - -#if defined(__unix) || defined(__unix__) || defined(unix) -#define SYS_UNIX -#endif - -#if !HAVE_CONST -#define const -#endif - -/***************************************************************************** -* * -* AUTHOR: Brendan D. McKay * -* Research School of Computer Science * -* Australian National University * -* Canberra, ACT 0200, Australia * -* phone: +61 2 6125 3845 fax: +61 2 6125 0010 * -* email: bdm@cs.anu.edu.au * -* * -* Nauty is copyright (1984-2013) Brendan McKay. All rights reserved. * -* Permission -* is hereby given for use and/or distribution with the exception of * -* sale for profit or application with nontrivial military significance. * -* You must not remove this copyright notice, and you must document any * -* changes that you make to this program. * -* This software is subject to this copyright only, irrespective of * -* any copyright attached to any package of which this is a part. * -* * -* This program is only provided "as is". No responsibility will be taken * -* by the author, his employer or his pet rabbit* for any misfortune which * -* befalls you because of its use. I don't think it will delete all your * -* files, burn down your computer room or turn your children against you, * -* but if it does: stiff cheddar. On the other hand, I very much welcome * -* bug reports, or at least I would if there were any bugs. * -* * RIP, 1989 * -* Traces is copyright Adolfo Piperno (2011-). * -* * -* Reference manual: * -* B. D. McKay and A. Piperno, nauty User's Guide (Version 2.5), * -* http://pallini.di.uniroma1.it * -* http://cs.anu.edu.au/~bdm/nauty/ * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : renamed to version 1.3 (no changes to this file) * -* 28-Sep-88 : added PC Turbo C support, making version 1.4 * -* 23-Mar-89 : changes for version 1.5 : * -* - reworked M==1 code * -* - defined NAUTYVERSION string * -* - made NAUTYH_READ to allow this file to be read twice * -* - added optional ANSI function prototypes * -* - added validity check for WORDSIZE * -* - added new fields to optionblk structure * -* - updated DEFAULTOPTIONS to add invariants fields * -* - added (set*) cast to definition of GRAPHROW * -* - added definition of ALLOCS and FREES * -* 25-Mar-89 : - added declaration of new function doref() * -* - added UNION macro * -* 29-Mar-89 : - reduced the default MAXN for small machines * -* - removed OUTOFSPACE (no longer used) * -* - added SETDIFF and XOR macros * -* 2-Apr-89 : - extended statsblk structure * -* 4-Apr-89 : - added IS_* macros * -* - added ERRFILE definition * -* - replaced statsblk.outofspace by statsblk.errstatus * -* 5-Apr-89 : - deleted definition of np2vector (no longer used) * -* - introduced EMPTYSET macro * -* 12-Apr-89 : - eliminated MARK, UNMARK and ISMARKED (no longer used) * -* 18-Apr-89 : - added MTOOBIG and CANONGNIL * -* 12-May-89 : - made ISELEM1 and ISELEMENT return 0 or 1 * -* 2-Mar-90 : - added EXTPROC macro and used it * -* 12-Mar-90 : - added SYS_CRAY, with help from N. Sloane and A. Grosky * -* - added dummy groupopts field to optionblk * -* - select some ANSI things if __STDC__ exists * -* 20-Mar-90 : - changed default MAXN for Macintosh versions * -* - created SYS_MACTHINK for Macintosh THINK compiler * -* 27-Mar-90 : - split SYS_MSDOS into SYS_PCMS4 and SYS_PCMS5 * -* 13-Oct-90 : changes for version 1.6: * -* - fix definition of setword for WORDSIZE==64 * -* 14-Oct-90 : - added SYS_APOLLO version to avoid compiler bug * -* 15-Oct-90 : - improve detection of ANSI conformance * -* 17-Oct-90 : - changed temp name in EMPTYSET to avoid A/UX bug * -* 16-Apr-91 : changes for version 1.7: * -* - made version SYS_PCTURBO use free(), not cfree() * -* 2-Sep-91 : - noted that SYS_PCMS5 also works for Quick C * -* - moved MULTIPLY to here from nauty.c * -* 12-Jun-92 : - changed the top part of this comment * -* 27-Aug-92 : - added version SYS_IBMC, thanks to Ivo Duentsch * -* 5-Jun-93 : - renamed to version 1.7+, only change in naututil.h * -* 29-Jul-93 : changes for version 1.8: * -* - fixed error in default 64-bit version of FIRSTBIT * -* (not used in any version before ALPHA) * -* - installed ALPHA version (thanks to Gordon Royle) * -* - defined ALLOCS,FREES for SYS_IBMC * -* 3-Sep-93 : - make calloc void* in ALPHA version * -* 17-Sep-93 : - renamed to version 1.9, * -* changed only dreadnaut.c and nautinv.c * -* 24-Feb-94 : changes for version 1.10: * -* - added version SYS_AMIGAAZT, thanks to Carsten Saager * -* (making 1.9+) * -* 19-Apr-95 : - added prototype wrapper for C++, * -* thanks to Daniel Huson * -* 5-Mar-96 : - added SYS_ALPHA32 version (32-bit setwords on Alpha) * -* 13-Jul-96 : changes for version 2.0: * -* - added dynamic allocation * -* - ERRFILE must be defined * -* - added FLIPELEM1 and FLIPELEMENT macros * -* 13-Aug-96 : - added SWCHUNK? macros * -* - added TAKEBIT macro * -* 28-Nov-96 : - include sys/types.h if not ANSI (tentative!) * -* 24-Jan-97 : - and stdlib.h if ANSI * -* - removed use of cfree() from UNIX variants * -* 25-Jan-97 : - changed options.getcanon from boolean to int * -* Backwards compatibility is ok, as boolean and int * -* are the same. Now getcanon=2 means to get the label * -* and not care about the group. Sometimes faster. * -* 6-Feb-97 : - Put in #undef for FALSE and TRUE to cope with * -* compilers that illegally predefine them. * -* - declared nauty_null and nautil_null * -* 2-Jul-98 : - declared ALLBITS * -* 21-Oct-98 : - allow WORDSIZE==64 using unsigned long long * -* - added BIGNAUTY option for really big graphs * -* 11-Dec-99 : - made bit, leftbit and bytecount static in each file * -* 9-Jan-00 : - declared nauty_check() and nautil_check() * -* 12-Feb-00 : - Used #error for compile-time checks * -* - Added DYNREALLOC * -* 4-Mar-00 : - declared ALLMASK(n) * -* 27-May-00 : - declared CONDYNFREE * -* 28-May-00 : - declared nautil_freedyn() * -* 16-Aug-00 : - added OLDNAUTY and changed canonical labelling * -* 16-Nov-00 : - function prototypes are now default and unavoidable * -* - removed UPROC, now assume all compilers know void * -* - removed nvector, now just int (as it always was) * -* - added extra parameter to targetcell() * -* - removed old versions which were only to skip around * -* bugs that should have been long fixed: * -* SYS_APOLLO and SYS_VAXBSD. * -* - DEFAULTOPIONS now specifies no output * -* - Removed obsolete SYS_MACLSC version * -* 21-Apr-01 : - Added code to satisfy compilation into Magma. This * -* is activated by defining NAUTY_IN_MAGMA above. * -* - The *_null routines no longer exist * -* - Default maxinvarlevel is now 1. (This has no effect * -* unless an invariant is specified.) * -* - Now labelorg has a concrete declaration in nautil.c * -* and EXTDEFS is not needed * -* 5-May-01 : - NILFUNCTION, NILSET, NILGRAPH now obsolete. Use NULL. * -* 11-Sep-01 : - setword is unsigned int in the event that UINT_MAX * -* is defined and indicates it is big enough * -* 17-Oct-01 : - major rewrite for 2.1. SYS_* variables gone! * -* Some modernity assumed, eg size_t * -* 8-Aug-02 : - removed MAKEEMPTY (use EMPTYSET instead) * -* - deleted OLDNAUTY everywhere * -* 27-Aug-02 : - converted to use autoconf. Now the original of this * -* file is nauty-h.in. Run configure to make nauty.h. * -* 20-Dec-02 : - increased INFINITY * -* some reorganization to please Magma * -* - declared nauty_freedyn() * -* 17-Nov-03 : - renamed INFINITY to NAUTY_INFINITY * -* 29-May-04 : - added definition of SETWORD_FORMAT * -* 14-Sep-04 : - extended prototypes even to recursive functions * -* 16-Oct-04 : - added DEFAULTOPTIONS_GRAPH * -* 24-Oct-04 : Starting 2.3 * -* - remove register declarations as modern compilers * -* tend to find them a nuisance * -* - Don't define the obsolete symbol INFINITY if it is * -* defined already * -* 17-Nov-04 : - make 6 counters in statsblk unsigned long * -* 17-Jan-04 : - add init() and cleanup() to dispatchvec * -* 12-Nov-05 : - Changed NAUTY_INFINITY to 2^30+2 in BIGNAUTY case * -* 22-Nov-06 : Starting 2.4 * -* - removed usertcellproc from options * -* changed bestcell to targetcell in dispatch vector * -* declare targetcell and maketargetcell * -* 29-Nov-06 : - add extraoptions to optionblk * -* - add declarations of extra_autom and extra_level * -* 10-Dec-06 : - BIGNAUTY is gone! Now permutation=shortish=int. * -* NAUTY_INFINITY only depends on whether sizeof(int)=2. * -* 27-Jun-08 : - define nauty_counter and LONG_LONG_COUNTERS * -* 30-Jun-08 : - declare version 2.4 * -* 8-Nov-09 : - final release of version 2.4; * -* 10-Nov-10 : Starting 2.5 * -* - declare shortish and permutation obsolete, now int * -* 14-Nov-10 : - SETWORDSNEEDED(n) * -* 23-May-10 : - declare densenauty() * -* 29-Jun-10 : - add PRINT_COUNTER(f,x) * -* - add DEFAULTOPTIONS_DIGRAPH() * -* 27-Mar-11 : - declare writegroupsize() * -* 14-Jan-12 : - add HAVE_TLS and TLS_ATTR * -* 21-Feb-12 : - add ENABLE_ANSI * -* 18-Mar-12 : - add COUNTER_FMT * -* 18-Aug-12 : - add ADDONEARC, ADDONEEDGE, EMPTYGRAPH * -* 29-Aug-12 : - add CLZ macros and FIRSTBITNZ * -* 19-Oct-12 : - add DEFAULT_WORDSIZE * -* 3-Jan-12 : Released 2.5rc1 * -* * -* ++++++ This file is automatically generated, don't edit it by hand! ++++++ -* * -*****************************************************************************/ - -/***************************************************************************** -* * -* 16-bit, 32-bit and 64-bit versions can be selected by defining WORDSIZE. * -* The largest graph that can be handled has MAXN vertices. * -* Both WORDSIZE and MAXN can be defined on the command line. * -* WORDSIZE must be 16, 32 or 64; MAXN must be <= NAUTY_INFINITY-2; * -* * -* With a very slight loss of efficiency (depending on platform), nauty * -* can be compiled to dynamically allocate arrays. Predefine MAXN=0 to * -* achieve this effect, which is default behaviour from version 2.0. * -* In that case, graphs of size up to NAUTY_INFINITY-2 can be handled * -* if the the memory is available. * -* * -* If only very small graphs need to be processed, use MAXN<=WORDSIZE * -* since this causes substantial code optimizations. * -* * -* Conventions and Assumptions: * -* * -* A 'setword' is the chunk of memory that is occupied by one part of * -* a set. This is assumed to be >= WORDSIZE bits in size. * -* * -* The rightmost (loworder) WORDSIZE bits of setwords are numbered * -* 0..WORDSIZE-1, left to right. It is necessary that the 2^WORDSIZE * -* setwords with the other bits zero are totally ordered under <,=,>. * -* This needs care on a 1's-complement machine. * -* * -* The int variables m and n have consistent meanings throughout. * -* Graphs have n vertices always, and sets have m setwords always. * -* * -* A 'set' consists of m contiguous setwords, whose bits are numbered * -* 0,1,2,... from left (high-order) to right (low-order), using only * -* the rightmost WORDSIZE bits of each setword. It is used to * -* represent a subset of {0,1,...,n-1} in the usual way - bit number x * -* is 1 iff x is in the subset. Bits numbered n or greater, and * -* unnumbered bits, are assumed permanently zero. * -* * -* A 'graph' consists of n contiguous sets. The i-th set represents * -* the vertices adjacent to vertex i, for i = 0,1,...,n-1. * -* * -* A 'permutation' is an array of n ints repesenting a permutation of * -* the set {0,1,...,n-1}. The value of the i-th entry is the number to * -* which i is mapped. * -* * -* If g is a graph and p is a permutation, then g^p is the graph in * -* which vertex i is adjacent to vertex j iff vertex p[i] is adjacent * -* to vertex p[j] in g. * -* * -* A partition nest is represented by a pair (lab,ptn), where lab and ptn * -* are int arrays. The "partition at level x" is the partition whose * -* cells are {lab[i],lab[i+1],...,lab[j]}, where [i,j] is a maximal * -* subinterval of [0,n-1] such that ptn[k] > x for i <= k < j and * -* ptn[j] <= x. The partition at level 0 is given to nauty by the user. * -* This is refined for the root of the tree, which has level 1. * -* * -*****************************************************************************/ - -#ifndef NAUTY_IN_MAGMA -#if HAVE_SYSTYPES_H -#include -#endif -#if HAVE_UNISTD_H -#include -#endif -#if HAVE_STDDEF_H -#include -#endif -#if HAVE_STDLIB_H -#include -#endif -#if HAVE_STRING_H -#include -#else -#include -#endif -#endif - -/* WORDSIZE is the number of set elements per setword (16, 32 or 64). - WORDSIZE and setword are defined as follows: - - DEFAULT_WORDSIZE is usually 0 but is set by the configure script - to NN if --enable-wordsize=NN is used, where NN is 16, 32 or 64. - - If WORDSIZE is not defined, but DEFAULT_WORDSIZE > 0, then set - WORDSIZE to the same value as DEFAULT_WORDSIZE. - If WORDSIZE is so far undefined, use 32 unless longs have more - than 32 bits, in which case use 64. - Define setword thus: - WORDSIZE==16 : unsigned short - WORDSIZE==32 : unsigned int unless it is too small, - in which case unsigned long - WORDSIZE==64 : the first of unsigned int, unsigned long, - unsigned long long, which is large enough. -*/ - -#ifdef NAUTY_IN_MAGMA -#undef WORDSIZE -#define WORDSIZE WORDBITS -#endif - -#ifndef WORDSIZE -#if DEFAULT_WORDSIZE > 0 -#define WORDSIZE DEFAULT_WORDSIZE -#endif -#endif - -#ifdef WORDSIZE - -#if (WORDSIZE != 16) && (WORDSIZE != 32) && (WORDSIZE != 64) - #error "WORDSIZE must be 16, 32 or 64" -#endif - -#else /* WORDSIZE undefined */ - -#if SIZEOF_LONG>4 -#define WORDSIZE 64 -#else -#define WORDSIZE 32 -#endif - -#endif /* WORDSIZE */ - -#ifdef NAUTY_IN_MAGMA -typedef t_uint setword; -#define SETWORD_INT /* Don't assume this is correct in Magma. */ - -#else /* NAUTY_IN_MAGMA */ - -#if WORDSIZE==16 -typedef unsigned short setword; -#define SETWORD_SHORT -#endif - -#if WORDSIZE==32 -#if SIZEOF_INT>=4 -typedef unsigned int setword; -#define SETWORD_INT -#else -typedef unsigned long setword; -#define SETWORD_LONG -#endif -#endif - -#if WORDSIZE==64 -#if SIZEOF_INT>=8 -typedef unsigned int setword; -#define SETWORD_INT -#else -#if SIZEOF_LONG>=8 -typedef unsigned long setword; -#define SETWORD_LONG -#else -typedef unsigned long long setword; -#define SETWORD_LONGLONG -#endif -#endif -#endif - -#endif /* NAUTY_IN_MAGMA else */ - -#if SIZEOF_LONG_LONG>=8 && SIZEOF_LONG==4 -typedef unsigned long long nauty_counter; -#define LONG_LONG_COUNTERS 1 -#define COUNTER_FMT "%llu" -#else -typedef unsigned long nauty_counter; -#define LONG_LONG_COUNTERS 0 -#define COUNTER_FMT "%lu" -#endif -#define PRINT_COUNTER(f,x) fprintf(f,COUNTER_FMT,x) - -#define NAUTYVERSIONID (25490+HAVE_TLS) /* 10000*version + HAVE_TLS */ -#define NAUTYREQUIRED NAUTYVERSIONID /* Minimum compatible version */ - -#if WORDSIZE==16 -#define NAUTYVERSION "2.5 (16 bits)" -#endif -#if WORDSIZE==32 -#define NAUTYVERSION "2.5 (32 bits)" -#endif -#if WORDSIZE==64 -#define NAUTYVERSION "2.5 (64 bits)" -#endif - -#ifndef MAXN /* maximum allowed n value; use 0 for dynamic sizing. */ -#define MAXN 0 -#define MAXM 0 -#else -#define MAXM ((MAXN+WORDSIZE-1)/WORDSIZE) /* max setwords in a set */ -#endif /* MAXN */ - -/* Starting at version 2.2, set operations work for all set sizes unless - ONE_WORD_SETS is defined. In the latter case, if MAXM=1, set ops - work only for single-setword sets. In any case, macro versions - ending with 1 work for single-setword sets and versions ending with - 0 work for all set sizes. -*/ - -#if WORDSIZE==16 -#define SETWD(pos) ((pos)>>4) /* number of setword containing bit pos */ -#define SETBT(pos) ((pos)&0xF) /* position within setword of bit pos */ -#define TIMESWORDSIZE(w) ((w)<<4) -#define SETWORDSNEEDED(n) ((((n)-1)>>4)+1) /* setwords needed for n bits */ -#endif - -#if WORDSIZE==32 -#define SETWD(pos) ((pos)>>5) -#define SETBT(pos) ((pos)&0x1F) -#define TIMESWORDSIZE(w) ((w)<<5) -#define SETWORDSNEEDED(n) ((((n)-1)>>5)+1) -#endif - -#if WORDSIZE==64 -#define SETWD(pos) ((pos)>>6) -#define SETBT(pos) ((pos)&0x3F) -#define TIMESWORDSIZE(w) ((w)<<6) /* w*WORDSIZE */ -#define SETWORDSNEEDED(n) ((((n)-1)>>6)+1) -#endif - -#ifdef NAUTY_IN_MAGMA -#define BITT bs_bit -#else -#define BITT bit -#endif - -#define ADDELEMENT1(setadd,pos) (*(setadd) |= BITT[pos]) -#define DELELEMENT1(setadd,pos) (*(setadd) &= ~BITT[pos]) -#define FLIPELEMENT1(setadd,pos) (*(setadd) ^= BITT[pos]) -#define ISELEMENT1(setadd,pos) ((*(setadd) & BITT[pos]) != 0) -#define EMPTYSET1(setadd,m) *(setadd) = 0; -#define GRAPHROW1(g,v,m) ((set*)(g)+(v)) -#define ADDONEARC1(g,v,w,m) (g)[v] |= BITT[w] -#define ADDONEEDGE1(g,v,w,m) { ADDONEARC1(g,v,w,m); ADDONEARC1(g,w,v,m); } -#define EMPTYGRAPH1(g,m,n) EMPTYSET0(g,n) /* really EMPTYSET0 */ - -#define ADDELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] |= BITT[SETBT(pos)]) -#define DELELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] &= ~BITT[SETBT(pos)]) -#define FLIPELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] ^= BITT[SETBT(pos)]) -#define ISELEMENT0(setadd,pos) (((setadd)[SETWD(pos)] & BITT[SETBT(pos)]) != 0) -#define EMPTYSET0(setadd,m) \ - {setword *es; \ - for (es = (setword*)(setadd)+(m); --es >= (setword*)(setadd);) *es=0;} -#define GRAPHROW0(g,v,m) ((set*)(g) + (m)*(size_t)(v)) -#define ADDONEARC0(g,v,w,m) ADDELEMENT0(GRAPHROW0(g,v,m),w) -#define ADDONEEDGE0(g,v,w,m) { ADDONEARC0(g,v,w,m); ADDONEARC0(g,w,v,m); } -#define EMPTYGRAPH0(g,m,n) EMPTYSET0(g,(m)*(size_t)(n)) - -#if (MAXM==1) && defined(ONE_WORD_SETS) -#define ADDELEMENT ADDELEMENT1 -#define DELELEMENT DELELEMENT1 -#define FLIPELEMENT FLIPELEMENT1 -#define ISELEMENT ISELEMENT1 -#define EMPTYSET EMPTYSET1 -#define GRAPHROW GRAPHROW1 -#define ADDONEARC ADDONEARC1 -#define ADDONEEDGE ADDONEEDGE1 -#define EMPTYGRAPH EMPTYGRAPH1 -#else -#define ADDELEMENT ADDELEMENT0 -#define DELELEMENT DELELEMENT0 -#define FLIPELEMENT FLIPELEMENT0 -#define ISELEMENT ISELEMENT0 -#define EMPTYSET EMPTYSET0 -#define GRAPHROW GRAPHROW0 -#define ADDONEARC ADDONEARC0 -#define ADDONEEDGE ADDONEEDGE0 -#define EMPTYGRAPH EMPTYGRAPH0 -#endif - - -#ifdef NAUTY_IN_MAGMA -#undef EMPTYSET -#define EMPTYSET(setadd,m) {t_int _i; bsp_makeempty(setadd,m,_i);} -#endif - -#define NOTSUBSET(word1,word2) ((word1) & ~(word2)) /* test if the 1-bits - in setword word1 do not form a subset of those in word2 */ -#define INTERSECT(word1,word2) ((word1) &= (word2)) /* AND word2 into word1 */ -#define UNION(word1,word2) ((word1) |= (word2)) /* OR word2 into word1 */ -#define SETDIFF(word1,word2) ((word1) &= ~(word2)) /* - word2 into word1 */ -#define XOR(word1,word2) ((word1) ^= (word2)) /* XOR word2 into word1 */ -#define ZAPBIT(word,x) ((word) &= ~BITT[x]) /* delete bit x in setword */ -#define TAKEBIT(iw,w) {(iw) = FIRSTBITNZ(w); (w) ^= BITT[iw];} - -#ifdef SETWORD_LONGLONG -#define MSK3232 0xFFFFFFFF00000000ULL -#define MSK1648 0xFFFF000000000000ULL -#define MSK0856 0xFF00000000000000ULL -#define MSK1632 0x0000FFFF00000000ULL -#define MSK0840 0xFF0000000000ULL -#define MSK1616 0xFFFF0000ULL -#define MSK0824 0xFF000000ULL -#define MSK0808 0xFF00ULL -#define MSK63C 0x7FFFFFFFFFFFFFFFULL -#define MSK31C 0x7FFFFFFFULL -#define MSK15C 0x7FFFULL -#define MSK64 0xFFFFFFFFFFFFFFFFULL -#define MSK32 0xFFFFFFFFULL -#define MSK16 0xFFFFULL -#define MSK8 0xFFULL -#endif - -#ifdef SETWORD_LONG -#define MSK3232 0xFFFFFFFF00000000UL -#define MSK1648 0xFFFF000000000000UL -#define MSK0856 0xFF00000000000000UL -#define MSK1632 0x0000FFFF00000000UL -#define MSK0840 0xFF0000000000UL -#define MSK1616 0xFFFF0000UL -#define MSK0824 0xFF000000UL -#define MSK0808 0xFF00UL -#define MSK63C 0x7FFFFFFFFFFFFFFFUL -#define MSK31C 0x7FFFFFFFUL -#define MSK15C 0x7FFFUL -#define MSK64 0xFFFFFFFFFFFFFFFFUL -#define MSK32 0xFFFFFFFFUL -#define MSK16 0xFFFFUL -#define MSK8 0xFFUL -#endif - -#if defined(SETWORD_INT) || defined(SETWORD_SHORT) -#define MSK3232 0xFFFFFFFF00000000U -#define MSK1648 0xFFFF000000000000U -#define MSK0856 0xFF00000000000000U -#define MSK1632 0x0000FFFF00000000U -#define MSK0840 0xFF0000000000U -#define MSK1616 0xFFFF0000U -#define MSK0824 0xFF000000U -#define MSK0808 0xFF00U -#define MSK63C 0x7FFFFFFFFFFFFFFFU -#define MSK31C 0x7FFFFFFFU -#define MSK15C 0x7FFFU -#define MSK64 0xFFFFFFFFFFFFFFFFU -#define MSK32 0xFFFFFFFFU -#define MSK16 0xFFFFU -#define MSK8 0xFFU -#endif - -#if defined(SETWORD_LONGLONG) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04llx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08llx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16llx" -#endif -#endif - -#if defined(SETWORD_LONG) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04lx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08lx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16lx" -#endif -#endif - -#if defined(SETWORD_INT) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04x" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08x" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16x" -#endif -#endif - -#if defined(SETWORD_SHORT) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04hx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08hx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16hx" -#endif -#endif - -/* POPCOUNT(x) = number of 1-bits in a setword x - FIRSTBIT(x) = number of first 1-bit in non-zero setword (0..WORDSIZE-1) - or WORDSIZE if x == 0 - FIRSTBITNZ(x) = as FIRSTBIT(x) but assumes x is not zero - BITMASK(x) = setword whose rightmost WORDSIZE-x-1 (numbered) bits - are 1 and the rest 0 (0 <= x < WORDSIZE) - (I.e., bits 0..x are unselected and the rest selected.) - ALLBITS = all (numbered) bits in a setword */ - -#if WORDSIZE==64 -#define POPCOUNT(x) (bytecount[(x)>>56 & 0xFF] + bytecount[(x)>>48 & 0xFF] \ - + bytecount[(x)>>40 & 0xFF] + bytecount[(x)>>32 & 0xFF] \ - + bytecount[(x)>>24 & 0xFF] + bytecount[(x)>>16 & 0xFF] \ - + bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK3232 ? \ - (x) & MSK1648 ? \ - (x) & MSK0856 ? \ - 0+leftbit[((x)>>56) & MSK8] : \ - 8+leftbit[(x)>>48] \ - : (x) & MSK0840 ? \ - 16+leftbit[(x)>>40] : \ - 24+leftbit[(x)>>32] \ - : (x) & MSK1616 ? \ - (x) & MSK0824 ? \ - 32+leftbit[(x)>>24] : \ - 40+leftbit[(x)>>16] \ - : (x) & MSK0808 ? \ - 48+leftbit[(x)>>8] : \ - 56+leftbit[x]) -#define BITMASK(x) (MSK63C >> (x)) -#define ALLBITS MSK64 -#define SWCHUNK0(w) ((long)((w)>>48)&0xFFFFL) -#define SWCHUNK1(w) ((long)((w)>>32)&0xFFFFL) -#define SWCHUNK2(w) ((long)((w)>>16)&0xFFFFL) -#define SWCHUNK3(w) ((long)(w)&0xFFFFL) -#endif - -#if WORDSIZE==32 -#define POPCOUNT(x) (bytecount[(x)>>24 & 0xFF] + bytecount[(x)>>16 & 0xFF] \ - + bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK1616 ? ((x) & MSK0824 ? \ - leftbit[((x)>>24) & MSK8] : 8+leftbit[(x)>>16]) \ - : ((x) & MSK0808 ? 16+leftbit[(x)>>8] : 24+leftbit[x])) -#define BITMASK(x) (MSK31C >> (x)) -#define ALLBITS MSK32 -#define SWCHUNK0(w) ((long)((w)>>16)&0xFFFFL) -#define SWCHUNK1(w) ((long)(w)&0xFFFFL) -#endif - -#if WORDSIZE==16 -#define POPCOUNT(x) (bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK0808 ? leftbit[((x)>>8) & MSK8] : 8+leftbit[x]) -#define BITMASK(x) (MSK15C >> (x)) -#define ALLBITS MSK16 -#define SWCHUNK0(w) ((long)(w)&0xFFFFL) -#endif - -#if defined(SETWORD_LONGLONG) && HAVE_CLZLL -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clzll(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif -#if defined(SETWORD_LONG) && HAVE_CLZL -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clzl(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif -#if defined(SETWORD_INT) && HAVE_CLZ -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clz(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif - -#ifndef FIRSTBITNZ -#define FIRSTBITNZ FIRSTBIT -#endif - -#ifdef SYS_CRAY -#undef POPCOUNT -#undef FIRSTBIT -#undef BITMASK -#define POPCOUNT(x) _popcnt(x) -#define FIRSTBIT(x) _leadz(x) -#define BITMASK(x) _mask(65+(x)) -#endif - -#ifdef NAUTY_IN_MAGMA -#undef POPCOUNT -#undef FIRSTBIT -#undef BITMASK -#define POPCOUNT(x) bs_popcount(x) -#define FIRSTBIT(x) bs_firstbit(x) -#define BITMASK(x) bs_bitmask(x) -#endif - -#define ALLMASK(n) ((n)?~BITMASK((n)-1):(setword)0) /* First n bits */ - - /* various constants: */ -#undef FALSE -#undef TRUE -#define FALSE 0 -#define TRUE 1 - -#if SIZEOF_INT>=4 -#define NAUTY_INFINITY 0x40000002 -#else -#define NAUTY_INFINITY 0x7FFF -#endif - -/* The following four types are obsolete, use int in new code. */ -typedef int shortish; -typedef shortish permutation; -typedef int nvector,np2vector; - -/* For backward compatibility: */ -#if !HAS_MATH_INF && !defined(INFINITY) -#define INFINITY NAUTY_INFINITY -#endif - -#if MAXN > NAUTY_INFINITY-2 - #error MAXN must be at most NAUTY_INFINITY-2 -#endif - - /* typedefs for sets, graphs, permutations, etc.: */ - -typedef int boolean; /* boolean MUST be the same as int */ - -#define UPROC void /* obsolete */ - -typedef setword set,graph; -#ifdef NAUTY_IN_MAGMA -typedef graph nauty_graph; -typedef set nauty_set; -#endif - -typedef struct -{ - double grpsize1; /* size of group is */ - int grpsize2; /* grpsize1 * 10^grpsize2 */ -#define groupsize1 grpsize1 /* for backwards compatibility */ -#define groupsize2 grpsize2 - int numorbits; /* number of orbits in group */ - int numgenerators; /* number of generators found */ - int errstatus; /* if non-zero : an error code */ -#define outofspace errstatus; /* for backwards compatibility */ - unsigned long numnodes; /* total number of nodes */ - unsigned long numbadleaves; /* number of leaves of no use */ - int maxlevel; /* maximum depth of search */ - unsigned long tctotal; /* total size of all target cells */ - unsigned long canupdates; /* number of updates of best label */ - unsigned long invapplics; /* number of applications of invarproc */ - unsigned long invsuccesses; /* number of successful uses of invarproc() */ - int invarsuclevel; /* least level where invarproc worked */ -} statsblk; - -/* codes for errstatus field (see nauty.c for more accurate descriptions): */ -#define NTOOBIG 1 /* n > MAXN or n > WORDSIZE*m */ -#define MTOOBIG 2 /* m > MAXM */ -#define CANONGNIL 3 /* canong = NULL, but getcanon = TRUE */ - -/* manipulation of real approximation to group size */ -#define MULTIPLY(s1,s2,i) if ((s1 *= i) >= 1e10) {s1 /= 1e10; s2 += 10;} - -struct optionstruct; /* incomplete definition */ - -typedef struct -{ - boolean (*isautom) /* test for automorphism */ - (graph*,int*,boolean,int,int); - int (*testcanlab) /* test for better labelling */ - (graph*,graph*,int*,int*,int,int); - void (*updatecan) /* update canonical object */ - (graph*,graph*,int*,int,int,int); - void (*refine) /* refine partition */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - void (*refine1) /* refine partition, MAXM==1 */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - boolean (*cheapautom) /* test for easy automorphism */ - (int*,int,boolean,int); - int (*targetcell) /* decide which cell to split */ - (graph*,int*,int*,int,int,boolean,int,int,int); - void (*freedyn)(void); /* free dynamic memory */ - void (*check) /* check compilation parameters */ - (int,int,int,int); - void (*init)(graph*,graph**,graph*,graph**,int*,int*,set*, - struct optionstruct*,int*,int,int); - void (*cleanup)(graph*,graph**,graph*,graph**,int*,int*, - struct optionstruct*,statsblk*,int,int); -} dispatchvec; - -typedef struct optionstruct -{ - int getcanon; /* make canong and canonlab? */ -#define LABELONLY 2 /* new value UNIMPLEMENTED */ - boolean digraph; /* multiple edges or loops? */ - boolean writeautoms; /* write automorphisms? */ - boolean writemarkers; /* write stats on pts fixed, etc.? */ - boolean defaultptn; /* set lab,ptn,active for single cell? */ - boolean cartesian; /* use cartesian rep for writing automs? */ - int linelength; /* max chars/line (excl. '\n') for output */ - FILE *outfile; /* file for output, if any */ - void (*userrefproc) /* replacement for usual refine procedure */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - void (*userautomproc) /* procedure called for each automorphism */ - (int,int*,int*,int,int,int); - void (*userlevelproc) /* procedure called for each level */ - (int*,int*,int,int*,statsblk*,int,int,int,int,int,int); - void (*usernodeproc) /* procedure called for each node */ - (graph*,int*,int*,int,int,int,int,int,int); - void (*invarproc) /* procedure to compute vertex-invariant */ - (graph*,int*,int*,int,int,int,int*,int,boolean,int,int); - int tc_level; /* max level for smart target cell choosing */ - int mininvarlevel; /* min level for invariant computation */ - int maxinvarlevel; /* max level for invariant computation */ - int invararg; /* value passed to (*invarproc)() */ - dispatchvec *dispatch; /* vector of object-specific routines */ - boolean schreier; /* use random schreier method */ - void *extra_options; /* arbitrary extra options */ -#ifdef NAUTY_IN_MAGMA - boolean print_stats; /* CAYLEY specfic - GYM Sep 1990 */ - char *invarprocname; /* Magma - no longer global sjc 1994 */ - int lab_h; /* Magma - no longer global sjc 1994 */ - int ptn_h; /* Magma - no longer global sjc 1994 */ - int orbitset_h; /* Magma - no longer global sjc 1994 */ -#endif -} optionblk; - -#ifndef CONSOLWIDTH -#define CONSOLWIDTH 78 -#endif - -/* The following are obsolete. Just use NULL. */ -#define NILFUNCTION ((void(*)())NULL) /* nil pointer to user-function */ -#define NILSET ((set*)NULL) /* nil pointer to set */ -#define NILGRAPH ((graph*)NULL) /* nil pointer to graph */ - -#define DEFAULTOPTIONS_GRAPH(options) optionblk options = \ - {0,FALSE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,NULL,100,0,1,0,&dispatch_graph,FALSE,NULL} -#define DEFAULTOPTIONS_DIGRAPH(options) optionblk options = \ - {0,TRUE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,adjacencies,100,0,999,0,&dispatch_graph,FALSE,NULL} - -#ifndef DEFAULTOPTIONS -#define DEFAULTOPTIONS DEFAULTOPTIONS_GRAPH -#endif - -#ifdef NAUTY_IN_MAGMA -#define PUTC(c,f) io_putchar(c) -#else -#ifdef IS_JAVA -extern void javastream(FILE* f,char c); -#define PUTC(c,f) javastream(f,c) -#else -#define PUTC(c,f) putc(c,f) -#endif -#endif - -/* We hope that malloc, free, realloc are declared either in - or . Otherwise we will define them. We also assume that - size_t has been defined by the time we get to define malloc(). */ -#ifndef NAUTY_IN_MAGMA -#if MALLOC_DEC==2 -#include -#endif -#if MALLOC_DEC==0 -extern void *malloc(size_t); -extern void *realloc(void*,size_t); -extern void free(void*); -#endif -#endif - -/* ALLOCS(x,y) should return a pointer (any pointer type) to x*y units of new - storage, not necessarily initialised. A "unit" of storage is defined by - the sizeof operator. x and y are integer values of type int or larger, - but x*y may well be too large for an int. The macro should cast to the - correct type for the call. On failure, ALLOCS(x,y) should return a NULL - pointer. FREES(p) should free storage previously allocated by ALLOCS, - where p is the value that ALLOCS returned. */ - -#ifdef NAUTY_IN_MAGMA -#define ALLOCS(x,y) mem_malloc((size_t)(x)*(size_t)(y)) -#define REALLOCS(p,x) mem_realloc(p,(size_t)(x)) -#define FREES(p) mem_free(p) -#else -#define ALLOCS(x,y) malloc((size_t)(x)*(size_t)(y)) -#define REALLOCS(p,x) realloc(p,(size_t)(x)) -#define FREES(p) free(p) -#endif - -/* The following macros are used by nauty if MAXN=0. They dynamically - allocate arrays of size dependent on m or n. For each array there - should be two static variables: - type *name; - size_t name_sz; - "name" will hold a pointer to an allocated array. "name_sz" will hold - the size of the allocated array in units of sizeof(type). DYNALLSTAT - declares both variables and initialises name_sz=0. DYNALLOC1 and - DYNALLOC2 test if there is enough space allocated, and if not free - the existing space and allocate a bigger space. The allocated space - is not initialised. - - In the case of DYNALLOC1, the space is allocated using - ALLOCS(sz,sizeof(type)). - In the case of DYNALLOC2, the space is allocated using - ALLOCS(sz1,sz2*sizeof(type)). - - DYNREALLOC is like DYNALLOC1 except that the old contents are copied - into the new space. realloc() is assumed. This is not currently - used by nauty or dreadnaut. - - DYNFREE frees any allocated array and sets name_sz back to 0. - CONDYNFREE does the same, but only if name_sz exceeds some limit. -*/ - -#define DYNALLSTAT(type,name,name_sz) \ - static TLS_ATTR type *name; static TLS_ATTR size_t name_sz=0 -#define DYNALLOC1(type,name,name_sz,sz,msg) \ - if ((size_t)(sz) > name_sz) \ - { if (name_sz) FREES(name); name_sz = (sz); \ - if ((name=(type*)ALLOCS(sz,sizeof(type))) == NULL) {alloc_error(msg);}} -#define DYNALLOC2(type,name,name_sz,sz1,sz2,msg) \ - if ((size_t)(sz1)*(size_t)(sz2) > name_sz) \ - { if (name_sz) FREES(name); name_sz = (size_t)(sz1)*(size_t)(sz2); \ - if ((name=(type*)ALLOCS((sz1),(sz2)*sizeof(type))) == NULL) \ - {alloc_error(msg);}} -#define DYNREALLOC(type,name,name_sz,sz,msg) \ - {if ((size_t)(sz) > name_sz) \ - { if ((name = (type*)REALLOCS(name,(sz)*sizeof(type))) == NULL) \ - {alloc_error(msg);} else name_sz = (sz);}} -#define DYNFREE(name,name_sz) if (name_sz) {FREES(name); name_sz = 0;} -#define CONDYNFREE(name,name_sz,minsz) \ - if (name_sz > (size_t)(minsz)) {FREES(name); name_sz = 0;} - -/* File to write error messages to (used as first argument to fprintf()). */ -#define ERRFILE stderr - -/* Don't use OLDEXTDEFS, it is only still here for Magma. */ -#ifdef OLDEXTDEFS -#define EXTDEF_CLASS -#ifdef EXTDEFS -#define EXTDEF_TYPE 1 -#else -#define EXTDEF_TYPE 2 -#endif -#else -#define EXTDEF_CLASS static -#define EXTDEF_TYPE 2 -#endif - -extern int labelorg; /* Declared in nautil.c */ - -#ifndef NAUTY_IN_MAGMA - /* Things equivalent to bit, bytecount, leftbit are defined - in bs.h for Magma. */ -#if EXTDEF_TYPE==1 -extern setword bit[]; -extern int bytecount[]; -extern int leftbit[]; - -#else - /* array giving setwords with single 1-bit */ -#if WORDSIZE==64 -#ifdef SETWORD_LONGLONG -EXTDEF_CLASS const -setword bit[] = {01000000000000000000000LL,0400000000000000000000LL, - 0200000000000000000000LL,0100000000000000000000LL, - 040000000000000000000LL,020000000000000000000LL, - 010000000000000000000LL,04000000000000000000LL, - 02000000000000000000LL,01000000000000000000LL, - 0400000000000000000LL,0200000000000000000LL, - 0100000000000000000LL,040000000000000000LL, - 020000000000000000LL,010000000000000000LL, - 04000000000000000LL,02000000000000000LL, - 01000000000000000LL,0400000000000000LL,0200000000000000LL, - 0100000000000000LL,040000000000000LL,020000000000000LL, - 010000000000000LL,04000000000000LL,02000000000000LL, - 01000000000000LL,0400000000000LL,0200000000000LL, - 0100000000000LL,040000000000LL,020000000000LL,010000000000LL, - 04000000000LL,02000000000LL,01000000000LL,0400000000LL, - 0200000000LL,0100000000LL,040000000LL,020000000LL, - 010000000LL,04000000LL,02000000LL,01000000LL,0400000LL, - 0200000LL,0100000LL,040000LL,020000LL,010000LL,04000LL, - 02000LL,01000LL,0400LL,0200LL,0100LL,040LL,020LL,010LL, - 04LL,02LL,01LL}; -#else -EXTDEF_CLASS const -setword bit[] = {01000000000000000000000,0400000000000000000000, - 0200000000000000000000,0100000000000000000000, - 040000000000000000000,020000000000000000000, - 010000000000000000000,04000000000000000000, - 02000000000000000000,01000000000000000000, - 0400000000000000000,0200000000000000000, - 0100000000000000000,040000000000000000,020000000000000000, - 010000000000000000,04000000000000000,02000000000000000, - 01000000000000000,0400000000000000,0200000000000000, - 0100000000000000,040000000000000,020000000000000, - 010000000000000,04000000000000,02000000000000, - 01000000000000,0400000000000,0200000000000,0100000000000, - 040000000000,020000000000,010000000000,04000000000, - 02000000000,01000000000,0400000000,0200000000,0100000000, - 040000000,020000000,010000000,04000000,02000000,01000000, - 0400000,0200000,0100000,040000,020000,010000,04000, - 02000,01000,0400,0200,0100,040,020,010,04,02,01}; -#endif -#endif - -#if WORDSIZE==32 -EXTDEF_CLASS const -setword bit[] = {020000000000,010000000000,04000000000,02000000000, - 01000000000,0400000000,0200000000,0100000000,040000000, - 020000000,010000000,04000000,02000000,01000000,0400000, - 0200000,0100000,040000,020000,010000,04000,02000,01000, - 0400,0200,0100,040,020,010,04,02,01}; -#endif - -#if WORDSIZE==16 -EXTDEF_CLASS const -setword bit[] = {0100000,040000,020000,010000,04000,02000,01000,0400,0200, - 0100,040,020,010,04,02,01}; -#endif - - /* array giving number of 1-bits in bytes valued 0..255: */ -EXTDEF_CLASS const -int bytecount[] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8}; - - /* array giving position (1..7) of high-order 1-bit in byte: */ -EXTDEF_CLASS const -int leftbit[] = {8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; -#endif /* EXTDEFS */ - -#endif /* not NAUTY_IN_MAGMA */ - -#define ANSIPROT 1 -#define EXTPROC(func,args) extern func args; /* obsolete */ - -/* The following is for C++ programs that read nauty.h. Compile nauty - itself using C, not C++. */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void alloc_error(char*); -extern void breakout(int*,int*,int,int,int,set*,int); -extern boolean cheapautom(int*,int,boolean,int); -extern void doref(graph*,int*,int*,int,int*,int*,int*,set*,int*, - void(*)(graph*,int*,int*,int,int*,int*,set*,int*,int,int), - void(*)(graph*,int*,int*,int,int,int,int*,int,boolean,int,int), - int,int,int,boolean,int,int); -extern void extra_autom(int*,int); -extern void extra_level(int,int*,int*,int,int,int,int,int,int); -extern boolean isautom(graph*,int*,boolean,int,int); -extern dispatchvec dispatch_graph; -extern int itos(int,char*); -extern void fmperm(int*,set*,set*,int,int); -extern void fmptn(int*,int*,int,set*,set*,int,int); -extern void longprune(set*,set*,set*,set*,int); -extern void nauty(graph*,int*,int*,set*,int*,optionblk*, - statsblk*,set*,int,int,int,graph*); -extern void maketargetcell(graph*,int*,int*,int,set*,int*,int*,int,boolean, - int,int (*)(graph*,int*,int*,int,int,boolean,int,int,int),int,int); -extern int nextelement(set*,int,int); -extern int orbjoin(int*,int*,int); -extern void permset(set*,set*,int,int*); -extern void putstring(FILE*,char*); -extern void refine(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -extern void refine1(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -extern void shortprune(set*,set*,int); -extern int targetcell(graph*,int*,int*,int,int,boolean,int,int,int); -extern int testcanlab(graph*,graph*,int*,int*,int,int); -extern void updatecan(graph*,graph*,int*,int,int,int); -extern void writeperm(FILE*,int*,boolean,int,int); -extern void nauty_freedyn(void); -extern void nauty_check(int,int,int,int); -extern void naugraph_check(int,int,int,int); -extern void nautil_check(int,int,int,int); -extern void nautil_freedyn(void); -extern void naugraph_freedyn(void); -extern void densenauty(graph*,int*,int*,int*, - optionblk*,statsblk*,int,int,graph*); -extern void writegroupsize(FILE*,double,int); - -#ifdef __cplusplus -} -#endif - -/* ++++++ This file is automatically generated, don't edit it by hand! ++++++ */ - - -#endif /* _NAUTY_H_ */ diff --git a/tools/nauty25r9_unix/nauty.o b/tools/nauty25r9_unix/nauty.o deleted file mode 100644 index f6789c3746319432f0ad66d92281368dfffb5c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35432 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

      y1gKBt$x{n4sW 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Ð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 and other system files */ - -int -main(int argc, char *argv[]) -{ - graph g[MAXN*MAXM]; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - - int n,m,v; - - /* Default options are set by the DEFAULTOPTIONS_GRAPH macro above. - Here we change those options that we want to be different from the - defaults. writeautoms=TRUE causes automorphisms to be written. */ - - options.writeautoms = TRUE; - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) != 1 || n <= 0) /* Exit if EOF or bad number */ - break; - - if (n > MAXN) - { - printf("n must be in the range 1..%d\n",MAXN); - exit(1); - } - - /* The nauty parameter m is a value such that an array of - m setwords is sufficient to hold n bits. The type setword - is defined in nauty.h. The number of bits in a setword is - WORDSIZE, which is 16, 32 or 64. Here we calculate - m = ceiling(n/WORDSIZE). */ - - m = SETWORDSNEEDED(n); - - /* The following optional call verifies that we are linking - to compatible versions of the nauty routines. */ - - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - /* Now we create the cycle. First we zero the graph, than for - each v, we add the edge (v,v+1), where values are mod n. */ - - EMPTYGRAPH(g,m,n); - for (v = 0; v < n; ++v) ADDONEEDGE(g,v,(v+1)%n,m); - - printf("Generators for Aut(C[%d]):\n",n); - - /* Since we are not requiring a canonical labelling, the last - parameter to densenauty() is not required and can be NULL. */ - - densenauty(g,lab,ptn,orbits,&options,&stats,m,n,NULL); - - /* The size of the group is returned in stats.grpsize1 and - stats.grpsize2. */ - - printf("Automorphism group size = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/nautyex10.c b/tools/nauty25r9_unix/nautyex10.c deleted file mode 100644 index 997db7a..0000000 --- a/tools/nauty25r9_unix/nautyex10.c +++ /dev/null @@ -1,151 +0,0 @@ -/* This program demonstrates how an isomorphism is found between - two graphs, using the Moebius graph as an example. - This version uses Traces and demonstrates how to compute the - automorphism group separately before computing the canonical - labelling. Although this is slower for easy graphs like - those here, it can be faster for some very difficult graphs. -*/ - -#include "traces.h" - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab1,lab1_sz); - DYNALLSTAT(int,lab2,lab2_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(int,map,map_sz); - static DEFAULTOPTIONS_TRACES(options); - TracesStats stats; - permnode *generators; - /* Declare and initialize sparse graph structures */ - SG_DECL(sg1); SG_DECL(sg2); - SG_DECL(cg1); SG_DECL(cg2); - - int n,m,i; - - /* Read a number of vertices and process */ - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - if (n%2 != 0) - { - fprintf(stderr,"Sorry, n must be even\n"); - continue; - } - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab1,lab1_sz,n,"malloc"); - DYNALLOC1(int,lab2,lab2_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,map,map_sz,n,"malloc"); - - /* Now make the first graph */ - - SG_ALLOC(sg1,n,3*n,"malloc"); - sg1.nv = n; /* Number of vertices */ - sg1.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg1.v[i] = 3*i; /* Position of vertex i in v array */ - sg1.d[i] = 3; /* Degree of vertex i */ - } - - for (i = 0; i < n; i += 2) /* Spokes */ - { - sg1.e[sg1.v[i]] = i+1; - sg1.e[sg1.v[i+1]] = i; - } - - for (i = 0; i < n-2; ++i) /* Clockwise edges */ - sg1.e[sg1.v[i]+1] = i+2; - sg1.e[sg1.v[n-2]+1] = 1; - sg1.e[sg1.v[n-1]+1] = 0; - - for (i = 2; i < n; ++i) /* Anticlockwise edges */ - sg1.e[sg1.v[i]+2] = i-2; - sg1.e[sg1.v[1]+2] = n-2; - sg1.e[sg1.v[0]+2] = n-1; - - /* Now make the second graph */ - - SG_ALLOC(sg2,n,3*n,"malloc"); - sg2.nv = n; /* Number of vertices */ - sg2.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - } - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - sg2.e[sg2.v[i]] = (i+1) % n; /* Clockwise */ - sg2.e[sg2.v[i]+1] = (i+n-1) % n; /* Anti-clockwise */ - sg2.e[sg2.v[i]+2] = (i+n/2) % n; /* Diagonals */ - } - - /* Now we make the canonically labelled graphs by a two-step - process. The first call to Traces computes the - automorphism group. The second call computes the - canonical labelling, using the automorphism group from - the first call. - - We have declared a variable "generators" that will be - used to hold the group generators between the two calls. - It has to be initialised to NULL and its address has to - be given to Traces using options.generators. After the - second call, we need to discard the generators with a - call to freeschreier(), which also initializes it again. */ - - generators = NULL; - options.generators = &generators; - - options.getcanon = FALSE; - Traces(&sg1,lab1,ptn,orbits,&options,&stats,NULL); - options.getcanon = TRUE; - Traces(&sg1,lab1,ptn,orbits,&options,&stats,&cg1); - freeschreier(NULL,&generators); - - options.getcanon = FALSE; - Traces(&sg2,lab1,ptn,orbits,&options,&stats,NULL); - options.getcanon = TRUE; - Traces(&sg2,lab1,ptn,orbits,&options,&stats,&cg2); - freeschreier(NULL,&generators); - - /* Compare canonically labelled graphs */ - - if (aresame_sg(&cg1,&cg2)) - { - printf("Isomorphic.\n"); - if (n <= 1000) - { - /* Write the isomorphism. For each i, vertex lab1[i] - of sg1 maps onto vertex lab2[i] of sg2. We compute - the map in order of labelling because it looks better. */ - - for (i = 0; i < n; ++i) map[lab1[i]] = lab2[i]; - for (i = 0; i < n; ++i) printf(" %d-%d",i,map[i]); - printf("\n"); - } - } - else - printf("Not isomorphic.\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/nautyex2.c b/tools/nauty25r9_unix/nautyex2.c deleted file mode 100644 index 81d9f84..0000000 --- a/tools/nauty25r9_unix/nautyex2.c +++ /dev/null @@ -1,75 +0,0 @@ -/* This program prints generators for the automorphism group of an - n-vertex polygon, where n is a number supplied by the user. - - This version uses dynamic allocation. -*/ - -#include "nauty.h" -/* MAXN=0 is defined by nauty.h, which implies dynamic allocation */ - -int -main(int argc, char *argv[]) -{ - /* DYNALLSTAT declares a pointer variable (to hold an array when it - is allocated) and a size variable to remember how big the array is. - Nothing is allocated yet. */ - - DYNALLSTAT(graph,g,g_sz); - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - - int n,m,v; - set *gv; - -/* Default options are set by the DEFAULTOPTIONS_GRAPH macro above. - Here we change those options that we want to be different from the - defaults. writeautoms=TRUE causes automorphisms to be written. */ - - options.writeautoms = TRUE; - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - - /* The nauty parameter m is a value such that an array of - m setwords is sufficient to hold n bits. The type setword - is defined in nauty.h. The number of bits in a setword is - WORDSIZE, which is 16, 32 or 64. Here we calculate - m = ceiling(n/WORDSIZE). */ - - m = SETWORDSNEEDED(n); - - /* The following optional call verifies that we are linking - to compatible versions of the nauty routines. */ - - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - /* Now that we know how big the graph will be, we allocate - * space for the graph and the other arrays we need. */ - - DYNALLOC2(graph,g,g_sz,m,n,"malloc"); - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - - EMPTYGRAPH(g,m,n); - for (v = 0; v < n; ++v) ADDONEEDGE(g,v,(v+1)%n,m); - - printf("Generators for Aut(C[%d]):\n",n); - densenauty(g,lab,ptn,orbits,&options,&stats,m,n,NULL); - - printf("order = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/nautyex3.c b/tools/nauty25r9_unix/nautyex3.c deleted file mode 100644 index b71fe8c..0000000 --- a/tools/nauty25r9_unix/nautyex3.c +++ /dev/null @@ -1,82 +0,0 @@ -/* This program prints the entire automorphism group of an n-vertex - polygon, where n is a number supplied by the user. -*/ - -#include "nauty.h" /* which includes */ -#include "naugroup.h" - -/**************************************************************************/ - -void -writeautom(int *p, int n) -/* Called by allgroup. Just writes the permutation p. */ -{ - int i; - - for (i = 0; i < n; ++i) printf(" %2d",p[i]); printf("\n"); -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(graph,g,g_sz); - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - - int n,m,v; - grouprec *group; - - /* The following cause nauty to call two procedures which - store the group information as nauty runs. */ - - options.userautomproc = groupautomproc; - options.userlevelproc = grouplevelproc; - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC2(graph,g,g_sz,m,n,"malloc"); - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - - EMPTYGRAPH(g,m,n); - for (v = 0; v < n; ++v) ADDONEEDGE(g,v,(v+1)%n,m); - - printf("Automorphisms of C[%d]:\n",n); - densenauty(g,lab,ptn,orbits,&options,&stats,m,n,NULL); - - /* Get a pointer to the structure in which the group information - has been stored. If you use TRUE as an argument, the - structure will be "cut loose" so that it won't be used - again the next time nauty() is called. Otherwise, as - here, the same structure is used repeatedly. */ - - group = groupptr(FALSE); - - /* Expand the group structure to include a full set of coset - representatives at every level. This step is necessary - if allgroup() is to be called. */ - - makecosetreps(group); - - /* Call the procedure writeautom() for every element of the group. - The first call is always for the identity. */ - - allgroup(group,writeautom); - } - else - break; - } - exit(0); -} diff --git a/tools/nauty25r9_unix/nautyex4.c b/tools/nauty25r9_unix/nautyex4.c deleted file mode 100644 index 4ad30f8..0000000 --- a/tools/nauty25r9_unix/nautyex4.c +++ /dev/null @@ -1,67 +0,0 @@ -/* This program prints generators for the automorphism group of an - n-vertex polygon, where n is a number supplied by the user. - This version uses sparse form with dynamic allocation. -*/ - -#include "nausparse.h" /* which includes nauty.h */ - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - static DEFAULTOPTIONS_SPARSEGRAPH(options); - statsblk stats; - sparsegraph sg; /* Declare sparse graph structure */ - - int n,m,i; - - options.writeautoms = TRUE; - - /* Initialise sparse graph structure. */ - - SG_INIT(sg); - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - - /* SG_ALLOC makes sure that the v,d,e fields of a sparse graph - structure point to arrays that are large enough. This only - works if the structure has been initialised. */ - - SG_ALLOC(sg,n,2*n,"malloc"); - - sg.nv = n; /* Number of vertices */ - sg.nde = 2*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg.v[i] = 2*i; - sg.d[i] = 2; - sg.e[2*i] = (i+n-1)%n; /* edge i->i-1 */ - sg.e[2*i+1] = (i+n+1)%n; /* edge i->i+1 */ - } - - printf("Generators for Aut(C[%d]):\n",n); - sparsenauty(&sg,lab,ptn,orbits,&options,&stats,NULL); - - printf("Automorphism group size = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/nautyex5.c b/tools/nauty25r9_unix/nautyex5.c deleted file mode 100644 index 7de33c3..0000000 --- a/tools/nauty25r9_unix/nautyex5.c +++ /dev/null @@ -1,130 +0,0 @@ -/* This program demonstrates how an isomorphism is found between - two graphs, using the Moebius graph as an example. - This version uses sparse form with dynamic allocation. -*/ - -#include "nausparse.h" /* which includes nauty.h */ - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab1,lab1_sz); - DYNALLSTAT(int,lab2,lab2_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(int,map,map_sz); - static DEFAULTOPTIONS_SPARSEGRAPH(options); - statsblk stats; - /* Declare and initialize sparse graph structures */ - SG_DECL(sg1); SG_DECL(sg2); - SG_DECL(cg1); SG_DECL(cg2); - - int n,m,i; - - /* Select option for canonical labelling */ - - options.getcanon = TRUE; - - /* Read the number of vertices and process it */ - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - if (n%2 != 0) - { - fprintf(stderr,"Sorry, n must be even\n"); - continue; - } - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab1,lab1_sz,n,"malloc"); - DYNALLOC1(int,lab2,lab2_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,map,map_sz,n,"malloc"); - - /* Now make the first graph */ - - SG_ALLOC(sg1,n,3*n,"malloc"); - sg1.nv = n; /* Number of vertices */ - sg1.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg1.v[i] = 3*i; /* Position of vertex i in v array */ - sg1.d[i] = 3; /* Degree of vertex i */ - } - - for (i = 0; i < n; i += 2) /* Spokes */ - { - sg1.e[sg1.v[i]] = i+1; - sg1.e[sg1.v[i+1]] = i; - } - - for (i = 0; i < n-2; ++i) /* Clockwise edges */ - sg1.e[sg1.v[i]+1] = i+2; - sg1.e[sg1.v[n-2]+1] = 1; - sg1.e[sg1.v[n-1]+1] = 0; - - for (i = 2; i < n; ++i) /* Anticlockwise edges */ - sg1.e[sg1.v[i]+2] = i-2; - sg1.e[sg1.v[1]+2] = n-2; - sg1.e[sg1.v[0]+2] = n-1; - - /* Now make the second graph */ - - SG_ALLOC(sg2,n,3*n,"malloc"); - sg2.nv = n; /* Number of vertices */ - sg2.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - } - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - sg2.e[sg2.v[i]] = (i+1) % n; /* Clockwise */ - sg2.e[sg2.v[i]+1] = (i+n-1) % n; /* Anti-clockwise */ - sg2.e[sg2.v[i]+2] = (i+n/2) % n; /* Diagonals */ - } - - /* Label sg1, result in cg1 and labelling in lab1; similarly sg2. - It is not necessary to pre-allocate space in cg1 and cg2, but - they have to be initialised as we did above. */ - - sparsenauty(&sg1,lab1,ptn,orbits,&options,&stats,&cg1); - sparsenauty(&sg2,lab2,ptn,orbits,&options,&stats,&cg2); - - /* Compare canonically labelled graphs */ - - if (aresame_sg(&cg1,&cg2)) - { - printf("Isomorphic.\n"); - if (n <= 1000) - { - /* Write the isomorphism. For each i, vertex lab1[i] - of sg1 maps onto vertex lab2[i] of sg2. We compute - the map in order of labelling because it looks better. */ - - for (i = 0; i < n; ++i) map[lab1[i]] = lab2[i]; - for (i = 0; i < n; ++i) printf(" %d-%d",i,map[i]); - printf("\n"); - } - } - else - printf("Not isomorphic.\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/nautyex6.c b/tools/nauty25r9_unix/nautyex6.c deleted file mode 100644 index c406f63..0000000 --- a/tools/nauty25r9_unix/nautyex6.c +++ /dev/null @@ -1,103 +0,0 @@ -/* This program demonstrates how an isomorphism is found between - graphs of the form in the figure above, for general size. - - This version uses dense form with dynamic allocation. -*/ - -#include "nauty.h" - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab1,lab1_sz); - DYNALLSTAT(int,lab2,lab2_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(int,map,map_sz); - DYNALLSTAT(graph,g1,g1_sz); - DYNALLSTAT(graph,g2,g2_sz); - DYNALLSTAT(graph,cg1,cg1_sz); - DYNALLSTAT(graph,cg2,cg2_sz); - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - - int n,m,i; - - /* Select option for canonical labelling */ - - options.getcanon = TRUE; - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - if (n%2 != 0) - { - fprintf(stderr,"Sorry, n must be even\n"); - continue; - } - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab1,lab1_sz,n,"malloc"); - DYNALLOC1(int,lab2,lab2_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,map,map_sz,n,"malloc"); - DYNALLOC2(graph,g1,g1_sz,n,m,"malloc"); - DYNALLOC2(graph,g2,g2_sz,n,m,"malloc"); - DYNALLOC2(graph,cg1,cg1_sz,n,m,"malloc"); - DYNALLOC2(graph,cg2,cg2_sz,n,m,"malloc"); - - /* Now make the first graph */ - /* ADDEDGE() is defined above */ - - EMPTYGRAPH(g1,m,n); /* start with no edges */ - - for (i = 0; i < n-2; ++i) ADDONEEDGE(g1,i,i+2,m); - ADDONEEDGE(g1,n-2,1,m); - ADDONEEDGE(g1,n-1,0,m); - for (i = 0; i < n; i += 2) ADDONEEDGE(g1,i,i+1,m); - - /* Now make the second graph */ - - EMPTYGRAPH(g2,m,n); /* start with no edges */ - - for (i = 0; i < n-1; ++i) ADDONEEDGE(g2,i,i+1,m); - ADDONEEDGE(g2,n-1,0,m); - for (i = 0; i < n/2; ++i) ADDONEEDGE(g2,i,i+n/2,m); - - /* Label g1, result in cg1 and labelling in lab1; similarly g2. - It is not necessary to pre-allocate space in cg1 and cg2, but - they have to be initialised as we did above. */ - - densenauty(g1,lab1,ptn,orbits,&options,&stats,m,n,cg1); - densenauty(g2,lab2,ptn,orbits,&options,&stats,m,n,cg2); - - /* Compare canonically labelled graphs */ - - if (memcmp(cg1,cg2,m*sizeof(graph)*n) == 0) - { - printf("Isomorphic.\n"); - if (n <= 1000) - { - /* Write the isomorphism. For each i, vertex lab1[i] - of sg1 maps onto vertex lab2[i] of sg2. We compute - the map in order of labelling because it looks better. */ - - for (i = 0; i < n; ++i) map[lab1[i]] = lab2[i]; - for (i = 0; i < n; ++i) printf(" %d-%d",i,map[i]); - printf("\n"); - } - } - else - printf("Not isomorphic.\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/nautyex7.c b/tools/nauty25r9_unix/nautyex7.c deleted file mode 100644 index 6cb878b..0000000 --- a/tools/nauty25r9_unix/nautyex7.c +++ /dev/null @@ -1,130 +0,0 @@ -/* This program demonstrates how an isomorphism is found between - two graphs, using the Moebius graph as an example. - This version uses Traces. -*/ - -#include "traces.h" - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab1,lab1_sz); - DYNALLSTAT(int,lab2,lab2_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(int,map,map_sz); - static DEFAULTOPTIONS_TRACES(options); - TracesStats stats; - /* Declare and initialize sparse graph structures */ - SG_DECL(sg1); SG_DECL(sg2); - SG_DECL(cg1); SG_DECL(cg2); - - int n,m,i; - - /* Select option for canonical labelling */ - - options.getcanon = TRUE; - - /* Read a number of vertices and process */ - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - if (n%2 != 0) - { - fprintf(stderr,"Sorry, n must be even\n"); - continue; - } - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab1,lab1_sz,n,"malloc"); - DYNALLOC1(int,lab2,lab2_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,map,map_sz,n,"malloc"); - - /* Now make the first graph */ - - SG_ALLOC(sg1,n,3*n,"malloc"); - sg1.nv = n; /* Number of vertices */ - sg1.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg1.v[i] = 3*i; /* Position of vertex i in v array */ - sg1.d[i] = 3; /* Degree of vertex i */ - } - - for (i = 0; i < n; i += 2) /* Spokes */ - { - sg1.e[sg1.v[i]] = i+1; - sg1.e[sg1.v[i+1]] = i; - } - - for (i = 0; i < n-2; ++i) /* Clockwise edges */ - sg1.e[sg1.v[i]+1] = i+2; - sg1.e[sg1.v[n-2]+1] = 1; - sg1.e[sg1.v[n-1]+1] = 0; - - for (i = 2; i < n; ++i) /* Anticlockwise edges */ - sg1.e[sg1.v[i]+2] = i-2; - sg1.e[sg1.v[1]+2] = n-2; - sg1.e[sg1.v[0]+2] = n-1; - - /* Now make the second graph */ - - SG_ALLOC(sg2,n,3*n,"malloc"); - sg2.nv = n; /* Number of vertices */ - sg2.nde = 3*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - } - - for (i = 0; i < n; ++i) - { - sg2.v[i] = 3*i; - sg2.d[i] = 3; - sg2.e[sg2.v[i]] = (i+1) % n; /* Clockwise */ - sg2.e[sg2.v[i]+1] = (i+n-1) % n; /* Anti-clockwise */ - sg2.e[sg2.v[i]+2] = (i+n/2) % n; /* Diagonals */ - } - - /* Label sg1, result in cg1 and labelling in lab1; similarly sg2. - It is not necessary to pre-allocate space in cg1 and cg2, but - they have to be initialised as we did above. */ - - Traces(&sg1,lab1,ptn,orbits,&options,&stats,&cg1); - Traces(&sg2,lab2,ptn,orbits,&options,&stats,&cg2); - - /* Compare canonically labelled graphs */ - - if (aresame_sg(&cg1,&cg2)) - { - printf("Isomorphic.\n"); - if (n <= 1000) - { - /* Write the isomorphism. For each i, vertex lab1[i] - of sg1 maps onto vertex lab2[i] of sg2. We compute - the map in order of labelling because it looks better. */ - - for (i = 0; i < n; ++i) map[lab1[i]] = lab2[i]; - for (i = 0; i < n; ++i) printf(" %d-%d",i,map[i]); - printf("\n"); - } - } - else - printf("Not isomorphic.\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/nautyex8.c b/tools/nauty25r9_unix/nautyex8.c deleted file mode 100644 index 33220f5..0000000 --- a/tools/nauty25r9_unix/nautyex8.c +++ /dev/null @@ -1,109 +0,0 @@ -/* This program demonstrates how an isomorphism is found between - two graphs, using the Moebius graphs as an example. - This version uses dense form with dynamic allocation. -*/ - -#include "nauty.h" - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,lab1,lab1_sz); - DYNALLSTAT(int,lab2,lab2_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(int,map,map_sz); - DYNALLSTAT(graph,g1,g1_sz); - DYNALLSTAT(graph,g2,g2_sz); - DYNALLSTAT(graph,cg1,cg1_sz); - DYNALLSTAT(graph,cg2,cg2_sz); - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - - int n,m,i; - size_t k; - - /* Select option for canonical labelling */ - - options.getcanon = TRUE; - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 0) - { - if (n%2 != 0) - { - fprintf(stderr,"Sorry, n must be even\n"); - continue; - } - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab1,lab1_sz,n,"malloc"); - DYNALLOC1(int,lab2,lab2_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,map,map_sz,n,"malloc"); - - /* Now make the first graph */ - - DYNALLOC2(graph,g1,g1_sz,n,m,"malloc"); - EMPTYGRAPH(g1,m,n); - - for (i = 0; i < n; i += 2) /* Spokes */ - ADDONEEDGE(g1,i,i+1,m); - - for (i = 0; i < n-2; ++i) /* Cycle */ - ADDONEEDGE(g1,i,i+2,m); - ADDONEEDGE(g1,1,n-2,m); - ADDONEEDGE(g1,0,n-1,m); - - /* Now make the second graph */ - - DYNALLOC2(graph,g2,g2_sz,n,m,"malloc"); - EMPTYGRAPH(g2,m,n); - - for (i = 0; i < n; ++i) - { - ADDONEEDGE(g2,i,(i+1)%n,m); /* Rim */ - ADDONEEDGE(g2,i,(i+n/2)%n,m); /* Diagonals */ - } - - /* Create canonical graphs */ - - DYNALLOC2(graph,cg1,cg1_sz,n,m,"malloc"); - DYNALLOC2(graph,cg2,cg2_sz,n,m,"malloc"); - - densenauty(g1,lab1,ptn,orbits,&options,&stats,m,n,cg1); - densenauty(g2,lab2,ptn,orbits,&options,&stats,m,n,cg2); - - /* Compare canonically labelled graphs */ - - for (k = 0; k < m*(size_t)n; ++k) - if (cg1[k] != cg2[k]) break; - - if (k == m*(size_t)n) - { - printf("Isomorphic.\n"); - if (n <= 1000) - { - /* Write the isomorphism. For each i, vertex lab1[i] - of sg1 maps onto vertex lab2[i] of sg2. We compute - the map in order of labelling because it looks better. */ - - for (i = 0; i < n; ++i) map[lab1[i]] = lab2[i]; - for (i = 0; i < n; ++i) printf(" %d-%d",i,map[i]); - printf("\n"); - } - } - else - printf("Not isomorphic.\n"); - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/nautyex9.c b/tools/nauty25r9_unix/nautyex9.c deleted file mode 100644 index 68cc138..0000000 --- a/tools/nauty25r9_unix/nautyex9.c +++ /dev/null @@ -1,118 +0,0 @@ -/* This program demonstrates how known automorphisms can be given - to Traces. We compute the automorphism group of the circulant - graph of order n with i is adjacent to j iff j-i is a square - mod n. We need that -1 is a square so that the graph is - undirected, which means that the prime factors of n must be - congruent to 1 mod 4. (This is the Paley graph in the event - that p is a prime.) -*/ - -#include "traces.h" - -int -main(int argc, char *argv[]) -{ - DYNALLSTAT(int,p,p_sz); - DYNALLSTAT(boolean,issquare,issquare_sz); - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - static DEFAULTOPTIONS_TRACES(options); - TracesStats stats; - /* Declare and initialize sparse graph structures */ - SG_DECL(sg); - - int deg,n,m,i,j; - size_t k; - permnode *gens; - - /* Select option for passing generators to Traces */ - - options.generators = &gens; - - /* Read a number of vertices and process it */ - - while (1) - { - printf("\nenter n : "); - if (scanf("%d",&n) == 1 && n > 2) - { - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - DYNALLOC1(int,p,p_sz,n,"malloc"); - DYNALLOC1(boolean,issquare,issquare_sz,n,"malloc"); - - /* Initialise list of automorphisms */ - - gens = NULL; - - /* Find the squares and the degree */ - - for (i = 0; i < n; ++i) issquare[i] = FALSE; - for (i = 0; i < n; ++i) issquare[(i*i)%n] = TRUE; - if (!issquare[n-1]) - { - printf("-1 must be a square mod n; try again\n"); - continue; - } - - deg = 0; - for (i = 1; i < n; ++i) if (issquare[i]) ++deg; - - /* Now make the graph */ - - SG_ALLOC(sg,n,n*deg,"malloc"); - sg.nv = n; /* Number of vertices */ - sg.nde = n*deg; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg.v[i] = i*deg; /* Position of vertex i in v array */ - sg.d[i] = deg; /* Degree of vertex i */ - } - - for (i = 0; i < n; ++i) /* Edges */ - { - k = sg.v[i]; - for (j = 1; j < n; ++j) - if (issquare[j]) sg.e[k++] = (i + j) % n; - } - - /* Add known automorphisms */ - - /* We wouldn't need freeschreier() if we were only - processing one graph, but it doesn't hurt. This - is how to properly dispose of previous generators. */ - - freeschreier(NULL,&gens); - - /* Cyclic rotation */ - for (i = 0; i < n; ++i) p[i] = (i + 1) % n; - addpermutation(&gens,p,n); - - /* Reflection about 0 */ - for (i = 0; i < n; ++i) p[i] = (n - i) % n; - addpermutation(&gens,p,n); - - /* Call Traces */ - - Traces(&sg,lab,ptn,orbits,&options,&stats,NULL); - - printf("Automorphism group size = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - - /* Traces left the automorphims we gave it, augmented by - any extra automorphims it found, in a circular list - pointed to by gens. See schreier.txt for documentation. */ - } - else - break; - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/newedgeg b/tools/nauty25r9_unix/newedgeg deleted file mode 100644 index 73ba61497210169f6c0c25cc5ce40697fe22a006..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143638 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

      @{S9N1}Sbjzd5V#@+ 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 diff --git a/tools/nauty25r9_unix/newedgeg.c b/tools/nauty25r9_unix/newedgeg.c deleted file mode 100644 index dde4026..0000000 --- a/tools/nauty25r9_unix/newedgeg.c +++ /dev/null @@ -1,240 +0,0 @@ -/* newedgeg.c version 1.1; B D McKay, Dec 2005. */ - -#define USAGE "newedgeg [-lq] [infile [outfile]]" - -#define HELPTEXT \ -" For each pair of non-adjacent edges, output the graph obtained\n\ - by subdividing the edges and joining the new vertices.\n\ -\n\ - The output file has a header if and only if the input file does.\n\ -\n\ - -l Canonically label outputs\n\ - -q Suppress auxiliary information\n" - -/*************************************************************************/ - -#include "gtools.h" -#include "gutils.h" - -static FILE *outfile; -static nauty_counter nout; -static int outcode; - -/*************************************************************************/ - -static void -newedge(graph *g1, int m1, int n1, - int v1, int v2, int w1, int w2, - graph *g2, int m2) -/* Make g2 by subdividing edges v1-v2 and w1-w2 in g1 - and adding an edge between them. Must have m2 >= m1. */ -{ - int i,j; - setword *s1,*s2; - - s1 = g1; - s2 = g2; - for (i = 0; i < n1; ++i) - { - for (j = 0; j < m1; ++j) *(s2++) = *(s1++); - for (; j < m2; ++j) *(s2++) = 0; - } - - s2 = GRAPHROW(g2,v1,m2); - DELELEMENT(s2,v2); - ADDELEMENT(s2,n1); - - s2 = GRAPHROW(g2,v2,m2); - DELELEMENT(s2,v1); - ADDELEMENT(s2,n1); - - s2 = GRAPHROW(g2,w1,m2); - DELELEMENT(s2,w2); - ADDELEMENT(s2,n1+1); - - s2 = GRAPHROW(g2,w2,m2); - DELELEMENT(s2,w1); - ADDELEMENT(s2,n1+1); - - s2 = GRAPHROW(g2,n1,m2); - EMPTYSET(s2,m2); - ADDELEMENT(s2,v1); - ADDELEMENT(s2,v2); - ADDELEMENT(s2,n1+1); - - s2 = GRAPHROW(g2,n1+1,m2); - EMPTYSET(s2,m2); - ADDELEMENT(s2,w1); - ADDELEMENT(s2,w2); - ADDELEMENT(s2,n1); -} - -/*************************************************************************/ - -static void -na_newedge(graph *g1, int m1, int n1, boolean dolabel) -/* Make all graphs by non-adjacent edge addition. */ -{ - int n2,m2; - int v1,v2,w1,w2; - set *sv1,*sw1; - graph *gq; -#if MAXN - graph h[MAXN*MAXM]; - grapg g2[MAXN*MAXM]; -#else - DYNALLSTAT(graph,h,h_sz); - DYNALLSTAT(graph,g2,g2_sz); -#endif - - n2 = n1 + 2; - m2 = (n2 + WORDSIZE - 1) / WORDSIZE; - if (m2 < m1) m2 = m1; - -#if !MAXN - DYNALLOC2(graph,g2,g2_sz,m2,n2,"newedgeg"); - if (dolabel) DYNALLOC2(graph,h,h_sz,m2,n2,"newedgeg"); -#endif - - for (v1 = 0, sv1 = g1; v1 < n1-3; ++v1, sv1 += m1) - for (w1 = v1+1, sw1 = sv1 + m1; w1 < n1-1; ++w1, sw1 += m1) - { - for (v2 = v1; (v2 = nextelement(sv1,m1,v2)) >= 0; ) - for (w2 = w1; (w2 = nextelement(sw1,m1,w2)) >= 0; ) - { - if (v2 == w1 || v2 == w2) continue; - - newedge(g1,m1,n1,v1,v2,w1,w2,g2,m2); - - gq = g2; - - if (dolabel) - { - fcanonise(g2,m2,n2,h,NULL,FALSE); /* FIXME (loops) */ - gq = h; - } - if (outcode == SPARSE6) writes6(outfile,gq,m2,n2); - else writeg6(outfile,gq,m2,n2); - ++nout; - } - } -} - -/*************************************************************************/ - -int -main(int argc, char *argv[]) -{ - char *infilename,*outfilename; - FILE *infile; - boolean badargs,dolabel,quiet; - int j,m,n,argnum; - int codetype; - graph *g; - nauty_counter nin; - char *arg,sw; - double t; - - HELP; - - infilename = outfilename = NULL; - dolabel = quiet = FALSE; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('l',dolabel) - else SWBOOLEAN('q',quiet) - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!quiet) - { - fprintf(stderr,">A newedgeg"); - if (dolabel) fprintf(stderr," -l"); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - fflush(stderr); - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - if (codetype&SPARSE6) outcode = SPARSE6; - else outcode = GRAPH6; - - if (codetype&HAS_HEADER) - { - if (outcode == SPARSE6) writeline(outfile,SPARSE6_HEADER); - else writeline(outfile,GRAPH6_HEADER); - } - - if (dolabel) nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - nin = nout = 0; - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; -#if MAXN - if (n > MAXN-2) - { - fprintf(stderr,">E newedgeg: input too large\n"); - exit(1); - } -#endif - - ++nin; - - na_newedge(g,m,n,dolabel); - - FREES(g); - } - t = CPUTIME - t; - - if (!quiet) - fprintf(stderr, - ">Z " COUNTER_FMT " graphs read from %s, " - COUNTER_FMT " written to %s; %3.2f sec.\n", - nin,infilename,nout,outfilename,t); - - exit(0); -} diff --git a/tools/nauty25r9_unix/nug25.pdf b/tools/nauty25r9_unix/nug25.pdf deleted file mode 100644 index 6c405ffc05dcd04e5338235667669b3a873eefca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574391 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%0D6#E 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

      3RTZ?Y25!W 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 GiT?}qxU{4I diff --git a/tools/nauty25r9_unix/geng.c b/tools/nauty25r9_unix/geng.c deleted file mode 100644 index 65183a0..0000000 --- a/tools/nauty25r9_unix/geng.c +++ /dev/null @@ -1,2504 +0,0 @@ -/* TODO: insert new timings - * add chordal graphs - * add complements for ordinary graphs */ - -/* geng.c version 2.7; B D McKay, Jan 2013. */ - -#define USAGE \ -"geng [-cCmtfbd#D#] [-uygsnh] [-lvq] \n\ - [-x#X#] n [mine[:maxe]] [res/mod] [file]" - -#define HELPTEXT \ -" Generate all graphs of a specified class.\n\ -\n\ - n : the number of vertices\n\ - mine:maxe : a range for the number of edges\n\ - #:0 means '# or more' except in the case 0:0\n\ - res/mod : only generate subset res out of subsets 0..mod-1\n\ -\n\ - -c : only write connected graphs\n\ - -C : only write biconnected graphs\n\ - -t : only generate triangle-free graphs\n\ - -f : only generate 4-cycle-free graphs\n\ - -b : only generate bipartite graphs\n\ - (-t, -f and -b can be used in any combination)\n\ - -m : save memory at the expense of time (only makes a\n\ - difference in the absence of -b, -t, -f and n <= 28).\n\ - -d# : a lower bound for the minimum degree\n\ - -D# : a upper bound for the maximum degree\n\ - -v : display counts by number of edges\n\ - -l : canonically label output graphs\n\ -\n\ - -u : do not output any graphs, just generate and count them\n\ - -g : use graph6 output (default)\n\ - -s : use sparse6 output\n\ - -y : use the obsolete y-format instead of graph6 format\n\ - -h : for graph6 or sparse6 format, write a header too\n\ -\n\ - -q : suppress auxiliary output (except from -v)\n\ -\n\ - See program text for much more information.\n" - - -/* Parameters: - - n = the number of vertices (1..min(32,WORDSIZE)) - mine = the minimum number of edges (no bounds if missing) - maxe = the maximum number of edges (same as mine if missing) - 0 means "infinity" except in the case "0-0" - mod, res = a way to restrict the output to a subset. - All the graphs in G(n,mine..maxe) are divided into - disjoint classes C(0,mod),C(1,mod),...,C(mod-1,mod), - of very approximately equal size. - Only the class C(res,mod) is written. - - If the -x or -X switch is used, they must have the - same value for different values of res; otherwise - the partitioning may not be valid. In this case - (-x,-X with constant value), the usual relationships - between modulo classes are obeyed; for example - C(3,4) = C(3,8) union C(7,8). This is not true - if 3/8 and 7/8 are done with -x or -X values - different from those used for 3/4. - - file = a name for the output file (stdout if missing or "-") - - All switches can be concatenated or separate. However, the - value of -d must be attached to the "d", and similarly for "x". - - -c : only write connected graphs - -C : only write biconnected graphs - -t : only generate triangle-free graphs - -f : only generate 4-cycle-free graphs - -b : only generate bipartite graphs - (-t, -f and -b can be used in any combination) - -m : save memory at expense of time (only makes a - difference in the absence of -b, -t, -f and n <= 30). - -d : specify an upper bound for the maximum degree. - The value of the upper bound must be adjacent to - the "d". Example: -d6 - -v : display counts by number of edges - -l : canonically label output graphs - - -u : do not output any graphs, just generate and count them - -g : use graph6 output (default) - -s : use sparse6 output - -n : use nauty format instead of graph6 format for output - -y : use the obsolete y-format instead of graph6 format - -h : for graph6 or sparse6 format, write a header too - - -q : suppress auxiliary output (except from -v) - - -x : specify a parameter that determines how evenly - the res/mod facility splits the graphs into subsets. - High values mean more even splitting at slight cost - to the total time. The default is 20*mod, and the - the legal minimum is 3*mod. More information is given - under "res/mod" above. - -X : move the initial splitting level higher by , - in order to force more even splitting at the cost - of speed. Default is -X0. More information is given - under "res/mod" above. - -Output formats. - - The output format is determined by the mutually exclusive switches - -u, -n, -y, -g and -s. The default is -g. - - -u suppresses output of graphs completely. - - -s and -g specify sparse6 and graph6 format, defined elsewhere. - In this case a header is also written if -h is present. - - If -y is present, graphs will be written in y-format. - y-format is obsolete and only provided for backwards compatibility. - - Each graph occupies one line with a terminating newline. - Except for the newline, each byte has the format 01xxxxxx, where - each "x" represents one bit of data. - First byte: xxxxxx is the number of vertices n - Other ceiling(n(n-1)/12) bytes: These contain the upper triangle of - the adjacency matrix in column major order. That is, the entries - appear in the order (0,1),(0,2),(1,2),(0,3),(1,3),(2,3),(0,4),... . - The bits are used in left to right order within each byte. - Any unused bits on the end are set to zero. - - If -n is present, any output graphs are written in nauty format. - - For a graph of n vertices, the output consists of one int giving - the number of vertices, and n setwords containing the adjacency - matrix. Note that this is system dependent (i.e. don't use it). - It will not work properly if the output is to stdout and your - system distinguishes binary and text files. - -OUTPROC feature. - - By defining the C preprocessor variable OUTPROC at compile time - (for Unix the syntax is -DOUTPROC=procname on the cc command), - geng can be made to call a procedure of your manufacture with - each output graph instead of writing anything. Your procedure - needs to have type void and the argument list (FILE *f, graph - *g, int n). f is a stream open for writing, g is the graph in - nauty format, and n is the number of vertices. Your procedure - can be in a separate file so long as it is linked with geng. The - global variables sparse6, graph6, quiet, nooutput, nautyformat, - yformat and canonise (all type boolean) can be used to test - for the presence of the flags -s, -g, -q, -u, -n, -y and -l, - respectively. If -l is present, the group size and similar - details can be found in the global variable nauty_stats. - -PRUNE feature. - - By defining the C preprocessor variable PRUNE at compile time, geng - can be made to call - int PRUNE(graph *g,int n,int maxn) - for each intermediate (and final) graph, and reject it if - the value returned is nonzero. The arguments are: - - g = the graph in nauty format (m=1) - n = the number of vertices in g - maxn = the number of vertices for output - (the value you gave on the command line to geng) - - geng constructs the graph starting with vertex 0, then adding - vertices 1,2,3,... in that order. Each graph in the sequence is - an induced subgraph of all later graphs in the sequence. - - A call is made for all orders from 1 to maxn. In testing for - a uniform property (such as a forbidden subgraph or forbidden - induced subgraph) it might save time to notice that a call to - PRUNE for n implies that the call for n-1 already passed. - - For very fast tests, it might be worthwhile using PREPRUNE as - well. It has the same meaning but is applied earlier and more - often. - -SUMMARY - - If the C preprocessor variable SUMMARY is defined at compile time, the - procedure SUMMARY(bigint nout, double cpu) is called just before - the program exits. The purpose is to allow reporting of statistics - collected by PRUNE or OUTPROC. The values nout and cpu are the output - count and cpu time reported on the >Z line. - Output should be written to stderr. - -INSTRUMENT feature. - - If the C preprocessor variable INSTRUMENT is defined at compile time, - extra code is inserted to collect statistics during execution, and - more information is written to stderr at termination. - -CALLING FROM A PROGRAM - - It is possible to call geng from another program instead of using it - as a stand-alone program. The main requirement is to change the name - of the main program to be other than "main". This is done by defining - the preprocessor variable GENG_MAIN. You might also like to define - OUTPROC to be the name of a procedure to receive the graphs. To call - the program you need to define an argument list argv[] consistent with - the usual one; don't forget that argv[0] is the command name and not - the first argument. The value of argc is the number of strings in - argv[]; that is, one more than the number of arguments. See the - sample program callgeng.c. - -************************************************************************** - -Sample performance statistics. - - Here we give some graph counts and execution times on a Linux - Pentium III running at 550 MHz. Times are with the -u option - (generate but don't write); add 3-5 microseconds per graph for - output to a file. Add another 0.2-0.3 microseconds per graph - if you specify connectivity (-c), or 0.6-0.7 microseconds per - graph if you specific biconnectivity (-C). - - - General Graphs C3-free Graphs (-t) - - 1 1 1 1 - 2 2 2 2 - 3 4 3 3 - 4 11 4 7 - 5 34 5 14 - 6 156 6 38 - 7 1044 7 107 - 8 12346 0.11 sec 8 410 - 9 274668 1.77 sec 9 1897 - 10 12005168 1.22 min 10 12172 0.21 sec - 11 1018997864 1.72 hr 11 105071 1.49 sec - 12 165091172592 285 hr 12 1262180 15.9 sec - 13 50502031367952 ~10 years 13 20797002 4.08 min - These can be done in about half 14 467871369 1.50 hr - the time by setting the edge limit 15 14232552452 45.6 hr - half way then adding complements. 16 581460254001 79 days - 17 31720840164950 - - - C4-free Graphs (-f) (C3,C4)-free Graphs (-tf) - - 1 1 1 1 - 2 2 2 2 - 3 4 3 3 - 4 8 4 6 - 5 18 5 11 - 6 44 6 23 - 7 117 7 48 - 8 351 8 114 - 9 1230 9 293 - 10 5069 0.11 sec 10 869 - 11 25181 0.48 sec 11 2963 0.10 sec - 12 152045 2.67 sec 12 12066 0.36 sec - 13 1116403 18.0 sec 13 58933 1.50 sec - 14 9899865 2.50 min 14 347498 7.76 sec - 15 104980369 25.7 min 15 2455693 50.9 sec - 16 1318017549 5.33 hr 16 20592932 6.79 min - 17 19427531763 82.6 hr 17 202724920 1.11 hr - 18 333964672216 62 days 18 2322206466 12.7 hr - 19 6660282066936 19 30743624324 168 hr - 20 468026657815 110 days - - Old value was wrong: 18 2142368552 (The program was - ok, but somehow we tabulated the answer incorrectly.) - - - Bipartite Graphs (-b) C4-free Bipartite Graphs (-bf) - - 1 1 1 1 - 2 2 2 2 - 3 3 3 3 - 4 7 4 6 - 5 13 5 10 - 6 35 6 21 - 7 88 7 39 - 8 303 8 86 - 9 1119 9 182 - 10 5479 0.11 sec 10 440 - 11 32303 0.59 sec 11 1074 - 12 251135 3.99 sec 12 2941 0.15 sec - 13 2527712 35.1 sec 13 8424 0.43 sec - 14 33985853 7.22 min 14 26720 1.37 sec - 15 611846940 2.05 hr 15 90883 4.30 sec - 16 14864650924 48.9 hr 16 340253 14.9 sec - 17 488222721992 70 days 17 1384567 57.1 sec - 18 21712049275198 18 6186907 4.01 min - 19 30219769 18.4 min - 20 161763233 1.57 hr - 21 946742190 8.85 hr - 22 6054606722 56.2 hr - 23 42229136988 16.6 days - 24 320741332093 121 days - -If you know any more of these counts, please tell me. - -************************************************************************** - -Hints: - -To make all the graphs of order n, without restriction on type, -it is fastest to make them up to binomial(n,2)/2 edges and append -the complement of those with strictly less than binomial(n,2)/2 edges. - -If it is necessary to split the computation into pieces, it is more -efficient to use the res/mod feature than to split by numbers of edges. - -The memory requirements are exponential in n if no maxdeg is given. -For maxdeg=D, the requirements are still exponential (but smaller) -for general graphs, but O(n^D) for other graphs. Use -m to reduce -the memory requirements to O(n^D) for general graphs too, at the -cost of a small increase in cpu time. - -************************************************************************** - - Author: B. D. McKay, Sep 1991 and many later dates. - Copyright B. McKay (1991-2013). All rights reserved. - This software is subject to the conditions and waivers - detailed in the file nauty.h. - - Changes: Nov 18, 1991 : added -d switch - fixed operation for n=16 - Nov 26, 1991 : added OUTPROC feature - Nov 29, 1991 : -c implies mine >= n-1 - Jan 8, 1992 : make writeny() not static - Jan 10, 1992 : added -n switch - Feb 9, 1992 : fixed case of n=1 - Feb 16, 1992 : changed mine,maxe,maxdeg testing - Feb 19, 1992 : added -b, -t and -u options - documented OUTPROC and added external - declaration for it. - Feb 20, 1992 : added -v option - Feb 22, 1992 : added INSTRUMENT compile-time option - Feb 23, 1992 : added xbnds() for more effective pruning - Feb 24, 1992 : added -l option - Feb 25, 1992 : changed writenauty() to use fwrite() - Mar 11, 1992 : completely revised many parts, incl - new refinement procedure for fast rejection, - distance invariant for regular graphs - May 19, 1992 : modified userautomproc slightly. xorb[] - is no longer idempotent but it doesn't matter. - Speed-up of 2-5% achieved. - June 5, 1993 : removed ";" after "CPUDEFS" to avoid illegal - empty declaration. - Nov 24, 1994 : tested for 0 <= res < mod - - Apr 13, 1996 : Major overhaul. Renamed "geng". - Changed argument syntax. - Removed 16-vertex limit. - Added -s, -m, -x. Allowed combinations. - Replaced code for non-general graphs. - Very many small changes. - Jul 12, 1996 : Changed semantics of -x and res/mod. - Changed >A line and added fflush()/ - All switches can be concatenated or not. - Aug 16, 1996 : Added -X switch and PRUNE() feature. - Fixed case of argument 0-0. - Sep 22, 1996 : Improved 1-2% by tweaking refinex(). - Jan 21, 1997 : Renamed to geng. - Changed -s to -f, and added -sghq. - Sep 7, 1997 : Fixed WORDSIZE=16 problems. - Sep 22, 1997 : Use "wb" open for nautyformat. - Jan 26, 1998 : Added SUMMARY feature. - Mar 4, 1998 : Added -C. - Mar 12, 1998 : Moved stats to nauty_stats. - Jan 1, 2000 : Changed -d to -D and added -d. - Feb 24, 2000 : Raised limit to 32 vertices. - Mar 3, 2000 : Made some counts into unsigned long. - (Includes first arg to SUMMARY.) - Mar 12, 2000 : Used bigint for counts that may exceed 2^32. - Now all counts from very long runs are ok. - Oct 12, 2000 : Changed maxef[32] to 92 after confirmation - from Yang Yuansheng. The old value of 93 was - valid but 92 is slightly more efficient. - Nov 16, 2000 : Used fuction prototypes. - Jul 31, 2001 : Added PREPRUNE - May 7, 2004 : Complete all function prototypes - Nov 24, 2004 : Force -m for very large sizes - Add -bf automatically if generating trees - Apr 1, 2007 : Write >A in one fputs() to try to reduce - mixing of outputs in multi-process pipes. - Sep 19, 2007 : Force -m for n > 28 regardless of word size. - Nov 29, 2008 : Slightly improved connectivity testing. - -**************************************************************************/ - -#define NAUTY_PGM 1 /* 1 = geng, 2 = genbg, 3 = gentourng */ - -#ifndef MAXN -#define MAXN 32 /* not more than max(32,WORDSIZE) */ -#endif - -#if MAXN > 32 - #error "Can't have MAXN greater than 32" -#endif - -#define ONE_WORD_SETS -#include "gtools.h" /* which includes nauty.h and stdio.h */ - -#if MAXN < 32 -typedef int xword; /* Must be as large as MAXN bits, and - must be unsigned if equal to MAXN bits */ -#else -typedef unsigned int xword; -#endif - -static void (*outproc)(FILE*,graph*,int); - -static FILE *outfile; /* file for output graphs */ -static int connec; /* 1 for -c, 2 for -C, 0 for neither */ -static boolean bipartite; /* presence of -b */ -static boolean trianglefree; /* presence of -t */ -static boolean squarefree; /* presence of -f */ -static boolean savemem; /* presence of -m */ -static boolean verbose; /* presence of -v */ -boolean nautyformat; /* presence of -n */ -boolean yformat; /* presence of -y */ -boolean graph6; /* presence of -g */ -boolean sparse6; /* presence of -s */ -boolean nooutput; /* presence of -u */ -boolean canonise; /* presence of -l */ -boolean quiet; /* presence of -q */ -boolean header; /* presence of -h */ -statsblk nauty_stats; -static int mindeg,maxdeg,maxn,mine,maxe,mod,res; -#define PRUNEMULT 20 /* bigger -> more even split at greater cost */ -static int min_splitlevel,odometer,splitlevel,multiplicity; -static graph gcan[MAXN]; - -#if MAXN <= 16 -static xword xbit[] = {0x0001,0x0002,0x0004,0x0008, - 0x0010,0x0020,0x0040,0x0080, - 0x0100,0x0200,0x0400,0x0800, - 0x1000,0x2000,0x4000,0x8000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : 15-leftbit[((x)>>8)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] + bytecount[(x)&0xFF]) -#elif MAXN <= 24 -static xword xbit[] = {0x000001,0x000002,0x000004,0x000008, - 0x000010,0x000020,0x000040,0x000080, - 0x000100,0x000200,0x000400,0x000800, - 0x001000,0x002000,0x004000,0x008000, - 0x010000,0x020000,0x040000,0x080000, - 0x100000,0x200000,0x400000,0x800000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : 23-leftbit[((x)>>16)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + bytecount[(x)&0xFF]) -#else -static xword xbit[] = {0x00000001,0x00000002,0x00000004,0x00000008, - 0x00000010,0x00000020,0x00000040,0x00000080, - 0x00000100,0x00000200,0x00000400,0x00000800, - 0x00001000,0x00002000,0x00004000,0x00008000, - 0x00010000,0x00020000,0x00040000,0x00080000, - 0x00100000,0x00200000,0x00400000,0x00800000, - 0x01000000,0x02000000,0x04000000,0x08000000, - 0x10000000,0x20000000,0x40000000,0x80000000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : \ - (x)&0xFF0000 ? 23-leftbit[((x)>>16)&0xFF] : \ - 31-leftbit[((x)>>24)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + \ - + bytecount[((x)>>24)&0xFF] + bytecount[(x)&0xFF]) -#endif - -typedef struct -{ - int ne,dmax; /* values used for xlb,xub calculation */ - int xlb,xub; /* saved bounds on extension degree */ - xword lo,hi; /* work purposes for orbit calculation */ - xword xstart[MAXN+1]; /* index into xset[] for each cardinality */ - xword *xset; /* array of all x-sets in card order */ - xword *xcard; /* cardinalities of all x-sets */ - xword *xinv; /* map from x-set to index in xset */ - xword *xorb; /* min orbit representative */ - xword *xx; /* (-b, -t, -s, -m) candidate x-sets */ - /* note: can be the same as xcard */ - xword xlim; /* number of x-sets in xx[] */ -} leveldata; - - -/* The program is so fast that the count of output graphs can quickly - overflow a 32-bit integer. Therefore, we use two long values - for each count, with a ratio of 10^9 between them. The macro - ADDBIG adds a small number to one of these big numbers. - BIGTODOUBLE converts a big number to a double (approximately). - SUMBIGS adds a second big number into a first big number. - SUBBIGS subtracts one big number from a second. - PRINTBIG prints a big number in decimal. - ZEROBIG sets the value of a big number to 0. - ISZEROBIG tests if the value is 0. - SETBIG sets a big number to a value at most 10^9-1. - ISEQBIG tests if two big numbers are equal. - ISASBIG tests if a big number is at least as a value at most 10^9-1. -*/ - -typedef struct -{ - long hi,lo; -} bigint; - -#define ZEROBIG(big) big.hi = big.lo = 0L -#define ISZEROBIG(big) (big.lo == 0 && big.hi == 0) -#define SETBIG(big,value) {big.hi = 0L; big.lo = (value);} -#define ADDBIG(big,extra) if ((big.lo += (extra)) >= 1000000000L) \ - { ++big.hi; big.lo -= 1000000000L;} -#define PRINTBIG(file,big) if (big.hi == 0) \ - fprintf(file,"%ld",big.lo); else fprintf(file,"%ld%09ld",big.hi,big.lo) -#define BIGTODOUBLE(big) (big.hi * 1000000000.0 + big.lo) -#define SUMBIGS(big1,big2) {if ((big1.lo += big2.lo) >= 1000000000L) \ - {big1.lo -= 1000000000L; big1.hi += big2.hi + 1L;} \ - else big1.hi += big2.hi;} -#define SUBBIGS(big1,big2) {if ((big1.lo -= big2.lo) < 0L) \ - {big1.lo += 1000000000L; big1.hi -= big2.hi + 1L;} \ - else big1.hi -= big2.hi;} -/* Note: SUBBIGS must not allow the value to go negative. - SUMBIGS and SUBBIGS both permit big1 and big2 to be the same bigint. */ -#define ISEQBIG(big1,big2) (big1.lo == big2.lo && big1.hi == big2.hi) -#define ISASBIG(big,value) (big.hi > 0 || big.lo >= (value)) - -static leveldata data[MAXN]; /* data[n] is data for n -> n+1 */ -static bigint ecount[1+MAXN*(MAXN-1)/2]; /* counts by number of edges */ -static bigint nodes[MAXN]; /* nodes at each level */ - -#ifdef INSTRUMENT -static unsigned long rigidnodes[MAXN],fertilenodes[MAXN]; -static unsigned long a1calls,a1nauty,a1succs; -static unsigned long a2calls,a2nauty,a2uniq,a2succs; -#endif - -/* The numbers below are actual maximum edge counts. The apparently - anomolous value of 92 for maxef[32] has been confirmed independently - by Yang Yuansheng (as well as all the smaller maxef[] values). - geng works correctly with any upper bounds. - To extend an upper bound upwards: (n-1, E) -> (n, E + floor(2*E/(n-2))). -*/ - -static int maxeb[] = /* max edges for -b */ - {0,0,1,2,4, 6,9,12,16,20, 25,30,36,42,49, 56,64,72,81,90, - 100,110,121,132,144, 156,169,182,196,210, 225,240,256}; -static int maxet[] = /* max edges for -t */ - {0,0,1,2,4, 6,9,12,16,20, 25,30,36,42,49, 56,64,72,81,90, - 100,110,121,132,144, 156,169,182,196,210, 225,240,256}; -static int maxef[] = /* max edges for -f */ - {0,0,1,3,4, 6,7,9,11,13, 16,18,21,24,27, 30,33,36,39,42, - 46,50,52,56,59, 63,67,71,76,80, 85,90,92}; -static int maxeft[] = /* max edges for -ft */ - {0,0,1,2,3, 5,6,8,10,12, 15,16,18,21,23, 26,28,31,34,38, - 41,44,47,50,54, 57,61,65,68,72, 76,80,85}; -static int maxebf[] = /* max edges for -bf */ - {0,0,1,2,3, 4,6,7,9,10, 12,14,16,18,21, 22,24,26,29,31, - 34,36,39,42,45, 48,52,53,56,58, 61,64,67}; - -#ifdef PLUGIN -#include PLUGIN -#endif - -#ifdef OUTPROC -extern void OUTPROC(FILE*,graph*,int); -#endif -#ifdef PRUNE -extern int PRUNE(graph*,int,int); -#endif -#ifdef PREPRUNE -extern int PREPRUNE(graph*,int,int); -#endif -#ifdef SUMMARY -extern void SUMMARY(bigint,double); -#endif - -/************************************************************************/ - -void -writeny(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in y format */ -{ - static char ybit[] = {32,16,8,4,2,1}; - char s[(MAXN*(MAXN-1)/2 + 5)/6 + 4]; - int i,j,k; - char y,*sp; - - sp = s; - *(sp++) = 0x40 | n; - y = 0x40; - - k = -1; - for (j = 1; j < n; ++j) - for (i = 0; i < j; ++i) - { - if (++k == 6) - { - *(sp++) = y; - y = 0x40; - k = 0; - } - if (g[i] & bit[j]) y |= ybit[k]; - } - if (n >= 2) *(sp++) = y; - *(sp++) = '\n'; - *sp = '\0'; - - if (fputs(s,f) == EOF || ferror(f)) - { - fprintf(stderr,">E writeny : error on writing file\n"); - exit(2); - } -} - -/************************************************************************/ - -void -writeg6x(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in graph6 format */ -{ - writeg6(f,g,1,n); -} - -/************************************************************************/ - -void -writes6x(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in sparse6 format */ -{ - writes6(f,g,1,n); -} - -/***********************************************************************/ - -static void -nullwrite(FILE *f, graph *g, int n) -/* don't write graph g (n vertices) to file f */ -{ -} - -/***********************************************************************/ - -void -writenauty(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in nauty format */ -{ - int nn; - - nn = n; - - if (fwrite((char *)&nn,sizeof(int),(size_t)1,f) != 1 || - fwrite((char*)g,sizeof(setword),(size_t)n,f) != n) - { - fprintf(stderr,">E writenauty : error on writing file\n"); - exit(2); - } -} - -/*********************************************************************/ - -static boolean -isconnected(graph *g, int n) -/* test if g is connected */ -{ - setword seen,expanded,toexpand,allbits; - int i; - - allbits = ALLMASK(n); - - expanded = bit[n-1]; - seen = expanded | g[n-1]; - - while (seen != allbits && (toexpand = (seen & ~expanded))) /* not == */ - { - i = FIRSTBITNZ(toexpand); - expanded |= bit[i]; - seen |= g[i]; - } - - return seen == allbits; -} - -/**********************************************************************/ - -static boolean -isbiconnected(graph *g, int n) -/* test if g is biconnected */ -{ - int sp,v,w; - setword sw; - setword visited; - int numvis,num[MAXN],lp[MAXN],stack[MAXN]; - - if (n <= 2) return FALSE; - - visited = bit[0]; - stack[0] = 0; - num[0] = 0; - lp[0] = 0; - numvis = 1; - sp = 0; - v = 0; - - for (;;) - { - if ((sw = g[v] & ~visited)) /* not "==" */ - { - w = v; - v = FIRSTBITNZ(sw); /* visit next child */ - stack[++sp] = v; - visited |= bit[v]; - lp[v] = num[v] = numvis++; - sw = g[v] & visited & ~bit[w]; - while (sw) - { - w = FIRSTBITNZ(sw); - sw &= ~bit[w]; - if (num[w] < lp[v]) lp[v] = num[w]; - } - } - else - { - w = v; /* back up to parent */ - if (sp <= 1) return numvis == n; - v = stack[--sp]; - if (lp[w] >= num[v]) return FALSE; - if (lp[w] < lp[v]) lp[v] = lp[w]; - } - } -} - -/**********************************************************************/ - -static void -gcomplement(graph *g, graph *gc, int n) -/* Take the complement of g and put it in gc */ -{ - int i; - setword all; - - all = ~(setword)BITMASK(n-1); - for (i = 0; i < n; ++i) - gc[i] = g[i] ^ all ^ bit[i]; -} - -/**********************************************************************/ - -static boolean -distinvar(graph *g, int *invar, int n) -/* make distance invariant - return FALSE if n-1 not maximal else return TRUE */ -{ - int w; - setword workset,frontier; - setword sofar; - int inv,d,v; - - for (v = n-1; v >= 0; --v) - { - inv = 0; - sofar = frontier = bit[v]; - for (d = 1; frontier != 0; ++d) - { - workset = 0; - inv += POPCOUNT(frontier) ^ (0x57 + d); - while (frontier) - { - w = FIRSTBITNZ(frontier); - frontier ^= bit[w]; - workset |= g[w]; - } - frontier = workset & ~sofar; - sofar |= frontier; - } - invar[v] = inv; - if (v < n-1 && inv > invar[n-1]) return FALSE; - } - return TRUE; -} - -/**************************************************************************/ - -static void -makexgraph(graph *g, xword *h, int n) -/* make x-format graph from nauty format graph */ -{ - setword gi; - int i,j; - xword hi; - - for (i = 0; i < n; ++i) - { - hi = 0; - gi = g[i]; - while (gi) - { - j = FIRSTBITNZ(gi); - gi ^= bit[j]; - hi |= xbit[j]; - } - h[i] = hi; - } -} - -/**************************************************************************/ - -static void -make0graph(graph *g, xword *h, int n) -/* make x-format graph without edges */ -{ - int i; - - for (i = 0; i < n; ++i) h[i] = 0; -} - -/**************************************************************************/ - -static void -makebgraph(graph *g, xword *h, int n) -/* make x-format graph of different colour graph */ -{ - setword seen1,seen2,expanded,w; - setword restv; - xword xseen1,xseen2; - int i; - - restv = 0; - for (i = 0; i < n; ++i) restv |= bit[i]; - - seen1 = seen2 = 0; - expanded = 0; - - while (TRUE) - { - if ((w = ((seen1 | seen2) & ~expanded)) == 0) - { - xseen1 = 0; - w = seen1; - while (w) - { - i = FIRSTBITNZ(w); - w ^= bit[i]; - xseen1 |= xbit[i]; - } - xseen2 = 0; - w = seen2; - while (w) - { - i = FIRSTBITNZ(w); - w ^= bit[i]; - xseen2 |= xbit[i]; - } - - w = seen1; - while (w) - { - i = FIRSTBITNZ(w); - w ^= bit[i]; - h[i] = xseen2; - } - w = seen2; - while (w) - { - i = FIRSTBITNZ(w); - w ^= bit[i]; - h[i] = xseen1; - } - - restv &= ~(seen1 | seen2); - if (restv == 0) return; - i = FIRSTBITNZ(restv); - seen1 = bit[i]; - seen2 = 0; - } - else - i = FIRSTBITNZ(w); - - expanded |= bit[i]; - if (bit[i] & seen1) seen2 |= g[i]; - else seen1 |= g[i]; - } -} - -/**************************************************************************/ - -static void -makeb6graph(graph *g, xword *h, int n) -/* make x-format bipartite girth 6 graph */ -{ - setword w,x; - xword hi; - int i,j; - - makebgraph(g,h,n); - - for (i = 0; i < n; ++i) - { - w = g[i]; - x = 0; - while (w) - { - j = FIRSTBITNZ(w); - w ^= bit[j]; - x |= g[j]; - } - x &= ~bit[i]; - hi = h[i]; - while (x) - { - j = FIRSTBITNZ(x); - x ^= bit[j]; - hi |= xbit[j]; - } - h[i] = hi; - } -} - -/**************************************************************************/ - -static void -makesgraph(graph *g, xword *h, int n) -/* make x-format square graph */ -{ - setword w,x; - xword hi; - int i,j; - - for (i = 0; i < n; ++i) - { - w = g[i]; - x = 0; - while (w) - { - j = FIRSTBITNZ(w); - w ^= bit[j]; - x |= g[j]; - } - x &= ~bit[i]; - hi = 0; - while (x) - { - j = FIRSTBITNZ(x); - x ^= bit[j]; - hi |= xbit[j]; - } - h[i] = hi; - } -} - -/**************************************************************************/ - -static void -makeg5graph(graph *g, xword *h, int n) -/* make x-format girth-5 graph */ -{ - setword w,x; - xword hi; - int i,j; - - for (i = 0; i < n; ++i) - { - w = g[i]; - x = g[i]; - while (w) - { - j = FIRSTBITNZ(w); - w ^= bit[j]; - x |= g[j]; - } - x &= ~bit[i]; - hi = 0; - while (x) - { - j = FIRSTBITNZ(x); - x ^= bit[j]; - hi |= xbit[j]; - } - h[i] = hi; - } -} - -/**************************************************************************/ - -static void -makeleveldata(boolean restricted) -/* make the level data for each level */ -{ - long h; - int n,nn; - long ncj; - leveldata *d; - xword *xcard,*xinv; - xword *xset,xw,tttn,nxsets; - xword cw; - xword i,j; - - for (n = 1; n < maxn; ++n) - { - nn = maxdeg <= n ? maxdeg : n; - ncj = nxsets = 1; - for (j = 1; j <= nn; ++j) - { - ncj = (ncj * (n - j + 1)) / j; - nxsets += ncj; - } - tttn = 1L << n; - - d = &data[n]; - - d->ne = d->dmax = d->xlb = d->xub = -1; - - if (restricted) - { - d->xorb = (xword*) calloc(nxsets,sizeof(xword)); - d->xx = (xword*) calloc(nxsets,sizeof(xword)); - if (d->xorb == NULL || d->xx == NULL) - { - fprintf(stderr, - ">E geng: calloc failed in makeleveldata()\n"); - exit(2); - } - continue; /* <--- NOTE THIS! */ - } - - d->xset = xset = (xword*) calloc(nxsets,sizeof(xword)); - d->xcard = xcard = (xword*) calloc(nxsets,sizeof(xword)); - d->xinv = xinv = (xword*) calloc(tttn,sizeof(xword)); - d->xorb = (xword*) calloc(nxsets,sizeof(xword)); - d->xx = d->xcard; - - if (xset==NULL || xcard==NULL || xinv==NULL || d->xorb==NULL) - { - fprintf(stderr,">E geng: calloc failed in makeleveldata()\n"); - exit(2); - } - - j = 0; - - for (i = 0;; ++i) - { - if ((h = XPOPCOUNT(i)) <= maxdeg) - { - xset[j] = i; - xcard[j] = h; - ++j; - } - if (i == (xword)((1L<E geng: j=%u mxsets=%u\n", - j,(unsigned)nxsets); - exit(2); - } - - h = 1; - do - h = 3 * h + 1; - while (h < nxsets); - - do - { - for (i = h; i < nxsets; ++i) - { - xw = xset[i]; - cw = xcard[i]; - for (j = i; xcard[j-h] > cw || - (xcard[j-h] == cw && xset[j-h] > xw); ) - { - xset[j] = xset[j-h]; - xcard[j] = xcard[j-h]; - if ((j -= h) < h) break; - } - xset[j] = xw; - xcard[j] = cw; - } - h /= 3; - } - while (h > 0); - - for (i = 0; i < nxsets; ++i) xinv[xset[i]] = i; - - d->xstart[0] = 0; - for (i = 1; i < nxsets; ++i) - if (xcard[i] > xcard[i-1]) d->xstart[xcard[i]] = i; - d->xstart[xcard[nxsets-1]+1] = nxsets; - } -} - -/**************************************************************************/ - -static void -userautomproc(int count, int *p, int *orbits, - int numorbits, int stabvertex, int n) -/* form orbits on powerset of VG - called by nauty; operates on data[n] */ -{ - xword i,j1,j2,moved,pi,pxi; - xword lo,hi; - xword *xorb,*xinv,*xset,w; - - xorb = data[n].xorb; - xset = data[n].xset; - xinv = data[n].xinv; - lo = data[n].lo; - hi = data[n].hi; - - if (count == 1) /* first automorphism */ - for (i = lo; i < hi; ++i) xorb[i] = i; - - moved = 0; - for (i = 0; i < n; ++i) - if (p[i] != i) moved |= xbit[i]; - - for (i = lo; i < hi; ++i) - { - if ((w = xset[i] & moved) == 0) continue; - pxi = xset[i] & ~moved; - while (w) - { - j1 = XNEXTBIT(w); - w ^= xbit[j1]; - pxi |= xbit[p[j1]]; - } - pi = xinv[pxi]; - - j1 = xorb[i]; - while (xorb[j1] != j1) j1 = xorb[j1]; - j2 = xorb[pi]; - while (xorb[j2] != j2) j2 = xorb[j2]; - - if (j1 < j2) xorb[j2] = xorb[i] = xorb[pi] = j1; - else if (j1 > j2) xorb[j1] = xorb[i] = xorb[pi] = j2; - } -} - -/**************************************************************************/ - -static void -userautomprocb(int count, int *p, int *orbits, - int numorbits, int stabvertex, int n) -/* form orbits on powerset of VG - called by nauty; operates on data[n] */ -{ - xword j1,j2,moved,pi,pxi,lo,hi,x; - xword i,*xorb,*xx,w,xlim,xlb; - - xorb = data[n].xorb; - xx = data[n].xx; - xlim = data[n].xlim; - - if (count == 1) /* first automorphism */ - { - j1 = 0; - xlb = data[n].xlb; - - for (i = 0; i < xlim; ++i) - { - x = xx[i]; - if (XPOPCOUNT(x) >= xlb) - { - xx[j1] = x; - xorb[j1] = j1; - ++j1; - } - } - data[n].xlim = xlim = j1; - } - - moved = 0; - for (i = 0; i < n; ++i) - if (p[i] != i) moved |= xbit[i]; - - for (i = 0; i < xlim; ++i) - { - if ((w = xx[i] & moved) == 0) continue; - pxi = xx[i] & ~moved; - while (w) - { - j1 = XNEXTBIT(w); - w ^= xbit[j1]; - pxi |= xbit[p[j1]]; - } - /* pi = position of pxi */ - - lo = 0; - hi = xlim - 1; - - for (;;) - { - pi = (lo + hi) >> 1; - if (xx[pi] == pxi) break; - else if (xx[pi] < pxi) lo = pi + 1; - else hi = pi - 1; - } - - j1 = xorb[i]; - while (xorb[j1] != j1) j1 = xorb[j1]; - j2 = xorb[pi]; - while (xorb[j2] != j2) j2 = xorb[j2]; - - if (j1 < j2) xorb[j2] = xorb[i] = xorb[pi] = j1; - else if (j1 > j2) xorb[j1] = xorb[i] = xorb[pi] = j2; - } -} - -/***************************************************************************** -* * -* refinex(g,lab,ptn,level,numcells,count,active,goodret,code,m,n) is a * -* custom version of refine() which can exit quickly if required. * -* * -* Only use at level==0. * -* goodret : whether to do an early return for code 1 * -* code := -1 for n-1 not max, 0 for maybe, 1 for definite * -* * -*****************************************************************************/ - -static void -refinex(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, boolean goodret, int *code, int m, int n) -{ - int i,c1,c2,labc1; - setword x,lact; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - set *gptr; - setword workset; - int workperm[MAXN]; - int bucket[MAXN+2]; - - if (n == 1) - { - *code = 1; - return; - } - - *code = 0; - lact = *active; - - while (*numcells < n && lact) - { - TAKEBIT(split1,lact); - - for (split2 = split1; ptn[split2] > 0; ++split2) {} - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],1); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT1(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = 0; - ++*numcells; - lact |= bit[c1]; - } - } - } - - else /* nontrivial splitting cell */ - { - workset = 0; - for (i = split1; i <= split2; ++i) workset |= bit[lab[i]]; - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - if ((x = workset & g[lab[i]]) != 0) cnt = POPCOUNT(x); - else cnt = 0; - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - if ((x = workset & g[lab[i]]) != 0) - cnt = POPCOUNT(x); - else - cnt = 0; - - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) continue; - c1 = cell1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - if (c1 != cell1) - { - lact |= bit[c1]; - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = 0; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) lab[i] = workperm[i]; - } - } - - if (ptn[n-2] == 0) - { - if (lab[n-1] == n-1) - { - *code = 1; - if (goodret) return; - } - else - { - *code = -1; - return; - } - } - else - { - i = n - 1; - while (TRUE) - { - if (lab[i] == n-1) break; - --i; - if (ptn[i] == 0) - { - *code = -1; - return; - } - } - } - } -} - -/**************************************************************************/ - -static void -makecanon(graph *g, graph *gcan, int n) -/* gcan := canonise(g) */ -{ - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - - options.getcanon = TRUE; - - nauty(g,lab,ptn,NULL,orbits,&options,&nauty_stats, - workspace,50,1,n,gcan); -} - -/**************************************************************************/ - -static boolean -accept1(graph *g, int n, xword x, graph *gx, int *deg, boolean *rigid) -/* decide if n in theta(g+x) - version for n+1 < maxn */ -{ - int i; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int count[MAXN]; - graph h[MAXN]; - xword xw; - int nx,numcells,code; - int i0,i1,degn; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - -#ifdef INSTRUMENT - ++a1calls; -#endif - - nx = n + 1; - for (i = 0; i < n; ++i) gx[i] = g[i]; - gx[n] = 0; - deg[n] = degn = XPOPCOUNT(x); - - xw = x; - while (xw) - { - i = XNEXTBIT(xw); - xw ^= xbit[i]; - gx[i] |= bit[n]; - gx[n] |= bit[i]; - ++deg[i]; - } - -#ifdef PREPRUNE - if (PREPRUNE(gx,n+1,maxn)) return FALSE; -#endif - - i0 = 0; - i1 = n; - for (i = 0; i < nx; ++i) - { - if (deg[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - ptn[n] = 0; - if (i0 == 0) - { - numcells = 1; - active[0] = bit[0]; - } - else - { - numcells = 2; - active[0] = bit[0] | bit[i1+1]; - ptn[i1] = 0; - } - refinex(gx,lab,ptn,0,&numcells,count,active,FALSE,&code,1,nx); - - if (code < 0) return FALSE; - - if (numcells == nx) - { - *rigid = TRUE; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - - options.getcanon = TRUE; - options.defaultptn = FALSE; - options.userautomproc = userautomproc; - - active[0] = 0; -#ifdef INSTRUMENT - ++a1nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,h); - - if (orbits[lab[n]] == orbits[n]) - { - *rigid = stats.numorbits == nx; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static boolean -accept1b(graph *g, int n, xword x, graph *gx, int *deg, boolean *rigid, - void (*makeh)(graph*,xword*,int)) -/* decide if n in theta(g+x) -- version for n+1 < maxn */ -{ - int i,v; - xword z,hv,bitv,ixx; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int count[MAXN]; - graph gc[MAXN]; - xword h[MAXN],xw,jxx,kxx,*xx; - int nx,numcells,code; - int i0,i1,degn,xubx; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - -#ifdef INSTRUMENT - ++a1calls; -#endif - - nx = n + 1; - for (i = 0; i < n; ++i) gx[i] = g[i]; - gx[n] = 0; - deg[n] = degn = XPOPCOUNT(x); - - xw = x; - while (xw) - { - i = XNEXTBIT(xw); - xw ^= xbit[i]; - gx[i] |= bit[n]; - gx[n] |= bit[i]; - ++deg[i]; - } - -#ifdef PREPRUNE - if (PREPRUNE(gx,n+1,maxn)) return FALSE; -#endif - - i0 = 0; - i1 = n; - for (i = 0; i < nx; ++i) - { - if (deg[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - ptn[n] = 0; - if (i0 == 0) - { - numcells = 1; - active[0] = bit[0]; - } - else - { - numcells = 2; - active[0] = bit[0] | bit[i1+1]; - ptn[i1] = 0; - } - refinex(gx,lab,ptn,0,&numcells,count,active,FALSE,&code,1,nx); - - if (code < 0) return FALSE; - - (*makeh)(gx,h,nx); - xx = data[nx].xx; - xubx = data[nx].xub; - - xx[0] = 0; - kxx = 1; - for (v = 0; v < nx; ++v) - { - bitv = xbit[v]; - hv = h[v]; - jxx = kxx; - for (ixx = 0; ixx < jxx; ++ixx) - if ((hv & xx[ixx]) == 0) - { - z = xx[ixx] | bitv; - if (XPOPCOUNT(z) <= xubx) xx[kxx++] = z; - } - } - data[nx].xlim = kxx; - - if (numcells == nx) - { - *rigid = TRUE; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - - options.getcanon = TRUE; - options.defaultptn = FALSE; - options.userautomproc = userautomprocb; - - active[0] = 0; -#ifdef INSTRUMENT - ++a1nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,gc); - - if (orbits[lab[n]] == orbits[n]) - { - *rigid = stats.numorbits == nx; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static boolean -accept2(graph *g, int n, xword x, graph *gx, int *deg, boolean nuniq) -/* decide if n in theta(g+x) -- version for n+1 == maxn */ -{ - int i; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int degx[MAXN],invar[MAXN]; - setword vmax,gv; - int qn,qv; - int count[MAXN]; - xword xw; - int nx,numcells,code; - int degn,i0,i1,j,j0,j1; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - boolean cheapacc; - -#ifdef INSTRUMENT - ++a2calls; - if (nuniq) ++a2uniq; -#endif - nx = n + 1; - for (i = 0; i < n; ++i) - { - gx[i] = g[i]; - degx[i] = deg[i]; - } - gx[n] = 0; - degx[n] = degn = XPOPCOUNT(x); - - xw = x; - while (xw) - { - i = XNEXTBIT(xw); - xw ^= xbit[i]; - gx[i] |= bit[n]; - gx[n] |= bit[i]; - ++degx[i]; - } - -#ifdef PREPRUNE - if (PREPRUNE(gx,n+1,maxn)) return FALSE; -#endif - - if (nuniq) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - - i0 = 0; - i1 = n; - for (i = 0; i < nx; ++i) - { - if (degx[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - ptn[n] = 0; - if (i0 == 0) - { - numcells = 1; - active[0] = bit[0]; - - if (!distinvar(gx,invar,nx)) return FALSE; - qn = invar[n]; - j0 = 0; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - qv = invar[j]; - if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > 0) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - else - { - numcells = 2; - ptn[i1] = 0; - active[0] = bit[0] | bit[i1+1]; - - vmax = 0; - for (i = i1+1; i < nx; ++i) vmax |= bit[lab[i]]; - - gv = gx[n] & vmax; - qn = POPCOUNT(gv); - - j0 = i1+1; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - gv = gx[j] & vmax; - qv = POPCOUNT(gv); - if (qv > qn) - return FALSE; - else if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > i1+1) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - - refinex(gx,lab,ptn,0,&numcells,count,active,TRUE,&code,1,nx); - - if (code < 0) return FALSE; - - cheapacc = FALSE; - if (code > 0 || numcells >= nx-4) - cheapacc = TRUE; - else if (numcells == nx-5) - { - for (j1 = nx-2; j1 >= 0 && ptn[j1] > 0; --j1) {} - if (nx - j1 != 5) cheapacc = TRUE; - } - else - { - j1 = nx; - j0 = 0; - for (i1 = 0; i1 < nx; ++i1) - { - --j1; - if (ptn[i1] > 0) - { - ++j0; - while (ptn[++i1] > 0) {} - } - } - if (j1 <= j0 + 1) cheapacc = TRUE; - } - - if (cheapacc) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - - options.getcanon = TRUE; - options.defaultptn = FALSE; - - active[0] = 0; -#ifdef INSTRUMENT - ++a2nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,gcan); - - if (orbits[lab[n]] == orbits[n]) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static void -xbnds(int n, int ne, int dmax) -/* find bounds on extension degree; store answer in data[*].* */ -{ - int xlb,xub,d,nn,m,xc; - - xlb = n == 1 ? 0 : (dmax > (2*ne + n - 2)/(n - 1) ? - dmax : (2*ne + n - 2)/(n - 1)); - xub = n < maxdeg ? n : maxdeg; - - for (xc = xub; xc >= xlb; --xc) - { - d = xc; - m = ne + d; - for (nn = n+1; nn < maxn; ++nn) - { - if (d < (2*m + nn - 2)/(nn - 1)) d = (2*m + nn - 2)/(nn - 1); - m += d; - } - if (d > maxdeg || m > maxe) xub = xc - 1; - else break; - } - - if (ne + xlb < mine) - for (xc = xlb; xc <= xub; ++xc) - { - m = ne + xc; - for (nn = n + 1; nn < maxn; ++nn) - m += maxdeg < nn ? maxdeg : nn; - if (m < mine) xlb = xc + 1; - else break; - } - - data[n].ne = ne; - data[n].dmax = dmax; - data[n].xlb = xlb; - data[n].xub = xub; -} - -/**************************************************************************/ - -static void -spaextend(graph *g, int n, int *deg, int ne, boolean rigid, - int xlb, int xub, void (*makeh)(graph*,xword*,int)) -/* extend from n to n+1 -- version for restricted graphs */ -{ - xword x,d,dlow; - xword xlim,*xorb; - int xc,nx,i,j,dmax,dcrit,xlbx,xubx; - graph gx[MAXN]; - xword *xx,ixx; - int degx[MAXN]; - boolean rigidx; - -#ifdef INSTRUMENT - boolean haschild; - - haschild = FALSE; - if (rigid) ++rigidnodes[n]; -#endif - ADDBIG(nodes[n],1); - - nx = n + 1; - dmax = deg[n-1]; - dcrit = mindeg - maxn + n; - d = dlow = 0; - for (i = 0; i < n; ++i) - { - if (deg[i] == dmax) d |= xbit[i]; - if (deg[i] == dcrit) dlow |= xbit[i]; - } - - if (xlb == dmax && XPOPCOUNT(d) + dmax > n) ++xlb; - if (nx == maxn && xlb < mindeg) xlb = mindeg; - if (xlb > xub) return; - -#ifdef PRUNE - if (PRUNE(g,n,maxn)) return; -#endif - - xorb = data[n].xorb; - xx = data[n].xx; - xlim = data[n].xlim; - - if (nx == maxn) - { - for (ixx = 0; ixx < xlim; ++ixx) - { - x = xx[ixx]; - xc = XPOPCOUNT(x); - if (xc < xlb || xc > xub) continue; - if ((rigid || xorb[ixx] == ixx) - && (xc > dmax || (xc == dmax && (x & d) == 0)) - && (dlow & ~x) == 0) - { - if (accept2(g,n,x,gx,deg, - xc > dmax+1 || (xc == dmax+1 && (x & d) == 0)) - && (!connec || - (connec==1 && isconnected(gx,nx)) || - (connec>1 && isbiconnected(gx,nx)))) - { -#ifdef PRUNE - if (!PRUNE(gx,nx,maxn)) -#endif - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - ADDBIG(ecount[ne+xc],1); - (*outproc)(outfile,canonise ? gcan : gx,nx); - } - } - } - } - } - else - { - for (ixx = 0; ixx < xlim; ++ixx) - { - if (nx == splitlevel) - { - if (odometer-- != 0) continue; - odometer = mod - 1; - } - x = xx[ixx]; - xc = XPOPCOUNT(x); - if (xc < xlb || xc > xub) continue; - if ((rigid || xorb[ixx] == ixx) - && (xc > dmax || (xc == dmax && (x & d) == 0)) - && (dlow & ~x) == 0) - { - for (j = 0; j < n; ++j) degx[j] = deg[j]; - if (data[nx].ne != ne+xc || data[nx].dmax != xc) - xbnds(nx,ne+xc,xc); - - xlbx = data[nx].xlb; - xubx = data[nx].xub; - if (xlbx <= xubx - && accept1b(g,n,x,gx,degx,&rigidx,makeh)) - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - spaextend(gx,nx,degx,ne+xc,rigidx,xlbx,xubx,makeh); - } - } - } - if (n == splitlevel - 1 && n >= min_splitlevel - && ISASBIG(nodes[n],multiplicity)) - --splitlevel; - } -#ifdef INSTRUMENT - if (haschild) ++fertilenodes[n]; -#endif -} - -/**************************************************************************/ - -static void -genextend(graph *g, int n, int *deg, int ne, boolean rigid, int xlb, int xub) -/* extend from n to n+1 -- version for general graphs */ -{ - xword x,d,dlow; - xword *xset,*xcard,*xorb; - xword i,imin,imax; - int nx,xc,j,dmax,dcrit; - int xlbx,xubx; - graph gx[MAXN]; - int degx[MAXN]; - boolean rigidx; - -#ifdef INSTRUMENT - boolean haschild; - - haschild = FALSE; - if (rigid) ++rigidnodes[n]; -#endif - ADDBIG(nodes[n],1); - - nx = n + 1; - dmax = deg[n-1]; - dcrit = mindeg - maxn + n; - d = dlow = 0; - for (i = 0; i < n; ++i) - { - if (deg[i] == dmax) d |= xbit[i]; - if (deg[i] == dcrit) dlow |= xbit[i]; - } - - if (xlb == dmax && XPOPCOUNT(d) + dmax > n) ++xlb; - if (nx == maxn && xlb < mindeg) xlb = mindeg; - if (xlb > xub) return; - -#ifdef PRUNE - if (PRUNE(g,n,maxn)) return; -#endif - - imin = data[n].xstart[xlb]; - imax = data[n].xstart[xub+1]; - xset = data[n].xset; - xcard = data[n].xcard; - xorb = data[n].xorb; - - if (nx == maxn) - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if (xc == dmax && (x & d) != 0) continue; - if ((dlow & ~x) != 0) continue; - - if (accept2(g,n,x,gx,deg, - xc > dmax+1 || (xc == dmax+1 && (x & d) == 0))) - if (!connec || (connec==1 && isconnected(gx,nx)) - || (connec>1 && isbiconnected(gx,nx))) - { -#ifdef PRUNE - if (!PRUNE(gx,nx,maxn)) -#endif - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - ADDBIG(ecount[ne+xc],1); - (*outproc)(outfile,canonise ? gcan : gx,nx); - } - } - } - else - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if (xc == dmax && (x & d) != 0) continue; - if ((dlow & ~x) != 0) continue; - if (nx == splitlevel) - { - if (odometer-- != 0) continue; - odometer = mod - 1; - } - - for (j = 0; j < n; ++j) degx[j] = deg[j]; - if (data[nx].ne != ne+xc || data[nx].dmax != xc) - xbnds(nx,ne+xc,xc); - xlbx = data[nx].xlb; - xubx = data[nx].xub; - if (xlbx > xubx) continue; - - data[nx].lo = data[nx].xstart[xlbx]; - data[nx].hi = data[nx].xstart[xubx+1]; - if (accept1(g,n,x,gx,degx,&rigidx)) - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - genextend(gx,nx,degx,ne+xc,rigidx,xlbx,xubx); - } - } - - if (n == splitlevel-1 && n >= min_splitlevel - && ISASBIG(nodes[n],multiplicity)) - --splitlevel; -#ifdef INSTRUMENT - if (haschild) ++fertilenodes[n]; -#endif -} - -/**************************************************************************/ -/**************************************************************************/ - -#ifdef GENG_MAIN -int -GENG_MAIN(int argc, char *argv[]) -#else -int -main(int argc, char *argv[]) -#endif -{ - char *arg; - boolean badargs,gote,gotmr,gotf,gotd,gotD,gotx,gotX; - boolean secret,connec1,connec2,safe,sparse; - char *outfilename,sw; - int i,j,argnum; - graph g[1]; - int tmaxe,deg[1]; - bigint nout; - int splitlevinc; - xword testxword; - double t1,t2; - char msg[201]; - - HELP; - nauty_check(WORDSIZE,1,MAXN,NAUTYVERSIONID); - - testxword = (xword)(-1); - if (MAXN > 32 || MAXN > WORDSIZE || MAXN > 8*sizeof(xword) - || (MAXN == 8*sizeof(xword) && testxword < 0)) - { - fprintf(stderr,"geng: incompatible MAXN, WORDSIZE, or xword\n"); - fprintf(stderr,"--See notes in program source\n"); - exit(1); - } - - badargs = FALSE; - trianglefree = FALSE; - bipartite = FALSE; - squarefree = FALSE; - verbose = FALSE; - nautyformat = FALSE; - yformat = FALSE; - graph6 = FALSE; - sparse6 = FALSE; - savemem = FALSE; - nooutput = FALSE; - canonise = FALSE; - header = FALSE; - outfilename = NULL; - secret = FALSE; - safe = FALSE; - connec1 = connec2 = FALSE; - - maxdeg = MAXN; - mindeg = 0; - - gotX = gotx = gotd = gotD = gote = gotmr = gotf = FALSE; - - argnum = 0; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('n',nautyformat) - else SWBOOLEAN('u',nooutput) - else SWBOOLEAN('g',graph6) - else SWBOOLEAN('s',sparse6) - else SWBOOLEAN('t',trianglefree) - else SWBOOLEAN('f',squarefree) - else SWBOOLEAN('b',bipartite) - else SWBOOLEAN('v',verbose) - else SWBOOLEAN('l',canonise) - else SWBOOLEAN('y',yformat) - else SWBOOLEAN('h',header) - else SWBOOLEAN('m',savemem) - else SWBOOLEAN('c',connec1) - else SWBOOLEAN('C',connec2) - else SWBOOLEAN('q',quiet) - else SWBOOLEAN('$',secret) - else SWBOOLEAN('S',safe) - else SWINT('d',gotd,mindeg,"geng -d") - else SWINT('D',gotD,maxdeg,"geng -D") - else SWINT('x',gotx,multiplicity,"geng -x") - else SWINT('X',gotX,splitlevinc,"geng -X") -#ifdef PLUGIN_SWITCHES -PLUGIN_SWITCHES -#endif - else badargs = TRUE; - } - } - else if (arg[0] == '-' && arg[1] == '\0') - gotf = TRUE; - else - { - if (argnum == 0) - { - if (sscanf(arg,"%d",&maxn) != 1) badargs = TRUE; - ++argnum; - } - else if (gotf) - badargs = TRUE; - else - { - if (!gotmr) - { - if (sscanf(arg,"%d/%d",&res,&mod) == 2) - { - gotmr = TRUE; - continue; - } - } - if (!gote) - { - if (sscanf(arg,"%d:%d",&mine,&maxe) == 2 - || sscanf(arg,"%d-%d",&mine,&maxe) == 2) - { - gote = TRUE; - if (maxe == 0 && mine > 0) maxe = MAXN*(MAXN-1)/2; - continue; - } - else if (sscanf(arg,"%d",&mine) == 1) - { - gote = TRUE; - maxe = mine; - continue; - } - } - if (!gotf) - { - outfilename = arg; - gotf = TRUE; - continue; - } - } - } - } - - if (argnum == 0) - badargs = TRUE; - else if (maxn < 1 || maxn > MAXN) - { - fprintf(stderr,">E geng: n must be in the range 1..%d\n",MAXN); - badargs = TRUE; - } - - if (!gotmr) - { - mod = 1; - res = 0; - } - - if (!gote) - { - mine = 0; - maxe = (maxn*maxn - maxn) / 2; - } - - if (connec1 && mindeg < 1 && maxn > 1) mindeg = 1; - if (connec2 && mindeg < 2 && maxn > 2) mindeg = 2; - if (maxdeg >= maxn) maxdeg = maxn - 1; - if (maxe > maxn*maxdeg / 2) maxe = maxn*maxdeg / 2; - if (maxdeg > maxe) maxdeg = maxe; - if (mindeg < 0) mindeg = 0; - if (mine < (maxn*mindeg+1) / 2) mine = (maxn*mindeg+1) / 2; - - if (!badargs && (mine > maxe || maxe < 0 || maxdeg < 0)) - { - fprintf(stderr, - ">E geng: impossible mine,maxe,mindeg,maxdeg values\n"); - badargs = TRUE; - } - - if (!badargs && (res < 0 || res >= mod)) - { - fprintf(stderr,">E geng: must have 0 <= res < mod\n"); - badargs = TRUE; - } - - if (connec2) connec = 2; - else if (connec1) connec = 1; - else connec = 0; - - if (connec && mine < maxn-1) mine = maxn - 2 + connec; - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if ((nautyformat!=0) + (yformat!=0) + (graph6!=0) - + (sparse6!=0) + (nooutput!=0) > 1) - gt_abort(">E geng: -uyngs are incompatible\n"); - -#ifdef OUTPROC - outproc = OUTPROC; -#else - if (nautyformat) outproc = writenauty; - else if (yformat) outproc = writeny; - else if (nooutput) outproc = nullwrite; - else if (sparse6) outproc = writes6x; - else outproc = writeg6x; -#endif - -#ifdef PLUGIN_INIT -PLUGIN_INIT -#endif - - for (i = 0; i <= maxe; ++i) ZEROBIG(ecount[i]); - for (i = 0; i < maxn; ++i) ZEROBIG(nodes[i]); - - if (nooutput) - outfile = stdout; - else if (!gotf || outfilename == NULL) - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename, - nautyformat ? "wb" : "w")) == NULL) - { - fprintf(stderr, - ">E geng: can't open %s for writing\n",outfilename); - gt_abort(NULL); - } - - if (bipartite) - if (squarefree) tmaxe = maxebf[maxn]; - else tmaxe = maxeb[maxn]; - else if (trianglefree) - if (squarefree) tmaxe = maxeft[maxn]; - else tmaxe = maxet[maxn]; - else if (squarefree) tmaxe = maxef[maxn]; - else tmaxe = (maxn*maxn - maxn) / 2; - - if (safe) ++tmaxe; - - if (maxe > tmaxe) maxe = tmaxe; - - if (gotx) - { - if (multiplicity < 3 * mod || multiplicity > 999999999) - gt_abort(">E geng: -x value must be in [3*mod,10^9-1]\n"); - } - else - multiplicity = PRUNEMULT * mod; - - if (!gotX) splitlevinc = 0; - -/* - if (!quiet) - { - fprintf(stderr,">A %s -%s%s%s%s%s%s",argv[0], - connec2 ? "C" : connec1 ? "c" : "", - trianglefree ? "t" : "", - squarefree ? "f" : "", - bipartite ? "b" : "", - canonise ? "l" : "", - savemem ? "m" : ""); - if (mod > 1) fprintf(stderr,"X%dx%d",splitlevinc,multiplicity); - fprintf(stderr,"d%dD%d n=%d e=%d",mindeg,maxdeg,maxn,mine); - if (maxe > mine) fprintf(stderr,"-%d",maxe); - if (mod > 1) fprintf(stderr," class=%d/%d",res,mod); - fprintf(stderr,"\n"); - fflush(stderr); - } -*/ - - if (!quiet) - { - msg[0] = '\0'; - if (strlen(argv[0]) > 75) - fprintf(stderr,">A %s",argv[0]); - else - CATMSG1(">A %s",argv[0]); - - CATMSG6(" -%s%s%s%s%s%s", - connec2 ? "C" : connec1 ? "c" : "", - trianglefree ? "t" : "", - squarefree ? "f" : "", - bipartite ? "b" : "", - canonise ? "l" : "", - savemem ? "m" : ""); - if (mod > 1) - CATMSG2("X%dx%d",splitlevinc,multiplicity); - CATMSG4("d%dD%d n=%d e=%d",mindeg,maxdeg,maxn,mine); - if (maxe > mine) CATMSG1("-%d",maxe); - if (mod > 1) CATMSG2(" class=%d/%d",res,mod); - CATMSG0("\n"); - fputs(msg,stderr); - fflush(stderr); - } - - g[0] = 0; - deg[0] = 0; - - sparse = bipartite || squarefree || trianglefree || savemem; - - t1 = CPUTIME; - - if (header) - { - if (sparse6) - { - writeline(outfile,SPARSE6_HEADER); - fflush(outfile); - } - else if (!yformat && !nautyformat && !nooutput) - { - writeline(outfile,GRAPH6_HEADER); - fflush(outfile); - } - } - - if (maxn == 1) - { - if (res == 0) - { - ADDBIG(ecount[0],1); - (*outproc)(outfile,g,1); - } - } - else - { - if (maxn > 28 || maxn+4 > 8*sizeof(xword)) - savemem = sparse = TRUE; - if (maxn == maxe+1 && connec) - bipartite = squarefree = sparse = TRUE; /* trees */ - - makeleveldata(sparse); - - if (maxn >= 14 && mod > 1) splitlevel = maxn - 4; - else if (maxn >= 6 && mod > 1) splitlevel = maxn - 3; - else splitlevel = -1; - - if (splitlevel > 0) splitlevel += splitlevinc; - if (splitlevel > maxn - 1) splitlevel = maxn - 1; - if (splitlevel < 3) splitlevel = -1; - - min_splitlevel = 6; - odometer = secret ? -1 : res; - - if (maxe >= mine && - (mod <= 1 || (mod > 1 && (splitlevel > 2 || res == 0)))) - { - xbnds(1,0,0); - if (sparse) - { - data[1].xx[0] = 0; - if (maxdeg > 0) data[1].xx[1] = xbit[0]; - data[1].xlim = data[1].xub + 1; - } - - if (bipartite) - if (squarefree) - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,makeb6graph); - else - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,makebgraph); - else if (trianglefree) - if (squarefree) - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,makeg5graph); - else - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,makexgraph); - else if (squarefree) - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,makesgraph); - else if (savemem) - spaextend(g,1,deg,0,TRUE, - data[1].xlb,data[1].xub,make0graph); - else - genextend(g,1,deg,0,TRUE,data[1].xlb,data[1].xub); - } - } - t2 = CPUTIME; - - ZEROBIG(nout); - for (i = 0; i <= maxe; ++i) SUMBIGS(nout,ecount[i]); - - if (verbose) - { - for (i = 0; i <= maxe; ++i) - if (!ISZEROBIG(ecount[i])) - { - fprintf(stderr,">C "); - PRINTBIG(stderr,ecount[i]); - fprintf(stderr," graphs with %d edges\n",i); - } - } - -#ifdef INSTRUMENT - fprintf(stderr,"\n>N node counts\n"); - for (i = 1; i < maxn; ++i) - { - fprintf(stderr," level %2d: \n",i); - PRINTBIG(stderr,nodes[i]); - fprintf(stderr," (%lu rigid, %lu fertile)\n", - rigidnodes[i],fertilenodes[i]); - } - fprintf(stderr,">A1 %lu calls to accept1, %lu nauty, %lu succeeded\n", - a1calls,a1nauty,a1succs); - fprintf(stderr, - ">A2 %lu calls to accept2, %lu nuniq, %lu nauty, %lu succeeded\n", - a2calls,a2uniq,a2nauty,a2succs); - fprintf(stderr,"\n"); -#endif - -#ifdef SUMMARY - SUMMARY(nout,t2-t1); -#endif - - if (!quiet) - { - fprintf(stderr,">Z "); - PRINTBIG(stderr,nout); - fprintf(stderr," graphs generated in %3.2f sec\n",t2-t1); - } - -#ifdef GENG_MAIN - for (i = 1; i < maxn; ++i) - if (sparse) - { - free(data[i].xorb); - free(data[i].xx); - } - else - { - free(data[i].xorb); - free(data[i].xset); - free(data[i].xinv); - free(data[i].xcard); - } - return 0; -#else - exit(0); -#endif -} diff --git a/tools/nauty25r9_unix/genrang b/tools/nauty25r9_unix/genrang deleted file mode 100644 index 786d51fcad48862cc7a791fac91058b9ebdbe990..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174070 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 0; ) - if (!ISELEMENT(gpi,perm[j])) - { - ii = perm[i]; - jj = perm[j]; - while (ii != i || jj != j) - { - ADDELEMENT(g+m*1L*ii,jj); - ii = perm[ii]; - jj = perm[jj]; - } - } - } -} - -/**************************************************************************/ - -static void -ranedges(long e, graph *g, int m, int n) -/* Random graph with n vertices and e edges */ -{ - unsigned long ln,li,nc2,ned,sofar; - set *gi,*gj; - int i,j; - - ln = n; - nc2 = (ln&1) ? ln*((ln-1)/2) : (ln/2)*(ln-1); - - if (e + e > nc2) ned = nc2 - e; - else ned = e; - sofar = 0; - - for (li = m*ln; --li != 0;) g[li] = 0; - g[0] = 0; - - while (sofar < ned) - { - i = KRAN(n); - do { j = KRAN(n); } while (i == j); - gi = GRAPHROW(g,i,m); - if (!ISELEMENT(gi,j)) - { - ADDELEMENT(gi,j); - gj = GRAPHROW(g,j,m); - ADDELEMENT(gj,i); - ++sofar; - } - } - - if (ned != e) complement(g,m,n); -} - -/**************************************************************************/ - -static void -makeranreg(int *cub, int degree, int multmax, int loopmax, int n) -/* Make a random regular graph in cub[]. Each consecutive degree - entries of cub[] is set to the neighbours of one vertex. - The length of cub had better be at least degree*n */ -{ - long i,j,k,v,w,nn,mult; - boolean ok; -#if MAXN - int deg[MAXN],p[MAXLREG*MAXN]; -#else - DYNALLSTAT(int,deg,deg_sz); - DYNALLSTAT(int,p,p_sz); - DYNALLSTAT(int,loops,loops_sz); - - DYNALLOC1(int,deg,deg_sz,n,"genrang"); - DYNALLOC2(int,p,p_sz,degree,n,"genrang"); - DYNALLOC1(int,loops,loops_sz,n,"genrang"); -#endif - - nn = n; - - for (i = j = 0; i < nn; ++i) - for (k = 0; k < degree; ++k) - p[j++] = i; - - do - { - ok = TRUE; - - for (j = degree*nn-1; j >= 1; j -= 2) - { - i = KRAN(j); - k = p[j-1]; - p[j-1] = p[i]; - p[i] = k; - } - for (i = 0; i < nn; ++i) deg[i] = loops[i] = 0; - - for (j = degree*nn-1; j >= 1;) - { - v = p[j--]; - w = p[j--]; - if (v == w && ++loops[v] > loopmax) - { - ok = FALSE; - break; - } - if (v != w && multmax < degree) - { - mult = 0; - for (i = deg[w]; --i >= 0;) - if (cub[degree*w+i] == v && ++mult >= multmax) break; - if (i >= 0) - { - ok = FALSE; - break; - } - } - cub[degree*w+deg[w]++] = v; - cub[degree*v+deg[v]++] = w; - } - } - while (!ok); -} - -/**************************************************************************/ - -static void -ranregR(FILE *f, int degree, int multmax, int loopmax, int n) -/* Make a random regular graph of order n and degree d and write - it in f, as number of vertices, number of edges, list of edges */ -{ - long i,j,k,l; - int loops; -#if MAXN - int cub[MAXLREG*MAXN]; -#else - DYNALLSTAT(int,cub,cub_sz); - DYNALLOC2(int,cub,cub_sz,degree,n,"genrang"); -#endif - - makeranreg(cub,degree,multmax,loopmax,n); - - fprintf(f,"%d %ld\n",n,n*(long)degree/2); - l = j = 0; - for (i = 0; i < n; ++i) - { - loops = 0; - for (k = 0; k < degree; ++k, ++j) - if (i < cub[j] || (i == cub[j] && (++loops & 1) == 0)) - { - if (l > 0 && l % 5 == 0) fprintf(f,"\n"); - fprintf(f," %ld %d",i,cub[j]); - ++l; - } - } - fprintf(f,"\n"); - if (ferror(f)) gt_abort(">E genrang output error\n"); -} - -/**************************************************************************/ - -static void -ranreg(int degree, graph *g, int m, int n) -/* Make a random simple regular graph of order n and degree d and return - it in g. */ -{ - int i,j,k; - set *gi; -#if MAXN - int cub[MAXLREG*MAXN]; -#else - DYNALLSTAT(int,cub,cub_sz); - DYNALLOC1(int,cub,cub_sz,degree*n,"genrang"); -#endif - - makeranreg(cub,degree,1,0,n); - - j = 0; - for (i = 0, gi = (set*)g; i < n; ++i, gi += m) - { - EMPTYSET(gi,m); - for (k = 0; k < degree; ++k) - { - ADDELEMENT(gi,cub[j]); - j++; - } - } -} - -/**************************************************************************/ - -static void -ranreglm_sg(int degree, sparsegraph *sg, int multmax, int loopmax, int n) -/* Make a sparse random regular graph of order n and degree d - * and return it in sg. */ -{ - int i,j,k,k0,deg,loops,nde; -#if MAXN - int cub[MAXLREG*MAXN]; -#else - DYNALLSTAT(int,cub,cub_sz); - DYNALLOC1(int,cub,cub_sz,degree*n,"genrang"); -#endif - - makeranreg(cub,degree,multmax,loopmax,n); - - SG_ALLOC(*sg,n,degree*n,"genrang"); - - sg->nv = n; - j = nde = 0; - for (i = 0; i < n; ++i) - { - sg->v[i] = k0 = i*degree; - loops = deg = 0; - for (k = 0; k < degree; ++k, ++j) - { - if (cub[j] == i) - { - /* Loops are in cub twice but sg once */ - ++loops; - if ((loops&1)) sg->e[k0+deg++] = i; - } - else - sg->e[k0+deg++] = cub[j]; - } - sg->d[i] = deg; - nde += deg; - } - sg->nde = nde; -} - -/**************************************************************************/ - -static void -randomtree(sparsegraph *sg, int n) -/* Make a random tree with n vertices */ -{ - int i,v0,v1,ne,k; -#if MAXN - int ed[2*MAXN]; -#else - DYNALLSTAT(int,ed,ed_sz); - DYNALLOC1(int,ed,ed_sz,2*n,"randomtree"); -#endif - - SG_ALLOC(*sg,n,2*(n-1),"randomtree"); - sg->nv = n; - sg->nde = 2*(n-1); - sg->w = NULL; - - for (i = 0; i < n; ++i) sg->d[i] = 0; - - v0 = KRAN(n); - ne = k = 0; - while (ne < n-1) - { - do { v1 = KRAN(n); } while (v1 == v0); - if (sg->d[v1] == 0) - { - ed[k++] = v0; - ed[k++] = v1; - ++ne; - ++sg->d[v0]; - ++sg->d[v1]; - } - v0 = v1; - } - - sg->v[0] = 0; - for (i = 1; i < n; ++i) sg->v[i] = sg->v[i-1] + sg->d[i-1]; - - for (i = 0; i < n; ++i) sg->d[i] = 0; - - for (k = 0; k < 2*(n-1); ) - { - v0 = ed[k++]; - v1 = ed[k++]; - sg->e[sg->v[v0]+(sg->d[v0])++] = v1; - sg->e[sg->v[v1]+(sg->d[v1])++] = v0; - } -} - -/**************************************************************************/ -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - int m,n,codetype; - int argnum,j; - char *arg,sw; - boolean badargs; - boolean gswitch,sswitch,qswitch,Sswitch,Rswitch,lswitch,tswitch; - boolean aswitch,P1switch,P2switch,eswitch,rswitch,mswitch; - long numgraphs,nout,P1value,P2value,evalue,rvalue; - nauty_counter ln,nc2; - int Svalue,loopmax,multmax; - static FILE *outfile; - char *outfilename; - sparsegraph sg; - boolean usesparse; - -#if MAXN - graph g[MAXM*1L*MAXN]; - int perm[MAXN]; -#else - DYNALLSTAT(graph,g,g_sz); - DYNALLSTAT(int,perm,perm_sz); -#endif - - HELP; - - gswitch = sswitch = qswitch = Sswitch = Rswitch = FALSE; - aswitch = P1switch = P2switch = eswitch = rswitch = FALSE; - tswitch = lswitch = mswitch = FALSE; - outfilename = NULL; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('g',gswitch) - else SWBOOLEAN('s',sswitch) - else SWBOOLEAN('a',aswitch) - else SWBOOLEAN('t',tswitch) - else SWBOOLEAN('q',qswitch) - else SWLONG('P',P1switch,P1value,"genrang -P") - else SWLONG('/',P2switch,P2value,"genrang -P") - else SWLONG('e',eswitch,evalue,"genrang -e") - else SWLONG('r',rswitch,rvalue,"genrang -r") - else SWLONG('R',Rswitch,rvalue,"genrang -R") - else SWINT('S',Sswitch,Svalue,"genrang -S") - else SWINT('l',lswitch,loopmax,"genrang -l") - else SWINT('m',mswitch,multmax,"genrang -m") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) - { - if (sscanf(arg,"%d",&n) != 1 || n < 1) badargs = TRUE; - } - else if (argnum == 2) - { - if (sscanf(arg,"%ld",&numgraphs) != 1 || numgraphs < 1) - badargs = TRUE; - } - else if (argnum == 3) outfilename = arg; - else badargs = TRUE; - } - } - - if ((gswitch!=0) + (sswitch!=0) > 1) - gt_abort(">E genrang: -gs are incompatible\n"); - - if (gswitch) codetype = GRAPH6; - else codetype = SPARSE6; - - if (P1switch && !P2switch) - { - P2value = P1value; - P1value = 1; - } - else if (P2switch && !P1switch) - { - P1value = 1; - P1switch = TRUE; - } - - if (P1switch && (P1value < 0 || P2value <= 0 || P1value > P2value)) - gt_abort(">E genrang: bad value for -P switch\n"); - - if ((P1switch!=0) + (eswitch!=0) + (rswitch!=0) - + (Rswitch!=0) + (tswitch!=0) > 1) - gt_abort(">E genrang: -Pert are incompatible\n"); - - if ((sswitch!=0) + (gswitch!=0) + (Rswitch!=0) > 1) /* REVISE */ - gt_abort(">E genrang: -sgR are incompatible\n"); - - if ((aswitch!=0) + (Rswitch!=0) > 1) - gt_abort(">E genrang: -aR are incompatible\n"); - - if (!lswitch) loopmax = 0; - if (!mswitch) multmax = 1; - - if ((loopmax>0 || multmax>1) && !(Rswitch || (rswitch && !gswitch))) - gt_abort(">E genrang: -l,-m need -R or -r without -g\n"); - - if (multmax < 1 || loopmax < 0) - gt_abort(">E genrang: bad value for -l or -m\n"); - - if (argnum < 2 || argnum > 3) badargs = TRUE; - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if (!Sswitch) - { -#ifdef INITSEED - INITSEED; - ran_init(seed); -#endif - } - else - ran_init(Svalue); - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - m = (n + WORDSIZE + 1) / WORDSIZE; - usesparse = tswitch || (rswitch && !aswitch && codetype==SPARSE6); -#if !MAXN - if (!Rswitch && !usesparse) - { - DYNALLOC2(graph,g,g_sz,n,m,"genrang"); - if (aswitch) DYNALLOC1(int,perm,perm_sz,n,"genrang"); - } -#endif - - rswitch = rswitch || Rswitch; - - if (rswitch && rvalue > MAXLREG) - { - fprintf(stderr, - ">E -r/-R is only implemented for degree <= %d\n",MAXLREG); - exit(1); - } - - ln = n; - nc2 = ln*loopmax + ln*(ln-1)/2*multmax; - - if (eswitch && evalue > nc2) - { - fprintf(stderr, - ">E There are no graphs of order %d and %ld edges\n", - n,evalue); - exit(1); - } - - if (rswitch && (((n&1) != 0 && (rvalue&1) != 0) - || rvalue > (n-1)*multmax+2*loopmax)) - { - fprintf(stderr, - ">E There are no such graphs of order %d and degree %ld\n", - n,rvalue); - exit(1); - } - - if (!P1switch) - { - P1value = 1; - P2value = 2; - } - - SG_INIT(sg); - - for (nout = 1; nout <= numgraphs; ++nout) - { - if (eswitch) ranedges(evalue,g,m,n); - else if (Rswitch) ranregR(outfile,rvalue,multmax,loopmax,n); - else if (rswitch && usesparse) - ranreglm_sg(rvalue,&sg,multmax,loopmax,n); - else if (rswitch && !usesparse) ranreg(rvalue,g,m,n); - else if (tswitch) randomtree(&sg,n); - else rangraph2(g,FALSE,P1value,P2value,m,n); - - if (Rswitch) continue; - - if (aswitch && !usesparse) - { - ranperm(perm,n); - perminvar(g,perm,m,n); - } - if (codetype == SPARSE6) - { - if (usesparse) - { - sortlists_sg(&sg); - writes6_sg(outfile,&sg); - } - else - writes6(outfile,g,m,n); - } - else - { - if (usesparse) - writeg6_sg(outfile,&sg); - else - writeg6(outfile,g,m,n); - } - } - - exit(0); -} diff --git a/tools/nauty25r9_unix/gentourng b/tools/nauty25r9_unix/gentourng deleted file mode 100644 index 944bb3594c51cfafef7b2650190e7d3628770b73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105110 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�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 B : specify an upper bound for the maximum out-degree. - The value of the upper bound must be adjacent to - the "d". Example: -d6 - -l : canonically label output graphs - - -u : do not output any graphs, just generate and count them - -g : use graph6 output - -s : use sparse6 output - For -g and -s, the lower triangle of the adjacency matrix - is written as if it is an undirected graph. Nauty tools - like labelg do not know this format. To read it you can - read it as an undirected graph then complement the upper - triangle. - -h : for graph6 or sparse6 format, write a header too - - -q : suppress auxiliary output (except from -v) - -Output formats. - - The output format is determined by the mutually exclusive switches - -u, -g and -s. The default is ascii format. - - -u suppresses output of graphs completely. - - -s and -g specify sparse6 and graph6 format, defined elsewhere. - In this case a header is also written if -h is present. - -OUTPROC feature. - - By defining the C preprocessor variable OUTPROC at compile time - (for Unix the syntax is -DOUTPROC=procname on the cc command), - gentourng can be made to call a procedure of your manufacture with each - output graph instead of writing anything. Your procedure needs - to have type void and the argument list (FILE *f, graph *g, int n). - f is a stream open for writing, g is the graph in nauty format, - and n is the number of vertices. Your procedure can be in a - separate file so long as it is linked with gentourng. The global - variables nooutput, and canonise (all type boolean) can be - used to test for the presence of the flags -u and -l, - respectively. If -l is present, the group size and similar - details can be found in the global variable nauty_stats. - -PRUNE feature. - - By defining the C preprocessor variable PRUNE at compile time, gentourng - can be made to call - int PRUNE(graph *g,int n,int maxn) - for each intermediate (and final) graph, and reject it if - the value returned is nonzero. The arguments are: - - g = the graph in nauty format (m=1) - n = the number of vertices in g - maxn = the number of vertices for output - (the value you gave on the command line to gentourng) - - gentourng constructs the graph starting with vertex 0, then adding - vertices 1,2,3,... in that order. Each graph in the sequence is - an induced subgraph of all later graphs in the sequence. - - A call is made for all orders from 1 to maxn. In testing for - a uniform property (such as a forbidden subgraph or forbidden - induced subgraph) it might save time to notice that a call to - PRUNE for n implies that the call for n-1 already passed. - - For very fast tests, it might be worthwhile using PREPRUNE as - well or instead. It has the same meaning but is applied earlier - and more often. - -SUMMARY - - If the C preprocessor variable SUMMARY is defined at compile time, the - procedure SUMMARY(bigint nout, double cpu) is called just before - the program exits. The purpose is to allow reporting of statistics - collected by PRUNE or OUTPROC. The values nout and cpu are the output - count and cpu time reported on the >Z line. - Output should be written to stderr. - -INSTRUMENT feature. - - If the C preprocessor variable INSTRUMENT is defined at compile time, - extra code is inserted to collect statistics during execution, and - more information is written to stderr at termination. - -CALLING FROM A PROGRAM - - It is possible to call gentourng from another program instead of using it - as a stand-alone program. The main requirement is to change the name - of the main program to be other than "main". This is done by defining - the preprocessor variable GENG_MAIN. You might also like to define - OUTPROC to be the name of a procedure to receive the graphs. To call - the program you need to define an argument list argv[] consistent with - the usual one; don't forget that argv[0] is the command name and not - the first argument. The value of argc is the number of strings in - argv[]; that is, one more than the number of arguments. See the - sample program callgeng.c. - - -Counts: - - all strong regular - n tournaments tournaments tournaments - - 1 1 1 1 - 2 1 0 1 - 3 2 1 1 - 4 4 1 1 - 5 12 6 1 - 6 56 35 5 - 7 456 353 3 - 8 6880 6008 85 - 9 191536 178133 15 - 10 9733056 9355949 13333 - 11 903753248 884464590 1223 - 12 154108311168 152310149735 19434757 - 13 48542114686912 48234782263293 1495297 - 14 28401423719122304 28304491788158056 - 15 31021002160355166848 30964247546702883729 18400989629 - -************************************************************************** - - Author: B. D. McKay, Nov 2008. - Copyright B. McKay (2008). All rights reserved. - This software is subject to the conditions and waivers - detailed in the file nauty.h. - -**************************************************************************/ - -#define NAUTY_PGM 3 /* 1 = geng, 2 = genbg, 3 = gentourng */ - -#ifndef MAXN -#define MAXN 32 /* not more than max(32,WORDSIZE) */ -#endif - -#if MAXN > 32 - #error "Can't have MAXN greater than 32" -#endif - -#define ONE_WORD_SETS -#include "gtools.h" /* which includes nauty.h and stdio.h */ - -typedef unsigned int xword; - -static void (*outproc)(FILE*,graph*,int); - -static FILE *outfile; /* file for output graphs */ -static int connec; /* 1 for -c, 0 for not */ -boolean graph6; /* presence of -g */ -boolean sparse6; /* presence of -s */ -boolean nooutput; /* presence of -u */ -boolean canonise; /* presence of -l */ -boolean quiet; /* presence of -q */ -boolean header; /* presence of -h */ -statsblk nauty_stats; -static int mindeg,maxdeg,maxn,mod,res; -static boolean regular; -#define PRUNEMULT 20 /* bigger -> more even split at greater cost */ -static int min_splitlevel,odometer,splitlevel,multiplicity; -static graph gcan[MAXN]; - -#if MAXN <= 16 -static xword xbit[] = {0x0001,0x0002,0x0004,0x0008, - 0x0010,0x0020,0x0040,0x0080, - 0x0100,0x0200,0x0400,0x0800, - 0x1000,0x2000,0x4000,0x8000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : 15-leftbit[((x)>>8)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] + bytecount[(x)&0xFF]) -#elif MAXN <= 24 -static xword xbit[] = {0x000001,0x000002,0x000004,0x000008, - 0x000010,0x000020,0x000040,0x000080, - 0x000100,0x000200,0x000400,0x000800, - 0x001000,0x002000,0x004000,0x008000, - 0x010000,0x020000,0x040000,0x080000, - 0x100000,0x200000,0x400000,0x800000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : 23-leftbit[((x)>>16)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + bytecount[(x)&0xFF]) -#else -static xword xbit[] = {0x00000001,0x00000002,0x00000004,0x00000008, - 0x00000010,0x00000020,0x00000040,0x00000080, - 0x00000100,0x00000200,0x00000400,0x00000800, - 0x00001000,0x00002000,0x00004000,0x00008000, - 0x00010000,0x00020000,0x00040000,0x00080000, - 0x00100000,0x00200000,0x00400000,0x00800000, - 0x01000000,0x02000000,0x04000000,0x08000000, - 0x10000000,0x20000000,0x40000000,0x80000000}; - -#define XNEXTBIT(x) \ - ((x)&0xFF ? 7-leftbit[(x)&0xFF] : \ - (x)&0xFF00 ? 15-leftbit[((x)>>8)&0xFF] : \ - (x)&0xFF0000 ? 23-leftbit[((x)>>16)&0xFF] : \ - 31-leftbit[((x)>>24)&0xFF]) -#define XPOPCOUNT(x) (bytecount[((x)>>8)&0xFF] \ - + bytecount[((x)>>16)&0xFF] + \ - + bytecount[((x)>>24)&0xFF] + bytecount[(x)&0xFF]) -#endif - -typedef struct -{ - xword lo,hi; /* work purposes for orbit calculation */ - xword xstart[MAXN+1]; /* index into xset[] for each cardinality */ - xword *xset; /* array of all x-sets in card order */ - xword *xcard; /* cardinalities of all x-sets */ - xword *xinv; /* map from x-set to index in xset */ - xword *xorb; /* min orbit representative */ -} leveldata; - - -/* The program is so fast that the count of output graphs can quickly - overflow a 32-bit integer. Therefore, we use two long values - for each count, with a ratio of 10^9 between them. The macro - ADDBIG adds a small number to one of these big numbers. - BIGTODOUBLE converts a big number to a double (approximately). - SUMBIGS adds a second big number into a first big number. - SUBBIGS subtracts one big number from a second. - PRINTBIG prints a big number in decimal. - ZEROBIG sets the value of a big number to 0. - ISZEROBIG tests if the value is 0. - SETBIG sets a big number to a value at most 10^9-1. - ISEQBIG tests if two big numbers are equal. - ISASBIG tests if a big number is at least as a value at most 10^9-1. -*/ - -typedef struct -{ - long hi,lo; -} bigint; - -#define ZEROBIG(big) big.hi = big.lo = 0L -#define ISZEROBIG(big) (big.lo == 0 && big.hi == 0) -#define SETBIG(big,value) {big.hi = 0L; big.lo = (value);} -#define ADDBIG(big,extra) if ((big.lo += (extra)) >= 1000000000L) \ - { ++big.hi; big.lo -= 1000000000L;} -#define PRINTBIG(file,big) if (big.hi == 0) \ - fprintf(file,"%ld",big.lo); else fprintf(file,"%ld%09ld",big.hi,big.lo) -#define BIGTODOUBLE(big) (big.hi * 1000000000.0 + big.lo) -#define SUMBIGS(big1,big2) {if ((big1.lo += big2.lo) >= 1000000000L) \ - {big1.lo -= 1000000000L; big1.hi += big2.hi + 1L;} \ - else big1.hi += big2.hi;} -#define SUBBIGS(big1,big2) {if ((big1.lo -= big2.lo) < 0L) \ - {big1.lo += 1000000000L; big1.hi -= big2.hi + 1L;} \ - else big1.hi -= big2.hi;} -/* Note: SUBBIGS must not allow the value to go negative. - SUMBIGS and SUBBIGS both permit big1 and big2 to be the same bigint. */ -#define ISEQBIG(big1,big2) (big1.lo == big2.lo && big1.hi == big2.hi) -#define ISASBIG(big,value) (big.hi > 0 || big.lo >= (value)) - -static leveldata data[MAXN]; /* data[n] is data for n -> n+1 */ -static bigint nodes[MAXN]; /* nodes at each level */ -static bigint nout; - -#ifdef INSTRUMENT -static unsigned long rigidnodes[MAXN],fertilenodes[MAXN]; -static unsigned long a1calls,a1nauty,a1succs; -static unsigned long a2calls,a2nauty,a2uniq,a2succs; -#endif - -#ifdef PLUGIN -#include PLUGIN -#endif - -#ifdef OUTPROC -extern void OUTPROC(FILE*,graph*,int); -#endif -#ifdef PRUNE -extern int PRUNE(graph*,int,int); -#endif -#ifdef PREPRUNE -extern int PREPRUNE(graph*,int,int); -#endif -#ifdef SUMMARY -extern void SUMMARY(bigint,double); -#endif - -/************************************************************************/ - -void -write_ascii(FILE *f, graph *g, int n) -/* write tournament g (n vertices) to file f in ascii format */ -{ - char s[MAXN*(MAXN-1)/2+2]; - int i,j; - size_t k; - - k = 0; - for (i = 0; i < n-1; ++i) - for (j = i+1; j < n; ++j) - if ((g[i] & bit[j])) s[k++] = '1'; else s[k++] = '0'; - - s[k++] = '\n'; - s[k] = '\0'; - - if (fwrite(s,1,k,f) != k || ferror(f)) - gt_abort(">E write_ascii : error on writing\n"); -} - -/************************************************************************/ - -void -writeg6x(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in graph6 format */ -{ - writeg6(f,g,1,n); -} - -/************************************************************************/ - -void -writes6x(FILE *f, graph *g, int n) -/* write graph g (n vertices) to file f in sparse6 format */ -{ - writes6(f,g,1,n); -} - -/***********************************************************************/ - -static void -nullwrite(FILE *f, graph *g, int n) -/* don't write graph g (n vertices) to file f */ -{ -} - -/***********************************************************************/ - -static boolean -isstrong(graph *g, int n) -/* test if tournament g is strongly-connected - * This code is strictly for tournaments only. - */ -{ - setword seen,expanded,toexpand,allbits; - int i; - - allbits = ALLMASK(n); - - seen = bit[0] | g[0]; - expanded = bit[0]; - - while (seen != allbits && (toexpand = (seen & ~expanded))) /* not == */ - { - i = FIRSTBITNZ(toexpand); - expanded |= bit[i]; - seen |= g[i]; - } - - if (seen != allbits) return FALSE; - - seen = (allbits ^ g[0]); - expanded = bit[0]; - - while (seen != allbits && (toexpand = (seen & ~expanded))) /* not == */ - { - i = FIRSTBITNZ(toexpand); - expanded |= bit[i]; - seen |= (g[i] ^ allbits); - } - - return seen == allbits; -} - -/**********************************************************************/ - -static void -gcomplement(graph *g, graph *gc, int n) -/* Take the complement of g and put it in gc */ -{ - int i; - setword all; - - all = ~(setword)BITMASK(n-1); - for (i = 0; i < n; ++i) - gc[i] = g[i] ^ all ^ bit[i]; -} - -/**************************************************************************/ - -static void -makeleveldata(void) -/* make the level data for each level */ -{ - long h; - int n,dmax,dmin; - long ncj; - leveldata *d; - xword *xcard,*xinv; - xword *xset,xw,tttn,nxsets; - xword cw; - xword i,j; - - for (n = 1; n < maxn; ++n) - { - dmax = n/2; - if (maxdeg < dmax) dmax = maxdeg; - dmin = mindeg - maxn + n + 1; - if (dmin < 0) dmin = 0; - ncj = 1; - nxsets = (dmin == 0 ? 1 : 0); - for (j = 1; j <= dmax; ++j) - { - ncj = (ncj * (n-j+1)) / j; - if (j >= dmin) nxsets += ncj; - } - tttn = 1L << n; - - d = &data[n]; - - d->xset = xset = (xword*) calloc(nxsets,sizeof(xword)); - d->xcard = xcard = (xword*) calloc(nxsets,sizeof(xword)); - d->xinv = xinv = (xword*) calloc(tttn,sizeof(xword)); - d->xorb = (xword*) calloc(nxsets,sizeof(xword)); - - if (xset==NULL || xcard==NULL || xinv==NULL || d->xorb==NULL) - { - fprintf(stderr, - ">E gentourng: calloc failed in makeleveldata()\n"); - exit(2); - } - - j = 0; - - for (i = 0;; ++i) - { - if ((h = XPOPCOUNT(i)) <= dmax && h >= dmin) - { - xset[j] = i; - xcard[j] = h; - ++j; - } - if (i == (xword)((1L<E gentourng: j=%u mxsets=%u\n", - j,(unsigned)nxsets); - exit(2); - } - - h = 1; - do - h = 3 * h + 1; - while (h < nxsets); - - do - { - for (i = h; i < nxsets; ++i) - { - xw = xset[i]; - cw = xcard[i]; - for (j = i; xcard[j-h] > cw || - (xcard[j-h] == cw && xset[j-h] > xw); ) - { - xset[j] = xset[j-h]; - xcard[j] = xcard[j-h]; - if ((j -= h) < h) break; - } - xset[j] = xw; - xcard[j] = cw; - } - h /= 3; - } - while (h > 0); - - for (i = 0; i < nxsets; ++i) xinv[xset[i]] = i; - - d->xstart[0] = 0; - for (i = 1; i < nxsets; ++i) - if (xcard[i] > xcard[i-1]) d->xstart[xcard[i]] = i; - d->xstart[xcard[nxsets-1]+1] = nxsets; - } -} - -/**************************************************************************/ - -static void -userautomproc(int count, int *p, int *orbits, - int numorbits, int stabvertex, int n) -/* form orbits on powerset of VG - called by nauty; operates on data[n] */ -{ - xword i,j1,j2,moved,pi,pxi; - xword lo,hi; - xword *xorb,*xinv,*xset,w; - - xorb = data[n].xorb; - xset = data[n].xset; - xinv = data[n].xinv; - lo = data[n].lo; - hi = data[n].hi; - - if (count == 1) /* first automorphism */ - for (i = lo; i < hi; ++i) xorb[i] = i; - - moved = 0; - for (i = 0; i < n; ++i) - if (p[i] != i) moved |= xbit[i]; - - for (i = lo; i < hi; ++i) - { - if ((w = xset[i] & moved) == 0) continue; - pxi = xset[i] & ~moved; - while (w) - { - j1 = XNEXTBIT(w); - w ^= xbit[j1]; - pxi |= xbit[p[j1]]; - } - pi = xinv[pxi]; - - j1 = xorb[i]; - while (xorb[j1] != j1) j1 = xorb[j1]; - j2 = xorb[pi]; - while (xorb[j2] != j2) j2 = xorb[j2]; - - if (j1 < j2) xorb[j2] = xorb[i] = xorb[pi] = j1; - else if (j1 > j2) xorb[j1] = xorb[i] = xorb[pi] = j2; - } -} - -/***************************************************************************** -* * -* refinex(g,lab,ptn,level,numcells,count,active,goodret,code,m,n) is a * -* custom version of refine() which can exit quickly if required. * -* * -* Only use at level==0. * -* goodret : whether to do an early return for code 1 * -* code := -1 for n-1 not max, 0 for maybe, 1 for definite * -* * -*****************************************************************************/ - -static void -refinex(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, boolean goodret, int *code, int m, int n) -{ - int i,c1,c2,labc1; - setword x,lact; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - set *gptr; - setword workset; - int workperm[MAXN]; - int bucket[MAXN+2]; - - if (n == 1) - { - *code = 1; - return; - } - - *code = 0; - lact = *active; - - split1 = -1; - while (*numcells < n && lact) - { - TAKEBIT(split1,lact); - - for (split2 = split1; ptn[split2] > 0; ++split2) {} - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],1); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT1(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = 0; - ++*numcells; - lact |= bit[c1]; - } - } - } - - else /* nontrivial splitting cell */ - { - workset = 0; - for (i = split1; i <= split2; ++i) workset |= bit[lab[i]]; - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > 0; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - if ((x = workset & g[lab[i]]) != 0) cnt = POPCOUNT(x); - else cnt = 0; - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - if ((x = workset & g[lab[i]]) != 0) - cnt = POPCOUNT(x); - else - cnt = 0; - - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) continue; - c1 = cell1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - if (c1 != cell1) - { - lact |= bit[c1]; - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = 0; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) lab[i] = workperm[i]; - } - } - - if (ptn[n-2] == 0) - { - if (lab[n-1] == n-1) - { - *code = 1; - if (goodret) return; - } - else - { - *code = -1; - return; - } - } - else - { - i = n - 1; - while (TRUE) - { - if (lab[i] == n-1) break; - --i; - if (ptn[i] == 0) - { - *code = -1; - return; - } - } - } - } -} - -/**************************************************************************/ - -static void -makecanon(graph *g, graph *gcan, int n) -/* gcan := canonise(g) */ -{ - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - - options.getcanon = TRUE; - options.digraph = TRUE; - - nauty(g,lab,ptn,NULL,orbits,&options,&nauty_stats, - workspace,50,1,n,gcan); -} - -/**************************************************************************/ - -static boolean -accept1(graph *g, int n, xword x, graph *gx, int *deg, boolean *rigid) -/* decide if n in theta(g+x) - version for n+1 < maxn */ -{ - int i; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int count[MAXN]; - graph h[MAXN]; - int nx,numcells,code; - int i0,i1,degn; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - -#ifdef INSTRUMENT - ++a1calls; -#endif - - nx = n + 1; - for (i = 0; i < n; ++i) gx[i] = g[i]; - gx[n] = 0; - deg[n] = degn = XPOPCOUNT(x); - - for (i = 0; i < n; ++i) - { - if ((xbit[i] & x)) - gx[n] |= bit[i]; - else - { - gx[i] |= bit[n]; - ++deg[i]; - } - } - -#ifdef PREPRUNE - if (PREPRUNE(gx,n+1,maxn)) return FALSE; -#endif - - i0 = 0; - i1 = n; - for (i = 0; i < nx; ++i) - { - if (deg[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - ptn[n] = 0; - if (i0 == 0) - { - numcells = 1; - active[0] = bit[0]; - } - else - { - numcells = 2; - active[0] = bit[0] | bit[i1+1]; - ptn[i1] = 0; - } - refinex(gx,lab,ptn,0,&numcells,count,active,FALSE,&code,1,nx); - - if (code < 0) return FALSE; - - if (numcells == nx) - { - *rigid = TRUE; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - - options.getcanon = TRUE; - options.digraph = TRUE; - options.defaultptn = FALSE; - options.userautomproc = userautomproc; - /* - if (!regular || nx != maxn-1) options.userautomproc = userautomproc; - else options.userautomproc = NULL; - */ - - active[0] = 0; -#ifdef INSTRUMENT - ++a1nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,h); - - if (orbits[lab[n]] == orbits[n]) - { - *rigid = stats.numorbits == nx; -#ifdef INSTRUMENT - ++a1succs; -#endif - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static boolean -hitinvar(graph *g, int *invar, int n) -/* make hitting invariant - * return FALSE if n-1 not maximal else return TRUE */ -{ - setword x,y,z; - int inv,i,v,d; - - for (v = n-1; v >= 0; --v) - { - inv = 0; - x = y = g[v]; - while (y) - { - TAKEBIT(i,y); - z = x & g[i]; - d = POPCOUNT(z); - if (d > inv) inv = d; - } - - invar[v] = inv; - if (v < n-1 && inv > invar[n-1]) return FALSE; - } - return TRUE; -} - -/**************************************************************************/ - -static boolean -accept2(graph *g, int n, xword x, graph *gx, int *deg, boolean nuniq) -/* decide if n in theta(g+x) -- version for n+1 == maxn */ -{ - int i; - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - int degx[MAXN],invar[MAXN]; - setword vmax,gv,gxn; - int qn,qv; - int count[MAXN]; - int nx,numcells,code; - int degn,i0,i1,j,j0,j1; - set active[MAXM]; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - setword workspace[50]; - boolean cheapacc; - -#ifdef INSTRUMENT - ++a2calls; - if (nuniq) ++a2uniq; -#endif - nx = n + 1; - gxn = 0; - - for (i = 0; i < n; ++i) - { - if ((xbit[i] & x)) - { - gxn |= bit[i]; - gx[i] = g[i]; - degx[i] = deg[i]; - } - else - { - gx[i] = g[i] | bit[n]; - degx[i] = deg[i] + 1; - } - } - gx[n] = gxn; - degx[n] = degn = XPOPCOUNT(x); - -#ifdef PREPRUNE - if (PREPRUNE(gx,n+1,maxn)) return FALSE; -#endif - - if (nuniq) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - - i0 = 0; - i1 = n; - for (i = 0; i < nx; ++i) - { - if (degx[i] == degn) lab[i1--] = i; - else lab[i0++] = i; - ptn[i] = 1; - } - ptn[n] = 0; - if (i0 == 0) - { - numcells = 1; - active[0] = bit[0]; - if (!hitinvar(gx,invar,nx)) return FALSE; - qn = invar[n]; - j0 = 0; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - qv = invar[j]; - if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > 0) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - else - { - numcells = 2; - ptn[i1] = 0; - active[0] = bit[0] | bit[i1+1]; - - vmax = 0; - for (i = i1+1; i < nx; ++i) vmax |= bit[lab[i]]; - - gv = gx[n] & vmax; - qn = POPCOUNT(gv); - - j0 = i1+1; - j1 = n; - while (j0 <= j1) - { - j = lab[j0]; - gv = gx[j] & vmax; - qv = POPCOUNT(gv); - if (qv > qn) - return FALSE; - else if (qv < qn) - ++j0; - else - { - lab[j0] = lab[j1]; - lab[j1] = j; - --j1; - } - } - if (j0 > i1+1) - { - if (j0 == n) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - ptn[j1] = 0; - ++numcells; - active[0] |= bit[j0]; - } - } - - refinex(gx,lab,ptn,0,&numcells,count,active,TRUE,&code,1,nx); - - if (code < 0) return FALSE; - - cheapacc = FALSE; - if (code > 0) cheapacc = TRUE; - - if (cheapacc) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - - options.getcanon = TRUE; - options.digraph = TRUE; - options.defaultptn = FALSE; - - active[0] = 0; -#ifdef INSTRUMENT - ++a2nauty; -#endif - nauty(gx,lab,ptn,active,orbits,&options,&stats,workspace,50,1,nx,gcan); - - if (orbits[lab[n]] == orbits[n]) - { -#ifdef INSTRUMENT - ++a2succs; -#endif - if (canonise) makecanon(gx,gcan,nx); - return TRUE; - } - else - return FALSE; -} - -/**************************************************************************/ - -static void -genextend(graph *g, int n, int *deg, boolean rigid) -/* extend from n to n+1 -- version for general graphs */ -{ - xword x,dlow,dhigh,dcrit; - xword *xset,*xcard,*xorb; - xword i,imin,imax; - int nx,xc,j,dmax; - int xlb,xub,xlbx,xubx; - graph gx[MAXN]; - int degx[MAXN]; - boolean rigidx; - boolean subconnec; - -#ifdef INSTRUMENT - boolean haschild; - - haschild = FALSE; - if (rigid) ++rigidnodes[n]; -#endif - nx = n + 1; - ADDBIG(nodes[n],1); - - if (regular && nx == maxn) - { - x = 0; - for (i = 0; i < n; ++i) - if (deg[i] == maxdeg) x |= xbit[i]; - - if (accept2(g,n,x,gx,deg,FALSE)) - { -#ifdef PRUNE - if (!PRUNE(gx,nx,maxn)) -#endif - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - ADDBIG(nout,1); - (*outproc)(outfile,canonise ? gcan : gx,nx); - } - } -#ifdef INSTRUMENT - if (haschild) ++fertilenodes[n]; -#endif - return; - } - - dmax = deg[n-1]; - - xlb = mindeg + n + 1 - maxn; - if (0 > xlb) xlb = 0; - xub = dmax+1; - if (n/2 < xub) xub = n/2; - if (maxdeg < xub) xub = maxdeg; - - if (xlb > xub) return; - - dlow = dcrit = dhigh = 0; - for (i = 0; i < n; ++i) - { - if (deg[i] == dmax) dlow |= xbit[i]; - if (deg[i] == maxdeg) dhigh |= xbit[i]; - if (deg[i] == mindeg + n - maxn) dcrit |= xbit[i]; - } - - if (XPOPCOUNT(dhigh) > xlb) xlb = XPOPCOUNT(dhigh); - if (n-XPOPCOUNT(dcrit) < xub) xub = n - XPOPCOUNT(dcrit); - if (xub == dmax+1 && XPOPCOUNT(dlow)+dmax >= n) --xub; - if (xlb > xub) return; - -#ifdef PRUNE - if (PRUNE(g,n,maxn)) return; -#endif - - imin = data[n].xstart[xlb]; - imax = data[n].xstart[xub+1]; - xset = data[n].xset; - xcard = data[n].xcard; - xorb = data[n].xorb; - - if (nx == maxn) - { - subconnec = connec && isstrong(g,n); - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if (xc == dmax+1 && (x & dlow) != 0) continue; - if ((dhigh & ~x) != 0) continue; - if ((dcrit & x) != 0) continue; - - if (accept2(g,n,x,gx,deg, - xc < dmax || (xc == dmax && (x & dlow) == 0))) - if (!connec || (subconnec && x != 0) || isstrong(gx,nx)) - { -#ifdef PRUNE - if (!PRUNE(gx,nx,maxn)) -#endif - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - ADDBIG(nout,1); - (*outproc)(outfile,canonise ? gcan : gx,nx); - } - } - } - } - else - { - for (i = imin; i < imax; ++i) - { - if (!rigid && xorb[i] != i) continue; - x = xset[i]; - xc = xcard[i]; - if (xc == dmax+1 && (x & dlow) != 0) continue; - if ((dhigh & ~x) != 0) continue; - if ((dcrit & x) != 0) continue; - if (nx == splitlevel) - { - if (odometer-- != 0) continue; - odometer = mod - 1; - } - - for (j = 0; j < n; ++j) degx[j] = deg[j]; - xlbx = mindeg+nx+1-maxn; - if (xlbx < 0) xlbx = 0; - xubx = xc + 1; - if (maxdeg < xubx) xubx = maxdeg; - if (nx/2 < xubx) xubx = nx/2; - if (xlbx > xubx) continue; - - data[nx].lo = data[nx].xstart[xlbx]; - data[nx].hi = data[nx].xstart[xubx+1]; - if (accept1(g,n,x,gx,degx,&rigidx)) - { -#ifdef INSTRUMENT - haschild = TRUE; -#endif - genextend(gx,nx,degx,rigidx); - } - } - } - - if (n == splitlevel-1 && n >= min_splitlevel - && ISASBIG(nodes[n],multiplicity)) - --splitlevel; -#ifdef INSTRUMENT - if (haschild) ++fertilenodes[n]; -#endif -} - -/**************************************************************************/ -/**************************************************************************/ - -int -#ifdef GENG_MAIN -GENG_MAIN(int argc, char *argv[]) -#else -main(int argc, char *argv[]) -#endif -{ - char *arg; - boolean badargs,gotd,gotD,gotf,gotmr; - boolean secret,connec1; - char *outfilename,sw; - int i,j,argnum; - graph g[1]; - int deg[1]; - int splitlevinc; - xword testxword; - double t1,t2; - char msg[201]; - - HELP; - nauty_check(WORDSIZE,1,MAXN,NAUTYVERSIONID); - - testxword = (xword)(-1); - if (MAXN > 32 || MAXN > WORDSIZE || MAXN > 8*sizeof(xword) - || (MAXN == 8*sizeof(xword) && testxword < 0)) - { - fprintf(stderr,"gentourng: incompatible MAXN, WORDSIZE, or xword\n"); - fprintf(stderr,"--See notes in program source\n"); - exit(1); - } - - badargs = FALSE; - graph6 = FALSE; - sparse6 = FALSE; - nooutput = FALSE; - canonise = FALSE; - header = FALSE; - outfilename = NULL; - secret = FALSE; - connec1 = FALSE; - - maxdeg = MAXN; - mindeg = 0; - splitlevinc = 0; - - gotd = gotD = gotf = gotmr = FALSE; - - argnum = 0; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('u',nooutput) - else SWBOOLEAN('g',graph6) - else SWBOOLEAN('s',sparse6) - else SWBOOLEAN('l',canonise) - else SWBOOLEAN('h',header) - else SWBOOLEAN('q',quiet) - else SWBOOLEAN('c',connec1) - else SWBOOLEAN('$',secret) - else SWINT('d',gotd,mindeg,"gentourng -d") - else SWINT('D',gotD,maxdeg,"gentourng -D") -#ifdef PLUGIN_SWITCHES -PLUGIN_SWITCHES -#endif - else badargs = TRUE; - } - } - else if (arg[0] == '-' && arg[1] == '\0') - gotf = TRUE; - else - { - if (argnum == 0) - { - if (sscanf(arg,"%d",&maxn) != 1) badargs = TRUE; - ++argnum; - } - else if (gotf) - badargs = TRUE; - else - { - if (!gotmr) - { - if (sscanf(arg,"%d/%d",&res,&mod) == 2) - { - gotmr = TRUE; - continue; - } - } - if (!gotf) - { - outfilename = arg; - gotf = TRUE; - continue; - } - } - } - } - - if (argnum == 0) - badargs = TRUE; - else if (maxn < 1 || maxn > MAXN) - { - fprintf(stderr,">E gentourng: n must be in the range 1..%d\n",MAXN); - badargs = TRUE; - } - - if (!gotmr) - { - mod = 1; - res = 0; - } - - if (connec1) connec = 1; - else connec = 0; - - if (maxdeg >= maxn) maxdeg = maxn - 1; - if (mindeg < 0) mindeg = 0; - - if (!badargs && - (maxdeg < mindeg || 2*maxdeg < maxn-1 || 2*mindeg > maxn-1)) - { - fprintf(stderr,">E gentourng: impossible degree bounds\n"); - badargs = TRUE; - } - - if (connec && mindeg < 1 && maxn > 1) mindeg = 1; - if (connec && maxdeg == maxn-1 && maxn > 1) maxdeg = maxn - 2; - - if (!badargs && (res < 0 || res >= mod)) - { - fprintf(stderr,">E gentourng: must have 0 <= res < mod\n"); - badargs = TRUE; - } - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if ((graph6!=0) + (sparse6!=0) + (nooutput!=0) > 1) - gt_abort(">E gentourng: -uyngs are incompatible\n"); - -#ifdef OUTPROC - outproc = OUTPROC; -#else - if (nooutput) outproc = nullwrite; - else if (sparse6) outproc = writes6x; - else if (graph6) outproc = writeg6x; - else outproc = write_ascii; -#endif - -#ifdef PLUGIN_INIT -PLUGIN_INIT -#endif - - for (i = 0; i < maxn; ++i) ZEROBIG(nodes[i]); - - if (nooutput) - outfile = stdout; - else if (!gotf || outfilename == NULL) - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr, - ">E gentourng: can't open %s for writing\n",outfilename); - gt_abort(NULL); - } - - multiplicity = PRUNEMULT * mod; - - if (!quiet) - { - msg[0] = '\0'; - if (strlen(argv[0]) > 75) - fprintf(stderr,">A %s",argv[0]); - else - CATMSG1(">A %s",argv[0]); - - CATMSG2(" -%s%s",connec1 ? "c" : "",canonise ? "l" : ""); - /* - if (mod > 1) - CATMSG2("X%dx%d",splitlevinc,multiplicity); - */ - CATMSG3("d%dD%d n=%d",mindeg,maxdeg,maxn); - if (mod > 1) CATMSG2(" class=%d/%d",res,mod); - CATMSG0("\n"); - fputs(msg,stderr); - fflush(stderr); - } - - g[0] = 0; - deg[0] = 0; - - t1 = CPUTIME; - - if (header) - { - if (sparse6) - { - writeline(outfile,SPARSE6_HEADER); - fflush(outfile); - } - else if (!nooutput) - { - writeline(outfile,GRAPH6_HEADER); - fflush(outfile); - } - } - - ZEROBIG(nout); - - if (maxn == 1) - { - if (res == 0) - { - ADDBIG(nout,1); - (*outproc)(outfile,g,1); - } - } - else - { - makeleveldata(); - - if (maxn >= 14 && mod > 1) splitlevel = maxn - 4; - else if (maxn >= 6 && mod > 1) splitlevel = maxn - 3; - else splitlevel = -1; - - splitlevel += splitlevinc; - if (splitlevel > maxn - 1) splitlevel = maxn - 1; - if (splitlevel < 3) splitlevel = -1; - - min_splitlevel = 6; - odometer = secret ? -1 : res; - regular = mindeg == maxdeg; - if (regular) connec = FALSE; /* All reg tourns are strong! */ - - genextend(g,1,deg,TRUE); - } - t2 = CPUTIME; - -#ifdef INSTRUMENT - fprintf(stderr,"\n>N node counts\n"); - for (i = 1; i < maxn; ++i) - { - fprintf(stderr," level %2d: \n",i); - PRINTBIG(stderr,nodes[i]); - fprintf(stderr," (%lu rigid, %lu fertile)\n", - rigidnodes[i],fertilenodes[i]); - } - fprintf(stderr,">A1 %lu calls to accept1, %lu nauty, %lu succeeded\n", - a1calls,a1nauty,a1succs); - fprintf(stderr, - ">A2 %lu calls to accept2, %lu nuniq, %lu nauty, %lu succeeded\n", - a2calls,a2uniq,a2nauty,a2succs); - fprintf(stderr,"\n"); -#endif - -#ifdef SUMMARY - SUMMARY(nout,t2-t1); -#endif - - if (!quiet) - { - fprintf(stderr,">Z "); - PRINTBIG(stderr,nout); - fprintf(stderr," graphs generated in %3.2f sec\n",t2-t1); - } - -#ifdef GENG_MAIN - for (i = 1; i < maxn; ++i) - { - free(data[i].xorb); - free(data[i].xset); - free(data[i].xinv); - free(data[i].xcard); - } - return 0; -#else - exit(0); -#endif -} diff --git a/tools/nauty25r9_unix/gtnauty.c b/tools/nauty25r9_unix/gtnauty.c deleted file mode 100644 index 96be1eb..0000000 --- a/tools/nauty25r9_unix/gtnauty.c +++ /dev/null @@ -1,861 +0,0 @@ -/* gtnauty.c : nauty-related routines for gtools. - - Jan 15, 2001 : Increased graph order limit from 2^16-1 to 2^22-1. - Aug 9, 2001 : Added fgroup_inv() and fcanonise_inv() - Sep 15, 2004 : Completed prototypes - Oct 16, 2004 : DEAFULTOPTIONS_GRAPH - Nov 17, 2005 : Added fcanonise_inv_sg() - May 11, 2010 : use sorttemplates.c - -**************************************************************************/ - -#include "gtools.h" /* which includes naututil.h, nausparse.h, stdio.h */ - -static boolean issymm; -static set *g0; -static int gm; -static int fuzz2[] = {006532,070236,035523,062437}; -#define FUZZ2(x) ((x) ^ fuzz2[(x)&3]) - -int gt_numorbits; - -#ifdef REFINE -void REFINE(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -#endif - -/**************************************************************************/ - -#define SORT_OF_SORT 1 -#define SORT_NAME lsort -#define SORT_TYPE1 long -#include "sorttemplates.c" -/* Creates static void lsort(long *x, int n) */ - -/**************************************************************************/ - -void -fcanonise(graph *g, int m, int n, graph *h, char *fmt, boolean digraph) -/* canonise g under format fmt; result in h. - fmt is either NULL (for no vertex classification) or is a string - with char-valued colours for the vertices. If it ends early, it - is assumed to continue with the colour 'z' indefinitely. */ -{ -#if MAXN - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - long x[MAXN]; - int count[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - int i; - boolean endfmt; - int numcells,code; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E fcanonise: m or n too large\n"); - ABORT(">E fcanonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"fcanonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"fcanonise"); - DYNALLOC1(int,orbits,orbits_sz,n,"fcanonise"); - DYNALLOC1(long,x,x_sz,n,"fcanonise"); - DYNALLOC1(int,count,count_sz,n,"fcanonise"); - DYNALLOC1(set,active,active_sz,m,"fcanonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"fcanonise"); -#endif - - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - - if (fmt != NULL) - { - endfmt = FALSE; - for (i = 0; i < n; ++i) - { - if (!endfmt && fmt[i] != '\0') - x[i] = ((long)fmt[i] << 22) | i; - else - { - endfmt = TRUE; - x[i] = ((long)'z' << 22) | i; - } - } - lsort(x,n); - - for (i = 0; i < n; ++i) - { - lab[i] = x[i] & 0x3fffffL; - if (i == n-1) - ptn[i] = 0; - else if ((x[i+1] >> 22) != (x[i] >> 22)) - { - ++numcells; - ADDELEMENT(active,i+1); - ptn[i] = 0; - } - else - ptn[i] = 1; - } - } - else - { - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n-1] = 0; - } - - if (m == 1) - refine1(g,lab,ptn,0,&numcells,count,active,&code,1,n); - else - refine(g,lab,ptn,0,&numcells,count,active,&code,m,n); - - if (numcells == n || (numcells == n-1 && !digraph)) - { - for (i = 0; i < n; ++i) count[i] = lab[i]; - updatecan(g,h,count,0,m,n); - gt_numorbits = numcells; - } - else - { - options.getcanon = TRUE; - options.defaultptn = FALSE; - options.digraph = digraph; -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - EMPTYSET(active,m); - nauty(g,lab,ptn,active,orbits,&options,&stats, - workspace,4*m,m,n,h); - gt_numorbits = stats.numorbits; - } -} - -/**************************************************************************/ - -void -fcanonise_inv(graph *g, int m, int n, graph *h, char *fmt, - void (*invarproc)(graph*,int*,int*,int,int,int,int*,int, - boolean,int,int), int mininvarlevel, int maxinvarlevel, - int invararg, boolean digraph) -/* canonise g under format fmt; result in h. - fmt is either NULL (for no vertex classification) or is a string - with char-valued colours for the vertices. If it ends early, it - is assumed to continue with the colour 'z' indefinitely. - This is like fcanonise() except that a invariant and its arguments - can be specified. */ -{ -#if MAXN - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - long x[MAXN]; - int count[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - int i; - boolean endfmt; - int numcells,code; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E fcanonise: m or n too large\n"); - ABORT(">E fcanonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"fcanonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"fcanonise"); - DYNALLOC1(int,orbits,orbits_sz,n,"fcanonise"); - DYNALLOC1(long,x,x_sz,n,"fcanonise"); - DYNALLOC1(int,count,count_sz,n,"fcanonise"); - DYNALLOC1(set,active,active_sz,m,"fcanonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"fcanonise"); -#endif - - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - - if (fmt != NULL) - { - endfmt = FALSE; - for (i = 0; i < n; ++i) - { - if (!endfmt && fmt[i] != '\0') - x[i] = ((long)fmt[i] << 22) | i; - else - { - endfmt = TRUE; - x[i] = ((long)'z' << 22) | i; - } - } - lsort(x,n); - - for (i = 0; i < n; ++i) - { - lab[i] = x[i] & 0x3fffffL; - if (i == n-1) - ptn[i] = 0; - else if ((x[i+1] >> 22) != (x[i] >> 22)) - { - ++numcells; - ADDELEMENT(active,i+1); - ptn[i] = 0; - } - else - ptn[i] = 1; - } - } - else - { - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n-1] = 0; - } - - if (m == 1) - refine1(g,lab,ptn,0,&numcells,count,active,&code,1,n); - else - refine(g,lab,ptn,0,&numcells,count,active,&code,m,n); - - if (numcells == n || (!digraph && numcells >= n-1)) - { - for (i = 0; i < n; ++i) count[i] = lab[i]; - updatecan(g,h,count,0,m,n); - gt_numorbits = numcells; - } - else - { - options.getcanon = TRUE; - options.digraph = digraph; - options.defaultptn = FALSE; - if (invarproc) - { - options.invarproc = invarproc; - options.mininvarlevel = mininvarlevel; - options.maxinvarlevel = maxinvarlevel; - options.invararg = invararg; - } -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - EMPTYSET(active,m); - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,4*m,m,n,h); - gt_numorbits = stats.numorbits; - } -} - -/**************************************************************************/ - -void -fcanonise_inv_sg(sparsegraph *g, int m, int n, sparsegraph *h, char *fmt, - void (*invarproc)(graph*,int*,int*,int,int,int,int*,int, - boolean,int,int), int mininvarlevel, int maxinvarlevel, - int invararg, boolean digraph) -/* canonise g under format fmt; result in h. - fmt is either NULL (for no vertex classification) or is a string - with char-valued colours for the vertices. If it ends early, it - is assumed to continue with the colour 'z' indefinitely. - This is like fcanonise() except that a invariant and its arguments - can be specified. Version for sparse graphs. */ -{ -#if MAXN - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - long x[MAXN]; - int count[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - int i; - boolean endfmt; - int numcells,code; - statsblk stats; - static DEFAULTOPTIONS_SPARSEGRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E fcanonise: m or n too large\n"); - ABORT(">E fcanonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"fcanonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"fcanonise"); - DYNALLOC1(int,orbits,orbits_sz,n,"fcanonise"); - DYNALLOC1(long,x,x_sz,n,"fcanonise"); - DYNALLOC1(int,count,count_sz,n,"fcanonise"); - DYNALLOC1(set,active,active_sz,m,"fcanonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"fcanonise"); -#endif - - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - - if (fmt != NULL) - { - endfmt = FALSE; - for (i = 0; i < n; ++i) - { - if (!endfmt && fmt[i] != '\0') - x[i] = ((long)fmt[i] << 22) | i; - else - { - endfmt = TRUE; - x[i] = ((long)'z' << 22) | i; - } - } - lsort(x,n); - - for (i = 0; i < n; ++i) - { - lab[i] = x[i] & 0x3fffffL; - if (i == n-1) - ptn[i] = 0; - else if ((x[i+1] >> 22) != (x[i] >> 22)) - { - ++numcells; - ADDELEMENT(active,i+1); - ptn[i] = 0; - } - else - ptn[i] = 1; - } - } - else - { - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n-1] = 0; - } - - refine_sg((graph*)g,lab,ptn,0,&numcells,count,active,&code,1,n); - - if (numcells == n || (!digraph && numcells == n-1)) - { - for (i = 0; i < n; ++i) count[i] = lab[i]; - updatecan_sg((graph*)g,(graph*)h,count,0,m,n); - gt_numorbits = numcells; - } - else - { - options.getcanon = TRUE; - options.digraph = digraph; - options.defaultptn = FALSE; - if (invarproc) - { - options.invarproc = invarproc; - options.mininvarlevel = mininvarlevel; - options.maxinvarlevel = maxinvarlevel; - options.invararg = invararg; - } -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - EMPTYSET(active,m); - nauty((graph*)g,lab,ptn,active,orbits,&options,&stats, - workspace,4*m,m,n,(graph*)h); - gt_numorbits = stats.numorbits; - } -} - -/**************************************************************************/ - -void -fgroup(graph *g, int m, int n, char *fmt, int *orbits, int *numorbits) -/* Find the orbits of undirected graph g stabilised by format fmt. - The orbits are put into orbits[] and the number of them into *numorbits - fmt is either NULL (for no vertex classification) or is a string - with char-valued colours for the vertices. If it ends early, it - is assumed to continue with the colour 'z' indefinitely. */ -{ -#if MAXN - int lab[MAXN],ptn[MAXN]; - long x[MAXN]; - int count[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - int i,j; - int orbrep; - boolean endfmt; - int numcells,code; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E fcanonise: m or n too large\n"); - ABORT(">E fcanonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"fcanonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"fcanonise"); - DYNALLOC1(long,x,x_sz,n,"fcanonise"); - DYNALLOC1(int,count,count_sz,n,"fcanonise"); - DYNALLOC1(set,active,active_sz,m,"fcanonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"fcanonise"); -#endif - - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - - if (fmt != NULL) - { - endfmt = FALSE; - for (i = 0; i < n; ++i) - { - if (!endfmt && fmt[i] != '\0') - x[i] = ((long)fmt[i] << 22) | i; - else - { - endfmt = TRUE; - x[i] = ((long)'z' << 22) | i; - } - } - lsort(x,n); - - for (i = 0; i < n; ++i) - { - lab[i] = x[i] & 0xffff; - if (i == n-1) ptn[i] = 0; - else if ((x[i+1] >> 22) != (x[i] >> 22)) - { - ++numcells; - ADDELEMENT(active,i+1); - ptn[i] = 0; - } - else - ptn[i] = 1; - } - } - else - { - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n-1] = 0; - } - - if (m == 1) - refine1(g,lab,ptn,0,&numcells,count,active,&code,1,n); - else - refine(g,lab,ptn,0,&numcells,count,active,&code,m,n); - - if (cheapautom(ptn,0,FALSE,n)) - { - for (i = 0; i < n; ) - { - if (ptn[i] == 0) - { - orbits[lab[i]] = lab[i]; - ++i; - } - else - { - orbrep = n; - j = i; - do - { - if (lab[j] < orbrep) orbrep = lab[j]; - } while (ptn[j++] != 0); - - for (; i < j; ++i) orbits[lab[i]] = orbrep; - } - } - *numorbits = gt_numorbits = numcells; - } - else - { - options.getcanon = FALSE; - options.defaultptn = FALSE; -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - EMPTYSET(active,m); - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,4*m,m,n,NULL); - *numorbits = gt_numorbits = stats.numorbits; - } -} - -/**************************************************************************/ - -void -fgroup_inv(graph *g, int m, int n, char *fmt, int *orbits, int *numorbits, - void (*invarproc)(graph*,int*,int*,int,int,int,int*,int, - boolean,int,int), int mininvarlevel, int maxinvarlevel, int invararg) -/* Find the orbits of undirected graph g stabilised by format fmt. - The orbits are put into orbits[] and the number of them into *numorbits - fmt is either NULL (for no vertex classification) or is a string - with char-valued colours for the vertices. If it ends early, it - is assumed to continue with the colour 'z' indefinitely. - This is like fgroup() except that a invariant and its arguments - can be specified. */ -{ -#if MAXN - int lab[MAXN],ptn[MAXN]; - long x[MAXN]; - int count[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - int i,j; - int orbrep; - boolean endfmt; - int numcells,code; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E fcanonise: m or n too large\n"); - ABORT(">E fcanonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"fcanonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"fcanonise"); - DYNALLOC1(long,x,x_sz,n,"fcanonise"); - DYNALLOC1(int,count,count_sz,n,"fcanonise"); - DYNALLOC1(set,active,active_sz,m,"fcanonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"fcanonise"); -#endif - - EMPTYSET(active,m); - ADDELEMENT(active,0); - numcells = 1; - - if (fmt != NULL) - { - endfmt = FALSE; - for (i = 0; i < n; ++i) - { - if (!endfmt && fmt[i] != '\0') - x[i] = ((long)fmt[i] << 22) | i; - else - { - endfmt = TRUE; - x[i] = ((long)'z' << 22) | i; - } - } - lsort(x,n); - - for (i = 0; i < n; ++i) - { - lab[i] = x[i] & 0xffff; - if (i == n-1) ptn[i] = 0; - else if ((x[i+1] >> 22) != (x[i] >> 22)) - { - ++numcells; - ADDELEMENT(active,i+1); - ptn[i] = 0; - } - else - ptn[i] = 1; - } - } - else - { - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[n-1] = 0; - } - - if (m == 1) - refine1(g,lab,ptn,0,&numcells,count,active,&code,1,n); - else - refine(g,lab,ptn,0,&numcells,count,active,&code,m,n); - - if (cheapautom(ptn,0,FALSE,n)) - { - for (i = 0; i < n; ) - { - if (ptn[i] == 0) - { - orbits[lab[i]] = lab[i]; - ++i; - } - else - { - orbrep = n; - j = i; - do - { - if (lab[j] < orbrep) orbrep = lab[j]; - } while (ptn[j++] != 0); - - for (; i < j; ++i) orbits[lab[i]] = orbrep; - } - } - *numorbits = gt_numorbits = numcells; - } - else - { - options.getcanon = FALSE; - options.defaultptn = FALSE; - if (invarproc) - { - options.invarproc = invarproc; - options.mininvarlevel = mininvarlevel; - options.maxinvarlevel = maxinvarlevel; - options.invararg = invararg; - } -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - EMPTYSET(active,m); - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,4*m,m,n,NULL); - *numorbits = gt_numorbits = stats.numorbits; - } -} - -/**************************************************************************/ - -static void -userlevel(int *lab, int *ptn, int level, int *orbits, statsblk *stats, - int tv, int index, int tcellsize, int numcells, int cc, int n) -{ - int i0,i; - - if (level != 2) return; - - issymm = TRUE; - - i0 = nextelement(g0,gm,-1); - if (i0 >= 0) - for (i = i0; (i = nextelement(g0,gm,i)) >= 0;) - if (orbits[i] != i0) - { - issymm = FALSE; - return; - } -} - -/*******************************************************************/ - -/* istransitive(g,m,n,h) - - g is an input graph with - m,n of standard meaning. - h is a place to put an output graph. - - If g is transitive, return 1 or 2 and put a canonically labelled - version of g into h. The value is 2 for symmetric graphs, - and 1 for other transitive graphs. - If g is not transitive, return 0. In that case h may or - may not have something in it. -*/ -int -istransitive(graph *g, int m, int n, graph *h) -{ - int i,inv; - set *gw; - short wt; - int d,inv0,v,w; - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); -#if MAXN - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - long x[MAXN]; - int count[MAXN]; - setword workspace[4*MAXM]; - set workset[MAXM]; - set sofar[MAXM],frontier[MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(long,x,x_sz); - DYNALLSTAT(int,count,count_sz); - DYNALLSTAT(setword,workspace,workspace_sz); - DYNALLSTAT(set,workset,workset_sz); - DYNALLSTAT(set,sofar,sofar_sz); - DYNALLSTAT(set,frontier,frontier_sz); -#endif - -#if MAXN - if (m > MAXM || n > MAXN) - { - fprintf(stderr, - ">E istransitive: bad input parameters (n=%d m=%d)\n",n,m); - exit(1); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"istransitive"); - DYNALLOC1(int,ptn,ptn_sz,n,"istransitive"); - DYNALLOC1(int,orbits,orbits_sz,n,"istransitive"); - DYNALLOC1(long,x,x_sz,n,"istransitive"); - DYNALLOC1(int,count,count_sz,n,"istransitive"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"istransitive"); - DYNALLOC1(set,workset,workset_sz,m,"istransitive"); - DYNALLOC1(set,sofar,sofar_sz,m,"istransitive"); - DYNALLOC1(set,frontier,frontier_sz,m,"istransitive"); -#endif - - for (v = 0; v < n; ++v) - { - inv = 0; - EMPTYSET(sofar,m); - ADDELEMENT(sofar,v); - EMPTYSET(frontier,m); - ADDELEMENT(frontier,v); - for (d = 1; d < n; ++d) - { - EMPTYSET(workset,m); - wt = 0; - for (w = -1; (w = nextelement(frontier,m,w)) >= 0;) - { - ++wt; - gw = GRAPHROW(g,w,m); - for (i = m; --i >= 0;) workset[i] |= gw[i]; - } - if (wt == 0) break; - wt += 0x73 ^ d; - wt = FUZZ2(wt); - inv += wt; - for (i = m; --i >= 0;) - { - frontier[i] = workset[i] & ~sofar[i]; - sofar[i] |= frontier[i]; - } - } - if (v == 0) inv0 = inv; - else if (inv != inv0) return 0; - } - - options.getcanon = TRUE; - options.userlevelproc = userlevel; -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - issymm = TRUE; - g0 = (set*) g; - gm = m; - - nauty(g,lab,ptn,NULL,orbits,&options,&stats,workspace,4*m,m,n,h); - - if (stats.numorbits != 1) return 0; - else if (!issymm) return 1; - else return 2; -} - -/**************************************************************************/ - -void -tg_canonise(graph *g, graph *h, int m, int n) -/* Canonise vertex-transitive graph */ -{ - int i; -#if MAXN - int lab[MAXN],ptn[MAXN],orbits[MAXN]; - set active[MAXM]; - setword workspace[4*MAXM]; -#else - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DYNALLSTAT(set,active,active_sz); - DYNALLSTAT(setword,workspace,workspace_sz); -#endif - statsblk stats; - static DEFAULTOPTIONS_GRAPH(options); - -#if MAXN - if (n > MAXN || m > MAXM) - { - fprintf(stderr,">E tg_canonise: m or n too large\n"); - ABORT(">E tg_canonise"); - } -#else - DYNALLOC1(int,lab,lab_sz,n,"tg_canonise"); - DYNALLOC1(int,ptn,ptn_sz,n,"tg_canonise"); - DYNALLOC1(int,orbits,orbits_sz,n,"tg_canonise"); - DYNALLOC1(set,active,active_sz,m,"tg_canonise"); - DYNALLOC1(setword,workspace,workspace_sz,4*m,"tg_canonise"); -#endif - - options.getcanon = TRUE; - options.defaultptn = FALSE; -#ifdef REFINE - options.userrefproc = REFINE; -#endif - - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - ptn[0] = ptn[n-1] = 0; - - EMPTYSET(active,m); - ADDELEMENT(active,0); - - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,4*m,m,n,h); -} diff --git a/tools/nauty25r9_unix/gtnauty.o b/tools/nauty25r9_unix/gtnauty.o deleted file mode 100644 index d225d0d8530e60b6b3960ac37615d1da708942b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36808 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 Y|Ia`k87K8*UWkRl|Bq963XP}#19n3l0ssI2 diff --git a/tools/nauty25r9_unix/gtools-h.in b/tools/nauty25r9_unix/gtools-h.in deleted file mode 100644 index c3117ff..0000000 --- a/tools/nauty25r9_unix/gtools-h.in +++ /dev/null @@ -1,240 +0,0 @@ -/***************************************************************************** -* This is the main header file for gtools. nauty version 2.5. * -* Subject to the copyright notice in nauty.h. * -* @configure_input@ -*****************************************************************************/ - -/* The parts between the ==== lines are modified by configure when -creating gtools.h out of gtools-h.in. If configure is not being -used, it is necessary to check they are correct. -====================================================================*/ - -#ifndef _GTOOLS_H_ /* only process this file once */ -#define _GTOOLS_H_ - -#define HAVE_ERRNO_H @header_errno_h@ /* exists */ -#define HAVE_PERROR @have_perror@ /* perror() exists */ -#define HAVE_PIPE @have_pipe@ /* pipe() exists */ -#define HAVE_WAIT @have_wait@ /* wait() exists */ -#define HAVE_WAIT_H @header_sys_wait_h@ /* exists */ -#define HAVE_POPEN @have_popen@ /* popen() and pclose() exist */ -#define POPEN_DEC @popen_dec@ /* popen() is declared in stdio.h */ -#define FTELL_DEC @ftell_dec@ /* ftell() is declared in stdio.h */ -#define FDOPEN_DEC @fdopen_dec@ /* fdopen() is declared in stdio.h */ -#define SORTPROG "@sort_prog@" /* name of sort program */ -#define SORT_NEWKEY @sort_newparams_ok@ /* if -k is supported */ -#define HAVE_PID_T @have_pid_t@ /* pid_t is defined */ -#define PUTENV_DEC @putenv_dec@ /* putenv() is declared in stdlib.h */ -#define SETENV_DEC @setenv_dec@ /* setenv() is declared in stdlib.h */ -#define HAVE_PUTENV @have_putenv@ /* putenv() exists */ -#define HAVE_SETENV @have_setenv@ /* setenv() exists */ -#define HAVE_PTHREADS @have_pthread@ /* Posix threads exist */ -#define HAVE_PTHREAD_H @header_pthread_h@ /* exists */ -#define HAVE_FSEEKO @have_fseeko@ /* fseeko() and ftello() exist */ -#define HAVE_SIGACTION @have_sigaction@ /* sigaction() exists */ -#define HAVE_SIGPROCMASK @have_sigprocmask@ /* sigprocmask() exists */ - -/* @edit_msg@ */ - -/*==================================================================*/ - -#ifndef MAXN -#define MAXN 0 -#endif - -#define SIZELEN(n) ((n)<=SMALLN?1:((n)<=SMALLISHN?4:8)) - /* length of size code in bytes */ -#define G6LEN(n) (SIZELEN(n) \ - + ((size_t)(n)/12)*((size_t)(n)-1) + (((size_t)(n)%12)*((size_t)(n)-1)+11)/12) - /* exactly graph6 string length excluding \n\0 - This twisted expression works up to n=227023 in 32-bit arithmetic - and for larger n if size_t has 64 bits. */ - -#include "naututil.h" /* which includes stdio.h */ -#include "nausparse.h" - -#if HAVE_ERRNO_H -#include -#else -extern int errno; -#endif - -#if HAVE_WAIT_H -#include -#endif - -#if HAVE_SIGACTION -#include -#endif - -#if HAVE_PERROR -#define ABORT(msg) do {if (errno != 0) perror(msg); exit(1);} while(0) -#else -#define ABORT(msg) do {exit(1);} while(0) -#endif - -#if PUTENV_DEC && HAVE_PUTENV -#define SET_C_COLLATION putenv("LC_COLLATE=C") -#elif SETENV_DEC && HAVE_SETENV -#define SET_C_COLLATION setenv("LC_COLLATE","C",1) -#elif HAVE_PUTENV -int putenv(char*); -#define SET_C_COLLATION putenv("LC_COLLATE=C") -#elif HAVE_SETENV -int setenv(const char*,const char*,int); -#define SET_C_COLLATION setenv("LC_COLLATE","C",1) -#else -#define SET_C_COLLATION -#endif - -#if HAS_STDIO_UNLOCK && !defined(NAUTY_IN_MAGMA) && !defined(IS_JAVA) -#define FLOCKFILE(f) flockfile(f) -#define FUNLOCKFILE(f) funlockfile(f) -#define GETC(f) getc_unlocked(f) -#undef PUTC -#define PUTC(c,f) putc_unlocked(c,f) -#else -#define FLOCKFILE(f) -#define FUNLOCKFILE(f) -#define GETC(f) getc(f) -#undef PUTC -#define PUTC(c,f) putc(c,f) -#endif - -#define BIAS6 63 -#define MAXBYTE 126 -#define SMALLN 62 -#define SMALLISHN 258047 -#define TOPBIT6 32 -#define C6MASK 63 - -#define GRAPH6_HEADER ">>graph6<<" -#define SPARSE6_HEADER ">>sparse6<<" -#define PLANARCODE_HEADER ">>planar_code<<" -#define PLANARCODELE_HEADER ">>planar_code le<<" -#define PLANARCODEBE_HEADER ">>planar_code be<<" -#define EDGECODE_HEADER ">>edge_code<<" - -#define GRAPH6 1 -#define SPARSE6 2 -#define PLANARCODE 4 -#define PLANARCODELE 8 -#define PLANARCODEBE 16 -#define EDGECODE 32 -#define PLANARCODEANY (PLANARCODE|PLANARCODELE|PLANARCODEBE) -#define UNKNOWN_TYPE 256 -#define HAS_HEADER 512 - -#define ARG_OK 0 -#define ARG_MISSING 1 -#define ARG_TOOBIG 2 -#define ARG_ILLEGAL 3 - -#define MAXARG 2000000000L -#define NOLIMIT (MAXARG+31L) - -#define SWBOOLEAN(c,bool) if (sw==c) bool=TRUE; -#define SWINT(c,bool,val,id) if (sw==c) \ - {bool=TRUE;arg_int(&arg,&val,id);} -#define SWLONG(c,bool,val,id) if (sw==c) \ - {bool=TRUE;arg_long(&arg,&val,id);} -#define SWRANGE(c,sep,bool,val1,val2,id) if (sw==c) \ - {bool=TRUE;arg_range(&arg,sep,&val1,&val2,id);} - -#ifdef HELPTEXT2 -#define PUTHELPTEXT printf("\nUsage: %s\n\n%s",USAGE,HELPTEXT1);\ - printf("%s",HELPTEXT2); -#else -#define PUTHELPTEXT printf("\nUsage: %s\n\n%s",USAGE,HELPTEXT) -#endif - -#define HELP if (argc > 1 && (strcmp(argv[1],"-help")==0 \ - || strcmp(argv[1],"/?")==0 \ - || strcmp(argv[1],"--help")==0)) \ - { PUTHELPTEXT; return 0;} -#define GETHELP \ -fprintf(stderr," Use %s -help to see more detailed instructions.\n",argv[0]) - -#define alloc_error gt_abort - -#define CATMSG0(fmt) sprintf(msg+strlen(msg),fmt) -#define CATMSG1(fmt,x1) sprintf(msg+strlen(msg),fmt,x1) -#define CATMSG2(fmt,x1,x2) sprintf(msg+strlen(msg),fmt,x1,x2) -#define CATMSG3(fmt,x1,x2,x3) sprintf(msg+strlen(msg),fmt,x1,x2,x3) -#define CATMSG4(fmt,x1,x2,x3,x4) sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4) -#define CATMSG5(fmt,x1,x2,x3,x4,x5) sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4,x5) -#define CATMSG6(fmt,x1,x2,x3,x4,x5,x6) \ - sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4,x5,x6) - -/************************************************************************/ - -/* @edit_msg@ */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void gtools_check(int,int,int,int); -extern FILE *opengraphfile(char*,int*,boolean,long); -extern void writeline(FILE*,char*); -extern char *gtools_getline(FILE*); /* formerly getline() */ -extern int graphsize(char*); -extern void stringcounts(char*,int*,size_t*); -extern void stringtograph(char*,graph*,int); -extern size_t edgecount(char*); -extern graph *readg(FILE*,graph*,int,int*,int*); -extern char *ntog6(graph*,int,int); -extern char *ntos6(graph*,int,int); -extern char *sgtos6(sparsegraph*); -extern char *sgtog6(sparsegraph*); -extern void writeg6(FILE*,graph*,int,int); -extern void writes6(FILE*,graph*,int,int); -extern void writeg6_sg(FILE*,sparsegraph*); -extern void writes6_sg(FILE*,sparsegraph*); -extern void writepc_sg(FILE*,sparsegraph*); -extern void stringtosparsegraph(char*,sparsegraph*,int*); -extern sparsegraph *read_sg(FILE*,sparsegraph*); -extern sparsegraph *read_sg_loops(FILE*,sparsegraph*,int*); -extern sparsegraph *readpc_sg(FILE*,sparsegraph*); -extern sparsegraph *readpcle_sg(FILE*,sparsegraph*); -extern char *getecline(FILE*); -extern void writelast(FILE*); -extern int longval(char**,long*); -extern void arg_int(char**,int*,char*); -extern void arg_long(char**,long*,char*); -extern void arg_range(char**,char*,long*,long*,char*); -extern void writerange(FILE*,int,long,long); -extern void gt_abort(char*); -extern char *stringcopy(char*); -extern boolean strhaschar(char*,int); - -extern void fcanonise(graph*,int,int,graph*,char*,boolean); -extern void fcanonise_inv - (graph*,int,int,graph*,char*,void(*)(graph*,int*,int*,int, - int,int,int*,int,boolean,int,int),int,int,int,boolean); -extern void fcanonise_inv_sg - (sparsegraph*,int,int,sparsegraph*,char*,void(*)(graph*,int*,int*, - int,int,int,int*,int,boolean,int,int),int,int,int,boolean); -extern void fgroup(graph*,int,int,char*,int*,int*); -extern void fgroup_inv - (graph*,int,int,char*,int*,int*,void(*)(graph*,int*,int*,int, - int,int,int*,int,boolean,int,int),int,int,int); -extern int istransitive(graph*,int,int,graph*); -extern void tg_canonise(graph*,graph*,int,int); - -extern TLS_ATTR int readg_code; -extern TLS_ATTR char *readg_line; -extern TLS_ATTR size_t ogf_linelen; -extern TLS_ATTR boolean is_pipe; - -#ifdef __cplusplus -} -#endif - -#ifdef CPUDEFS -CPUDEFS -#endif - -/* @edit_msg@ */ - -#endif /* _GTOOLS_H_ */ diff --git a/tools/nauty25r9_unix/gtools.c b/tools/nauty25r9_unix/gtools.c deleted file mode 100644 index 0e6ab54..0000000 --- a/tools/nauty25r9_unix/gtools.c +++ /dev/null @@ -1,1926 +0,0 @@ -/* gtools.c : Common routines for gtools programs. */ -/* Version 2.6, Jan 2011. */ - -/* Todo: size check if MAXN>0; option to free memory */ - -#include "gtools.h" - -#ifndef SEEK_SET -#define SEEK_SET 0 -#define SEEK_CUR 1 -#define SEEK_END 2 -#endif - -TLS_ATTR size_t ogf_linelen; -TLS_ATTR boolean is_pipe; - -#if HAVE_FSEEKO -#define FSEEK_VER fseeko -#define FTELL_VER ftello -#define OFF_T_VER off_t -#else -#if !FTELL_DEC -extern long ftell(FILE*); -extern int fseek(FILE*,long,int); -#endif -#define FSEEK_VER fseek -#define FTELL_VER ftell -#define OFF_T_VER long -#endif - -#if !POPEN_DEC -extern FILE *popen(const char*,const char*); -#endif - -/* - Version 1.1: Fixed sparse6 input for powers of 2. May 9, 1998 - Version 1.2: Added "cmd: ..." option for opengraphfile(). - Fixed readg() bug (could not be invisible). Oct 5, 1998 - Version 1.3: Added "is_pipe". June 20, 2002 - Version 1.4: Stuff for autoconf. August 30, 2002 - Version 1.5: Unlocked stdio for efficiency. October 31, 2004 - Also fwrite() in place of fputs() for writeline(). - Version 1.6: i/o for sparsegraph; use of s6len; improve allocations - Version 1.7: Add stringcounts() - Add very long size code (see formats.txt) - Version 1.8: Add gtools_check() - Version 1.9: Add writepc_sg(), readpc_sg() and readpcle_sg() - Add planar_code options to opengraphfile() - Version 2.4: Add writeec_sg(), readec_sg() (MISSING!) - Add edge_code options to opengraphfile() - Version 2.5: Remove sortints(), not used - Version 2.6: Add sgtog6() and writeg6_sg() -*/ - -#define B(i) (1 << ((i)-1)) -#define M(i) ((1 << (i))-1) - -/********************************************************************* -opengraphfile(filename,codetype,assumefixed,position) - opens and positions a file for reading graphs. - - filename = the name of the file to open - (NULL means stdin, assumed already open) - If filename starts with "cmd:", the remainder is taken - to be a command to open a subshell for, using a pipe. - codetype = returns a code for the format. - This is a combination of SPARSE6, GRAPH6, PLANARCODE, - PLANARCODELE, PLANARCODEBE, EDGECODE, UNKNOWN_TYPE - and HAS_HEADER. - If a header is present, that overrides the data. - If there is no header, the first graph is examined. - assumefixed = nonzero if files other than stdin or pipes should be - assumed to be seekable and have equal record sizes. - Ignored if there is a sparse6 header or the first - graph has sparse6 format. - position = the number of the record to position to - (the first is number 1; 0 and -NOLIMIT also mean - to position at start). planar_code files can only - be positioned at the start. - - If the file starts with ">", there must be a header. - Otherwise opengraphfile() fails. - - The value returned is a file pointer or NULL. - If assumedfixed is not zero and position > 1, the global variable - ogf_linelen is set to the length (including \n) of the length of the - first record. UPDATE - - The global variable is_pipe is set to whether the input file is a pipe. - -**********************************************************************/ - -FILE* -opengraphfile(char *filename, int *codetype, int assumefixed, long position) -{ - FILE *f; - int c,bl,firstc; - long i,l; - OFF_T_VER pos,pos1,pos2; - boolean bad_header; - - is_pipe = FALSE; - - if (filename == NULL) - { - f = stdin; - assumefixed = FALSE; - } - else - { - if (filename[0] == 'c' && filename[1] == 'm' - && filename[2] == 'd' && filename[3] == ':') - { -#if !HAVE_POPEN - gt_abort - (">E The \"cmd:\" option is not available in this version"); -#else - filename += 4; - while (*filename == ' ') ++filename; - f = popen(filename,"r"); -#endif - assumefixed = FALSE; - is_pipe = TRUE; - } - else - f = fopen(filename,"r"); - - if (f == NULL) - { - fprintf(stderr,">E opengraphfile: can't open %s\n",filename); - return NULL; - } - } - - FLOCKFILE(f); - firstc = c = GETC(f); - if (c == EOF) - { - *codetype = GRAPH6; - FUNLOCKFILE(f); - return f; - } - - if (c != '>') - { - *codetype = firstc == ':' ? SPARSE6 : GRAPH6; - ungetc(c,f); - } - else - { - bad_header = FALSE; - if ((c = GETC(f)) == EOF || c != '>') - bad_header = TRUE; - if (!bad_header && ((c = GETC(f)) == EOF || - (c != 'g' && c != 's' && c != 'p'))) - bad_header = TRUE; - if (!bad_header && c == 'g') - { - if ((c = GETC(f)) == EOF || c != 'r' || - (c = GETC(f)) == EOF || c != 'a' || - (c = GETC(f)) == EOF || c != 'p' || - (c = GETC(f)) == EOF || c != 'h' || - (c = GETC(f)) == EOF || c != '6' || - (c = GETC(f)) == EOF || c != '<' || - (c = GETC(f)) == EOF || c != '<') - bad_header = TRUE; - else - *codetype = GRAPH6 | HAS_HEADER; - } - else if (!bad_header && c == 'e') - { - if ((c = GETC(f)) == EOF || c != 'd' || - (c = GETC(f)) == EOF || c != 'g' || - (c = GETC(f)) == EOF || c != 'e' || - (c = GETC(f)) == EOF || c != '_' || - (c = GETC(f)) == EOF || c != 'c' || - (c = GETC(f)) == EOF || c != 'o' || - (c = GETC(f)) == EOF || c != 'd' || - (c = GETC(f)) == EOF || c != 'e' || - (c = GETC(f)) == EOF || c != '<' || - (c = GETC(f)) == EOF || c != '<') - bad_header = TRUE; - else - *codetype = EDGECODE | HAS_HEADER; - } - else if (!bad_header && c == 's') - { - if ((c = GETC(f)) == EOF || c != 'p' || - (c = GETC(f)) == EOF || c != 'a' || - (c = GETC(f)) == EOF || c != 'r' || - (c = GETC(f)) == EOF || c != 's' || - (c = GETC(f)) == EOF || c != 'e' || - (c = GETC(f)) == EOF || c != '6' || - (c = GETC(f)) == EOF || c != '<' || - (c = GETC(f)) == EOF || c != '<') - bad_header = TRUE; - else - *codetype = SPARSE6 | HAS_HEADER; - } - else if (!bad_header && c == 'p') - { - if ((c = GETC(f)) == EOF || c != 'l' || - (c = GETC(f)) == EOF || c != 'a' || - (c = GETC(f)) == EOF || c != 'n' || - (c = GETC(f)) == EOF || c != 'a' || - (c = GETC(f)) == EOF || c != 'r' || - (c = GETC(f)) == EOF || c != '_' || - (c = GETC(f)) == EOF || c != 'c' || - (c = GETC(f)) == EOF || c != 'o' || - (c = GETC(f)) == EOF || c != 'd' || - (c = GETC(f)) == EOF || c != 'e') - bad_header = TRUE; - else - { - if ((c = GETC(f)) == EOF) - bad_header = TRUE; - else if (c == ' ') - { - if ((bl = GETC(f)) == EOF || (bl != 'l' && bl != 'b') || - (c = GETC(f)) == EOF || c != 'e' || - (c = GETC(f)) == EOF || c != '<' || - (c = GETC(f)) == EOF || c != '<') - bad_header = TRUE; - else if (bl == 'l') - *codetype = PLANARCODELE | HAS_HEADER; - else - *codetype = PLANARCODEBE | HAS_HEADER; - } - else if (c == '<') - { - if ((c = GETC(f)) == EOF || c != '<') - bad_header = TRUE; - else - *codetype = PLANARCODE | HAS_HEADER; - } - else - bad_header = TRUE; - } - } - - if (bad_header) - { - fprintf(stderr,">E opengraphfile: illegal header in %s\n", - filename == NULL ? "stdin" : filename); - *codetype = UNKNOWN_TYPE | HAS_HEADER; - FUNLOCKFILE(f); - return NULL; - } - } - - if (position <= 1) return f; - - if (*codetype&PLANARCODEANY) - { - fprintf(stderr, - ">E opengraphfile: planar_code files can only be opened at the start\n"); - *codetype = UNKNOWN_TYPE | HAS_HEADER; - FUNLOCKFILE(f); - fclose(f); - return NULL; - } - - if (*codetype&EDGECODE) - { - fprintf(stderr, - ">E opengraphfile: edge_code files can only be opened at the start\n"); - *codetype = UNKNOWN_TYPE | HAS_HEADER; - FUNLOCKFILE(f); - fclose(f); - return NULL; - } - - if (!assumefixed || (*codetype&SPARSE6) || firstc == ':') - { - l = 1; - while ((c = GETC(f)) != EOF) - { - if (c == '\n') - { - ++l; - if (l == position) break; - } - } - if (l == position) return f; - - fprintf(stderr, - ">E opengraphfile: can't find line %ld in %s\n",position, - filename == NULL ? "stdin" : filename); - return NULL; - } - else - { - pos1 = FTELL_VER(f); - if (pos1 < 0) - { - fprintf(stderr,">E opengraphfile: error on first ftell\n"); - return NULL; - } - - for (i = 1; (c = GETC(f)) != EOF && c != '\n'; ++i) {} - ogf_linelen = i; - - if (c == EOF) - { - fprintf(stderr, - ">E opengraphfile: required record no present\n"); - FUNLOCKFILE(f); - return NULL; - } - - pos2 = FTELL_VER(f); - if (pos2 < 0) - { - fprintf(stderr,">E opengraphfile: error on second ftell\n"); - return NULL; - } - - pos = pos1 + (position-1)*(pos2-pos1); - if (FSEEK_VER(f,pos,SEEK_SET) < 0) - { - fprintf(stderr,">E opengraphfile: seek failed\n"); - return NULL; - } - } - - FUNLOCKFILE(f); - return f; -} - -/*********************************************************************/ - -void -writeline(FILE *f, char *s) -/* write a line with error checking */ -/* \n is not appended automatically */ -{ - size_t slen; - - slen = strlen(s); - - if (fwrite(s,1,slen,f) != slen || ferror(f)) - gt_abort(">E writeline : error on writing\n"); -} - -/*********************************************************************/ -/* This function used to be called getline(), but this was changed due - to too much confusion with the GNU function of that name. -*/ - -char* -gtools_getline(FILE *f) /* read a line with error checking */ -/* includes \n (if present) and \0. Immediate EOF causes NULL return. */ -{ - DYNALLSTAT(char,s,s_sz); - int c; - long i; - - DYNALLOC1(char,s,s_sz,5000,"gtools_getline"); - - FLOCKFILE(f); - i = 0; - while ((c = GETC(f)) != EOF && c != '\n') - { - if (i == s_sz-3) - DYNREALLOC(char,s,s_sz,3*(s_sz/2)+10000,"gtools_getline"); - s[i++] = c; - } - FUNLOCKFILE(f); - - if (i == 0 && c == EOF) return NULL; - - if (c == '\n') s[i++] = '\n'; - s[i] = '\0'; - return s; -} - -/****************************************************************************/ - -char* -getecline(FILE *f) /* read an edge_code line */ -/* No trailing \n or \0 is added. Immediate EOF causes NULL return. */ -{ - size_t headsize,bodysize; - int sizesize,edgesize; - int c1,c,i; - DYNALLSTAT(unsigned char,s,s_sz); - - FLOCKFILE(f); - if ((c1 = GETC(f)) == EOF) return NULL; - - if (c1 > 0) - { - bodysize = c1; - edgesize = 1; - headsize = 1; - } - else - { - if ((c = GETC(f)) == EOF) - gt_abort("Incomplete edge_code line"); - else - { - sizesize = c >> 4; - edgesize = c & 0xF; - bodysize = 0; - for (i = 0; i < sizesize; ++i) - { - if ((c = GETC(f)) == EOF) - gt_abort("Incomplete edge_code line"); - else - bodysize = (bodysize << 8) + c; - } - headsize = 2 + sizesize; - } - } - - DYNALLOC1(unsigned char,s,s_sz,headsize+bodysize,"getecline"); - - s[0] = c1; - if (c1 == 0) - { - s[1] = (sizesize << 4) + edgesize; - for (i = 0; i < sizesize; ++i) - s[headsize-1-i] = (bodysize >> 8*i) & 0xFF; - } - - if (bodysize > 0 && fread(s+headsize,bodysize,1,f) != bodysize) - gt_abort("Incomplete edge_code line"); - - FUNLOCKFILE(f); - return (char*)s; -} - -int -graphsize(char *s) -/* Get size of graph out of graph6 or sparse6 string. */ -{ - char *p; - int n; - - if (s[0] == ':') p = s+1; - else p = s; - n = *p++ - BIAS6; - - if (n > SMALLN) - { - n = *p++ - BIAS6; - if (n > SMALLN) - { - n = *p++ - BIAS6; - n = (n << 6) | (*p++ - BIAS6); - n = (n << 6) | (*p++ - BIAS6); - n = (n << 6) | (*p++ - BIAS6); - n = (n << 6) | (*p++ - BIAS6); - n = (n << 6) | (*p++ - BIAS6); - } - else - { - n = (n << 6) | (*p++ - BIAS6); - n = (n << 6) | (*p++ - BIAS6); - } - } - return n; -} - -/****************************************************************************/ - -static void -encodegraphsize(int n, char **pp) -/* Encode the size n in a string starting at **p, and reset **p - to point to the character after the size */ -{ - char *p; - - p = *pp; - if (n <= SMALLN) - *p++ = BIAS6 + n; - else if (n <= SMALLISHN) - { - *p++ = MAXBYTE; - *p++ = BIAS6 + (n >> 12); - *p++ = BIAS6 + ((n >> 6) & C6MASK); - *p++ = BIAS6 + (n & C6MASK); - } - else - { - *p++ = MAXBYTE; - *p++ = MAXBYTE; - *p++ = BIAS6 + (n >> 30); - *p++ = BIAS6 + ((n >> 24) & C6MASK); - *p++ = BIAS6 + ((n >> 18) & C6MASK); - *p++ = BIAS6 + ((n >> 12) & C6MASK); - *p++ = BIAS6 + ((n >> 6) & C6MASK); - *p++ = BIAS6 + (n & C6MASK); - } - - *pp = p; -} - -/****************************************************************************/ - -void -stringcounts(char *s, int *pn, size_t *pe) -/* Determine number of edges of graph6 or sparse6 string */ -{ - char *p; - int i,j,k,x,nb,v,n,need; - size_t count; - boolean done; - - n = graphsize(s); - *pn = n; - - p = s + (s[0] == ':') + SIZELEN(n); - - if (s[0] == ':') /* sparse6 */ - { - count = 0; - - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) {} - k = 0; - v = 0; - done = FALSE; - while (!done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (x & B(k)) ++v; - --k; - - need = nb; - j = 0; - while (need > 0 && !done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (need >= k) - { - j = (j << k) | (x & M(k)); - need -= k; k = 0; - } - else - { - k -= need; - j = (j << need) | ((x >> k) & M(need)); - need = 0; - } - } - if (done) continue; - - if (j > v) - v = j; - else if (v < n) - ++count; - } - } - else /* graph6 */ - { - count = 0; - for (; *p != '\n' && *p != '\0'; ++p) - count += bytecount[*p - BIAS6]; - } - - *pe = count; -} - -/****************************************************************************/ - -void -stringtograph(char *s, graph *g, int m) -/* Convert string (graph6 or sparse6 format) to graph. */ -/* Assumes g is big enough to hold it. */ -{ - char *p; - int n,i,j,k,v,x,nb,need; - size_t ii; - set *gi,*gj; - boolean done; - - n = graphsize(s); - - p = s + (s[0] == ':') + SIZELEN(n); - - if (TIMESWORDSIZE(m) < n) - gt_abort(">E stringtograph: impossible m value\n"); - - for (ii = m*(size_t)n; --ii > 0;) g[ii] = 0; g[0] = 0; - - if (s[0] != ':') /* graph6 format */ - { - k = 1; - for (j = 1; j < n; ++j) - { - gj = GRAPHROW(g,j,m); - - for (i = 0; i < j; ++i) - { - if (--k == 0) - { - k = 6; - x = *(p++) - BIAS6; - } - - if (x & TOPBIT6) - { - gi = GRAPHROW(g,i,m); - ADDELEMENT(gi,j); - ADDELEMENT(gj,i); - } - x <<= 1; - } - } - } - else /* sparse6 format */ - { - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) {} - - k = 0; - v = 0; - done = FALSE; - while (!done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (x & B(k)) ++v; - --k; - - need = nb; - j = 0; - while (need > 0 && !done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (need >= k) - { - j = (j << k) | (x & M(k)); - need -= k; k = 0; - } - else - { - k -= need; - j = (j << need) | ((x >> k) & M(need)); - need = 0; - } - } - if (done) continue; - - if (j > v) - v = j; - else if (v < n) - { - ADDELEMENT(GRAPHROW(g,v,m),j); - ADDELEMENT(GRAPHROW(g,j,m),v); - } - } - } -} - -/***********************************************************************/ - -graph* /* read graph into nauty format */ -readg(FILE *f, graph *g, int reqm, int *pm, int *pn) -/* graph6 and sparse6 formats are supported - f = an open file - g = place to put the answer (NULL for dynamic allocation) - reqm = the requested value of m (0 => compute from n) - *pm = the actual value of m - *pn = the value of n -*/ -{ - char *s,*p; - int m,n; - - if ((readg_line = gtools_getline(f)) == NULL) return NULL; - - s = readg_line; - if (s[0] == ':') - { - readg_code = SPARSE6; - p = s + 1; - } - else - { - readg_code = GRAPH6; - p = s; - } - - while (*p >= BIAS6 && *p <= MAXBYTE) - ++p; - if (*p == '\0') - gt_abort(">E readg: missing newline\n"); - else if (*p != '\n') - gt_abort(">E readg: illegal character\n"); - - n = graphsize(s); - if (readg_code == GRAPH6 && p - s != G6LEN(n)) - gt_abort(">E readg: truncated graph6 line\n"); - - if (reqm > 0 && TIMESWORDSIZE(reqm) < n) - gt_abort(">E readg: reqm too small\n"); - else if (reqm > 0) - m = reqm; - else - m = (n + WORDSIZE - 1) / WORDSIZE; - - if (g == NULL) - { - if ((g = (graph*)ALLOCS(n,m*sizeof(graph))) == NULL) - gt_abort(">E readg: malloc failed\n"); - } - - *pn = n; - *pm = m; - - stringtograph(s,g,m); - return g; -} - -/****************************************************************************/ - -void -stringtosparsegraph(char *s, sparsegraph *sg, int *nloops) -/* Convert string (graph6 or sparse6 format) to sparse graph. - * Assumes sg exists and is initialised - * Also returns the number of loops */ -{ - char *p,*q; - int n,nde,i,j,k,vv,x,nb,need; - int *d,*e; - size_t *v; - int loops; - boolean done; - - n = graphsize(s); - - q = s + (s[0] == ':') + SIZELEN(n); - - sg->nv = n; - - DYNALLOC1(size_t,sg->v,sg->vlen,n,"stringtosparsegraph"); - DYNALLOC1(int,sg->d,sg->dlen,n,"stringtosparsegraph"); - - v = sg->v; - d = sg->d; - for (i = 0; i < n; ++i) d[i] = 0; - - if (s[0] != ':') /* graph6 format */ - { - p = q; - k = 1; - for (j = 1; j < n; ++j) - { - for (i = 0; i < j; ++i) - { - if (--k == 0) - { - k = 6; - x = *(p++) - BIAS6; - } - - if (x & TOPBIT6) - { - d[i]++; - d[j]++; - } - x <<= 1; - } - } - - v[0] = 0; - for (i = 1; i < n; ++i) v[i] = v[i-1]+d[i-1]; - nde = v[n-1]+d[n-1]; - for (i = 0; i < n; ++i) d[i] = 0; - - sg->nde = nde; - DYNALLOC1(int,sg->e,sg->elen,nde,"stringtosparsegraph"); - e = sg->e; - - p = q; - k = 1; - - for (j = 1; j < n; ++j) - { - for (i = 0; i < j; ++i) - { - if (--k == 0) - { - k = 6; - x = *(p++) - BIAS6; - } - - if (x & TOPBIT6) - { - e[v[i]+d[i]++] = j; - e[v[j]+d[j]++] = i; - } - x <<= 1; - } - } - - *nloops = 0; - } - else /* sparse6 format */ - { - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) {} - - p = q; - - k = 0; - vv = 0; - done = FALSE; - loops = 0; - while (!done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (x & B(k)) ++vv; - --k; - - need = nb; - j = 0; - while (need > 0 && !done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (need >= k) - { - j = (j << k) | (x & M(k)); - need -= k; k = 0; - } - else - { - k -= need; - j = (j << need) | ((x >> k) & M(need)); - need = 0; - } - } - if (done) continue; - - if (j > vv) - vv = j; - else if (vv < n) - { - d[vv]++; - if (vv != j) d[j]++; - else ++loops; - } - } - - v[0] = 0; - for (i = 1; i < n; ++i) v[i] = v[i-1]+d[i-1]; - nde = v[n-1]+d[n-1]; - for (i = 0; i < n; ++i) d[i] = 0; - - sg->nde = nde; - DYNALLOC1(int,sg->e,sg->elen,nde,"stringtosparsegraph"); - e = sg->e; - - p = q; - - k = 0; - vv = 0; - done = FALSE; - while (!done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (x & B(k)) ++vv; - --k; - - need = nb; - j = 0; - while (need > 0 && !done) - { - if (k == 0) - { - x = *(p++); - if (x == '\n' || x == '\0') - { - done = TRUE; continue; - } - else - { - x -= BIAS6; k = 6; - } - } - if (need >= k) - { - j = (j << k) | (x & M(k)); - need -= k; k = 0; - } - else - { - k -= need; - j = (j << need) | ((x >> k) & M(need)); - need = 0; - } - } - if (done) continue; - - if (j > vv) - vv = j; - else if (vv < n) - { - e[v[vv]+d[vv]++] = j; - if (vv != j) e[v[j]+d[j]++] = vv; - } - } - *nloops = loops; - } -} - -/***********************************************************************/ - -sparsegraph* /* read graph into sparsegraph format */ -read_sg_loops(FILE *f, sparsegraph *sg, int *nloops) -/* graph6 and sparse6 formats are supported - * f = an open file - * sg = place to put the answer (NULL for dynamic allocation) - * - must be initialised if not NULL - * nloops := number of loops (each loop in a sparse6 string - * gives one loop in the sparse representation) - */ -{ - char *s,*p; - int n,loops; - - if ((readg_line = gtools_getline(f)) == NULL) return NULL; - - s = readg_line; - if (s[0] == ':') - { - readg_code = SPARSE6; - p = s + 1; - } - else - { - readg_code = GRAPH6; - p = s; - } - - while (*p >= BIAS6 && *p <= MAXBYTE) - ++p; - if (*p == '\0') - gt_abort(">E read_sg: missing newline\n"); - else if (*p != '\n') - gt_abort(">E read_sg: illegal character\n"); - - n = graphsize(s); - if (readg_code == GRAPH6 && p - s != G6LEN(n)) - gt_abort(">E read_sg: truncated graph6 line\n"); - - if (sg == NULL) - { - if ((sg = (sparsegraph*)ALLOCS(1,sizeof(sparsegraph))) == NULL) - gt_abort(">E read_sg: malloc failed\n"); - SG_INIT(*sg); - } - - stringtosparsegraph(s,sg,&loops); - *nloops = loops; - - return sg; -} - -/***********************************************************************/ - -sparsegraph* /* read graph into sparsegraph format */ -read_sg(FILE *f, sparsegraph *sg) -/* graph6 and sparse6 formats are supported - * *f = an open file - * *sg = place to put the answer (NULL for dynamic allocation) - * - must be initialised if not NULL - */ -{ - int loops; - - return read_sg_loops(f,sg,&loops); -} - -/****************************************************************************/ - -DYNALLSTAT(char,gcode,gcode_sz); /* Used by ntog6, ntos6 and sgtos6 */ -TLS_ATTR size_t s6len; -TLS_ATTR int readg_code; -TLS_ATTR char *readg_line; - -/****************************************************************************/ - -char* -ntog6(graph *g, int m, int n) -/* convert nauty graph to graph6 string, including \n and \0 */ -{ - int i,j,k; - char *p,x; - set *gj; - size_t ii; - - ii = G6LEN(n)+3; - - DYNALLOC1(char,gcode,gcode_sz,ii,"ntog6"); - - p = gcode; - encodegraphsize(n,&p); - - k = 6; - x = 0; - - for (j = 1; j < n; ++j) - { - gj = GRAPHROW(g,j,m); - for (i = 0; i < j; ++i) - { - x <<= 1; - if (ISELEMENT(gj,i)) x |= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - } - - if (k != 6) *p++ = BIAS6 + (x << k); - - *p++ = '\n'; - *p = '\0'; - - return gcode; -} - -/****************************************************************************/ - -char* -ntos6(graph *g, int m, int n) -/* convert nauty graph to sparse6 string, including \n and \0 */ -{ - int i,j,k; - char *p,x; - set *gj; - size_t ii; - int r,rr,topbit,nb,lastj; - char *plim; - - DYNALLOC1(char,gcode,gcode_sz,5000,"ntos6"); - - plim = gcode + gcode_sz - 20; - - gcode[0] = ':'; - p = gcode+1; - encodegraphsize(n,&p); - - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) - {} - topbit = 1 << (nb-1); - k = 6; - x = 0; - - lastj = 0; - for (j = 0; j < n; ++j) - { - gj = GRAPHROW(g,j,m); - for (i = 0; i <= j; ++i) - { - if (ISELEMENT(gj,i)) - { - if (p >= plim) - { - ii = p - gcode; - DYNREALLOC(char,gcode,gcode_sz, - 3*(gcode_sz/2)+10000,"ntos6"); - p = gcode + ii; - plim = gcode + gcode_sz - 20; - } - if (j == lastj) - { - x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - else - { - x = (x << 1) | 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - if (j > lastj+1) - { - for (r = 0, rr = j; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - lastj = j; - } - for (r = 0, rr = i; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - } - } - } - - if (k != 6) - { - if (k >= nb+1 && lastj == n-2 && n == (1<nv; - for (i = n-1, nb = 0; i != 0 ; i >>= 1, ++nb) {} - - ii = (size_t)(nb+1)*(n/6+sg->nde/3); - DYNALLOC1(char,gcode,gcode_sz,ii+1000,"ntos6"); - plim = gcode + gcode_sz - 20; - - gcode[0] = ':'; - p = gcode; - *p++ = ':'; - encodegraphsize(n,&p); - - topbit = 1 << (nb-1); - k = 6; - x = 0; - - lastj = 0; - for (j = 0; j < n; ++j) - { - vj = v[j]; - dj = d[j]; - for (l = 0; l < dj; ++l) - { - i = e[vj+l]; - if (i <= j) - { - if (p >= plim) - { - ii = p - gcode; - DYNREALLOC(char, - gcode,gcode_sz,5*(gcode_sz/4)+1000,"sgtos6"); - p = gcode + ii; - plim = gcode + gcode_sz - 20; - } - if (j == lastj) - { - x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - else - { - x = (x << 1) | 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - if (j > lastj+1) - { - for (r = 0, rr = j; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - lastj = j; - } - for (r = 0, rr = i; r < nb; ++r, rr <<= 1) - { - if (rr & topbit) x = (x << 1) | 1; - else x <<= 1; - if (--k == 0) - { - *p++ = BIAS6 + x; - k = 6; - x = 0; - } - } - } - } - } - - if (k != 6) - { - if (k >= nb+1 && lastj == n-2 && n == (1<nv; - - ii = G6LEN(n)+3; - - DYNALLOC1(char,gcode,gcode_sz,ii,"sgtog6"); - - p = gcode; - encodegraphsize(n,&p); - - bodylen = ((n * (size_t)(n-1)) / 2 + 5) / 6; - for (ii = 0; ii < bodylen; ++ii) p[ii] = 0; - p[bodylen] = '\n'; - p[bodylen+1] = '\0'; - - for (i = 0, org = 0; i < n; org += i, ++i) - { - ei = e + v[i]; - for (j = 0; j < d[i]; ++j) - if (ei[j] < i) - { - ii = ei[j] + org; - p[ii/6] |= g6bit[ii%6]; - } - } - - for (ii = 0; ii < bodylen; ++ii) p[ii] += BIAS6; - - return gcode; -} - -/**************************************************************************/ - -void -writeg6(FILE *f, graph *g, int m, int n) -/* write graph to file in graph6 format */ -{ - writeline(f,ntog6(g,m,n)); -} - -/**************************************************************************/ - -void -writes6(FILE *f, graph *g, int m, int n) -/* write graph to file in sparse6 format */ -{ - char *s; - - s = ntos6(g,m,n); - - if (fwrite(s,1,s6len,f) != s6len || ferror(f)) - gt_abort(">E writes6 : error on writing\n"); -} - -/**************************************************************************/ - -void -writeg6_sg(FILE *f, sparsegraph *g) -/* write undirected sparse graph to file in sparse6 format */ -{ - writeline(f,sgtog6(g)); -} - -/**************************************************************************/ - -void -writes6_sg(FILE *f, sparsegraph *g) -/* write undirected sparse graph to file in sparse6 format */ -{ - char *s; - - s = sgtos6(g); - - if (fwrite(s,1,s6len,f) != s6len || ferror(f)) - gt_abort(">E writes6 : error on writing\n"); -} - -/**************************************************************************/ - -DYNALLSTAT(unsigned char,buff,buff_sz); - -void -writepc_sg(FILE *f, sparsegraph *sg) -/* write a sparse graph in planar_code format - *f = an open file - *sg = the graph to write -*/ -{ - int bytes; - size_t i,j,len,k,*v,vi; - unsigned int w; - int n,*d,*e,di; - -#define BEPUT1(x) buff[j++]=(x); -#define BEPUT2(x) w=(x); buff[j++]=(w>>8)&0xFF; buff[j++]=w&0xff; -#define BEPUT4(x) w=(x); buff[j++]=(w>>24)&0xFF; buff[j++]=(w>>16)&0xff; \ - buff[j++]=(w>>8)&0xFF; buff[j++]=w&0xff; - - n = sg->nv; - SG_VDE(sg,v,d,e); - - if (n <= 255) bytes = 1; - else if (n <= 65535) bytes = 2; - else bytes = 4; - - len = bytes * (1 + n + (size_t)(sg->nde)); - if (bytes == 2) len += 1; - else if (bytes == 4) len += 3; - - DYNALLOC1(unsigned char,buff,buff_sz,len,"writepc_sg"); - - if (bytes == 1) - { - j = 0; - BEPUT1(n); - for (i = 0; i < n; ++i) - { - vi = v[i]; - di = d[i]; - for (k = 0; k < di; ++k) BEPUT1(e[vi+k]+1); - BEPUT1(0); - } - } - else if (bytes == 2) - { - j = 0; - BEPUT1(n); - BEPUT2(n); - for (i = 0; i < n; ++i) - { - vi = v[i]; - di = d[i]; - for (k = 0; k < di; ++k) BEPUT2(e[vi+k]+1); - BEPUT2(0); - } - } - else /* bytes==4 */ - { - j = 0; - BEPUT1(n); - BEPUT2(n); - BEPUT4(n); - for (i = 0; i < n; ++i) - { - vi = v[i]; - di = d[i]; - for (k = 0; k < di; ++k) BEPUT4(e[vi+k]+1); - BEPUT4(0); - } - } - - if (fwrite((void*)buff,1,j,f) != j) - gt_abort(">E writepc_sg : error on writing\n"); -} - -/**************************************************************************/ - -sparsegraph* -readpc_sg(FILE *f,sparsegraph *sg) -/* read a planar_code graph into sparse graph format - *f = an open file - *sg = place to put the answer (NULL for dynamic allocation) - - must be initialised if not NULL -*/ -{ -#define BEGET1(x) { x = GETC(f); } -#define BEGET2(x) { w1=GETC(f); w2=GETC(f); if (w2==EOF) x = EOF; else \ - x = (w1<<8) | w2; } -#define BEGET4(x) { w1=GETC(f); w2=GETC(f); w3=GETC(f); w4=GETC(f); \ - if (w4==EOF) x = EOF; \ - else x = (w1<<24) | (w2<<16) | (w3<<8) | w4; } - int w1,w2,w3,w4; - int bytes,n; - int i,j,*d,*e,di; - size_t *v,vi; - - BEGET1(n); - if (n == EOF || n < 0) return NULL; - else if (n > 0) - bytes = 1; - else - { - BEGET2(n); - if (n == EOF || n < 0) - gt_abort(">E readpc_sg : error 1 on reading\n"); - else if (n > 0) - bytes = 2; - else - { - BEGET4(n); - if (n == EOF || n < 0) - gt_abort(">E readpc_sg : error 2 on reading\n"); - else if (n > 0) - bytes = 4; - else - gt_abort(">E readpc_sg : error 3 on reading\n"); - } - } - - if (sg == NULL) - { - if ((sg = (sparsegraph*)ALLOCS(1,sizeof(sparsegraph))) == NULL) - gt_abort(">E readpc_sg: malloc failed\n"); - SG_INIT(*sg); - } - - SG_ALLOC(*sg,n,2*(size_t)n,"readpc_sg"); - SG_VDE(sg,v,d,e); - - vi = 0; - for (i = 0; i < n; ++i) - { - v[i] = vi; - di = 0; - do - { - if (bytes == 1) BEGET1(j) - else if (bytes == 2) BEGET2(j) - else BEGET4(j); - if (j == EOF) gt_abort(">E readpc_sg : error 4 on reading\n"); - - if (j > 0) - { - if (vi == sg->elen) - { - DYNREALLOC(int,sg->e,sg->elen,2*sg->elen,"readpc_sg"); - e = sg->e; - } - e[vi++] = j-1; - ++di; - } - else if (j == 0) - d[i] = di; - else - gt_abort(">E readpc_sg : error 5 on reading\n"); - } while (j != 0); - } - - sg->nv = n; - sg->nde = vi; - return sg; -} - -/**************************************************************************/ - -sparsegraph* -readpcle_sg(FILE *f,sparsegraph *sg) -/* read a planar_code graph into sparse graph format - *f = an open file - *sg = place to put the answer (NULL for dynamic allocation) - - must be initialised if not NULL -*/ -{ -#define LEGET1(x) { x = GETC(f); } -#define LEGET2(x) { w2=GETC(f); w1=GETC(f); if (w1==EOF) x = EOF; else \ - x = (w1<<8) | w2; } -#define LEGET4(x) { w4=GETC(f); w3=GETC(f); w2=GETC(f); w1=GETC(f); \ - if (w1==EOF) x = EOF; \ - else x = (w1<<24) | (w2<<16) | (w3<<8) | w4; } - int w1,w2,w3,w4; - int bytes,n; - int i,j,*d,*e,di; - size_t *v,vi; - - LEGET1(n); - if (n == EOF || n < 0) return NULL; - else if (n > 0) - bytes = 1; - else - { - LEGET2(n); - if (n == EOF || n < 0) - gt_abort(">E readpcle_sg : error 1 on reading\n"); - else if (n > 0) - bytes = 2; - else - { - LEGET4(n); - if (n == EOF || n < 0) - gt_abort(">E readpcle_sg : error 2 on reading\n"); - else if (n > 0) - bytes = 4; - else - gt_abort(">E readpcle_sg : error 3 on reading\n"); - } - } - - if (sg == NULL) - { - if ((sg = (sparsegraph*)ALLOCS(1,sizeof(sparsegraph))) == NULL) - gt_abort(">E readpcle_sg: malloc failed\n"); - SG_INIT(*sg); - } - - SG_ALLOC(*sg,n,2*(size_t)n,"readpcle_sg"); - SG_VDE(sg,v,d,e); - - vi = 0; - for (i = 0; i < n; ++i) - { - v[i] = vi; - di = 0; - do - { - if (bytes == 1) LEGET1(j) - else if (bytes == 2) LEGET2(j) - else LEGET4(j); - if (j == EOF) gt_abort(">E readpcle_sg : error 4 on reading\n"); - - if (j > 0) - { - if (vi == sg->elen) - { - DYNREALLOC(int,sg->e,sg->elen,2*sg->elen,"readpcle_sg"); - e = sg->e; - } - e[vi++] = j-1; - ++di; - } - else if (j == 0) - d[i] = di; - else - gt_abort(">E readpcle_sg : error 5 on reading\n"); - } while (j != 0); - } - - sg->nv = n; - sg->nde = vi; - return sg; -} - -/**************************************************************************/ - -void -writelast(FILE *f) -/* write last graph read by readg() assuming no intervening gtools_getline() */ -{ - writeline(f,readg_line); -} - -/**************************************************************************/ - -int -longvalue(char **ps, long *l) -{ - boolean neg,pos; - long sofar,last; - char *s; - - s = *ps; - pos = neg = FALSE; - if (*s == '-') - { - neg = TRUE; - ++s; - } - else if (*s == '+') - { - pos = TRUE; - ++s; - } - - if (*s < '0' || *s > '9') - { - *ps = s; - return (pos || neg) ? ARG_ILLEGAL : ARG_MISSING; - } - - sofar = 0; - - for (; *s >= '0' && *s <= '9'; ++s) - { - last = sofar; - sofar = sofar * 10 + (*s - '0'); - if (sofar < last || sofar > MAXARG) - { - *ps = s; - return ARG_TOOBIG; - } - } - *ps = s; - *l = neg ? -sofar : sofar; - return ARG_OK; -} - -/*************************************************************************/ - -void -arg_long(char **ps, long *val, char *id) -{ - int code; - - code = longvalue(ps,val); - if (code == ARG_MISSING || code == ARG_ILLEGAL) - { - fprintf(stderr,">E %s: missing argument value\n",id); - gt_abort(NULL); - } - else if (code == ARG_TOOBIG) - { - fprintf(stderr,">E %s: argument value too large\n",id); - gt_abort(NULL); - } -} - -/*************************************************************************/ - -void -arg_int(char **ps, int *val, char *id) -{ - int code; - long longval; - - code = longvalue(ps,&longval); - *val = longval; - if (code == ARG_MISSING || code == ARG_ILLEGAL) - { - fprintf(stderr,">E %s: missing argument value\n",id); - gt_abort(NULL); - } - else if (code == ARG_TOOBIG || *val != longval) - { - fprintf(stderr,">E %s: argument value too large\n",id); - gt_abort(NULL); - } -} - -/************************************************************************/ - -boolean -strhaschar(char *s, int c) -/* Check if s contains c. Saves the bother of figuring out whether - strchr() is available, or index() or whatever. */ -{ - int i; - - for (i = 0; s[i] != '\0'; ++i) - if (s[i] == c) return TRUE; - - return FALSE; -} - -/************************************************************************/ - -void -arg_range(char **ps, char *sep, long *val1, long *val2, char *id) -{ - int code; - char *s; - - s = *ps; - code = longvalue(&s,val1); - if (code != ARG_MISSING) - { - if (code == ARG_ILLEGAL) - { - fprintf(stderr,">E %s: bad range\n",id); - gt_abort(NULL); - } - else if (code == ARG_TOOBIG) - { - fprintf(stderr,">E %s: value too big\n",id); - gt_abort(NULL); - } - } - else if (*s == '\0' || !strhaschar(sep,*s)) - { - fprintf(stderr,">E %s: missing value\n",id); - gt_abort(NULL); - } - else - *val1 = -NOLIMIT; - - if (*s != '\0' && strhaschar(sep,*s)) - { - ++s; - code = longvalue(&s,val2); - if (code == ARG_MISSING) - *val2 = NOLIMIT; - else if (code == ARG_TOOBIG) - { - fprintf(stderr,">E %s: value too big\n",id); - gt_abort(NULL); - } - else if (code == ARG_ILLEGAL) - { - fprintf(stderr,">E %s: illegal range\n",id); - gt_abort(NULL); - } - } - else - *val2 = *val1; - - *ps = s; -} - -/***********************************************************************/ - -void -writerange(FILE *f, int c, long lo, long hi) /* Write a range. */ -{ - if (c != '\0') fprintf(f,"%c",c); - if (lo != -NOLIMIT) fprintf(f,"%ld",lo); - if (lo != hi) - { - fprintf(stderr,":"); - if (hi != NOLIMIT) fprintf(f,"%ld",hi); - } -} - -/************************************************************************/ - -void -gt_abort(char *msg) /* Write message and halt. */ -{ - if (msg) fprintf(stderr,"%s",msg); - ABORT(">E gtools"); -} - -/************************************************************************/ - -char* -stringcopy(char *s) /* duplicate string */ -{ - char *scopy; - size_t i,len; - - for (len = 0; s[len] != '\0'; ++len) - {} - - if ((scopy = (char*)ALLOCS(len+1,1)) == NULL) - gt_abort(">E stringcopy: malloc failed\n"); - - for (i = 0; i <= len; ++i) - scopy[i] = s[i]; - - return scopy; -} - -/***************************************************************************** -* * -* gtools_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -gtools_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in gtools.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in gtools.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in gtools.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: gtools.c version mismatch\n"); - exit(1); - } -} diff --git a/tools/nauty25r9_unix/gtools.h b/tools/nauty25r9_unix/gtools.h deleted file mode 100644 index 928e149..0000000 --- a/tools/nauty25r9_unix/gtools.h +++ /dev/null @@ -1,240 +0,0 @@ -/***************************************************************************** -* This is the main header file for gtools. nauty version 2.5. * -* Subject to the copyright notice in nauty.h. * -* gtools.h. Generated from gtools-h.in by configure. -*****************************************************************************/ - -/* The parts between the ==== lines are modified by configure when -creating gtools.h out of gtools-h.in. If configure is not being -used, it is necessary to check they are correct. -====================================================================*/ - -#ifndef _GTOOLS_H_ /* only process this file once */ -#define _GTOOLS_H_ - -#define HAVE_ERRNO_H 1 /* exists */ -#define HAVE_PERROR 1 /* perror() exists */ -#define HAVE_PIPE 1 /* pipe() exists */ -#define HAVE_WAIT 1 /* wait() exists */ -#define HAVE_WAIT_H 1 /* exists */ -#define HAVE_POPEN 1 /* popen() and pclose() exist */ -#define POPEN_DEC 1 /* popen() is declared in stdio.h */ -#define FTELL_DEC 1 /* ftell() is declared in stdio.h */ -#define FDOPEN_DEC 1 /* fdopen() is declared in stdio.h */ -#define SORTPROG "sort" /* name of sort program */ -#define SORT_NEWKEY 1 /* if -k is supported */ -#define HAVE_PID_T 1 /* pid_t is defined */ -#define PUTENV_DEC 1 /* putenv() is declared in stdlib.h */ -#define SETENV_DEC 1 /* setenv() is declared in stdlib.h */ -#define HAVE_PUTENV 1 /* putenv() exists */ -#define HAVE_SETENV 1 /* setenv() exists */ -#define HAVE_PTHREADS 1 /* Posix threads exist */ -#define HAVE_PTHREAD_H 1 /* exists */ -#define HAVE_FSEEKO 1 /* fseeko() and ftello() exist */ -#define HAVE_SIGACTION 1 /* sigaction() exists */ -#define HAVE_SIGPROCMASK 1 /* sigprocmask() exists */ - -/* ++++++ This file is automatically generated, don't edit it by hand! ++++++ */ - -/*==================================================================*/ - -#ifndef MAXN -#define MAXN 0 -#endif - -#define SIZELEN(n) ((n)<=SMALLN?1:((n)<=SMALLISHN?4:8)) - /* length of size code in bytes */ -#define G6LEN(n) (SIZELEN(n) \ - + ((size_t)(n)/12)*((size_t)(n)-1) + (((size_t)(n)%12)*((size_t)(n)-1)+11)/12) - /* exactly graph6 string length excluding \n\0 - This twisted expression works up to n=227023 in 32-bit arithmetic - and for larger n if size_t has 64 bits. */ - -#include "naututil.h" /* which includes stdio.h */ -#include "nausparse.h" - -#if HAVE_ERRNO_H -#include -#else -extern int errno; -#endif - -#if HAVE_WAIT_H -#include -#endif - -#if HAVE_SIGACTION -#include -#endif - -#if HAVE_PERROR -#define ABORT(msg) do {if (errno != 0) perror(msg); exit(1);} while(0) -#else -#define ABORT(msg) do {exit(1);} while(0) -#endif - -#if PUTENV_DEC && HAVE_PUTENV -#define SET_C_COLLATION putenv("LC_COLLATE=C") -#elif SETENV_DEC && HAVE_SETENV -#define SET_C_COLLATION setenv("LC_COLLATE","C",1) -#elif HAVE_PUTENV -int putenv(char*); -#define SET_C_COLLATION putenv("LC_COLLATE=C") -#elif HAVE_SETENV -int setenv(const char*,const char*,int); -#define SET_C_COLLATION setenv("LC_COLLATE","C",1) -#else -#define SET_C_COLLATION -#endif - -#if HAS_STDIO_UNLOCK && !defined(NAUTY_IN_MAGMA) && !defined(IS_JAVA) -#define FLOCKFILE(f) flockfile(f) -#define FUNLOCKFILE(f) funlockfile(f) -#define GETC(f) getc_unlocked(f) -#undef PUTC -#define PUTC(c,f) putc_unlocked(c,f) -#else -#define FLOCKFILE(f) -#define FUNLOCKFILE(f) -#define GETC(f) getc(f) -#undef PUTC -#define PUTC(c,f) putc(c,f) -#endif - -#define BIAS6 63 -#define MAXBYTE 126 -#define SMALLN 62 -#define SMALLISHN 258047 -#define TOPBIT6 32 -#define C6MASK 63 - -#define GRAPH6_HEADER ">>graph6<<" -#define SPARSE6_HEADER ">>sparse6<<" -#define PLANARCODE_HEADER ">>planar_code<<" -#define PLANARCODELE_HEADER ">>planar_code le<<" -#define PLANARCODEBE_HEADER ">>planar_code be<<" -#define EDGECODE_HEADER ">>edge_code<<" - -#define GRAPH6 1 -#define SPARSE6 2 -#define PLANARCODE 4 -#define PLANARCODELE 8 -#define PLANARCODEBE 16 -#define EDGECODE 32 -#define PLANARCODEANY (PLANARCODE|PLANARCODELE|PLANARCODEBE) -#define UNKNOWN_TYPE 256 -#define HAS_HEADER 512 - -#define ARG_OK 0 -#define ARG_MISSING 1 -#define ARG_TOOBIG 2 -#define ARG_ILLEGAL 3 - -#define MAXARG 2000000000L -#define NOLIMIT (MAXARG+31L) - -#define SWBOOLEAN(c,bool) if (sw==c) bool=TRUE; -#define SWINT(c,bool,val,id) if (sw==c) \ - {bool=TRUE;arg_int(&arg,&val,id);} -#define SWLONG(c,bool,val,id) if (sw==c) \ - {bool=TRUE;arg_long(&arg,&val,id);} -#define SWRANGE(c,sep,bool,val1,val2,id) if (sw==c) \ - {bool=TRUE;arg_range(&arg,sep,&val1,&val2,id);} - -#ifdef HELPTEXT2 -#define PUTHELPTEXT printf("\nUsage: %s\n\n%s",USAGE,HELPTEXT1);\ - printf("%s",HELPTEXT2); -#else -#define PUTHELPTEXT printf("\nUsage: %s\n\n%s",USAGE,HELPTEXT) -#endif - -#define HELP if (argc > 1 && (strcmp(argv[1],"-help")==0 \ - || strcmp(argv[1],"/?")==0 \ - || strcmp(argv[1],"--help")==0)) \ - { PUTHELPTEXT; return 0;} -#define GETHELP \ -fprintf(stderr," Use %s -help to see more detailed instructions.\n",argv[0]) - -#define alloc_error gt_abort - -#define CATMSG0(fmt) sprintf(msg+strlen(msg),fmt) -#define CATMSG1(fmt,x1) sprintf(msg+strlen(msg),fmt,x1) -#define CATMSG2(fmt,x1,x2) sprintf(msg+strlen(msg),fmt,x1,x2) -#define CATMSG3(fmt,x1,x2,x3) sprintf(msg+strlen(msg),fmt,x1,x2,x3) -#define CATMSG4(fmt,x1,x2,x3,x4) sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4) -#define CATMSG5(fmt,x1,x2,x3,x4,x5) sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4,x5) -#define CATMSG6(fmt,x1,x2,x3,x4,x5,x6) \ - sprintf(msg+strlen(msg),fmt,x1,x2,x3,x4,x5,x6) - -/************************************************************************/ - -/* ++++++ This file is automatically generated, don't edit it by hand! ++++++ */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void gtools_check(int,int,int,int); -extern FILE *opengraphfile(char*,int*,boolean,long); -extern void writeline(FILE*,char*); -extern char *gtools_getline(FILE*); /* formerly getline() */ -extern int graphsize(char*); -extern void stringcounts(char*,int*,size_t*); -extern void stringtograph(char*,graph*,int); -extern size_t edgecount(char*); -extern graph *readg(FILE*,graph*,int,int*,int*); -extern char *ntog6(graph*,int,int); -extern char *ntos6(graph*,int,int); -extern char *sgtos6(sparsegraph*); -extern char *sgtog6(sparsegraph*); -extern void writeg6(FILE*,graph*,int,int); -extern void writes6(FILE*,graph*,int,int); -extern void writeg6_sg(FILE*,sparsegraph*); -extern void writes6_sg(FILE*,sparsegraph*); -extern void writepc_sg(FILE*,sparsegraph*); -extern void stringtosparsegraph(char*,sparsegraph*,int*); -extern sparsegraph *read_sg(FILE*,sparsegraph*); -extern sparsegraph *read_sg_loops(FILE*,sparsegraph*,int*); -extern sparsegraph *readpc_sg(FILE*,sparsegraph*); -extern sparsegraph *readpcle_sg(FILE*,sparsegraph*); -extern char *getecline(FILE*); -extern void writelast(FILE*); -extern int longval(char**,long*); -extern void arg_int(char**,int*,char*); -extern void arg_long(char**,long*,char*); -extern void arg_range(char**,char*,long*,long*,char*); -extern void writerange(FILE*,int,long,long); -extern void gt_abort(char*); -extern char *stringcopy(char*); -extern boolean strhaschar(char*,int); - -extern void fcanonise(graph*,int,int,graph*,char*,boolean); -extern void fcanonise_inv - (graph*,int,int,graph*,char*,void(*)(graph*,int*,int*,int, - int,int,int*,int,boolean,int,int),int,int,int,boolean); -extern void fcanonise_inv_sg - (sparsegraph*,int,int,sparsegraph*,char*,void(*)(graph*,int*,int*, - int,int,int,int*,int,boolean,int,int),int,int,int,boolean); -extern void fgroup(graph*,int,int,char*,int*,int*); -extern void fgroup_inv - (graph*,int,int,char*,int*,int*,void(*)(graph*,int*,int*,int, - int,int,int*,int,boolean,int,int),int,int,int); -extern int istransitive(graph*,int,int,graph*); -extern void tg_canonise(graph*,graph*,int,int); - -extern TLS_ATTR int readg_code; -extern TLS_ATTR char *readg_line; -extern TLS_ATTR size_t ogf_linelen; -extern TLS_ATTR boolean is_pipe; - -#ifdef __cplusplus -} -#endif - -#ifdef CPUDEFS -CPUDEFS -#endif - -/* ++++++ This file is automatically generated, don't edit it by hand! ++++++ */ - -#endif /* _GTOOLS_H_ */ diff --git a/tools/nauty25r9_unix/gtools.o b/tools/nauty25r9_unix/gtools.o deleted file mode 100644 index 209ac4da99c6777571f737d73222ac015668dda3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40992 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 V!`BHv_^=I^=c!+@;nPL``QHi_eewVR diff --git a/tools/nauty25r9_unix/gtoolsW.o b/tools/nauty25r9_unix/gtoolsW.o deleted file mode 100644 index d2f06a15c484bc3c8b112a211584678378bb2c34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40608 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 z z{p2N<4N~|T@!|n-m-O=7x_mEjd2aonjsDhCIFKjwE$PdId?hwqo?D+`!{zyOdA>>V zk>|(nwb9G-;IG(ld5+sj3~)(4^1QY@A1!ftF8fJ4z1X*KinuE2N3&(DgI)eXo(G%=c(_v;qpB76E<9)r maxd) - { - maxd = d; - maxdc = 1; - } - - dor |= d; - ned += d; - } - - *mindeg = mind; - *mincount = mindc; - *maxdeg = maxd; - *maxcount = maxdc; - *edges = ned / 2; - *eulerian = (dor & 1) == 0; -} - -/*********************************************************************/ - -boolean -isconnected1(graph *g, int n) -/* test if g is connected (m=1) */ -{ - setword seen,expanded,toexpand; - int i; - - seen = bit[0]; - expanded = 0; - - while ((toexpand = (seen & ~expanded)) != 0) - { - i = FIRSTBITNZ(toexpand); - expanded |= bit[i]; - seen |= g[i]; - } - - return POPCOUNT(seen) == n; -} - -/**************************************************************************/ - -boolean -isconnected(graph *g, int m, int n) -/* Test if g is connected */ -{ - int i,head,tail,w; - set *gw; -#if MAXN - int queue[MAXN],visited[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); - DYNALLSTAT(int,visited,visited_sz); -#endif - - if (m == 1) return isconnected1(g,n); - -#if !MAXN - DYNALLOC1(int,queue,queue_sz,n,"isconnected"); - DYNALLOC1(int,visited,visited_sz,n,"isconnected"); -#endif - - for (i = 0; i < n; ++i) visited[i] = 0; - - queue[0] = 0; - visited[0] = 1; - - head = 0; - tail = 1; - while (head < tail) - { - w = queue[head++]; - gw = GRAPHROW(g,w,m); - for (i = -1; (i = nextelement(gw,m,i)) >= 0;) - { - if (!visited[i]) - { - visited[i] = 1; - queue[tail++] = i; - } - } - } - - return tail == n; -} - -/**************************************************************************/ - -boolean -issubconnected(graph *g, set *sub, int m, int n) -/* Test if the subset of g induced by sub is connected. Empty is connected. */ -{ - int i,head,tail,w,subsize; - set *gw; -#if MAXN - int queue[MAXN],visited[MAXN]; - setword subw[MAXM]; -#else - DYNALLSTAT(int,queue,queue_sz); - DYNALLSTAT(int,visited,visited_sz); - DYNALLSTAT(set,subw,subw_sz); - - DYNALLOC1(int,queue,queue_sz,n,"issubconnected"); - DYNALLOC1(int,visited,visited_sz,n,"issubconnected"); - DYNALLOC1(set,subw,subw_sz,m,"issubconnected"); -#endif - - subsize = 0; - for (i = 0; i < m; ++i) subsize += (sub[i] ? POPCOUNT(sub[i]) : 0); - - if (subsize <= 1) return TRUE; - - for (i = 0; i < n; ++i) visited[i] = 0; - - i = nextelement(sub,m,-1); - queue[0] = i; - visited[i] = 1; - - head = 0; - tail = 1; - while (head < tail) - { - w = queue[head++]; - gw = GRAPHROW(g,w,m); - for (i = 0; i < m; ++i) subw[i] = gw[i] & sub[i]; - - for (i = -1; (i = nextelement(subw,m,i)) >= 0;) - { - if (!visited[i]) - { - visited[i] = 1; - queue[tail++] = i; - } - } - } - - return tail == subsize; -} - -/**********************************************************************/ - -boolean -isbiconnected1(graph *g, int n) -/* Test if g is biconnected; version for m=1. */ -{ - int sp,v,w; - setword sw; - int numvis; - setword visited; - int num[WORDSIZE],lp[WORDSIZE],stack[WORDSIZE]; - - if (n <= 2) return FALSE; - - visited = bit[0]; - stack[0] = 0; - num[0] = 0; - lp[0] = 0; - numvis = 1; - sp = 0; - v = 0; - - for (;;) - { - if ((sw = g[v] & ~visited)) /* not "==" */ - { - w = v; - v = FIRSTBITNZ(sw); /* visit next child */ - stack[++sp] = v; - visited |= bit[v]; - lp[v] = num[v] = numvis++; - sw = g[v] & visited & ~bit[w]; - while (sw) - { - w = FIRSTBITNZ(sw); - sw &= ~bit[w]; - if (num[w] < lp[v]) lp[v] = num[w]; - } - } - else - { - w = v; /* back up to parent */ - if (sp <= 1) return numvis == n; - v = stack[--sp]; - if (lp[w] >= num[v]) return FALSE; - if (lp[w] < lp[v]) lp[v] = lp[w]; - } - } -} -/**********************************************************************/ - -boolean -isbiconnected(graph *g, int m, int n) -/* test if g is biconnected */ -{ - int sp,v,vc; - int numvis; - set *gv; -#if MAXN - int num[MAXN],lp[MAXN],stack[MAXN]; -#else - DYNALLSTAT(int,num,num_sz); - DYNALLSTAT(int,lp,lp_sz); - DYNALLSTAT(int,stack,stack_sz); -#endif - - if (n <= 2) return FALSE; - if (m == 1) return isbiconnected1(g,n); - -#if !MAXN - DYNALLOC1(int,num,num_sz,n,"isbiconnected"); - DYNALLOC1(int,lp,lp_sz,n,"isbiconnected"); - DYNALLOC1(int,stack,stack_sz,n,"isbiconnected"); -#endif - - num[0] = 0; - for (v = 1; v < n; ++v) num[v] = -1; - lp[0] = 0; - numvis = 1; - sp = 0; - v = 0; - vc = -1; - gv = (set*)g; - - for (;;) - { - vc = nextelement(gv,m,vc); - if (vc < 0) - { - if (sp <= 1) return numvis == n; - vc = v; - v = stack[--sp]; - gv = GRAPHROW(g,v,m); - if (lp[vc] >= num[v]) return FALSE; - if (lp[vc] < lp[v]) lp[v] = lp[vc]; - } - else if (num[vc] < 0) - { - stack[++sp] = vc; - v = vc; - gv = GRAPHROW(g,v,m); - vc = -1; - lp[v] = num[v] = numvis++; - } - else if (vc != v) - { - if (num[vc] < lp[v]) lp[v] = num[vc]; - } - } -} - -/**************************************************************************/ - -boolean -twocolouring(graph *g, int *colour, int m, int n) -/* If g is bipartite, set colour[*] to 0 or 1 to indicate an example - of 2-colouring and return TRUE. Otherwise return FALSE. - Colour 0 is assigned to the first vertex of each component. */ -{ - int i,head,tail,v,w,need; - set *gw; -#if MAXN - int queue[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); -#endif - -#if !MAXN - DYNALLOC1(int,queue,queue_sz,n,"twocolouring"); -#endif - - for (i = 0; i < n; ++i) colour[i] = -1; - - for (v = 0; v < n; ++v) - if (colour[v] < 0) - { - queue[0] = v; - colour[v] = 0; - - head = 0; - tail = 1; - while (head < tail) - { - w = queue[head++]; - need = 1 - colour[w]; - gw = GRAPHROW(g,w,m); - for (i = -1; (i = nextelement(gw,m,i)) >= 0;) - { - if (colour[i] < 0) - { - colour[i] = need; - queue[tail++] = i; - } - else if (colour[i] != need) - return FALSE; - } - } - } - - return TRUE; -} - -/**************************************************************************/ - -boolean -isbipartite(graph *g, int m, int n) -/* Test if g is bipartite */ -{ -#if MAXN - int colour[MAXN]; -#else - DYNALLSTAT(int,colour,colour_sz); -#endif - - /* if (m == 1) return isbipartite1(g,n); */ - -#if !MAXN - DYNALLOC1(int,colour,colour_sz,n,"isbipartite"); -#endif - - return twocolouring(g,colour,m,n); -} - -/**************************************************************************/ - -int -girth(graph *g, int m, int n) -/* Find the girth of graph g. 0 means acyclic. */ -{ - int i,head,tail,v,w; - int best,c,dw1; - set *gw; -#if MAXN - int dist[MAXN],queue[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); - DYNALLSTAT(int,dist,dist_sz); - - DYNALLOC1(int,queue,queue_sz,n,"girth"); - DYNALLOC1(int,dist,dist_sz,n,"girth"); -#endif - - best = n+1; - - for (v = 0; v < n; ++v) - { - for (i = 0; i < n; ++i) dist[i] = -1; - - queue[0] = v; - dist[v] = 0; - - head = 0; - tail = 1; - while (head < tail) - { - w = queue[head++]; - gw = GRAPHROW(g,w,m); - dw1 = dist[w] + 1; - for (i = -1; (i = nextelement(gw,m,i)) >= 0;) - { - if (dist[i] < 0) - { - dist[i] = dw1; - queue[tail++] = i; - } - else if (dist[i] >= dist[w]) - { - c = dw1 + dist[i]; - if (c < best) best = c; - if ((c & 1) != 0 || c > best) break; - } - } - if (i >= 0) break; - } - if (best == 3) return 3; - } - - return (best > n ? 0 : best); -} - -/**************************************************************************/ - -void -find_dist(graph *g, int m, int n, int v, int *dist) -/* Put in dist[0..n-1] the distance of each vertex from v. - Vertices in a different component are given the distance n. */ -{ - int i,head,tail,w; - set *gw; -#if MAXN - int queue[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); -#endif - -#if !MAXN - DYNALLOC1(int,queue,queue_sz,n,"isconnected"); -#endif - - for (i = 0; i < n; ++i) dist[i] = n; - - queue[0] = v; - dist[v] = 0; - - head = 0; - tail = 1; - while (tail < n && head < tail) - { - w = queue[head++]; - gw = GRAPHROW(g,w,m); - for (i = -1; (i = nextelement(gw,m,i)) >= 0;) - { - if (dist[i] == n) - { - dist[i] = dist[w] + 1; - queue[tail++] = i; - } - } - } -} - -/**************************************************************************/ - -void -find_dist2(graph *g, int m, int n, int v, int w, int *dist) -/* Put in dist[0..n-1] the distance of each vertex from {v,w}. - Vertices in a different component are given the distance n. */ -{ - int i,head,tail,x; - set *gx; -#if MAXN - int queue[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); -#endif - -#if !MAXN - DYNALLOC1(int,queue,queue_sz,n,"isconnected"); -#endif - - for (i = 0; i < n; ++i) dist[i] = n; - - queue[0] = v; - queue[1] = w; - dist[v] = dist[w] = 0; - - head = 0; - tail = 2; - while (tail < n && head < tail) - { - x = queue[head++]; - gx = GRAPHROW(g,x,m); - for (i = -1; (i = nextelement(gx,m,i)) >= 0;) - { - if (dist[i] == n) - { - dist[i] = dist[x] + 1; - queue[tail++] = i; - } - } - } -} - -/**************************************************************************/ - -void -diamstats(graph *g, int m, int n, int *radius, int *diameter) -/* Find the radius and diameter. Both -1 if g is disconnected. - We use an O(mn) algorithm, which is pretty disgraceful. */ -{ - int v,i,head,tail,w; - int ecc,diam,rad; - set *gw; -#if MAXN - int queue[MAXN],dist[MAXN]; -#else - DYNALLSTAT(int,queue,queue_sz); - DYNALLSTAT(int,dist,dist_sz); -#endif - - /* if (m == 1) {diamstats1(g,n,radius,diameter); return; } */ - -#if !MAXN - DYNALLOC1(int,queue,queue_sz,n,"isconnected"); - DYNALLOC1(int,dist,dist_sz,n,"isconnected"); -#endif - - diam = -1; - rad = n; - - for (v = 0; v < n; ++v) - { - for (i = 0; i < n; ++i) dist[i] = -1; - - queue[0] = v; - dist[v] = 0; - - head = 0; - tail = 1; - while (tail < n && head < tail) - { - w = queue[head++]; - gw = GRAPHROW(g,w,m); - for (i = -1; (i = nextelement(gw,m,i)) >= 0;) - { - if (dist[i] < 0) - { - dist[i] = dist[w] + 1; - queue[tail++] = i; - } - } - } - - if (tail < n) - { - *diameter = *radius = -1; - return; - } - - ecc = dist[queue[n-1]]; - - if (ecc > diam) diam = ecc; - if (ecc < rad) rad = ecc; - } - - *diameter = diam; - *radius = rad; -} - -/**************************************************************************/ - -static long -maxclnode1(graph *g, setword cliq, setword cov, int maxv) -/* Internal search node. cov has all the vertices outside cliq that - * cover all of cliq. maxv is the last vertex of cliq. - */ -{ - long ans; - int i; - setword w; - - if (cov == 0) return 1; - - ans = 0; - w = cov & BITMASK(maxv); - while (w) - { - TAKEBIT(i,w); - ans += maxclnode1(g,cliq|bit[i],cov&g[i]&~bit[i],i); - } - return ans; -} - -long -maxcliques(graph *g, int m, int n) -/* Find the number of maximal cliques */ -{ -#if MAXN - set clique[MAXM],covers[MAXM]; -#else - DYNALLSTAT(set,clique,clique_sz); - DYNALLSTAT(set,covers,covers_sz); -#endif - int i; - long ans; - - if (m == 1) - { - ans = 0; - for (i = 0; i < n; ++i) - ans += maxclnode1(g,bit[i],g[i],i); - } - else - { - fprintf(stderr,">E maxcliques() is only implemented for m=1\n"); - exit(1); - } - - return ans; -} diff --git a/tools/nauty25r9_unix/gutil1.o b/tools/nauty25r9_unix/gutil1.o deleted file mode 100644 index f7f0470e80ca175e618d5d78162ee4d8097fb946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20488 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 HJJ 0; ) - { - gj = GRAPHROW(g,j,m); - kw = SETWD(j); - w = gi[kw] & gj[kw] & BITMASK(SETBT(j)); - if (w) total += POPCOUNT(w); - for (k = kw+1; k < m; ++k) - { - w = gi[k] & gj[k]; - if (w) total += POPCOUNT(w); - } - } - - return total; -} - -/**************************************************************************/ - -void -commonnbrs(graph *g, int *minadj, int *maxadj, int *minnon, int *maxnon, - int m, int n) -/* Count the common neighbours of pairs of vertices, and give the minimum - and maximum for adjacent and non-adjacent vertices. Undirected only. - Null minimums are n+1 and null maximums are -1. -*/ -{ - int j,k; - int mina,maxa,minn,maxn; - int cn; - set *gi,*gj; - setword w; - - mina = minn = n+1; - maxa = maxn = -1; - - for (j = 0, gj = g; j < n; ++j, gj += m) - for (gi = g; gi != gj; gi += m) - { - cn = 0; - for (k = 0; k < m; ++k) - { - w = gi[k] & gj[k]; - if (w) cn += POPCOUNT(w); - } - - if (ISELEMENT(gi,j)) - { - if (cn < mina) mina = cn; - if (cn > maxa) maxa = cn; - } - else - { - if (cn < minn) minn = cn; - if (cn > maxn) maxn = cn; - } - } - - *minadj = mina; - *maxadj = maxa; - *minnon = minn; - *maxnon = maxn; -} - -/**************************************************************************/ - -void -delete1(graph *g, graph *h, int v, int n) -/* Delete vertex v from g, result in h */ -{ - setword mask1,mask2,gi; - int i; - - mask1 = ALLMASK(v); - mask2 = BITMASK(v); - - for (i = 0; i < v; ++i) - { - gi = g[i]; - h[i] = (gi & mask1) | ((gi & mask2) << 1); - } - for (i = v; i < n-1; ++i) - { - gi = g[i+1]; - h[i] = (gi & mask1) | ((gi & mask2) << 1); - } -} - -/**************************************************************************/ - -void -contract1(graph *g, graph *h, int v, int w, int n) -/* Contract distinct vertices v and w (not necessarily adjacent) - with result in h. No loops are created. */ -{ - int x,y; - setword bitx,bity,mask1,mask2; - int i; - - if (w < v) - { - x = w; - y = v; - } - else - { - x = v; - y = w; - } - - bitx = bit[x]; - bity = bit[y]; - mask1 = ALLMASK(y); - mask2 = BITMASK(y); - - for (i = 0; i < n; ++i) - if (g[i] & bity) - h[i] = (g[i] & mask1) | bitx | ((g[i] & mask2) << 1); - else - h[i] = (g[i] & mask1) | ((g[i] & mask2) << 1); - - h[x] |= h[y]; - for (i = y+1; i < n; ++i) h[i-1] = h[i]; - h[x] &= ~bitx; -} - -/**************************************************************************/ - -static TLS_ATTR int knm[18][16]; /* knm[n,m] = conncontent(K_n - m*K_2) */ -static TLS_ATTR boolean knm_computed = FALSE; - -int -conncontent(graph *g, int m, int n) -/* number of connected spanning subgraphs with an even number - of edges minus the number with an odd number of edges */ -{ - graph h[WORDSIZE]; - setword gj; - int i,j,v1,v2,x,y; - int minv,mindeg,deg,goodv; - long ne; - - if (m > 1) ABORT("conncontent only implemented for m=1"); - - /* First handle tiny graphs */ - - if (n <= 3) - { - if (n == 1) return 1; - if (n == 2) return (g[0] ? -1 : 0); - if (!g[0] || !g[1] || !g[2]) return 0; /* disconnected */ - if (g[0]^g[1]^g[2]) return 1; /* path */ - return 2; /* triangle */ - } - - /* Now compute - ne = number of edges - mindeg = minimum degree - minv = a vertex of minimum degree - goodv = a vertex with a clique neighbourhood (-1 if none) - */ - - mindeg = n; - ne = 0; - goodv = -1; - for (j = 0; j < n; ++j) - { - gj = g[j]; - deg = POPCOUNT(gj); - ne += deg; - if (deg < mindeg) - { - mindeg = deg; - minv = j; - if (deg == 1) goodv = j; - } - if (deg >= 3 && deg <= 4 && goodv < 0) - { - while (gj) - { - TAKEBIT(i,gj); - if (gj & ~g[i]) break; - } - if (!gj) goodv = j; - } - } - ne /= 2; - -/* Cases of isolated vertex or tree */ - - if (mindeg == 0) return 0; - -#if 0 - if (mindeg == 1 && ne == n-1) - { - if (isconnected1(g,n)) return ((n&1) ? 1 : -1); - else return 0; - } -#endif - -/* Cases of clique and near-clique */ - - if (mindeg == n-1) - { - j = -1; - for (i = 2; i < n; ++i) j *= -i; - return j; - } - - if (mindeg == n-2 && n < 16) - { - if (!knm_computed) - { - knm_computed = TRUE; - knm[1][0] = 1; - for (i = 2; i < 16; ++i) - { - knm[i][0] = -knm[i-1][0] * (i-1); - for (j = 1; j+j <= i; ++j) - knm[i][j] = knm[i][j-1] + knm[i-1][j-1]; - } - } - return knm[n][(n*n-n)/2-ne]; - } - -/* Case of vertex with clique neighbourhood */ - - if (goodv >= 0) - { - delete1(g,h,goodv,n); - return -POPCOUNT(g[goodv]) * conncontent(h,m,n-1); - } - -/* Case of minimum degree 2 */ - - if (mindeg == 2) - { - x = FIRSTBITNZ(g[minv]); - y = FIRSTBITNZ(g[minv]^bit[x]); - if (x > minv) --x; - if (y > minv) --y; - delete1(g,h,minv,n); - v1 = conncontent(h,m,n-1); - if (h[x] & bit[y]) return -2*v1; /* adjacent neighbours */ - - h[x] |= bit[y]; - h[y] |= bit[x]; - v2 = conncontent(h,m,n-1); - return -v1 - v2; - } - -/* Case of more than 2/3 dense but not complete */ - - if (3*ne > n*n-n) - { - j = FIRSTBITNZ(g[minv] ^ bit[minv] ^ ALLMASK(n)); /* non-neighbour */ - - g[minv] ^= bit[j]; - g[j] ^= bit[minv]; - v1 = conncontent(g,m,n); - g[minv] ^= bit[j]; - g[j] ^= bit[minv]; - - contract1(g,h,minv,j,n); - v2 = conncontent(h,m,n-1); - - return v1 + v2; - } - -/* All remaining cases */ - - j = FIRSTBITNZ(g[minv]); /* neighbour */ - - g[minv] ^= bit[j]; - g[j] ^= bit[minv]; - v1 = conncontent(g,m,n); - g[minv] ^= bit[j]; - g[j] ^= bit[minv]; - - contract1(g,h,minv,j,n); - v2 = conncontent(h,m,n-1); - - return v1 - v2; -} diff --git a/tools/nauty25r9_unix/gutil2.o b/tools/nauty25r9_unix/gutil2.o deleted file mode 100644 index db4e6232edb7e94a32a8a3460cc456dfd58b19c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15568 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

      7_ z_v4bfvMm@E9eoWjstJ0Jt39u~)z<3aLzE@TM~t)1r>N(sTxF6^Mh1cYX(-&OZW>MY zt_Q(>M46xgwMIc9$TSl)CI8`-6kqLovnohn--O{X-BY6uED)UulUr*8yvaBfevMmO zPYyRGse98>Hz)0EIHnZ(BbCD$v|daL?y%QI1=F-gcK~<({nXPt^Q&#G&Tew@a?2>R>xaakvwGN86KDC zombq77#CF=gS%@N{hN`qh^9tyT568T>)tA}oA|Q@V;A|61} zLAJLsdLxR`F0V($gKp$k?fFk~UNw$PJoh~1$Sv)9dbD@@s%vN6=8HXo!>Vpq)UNiWiaaIn$GrULg zWt@)>LpbnmG6zA#$s~4jj8eXh56HTnTjEst!MjGf3-UZ~oF;=yRs7!0NThXhp1M?N)RT&r_kq$GO;~G90b8p>)C8a|o4@8*zqUKB-uLpdK5cSt2I!xq0~%Hsn3|UZsZd486j2V zpSafJ*;1D6o^ZZw;>}kYrjTNqrxG&1P2r5COuAx+LK%5^5be*(0I$lbJ6UQb7QH%p2HseCQ85Atk*|cKT{P+D zLP^_WH3-gN&+@2XJupNYeoklYJ=-pLMJ?6`X@v}(P|2F&;nd6Q%`d-9g(+nP4_+x4 z0_pdAZhw-O?N`OdRv3!^3_)(Jom1^8dOW<<765L*Z*?T$7U*E8TQ3HaN=ajnZ1J?o zpn3nr#lAqR3W$G5D2p-PhN({#I)`Z*I_HOxpJ-b|=hw)r0h65f{k_S=*Q-5=U7`Rl zzym=&D{FuzN&q2G$DQmwym$f1`&(vYE~58Q-)O}Oq4%pSEp_XBmBI6FKTBIbNIA_? z9b2w}C@3D#4Y&3H4(yC$M2sbS)m~RJG+}kzA|fch_R6bL%wWr2CF(H*>W!fmUr>{J z18~MM2obzcAW)b*Bow>w5Ee&8c-XG8qSJ2{YJ?S|EzERrG7bLi!aDAuRR8RlCk^={ z|G>1@z<*ATg8ffA!s8xCqo0nTks6Jv{#vBs@KS;JRg_Oxpe79L%q5Gen4_@8$`Ka8 z^|>+O#koSuaPYAI&prd9Nbr&&l1dX3@AG}Z%Neq@PNVEyIZWFT^2kVT{gt|)+uQnU zMFje7=P)oH;&0(}E0FG{3^PaI}vHUdni=H#uZ9;-n-<(3d z6sU9~KplE|*os%aMFr>=%ddjX^V9#7NKc@$9K!}yX;+GvH7)3y}f6?vNmVnrAv`Z_$1 zLSG4b_oPYWme1CHDyl0$$ug{7m&p)xIB5QW4@S8}*zb3*Lw$))X)jI=8dBLH)psa6 z&%az(!TUn#;nlIR_Sacb1U^1%(U2Az@VRw*77k5wTwwBBRz>g(q zpI~6GXBJqt3W>R$R|FfwY3q4U2YNQG)@z&Aj{O*YSaNtr17zL9^G>VFn6f6z<4Tli z+o+cleTRz@ijX=w!onylv>%2bqJA@#TJF|w{l4N_q*o@v-9`Q2=-(}Bn6e|GvPi>| z|3c$ucUjzah7%TMQTei_wXX`NIlVWd@VS5eklN#x-I}e#JgxGq62i0W8WWlaYY}P7 zt3y6r(-}7^A&@>ac0!q^x`zCAde(HiE;KycAdj>Z&eBqddLD_xk;HFGhmuhc&SQ6~ zk>xsZz|7#4?i0(BFV^?aa^oOUXnCBIa(XubhR`HL8+0!wZ7b>fGC92304i}GR0$S9p=CvG+pl)fF;Gfz zlO}pfuY!vPjmzS0nhQx7CNZz6rywBsoO?>&?ZQTqctB5819%&A6R+uodFI>g`=R06 z?yV&|-EO=?9ZkY|U+)B;8JhKFGe(bCMBGWW<_l)>mjP9^qZ`U|{@^CPf*~J#;<1{f z6WX!!qBUIn(-~ksEtsX+df)Hj*-{!_yCJb9%{Cm#nTzaMPe;8D?z2w^EVMKm zz&FRRk)<9E$!qpAv(V@~DYQ5`;;*8I#ECxaEjEV(pG%QcCzf&)Yo`otU%O@`&9kPX z+E+-I3D0c=_uh4$K2MZtCV!VJQY*fcra9kAxAoMlsXBSUsTSV$8&tdU8Ts1`CN=f8 zZKe+V{XNyAqJVc*ETInc$&GAy=?VX*m?46PUwqF@bD=o(mv?O^a5~k$T-500Z`eF{ zj4Aw+Kx^6G(#|%dWaKo;>cr2qBzsM~*Xm=JJY-ya6-&W=(vR8g0mX}o?uH+VgbB4_ zw;+u7$W-rHmPshXVYgrFJtRu%;>Ow`Sr2jv6K4s+kQ)>1L(0}*Fnv8qS%pmMhWIvV zI404%Z+?XYXc3wY#}ikCPFDW6G*1|CHPwh<{>4O=*ub0<=5z&K`79X!GT z{MC#y?4B(&{>o7bX+|IDyj*%MS8Ps}k_+x7#u%wn<}X z$t2gUZB6zV@fZ1o@0Zr+P`CVaUQK7DO@vlNj5KFw;iD8j!8?L|>BgaTq<^Wer1mB{ zUipQ#)cD^qT+j7(W7vd`bfb#LisWB>+^oYbi>eMa6Mw+M67m`M1HK{afwL=O$x~^d zQ(mQ-LLHDw81lEOm-{v~Ram7nqUZFG_MAFn9k}2+!@Ln%4UpzJf@uWPyvYvd|YEO^KqX zuj#8S01#1Au|^7#c6=P6&#h9aMJ%OqueLq83EaxLP`FZEMJ zd>{_%&l_R=V1tI~n>`kpt0=+hL2KgXL!7F>LsJ!gRV68qYb4+#L!)G}tRXh?o6HE) zFxYTl-I5~g1uP?W8qjv0OfevuyvrW+h;+{{`p)2~wPvw5h3{U`i{#Yw zhSu1keD1UjK_|9c%3o}kwcRQzW5KmFlLZ`L&xNHMuwo9G!Z*y1+{frsy=GQi@9#0$ zhbcH{2kTSN0AEUeQEVAYF$?e~Y9)Z*@w}Uzl%96^kpOHZ6e(#+Yq=>?^BO=-5Ur8? zOS7OsUkUMJpu5*6530d_>up2aw$7Jv^3{+M9YQz1hQ~7OFPYDZ!e}+W<_kb>TiKGL z77MMLcQE771uR%&N)ok+jCgI9jy^L;fON;Ipmp92L z+ZSZX3dZI>8N}1Sh;}T=V^v<3f?(7W=5pgq1AlW1X}WoxW16nA&Q-}Bm2g#kF=w?g zljzLM8u%vm1#%yTdi_XcJ*1IfO%gyT7O=;*M~q_iRQFl!y#e{I6%f2#VUC9h{9^nh zp5~_5w1nVX)_TYIr9^ql!e+p1pKY|>feasuvUsaGjoL-(DB>BN3aV?aqk4n-98e$G z5G4*pY`!U;&gHE2iXVPmxg}wS6-R6`|DD*_n4nodN2-VGC(zS5>&oc0I%#05v-;L( zsO*mJI9f0e1boovY3GwO#ZM&CJ@LGS5XJ<*Sz%E{Bm>MpI}!zTE1WIC1K(ZzVNA|Y zVI>e7Y4VzaiPnh>?(Q{(G7J1wbQ{p{ei6|OcDcE2VKJ|qHG@~>ULeg;n>^sJpFSR} zRFxP<#^%fkakr=v*kx~nL$IikS6m-XdoBQs->(WTxDJ|b$=!|eqAm8G7L)sp?~&1c z!_k>j8I{B*mS?7pDp26=$=?zH7>AeBTrc~l$?T`U%jHoOH+oh=J+^M>O6LQi0g~qD^ z{J7Z*&QnXeswgbZ9Fvsqi~%|P`bhPQN%A@_V=TN`TmASVs)?qY6NKvG<_OGDb<;X@oRZ`Ll2l?&0ofsR_cBUZ0ZPV-abuf>^A?R5 z?yb~r3)URJnG=;Ra%NUaN5-7Md4RJOi+8^9A72g``tD&grRgT~sw|e5Hjp!^gNa$x zwWypy_dk(2*n(}_RK%+TY?_BiM`Fe8XX1@aGP@0JmmfOR=nTJwT)oY20oF<)8OP(U zE5#_WP8;RBp96)S6?IDKzVD2mVxk_C;v(BY%3W-5uX~b;zi^t>RUlQZ ztU6Rt8+*2W?||WH&wp^ z_Am%KAP+Dz<)-nEeAxI|nBSO4NGs9^%#c|Z=tweM%6~hQxTM{hS%ZsC@u&1B3ZYq( z+MW(~13becETtoPsqHDR5~qaJPIM(ZH(datzXk&cN}7E}bfn#&s_mT-M|;RI3!KNHph@}Z9_Gxwx;)3EyUXVn^Y_x& zdLcbfVH%38&C<2OxX)<@@E%ON1)C&4?|@Lfo@Yp**Znq|VO9m?z&s&qHT;v&sLD5O z+RKF)<3g@QA)1uw-SP@UVd={$TSxmc7#2R)_9tkAH*MkivZ+_}5q(|LYq#_-^=q=x z6%ivO9O(KXIw?zR--G1W@AG&f%;kf2lf+Q|uF>~x=UGQo0(i3^%FN-;KdI<~&)p9RvDjE&eM{V3}hweqsT{C~usbZ|>`u4?KGu z`rM<0C|=G32D!EV5_hZYU|$fXQ15xB7)ROK8n*~zpWsXf_0x&8=aSiT)rwQ(L-H)K zRsw0;8XI-gAl%4`kO ze@D<6s}~#_DF(1`w$yLb z8QAc75Sa85*(I=#%cszbVh`8oKQb(H3`CT4k z0_#k>xKm;1WG8n!x&w}!M!Z22Vi};l_JG-j$w~Bh{R303HldRrv~NCDqkCfLcX(xS zX}z&f=Z<0h0c}a8z{A?gA~ddepR>fE$a!cs|NBQ>IeNi|^i{;Qhkmy?RWnA~%FX_! zME<}skm}bj^1#B6!L5+)3U?O!wS?WKICDWqC%-3fq7SQq0jCdq<-rXa*@(edckUJ~ zUPS8zRP{w^pd_H*$lzv+3r!>WAz==nb2uw$bZWqP7CGs`;!J#42bMn2~5 zoyb+D#9g&d_AcbF{8Y+cBH^^69hzK!D~k;Rx;hi7UCy3UCmbA#U^L84Hb1Klhh9Hm zmpQamSkH87GHu_8WSeZ z0eygWXxcFftUO^XTX;21r0a6zTr^FIehUAd+6`{$nS4pt z>5nM+J!Cvdtk;oUrN_1E&tne56{kx6 zBDz!voshAmmPSw02nR<`38w+M(qvH=2q>vP(G>2qT`HQf>|MFG+%5#G@aZuQK|YVF z$IqKlF~=EETPjoKyT8mFTdOCsxM;l%b1**7Qpos9l-#0e?c1q^gFdWFX%a4fjo43V zBz0^us|8u8v+mr_n~67#Xx$IiA@#V>><G^O^Pm~fu`r>g5FHJavC6B*%wK{ZL6n>@!jg)y`@+WR?6q_rv_uCoV!Q; z>kn#0*f+uWGH1W}Nis_fqt-w@P_VgiO8W${?t6r0NI?HE7O1lWSa-(Izm^QO=pVPE z%ip;264jn+k$~-3@+St&ZKVIn!5Onh{zlOrDoM4Y)MB2K<45KMawqG*g=yxotDz8~ z=DJE^Vk|t3k@^cG=nC{ohEy9Aev=0%q+K#8_H|;Is#V0i5o%CU8<^IrmDsTG z6_q4eCqKHmL*aooJD7!7rSq)vY?#iIFB@7PX4iw|iQF~a%;5E5+pfw;A`2pFp%}|t zl}sJ>skPQj{nEQp%Q12|XCWBtWXu_UaG@x95ATUUCo8n*y0n^0^|^Drfn)9=_701q zQ}QlBqhoi3avM1&y#dP%4&?=`F74`V<0adz1x#GIcZ;<7e2Y=|4`gP=7XnUP)8|)p z@ESAsael>8@Zp5%G4CC8oOx8YS}5#(r)iDRr79QSyUR0kHE=u3XH+^PJrgFG^V`aT zy2fBIGznONK`s6l{)M90!+!?@bNm|-`~QN0RW+rhrPcod18Xq+ghl?hrcn+8S`JqF z9~hW{m4J4?RGq5!?bTlxsGI6#xF?Ig8rsF?WqBC%Gv~#nyb96R0F>v~i=D+ng z*}44B9;Y9w*TTul#=zN}&d|V-?jN(7{BzEKp8ac(p^LS(i8Gy%iG{U=t=T_&|Kt2$ z{XYY2ex8ZW><0$^neShLo))&I7Pc179(2|wPEP;2WMg6L;zVcTV(n~UZ|y;6Yhq^L zY++~XWNqMN{!@QyV*4Kp+5g;=o$)_j)6ZnabdCnb7Dfiv|5dO053KpWfX+WbrT~XB0}m1*fam86UgoXVE|6J>5&%R+sJ1 zzqcXS!g>v9m-FaXf``z{SAU}^?%K||UB?FRuxvDN^1&@s;7)!*UyA#Rpe z0s8oF{MJ5IJ}VJ%9y>7%?czi`_~p0klZpEPWBmail$!(8>8cO_0t3H*1Q9TpYw-2} z1BeM++54`ug#aod!2lp)ck~|UpKR^XX~4n*hGH=>6J&VV;GKq5|Ce0Myys(tEGJ zWk0+`z`%g>?7e9E;Eo`~5tOd@6XlQYvKM;4As+%GYJ3k45GsD-L7l56#)5xJ_R$#v?;LWZK^CB+EMPI&+ z>#nyEOC4ewH8v{$*lJ^B+D=%B~hwv&qdllckVeT1Yq5P_{Nf*m7*tWg0H5`Z54bg_K; zvYiL8us;Peni^1_!vi>b-sY&U4mAWpU~u6ELvMlc_nGze)lq2UrXAqUpRew(O9zZe zXj3^>u8@{AXkT^IjgM}{gkdFjlW=o~b{3-P0%~ob38v4CJDy{}Rx}vgU!&~JJ-tBeN>GOAo*N%;HHj07!QS>A{47z!-%|i_L+!hMl(N=*!l+l8Ejj z)089IDucT(96l&KFUMMr%-67Iv&xl+uh-YDs;e61`cLobR@6k3eCNpr-b@@0U`U=x zm|KlZ7YyzkFQgI4+QfbK4CsV>ZfKCv3P^hD^Xe71Ndl6*@W)+$BJK~#z^pf>kgRq1 z3DnHPeeeV&I(VN%HdfIF#Ha^EyW@Ewn#&nz9-r&Kry96>wE!3?YuD-tMKO#TeV8iL zZBIS#$)IgG#XBaku5;S9bIkma9(#3-#|}*tFgFn&h52iMJVf}qyg!coyk-kcHWg+WjuD;O%FUK&-Rb2LBpjGgRjIt*AAAJL^Rv1PnLI2v92yoDzQ@0 zd;}tXb#&O&PUZA2IxH3*Z6u5_dG)f(yioL@RKXa0Si}0OnFYF%C6dx|D86)U|K8pV z>ak6;Cb5j5|1J#iKUjN*Akm^I!8UE%wr$(CoiCmF(zb2ew(Xa;ZQK6Y^&_gQBD$k{ z(33m4qdU9jtiATaV~vQWly&>WI3uLIW2n++{Vk!Nk=qBb3H)y7$zA6b5-w4eE?{b!D3QO!;=P z=Z!Fz>#ytdSBCpjd|n87vjM5L7wz09e^p2`U2bl9D>Cd$X!b9;M3!Jw_lTxuSyHi0 zay4>&`%MVW5fxgd}+zh!uSJ%7>K|!bUt64c#rhFz= zsm(IeDMe$tE6B5hqk|SzWCV+C#bY(H zs)&lIoyzolN}o2kY@`>;ylE**_ai!!G;rZmvZ!*G0n_q8EPFrE_KO-H*!wz%pz!o{ zFCDW>JJMP9a;8D5msuN4AE=77O6i*rHk{Jr>cAj*abtr+!9nN1;?MFe&A@PKjB)CK zNTQd@d~cb$vHofN%+E*Z9N?OQ`P=*~2gwaQ8-SWhV4>B4?ov#9GO z?)~Fext(PlaYPMg_JpI5b7wZ%mC*AfAO5R2dY{9P9K!h4uLl>;hOr~01tIQ>lS4+Z z+>C7%!Q@8AKu#<=v33dxYGz_oZ7KJAlYkg!YIAmBPLc*C{G)3u5ke z%3Hd~LY$qh*$udi$&{4_<}`21jJ2lG9t-=!VqlMiyW-~!=8QEQn{y};`l&s|ooD-9 z9&q=W4f6Cu`;5%(WB#c+cqP8G$|1oVdo+VprX|RNE6SBieQtJRaG!?S zvkB`P*dixkf5u|xMyyqB-j}iFo}F!t7@ZF~o6uMLWaoprPvfE@xnVZuShXBTFbv^o z{0}MpziLO6b0!s5-wS+@EKzZq-Nh7-ZP3iHc(;b>DIBmqFmpglQ${mIJ2s75DmC@w zZcG)EsiFzTNE9etUrtnUXIu6kqgW+%Jd9(=7wq@3Xx@c0AOC_#s7S+Hpl!ilVL|F$ zo=D5*d>4CUH0V-Qwja41eNYhe88L;wNR#;et+etcC?N5xKCkvR#Q8JHjwz~{y04WQ zRb1l2(Ma^saVC!%nJdHgqB4%g3AQFnf1=v5r6JMCPcwb4BUSb>Jqz2Y5TRX(lcQsI zU%ouvZMt_$je$2q6cxxH|M?yE80BJ())8G0YCc3y_g~iAjjIB;;};Kq)jDo()Aqbz zQ1-%o^?2^VH$iMs3ZVe>DD-mY544Q5~mRl>SRM;>UoMOFol7lG(U*PagakA0X;4ct$ z)7{2mpEpRDS8En5ms@I>{_)oTdmb(MI{ru_mFiQ9JpO{Cv}efHa}U(LUYvhN5dSAV zHvY&&IM9FpK@I1urzVm1XL5cEn!6WZypP%vlI@x#`a|5OJpwE%7tgZ$y!);|p}V zoNYvXJX>F+(4P)0jI|Wxs6^FE^0A4abD^smm6kM*(!)-USO^m+p(3d#?TVIK3YNd= zF}u3toKVUpyJi?#b<8ni#K~6CMQcR9!cLXx7_YoS79?<>0un)txW8<662& zNBXAKwb3gY^KXAEJY(~^_MM5gHrOd2EWxtBu=O7TDl-OXO9;%G_iB8!l4bXf#+u>p?B7!L;NTMfplCkxmhP0Eg&B?)X zN=K$NGx@Gz_u-A7=72BxVcpT&BuQfvLT81rp- zpW2jMR}=F(os4B0UWkQq;;Iva+(U&FFQtZQ@9isZ<8Q<7kc+RHKi0u&bhsw)zH+%S zjo~Q{TSR{}DL2z@RBz*PrWQW`srk-CO)q?#%$yNE+zMLtlW34C-c_$#nvyoo`$be{ zNhObj=6br;-|vfe*(?l6enC)dXZ!Ouq!&n(IGZZQcnCgXu?Bx$rHzDlcQv+UhwobP zHLZ$|ua`T993(X@D&-&6WP#}JTe%g`)tA7_3LGNvM&`3gHI0dEs-6^(!FtBg+MgWA+ZP zn7U)+>JeL$XjN!ktFpaztmQYrA!pcQ###aZ=S+yRlC zXg&V*cRQGoxh)hg(*Z`w`EV9wKVE9fI*{@|v1wUeUMkG@PY-m%%Z!BOZAM0`F(>~f zSfP!Jeu-Y8&yb5FUu{hlLmb$#G)9NT>#`KTK~+0OeKt+R==Y$I@eaoXSS-W~;Io&f zG>A5Bw+=91>2_3hQL7bE78uy~wo4DPE)l18o$UK-+31rlNlr8eQaXKXw(Mk#psZrk z+*Y+XUkCUGrxiWzDuS@2@=ODq5tWp|p3$vf-V2rg>25`FJcfUotLy?!&uc(brD%12Z?%4+PR00^snuVkK)~qItS#GAzX&eV~d2(HS26DyfDZ9`p4%q zbZvF)+WEa=x}ZT{Nlk+y&>N_-s!RGP#0sKzl@yjV>LewboK+mF0YTP5A|X^%1PN*- zC2I+xZ1*)uV(znR_ky{;HFHgG?xIN%?WB0;A&W(aq`-4_RZFntO=)lY z`Ooa0MlZR0jQ%}JDW7PIp@CR>dcCi+LcQ5}UMV%aqgbm#O{51^682=Fay=&{Z%KAH z_fF3>w!-3%WLskU?;!ek@D8T_dY4aHlNnbPiRh0g_Y*jGe_ifu@VEVg^rU$4g_g`- zEnm5ZHe#xU#66SGj*QlWr6B>5LBG?+;8yyI znPlzdaNoq3Y27PR<=XV;^ZiHNZSLCa=}nt|V&igf)`AW?(oW%*k*?@eg(Q+tT!ENmpX zOZ;*%^&jO)ffMLHD9uau#VZnh=^wmFMXDuPViAVrfYy>|jPAe38>L~O7|0fWl@s{5 zM#>3{ZoDbvBM^IQh34HeYHI;L5Po@N`mJ4q5zOV4Y}5rkZ=$|EdxL>d7nT#vvYdsM z(2JIOgf|nBxS07X6hBFuOeKf??3bAXy?=kgXW{gP%&$FgK4Fq+H)d=^`cu@O|4@y? z73t(0ncg-bOkXHVe6e|E2OjU2Av7hI7^n9t85{0szNxAkz2_zA#E>>6Ip-N)O}e>H zXO2-z#VeT?#Gn=W9Y_Q(4-JEV{r7=!$qbtKoX+ZVeY47 z&^X8@&-Ut9D!??>KEX8Ga5<=8Eb3!^?=l;?ADU!fgwfDy|~@-VHZf!T9u%)n;$h6x;f0T&O&_9c8<9bJ8bz;Aq|`N7I<^ zJ%6N$fLw|yu)-|y_3~Z!x-VI5dzsMwj&4j&h z`EbHXR*9+$IKY`Xak)gM>n8q*Im`QGog`V(`xda@C-Gl%NjPJaaf^Ui-;}FFMX@>W zvKaBf7^t5n$v1eDNQBAAACo+00Bfz^c{wq;U2-Vl3>|F=oj0K9`SF9hwN3xr!8?mw zEPZKToum5#gAb&!KQ1zHv)SaU`NZaaKJyrM85mB!gWfr#RkA*2XW4Z}q5)GT|Auz4 zCeitbdWtxEDC`|SbyE&g%?zy=KJHF-M`JE#qR;M3OR#xXvnU>V9+Doa{toDHhCa z2{5C#%y>U~9xXTt7?f=U$z*VM9#d{;?}BQshbH{khaeSJEYG+iD2qB8#>$*|ucy@A znm<*9T3L_aL2>g@+`X_35|!qwO4iPmTW)vVfpf!>O^d)1m9@^i7H8*y1<+uOVeZzr z@Sl42r-6TrOe4o9$}uI*+hJ7#?~s6gcW11}1bxJIK0gQBX15tgp65=;>f<4obiB1? z;x;)C-!*tWG3ERW4%raB6a35K^rM|sb4c&{niS%)2)gbkn#jw3!hRo%T z8%Ym;L~bxMp&p-^#Fdz0=U)Wo`VpOGNVjKHX7tET>6{(n#UsO;vmh~ z9sOyXDEH+I8QSz}&}Eo`laD&xS21qJsJW?+#DqD;1KG5QppIabSHE`Xv}>QT-(ciu zy9AvU@T2ZQuBt3MVmTgEa7hyTDIAJgZYw|4EMx^gVt2qGUgQ@U0J8k=P|md51#d# z7SpDpFBu4IRsW^Pg>#l7#rmI z_4pKdtMrS*7QT(#o3@VDUay~k#oi2egP!%`q-NRX-d?J}uW3!*;Rb3)vR)yQgRV>Q zOjBa{I6VDk35m)|AM=#GL(vy^wF^lnmufe4d)5|$ksprn)AmTk549|+2U~|JLAwhm z;fGVNxf;o(>0%X&#td3zW|oz@G*uN-3)Yp{*J#yIZ~iV5f5nbs@bK7>SIn~%^7HG+ zX*LJnWZW9aMy}Y?k2{vNm-B*_BI$D%r^KZ~(oQc$(wD3`ni?I?(g^w!N#fYSQ4YOJ zOAx8m6{mL+tTOxiP_Cis%HagTa4y7{GD>E%j~BBC>VD}}Bs;kb+W=?WY=Y{gBs;g@ z&RQC~FN3o|8l|y@y2!1a+v$5~M8sVko(@bw#2ei618j4*TvYBf-t`i_ze?DvQxDFu zH@mCJ-N&3{ON!43J=n_#+pC^<5X)-Pi>?EmR%R)P?i=ZoRf8st4Yo5W!M+>A7m14D zx``}~8eckp_uoB9-yVtq({vpU0n zPOWg`au>Wfo0%R{3mZEIR3~DeJ)vBKcj2kiD!$8HIdTPu+W@Z1 z;K&%on%OJGw&3I2b?L$ScyDfd`T@X?5eEKWU{Q9)|H9AyPgqn!NK#Zn@jtNWZ`kjD zMMYVDp(qOn0V6XLCjmPL+y4V7%KE=wk@O#6@xSrG|Db{Yoewhom+$*eKFGrGp9w%F z0yYNL|6GgoUxR?`42-P**L=|Fe*^(H=(Z@f7%2z{Cua!>x1uE=VFrJLfPD;3uEd0- zqzP0Mq+vx(ML`5xTeK9nu^lh1KVR96%bZrr9w*+{UNs**HK~EJD}M6RV1}@&VttBU zK%WGXegP@|;TQlQNc-UaAmJPwFoqQ5r}}0@aKsezupxfZ-?adsBq&ir8z}u0PFZL` za0;%jKoAgsAR?roLnML(egqICcdi6Ll#mJ_o_*E;TAu*UAUNk@L-~I8cVYvVmx`xs zzP&(g1e*YWkdXBsy$gVUrxi$GfI@(q`Y1fhm^+9;EaczM`fo7)w!7MWXaM39~1;dmDUF1Nwc* z0|^m=8lf?+VFNb+tqtWA{9+o&_{X80@c}|MKA}Lk+X-ji4B#0iA+4j~UcDU|1T^K~ z0mOhmp>wc7ARPtU?>hUld;~$hsRDBvkT%5t_by?A3pc}jw&W2*f`n#`U%o; zJvs$^xj}u>=O8}4brI+Qv{@j^_$SdKzKQRhfjtEPDT=rkcV2wCzrBf&5CB&D2q^qm z7vaFj-%GjHVVb`j#pv-NAAr*QXE%`n{CvK?AD%&E>9IjJ$3AjzcRoO|D6lC1VcvfW ze&XkL@eDxkPLLA-?It210zg0%;2Z4+0Q~r-zRdu9gZ*q&K!nHa!%TMx7&6d49?Nwlrs$J=36li;@`Fk2DGQP4|e zdm8-ZA~;v@?y6790b=+d?Hxc=0Kk9*`Ai0sFG)s01aylkFtG@B{*<``K){dVFH{OJ zi}3~60zooY+YANhXTZ*4mX=BE0sY*YCGukl;2=&kcmFX3?DWz*)7uOe>>)@fl6U~| zFOVU$qHg2{^>0*;S0%99L*&$4I9awL5yf;kde3vl>x`{%ay`(lA)R0Xsz*0L;V3*fZhJ~LAbiBO4p6 zwCi8`K;_~P_oL`EVwU6Tw5l3_OXa`=|_WW{tl%~c{Qu^sU0W7xHK*fuih{LMWxPew<#E`ta6B?HK>(aN| zl#c&5B`9e20B))9L38*CRp`b=TK~bl9>Bf%tIS4hqy5g-pn?{=_F_Yq$`V(^xfQzi zFm%37Q_kP9Z1(0F)pwz7q_n`!9drLQM7{DgoJ(&(q*5irI)Dtu-WGsq9A8c)GZVM+ zbX-4xeQ_QHlOV68aHIqMjpSC_<=DZB$82qH+@c^&QEP#vetlxWNMwmQZs@4dmrwg4 zjAAC5Vf$7WX7oR78I+&Z`9uAsW24T7X-9m~SbCO?3VBgyIpcH)-_8;2)JX)L=a*f2qB(QEfBFG2Qx?VsC@)rmR5rD`nt! z12lAA2A#AyPZNX|XuzV-A!Ol~iFblg9m;-abRgXtp)F#kVn#>E**RAF)O`D#L&=#= z#@P(pdNK(9%ZSssyalX0H|5N9b0Txs-r}XhFM@$U?L&A&kk+$4q-rhcQYeH-)J$czw-(e|x#R9mlyUp^w^Jq@q9NMDFxz2nT=w zhaW105`k7y*G#)QlPuxhnk70CaTAo5=z{@UmCCIKt71FzLP5O3MNPJyviBKnITE$Z zvP{*#o{fVEO4D~bO9Y9QAFKCrN((W%|C3X$6ZrNT8OvJt_`wF$45R=Ck7B) z#_FK0EwS;`JajTks5#YCkt0>V`W((YCXXy2Q9gnU8QAj7W! zz~^`}@$*K`bml3Xm0%bZJe_Mm$GvDPGnS9*fNa_KsGU@7w*v6e4fn_I6@WZ7i#j}( zN=QcnNm)e-3S&8b&1@jU(_x83Q#4Y!yBdODRZMbw_$vA|scdG?ddfHsKjrgMQpiL@ z0sn!+Ff||gWeKz=AuR1UU~t~?A|4&hXM#a-3zDP#1!*yJ3=D?HB4{lL%*w@O z0u7vxsax}3HQvw}eg#~t1bfAflDxKaH-5%#*=7^3^)ik0msMg87_XrYU94HhYiIH8 z`5e%DXx?i?6W%%git>WXs}C>gc(PhZWM#}pd6N7B2=iaD1}w7uP9pg6n~}Qb#zU{| z$A;@BC{{=xiPvLCI-I>sZZ@ffW+1+oS3?--Dj3&aLXcnPw|5|Qu%qnO@(L`jZn1LZ z0!QvYxz&84^)*s(B=u!|C|N;H1d^F`kFb67DPs%tp@W}@NmckrD&Zt64ST$_A97R> z=76PA{?bnD-F*XJtHN8F+1{*49e>wCm`-Wc^tkkIBr+~48aQe$h+t3?Yy5934-TYf z5Vf*g1mf%UJUjzxl=W}i`Hm|YEi(|}eBC28)ICe~)h!Sm^2w`*#h4d?TX$oa0k3GM-^Z>RX$uzwRZPbt z8?UXAKYcK~QymW17llk{|Beh^>>dJ-?v-b}E4!mWRO_*iqbb*gQPDk>*nT|3nYgk; zCf(+A?~@O>r`OjasuF4H3UFkR$?jqR;`RWPZM8U7yKzJ_mFE_>mF~(JSXmxHmJPj0 z``~D{^Sd$%@R-FICASyxBSay)#C0!8_ijb;AOQNZMA33@?T)Z$JVWzx@%!GP?_hA7 z5eZC&5WC!^p*21NltC-0-Bd($PFCO#^sTC%jFPXzz;<=l{)vBpK@HERH*tTtm<JxNP8mtCmk)1>OVCeyUnw|3uKR_DL!aB$KJElN6;K-%+72hyot=H zGkZ2K-7Y-RIj`6ks414lo2@xV^MA=|e*G@^LufMYk1M>%XqGT*h-6#!FGY%9ge11ENpT8Gz zleefm6~}3#$s!7Ef{Dy)y$s4jW%%~PF{HDg<65fy!zTHB^{Z^S(w)6Z%KN{GgzdDh zr_-uGGJ=}*e^~F;fQKL#=%qG78PpxULP?kXgKImyHycIGbVtvpyQj;z>CorhhwhRl zsGqj^tm(xb7$r^C)7cPW%ws|n+5sJVy1&FxAe-F$bIZ>*$52I>tCTCx(KTPP-?h*B zPSV=q>G02X;#+8nkeM4*dBZuU%0Rw@mbh)(TX>~<5p^iB#&^DE=l9<8Ly69HtE4O> zN~9VgFl&-@zRsS5*0F6)+WkgVCkW}MgwNvMUDJ;4cl2s`34h}SKajaL2tf&r4tP)2 z3L-WuVvb&np_FVoptz%W&)KGLF+^)C`?0pE@}p*vAmU@s(RK`FnMH#~Q1zyeIrkB6 zj{7S^wEJZdP+lgZ#`o@+o{*36PE{w|g_R`5h{^TdFbdj;EC^$;=r%?jW2Da3Fj88I zCcH>r&-d*tuu75wXix1nRzOac<>Bbw+8p4Cp;0dxn)FI?c6QK16k%8F*(tMquN}|f zSkZSz{~j}+YU@cH*LZ?vxM&?7PYR)BIO;5$MEU4NBd(*gu36AGN{muPiKb3e9!~si~!-?()7CM6Ckn2I&#k-6wW%T{2 z;_u4JO^_x?(4%THcyfsc;G3ScLuHC_*GZ1rDU%`xi>_jfp)eb1OwZY6k~4=$urpj_ zpx1%9)U~va1Acd|J_bp<(0F$#jeX-bOu+dJgTSXWID2WNYgy6cthu_-HjkL0k-|cF zTN$8FA;c=e)g?9;q49S<@^U)2{u~c85@j_VqAv!_5b<}Sxd*gTfPWm`8YT(LZ&p1p z9hbNWL=~}(*lx_aijYi`?v@iv1zWB=(nQ=#D4awi>>+y3h0y9YFn)c!Xq7%Z@ZTmR zIYBW_1pGsmsthMS*>@^+P~Hw2sxZ>xZzCW0eA<278dV(MVnm8(em2Z(*J1*;$&GsW$Hpm=n*fG=NdBXkBvw-atAJbLAW%AL6`k)>Q9${w` zap7J&h~D0CBJv!{Ertb}){wKccZn_$WT@a`Haq2be4aT7m%qbsnl>=r16C8s6XdZx%s8gUz@B3+d;aQO=23^VnYFx* zTfbY))7?mFf1B|rfX&hGW}iO_Ima+5w_P^Q|cvSKDUm6f<=HRtVh2s5nYJ(uC% z><pXn@Fv!GHNP2e_ILaRxXS%i$zofKN{*fdB!A;6qyk+r>0=cqyEH5}!p4`vR zj;hhwpzc-Dq0P1(6$y(AIwIQ~$dmGfIazgXrLpgmBk%lo^np#{U6;=r)Er7q7*U0> zgVYV)5IPB@4fzf8@K`+a5uvY&jodqK{Hh0zN(wDj)mT3g)Dd<4jodO?CT0%fPPO~s z&ByRSidDm+1$DueQ3Q(>QM6?~3^41lr1(mLD7(izO$V|vj)^iDn6?C?8q6{sWl+!N z;koIm(p^-~M_W!Z#x~|)el6F0R4y)(K@FWvhkeY$J2WwuGHGq-WfB#0Z}!nv!|joI{c#~3Qja>0yApjHu<~JS1=D8m+zX%x} z=_^3mCsLRErlysU8}*i@Y=s{ajAaEGnd29l5-~i)KKgyg->W-05G{CMoQ^8@a*!xv zq1=2Ze`6y1cNI&52ZW6dYR|Y=Z7jBQnKL1l(kjas z({Ui89J&^-ng1Z^hs9YpTQ^tKJhRcyNoNq^u4iEL!W*jgCQd*hWW#)`2=^hNm1OD5 zec314xl*&}wZb)c+#>+US$X0PemR)9!h?+7Aw78&5`ZL-AN#WIyiK1G7&u@$02PmD zr(sRcpN<}%NFwS}|4?j5XjtxZ1uYAblcTfCH{d_3j~Krf9P&MSQBukN!bqcPYMf<-vgj?YvLlHrDBktL0GX9%?q4aBQAPPRGuxzgRgJp4{TFalhpD%D= zE(j_=co4~U_FNq>-tNT7&E}XJQ0AW#_g&9sX`j-cJoMJHY&_~;5lTfCysG053d$`R zIrrp4C_C2ZP}kbE0&DTkTGfi2cfr@LMfT($*ow$lM>x47PcQRdYUx$)(1tpwNjOPYBCT5M4vvJZ}MsI!!}(!t5)8BR$oVH{?7H z5^p|V_Fmkd1F!fq!XrD_`(Kao}FXKHW;L+fj4A?dF z54C+%R#&G5n{Z)`wJo}7W?@os${5By^YAW zjr;DZW5!9rz;XF(;v1lKWD2EBlaG(GN)}VHFA^3pas;B!@Nq%okGEo|KT$hNiy|lG zf=8CX;!ODupOhQPO@J{y`5!rmCydrg`sh8Qb_&KDMGv#s$P}K!s$Q^!nELDu*iYx3c5hlgeQ_5oTPsy!J3_NUsGTkLBx0c^=5N;jk=KJ+F>=m*_m6JT++OKj)u}l&Sp67TG zBQ&$W;lW#ji%SH!H2e=<8~J0M+I6HpYYNm&R=(GzS;OPu(%x*%VjR zET-ulZcc?)1t^?F^-_cD|ziz~9ohxA%~7wOkHW=VmWHD)gCNM4uQzS!Y_-vY6(nQYEI% zyV=mZqdJGW+RNQVA_%}S?>3YG2tsz=it_Sw|D8KATc7nh>>xQhw5DXu*aqKYx_pF5 zTIzW#q}*x4IrA{xE&gl8CPfCkF`^2^>rJI6OgB;0wpIZKg}NwwOgBqx)v^4_8gV@~ z-0`IQr0NYPEavxsB*3BBGiGA*F?$dR;zyp5wy$*mQ^xkqEw9Y_C#eTi=yahl6HnuW z{xJ-}bUw6|<0r!DYqL!}P*0%oABBiu3Dg%P1XZ4}6J2v6tm4p`Vq-E|c&MJ9ylrSLlF@>j3hg zm6>N-9lS}hcc-{A)eUr1shhIq3Uy>=PUd(__4d;Hv&Gd>2naoB*6Pp6*z z!QMU+<=t;oKcCAG)8=e@R%#pde20~SZ?ktgFl}Dhr}%WjwPJc{46O_~Qj)s}M%fX1 zYdQemiEGXa02lPyz+D}#wJv2MhwdCg8|+oaq{>nD)y*asRf_0Mdp!*tN|J^p^Hz-5 z;M-GC5SiLzzk!ro=T2;J?7mTtQ$GFYJ(jMlo%b3Rrdej4;ZML3N%J6eFC%;vFL~-F zvim5L#X=%h_NGQx?`xL6kliW!Z0qV#SxlC7^~6$OXB_=PVSBjKVt2Q8wZ*psM6Z7a z6|a#BWKY@Aeq;=_nh>O2=9Ww*nTu;;CLL5ZX4dRxe|EI8sy!Ak%`W_9+Mv`?80?o# zB;~aVl7+)TBc0xi%M+!f0F~cG{*I)X3_SKlB#RziQ|bm90(ekBq4DjIxA*AU2l%JW zz)SU_#pFE>-Lvhm8HdaQRxJ)a`XU4di#!Z-qlVr)(EtqP(k+uyN8BFR6my_ukWI%E5+n4=+@zrVeKk?t*=Zq)h5 zjXF!Dw17c+&lljvF5~=vg)e`B9f6&ZB>@i)6#f4RUn+~J2@9(H2fk$gU*pSP;77~J z`dfHm`hBo-F#SK^mn^?*@qZ(A{z{tvsbT(ijQKyH<$uSREdS*@|0l*|W&NL;BO5cz zFO>cN-~Bg?$;{0De~mGnK~)yMKG$= z%cCPw5HW)wg+Jn=dVqQ8I2Rx+{)PsBSsVk5zjsS0z^l+P zV1f4m)Hy&xhIWZ~;uJ8j!l>a`mgc~*I{M>$vz~r9AOLmkGW31qCZj~;@@y! z!UPmS*cfNP;#@$uyEP1X`6WFF%h=QaAjJ8-IQ=ykD0Fz2kRhD`R}OH!c5q;p6&S$% z909&_g95Ym>@;E!z^-4Sim&QeI;pI23altVfWk(Me)=!Up@oJBIvd_WKQhap;rBxC zU(WV^#QAW&5(2!NK~wSeuJCCw@A`Bc5V!b~h#{a-5&xtlCI0~#UJInL4@thNdobg( zui6!!(qoJg^v%E?fjRZX`+@f18nog2;e%a50vpZY)dBSW*u1_#5>P<}4G?PN@lGPf zfP9j3!~I&0oChJXA)dg3L>yP)K%&2vqkF^f7<7bC$NT5#*Nazhv+5KrYxL_6!}n-O zMZ`VWJ7h#80H`S`seeHMQ-Xkng{DDY@51MTU+>tDSajcQFCF=PZWNaUIEunEJh;xo z_wn9aDvjH>7N*{AFZHJAUK0%P{ipal8&Lug!e;8}&kN8e+*|M2w|dG?>f_IcPzGL2 zP45&>@6}HzW|Uv&`{$8gVgoo@D;gNZ=3j!JjU}XK^JLgx(Gh&Vx0*|X!IoDgE`}o< zIzkE}T;j8T4@0(%9mW!5R4D5k;_OCo*RpLOo`Dzz?E4}*FcJyzjUL%eGF^>T#=CSV+SmGZ*@YbxoPVTqZ5Q*Oa21kvz z!K2-!{!4&c-dtPt7cKr~@ekjRk7%F4HUor#84_qbylV}l9bbi#;XTqPmqf#DJ1f~( z1-BN`1nbk}jO340$#PofIq;visc)ykv()&)#BUid{+N(1oApNF57d2 zckj{8tC+eC1(d>rIwy}wq@!ix1MNe20TF`h(Ue4U#ChEPN>u9Llj<~8t2I~xpx1rB z0M=;84+YXv=Rkt#h~xw2=k8=!Q6N;T$Du))QLoo50=OLevUQvp`^!cUsef+#>@Rek zrQEt+csjQ{^?Wz9HiY>OlV6oDw_X1a@mPpuxjv^#0JcMnXj$kAk zuP(UIX8(Hb?JwqX%mT@%eZvOl4xQTzYhcoU6nf~;uHD@>CO!aER{6y*xX`ZfulFqre0;#Yx zwy9WJhn-p{IYH&H(?Zs83muB21!148G2rzCGUUfulFllvE%nZ!%0;tp{68RFD|ff3 ze@Rhyv=J_hSOo?&NpT-pLh|keyf~E2^deXt#Z*f|Ry>GP3{GsqC*7Q4h0oeyT`h0i`Nk`JQhd`ah~bRiG>QnV6{)EHQH8J0+MVFYE1~n0 zfji6z9TwCMuR%-K*w~=1;f)+Qf^(dEJBd-Y6OyJ_I%X}p@zJk&%clKEMJ)!nNd!cP zK|N{^>l=l+s70==q+&JwNyljEG-m!NHQi$7^9o z;C5=xQRk1s(0{rL!dQqob{ba7qG?ILH0qIRhX`w*EnzGcA%Fp3ZaW3$`2 ztgRcZFoFiTkKm2^$U6f|;U$6{D<)6zn9}MwQ|rRAQxL|p;QwB#DM$Ic?g!!sPbO!B zkr)cGMMwIHdyKk`h>|ItS}o@qt<89RuzPvRO>(_xpccG(om#7wKIpmUK1ZVLbZ*I< zP8)7$x|a2pYX}1S7`}IQkd&89l3U|d4G&e6nwp7A>_09Z^oe+>k`a9S49%E(L&Vf zp_y7T)TOHQl&dfrR-Dc68u}ZSxux~BMccZ7kEwk6BjQ>e{L)jYjshNbbfK0rOw2q!PF$`%2e;_AvgOKm#7D|StfRFr{dxby zwOOsB4-9+CqzI+!B7Zm35@pRV(;mXs?T}{CGJ&_uBC6`LNz{0v}Ima7Q1cxtOw6`{9Z1vY6YQg|u7YV04uZ>4}NV&pXg|=3@a~MFz&O zbdjAcY(3c9+3Kvjp(S#)na(O-u(2xJ)WYrPV3z@EARv8zY?3OHVIWl8F;kr=n)v zD`xFTy1e+fYAez$pcN9leHn~G!=HL+*+V$&;=}p$=S#r5Vt-fVaCq9V$)D*`tYIQB0G zkXiAx6NAjKNti8WW2?uWE)Gf8SfnwoArJaWRZDnxQm<1>1h;?3q_PK=c1?qL%T+MG zj(kI?2@8Omwq`Jz9V=svH%4>RAGcf16dWdz`P3Sw9mH|LQ`I7;2XR%HY$)bDzk@?l zO(4^DLvYFNdnyqJ8cE^Hk;@{vlq>4QqiwctSIO*md7Q(V<4B_#Cd?M80b2ieNAI8$ z7C5NoLrU`W3`&tY>njPcYhdGu%;^R;T)k`M_IAglc4F`e@N0(JLx^Kk`w_LSidmSY zE7F#WF0yQ#0z1bP628$xH4&a#iPVd>69>K)9j)g3=VrTZGVBLyWb7@+Yei^>emh(H zg+Vq!|EPFq|J>%5y?hyqxj-Iik%)pEvDWq>9q4pp*Ui%*r&HUr?341pGaeSfPYhzb ze*{WTi)t?CNMiite1F5p+`hY-AA7U8Y8pDMR-~fw^cp4-;HTLdQB&)v>L>PAtOHLTC8Gu z#|T8(NN3D8LlV5+X-R-Rt*e$iBrxs_40W^wSgi$93;C5dvM&=V<84I6dK;c`D1c%uUDN_zJuTJ_93IGYINNdE>fY^;!)oLzfpu zLXB60H)&txiTqtS(DBaovM=R*>WD_fet9_(Ms6yLkE`uNril6w0*$Ij=l296+r`%Y zOWR=!I7{U^K*133+xQ-M>e`WMJXV~@@`6)DL$J7#SQ0ifcwiIQC8|496sG@R%GGH{ zOY5R|44xC7CD!cpUIe}w4{-#Ryj)OG3VT)!$?R0*O!8Ubs^Dfci}ckqJn~J|UM5va zn{22h4eH2tNs`1j$DCJgHayACme#Ek8noGs2}WT^NP*tFa3rf7SC8W;{T*rQ8W-Owyn>GziBJ}XjuD#6k%y&w zeU$M$r$3H8zoALHPlK3(w;b1xn{`~Chgj?f*hTBuuO4PI3U;Q*RtXErRQ7Zm8Z~f* zJ_V=sA*U=|Jtw)uInwVAX`&J?(uAJt1&uoMt`8e*)k4EJ%#?p-Jf?2LhC7&Q%xSMn|Pa z!YlsottPmjdd1}emAmDhv}W4NdFON0VkKeBF$RJns4x(8YcWh%E+7a$;^HbC(%2++Rg8Iw*eS)1bfd#izaTDN>5?;j$t!BuLoFrj(wqkLKfi z&++n2@Um{&gT39r-nQ*KTl?}2S}W>TZaqB3S_5lwI$z$LnTl@iY znOyMU70yV4nw0^@{>*)EIgQ(?0m^_CuWzxc#>*{9XX!(-oFB)Ub`_iNy za0iV|mc2L^&VFv8%5){j90mUDGOw; zy!r7@nv=kL`lDA*8a}CYFavjb%d+5<;k|^DU*crXW->20e$WvTw zNMf;pZkuG~Z0x}T2 zIYL`VmDX?JK>#^Y4;3F4CR%v}U0bSi{jZVEJ4jdrE0ti>7T1)&PbI-CNpVBlfk_ekAo0-gY7RVULa88>s)ZNMzu=vutn^E z(ev!)xXrptYN5%wd542#!f}y;+ETQKOhR%H9W0)Um6^ab^no%#AwpNez3i%XRKUt5 zWZfo0H_J^qC#2+Z;P7u#lM?FP=i3YPJ{U^r$Fj3X2M*qw^?rKO$A{IwfZZ0Vc8JP)7y+ z$!3nbhD+-Shg=|LmgEug9+IBxnRZ9~x#YO}rn5x+18-tmv&&%N`-^s~jw2b;Rffe} zNiy`f%L+n94-}0TGq-vHBH<`eck0$Xjk1XR)60`rZP$8I7H1AuIyjkO{VQKBg>Jc( zViJ74pR^Y7_oNk2gV%^jnO(YG-S3wqo??rSkW5@aye{6g=Q=qaW^_mO{H?;y8|be1 zUnw};ND(W+@FGzvSkNqjaG68<-6LboFf=3_F2o_ z)}2e%Kct?(ikKElKs4{Poy03HqyGTavAR%+&)$=tDVCFxrlxf3y?qAW#w-J^dYZfob8*d%^PmuN1W+QA=UmFhSMCPKfIUoB`mZlg`8S%2;xoyOrP*74(M+Kp7Sj%yB(m%579ox|_+ z+snlE*>KqDq{cmDxZ~SRP2a6Xk|usuKK*bDR<`BZhN?xwZve3A=PkwwXZ5sN#i>kz zFP^X(&0;F2!BuMRZMS_PWYHUpH8A=;l4?Dhs&-g5RYG2J1V{fs0+Tqqh)wnI-_AD? zME^uyi|E^|8QJs#Y6xg%+0aL5O1~QS>VK4NA=Ar*W((rmb_TbDET%S;LNp=P$&uh6 zM2U4V>cqwI??riZ?wAck^a*P~apYR|*ipzfcJq@K&XoOxKS?d@dJ$4O>bW9CGw+Sl zP|tNW_&>buo4Q_~D$NDY>+JalOBz<*2U1;^RiFiVp$}BKj}5QiXx)l~2CKj8lr_nS z?fC#f6$H;12QIA@Mbpa}MD`M>W{tt;(oD3cSM*50{n(6IRORJumuQl6E-Sc%uxyIEW=pD ztKryXM7+Ppx^<8R1n2^L7r%x)@mBAt9>$$VLm$Ufye_89oBG+s!l|W$2g{hOxFMXu z^pD;2jALs=R9+#p^6Fl_<}r<0v)zFeC;~C1KEk~7du%AO%qz`lKbF&YscMsF!^_LV z5!TarvA0zea&?z*s30=N7DMU8A--_&^^~Exbh_cB?(B@|(RY+p_>v<4V0j2gEVek^sq{G49bvRji zlvytX9Xwn@PF#OcP96cej;&m2c-FGTm8Ba}<4QXliq8xGVTn73cQpv#ut91mdDu{+ z8S-&^G1slKOeWZI@o3u2h?0%H}X}K(nSPG^{{eTe1ALm+k(z+Vjhka=#1+7;gY?5g*eyM zW9~Xj_RfnV#Mo2w5VLs@YT~no8l52L>!{H6jdLO~&|XPQ&*{{-8!um;J$q4J9gjiCkTr4lmL>Q*sWW%k^p6#B~VyPx&w4O+9M?eS|=-)7HyEOi@)0mcWXfM_w; z1&9S7t8$;rSxiO?KdKkj_tE%(TtjL1tuiYT)cDm(uH4MRFL2hPKvL26+vPoGL{nI5 z)YH(lHvE?5% z58~vy7SEN9<8Agzz-CR+*GkSMw_EWvf*$zx)z}hjv+!d#apjkr^HdHter(YCjqTo!F!0R%dhUw!_DtCyWX=z*p8r9>^^dCUg zeCgHC^Z}e-ACO^2!>mR~w3dK1q*Tt7tT5fa3h}?j{b3&hixizbRiyz~bpyflj#ll7 z%4vT=j!tUKr~j&RRC_b5MaR@Nh;NigFUp@O?jpF{+jcU&PG%b%a4(Ih_THWhPtl-&u9MmEB_*Y< zxy+NWS3a zTig3#n?_^)t=O%5eS#N5*I=e$@wnC|f<#FxP;+TlzV}!q&e?>*S_~e;A|jmvM;&2v zD%Enj)(T>q49%s&w_j`4RF6H!2;pB?ZY}at5CpLKXu#sXMYre(Ia- zS)wi{51=ODaW?iW_I|W&#x;QVAT{Z+tN?VxlQzz3Y$CX$>HgbMB6cCO5hw%CiVoyj z`!_hx^d)}gT!)j zPdLoP!1iBeTp3wdSpI2<|93jf$jZj~Kc-y&{Rj)|e?XexKZCu_CL$(AcE%=9e0)$& z&i@3zHc;-HF|VNVIGc;0P{=gx+<;(iZtyoZ2omvtV3^xG|9Kz>AaBsNa|G-memER& zIbT12|6Qjm(>1QE++KGzNzs>j~u* zD}!)q{C^XO4(aRu1)d;K)RH-KSr_lyriW9>qr*!2CYlTiIraQi1m#wKUR27&aA z3=Y2I3SxNi1-9ogje+F#fyOue1K=Q%4cS_4UkI3;#@cv(-y!oEOF`=&9vqp!&fyRm zz&3-TVFv&}g~grnpS8q{gsJ^AV;CX+{(a#mGzXc+#kF})&(P7@~4^yG{1#m0sIog%r`fO{mQ~Z1|k*M!8yK56Pg)aUKp9jgK$Sy4~P!X4`W9s zuZNt+yGzB*CnJWJZv+keWlH^>@&~+ga{{QAuKtC6ZF|KJ5ZLF>fsKi=skVU~uqCL+ z>_;&M1)=ye$;{cw#RLE|K<0;mrOCP8{f^Cr9as$$vkUV>vx7iDSqQ}7ZS=;@4{qcY zUsD8}1U!BLA3N|xaevMw?`x`_qh>MZb9#ODytJO5U5Ydh_SUrV|^3VL;qZwv*L zmHs0*G(3^20SwdV1T-1`Yx77Z^d@c!<_u!rSYLlve-GsE3Xosb!1;&|xx8Z?;76tL zi_qtA_fX%`0Gi&r0N@!Q9bl&ifd>~lE8t($gFHWVv={j+3Q=7RfE?dI+z(+621NXY z{4E2+@(taW)5klGnm_iy=35Pr%Fp-vUGmFjK*pv|-R3v_%VTH?`^UjU#^j@q@>h+L z%JK;6PT%+ph@sJ;5lCG_V;yiin+BlnH|B8aJ|+w{PQ@c=Gr1?RPJd zB&WLiXL;$%TbE%lz3SAHb8Sbmb#)!(<@1vk?qzX5jJ{(r%-^f%DXCF2{qH-!0@{7s8{ zX2*IaVBb%pdqUvfn-;Af=w4LwXZknQo@f5}=bA>p5YH~Pbeo?)FQ%U_4_{K>sukD# z7wmdlZBzKxpe!z5;*%e3Pj%m4b?KKfU#%%@zZXMWTVvL*^lzifKYDjDsY8AHS^#7J za;M7v%RrO!8(?i$((y0P%JGXFrCsZdz-OQP&s;q=_eLM;&D&YcQ!C`}fFB>9KtA<6 zhQWDQ45MGZsE_{VttO%n`e+X%8{Bcg)SVSajSi&u88E6JW56f%OJKNY!cE6__@_*C zo^?qbZR#cmO)406t_7kuhg8fpL#Y@yOs*0}AUr?ranAb7NoS{XUwx3wwEe86N|<&n z|Lo!+)4I;pj2Ye^Nck4kJ(Y~So-$iL1EIj|@JRQ#v7w<@5X^PL#0>>nO>!pgHA>+F z`*(*!mH>%|zkD@*$uUk|`W@K^xaQO`cW)RQsyAGZ>J-oQX;A_RtykIQbfcFZ7pP1>-(Cvl?KY9c@SERXQvP1usho>E1b?n}7m! zJj}#*nM(F1oko>?;)xVr-jfbZyNT8GmuoQ|-xNfOZJuul}7f^$5$w3A+pK2 z_{&yF$acPRv*dATo`%iYDW~0VD0tRQAogA`T74%pyEh21g&(Se07#Wmfl$u&^*!4D zB1i()x^oSH7e&CN!W5;(vFzXXFcwIb41#m>VeyAxmf$zj=Azhx?24Gwf)pnN5pB!X z*RlldRT}560L7K?Jeu4UK;7Y%y}>7OED@ z9vw2)-^UPfi0+0@LCWhvH&YOFeZure%!mI~o{B9}tyIhGQTsPuK!AF_kgx(+h8nPj zr-I{ot1nxc?f`_#&>baH_*`|f+n5lnEp|ed&h9l4Tz{qJ8gyA|L-|t=mw43{OtQhY z?Iwv47qY@IQ`E)+&VRsyQttzMGK_AWCB;ybya(->m_>J8vonnZRp2Thsz<^pKdku9Pzf}~l-3)2!;JKv2=&@@1chef0 ztR8{>wXYH_5|Im4Ny{2au4b}0dzm$22upUPN%7QvSP3ysvH2IMipgv?N&o4HE@IjJ zD9Ez{V~T1M<})N?sFchA5P9GllsQ(|vXCK2GlF4RO>AI|<>h&~mwq1RqdsS~ew z<xi_Pjx!Jx4`g6xR!SVoYAjGmyL8fcVUbGtecD zv>LM`A=H=(+T@*_TP#sbgCZGE=EfPoj>!UnSUXIhLL=p(ZmRYP3|ToJb1VQPCSB|l zW&Ex;!o=534h4c5E?9C+1?rezSQ@F04M%bLN6z86XLPiXI-FXj-kwHk8H1 z<(3FuT-d`efkDJ-IJCk~ilJUq#eYXw;cj7ba)4;8f|89RU>Fb>wz0qk7vQlk@*0PJJ1zWattZL2@MLg~4^w>LMI zJYkaCcB!E{jO8_s$!iJXrQi%Tf(aDm9-vWm1vgFX?|R=kva&QLqW|zHarVKm=~%|- z>KrHOY5?dXoj}`PLe?1V_sD{06XM0Rv%leaVmGH%xN(HX)hQDwAo~U!AbCtN{Vk>W z!g{D(2`PPBU>;e#6dZuW^Jbo^OS1$E>qP!JBKzC%Tzfqa-fO?msWyCOJ|+>)>mg)c z*fg!*^dxr91f^>E$6Qho@C;7xQb8i?lN4uORP|F@bZk9#&q0;c zovV+R)r!QXHH4vbxF2^G=^Gl4$1_3mulltnb?EcyHxrvSX$aDWK>rt>1XR_uVnK6p)gPy#3@IbfT+D^=q)LeiI&60II`M zg};-=57477Lr6KqKwo_PNg6vQS7U8lNprOtZNyBnu?RD2!8BSzlO#{c>_Rik{?~+l2ALJyA+cuU>bnxO)L8CnW=eZ@ zKowp*-TJTsPXFdXtCfNDN8Q@;3XS_2nCCWAE-w7ErN(P^WwjnfEH9eAq_)+eg=TP$ z%8O_Xa9S_Ulq=Fh?xi$lln$h8mr?~6u<&HizR;tjURgPINi<47Xf-k$Vk;voFD5;IN}#N7GKZ7b6P8bOzSN^8pk` z%-+p$q0C?+65pdfhra7(59}#bg}OCfjYIz_C>*p3IB>6S5l_;4LM{^ncaATdY9)a% zrH7gc^zpy~_3zwknYygM$+#CW&3NpfXpm^mcXnFpXX(F^>}@g1J0|1&Y4zwanRk)^ z3tW?`?)#$R3|n;<@xzT*kVbCTndMWh7{d=Y9Eh{Pi#B0z11LrHwgk%`(d5_whM2;y z)BV>~2-rGyR&~SWH*)n4xvC-MCN;gqLE+{vL~zz4MEW{02U_Zy3bvtFA1x8LfBx$a zS!vT~rSJL7Xkz_Sfn`Q{&*;Cxmt5i>K%rMOD4T#)WK!O-jfa6GLP{AAcl(}LIu1$lb=y&p39>BhR>n0CU?&+!W|WNW+RCkkJB z9jL4Y%LjPZ|0wl4{ywWLkPI%D-Icx(8#e8MkD*vwbf84V#jl37?}YzAFuKmPo2}Hy zTY(a}k^zFseuG;SWv>*Xmwo@;0WZin3PNoRU25iF*1^6D?DAX|EFCwg)YbU>=nDcR zKyBl8bl5g3{W?WApODkI(iEHP3;EN~BnqRT1p*8-Q$C%V$L-I~uj*;H7a_v8?C$^* z^$`4zNh|SH2&J&cpcunEY>Vq2Pi$mClUL=;x>aBzl@bIml4A+#aiYuvTmH{PkSVd zGs#gz4m}#eB3INjNphvnc83PJN8r0UUqHpFCXy5OC}9c~%E2E*usc8T%W$=Me>Xd* z0E_dF6I>4Je2Aw;*GozM+mYA1{t>azxVV#7Zkf7FtgfD96}HVbj?nSgsB|yKL5)-% zRscWeZykZ2aD`@%^Y?vY94)3R)HySR$-cr0#bW`d5o~6D>`bZ@n)L+iWfye7h(z7{ zCc*=JVUPUYixZ00oRO7%BB3zF!}SHj>Mrfe@hcng(o1>o)NZ5gy%kGQIhmmk%UL_| z^2Mr=S3whdojT$8IaL?6ZIqPznEW{aNzm>v^NcM&oLiZoSLnyP>4R`SFOMg!M9e{iHi+kMdA^L)>;h=*HaT||=%RH;S*aagIDaFq zotPytCDMJEByNp7YGMzcxT77xWn4Uc@=W|3NW>2L74>yt0pfwzfxHVq!3vM#Q;!D{ z+q`oHCGLZw#QV4u`i}P!We4CqQG+T7oV-TjWW#A?y?%#ibg_H5v1XX3A-piG)hXZQ zihV=IO$Pibnb2ESW%rba15S-_Ec?ay_cK`riv{}!EZ*ftRqa^sQ=5;S>jNSo`Or$e z=hANn53#OIHB{c&Lr~=}M=6E_&k8g`GIi@y)os+qZpqw*Uh&Q=tcba!qB`wrLyDYY zcKcQyXu87%Y2uoFO(EoF4{rk{^WUV5k2&Vm97`ry?q>nKI4gp{ zCVdZY{epB>V4P#5L5vFl%L#LGSNZhewB{o_s2*d;vU4ws%yayfCFN0CNOa0f72|o8 zT*H0bE}Rh3Yeu}4Y?jyRIs=GoWf*Bgd>xU4+UHPHLAh{4G~72S&4_YAf}Q1Di(U5O zity1I)n6p-!9~k0)_-k-Z|=U;a5KW{za9>~K_EfvBxKAb#|pax@RAimaBTr|*L^$uvOq z4T^qpU~7T&vU3Du%ow^4-$-^JqSt21blN3@^XQhK*Qo`YGHm@ItH?;_>%*I-1*{5n@-W6&s%vrA{T5Trz5Yew6rzVvk3?npMbb=sL5 zq^O!!7SU)v|C(`ynNAE7(}GBYm&Hxv5TF$67uq#K9Lz<;N7Hr=PVwB&Sp&7ZGDOTM zIwiNme8nBuU+X`nXdy1gN?#Gdh`w1J>;3G31%+UQ3*L<##m%a7KEE1{IJuhLwHG@{ zB2O}oqM#;8DPQiuQ}PN`%UQ08|H*TNF1-OyeXV9yT;X}$m@a{XcMhH9wlzzryRv<6 zNEJb+(%?*@&|T}i?DLvCa%!Nf3lc3*X`SQ=Elc7cZDSYO7xKs6@Rs>?+9ZU01;Fi4 z?*(?|;H^V{u7n~)2w`C{x`~rvMGzDfmuFx_1t=JgE2N3JkG;Xc`Y&r~WF|7>h3rOb zYH{HBFhw1G5OK1j$iy((PL2BXVwe7;7Ku7Bv)eFGW3lT|b}FF>KI>^QmfETjFZ7!P z$399YSpGf0l)N*>BOv}+tq~wmLp9kT2KJYhCjQ$Bj`=3*r5+y+U46gx!OjN$+|j2V z4wE$2k-GeVkMF6PQ3$)gYkNp-b4X% zEkhe@x)2$u{+z4pbBy+_lV~D)g=PRuxM^q1Rsa3G^y5GSZyTA6Wy$8{EoZu7E?sQ5 zUUTS~6u~B31Wq_M20#_VRN5%0YE4~feFDchoPwW1g|`a5EJrxnSMY6h*G7?p199cR z*g>{6ZdE7I;Pmi)#+r?o9*e;*=Dh?()QM4-#?WB3%EBhfDP}|3Yb=1ifjiUXx6wIQ-dJhu;#w$ia4j` zT1IWQJi4o^w;yDNI;HI6>TlUHR%9c+iEpudGdna@I8E(>1&ySVzU1@@2bJC_#`xjF z9O;bn9N6~7HBTiD6KFHa&uIc<7{@hNP~DfC?t!!-m(atXTMbNyB19%eO*oZq={7%K z#-#eM!dQzx9taw9x^n1wn5`O!$mCHq^p6&;AzqoJr48%y58`ueXXy-4-S8>*khsdK zwl@{NMq(Jsbl{30j~@jqTRE-Ra5(yBbtQR}>oAK^NZ>CAuNPc}lCws+w91=S<`v`c z5lw9SSGvG#8ZecU_jIE(Sb42(t;RNM!-Jx2D8&HSz>LktX;Cj*3 z|F{J{`O(PtNV}fnoWZsLwRq15d}P+udcft#?66vlYS}JKz>yGE1<{gy**-2&;9&>s z)a=o4KN!Yt9SNhX0ZEJLL%C)$<=T?hxzv6@fHFIpvNIo?pV6}qQR@CswED=^YiniB z-_02St*RyYOUxyDDvv4&+OZj@7(~m?u@O@+&z2;@1D~C7VrZs|)jh&k!O@@b8+y{2 zK?nQU3OTdwYHTpdz}6ue>GN8HLhLd*A41Zo@M&JVO1s5U_4H(rkmib1wNA+5!^KUQ zVYx|FVbG{e`1SK@r)SdR!#BqY1j%S^%5g`OW_F{$gHr)4xMfM8mFg9@#CZbmOEx}kb0{r24JOw}S_ zkwC3mNp0xC_vTiM=@D7g7>R=!7cLwMo!95#>C@{~*ihsaeR&*;@5sCI98|H$;1VCI zjyAPn_1tRUn_kyKmS?>X^%`yzY&uyN6@n@Xf_{N#5X}_};nEDwca`PrStR!+Qw4fa zNsJq>LZn=Zsq@!uYu>`6OBS>iy4z{HzRDd7vYOGQvgxD5Ky&vg9D`*H>8s?ZpgZcs zahzN0(#SRM0fSR_WJ-`4wH>KJBnBs|{jUbLVhab+w&Ule#!vZr%p%&-CodJF1jDh@Ji_yxou_{=E#(`j;cslug=_WmG!kd3JV!W}(Qh zn7Ny+#qkDD93=_Jx>@Di!{y)$IQj(_ZE@TC9kc_+a1yX-KOXJ;B>Ydil+>ujCN&md z(B{wdgb3{tIdJVLIXUo7i3vWlJnDn*H+Yrv5Dy`k@ut_NQ_b`~eK%A0pfz)9Z$g{$ z-f>7gz0k^{5Q@P^B?p98=?haj%cRiPr+muh*`7{(1*jql?7FXtn{X0L6~$^XN1*pa zBsPLw^29l33eE*1B{3G!kS041>7_b`D2{x*?H=|Ir-=1mIbU)r3aF-5h+ESLG+Cq_ zC14rzTT*GJn0+iw_)EVl1+IuvhAN&HOzaINY$gZazyzS3fb&8Q9>nDykMx0ZVhMg8YKYP^P8dDeVIRSU!N;@1P}B@^-Vja>JYE}KBqR`r>T4v5Hd?&NJ&iFH zi2TV#o{ky7akGkCzk_xZ3Gp>)OD+Gp#qG+|6LaDAX&pR;4Pj&}*C8roVTBId)wJL6 z?ys*UR)8OFyx6O3bE#Q(oSD{EIm6|}qX~N_^@V(z z|7jt$#4&}sJin@dv9U3lMKx}%6lbiZY{QY}l3;G*sAYcSj}NmR02e_UgUByscLVj& zT}|x8wqu96Q7g4_EOibayupM>O_rr!6&WMN;BE>hi-1;b|T<+Ht7P$}ECu^2zs>PKjspg4sIHVf_jPD1i)ha=ywq#B#U%J;ur zK`oYX-`l%nS-r(hajy%jYgX>ah?{We8GaVZO@@T+*AV&7dS(=}j9S|oWBj*6psgcOo!HGw@d_2#& zkvL^@5qH)@5rM-$L?Mqp%;Xrl7Ptk_iLe=KoJ(U6(CkalTQaO`3o|hZD7Sz~eM}Z$zv!jwq;7%P>pFu?XSs1Ib zzlrOj?*0iuKymbN_SRDy;%v_bC?)_c><|e`Mx$OLzRr!US(|T%U2lA``dEt@mzD~)@bkXjNvG7 zZ~vOevF)cei|l1}HtT|0^T&GCQrn!GbaH@|PSf;he?_OFLQ{)xQCKS&iSC`!y45;( zR^7kxOi5TFi5(XP>vz+?XHy%^z(rRUwR|Z77Jy#KctpI@;ZH`*_qPTqM3w^{G zHq!`yAfzd|jBPh49Z&4Huo$3hX0HTaZNednD03B@h6KbpZYQn(xN7Ot3S9V`3Vr=} z2y<2LV_BZisMvvn-&$F7!idmyaBn_qK_}Rm<7j;0D2iBR%E)mf{$#9gBx(4bYX0l>)@2(_ zLhZUx!jES@@UlpvuVs`crbTWC!7wSaf+~MTuw$;&ZeLaCqH+d)zw%d`hi#7Nt9`;) zJq7i5>XaakKv`q{=?Es62BrlBEk-!ZaDIfd5WFp3hkJ%z&czmeZ_`XoMsp~RC{V#{ z70Dc@{3rCl(k2`&7Z^$|ANT#%+&v zY>#RkEAO*c`OP;^u8oq?c-vNb&b;t=)S>4A%mu&^Q@8qs#|7T#&}y&Af&x6CjYBEQ zv@B-A$@tI7@X5P*r)-d;&^r<}!I$9FGdq0kuq{(y0@ibyn>k5?3wxt#fFZB26<-%- z*8}u3E>$?(lrXUGOeB^xJCqFMs2+`hiEUii1&Su|&;lO&QITTH9iWDdFG2fq^F5{8 z?_$W_X7*8J9S|R5MS>VsIS1IS(K-*c9sA0vCUq68G0q-~4-ZkvVl`GaED@HfT&~SG z7edR-6X*b+$X^ln8feRn<66w54$Q}I>70lrD2p%NiaK3J%7lOSq(hCOuP=BCtDP;h zVjvbprysEbO5cJqeEOqit=GUPg&XMZMLOXFqMHGp!ksvCRX9ELe@-3>S#RFS%3*>N z^4gDso<~FW-bO&tx=piws&j9FZ{GK0SIm>kZE}#%pQhELPpOrfZe?dZ4Bg9Hd1O>5 z;>(0DG7YMg76adV?|CWmn%wo^hlVHo*v=9Ly)d_Un>1(%Vh3DVk%04b=T6kMFMr-3(er!@> z+%GoZLb>aF67An@#d!|}!r#iU@bWpCoIXE3%7!8mW78#pNn~w9I-oxYRTg+iqk0H5 z@G)1TQw8G4`fl3@O>QUbs_Pt!1D&aD!pECJ;LjqdSb57fcxU*EyvUibS?-NVN7F}( z1f*9wSF-=gYr&tsz3ErWS9p8kW-mRzrv^q>8W3^V;e5I;Wk4HvKboG?~wFo!n!iJ5_|`rk-Ug zlhYQ#triN-Xb1dcB##T3VJggK6-vraSkoO{ohb$`q+@y(^a&>u7$F7QdR*}1yHjWG zhx8UiNj4!1=3zTm`nGnO5GW8#DUK4a3nq|EW<7=1wLrIad0zFQV#7G}10g7xHGq}2 zN?!>IuJnIxX?FF=#VSaUm#){Jre}=` zXS;>~c)H@_0y~-L&&GL)z9*_^zOA0(8Dv!XkFKNNHk7$YZfnf?RIRGiz zg3EN3$+^gh8Yk9P=ViZra^?}rM46E(w_<$_Uj(3c`1ffo*PQWOfAwV^~Z=PR*2h^#62T;h*F8Sxr^ z2E#xDZjCbZo8y$}imMqbWo)ajJN{u`^1>rT#BVx63!BSSL(Pcj4 zy!5AMP}zWqacKLLtyhKyU=C?n&xUeZ42?vDfi7traqjOtc{+{Rpv_Wu6N{_lf!((% z);ufysS8h|Cwy(ahKq}S7ad0k{nLzT*i}N`3SnFALoK*?=8Pt3;K zIp7*SeDD^>SOw%p0_#|lPvcamCZh~vi}jR$<=cfRq*>}X>+x$#j^-Xpi@?0EO&&u}W#AimY%t{t%3*iP}!76n1oCZ=PdMH{LL#XLDjx=9~9-8Y(}`aO`;L#IT4qXVX=so@9}9%XB0k+k?vjg z6mM?Z;~~@G_)lwsAShMPQNtSOS#_?{2IsOWJz__(t#!Ahi+$y#Fi#fGAwg7t6#eQ^ z^zK?eywe9b%mP4C{0cfeT^!*W4T^^d(=#U6WdMW5dnJf&Xe{ZS^u@D3SK^G7;&`qKMrv6wh5Q9NVk&4DZEa;8&76_%QjY2d&CXF} z;zh(`F4?s;#RX9!reOVcXA5WvR=wuB@p{9wwjwOJSCUy>EL|G70!>=f zc*14-z#4T<7Pqy+9;Nyf$F+0cF+UaDwFH!f>~)5#Tj0Umx^&jjH>b!@hVY}mim7Y! zv-Yv?6QLXc!KhOe8Ok5pC0VK5U( zlrRxaK~q77rpxo3nX$N9?N%joCd<^l6!&Ze zm?5tV0y3jOR-y>diPE*+SKQA$R2C10fHJ z)d#Vr@9PpQN4Bfl?ULN{Nen_)Ke>Em&FNNZVt}IvYE5^Ui{`t=@SMLt}Vo8HIPS zC3?`}iH-4K5E8N#CBt1dW@o!`I?0)lYv&K>Z3o>ByJTuL5N9TKyw?HHrMbqnr*efg zjIhcmrfm|ufKP{N=P)D$rBK9i&NmwdHKfABc8(mNyQ@J_J?u|IA}pmCz+C)&;gcP) zSI`{irLT=-J4k|ZAb%FiOXBu!*8kxHZfGo}35nwV zFd3~)K|!lWWR0{<{}j4JY<$d~F@Atx0h2@3ca$Yi2e z{#J?@2)*egTxmF4iI1AAVrOdSWj|0x*ZyQLwXKd46C$78PTYOJ!>7G=vn2$|L$3;> z2{Xo4kp+H4B_vEkzh`j>Q}c@8B0JAk*YC_9yazlY&;OL%*dIc|e~2@`byiQVObQqM zcI{_QU-3CT;sIMmDdR~w0hAunYmDWw=VT+HpCAQmkuUD+{E>Z*Lv_t`+2jb|rRwGI z!O>2QH{ZS26>2;nN&QHeOg;XRTC- ziv6!%gA#>r~We;n*_xZyYSj zRfvSu+@J$p?FHZIXtB3@cZN<871=F?d`QcqN!v+0GZ9|Rg~I;CqEocOIddaZY3vFI zyGL|`I{Tmz+f=WHV?kE`{hut|b_XyEmYinDH-Xq6%RDW7VmWzT?XB)|&z0#1vN#*P z)gV}TI)R?Ke(wli?rrwFTs@yQ5nd2R~@Eu0Yb ziJjt+E`dLjk?cfx*EbmpVP=>`&2nk#sTk!)q#Fg}_hsgIzc!5lh0~BsOrT)kQ(O#T#qJSiAWnBWlS! zOG|{Y;oGL`;+@+}p9;La1pke&bBysMYWsBCc2C>xf1A_Y)3$Bfwr$(CZQGi*ZCg9f zZu0JKb~pQ_Qn{;gQmLF&D(BqS_3K&}F!LZYl^xE~(apjU7XiT-R{#zo5WV%lSn=@` z#tm@|8l*E{&fj)X&l|5z8pyJFEGir|xY40RKocv5*0Hm$FBsT>!(o**X^__9?kAor zaYCjzmXrg5$Lr|(3S7(}^JRD)HN^AG1_W05Y!7o%Q~aDn$ATUYn0soB1N|sG3`@e? zq*AxRUZS}xf}LxAM%avb!wJ?#%URQt*?mzM(_>D~DgMlZg2Sfo3wW)UKRchGRx&kO z?z0VEen6Kq1iD4#OR8qmsh8?#kHA1)H#at4m3VrIv5A^3msl5HG=B0<9#iMDdUeG# zbX}K#M@My`mQRvKk9(|2Sf_mjoG!{vJ*ib$;|n9#d*U1`H*EpqgNEf4RLu8i39Cu! zS*mpI!->p`+^%o|sG8bEc$Jm6z-%g3^+mUOAoYKLbm2@n{7NA5#Hnv>3|Nthmb)9 zeI=wY#CTPXzeA)8mE&>Ffl3rp3qL|&C7H|Dd%(XFX)w zXX1M3ZWHGB^<1qU9*@k1d3Y$1;Nc#7Cb3 z)zgoHNod%H!R_VAo9_ij8ocUkjf!jw{B4BfO6v}qQiX`&P=d3oZkeZBA|i1FpqaQt zR1?tf*)Ny}Dn}cLDp9qifQ43(ap|szN7%|t*-$PBia3M10Mzoj_+T-AsW?(;bnvss zjkV-Bl3XoE$YX{vHGznu-&15UnF+3|bNZOrdub)V1fdo#qGw^qvw|ve&3bSn3oDQ% zULYgf= zsYnqB4?0M0sI9U(7AEf467gJugCQHS2cjua0Sb=NMb02Aw873oiI>ZNcw;Y^ox>HA z${m`-!?VIqcQho#pf|1|k$3nGs-KJSmDnAF68lplN2yLEg9er!3I2?bZN7aRiXDj4 ztG@x)GrD^OxAfGwVBtS2_557r_CYQWm+uoyq5S5g0@!x8r!v@ep<1)^d<9^k`elYp zG}@|zm0shArLV=83NedxJ(bVty)|tm2tG#g&iG?SwpxI&42E-zO&OM~ZI3LQk?83} zPQ|8v%|Jbb0abGp{n_a-uv{r}_nQNWgK+7I=9kRJqN>}!fZS<#H zEp9k>r<*I)guo-ZN|G4E{%8yqa>UI{rYf?3EBox8Q)J7QlN>^q=3>W2Ssbc<_75;6 zEJdJoc2~yei8d{HP-u#Fk%T+Oqz}?YU_&4}PSYSVE^JfM0DNO?KM5Icc0kV*QneP? zqu|svp zQ6FKW@qOFx;?d9SW2qr+%J0QdrmDqm_||1boR3Sj3XL;*LE4+Tgh?Mq9>vX4c(I4I z#-;9l_ivd6=wZ&UiO8c34(o6&g)>fv%p{8sI_VT3Y9sZVFnK{*`b$_gW-tB>HOAJP}Z)i!w)qudd8Cbv5{NaRt|2k`n`1d z^7xD@s+h$vNVvt+e`>5X9%_WbnKqDgHRTSxAvr$T?cR6H%PTeA^cbt-I#^Lt38rQ~ z3tFw|@b*yhLR6dkxi}>->s>f^iCGxQLyXoSm?6o70mF-Vj_3Eq%Iq%*Bk6v|t+aH4 zrYUaC_;tTELK9=puOhaJ2R6&)l>NPn#4_4F3AXu3BMJjx17BF z=CV&|Sc@YsSWS$i0aaLh575Okf zIM-;d`rKFeoxI&@s*S(J^hX7m$1JDf!^a}NdbpEUM^d*PfM=VP+hd;5H< zju(-Pe{vwnt#zqHq$w`T8b)ZXnH^0S8ZyRmv{C7w74SlIau~~sV`p@w-)Q!+w zZV<}KHDS3@4c1#(`)sNNbR}O-SpBQ>W>@fg4UARkyGG>7ZH07)rY|Zr)|MdSu%Xe` zL8#?jk=!&uek1j|fcb%K&NCE0HFOxh>KFZR_pa zLvTx}8~-`X_yX!IggPZpG2FBVkzFS8=wwMcCFL-?FD`4KC_nur_J$?oEr_~xXia;B zNaX_wz=cgG(MsFC-3U7_VM(dm=q~b>d9KAuK6tUf0gw>lXo(=<)M0HoYf3k_ z`W*$!d=}@Fcz;yW&{xw5svQ~>s4%9LCq9r<_oo;C1;i3NT5MVZI@2HTLb^@G|G z18;)Zb*Fz^|mW&U95SuKQ%}b4Hvb{&Hvv3f zq4xicVQ2qeIPU)+!>%kMB&G5nhFwXV@n1yp|1FG}nT?R{KO%ERMh0d=c2;Vn{M}QN+8Q=nN1Gob`j2&$McSim{MEw8G$aDNJ@AkhKc}|A^g5sG7nHbm^{^zbn-L|BQT8E4UKcIz9kS%r$h$&&kzQ!c~&FZ*EJB9ZD?J$(4O!i%!h7 zP%Q9v#Br9#*GWi1IxmrVY&+%#5!#+2uO2pyT>laTL#eJ6bgW|?NNo+cO3SNi z(~FiChz$c{`v+#7`wo~iYU_^)5IDJCRX5%ocD%yocK;%@k^ULT^TSRp&@V*|AR55G zt|HxYAbHI^)Ul;iggm`V1L!7jPZrh|;Ig&M06+SiA0~bhy|exOzR{`6>+2aKtBWb4 z8zUm2NgzAOb~O+s|Cv7&?0ML`suMuMhMK!O<%~oMAWL-oGe7$OM(AwA;RXiQ3xFR( zGdqD(v2SJu82DV_j2O@*a+wu)M`XT89dhO%@Qu&vZIrUZjHHkEK4KOxTRP@w@ zG~||z%LebmH3I!d$d5C(yR|U@MO{t#K>ym{*a&=z-iqR98zI;8?-gK&5DTvWit5My z&dzNtM;+@QP9MiMdY}>bZ`Qn5c{M9B`5kWQ3uin%A%#E{e5W#lt%(|s&6s=IqBa~ z3VI75zW^|CKe88DpsT7b#O3{P zANi&k7(C+x*@_?lk>GH1`z2=M^bJpf-+r|w``-W9Ui-=?NAvrRK8NyPb31wh-S{d1 ztz7q-w|((oviJhv>2`PU(XRRz;lSoT@xNVZvuI0p5&!<2pub8U{n+07s=xIj{QQWJ z9$6SZVCEk4f&38k)YFZPJlI0tvUGO%u?zO&cM-V!(EMZLXSryArvKEm{7fd>GeX#g zm1PG{^96%(O8WoyGnpX7RGjQ3Kkl^#(rg7@15Uom=KmMQ2t+~yJNa|lM`LOM&#Rc# zKm8sF4raU5%OkO#zMlD|!NVp)?^mCgSWiI=>(;Z%!3n%wwTs6J>ha0C4rD^k?TJ|j z1C*5w=-b?ezEhQK=jdO2jC>>*0@uU%h;9R(+V4e1^i$tw-v?)q{0?kW2bxmoMW*pn ze`hxUW$68iUIm_F>P3e1Q-5X$86|$f@i&bBiSDbX{1n+$L-QrEqm}p}#J8iJ=tW-b zJhugVu6f4s@2>n2(YyKepVIMvN>Bevmj5Yn{SfNZxo+)1RhfPw8bDrPZ*cjwo~-o0 z#=>#H7@8^~jiDVHom+e$W+z8q*oMH4jljJkW(QtjV*kz~G`-lldNm$8YL%{|Nc=a1 zzJZm+m6hS8)mx}{jIL2BAJp!78V7bJh_&A_y>A@n5BZO2>QDW|J3#~M+>!2m*X7UL zk0`Jf<)SYV1&5HLC(iBWPa@VRAfo!}Cg4j0>UbyF01|U(YJ22(Hm#q6?BQnJPt_0m z6;P_x`x;ZT8+b%Ov-{cyt8e%zTCU!Q&h%pqPOFdL@G*D^Xz9Mlwdp6u=*{+f!|2rk z?c)>fJNv9*gKP^+$w5f@)5%BL$1+ENgxj@Dfb^UDukRnbZXb$%aQdj}TE{(h08QCro&wpUzR--2txEw(oeX*Q4Rf*A2L~ikO;b z`ajHxd>RuU>~}l#>gxRizD_~tS&z1ZS$brqd32{cf@5!z5U0EhS^eyfe8>T) zZ@JP2;3sz*bgwCfF7-|z-;8{_0_|-ZKlwl{d+(l%eY`&&QJk6U++XU}c9UD*e!G5K zKWdV7^09n`tCc4NNSjo(JB)#J?!ejKsQtayh>EHdc9mM+9sB*MlfHMlHyng>pk@(m zU1qiu1XjwJoA#{J}0|C%)lK z8U)@KKZ=@x>8t4Yi@)Yi#u;>+O=|J(CRwg`mHNZYzJM4(kPAD;dS+!s38sNARIB5( z8mX&?0}=qDjsKeY4lNqI_r~$ zln#C#`?L9aGl!=0JPAKQelesrHd0*w&NB(a(i|N#Hmq zBOX*cdl32@g}1xCvopylM?q4)xBuG?YrwhbT0y0Ej!iB|Wt2jM#tm;}xnd}1tT$rwOuxgpqpFfn zTR;&Di&Is=Be~5){Og4VZHz0_a@Q3(64Z@{*^>yAN)byB6Q|FP?=igpw7S|LFH%NzbAb2Qv zyFMs%Tw72AYOsf4q7o+~lUO%yC~PY`<$Pz|xY=t8!r$ZRy$Fxw^rSWeS(3ukWrgkm zj0$sy;-`0HRC^E$#|eMBEr3})dT_vs@rK8NkT>+?JFD$>Y0SmU)2YuL?h{r`Obu)$ z9?V=p!dzr7cfeTQfYqj@<}SqvnFXT!bN9;^ZtwguyP;RN*|5>8BNMr)@g<%4LB^I( zRR7&pp6BIQmcRpUcBu6v$aRm5GR$+^+!-}Y;v&9^a8_VDd!$e+Vyf61|MNVB&zIrx z`D_ZW;-Zx6a7Dq~1qrLeL#-9FwGEs~d6UZ5UBTawF7b?qp0B3lbKh3u>#XEbXRza$VRDsRaQ9OD(%w}zp!#(CK@TTL?Sys!hcU5h)NESNF*EJ18?9-vod z;*T;%`kmrJ>Et%C=%yY=pj5-C86}qr?8^pd%e5B5aY5E4#xs5V{go^0rjBlOcZ{i8 zc#IiIMmpPK&lgl!!XwmDz6}n2C(kilD$^5cQ{($o%T_y3r&)wI*2zo+?t>G%&)BtX z0$m|N3ijH;n!@Odz8B`O7h|i_69={a&8z3UVR-v6m2s-zbs^9xcR30)e6y?hrN9l#PDo6+$w~5{7A2= z1DcZgf^Abbbcj1zHbU(XslL-kdo3Pz7IR=#$V0?v4B8RBuQTOwVDye1qjpmFkc*dR z4mi8-7G>d$zD5-I2V_^v1V8I(PRu^+N zWhLYq*R{-ns2vPAyJo|(uU>qe5Ai)FPK}c1{>^hF6J6eQuwSXkZLt6v6>|+rI}1(YP5dYPbc_ZA&U7hgc(k2_i^u)1+E zk^}~Y6>pw?S!?|2dnT@|9Gyto=#B3D{JNIpDg2Ztca?5Z?3cV9Kt#0EPA$4QgHbKp{(Xv;>hRv+*Xe8$2IS3{vQO0?Qy(%E5 z)YQ3rmD&^J@930GXpUc@tt1xo?zL=q=f+|?@(B|GJ@b9ZqwQqhpPE3h?GS(xOn!>usae8DIx zqQJk=U?*X;bu_CJ*e>Y(mLS#i``@Y$y~ra~;`8X_X!xyiGUYeF&Z@|V5$~)|@`#f% zstM#TG5a~YCMkL*p_G_A$=N+pC)!#E+}W=Ui?7OHgaCB=5EdkeRY>trL-zLh_b>Nk zt&GQ2Z-X9tuKKR``E!QXqqjR)#7&U|73%oHpwB<1qmVbt%!OQ+LHf)uLISzPdT8cr zn1JKsslnEzTxY5Pk`$ta9!e>U+aWY7pD?^7VFJV-Aax)>U-zCi-A!H0ylbVnWO#79 zvl&mv1U{NqMv0B?Eve1PB+*jU$3BbJ!Pa%qN@4!T0F8P|HwQqw`RLbdeb~NLzPCDYzZgeOd;5=_1TqtMV}GT(HwQ0g4~tvdo+&4GsFh0OMubc z(z0E|mP5zU4K|VjLM)Rc*P#MI;78p{DOlgIQl6LscyKcG# zz!qZq;A?q&I=o;!KiI#OYIc2Ci9ng}MG_&K@GP}%{DUC$S z2s>hjxD4T-r6IKK=W)Px6(IxClSC%?LS>?JU_c~D>Dmk9A4$EyWedcn>1pTN#C>K_ zI;4h@e0)1O>fX^^w)D#D3J0^DiB=b?*R9kx`3C)}AQMq*C#!&9s{G1#&|lvtzC>ND$Q4sX2|kqQd$=TnskO8@)-;f%X@sTnn|359%(K8 ziNEO^q>;N~&GdOWsvc~1AjCtM3?2I7nfHYD5uXzgcSK;kZ9hs>X_Hs$lg)%OL!?kd z7C^v<^LkuuCWnvci4)}?eo)}b$B$ST%qfH}#mjO~pu9lA%2#UBaK|tpzOteFzlXwF z@>=gbN(g+z5y??rx@e#U3C?8D6@4`%N+h<{4>UuPgT?=DfHAv~|Kc6Wxr)4(A}%>K zFGHIEfgG)Apdr%gg&_(g0U(B;+Xlv>mb}YgZ)iO$Pv=Khue1+dpwru;E~yUt%FqEP zB)yj6wSqpnUsKibXl4u#TpeZ0eRhLScV<#kmH{icg7!GA@F%@E$(N-e8Y9x1%(%B< z@5e>xlt^El4afRtE!>TCpCiH|t5uy7MhFLF74a^7NUucTK%h^JSBF zJRTgPPkJm-+|k0%mZNxY84P%y@K_vnJQswb%80G2c?r8OO>Cp$f1nL)ec1Gm(=#Z^ zr!?KYa$1}-U75xx6*~*#Dez1knUYo3B+aZSagCin$Uf22hwxyfW(v{Us1HFw{f~iZ>qXtQ;%CUIiMOzF?x<-|M7HZ%HWjV^~_5{ zJ$8vn4nwFxahH#`%vl-%>K%lo6O968Y-%{n_1FW1N;8c0~*2b6K@_@2D50?rHC_3E> zLN}5_o8qEj(9H%^p~vJ3qb9X9It$DEt~BQ3aa=8a8FUs`cq}X@zW&0Ukm)#tcM}1(WX+--DyLGd{ro_i2dz zNFsz-P*Dh!3DqOp(fQ#vDPheoL3Rr1;@UR%{M$JD1e&hichk4FOweYc=NG=_fl(E!Df$PR9L^ z{qDew>u3HZrcBVK3$B5WCcM5|>v7|{UzpU_-iP1pdj0OQnAqG!d|hcV9pE0+ESE4= z)qon0nhyJOBR4%amp8N|PMMJ|VHf$2&j;QVN)O%dfFm>IXP#&b`^Q1?cP%_`6~!9L<2ksyCdF+R zPb$pijWZ$pZDCCctXy83Qm!e2g_k5R{nQ4TS!s|9mLrS>i0&`=r<+Qiq*y)p&!d)= z6X;tHHfMY%0n!nau^SB(s=DCm%yw}Fl?8S$Mh!lT*sFDd5P~{BV+GsA%1|Khw%Q$2 z&&@jt@9#D!?hGKY0T*H1UNLE~t3FKu!h7ltJtQPwxIK6)SMc;}ZrRI;_fC?G^LLgf zy+OG!#Ea=TKjKusoq#x#aa$t%3pPH)`(Be5~Ju(2DgxoG6I)_DAfL~ zJ%@4Aqr){^lI6Ex08r$?ng*w%{2eGEZbI2Izs``yQt);Xv2s>QJ%D)Ls zvMyb>dCP)UO55GN`NpuI-XY+0zh{swm6%u%Xj$8(tx@S$ifY)NUqb`~HYHnG{UaHY zVAsBRCG=&rKB)l()OQ)iDVtQ;bDV|>(p?q=5_PVB9ns$8ZNKfe|M*4Khb0$;DDv8C z1A_{N$e&`n63HLq2CzrnoK(i=ys28a3o%%XZXG^ zxG^Em#6{;Q#&;O%^AsSGjR!8%ep0i3M8?~<5jVzzS~0HoA3h`F;G8Ot2To#vz&Gmj zj>RDMy3Iob_0*%T%mh5MO4O;qf+~f&DUpH&pk2X92=M+U+r)(jDYa|WOp+M;^4!=-z7Vn^$JUqt914v=>!`Dh(=3J#>r|iNYmA^jT(7b&)@BP1e);=Qrgm4*cvd+s1fnadAMx za&)(sm$2FIf_6YNIQ6ZzWS7`fP3Z60!GX`hFQuw##`-k)Q43lGMk?Y^?zZ(AxAD@c zcJnKrDe-Bhn>4jh9??NFn+YjQ`%ZdhtqbT6RD~Xf+&WHw38TG`mjRiHkz%sa)$#t#w-n@ov|RINcB6m zWD>)XRTlVNWBj!{vhhLS&61n8wt=DMODq|7h?mWB9{D077S2S7+8D1A{FNlDZi(RS zU#{(bGq?=BOKbmiIrxf$4EYw*yMrj$z%1fEJ@d2C++OoonCh@cBSLFPgh+|aDZg82o*fjB zU{Q+raU{n%ANOIG9>9wfarvO=1ZGd!5AnxV+mzj@b?Nxhg=f#=yI`F9%^ouBcaC!F zgBa)zrE7Q>L{ttqhabPuVmofdO9fH}e~q?3;jjjydWT59&(?X{tn01AYgSOYSKBAM zC*iqYgRM_^MB@A$`^^;-+@an{A4=_Q;Q@~Q?3~7}Ss_j9@tiC_1l<0~Qmcrx`7i8vUmaJBUpz|4Gb83VeP z{enWR05;88t!@IHfyXLgv`ZlIj#_x_%6}^E6kHS)?vl90XNYao zEG@ZFug91hR9Q@bc7%TR2ohj674Iu2fr>vtj6p2@GH02U&`hr=S#tX?Jv1EMIdn2V zUuv_Yp4P;REugDff!jR9;rytcqd$9Z)?O+1O(i>@!?lVEl`yi@IwjaMje|dFr+B3$3kq1%ynZ)PTu?pom)S24q_dG)nJdSg zrRBG2X+LHq5bbn|G{VnQQP2m&nwOJ@Q18YInuw?dU@prXEm%oU`wbhyC%x35YV zURZ0yNeRp3!S%gLhFo6A*I_*G1pHT!$)=9;hrOIFdEd9XbA1Xa(8k+kLOk-r>xPYG z9!m8E4{Ts2d!mauOFG&^DQ^;ccT>~MhvGFp1e!h0s(tB}V-8&`ea5)TaAdo>DHMxl zGtFeCNp;DYpR+@YWI3{hs4}2 z(;ba{r5pZNA@icY8MBDh->G}S?GA44=rYm|4G zqSH~Ics$9o;F`%+o94! z64onyH%`5yrE$ckuBGGRqK{)=5id8CV~@_pcQ6??3F8%8_T{|sX5{0)pzo3MC+9=` zmm)hE;iuy@br&9A`CHBD(uEEpMn+WC{@8;`Wl09YOnv-XKRt9YNwiaeJI!ddo@jt{ z3fZ8ZN2}7&+H1UV2qB^6C{A+dGU|Olj_ZKDxp=|et1O^A&%VU8EpTp-lINzv@(eg) zPWAV(* zFm9)hWxx)uQ-+KFw0*Fq{qK^xC^PaVhAX{9aQPA`X$@IbEg$g$s@d%_tfm9=e5xDp z4GMDsts$yxuZ`0#!b(A0G#<-7yQ_V+N&LsbT2<8ji>Zo@NX`Q7l)xWWs&O?g{690B z9rtRv@HpkP)XXyBD$0u&tjHLQ@&FbD@=b?n>D0;DP&;rxj3oUDR97dyU+3`l2^j$P zQ}sj97$HU?x{BYsBW|!Qt{OZ63yM$*t^fX+XCO`+W`n8tV-X`3d;D1Q#KYH7=%JJhDh2<| z2_Vg)vU4>iOUxN5A>UeN>!K5eTEjSBC8ua<-)h!1DeY4KG)r6s+oERFp?VT?V2!G$ z7TUEBCgYFZtIF6_S{HL>GBPVwMe{&O6UwQ3(a7B9#@OM1jn@*ksLXeDDCRLz5pZT! z(yJC_rdiIyHIR#U)m&R-qqvk3_m@$QI-D-do0tgdh1#&#Yomh}*CYRGkRaIF5X zIE7ZTGY7Otigi1ZKmrP%W=??O1722V)W*-%88?bEV<>??DoP-A(|Bi!r|()px_-55$hLRMxI z0Dm98@;gkDB|Sxa4;jt7Rckb8qs;V4W+cpX27>NglcD5)Z+@?ir(*NmnZG174fSw6 zZd?;J_}z4Jxt}$5S_dgh8C&=~#02023kD1|nhu!ESjah2PoozFPD1F$m3?9|8?mcZ zFQ%PXd%6G8*$z&2L=hE062TyTr&6H2q>i`HN7bg&{|aLKiqfF4=@nmpUfvA_MX`47 zF&EV`I3!aV;Th-F7Z$Q^Ia;r&Z5bV`Y1mMQP*L$AN5A1P@bQ?7s4bZCES|Z^#=I!_#Lc)vj=V>iO3)lpyDZytYlt@0#BfDEji+__3gw{& z;x|Wl{i3+I&URUmE{DrPFx0Xvc5CNQcrCPs1u>$B1(T7&dWIhIE)))_rORheUQx+( zYAfh^WE9+w9~0)Yt}ts+OH~q`Lqd@!SYcxJ6g@G69d)E?#M&kwCiC)#*G;r2KRGpg z_f>1*ZdzTba(5h?Qz1oGjgl7|vc|&}u9%pO@&QIER(`3G3Po>p1s1a+r%>Z7i!<<4 zL6F>EeN5V(djg>GH6gvdvm8rTDhnIXXcmf3n`NR3;h?og?E0F`Oa$-my;hqijLTIOf z|AuEG&J~KmeYrnUQJm~Ko3Kl_{$&yLc@kv4UWm-H$$^Nf*<+b&EU2{PWmEpG- z1V4eW1UOES=xs>+9xf=$zb*5{mq=WF=tW{FC4;5Ex))NUNsx_vMuyn6J=8(7`a=gn z?dUXQDy^F2SfWOWirsnmuU)IKL^;Lp)p9mWD~;yXJgfMU7-TsxZ+}d#`CnXi8>h!% zF>v(nWOD4Da63RIXk~nv@;96P8FThVl)j6mfdmOrpuq!Gz)p^=q{N{iR{kOl>M!aH zUd!$o5N9+};LbuQux-z0Z>Yr=f=pBCxI)eF^M#@gkV)+$OZ+83J8kB}1g7m~>1+i1 zb=HB{+Q_jp;V|kJF0avJtk}g16#!H&LNBrnu^(Db1mv3}vz-P53;&p2LmDrvQ<1n) zPY6#nh5&x4cA5+dbX@oOF`%Ga%{~@{y{Ua>@vK0^vGagSmw_wq~Yy zG%b!DqB&D|GZ-Tgiq`BBzAcfkawuHR-X+r9g9G{IdOqwt)UUT82&ZD?^ z`6{N#PeS%@k`KAJx%))hj8c1>g2C0;lnQZVQL9xoRq;-}1l;>pTO7izly%8T_CEB~ z{R?nO5uQukGM}kc7HZ3eO6A&x#!h|{V8)p_W8M{nD{N0nJ@sUqO(_F_@ORT=P@ZYd z{>BE<5jA*q##hpobVzr9!CKV6fk*w#x=>mdhGpE8bYA>c% zO-R%Q&4B?kJa7A#3n5FHZMThjz{?pDBwFFvVYkZ}^Tw7KaXtFYwJIOBF_XM<&BUQr z;(K{Dok!VtB4^c7fzjoFq)T? zzsQj1-UvgPcojN#JX7@he#i#r)NZVNz?Jj&`Ad!@5vn6C3^_|de>Rkt_i-z*3I4UqQSJ0ja*xz6h>irR|)c>@CeeB{$J`J`c!@2h2(}{mm zn0%W`ibJ)FuIlC@rT+R#!aIJx72S)`cz_gM{f+dGCf?PhnOqmx@oFv8kg&h+LT%;@ zlDqWNz)q~Xk==_sxetix`)pQ6y`#i^^8Pfa`1|(VhPDuoWL$0T=dmASU47uJlquG!_S4TPzrNIb;!KZVlC7! z+dIfSe%?lu{LWv`7v&r19;!QnV-(QUeAMCJ`qb#rhZfD^63nfX!3#n!ri-SM)s9Ns zNPm@|c3ILP+xt6Y_yRFYk$g$x->OSU?R@}eF^T9wVH)FRZPFe zbtrN`PMF*bL^g2#VEBS?r%a5`=H5>!((PXU;A0WND5IK}^B&X{(H(*g4zH}#^vIKO zpAbF;n4aKqcywL1`Sv$qq6en#Bl0k(c=kZ$nofqXt3#gxRYG zvvN>VnI>mUf`P46JJf2i<+nyLf^N?jLEH4nR_Q3ey|fkbCs-PDJi|2QGUyghK3qmK zd6UY3@dt^$57`-TU!D1c;l}lO&08y^nMwI%C0y$J~Yk{_Bs zbc2p(B`+9+zrUWo#mZncRHBy;a|Jl0RkWCUWl!$HHQAx6yES}q#azQ?tA zuz^^2Jx91ENUAih9!|2IHE*TM1I-#i;o){7d^@OHDRZDAq$woG!nyX^wm*b7liAHa zmOb*bWi5Eiu(VHDXPb9+zYtwI71i4AHoC)(6fo5ONYtPmIGk#c`ae1RaX4*6`6@!B z_im+G`PGScG3&}A?41fwy7ki94XpN1{_OVaokr8s9U@e1-MB$T*+Z<5RoGeqf0fSS zC@~7;+V=00n%6z`%>KzD4Ua8$?ha0OFLkckTSjtb+auxp7&{``m^F1v@5eoemVeGM z;A){WV8l4u;Z^n2NPYu*957Z?YzYfV42-bqkO+7W%u#FL7_4ZO6Wh!BqG0 z#s+ZvY8(PUn!iVWI%KqVc2Fk+Q&+c5zfo>e41TXzI@nRG;pmeqVYlQSyoV~KLj`6R zEm>QlO0lFCOnyuXL;{*)?N1Qr?a0Z_vO7t}oXb#|&rHCZIE*p8*t|>)2Ym_;_r~(N z&!#u>ks8vUa#kFqx|F{-2{~zVw}GS zt`UY0NKy0AH`r+8Lfx2pGU--%Uy;lb(Bk0?36rur_ID;oahjaW125^iN6D>x494i(>V{_K*-{)CdcU#3 zW2e7rgj!%?_~RgC_GUzSRHE+U4DYA>ovC1#Zac{n#&@IAZ?9`sVuC>V-c!gy$l|y| zlrju3DH=nO4wmis@Iu{_Ob*;SxY*L_IxN$Or#A>J?L%d+dz8P9zAed5jc$*xk2p9F z#X|Y#7dA1+-&bgR~G51LDfZ53oIbe`Lk47CO9ie ztf5mjZ2K^L2Zp+n?{lh*mb?1iHcz#q|4}o?%g%xH1#i8^EjZ{@YqRsJx&8<<-6v)$ zuKBUoAvL~B&?eIZ=f~Z!0Lj(0$lo@Wa0v@lR>;l*4$@tpZ~Kd*@XMLcD&zjUk5XbO zNz+eS%quQ2L8_jtOHDJ0E8>1crh zBj3aISnq)c{@7!AMDm&S2?a%d(j6gPBY)#in$UV1toOyg<|6fi7=p%(u2FB+`790a z%?W62zSB}_tYl_9E8O{fJ`KR}ak?O%O4S$Ok1I)nxovSNBPpc!VPD6j`%Z%tEc1sf zW_cBV58K{4^jXoPTRWi1mKFI!4Pl~iBz1@@F&ldI6)Rf+vY^(ZwpG0~72z(I?G)G@ zS#NNTMiNXU1!EU_z=ttS*f83=7Ae%NEbb-XznO9J_a3>cGYZc7fHdAj4By75gz8US z>h_w55ITnioM7x~7wR+1S5-x*u-!iS&WnkKLw+}h<_%-E>&q1Qyc)$BohC$iBtgnM zu*Ei$M_F~{hGXQcSFTraSAVA>ygWvAApX~q3O%>_M?p*e1?1(X7%WbtiUTYOBi|5C z4*4VP+^qHoJ>PRJ3!)!}6up1jgJnX9PWKUsmjLLt){Rth+S0+QeSt_QxukY)`2?9V2zAzm{*H z-Z4P(E<4vh-jE`E?r$~d$2w`Kxi{_OP1w0<_hFX2}jLbP% zQ}Zf%FIgf%#Qfq;*Q`^J!`Z*JPlGg;ltG;+MDM?ZBM(~eSAt(8>gI4Di9X#M9_%@_ zG#>xAT_TrmD3MnxYc#6yQU0jIE1Q9Cf2qJz^Yu}Rdg+iT^`9{O|nm-B^EiG5Pqub z7F}6wNh~mrP7s|nV1;j2*L&3=6kH!9uTSue$#$hF_;VB)v5Ed`G4dSe6U~gwk`&j2 zH5)S~LcAGzi2c^Qs^QKFj5B>_mlrL1Et586StT+U)9CmvHE5Oh-R$HSw*fYE%f|-M zZFPY`|1hfi*}BhBd(Tz0IZo1YgqzH4Z4!=OLMPiHiA>OT8x=Pk1k zAR(Qu#;{uS8z2r6Y~K= z$11|HO#+giU?6er`how4eeTGLtDIov{uUTMjxQpxqv+`G_-k~5A4zzK#XhgI8fxagL-o4=CL^2+&OJ8LW66yYC3|Un3(65Gc&y39ZQvt z-mu%g6)*1uS$2<5gynjH)ZaXUzdgDv?GZxnenRxY$^29twF}T~5oxHIaWo*LOhw%%0nF;dHJvIShmkIDm16Il>+| zv^VnN#|rpwjNNl^C*R&L`q;K@+qN~a^^I-Y=ESz0Ol(hVXJRK4J14)rpYzl{_da#c z{qMb2S9P!MT3ubO*GJ;WdAiL6v~WW$87-0)&X#M(P}fw_QNJ5?HIOLsFWg&?SOhTh zLhBE;quW0o5$0hBuL$hPK01gGLy^nIJSWqM@GPXw;j64gKi?gFw;22xcml%$X$`?M zd`K=zh%-bM0svOJr00bZCWB@@4%g@Ft4pMeO8DVzbeQqC`Kq^E7C}**?b*rKZpr)z z)Qwl$ma9#7^ok@$*><5wjp8&7BF<7uTNa0wI}6D!MAFK@q9Huix1{EP1C=H204-*K zd(HVzt*nE=p|pzS#?^w(T2uF>Cq#USw1h+6k>GO7<}^3%v;lB+3Dz*-s+97=-^6;0 zY5GMbn4}XY(p;tfBdC5RN*F&Y~diK&$G?aPFtWGbgzj1jBAZS~(N8GY!vO4~>Pb3~#dh z)|CdR<2-|la*03L`gUa)7lP=K6ILt+@UQkZsMv$#mpPC$sV{i_(aW5!-I0h4tRKi~ zonA$GY)Fw>43sh=U-_rmVuv~0zGieV4uv`rNp!28@X9?~2Y?-L3YC~{Ha31#^ym#| z>)PVy32g7}5|C6%v3#Z!q??Aymekk;-zMVJci+4jCfbsvs$yPP5NiT(%VeTQJ^8Q> zhfJIYrI7oGt{7{Hk{%ZumM3CQHPWBMospLPR@2BSu(F3&z*#_(1z?P@Vy+#OB(!fzN zs0zl=Zo58ov%$pp^wdH?rqO`>NsnT9d6vCF(m8cP=lm$Ph46qU0+t=?9?&$#9tMGi zA5Vic531poIOgs;6P_FIN;vOzfb>VWp6h|p!7-VQbI=PK2*;r>_-`oE_0O-E+sp<2 z0>U*pE1$**iW5)5%Dv)pf5dnOhnPUsv}a={W;9?TPG0+rWG6u_CQ#Z=$toj4T2%FJ zi|V~gNq2$qnQ~O7aD*;WT^=!&ty`fZ$X@)pFNelCo@n7F5J~Oup&z;~6Av|KuRt(I zg_-TPQs!yko(hmCVh5m)!}xl3r}tZF%jbt4^uR$DRct18_ZH-%P_;RYm4|y+%YPsg zccOL=RVLvCx+p{-#F%TlQ;+WsdOD?S7#bp*)enY?zs0?(xHKT`&o}GHNJ)LJB`W6Y zbN8wWaVGT)-Iyo%w!gRk+CBqN$L?3W=}bOf>7jLSY8lCDFeYWQvco5pQQX)PSgS@# z^O4G94Cp!tkCt=as)?;-Lq`A@z^|6B2EsAdi!!<|xVSlg{*`{6h82@T3$wIL-cv#u zIPY?mY0x^&_u9VTKt8F4xb%)i%T|u-yKx29VJT{pEMDQ@?}AEhzsvNkg)%Q{z9EyQ z%ZX5wZTPG9DF+L~;#K8%)>>A)hPUTLdqE)#!2WnvB{e?kv*rX|>KQfufoGy_3cYlx7bsBJ=1`c^~6JUhf+ zQN4O^uI09rduBHVKGF^+;Rwyq7+D480Elo#yc=Nae2A?Vknrfv?opjXQ?g9f@i@5m zA>=z&Ire@?BI)jpVsu4`aJ>)k4&MG-8N~X~+_&ffQkTS?O92d~jA>VL;=kE(?A}Z*V1tA)! zkizVXV~0DMI6V`Fe+@-U8I6(TBpS$FmVSGvX9yseddA8_jO(bOW>8q-uR{?QD4MP$ zNlD_dpLP(wWf=@Fp-Df>>0mtxB_6F(`Ewiw2WRkHM_4hdk_KBbgs+YYW?4LADB5I> z9|h~T%&xYEo%`^I;IEOMU#TepOhR4u02 zrMT|Sf7(nk(86hSC#&AgAiCZce8Jm=s00PLQC|#b1#Kmq>#(r(XQWO1{0Olk^2e@3 zEsg5P74FKJ#W?5C?_`Wlco+L_b?s;Nu*tjppV5^8_K75z5fa0Am;Kqar+=$^O^hMf zZAp-C|@et}m!J1|Kz^MuGcPmMVyT zy?Xu1o}O{U@j^92b}$I%G!uUt+b8MD$p=N&3B&QYu@{2$DX$9jKcDqT^&pP z!k$3byhAeS#jdas7Lm-nM0pDodJ)b*f0ob4N(7CLrHEnV98+x9UvqidL)*=xEUf=@ znt3StV^;bRr_;?^BJAt1vKD6VI{L5?^6oL%oB^^tFI%+1=V z%IOwWVD>H0htsV>TIxXL?DR*QFGct1Fw+w9|2BCSiTq)-)j& z4E0{rk1)5)ORYLEPlrybBn@$nX`Zz(8u7^|(5_cPyZT5V)ZuHdzch{F%FqUnR1u)o zO|b%L7r?0iIt%U(_cDvnJ-$b<+MLO|EvQ_v3v=LPVK4+^m^d(7UK*y{lDY@MCiyv- z_yLLTxs<*8fD@!h(Hr55K?rk_g<3cM`C!$W@*m4?AsI9EP)%5@9r z{czP;S9{?_o=Xz8)zjro{3zZ^FkwNHExw7p$dCwKYbNz{zXHmDroIWnz4|F*;+bp- zg0t?&ek*Xu@7$wWW)^`J@=z{N7iO{^rf_6=37WpRdM7a26#8p~%3oiZS6DxrZV}RI zx6#7(Rpn?iZN1a*P2C)~?Z8UG@SI3FX6KyfZrMeJ-oGsCDw;A_7Nps+SZ)D z{DH;ki$Rc${BjMTZ&chwv7YMXc3ItKK{~B3yD@?tOnRyAlztuhY~H?9hL*UEE;7B$ z4?7e!@tKnfFD*0-FA8OSS_`v=-EAv}MH62N>eY&2vkG|HWj# zKfIh7A97q6pqyj*_!^<3(@MDE?h{CqEJ-GRBfV&I>piSxWT0Sgr?jU^7nX; zF>eq*?RhFSdKhk3QFZ_hRyr3*AwpEr<3I*7kid!1(+5OXxx49WH+ z7sxqHbJxQh`uLX<96M^9IvGosyKmn+U~c&hF~~#tuhHL)x<7$i{>h31yGYRuMYR1x z&K+J;IS9q-u~VC&0K0=B^GX~=+|`xT`$Y0>58qAeQ)xfCs!gabHcg+TzGmdg4V;17 zmZg?!TpHlY<3@B-`Ukq=N|GqEfN-^1$gOPh^buA<3NO&iCdhj0tm-%7!#okPtDKZ> z_*qffe$WV-y2XHu)v!Kpc~RzhY6npkiM9&6T)3{Ggc0f`ZUk#Jfapk^vw21<27dg! z?8Y8eCt=`*{4@NwwFbKZ&bzNs!I9t#cT4`UV-4HI^~JTU;As|CeeIka$J8dv#*XlM z=83k-2!~8hk_>!s=#7)>(3; z+vRg>oj>UKwHn7^T$3e7uDT9Wr^fnHu^JChW<7YzkfH$Tq{Btc$ZZQ0>8Bde`%x@J zBFk2nAk%ncd;UIYCKbsHNaP>Xw z5;zTL{P>|C9KT|H1hcBOTgi!pU5dfqTvb#HFNFXEds-1e=HP6@8x`SHg&Cm`V~78< ztPy`4XV^Lz1xOex1e_}7JUCd!HE<)8_NysYFTV zwZ=M!9=72t8g0Z09bo>iQx zY)f6VuKCy?J`!V|J#Wew%}*6rAeQop+RH0xG_2y10nrO2I5Y>=&Y@vWkXa7PoX^3< z``hSR;YRTHyw+`?aJv~Jj8<3)4qAGLU)hutu+b%xclr)s*SvwatDG-5j1ZEDfJzq!`U%RyhTU!CICVC8qQI=&MB{i(GF; z0{QvqU}a7)U{<@6YwpU`-=S*{wmEFk8Ki{#tU02YwZ=sox-EFAwo6Y)f*)3T7!(+) zZpfM`6PZp%E;hzkB2xMX5$IAE?Pu*}bcu7(Rmo5PVzB__+p326LhwAA*9?AyQWu-* zUrGrTn1R3eX%J{sO3MUg{L)htLKwz5^U)CN^D7h1a(8NcwSPEINh`_u^yM@%@UFv+ za$Wv*z>B#Jp+_mK&vHIe`f9^JV;$_?q?oUe#zyi1CN8JzFTqYzl27~58`jIGAKnc2 zDYh<_JWjr;r6UIA%MixVz<17S@0mr;Z}720Vi?Tkq4OmeL3yj{So=g=ABszYQH%cz zRRyoBN89Qs7z>@*!dk{SugE#k_b#y5^)H>bnzMBv_CvO%;0j%~h8oO9x< z8D?cH=9mS=antxR0;C`c>^+pT@+eGv&uok*s9pwG2QdR>e^urQY@ee5vd{6?fRj9b1hjEi~%HnwNZ;cowvRY%h-d0 zf!)EkP9@2*qb9U>6Q*s`BB<8GUR_z&lNsNE}${GMD(cuJ2u%VGc>HMXb?* zC(#hy4~=8I%qh0PZSV9cKbG~#rOxfr-WN$xG|!2nLO^ExjQ`4pP5QCl$dl&U3@q^9 zv;lGh)~+zrH~V6cn47D^s*`;aL$7zh#~bKIbJ@k42S$EqyV>ot6FPbZL~uD}v$Caq zksvD9JG=c)l$B$yew%u{f?u9wWQHbxg4@R^@jcMJH4s^a{WmXjp$IgtVa zEcF@I?EYgsIP3PWSB<#-l+C($B&&RVq3Sx@4W+$#IV}Xa0y6N5*?e*3PuwnLHFacD zf}+jhLdJ{fCPZAogLvKf1Jn3u)_w;k2s-#g(Pt#Ko2&e9KIyI;*_x8rxj=tfy|ic% zX9#@3hrX&UcKEhDPvCxXG>?@`|0rT0H02XC>AFy`3AtBfj^V?Y^fGW&Mo?Z9`f4C1 z(9RrkviWFK0xcyR%EV$F6r=?Ad8^D^j=I+Cr7;~Flvf)VW;e65s}@7mPuyVZ4rTlT z!E!jRyutKmIRyiLDP+JnaRCWl0cmf=&LwZ_)74EtuGiv*+eUoTXYH@yQBMXt5hyT| zeD)*1TCZZ?E5m(U3IGr=8Z>^HK`9Lz1M0n}-`lMN^}N%w6{kCP=Ssm^W3tp!jbnC9 zp;dd&?plRw5il+R6nr>RWZm5n)I1ql$Fcf0s0ijPU)22ceuL3I3)=u4|DWBR?z@kr z$R``C4-ro^i0AZ}EFhIWrV0L5-!3pn!|FEH{7LoUC-O%0%J;%DaLkfO51uBH^N@Nt z>>z`FJGLK1og!;eu7aqAf9~1-SnRC_+-kJ4&=B1%s0azuw8RFg7g;UpMe97$Dx1Q) z9Hu93Vez#|G1uJI{-{DjNk!5OH%_b+Q`jJ!97RIIJ5*v{i(f+l?C`s4|$5+Ff> zXYN4uPg(}o&6JaF(N)ML-`Px@J7Qa`-$zW%Z<#H*toZBGQTVwP0o)x*UqNnA ztVEW4D5{2qE3GLk2dsVD$J$8c0R+hr5t?R^pFf^oGzCbbTb#(EtLp453QM9tE}#f3IE{C;_wCbW-zY zGeX5gua>g1|KWZ}E1|ck5uLet?gql|fq>gNwmem|5YPJEOjE1yKz*35tc-;aobyCv z8=_<|eRxx&{g>P?n#*=FJi_s;tVC~aI!ux&qg{$WT`^|>iOFHjOrkx;UuMBi)}bOr z^d`a5?se!Fbp(Cb85*LsDYp>daTFD-%U(uI%hUDBiqt-0ob)&oL@{8YmHG$?NCgBTJ2N=+W*x6Hd zF@UHOfy2k~6Kob&8qG>8bJb}EZwXWajcKsNP{blFXZGVNM)d~ZTzPgQdTDM-Iec;` zD#;}MVX!RbC?S={O3Py(ZWi^t4z;}M6){YwzQDdmbM=B;=0$QTZhjI{u=PPUMStU8 zNN?en!9mCho7o<4r1hhk5y1E%V&ja~S~U}IZGs*mX>46!^t3Ip0?j+WC#L{TMdNpf z+)7JYzvVSwCY%^|dNq|}WTyW-q1GsD}u;&olW-)`t$Zomer_9MjU z-eMbPz8GJmz7^N?Kcp&CI~9r-!hD~7eQ(1aELmu$k*F+sPV2+XrhlkcFyfNpU&Wu{ zdr6>6nL{#xAw4OMQ7T*^n%ib8en*54Pt35$u#A1 z)fYM(M-AbXIJy~S$>Gnq!G*#I!d=q214lagZygP8=lAWBe)gt)m2iWYDUv$tyiHL6 zN1m9?L`BJ;4<q`iC~Q54yQCwHuR-MAMfpVjM{KG+ zWYvhElpRQ3=TR{IDJ=Ffly1(PlJ8e{b5TjQ1&kXu4DJS-lCT@l5D7&mL1+YE1J8~jXKF_8`D{LZnt*i8dT*BF^vs{Ljk5_e7NF$ES0;3@k8)C- zJ_Tv)YM&A2)v_;p)>-4JE(o*J!E$w(7Q`QYukun7P_S1}V6l ztYh2|2q2=RP-EesxiEB3xQPBPR+oIzMXu>svRvv557c-I(ss~$dMs{Z(U%1-6F|7k z#2G(89!NfzZZmDbO7>_cN&v4g(w`(}m5+pE$rNW&%N z^i^lgJ%-xz-b25;IT2>+AbUTNRd;i6^-j8?n z*dlQ@n=bs3D4;;;Ntv_AGcpFc`?qqoV~T=yM2H|N!&L5EDMlw2GAlkb`aK;={mao7 zH`L|qZ+ce0cIu7)?gAIIw&&C@=EdJuIiEyI{hZ~P2AiI z!q#+U-Wc)Xi+k(lGczG&O7kfU_hA ztG&20z~8+^aAihYVG+zSSE&(fz$_LPh9jhI^4p1d3Eb^dF)}J`D8}dOeRnS|QLYEt zO5%)84fQwP3d->V!6FLtc+Um}X|l@2Hb%}l0kOrYyEZP_RzWsXRD>+?r->@{OwI527x?_61`J||^FCwGDOz9} z@-$Wi{U%<@NVqDVQESS~`a!Rch)$(oPo?@7B$eI>%`_Y))j7Ts{tcLGTNa_W4}|E- zb-IY;waVtG4FfO7Iy{PA@XP*VJmNA26-IVCHm8At%sDJKsNu}rV%syOza-S3{}Dwoo@Fu$?BJ>2nKXVej^L0&M^Kjl~n*GIHq0 zKitg$^D!yA#>}e*y2j_o<1=VTvP6lauZp=)h#s6g;=jo+?RgGmqg0gF?j!cFQdCbU zvbj^S6%QCj(9W7wBKKJjGv)pLFX*oV!c!Z7H*yp7R;Pu-W=xMG3QFlpH(Ml?Ww>2& zFP@8fvEOeqT$szvqF9-Jm?uC8M{I~w%?QfpvDs#p^m>AiKo}|5F zgciy$fZPNJg%vYZZO)11PF=+dfZ=-ksgAr~@>*#f4|?J;+_wWch)K1w7Sv1aGT@<8 zX{L0AYPgXz^9!QE)A_&BT;7E+712vp3z&nt`7BBN2)O=0?&!ZR)=%ece_T0k`4|vm zg+AmRH*j+W#zyr4)^Yc=pMmoU=VMqDc%a5Pu4M$H&a@Hze5Z)*1!sa|pQuoVGJaIw zy4ZZcCs-oIp^7CH=m*9?fsaOMU+Od$JmuU?wTq{1*Msthvqq$)*@4|9d7=f1&R=={ z&8~kCM202`25QubiBT_hc(2X`5e2?bYW0DDW-D%V(>%RAwk9cU!i%bR zr-+CDf?n6xh(%}X?7Y?|#zO24w#h{hrqNcozFj=hzCxbp`U<2|A2yChZ#T{W(?&bI z6XOH}wXriCaOM8)49qz(nD_lBxTb=cL@SG6?^81d2Ra@8+ecU&Xp)jPOrEQ<)sUhQ zAo;D$PgbL!Otsknf=cPf5ih|jiPb3g-_I0;ob z;`csGWxZ%pxXqi~=tuQQ=F@Fzp*vXrR7 z@f?Opnuj%0)mvPvaJfh`IOPm=Oj#cF>8H03otxCb%ls^}y8}My^k~m-pNTW#NdM6Y15o?6jeRcUY7L44r0o{fTIX2q~@Mw%TC2E zYVRoZ((gw(MW(3SReCQrkkF)SJx2p~cw!E$HtT)R zs9=rbTJ`P(!7APlUj$p|FZIj5^7?VWf+Xr#-kbGYzyfwFMwlmsVkskdGy zN(Kg_X`>MVXMCU9#gmpa>kccsgycT_m+}y{Dbvz*6Ii;vMTO4S-w^MtmxG5910_uB zjp+x+xY>7&Oim|O0etKoB0NiWT1Mh5Tt*ZF+1W5v(Ec+be$bWC5rQ`!L(r9^s6725 znmL0?!*-Pfa3!)3q+d$^6N}9KA9U~kjYSp~RaI0I`-eqVWoG)HS!A|v6`7Tlh@F*_ zh=ZHsKTu?5=Kljl{-^ohC^8GnH?sVnDDwBp|BFQC{{JA6Mg9v#miTWLS(Z`mUo^7f zH;%0GFCJNqQJqnPQIk=NQTv-pHnROjj-8F{Oc{-wO)M=qBX$fzq`NlzZd*JO=eSj z8=LQy02u$JLNfv!U5#uQ0UjncMz-HtvzevaH`;9P>h$e4n>zuFzDMz&ezVoT1ZNw7 zv-7_gXFJPp#o5l)*7$p8EY1J#tn)wg^#A6a9c)~kzl~={S9=$Lsj^hL9@c(v#um?zTd%j%4*AemzqY9rUobLxokfs;CuQSeeUVU>SJBW zzRPG|mK86p9wD=W-~g5myv)g1P1kz)ml$nx0i>>uV5Y9_hDJlwie4nn@Iq zjJ}$CjR@}u1$6?KDh-rV5CvoC9Z(%j9}o-LH!?LkGB`Q`V`vUI{HPd?*r zMoR~7H1tkDg-PXF?FTgm7@fi$zFhYLY5(8>!ewMc+&4G^QszY(nn1HaR087B3A)IS zDHYNQz*${{Ik@=Ch}jJCb9x%#+oHC!v->T?OKHY5BoYyaylZx71FZzk9Y|D5#M*bA z0vsj8JNxZL7byWR(${2vI_E=hxVwRh2mzJ%El;4CUW2haHgJLp11Y%$WXA9bjRTv0 z5dvPmsF*-L84vf%zqx2m zRLG6Bz>Az5CBIQhBXHmhk@KtmTX$#Mi+;OD{V(w&^+&U#-UTLSN5i@LHYXS0ajEwj zQ1k-6aXO)CAO>~yWllUipafE&13Rnn+bp52LE!rp;thLdHb_E7$a>H|yiAC((Fr`T zkKnySFc)y(Y+?o?!a703&se3^RUotPJ7yr%gwRy}iDdV3EYoi;`ciOc0zZEg249c^ z==?g*|C2R9Asu^ldwE~_qYk4*x1lL0238AATlQywQqPDdiUrM zxE9`v7S@`W~eirz1DjzCLffY*V zjqUxlTDQ7%*1+a#hV~|H{A=gn>+#kf|MM$WYGQc#vCet@i|XBfI?zqMmB8OxsBCQ* zy8|1>@WgNRtF98`MDV;Ch^5J?;ce#!wmFfDsMsaF%@=iXYH~^{@0i@$#M zOKL4276Dx}cQHSdGf?P3XjXFi9nl=`YwW8j{tHitmH7kGQJ7o4zjapmol<3b2Zgt@ zEXHq!YVrpS-fUq;psno}R1mzEXG1`4wg|h>7s=tL@6`#&)`NeS(0=fAIsNPvBI9hz zR9=@5`|ldvFNe1`tczPpdez~*NH8zEzi)vM9~B_-#}z)=vyVDnT$(}O>~z3H^=H8B zZp~M~?9uu=aKVF@Oc1U%*2YfNs|!NS6(M$mFnVtJul$~i0@_biFshdB=$!HE$)&yc zgnWA_*k@{sa>W}$b(`6@yx~8mSQCGMd`~XFmi!f3drQ8q1R&YKPHaR7?*&!czml{9 zzpykcjPPyrKBeGZnTPhCQ=aV)K%8FBQQk&5kL`(9u}#fxCG$MLFg|$^I5^6032lvo z)%PM}VXY3p8k=69Or1WKf!jalcp1u3DNkfy6<233KFtkQ^T+w;L<~qV%w?fY;tPV* zXV&1~!+{sWCkc_(9aaR1*jU;GTam3UKOsXpo}NKP-VR>S@D`IPp>7E){q;^t8IUZB zvcJ5X3)()u$!9`!q6FSCG=LF?%{Te1hr8*fNB=qzYiS;ngW7$~w}&Eat&=qCsz|P+ zyL%Kw%IKuu?CiyPYli=p(EZ#nC-FvJ75gXC-HL2yGW3Ug-ezcg<}$vQRt!X3X&?`;cM+2Zy2)JMl~EN2KadSykmN1cu*x5 z?#`&=*or`<<*l9M(0;>n5c;j)kh7Uwu~ehz4k#H_d7K0ozo-%+A%!yItlM_t(o&o3 zebIYVHTd_SOWS6>dk16MsTjjl*BYUX?1iF!l-i=s8YRJH-Jmy><9#R-$rbFACDHGf zY&lAZvT*R0F$>F%{u#sw7z8+1^O(rsn5AO+yLl$*z!PG$IQsEk`)2JE-72eh)EZes z-GRKSIr_OO%yBm-epshIR=rVlMJm8ly--_LKhA7!9^zr>y`B|`TzY*}WFZA&B42^2 znAF9WPoW4-L-5E5jh+5T*#s+!0VAnYbzJjO+VOKg*Td{iTb6u!*C}<8vSU0hU zJXZKgHJ!t)(SwB#;pA;ywoqovjbK7FQ z3#Nt7e;(s&jux$bZgpSSyE{kohEZidy0t>h8)N}4>Z|Lk4Iy9> z=3IO(X!&z?_%X^8@oFcWq0)a$y%H^4;b3)sX*HLVl>aolpD>X+52o|1S+H7SsSjk5 z4e9g_9gsGrL`G#&bdzXFV#sx|qjt|A+eC+^C8i>*hr}fB!xoHytxCQ_kp2}m&hC57 z;;X(yG4)io@plO@^)$d<%i(p3tf6mY*^3YqOP&h!4g&;dr&MSPZ+wx(UFvhz@YMbZ zv4L7j0Bvp)jE~+Qn8DNU1^G)DMNmqaDO|~1 zzrt@l9&WTl1{shLC57OyWbJo_9UsdZr(eBTGg6mFPyB_^)Tu034?P+iFALDr4`bTr zI2KcBR&2WqUz9}<-D;Y+A29gDEyY@@l)!yinUPC92dU(COli-S*SD}Cd=4D^k)E*+ ze;*IikzNv1PI)C(&I@P47+_`WNr<-GE~C$AWx%bFV4`Ca@mlV)1@*U#!6Nb(;#-K4 zv4C_A_a}Z&;Tig&C|zyS^l(pJb7e=f z^}M3_ZPL3G!&s2VVYgG7XG!DN%pzR1L|KDz7S=8q=IuRi zb;%mnwXa-$LtU4DL0nA%=g3S=&!dXS%BWx71pyl`SaG-L)rhyoGBuQ2NPnLva? zc?6yjUKRGVq`>Bpiit0XM5mV`A+#yGcJpQ&kzM-dDpGSExO{I0b;Ics!KR{jeWk+5&m2%qu36QAwd8MOMQ&pT7rRN!clv^ zXU7gZSf^6h{sf7`Pu)~<0C3|+)Qx)DI|I9IIkyb+QZ!!z(|nqMNXMVf^1>Q75+Y`Z~(kt zJraQ&c5UTt8e$fbX)M)0gN3DB7S&lF?2FWc!0Sh%aMw=R0a=c}Z9izdlTEoPxXjWG zi{+{dBlJNYNa2M=r7c0VW8aQ59N8P%EmmWSnijagF_9i1>)cNmZq-91!DXfyvgp>D z5?*+HyY%du3G}F?mSxpdZdihkVO|&=&5wA?z5_DKT4TK|=8;;^cyY@vW~)S-nkA0@ zYPA%s^V0pxH8yh2j4_LoQsDC(!+D|ZxTaTDw)1p zZRdhL&#b&sm1VF`j3%yfkgA3@8MTWb0Kq*(fy?x<9`$0Ki>AbHrQ6%;n$J#>|8}}b zAwS@~lR8M>Y1vSgBStQZkVOUkcQFI7`k;m{89{H}oa0f&AokoaF$x|U^NVpy1fpCM z>7Vt1%RM@&`{q!Ct=GhG zn9R}FXiy%O)6_jSFE&IyJaIdOUY&oQ9xvn08bR5Q>df$=Y>1yQcjK}2SC!T?VBA|J z2N8a8W)FhWcPt%46P#pWM{e>3J}k0`gyv2qsJN#~qbJ|N^HV&OZlrtlH(NtvtsYwP zg8nbwbAa%&)Yec@U!w-hFzkXL(T z7%5)2vGM@zn%+A3v}JWCCfx=HHQ)=c@Vm?sw_vFPBWlR69W-L)R8SmwolOEeH9hq)*U&VU>GxucAsHU)L z7kp?86U!+JbDU3hv)X6LBI%v42FLY7B>{%)0Tw?s~HbeLeTrf&Vo$kboQQzDG zwdb$261dn_PqV!8nqg!?%}L@TrF4?v$OI#_(^C=kI zxxBL5Jph@j^|mI8U-%D>?ZjNsel@H=W%&Xt`mnLVWk%bNdV|Nn(osvDU5wdTqc&RV zLcH3F!=fJDnSG5|2w^@Udd`1QDO;=D)5Ssg-cH zRge2)o1u3STo~hz%P>o@Eq(U8j6pWju5dn0n`gRh)ue+LLp3-`BHSw>sL@VF;gNj0 z{8wqY5~2JQ@LsRh0jLVR%*PgiwB2%8HO zd_U6?;3;`Lm%Uffu>qTamr1q=Y4c<@Ad4-A+_9UQ*Lvyu{stjT2goz)Apim5zM3&_ zs%k?yfAKbXpHLyfKee&fY}Ijx)p85PeN>3xjRfgDkxtBF{)t5R6@$kg+pN4n%tir6^gBtsUbOh}>Kq4+?NX!2ahwoZh|R7g?x+0Njjq{u7(4TP)7Y6C#uvq_+#V^m zIM`H-XK+O8O8-zY=zq$D!>|I4-tXG#euM$>|>0ZvF`#Do~-lFlKF^Q9M$VF1RBjCvw!q3+PG8}IGVziw2RUF~K z{gZkSRXt3%F~3aq@7ucvq%u}}MusU9jV=`)w_7P}Z?_*a8y@S-dqoi%e1KjZj0t(V z=S(*5_cd@@riU&>_LjGh9HncSFS~NO*w^8+GK3r7I~zXCnCG=&X)Jh7rZC~baBH~T z?z*aV6zg(OW6~bEX9oMhkBtlEcjE?lA{BhRmRPN(U+QiXOE7v&mozimA8K0_8^%iMo;f~5WG{_jsX zv=cmlt69(4cc~uRh!(*QiU$t9rm}P}GvPJD-`_uEOgX23t z=4;Yc5i3eZ?vtIp1mkN`?|2^Hi!P3$L4P40VMe4a`z5)~1dLsx#217I)Hf*#IAhu`Tfc`M0`tcQE|1nuG0P^i&-pyQf5?A z{AX)2i+vCBW_#9@%Y3!F##oK+nj=53v-X+aIWbs_lIJ}=o$CpyKo=ABWpKj+hD?kz z3;jg8MAt<8>}#Om;3GLiWZ}?*t~I^?y{lH$FZ#Wn^*ixjJ-13E@4}Rubqj!=xmAdj zKGv^z%ZvFO2Gd4HKX~+qqGS=jsDv-=O!TVZ_CXa1FXd=;%Yfwy4qdaXunng$-J}=l z=ceEDlj19b{3(KZDPMl9s;nie$mv5dw4(KdHQ6d#PM$?IN0?(M(ZbDFrb*DY{s>amnon7 z10B1r!78c}<`}r(s2U@>c;IGJ@hEhx6j|q3TkIcdqSH2H#f)h-&cG+F$)SWpQXWQ+ zE~&qz4Hc+tF~PQtE>yvm@HSB`oPo9p4{dNT>Cj=p{cJ>sz00=G9vUbY#402KPfk8_ zY6&S-*r*#Zz%*$vYUF5NfzE48gpc5mL@2|CupKj1nYFtp~64vF%r|(Jb)v+uU!hgoLEj!DJ>T6yA&MGJn#LX75yDK3P~Rg;-M|p z;o3mEx3XdeQaShy`B2mTVnvddZ6Kv7;us_nG^`!n^gVc0{)pyPpK;S#6kGR;UEN*E zS{%eG_IMxEphaHLggm$k4cm;X!;XpRBhQ$aJ0yANwpCdt!C}5Jy*my`H&|3xu+-83 zUWTt*OQG|k^a3dZ7a`FYl5N^06ki%C*RDn{Ot>R3b&4j@RBC)9%e3 zrP3S!N@-%HA5-3#(o@=U4j;tKq3oC!mosVHl&zho!tcC8Py|tx z!z6ao-~5EW0+%_ojsC?2M;Y_ezmmx{9@X~I$wj{$j$cU*OdXzy2szDFC5^f#d?S8E z61CMaGZwj8&k%JEOd9qG95zNX+!@O}|A}Ia$0n)>OZ^1@Z7o~6rRQfzdJ*kpx%=)W z8WlEBI2_!#2-O-!1odb!sBvRw#lyt=XpIg{lH3co9)kYAs{8V=8n>u%GH1BP%yp0k zRA(MYG>Sq}sgxAW^F&b@DiI>{oGBS1Aw!v!WK1GMndc!x%8>Z2{l4$1_uadDzwh4f zuit&{^Ej=u_u6Z(z4n^++WRyey?xe{15@7`-QVcvH}6Y)nD@<`d-tp0Isd zhsgb%TQ7SZFe$fxn#V$eJ39u?Q5fCb4E6Urx9G)9KWM z*mt7@FY10y@jErrXz;M(D?Vq2S`KRSVRh%`9n#J`Z+75hK-B$R1^fOwvmw0>sH5m4z1h7chzZj_Y`C4b2V=Zju_c)lCvK3yjKb))4=^_+<4e%50P+PyL{Wzh=j$ zi4)H3zQ3Sm!d<`YXJQLpSnTD!vYmPI4ZTgB>x!>`bDm^;@J8{I%*W5xT+aaR4`vRT>fY9<@2b{29<6S*PRNh@jBWbaknz`GCEQ49QUw4u0nbBX%?Lf+a$In(z8aK1E z&z!p&(j|R%jhmPHVm-rUNb_lds?VaSd;!~L2Mw`j!zC~w>vO?9&eG45U>ojM@tN9&n_GW4P zusI#ij@9tb6W=a7ot}62>nZV-t(#-Fr~g`ZIPIQ=%Fa8^l_z^GYPN8NTR~Fw-Xqfz zj!!MSAJpN#Yy92eEoHe&NZyFc=m9Jtm}ugSbN6=$SthVS}PW#{wKFhyz|-L73g+aX2{ z)(Y=mtv4sm-vP~8L!`{94{DWdG2g%(4>MyJm8dq1$QUP=CLbHW$54itK`Z%M)ca6%^H(vUxf;$g8*ls9~>{np_^7ZO~bC0Kg z+gzKK-{F`?l}lTX0Ws-+j0bg>_nqrKI%Zwp*v+~9OFY~K0clPeOx9BO0#`TblJ((X2v?Fx_GFk-K-e3v|^liSuhi+iwZ+FBZ&;iw)fP zb@sF86K${WI5VwVzsCLt2|m!NwP5wjcC0uFZYBK~t( z(ZJ>{Ub#)RD6)*b(tP#sF;Q>6%rj~^Nj6abcG&t?XM*CkS&lwC(DHiXwzsP?8twd;AKlbMa};(Wg4v>#ekl>uQYT8}S2 zdp3VdOS9JD&u)JK_1wj}x1G#(eUq6J4RZAQn#ae#zP`3?==4W_y)X+`Z87|jTJGDz zxQo{nIVwA~^0&z;p#?H+zicKdwwPi0k+Npa=p&8a(@)eeh!t2Sg;Y~9&m zNomiW3(F_wUu@m0;MU^gEA20MnA(?YNZ)-UXFm!| zqkAk~I51+ClUL3#wZfp&E`sMv)%_=zs24g-o0d|u@Bw(HJ4s2A8#1EC-kbv?a_0WCDyrK zFF)|sQ=>@>VXF@4-6+m3yrYnHT($*VaYm>O#vZ~wW)1dmoL>wL{DV*E|#Zs#v} zzw>y%g7H%V3zKJ_i&M93=B}pxMSH=ytoGhhLmur@%R1l3Jo>Qy0r$F}HJ;AXhPTQ; zz2eF1qs@k{y_$CS?#u&Q{&IZu;qU_U*ZW^h(F-lDo3~)`^Z3XO3H!x=z8sqU?-EZo|cPhT}vchOd>DCdaZcLeM zY&7hP`^7e0;5Tz7=H#b2L^@~eEHnyptF7!>m$1&@>hC1k0$ukxb!Phy9f-`E;@{jL z<YB!bm}^P{7#Gcv8E4GD~bU-n)ji&>`_c5tX&ud_=OXT9>-D<(Gkbq-ng#Qze&{C%D`z>B zPOnjP`?J7zNXIYwCkE$#+VEG2m%63XqhIIpACy>hjDEX5{fwZq)5osE&dA%`D^JPG zQ(Lt8e$at2huvCy7&SlfW7xt&g*y)KxOm~UX557EH7y-fU4v6?o|fz0_s!91xqzR$ z=7sK+h*`~g_u6u8SN7K4ciTy?XH=s$8HQriK!0UAj+`s=izg4m|D+!@vW|E zO@2JLt#_yEyPutD+J9o=g;Pnp7tGxo;CR}$XkPr0Eqix4oXNLWPd#B(ShT-1dhTO` z*{;^P!^5p+_5bM~ptb3CH>3Hb8`Q#g-EDQ^#`{+q=AR=LUUlqU-r4rOO2rn9H`61u z7PZ@CD2h^_xFyl8`3Sr3morv zxs}`X==|EwZu%$Jk5f^ zc+@PHAzytwg8CS={ap9r($mu&|5#?#`K}3Fw!G+gUai5P!D&Skg__4y93J?(_Ud~u zKdtTP&E1RB7VEz36dV!vSD3{Bp5|D4?Q4h3J-Ws9aT>6&R=PLW?59*Qd34;Yh&E2KpB+*)!Z_WLl4Cl~irtw)+oN zILyg#Jy~+a_0`Uj;>(%q4&BIz^p!N5)W7zmV9h11j4wOpHGA~v)Kt4&+glk#R`O;g zA6%sD9siFLj)fyWiT}<4s?0GuxAIC-(?Ux-h`jAx2MRa7H)EZRC(c zD}vPiES|J^=2|bq$E_ZxZn{v>Yhagvd7H+M^e+}|4Ev*JEdAi3cfV_%r{&DyJrma1 zSQX9r6k1p5?c_aR<(1#NndTxGdGXG!F)OgH_-Hy@m@dAn@k_nDt#yXtS5rqRaT zD7Cc0;Ij5rl{=NEPxtxLAp>~&>}Ro}jv zJ{E&6&vc)&)=*1$_QTU+*IT^r`!t?8?AiFTyfDS|t6kb9qmE6_NA&GI!1(z$L$lI? zv`wjAr%tQf%&L6RqUE7aWhb|Pb-Ny;XJ)BZGxy8EUTb=ve_Bv^V0YR2gy>gE6>i#> zt|z{U+aI&YP&IC0=O6lg{9@Nx_I8b*c_OycHMJ!}N3A}weZEG{X`9l}RxVFt70b6w zcXFSQp_;YkRdk)puEi~4rWu>4&fYP+pvj=Zp#vXwS@+PjWU5h{ybXZ~1NsMldu|YP zS+(?5=KlU8LjvTdG7DFfm*{Uk-yv8_v^dDcVAi9<{@YJ>6Pz-gd``WtjdyB4hqrB` zV_LT}uGxLJQ}5-Mw9MwD=C1bL@Me2&ou*|Kj&2z_V_L2n{c^SHH^08`#UGCSHaU5( zrmFAQBE#~7{K)(-o5y#(ojI&&No~!8>ayIcW);cd6@Fc3rmp|_{mY&0ZL52SsUKf8 zFXykyM>BPwq?=aG+5cN-O7J~Nhwzf$Cr=#nUR$v0V3Od0W7Xl;rWHmUHo~n?p97jBh7M8(#b4;l>w3#{_mx85OFzc;1V7Dx0%Z4o7MvMgDMc zJ+{T$JhboUZl~8*P;;v_#%GQi{*{PdWu}^mu2T9_fPBuSmQlD+?Tsi4$@!dAt%>{M7 z!#f2Y{uq6xQ|8TK$w>!CuATG1Wx8Hyt)A0~v>1=VMQWFKRK8lZe)+9u!Aakz9mv#% zmrS$Ijj?*M_M^{Wqc^-*gA*e?@0Ig1hiA;`ZTVa0K*E`aU3!!^>wfA%y8b%PE?c^e z?%LVUf6a-je-;f{ZpObaDje71f!b=JNdLrB@8q(=BK}~7Wb^HZ`d6hl`{^pQ9qt`7 zURdTg;pOY-RIlhJ#fA!1b94S{KX zD~!#8)~-zUj2IQ|s7UM8e3SbnanPGXR=Pzoxr0s@Th6lIyKH;w-7oxwvIoxT&7`su z7xwkfD=RMFe(O*#vywqW*90|txUxfW^SIS<3kguOh8L&Kt_!{V zE+X%VNp+d&*4w|zg58d$2x4C@4ez%isHVHNgXcZR3juypQaZdl)%mB%W}6EZ*-O=H z?gaM#n0Qosd~<(&zDe?lh52>YewU_fZ!ZX5_h$W6-GZ^Yj_;){zvWu$SQz$;>|5}* zIC^fccIuJWldTGG%bAyXuhF$5c`H#~E2k z#`}hU@QDxo<()a-d)K77AN|(pn-6Z;`>HMw|{tn2unlX&ZnbZWjQb)WXYc-@cX!7YQwHa+H~uGZ4R`DnYiv$DFC zg`p|ccRGcQPI7&(=rCyT!jxG{zjn|rs_@x4LoN2l*QWfdKZ4T7t=$|ypybHzW|J?t zXk;ugnQ&u;y+pUiqm5M=GekO)F-5y0TJ)cF-`U1+hQ_&w*IV>b$Mk#~kr1A_>X@}h z`GM2ZYIbZ)8c@(h6tq~+%gb8g9kk%Oe@)<~BcoNHTxz=0@%BdjMT%=nezqDiXpQjg z_I49DC5YZ=#eBQ|I6C!^b6KR8cgwSV+vGh=Py6Mc@H1l2D_5PnZRz&b)JSv2 zj0Fd~*cZ&H&e@iCE!NXU&7%1E;{3&{@-`kT9Bh2A+lfcz=~ESzxoygVx+lkddB1kr z*J$yB)DMEUlV9sS@!o1<_+@nR(4p>4_T-tX%)ab#eM{&Mh0e3m4+VqozjKguw(J&E zF0Yz2U`Vk;@7@u6r!rye?s6@hbl}9tM{DJ4ZG4B`>}yRk<4TK4wbpBlCbq zW5%WXtgRRrG~>rmMN!zkvzvyy6_$POH+p!AOXbc#$34Yqr_)Njuf^2%Sya2(CE2g0 zs^~)K2CE(iIvtGE-DoRGQw=MsP+jfhXnem{Z_SlX`T;qyEBpLe>Up{4ZD${wq00r? z#ib`&`FbB~vC(JoMz?F{Htvc}KJK{PZ$&|1*;nDOYptyF)7#j6@7Z&}S0`zAHEEq} z<53Nj?QO=U&M_+cepi;7mv&7PMl~y_z4fL0>OJbS7TcSSxX>Y?XL3R4z7WMKSaW+# z-~o>w1+jPAq<^|;*>0Hn(-!?tUa+@Zd!@w1PkpVEO*b@aj`^>>>J?obY$($3 ziWu70>Or^rqxR(2#Ky$MIuDC>C{Hrn<8v~?(nQ~G;Zkw@;umvYzuo@QDAK|Eh@Qlw zk6K{LWV_RD)w%Ot#?1cVyuss*PRfIs3fRw%VtqB?8xZ83FPG)5eaQ zeI{^{_RFz52MxQp##9hjsh*Q-mTxifZS#QGXNDimT~ZRYt#rGWuNrNeq#6FsD_8y4 zxAzwhWEB3;F?TocP2QQ_E~mSwsfuY~*b9Yos99aYl?6>sbRRdXBrEWyW8Q@8EOB+R&OB}YwR@A+@l)OG?r&Y- zb||lNoTsH;Tr-aa>vcizga;*gXkdw&&gH=Hlsj4(rZYq>i8OX8(2dv;J4T zJG8qpQ4*e5vAocIL1~-of}0iAehDw%&9{1_eJ`fMqurZO=dg}T20ZTkW=7WHh_9zJ zc_q#5OTRzwXcSkd`X&FO)cWpDwP|zu&MRBocIB;rzg&9yJrDGFFL8Z(CivM(UeT6c z=YG_bnuMIIxV>dZMsVbk#HlK-Q_MT(cxNZPbvS%?M9R7~Av@A9>-X7}yQ5^s8nY%g z5A71Wo@{z^c6I-#{HV_7w?7;H<<7b(Q*XcB=K1`C@yfqkTffolc0DC~u~A&po!QGh zvRw6VO^ofhc;>A){bs(IE8aibpm?wF&Sw|*vw|$0SCeGPH^xqXRWatN-0fLy6Xzpc zM%0a|y1S;lc;a*8KeE4mB?h)=KE=Oe=CVqMOLyyP?nlP;Tk<5z#9+^_DPFFhhA)m8 zm-VE>s2N?%&lxSb{mXpepo*;pBi8Evbu7{5qUdbCee$a6!554SLtFPTUmLY;VQ~4| zOJ{dYfBkJ;*PAnrckqsHS$q4VflzhwvaE!N6vIXO>(A&xz0mMsQ#(u_=^Q6%8s8=C z(#eW5k1EHP-FZHGQs~7VAxCA|FLl;kaSZ=cx2^7pv-E=9rY3s@Nvf1x}JU9B9|2z zZ&6vc!K-)r`fC2_Kl}F=9kevO{kUX|!?^WVf8CyT&ZLQJ%l7=Tb(dBr@AzwFdb!=1 zIeLe0Mm?@=+rs44p@^G1hLj$7H6&9_!zj_>&YRc?uT0nXc^YUh8{`!;-efPYL?b83 zV8J@Mp55bVXBK(hGxU#YrKof_&pN+jl;}^~q|(D9y{e-+=`U)!b^q-l*_qEHo$o%4 z`O)Rp+^Kg)u2*-DtKDu?{%1j*3I9yW(o++IgGMZ<+I{)b6pLVUc~MNUN3*omrLp28 zu3`SIPtM59l^(h>-AYm@f3&6Zgf6=l1#n6G31+d?wdW}(9*UA-#9vyORJ zp0)cv;|P?dl^@O;fA-m=ZvIdG({rPTNDlmIHn~aUy+&?D%LS}ks{hliXmc|&C!2}% zt!TK$Y7yY>9nKTOhv1+H6O-U5-ef%ix)m+vNrYm!6)pL{--?#}i(AqE=1%lKUw;1o z^PaP3c!Y0o(Es_u^FQ2jrtUPeZ#j!Z(njS6ZnZ~xL_~*p@(hqr!6j!C_i#@nCp-g3 zM-wxP(I7=8j?~?H0HXWxVZI>|!C^ePSVG;THn8vw3y(1MaS!7uWN=3s?yFOO2+)n` zNxst~e8PEh5xQf|rbi$b|9g6jZ7j#y(DWdw#_5sa^a#)u?go0`FC{%<5k`-gf&_c` z@eB=BDOT{P0se_U&Zd*BY@LA~^Tzpu-Z8KRI_vo(mb2)Q!;1n+a)fAc*z6Gs*q729 zw);PkGv3l>g0(%6Gj=qZIL;mkQXm|1fB+VE*sDcwM}*e;-*Ly(#9^EXdYNJDXlWzV z&_l48BjAGyX`qJ>ysBpperI1OZ~Tpje`1gQSVw!CQ4~FZn&1v0%mNXc907|Qkq}!g zfgBO|@7QB(V`nyDERbW{*xr(mvW(szXjGO(w450k@jQd30}-kM`M=-mW>!wl=2jFr zjmZun%IL8S7CFExX_!?{j>qgo=N^&#fjonpjf2X+(~tgdB_6+g!@t z<@iFuTNeMCGvmgajUR(-#6;`Hl#Y~;V==fPjjxoDCY>!fsQ16yRu0bA*4B=Q9;e3k zm6Q-*pZd!lp;?ANCafrV-}n$Osu0v6o691WBvs4`Dg^|9(&5 z(F8^h6`61x3ydDv@%8lJj*dWq_5gQ}+qipshQrfL!I9vF!engR!{D_bo?K3=asw;h z>EXP|0tv-yo{-P{E2K6oPe{uIPbi_Jh$p0VkgICL?h#S~_Fo1S$|xFmLV6K+Ldw+I z@`MU%VmuL_{$9kV{$>v<5+Hj1%b+3wgH%ZEQJx51vjQpOiNwsHv}?x`(UyoaD7CHs z)1b7fVa!YgI;+M?IWC^+p-aRwEW`u1rbA9-oEfJEl3i|gu%>}>{d`5U=J##R^WfRrkt5dnSCgw)SWF)%4{Ji z!*(g7B&77#;S5SK;Xe&3rPor*CY19>AkBaRM2 zZ#LF*lrvXa)M1$zjVEKaCcQ?Stth8f_#Zf`fOVr?5XK_`&x95Nnm`O2k{>R%@sSY$ z@LVFeI8)7}X&BJR zNy@43amp$EM^Vm%C=If}p`3{sl*s9Muqda#$B`gOUNq%oYKC%X zaO4e3NbAvhU_EFrDw{*DopD-Fv*bD4IF*_3l#ZCdzf`$w^bc3DZ}G&+WImPAmi zfYC~uRSF#yasoAt%QEeOC}~v+AHDMh%8Af>pIHJX^3jv9r^Joh=qb@Ao~Gd+H!GjB z(u`2CCP;mcO_25@Xyn|LmeU>_Oc*H^1!ek`^J8Y)fSdXnM_s?pwAK6@*3q6#J!X8P zQeSg1(@_|rnKsLRgP8Wi7{miCn7Esdi;2DUn1o-0tWgm=mpimKOQGei zm=Z0;XM#ZLTMSeEiYbp18s{@ZJ%v}fm^7c2sclLlY9I3&X88)zoa)vOx^;_{D-5rhxL1%(k^fu!8G&nxWb4`X`B_>KP$a6z9IWC0_ zUJmBuC^1oUC7c@STMSeE0{){%qqHeB4;hBi3&_w*Zxm+8#x_bLK2L+o^N${n(q>VE zGc#;hz((91=JX5%19Nt`W`*$>XcN!OumNu)eouqjgLyp|UiN+@d>(E@Ol@;IL4yPt zb9lITIsOjm?jR${U0gbZMtCt_2gA$WAf%^5YFCz@!`*nK*+;0kL^XIdj8$)R)6zzd z@xGXbw7hZs8Ah=*VyO@Y?#NW^PN@s{>hGK>_SzBCX=EqTsDQ(b^iTj3As7`1Fzv$KBd0|pAjN0^1_!_o z2lxhg>+(djAz)MAKmn^EmvHuWQ4;Ru>m3>9sV@MWOd42+0RfE?DPQ>!qW+X;}0}T0h2Ig0DM>+IwzuRf;d5Y>5Y&IgEAcj7^Uo8ucVY76Zj}% z(uPc5V55jmdn>U47e!3gk7)x;6wwM=*#>whV$wTI8=yu+`vGiH>qo6`#pNklQe1rL zK61cEA9X9oQ~-qbP#6djW+s0|qZa}PMI4?A5eI4aT-gb+fQ}+aLSaw_lMrJmTlH{Q zDg*|K>F7(@7Z@m})ua*v3=}JO4mCX?Fi^~-RGAThfnp}P%0Pe`v6vEif>JbUeJd_Y z(XMTjr9xn!n8~oxeE|vl3JTJk3^EZgP^{c%6rmzupqRr_5in59VW|kQ;BQ!p24w~l zVJu}EHV#Wgz(5I;)@S+x10_tFn}GlWB}(l^Qwj`}aF{Ft21@9{DXHbBsfG6$1k$oUI}T21=9~h$2)B43seGbEX$CP(u4|3<+Yy z0y^qq&hPs;vZdQqZ|_Pk2w-#+93WZtsYG};vbV(rP}~v zAsu^=bi#MaMqD}@Gg=gW31S}|&?>tk_Hm?5g4m~EORWU4kCs1WFW`}sIWA#H0Ai%1 zDy<*2z7?0!#;g?G2lywY(?ZHIfqzntCY1pHq#TKq0RN;MfdMo^4%4N;0_ooJ0FitG49l4q`*KabNs>JM+{^RLKp~QAaf+bKoAS) zEDW*sXw>>vTuT4eI7tx$>2#5@FECKXobxf*fPpfO&WBDy&SYf3KpAtKLU)n@F*4=R zZi9EGHWIbxuU3Wk+^5d%33D@P2Jap*z}RQl@F^yG+vbS6oO2eCkT9E&YJ z8kM0`j#2uz#z~GC$ehU1eE}fkXeb3@Af0q%&?|s}a*mUr00zoAo|poNk<&JgU@01u z8H{U171Um6bmJ?4fpR)#<>`P+9}fPeQf-ENPD4)WAmoHfm2z7T1k$8R=f55Z)Ja7Q z^Xq{~OVEWI1j%T49aclGAT(yF>Kh|X!<^zZV1T8TGiTCDpg!=Ku>(wBYCg0-QxAbg z7&3hUOq&*PHred)>xY1*T*?s(aDLa1g?0s_SnFYESsC?P4+GvXH4zO1!K{_ee|VY8Q0$K$&LcP8KXlOu+Yl_C~Sv_LdDFUV9tOtVR38;En@DY_j7y@sHTyFs; zANt7q7SJ9nt263N#$QU@0;D~Ze+V%JLXG-&+($mKfT??_$ADm5snrMOVNS4KSYOL}PrXJaT1cjP0D$C8cAgYzyLal7xsPrPAhp0VF8{ z3-%Wx)Pt!U(qVrgM_&k(9v1f-BvbS{bJhl@5W|N{S7UaRI}Q@3df{PVmm{fyx=fPw zawJ@WdQocVLvf~&*-+E0-!u*F<@zwmM)plZ3xQl8=wr_j_2DjLV-`5V#}j^1F%Yp= zq?|%TLmETr^hJczq9-QZXch(?rWtowwmDT+R?ulEIb%BI%rJ6h>E*P|=E-TB#a>oc zrj9m>gqlF>pcGeTIHrn6&gfk^W5Vg+&K8DY$Wa!hV6H+#z%7wrEM?m=rr6_2X&1NL+ zG9lkWsR?k!#kLpp+!S}ntGsca10LOg?vDYpx(6w);8B60=iSi(3G z^2K2~x(0UWd;BCjV0tyD;~V5YOpwpUyoX+!GjJXYQzP5g8ER;T{y^8OGDG z^YIPm!T&TpLwFA8H)Ml@c%bVcQ>G9~l_cs3^@Y$Jre+O4P7CQhz5;%+*TdHxvgiIG zkVX&pbmz@rdQ0^A-~zHTHBrC?RX!}QSe0M@AIi)^kmbdzhank5|M7wtm;g%BU`5z4 ziC96^$g*MRGfMX3Fy!iUU;?NQh26l00Y2*T4I2iZ1?VUdhane|0~15ENzx}m2A$K6 z&ljTofx}Q{i35{CIU6V0?0BnvL0e&li2NG`%;=5hapdf4TBp(Lgc=)VL+b{ zmm$C>L}&8sb_j-C7B)z{JRMvtdZfB2SzR1NtbZl?_9E z8{wY>mvK0h5#nP2K0Zo7WB4SvUV|~H>?gaOkgpKoItc!}@F7Q& z4MTlV6%!6asd_d{2&Y`g|6;=cA9YoT4Fh~4bZ&yf&^ap`CKQ7cL((Tg=~#9XsJ{BW()Yy(4rd zoPJ_Fh!^ zZabN?#@DH>at`nghbrlzDN5py1j=FJ$ zwNns!S0E+jQ~==-w)esPBXtf0T)2M#?Wh}G+;PE;z<2;_4$%QVUnv0to>B+6Y=S8^fV0m%5hg(Fbh>G0~+;Qq2E(QZ-LbN0OPJx(@`{=N~)Ll9@K7bLq2XHY- zzCa9%Fg>YFP*H>WV(ZM>Wod_!5aJ>PwTqxtrZ6_yvN6@h3JYe(VIuT46VdLRV7(yn& z^&xB{z;OKnj0e{aqYoCH@JmGCO%d~e-Z)=GLOx+H!DS%$EE0?H92vL=5@H@u7Kq2c zVD>@tVl+dsAns>FJL-s;%X>(9;Q9*r-sHN0Gm4KPCw(OFvk5;I>hAD-9Ut^AuCoC~ z-C^a>Cl(R80tm|ZsMM3&4wMN_pI8je1>O$S0nRH4avHF9kli41Bd|gQK6vARkRed* zgf9vX7U54KWrx!Yg?WT8g`6`?he1~bE>}oj5qlMG2NU}P9ugpF0hbz=XOyJC#^pm_ zoEC7_sKQasdPu?O;d?=f0u_wU;FS=%4m?LZ-iL8T=;R6;LrVI^0y)lmu=}L_fEa>U zb1A&2fXfDWjznGsnKxWVNTo#H2c(L6@d%??PVim|ZZ^K(AiN~veHl39I1gk%9=;bK zOGEf;5N+W(1wQm8e00cS5;_~=1ynT1nTHH=rMTXJ?SaSLV6_y)o`GBVggynSC)O9L zqzGO?XiD-xE<+VoZ2Dje3J6(~!8@I}JcBz<*ds9Ug#LqCDZ)<6pfk>UIRJ6K$U&g- zb%UKn?0p&d*<@eR{>njz;d=|V2VsxoaQH*u11FfE8JI=3BXfOlu1c&2gb=u2%!g=( z(D%?6*Bjv9Q%?}F*NqQpdBVoS88+_ALp$p1lG_*jD`FlB5h1&v=?EVka=wKA1J8_* zAvlY{^Y>tU1%wTSV`D;I6k^b*TsegRg3Ldo-~iXfpzR5}3gH&MXAnO8+y!9N9TGOL z07k4if)O@ep`cE4xqX2^j6T?GkZ8r{2IoVg-9Ig}e$*CfDZaa8Wh-|08{RngphU;Ar0^-~N9?7Hbu5iWx z7ag~k(2lwkg|!3Yjqw0P2;Y|ifrxq_7VAs+dO$OgLq>gZ`zru-h3iRBYNQ-M+=$yU z=u6lw7y~?Qd>&v#@%4qXV?0L-;}U1702AXe4#21qat;rG1Gvv10LjJe7SK$Uu3&w^ z!NO<;e0ZJ)oiY)!D}+D=pBwB{Jl24|5IJ6 zLAn@^LqXKQ!^isyWVqihfRquj&qd%0VEYaBv_IrQ#(i&S2PdaE&0wQ&zDOWmz}taYCHlg%c!Z9Xz_9_o zZcsyj$Bj_@OPs3#eR5*m;6f2DLy#7gk~9nCgp32tcup0Pu|(VrFe1l@V0g|$08_)` z1%Qe0916gQSWO^-OFOu1NFeaR_oW0<`nbM=BWprO!0`tjPea;PO88Pz0d<*yBUdn6 zJYNTWiTDkwy?|^?Uf?ty*PWolsJn{XF<{+rJp?f^p^M?9oY1G>)#3Rom{}urC~!JP z&qIX8T?2CG4|gF;GTPeTDUp*J9PO~?i+ zLBsbd>~bQG0uJmf@;Ce&I{ zF9LJ%$>3lETMsb%M4YF9fr)mCMtA^=M9_yA!yN(y4++6cR84+@Ado2WyrgGv;2zzKgGU~u}0(=3M|2Zt%B zmtom*1#3>!TYzK`z9_(mm>9+dCSYTLLLk;d2nlUm#)0{`Z4@HGBJmOVFlZ+x<_l3b zUKU(+Agwab5}G*Nt$Q6hgrOK?|rR0tQg!axF84kdO$7%&rt}e z;wZc?Jd{lE4@@XN2As{}el`@Ak$V-kFCP2B!8Vbnfh-|)`-d$rsH_0bZ$QcjvYQyq zU>5NDKj4cP_wQj`IWaeo0zx(bMywkuRm0a(1X79f3V49W*f1_+1#z0mI3C(j@3?Sz zfUG6{Y5gd7v{4oCk0cNazJjS() zvO|0?z)=w%!=k=;&KK5Ph@T0A(k1fB03-J=oH8}im-IWOP#}TJDRMD!yAOFTLJr{A zittsWaK=pV0Q^LP2T(&rjDZgLG5(=C54;`JjSxN@{GtUB!@?^+_<0mCRF3Dl07jgR zp?Z13MnS3oKZ_AUG>zv4pf4P};PYrCjslOBhy&n}Av{kFN{!t6s9pt^XHXl2zK2{I zo*O~6_V_*rS%ZTEoMuS9;(Gy}0wUx9v;m<{;VKUye{f8P=ffaNL*%{TrzVIzKRV(g zY%)Y|M7$4GGGsecxP;FQ5^=bkLZ*+fDG){xx&)#@!Uu-Fggk?bPUr)u$|dvxcsY38 z5_0cxeE_aJ8B4-ZB_S_x^^4#=^u^}^Yfjv61oxS!?*tf31mhp1v*@qtf6i~$A{mq{=^gnof&i_kA}WE}A^8u70n-$}?bXg@+fgQr65b5zcSkAdok zNEqq+pqwwhw^02MuKys-O4wRBaUlFAK!=|J!R1iGZ-O-^YExjrsb8<+_()KFPw*M8 zV-xxmGN6Qhf%Gon(?I;b(?WaRLRh__%Ofi^pZ)XA^n|)IlTuIQ7IOm(Mcd%pX;{5U~NOjUwg?^#TN6 zV8an|1;u%|tpLd&VtdHE5zOktr_s5Umn+1}+*A`C@<(b>?s?4#|3K3{Y#h41p6S!((>f9`(~LY+k`> z8TIra7Y42y*HxQwa5a+f&CvB){Hz>cL@go&*hG8|Fe27Kq42qsGd~n?Wx0fg+#%&M4sHfaGG=uiTc@Gzx ziTn^KH6k|xFrro*U_|~DV8mT%fKg9va%e&6L~Kt(83l2U2rx*OVmttk3%6U)4lbS$ z?Wmu+jwclk>f#SL3kVw zFyby5f{|+u6Jf1+M3}p8fM=Mhp&`#;qVFtE>JcFW+u+~`_yjbgA1oLhOP@z=-!hH*w_|8L7hCYGD!7`$a%4 O#A&Jn2bzz!Q2l@6yEZET diff --git a/tools/nauty25r9_mac/out.graph6 b/tools/nauty25r9_mac/out.graph6 deleted file mode 100644 index b378fba..0000000 --- a/tools/nauty25r9_mac/out.graph6 +++ /dev/null @@ -1,36 +0,0 @@ -I??CA?oB? -I??CB?W`? -I??E@_Ko? -I?AA@?OA? -I?AA@?Oa? -I?AA@AOQ? -I?AA@?Wo? -I?AA@?Wc? -I?AA@?WE? -I?AA@?W`? -I?AAD?WW? -I?AAD?WS? -I?AAD?WE? -I?AAD?WH? -I?AAD?WO_ -I?AA@_go? -I?AA@_gc? -I?AA@_gE? -I?AEB?WH? -I?ABB?Wc? -I?ABB?WE? -I?ABAaGK? -I?ABA_gc? -I?ABA_gE? -I?ACJ?WW? -I?BE@_gE? -I?BDA_gE? -I?`@?aGW? -I?`@?aGP? -I?`@C_WW? -I?`@CPOK? -I?`@CPOD? -I?`@CPOG_ -I?`D@POD? -I?`CR?oD? -I?`CQGoK? diff --git a/tools/nauty25r9_mac/pickg b/tools/nauty25r9_mac/pickg deleted file mode 100644 index 73785d9aa719c6c6fdf53d040715381d003fc251..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166544 zcmeFa3w#tswm&|T%!C9IJ7B<|2tlF{6-`#qj1Wn~4D>(`-~-=?I*Pi!5M}_^m=Gtk zrfC{+S6p0mbywZX?z%4SD#llsNg$JeLI?-}l!qwvIH&;>!o$q(d#ZX~0e9WI_w)bU z`}zF&km;)Gs#B+`PMve=)T!zX$G`6CVKSN1O{N8DCX*=_e=ld4Ony@VLMBsx{7Lwm zF=MJY!Ev+Wnkkf;`p=viJ#CEO%tr+?W?bjE@w(J3tb8%mp7hU%12>ZufApk(GiG@1 zp6}sd9#4fgD-(^ui<-|lRus1+vQuP1a&*RwIUetwbK*(e@%!#8GlTb$ks}t5705K; zq087m4sXW2cRw)e?%7D`4lfYl@a{4?jp8XSKLtPc!w=0#G`Ksw;;%Wp@}azbil?-f zC&zzh%y7@~%)alTdyJIs@Mh(uvG%s*^9&SE{+Ak~_IV$gci%&I&A9KOnGYjlcX;;U z9Nu!Hy%g^bBN_gT8F$}1W9IBT9=w~Uc8Aw-35S5_ecK`-3>#9GiKPu>%^pN zpf3iZ+(?VjA58%KBYGpaiE+K>;lwEXIJ^RsVgCRx883o!p7DwvGiE&Wz>GPMK6vND z56qb5nSBa=1qOZwIwp#Dhj&2=ya(?1XYh(+@Qi+=crrX{@30hjcirK+BazU(|H?~v z|K<1Mc_{wR>F&-siCK1P|J^>C!)v`XQD-td1MT=r(DB0$KKSrMv4rmU6+gh?*<%^- zOm1&?cnLlyJ10+a*qt#RHOrursRp2OPQ6Pe@;LQdGAxYof?|4wd^Cmf@w}1Z#=lvJ zX9C3hv1z7K^c_K?e3?_yOosvJ_J`9<#pjqz)UB~9OOQ@~&m-+4Jcr`>WB*DYN;4U# zrDQn+u>$;MPG$7K03#9_k)*=y##pN zcPA@mBAO;pD_rP5w6(~HH&5nJE=r1*BmDpW`@hu#(`vvRKj6vpb(%eA`#RHv8Xxk9e~+IfPIYu) zNdQ2++nwrlh4~08yCiMoGriJG`V=SuzOwn30fxAWzzK^lMxmKW@FmT9AKp)PkEnC_ zqm}*ZslNA+$s}oI^ZTZmBxRd^1>iV?`!dF<_DhO^$CB<_Q^PE#hJto_R3jRq*57Q6FFVZFXR%hNK-YQNPZxd%sZ$#%O z_kRjKNWKHZBxPEwr1p^f0iot`R<|qQKO)q8i?HJTKvEuWmQ+`(tld#S{U<4nlIm!c z)qC@0bxyv^_Pt9O`@N*iDUg-@vT{g&a<|zeDj^K6=gdb3OGDJ zmGAKnOx`SK$X-Yc%tQewp%kzb(vwgTgxWM#(w!MTi8M)_-YhFaC@*8A;SMAkHQUv` zDQ4C+hnE5pzD{ApY?~kpA`H&gZe~L<<5e!zKWj3Y2H#vz3xPT zq>ddX*~DQL&Z-+gh9c4E!~zgs^SmpF1m~U|8N-GrG5@4d@`-|q{#8SzXh`xkS?sp0 z70*XT#OXy`6~#YHl8C_QQPL)5imRyIl4_RrX{hl@y`K8 zOmAFb0d@4o-zE6F3xB`HUjzPP<8=yua4K6B?`E)p6_PrLxSXR-q81lo0PSkdBCId$ zifgq~n^1sv%{&K);M()R(gtC2ZZ>%)x|AlDdJj0p{ooh}z%dRG$B@*=F$urYulv+& zBKGq#`p%_v*j3kRL7@p2{vCeU1c}Qhhrb0Pj-|Ocna{;hY%ZP=xfJ+Hqpn+5P*GGhM2ZF_UjXy3 zrQ$D

    Guuy!7&QuVSbNy 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 0) */ -#define LINELEN CONSOLWIDTH /* max characters per line (0 = no limit) */ - -static FILE *infile,*outfile; -static unsigned long nin; -extern int labelorg; - -/***************************************************************************** -* putsetx(f,set1,curlenp,linelength,m,compress,start) writes the set * -* set1 to file f using at most linelength characters per line (excluding * -* '\n'). Set elements less than or equal to start are ignored. * -* *curlenp is the number of characters on the line so far; it is updated. * -* A range j1,j1+1,...,j2 for j2-j1>=2 is written as "j1:j2" if compress * -* is nonzero (eg. TRUE); otherwise each element is written separately. * -* No final '\n' is written. labelorg is used. * -* * -* FUNCTIONS CALLED: nextelement(),itos() * -* * -*****************************************************************************/ - -void -putsetx(FILE *f, set *set1, int *curlenp, int linelength, int m, - boolean compress, int start) -{ - int slen,j1,j2; - char s[40]; - boolean first; - - first = TRUE; - j1 = start; - while ((j1 = nextelement(set1,m,j1)) >= 0) - { - j2 = j1; - if (compress) - { - while (nextelement(set1,m,j2) == j2 + 1) - ++j2; - if (j2 == j1+1) - j2 = j1; - } - slen = itos(j1 + labelorg,s); - if (j2 >= j1 + 2) - { - s[slen] = ':'; - slen += 1 + itos(j2 + labelorg,&s[slen+1]); - } - - if (*curlenp + slen + 1 >= linelength && linelength > 0) - { - fprintf(f,"\n "); - *curlenp = 1; - } - if (first) - { - fprintf(f,"%s",s); - *curlenp += slen; - first = FALSE; - } - else - { - fprintf(f," %s",s); - *curlenp += slen + 1; - } - j1 = j2; - } -} - -/***************************************************************************** -* * -* STOLEN FROM naututil.c * -* putgraphx(f,g,linelength,m,n) writes a list of the edges of g to f * -* using at most linelength characters per line (excluding '\n'). * -* If triang, only write the upper triangle. * -* labelorg is used. * -* * -*****************************************************************************/ - -void -putgraphx(FILE *f, graph *g, int linelength, boolean triang, int m, int n) -{ - int i,curlen; - set *pg; - - for (i = 0, pg = g; i < n; ++i, pg += m) - { - fprintf(f,"%3d : ",i + labelorg); - curlen = 7; - putsetx(f,pg,&curlen,linelength,m,FALSE,triang ? i-1 : -1); - fprintf(f,";\n"); - } -} - -/***************************************************************************/ - -void -putedges(FILE *f, graph *g, boolean ptn, int linelength, int m, int n) -/* Write list of edges, preceded by the numbers of vertices and - edges and optionally by "1" if "ptn" is TRUE. Use labelorg */ -{ - int i,j,curlen,ne; - char s[20]; - set *pg; - - ne = 0; - for (i = 0, pg = g; i < n; ++i, pg += m) - { - for (j = i-1; (j = nextelement(pg,m,j)) >= 0;) - ++ne; - } - - if (ptn) fprintf(f,"%d %d 1\n",n,ne); - else fprintf(f,"%d %d\n",n,ne); - - curlen = 0; - for (i = 0, pg = g; i < n; ++i, pg += m) - { - for (j = i-1; (j = nextelement(pg,m,j)) >= 0;) - { - if (curlen > linelength - 10 && linelength > 0) - { - fprintf(f,"\n"); - curlen = 0; - } - if (curlen > 0) - { - fprintf(f," "); - curlen += 2; - } - curlen += itos(i+labelorg,s); - fprintf(f,"%s",s); - fprintf(f," "); - curlen += 1 + itos(j+labelorg,s); - fprintf(f,"%s",s); - } - } - fprintf(f,"\n"); -} - -/***************************************************************************/ - -void -putHCP(FILE *f, graph *g, int m, int n) -/* Write list of edges in HCP format. labelorg is ignored */ -{ - int i,j,curlen,ne; - char s[20]; - set *pg; - - fprintf(f,"NAME : G%lu\n",nin); - fprintf(f,"TYPE : HCP\n"); - fprintf(f,"DIMENSION : %d\n",n); - fprintf(f,"EDGE_DATA_FORMAT : EDGE_LIST\n"); - fprintf(f,"EDGE_DATA_SECTION\n"); - - for (i = 0, pg = g; i < n; ++i, pg += m) - { - for (j = -1; (j = nextelement(pg,m,j)) >= 0;) - fprintf(f,"%d %d\n",i+1,j+1); - } - fprintf(f,"-1\nEOF\n"); -} - -/***************************************************************************/ - -void -putcgraph(FILE *f, graph *g, int linelength, int m, int n) -/* write compressed form, using labelorg */ -{ - int i,curlen; - int semicolons; - char s[20]; - set *pg; - - curlen = itos(n,s)+2; - fprintf(f,";n%sg",s); - - semicolons = 0; - for (i = 0, pg = g; i < n; ++i, pg += m) - { - if (nextelement(pg,m,i-1) >= 0) - { - while (semicolons > 0) - { - if (curlen >= linelength-1 && linelength > 0) - { - fprintf(f,"\n "); - curlen = 1; - } - fprintf(f,";"); - ++curlen; - --semicolons; - } - putsetx(f,pg,&curlen,linelength,m,FALSE,i-1); - semicolons = 1; - } - else - ++semicolons; - } - fprintf(f,".\n"); -} - -/**************************************************************************/ - -static void -putve(FILE *f, unsigned long id, graph *g, int m, int n) -/* Write the numbers of vertices and edges */ -{ - unsigned long ne; - setword x,*pg; - - ne = 0; - for (pg = g + m*(size_t)n; --pg >= g;) - if ((x = *pg) != 0) ne += POPCOUNT(x); - - fprintf(f,"Graph %lu has %d vertices and %lu edges.\n",id,n,ne/2); -} - -/**************************************************************************/ - -static void -putGRAPE(FILE *f, graph *g, int m, int n) -/* Write the graph in GRAPE format */ -{ - int i,j; - setword *pg; - boolean first; - - fprintf(f, - "rec( isGraph:=true, order:=%d, group:=Group([],()),\n",n); - fprintf(f, - " representatives := Immutable([1..%d]),\n",n); - fprintf(f," adjacencies := [\n"); - - for (i = 0, pg = g; i < n; ++i, pg += m) - { - first = TRUE; - fprintf(f," ["); - for (j = nextelement(pg,m,-1); j >= 0; j = nextelement(pg,m,j)) - { - if (!first) fprintf(f,","); - fprintf(f,"%d",j+1); - first = FALSE; - } - if (i < n-1) fprintf(f,"],\n"); - else fprintf(f,"]],\n"); - } - - fprintf(f," schreierVector := Immutable([-1,-2..-%d]) )",n); -} - -/**************************************************************************/ - -static void -putdotty(FILE *f, graph *g, unsigned long id, char *extras, int m, int n) -/* Write the graph in dotty format */ -{ - int i,j; - setword *pg; - boolean first; - - fprintf(f,"graph G%lu {\n",id); - if (extras) fprintf(f,"%s\n",extras); - - for (i = 0, pg = g; i < n; ++i, pg += m) - { - for (j = nextelement(pg,m,i); j >= 0; j = nextelement(pg,m,j)) - { - fprintf(f,"%d--%d;\n",labelorg+i,labelorg+j); - } - } - - fprintf(f,"}\n"); -} - -/**************************************************************************/ - -static void -putbliss(FILE *f, unsigned long id, graph *g, int m, int n) -/* Write the graph in Bliss format, according to - * http://www.tcs.hut.fi/Software/bliss/fileformat.shtml */ -{ - unsigned long ne; - setword x,*pg; - int i,j; - - ne = 0; - for (pg = g + m*(size_t)n; --pg >= g;) - if ((x = *pg) != 0) ne += POPCOUNT(x); - ne /= 2; - - fprintf(f,"c Graph %lu\n",id); - fprintf(f,"p edge %d %lu\n",n,ne); - - for (i = 0, pg = g; i < n; ++i, pg += m) - for (j = nextelement(pg,m,i); j >= 0; j = nextelement(pg,m,j)) - fprintf(f,"e %d %d\n",i+1,j+1); -} - -/**************************************************************************/ - -static void -putam(FILE *f, graph *g, int linelength, boolean space, - boolean triang, int m, int n) -/* write adjacency matrix */ -{ - set *gi; - int i,j; - boolean first; - - for (i = 0, gi = (set*)g; i < n - (triang!=0); ++i, gi += m) - { - first = TRUE; - for (j = triang ? i+1 : 0; j < n; ++j) - { - if (!first && space) putc(' ',f); - else first = FALSE; - if (ISELEMENT(gi,j)) putc('1',f); - else putc('0',f); - } - putc('\n',f); - } -} - -/**************************************************************************/ - -static void -putMagma(FILE *outfile, graph *g, int linelength, int m, int n, long index) -{ - int i,j; - set *gi; - boolean first; - - fprintf(outfile,"g%ld := Graph<%d|[\n",index,n); - - for (i = 0, gi = (set*)g; i < n; ++i, gi += m) - { - fprintf(outfile,"{"); - first = TRUE; - for (j = i; (j = nextelement(gi,m,j)) >= 0; ) - { - if (!first) fprintf(outfile,","); - first = FALSE; - fprintf(outfile,"%d",j+1); - } - fprintf(outfile,"}"); - if (i != n-1) fprintf(outfile,",\n"); - } - fprintf(outfile,"]>;\n"); -} - -/**************************************************************************/ - -static void -putMaple(FILE *outfile, graph *g, int linelength, int m, int n, long index) -{ - int i,j; - set *gi; - boolean first; - -#if MAPLE_MATRIX - fprintf(outfile,"f%ld := Matrix(%d,%d,[\n",index,n,n); -#else - fprintf(outfile,"f%ld := array(1..%d,1..%d,[\n",index,n,n); -#endif - - for (i = 0, gi = (set*)g; i < n; ++i, gi += m) - { - fprintf(outfile,"["); - first = TRUE; - for (j = 0; j < n; ++j) - { - if (!first) fprintf(outfile,","); - first = FALSE; - fprintf(outfile,"%d",(ISELEMENT(gi,j)?1:0)); - } - fprintf(outfile,"]"); - if (i != n-1) fprintf(outfile,",\n"); - } - fprintf(outfile,"]);\n"); -} - -/**************************************************************************/ -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - graph *g; - int m,n,codetype; - int argnum,j; - char *arg,sw; - boolean badargs,first; - unsigned long maxin; - long pval1,pval2; - boolean fswitch,pswitch,cswitch,dswitch; - boolean aswitch,lswitch,oswitch,Fswitch; - boolean Aswitch,eswitch,tswitch,qswitch; - boolean sswitch,Mswitch,Wswitch,Eswitch; - boolean bswitch,Gswitch,yswitch,Yswitch,Hswitch; - int linelength; - char *infilename,*outfilename,*yarg; - - HELP; - - fswitch = pswitch = cswitch = dswitch = FALSE; - aswitch = lswitch = oswitch = Fswitch = FALSE; - Aswitch = eswitch = tswitch = qswitch = FALSE; - sswitch = Mswitch = Wswitch = Eswitch = FALSE; - bswitch = Gswitch = yswitch = Yswitch = Hswitch = FALSE; - infilename = outfilename = NULL; - linelength = LINELEN; - labelorg = 0; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWBOOLEAN('a',aswitch) - else SWBOOLEAN('A',Aswitch) - else SWBOOLEAN('c',cswitch) - else SWBOOLEAN('d',dswitch) - else SWBOOLEAN('e',eswitch) - else SWBOOLEAN('H',Hswitch) - else SWBOOLEAN('E',Eswitch) - else SWBOOLEAN('f',fswitch) - else SWBOOLEAN('F',Fswitch) - else SWBOOLEAN('t',tswitch) - else SWBOOLEAN('b',bswitch) - else SWBOOLEAN('G',Gswitch) - else SWBOOLEAN('q',qswitch) - else SWBOOLEAN('M',Mswitch) - else SWBOOLEAN('W',Wswitch) - else SWBOOLEAN('s',sswitch) - else SWBOOLEAN('y',yswitch) - else SWRANGE('p',":-",pswitch,pval1,pval2,"listg -p") - else SWINT('l',lswitch,linelength,"listg -l") - else SWINT('o',oswitch,labelorg,"listg -o") - else if (sw == 'Y') - { - Yswitch = TRUE; - yarg = arg; - break; - } - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (Yswitch) yswitch = TRUE; - - if (labelorg < 0) gt_abort(">E listg: negative origin forbidden.\n"); - - if ((aswitch!=0) + (Aswitch!=0) + (eswitch!=0) + (Mswitch!=0) + - (Wswitch!=0) + (sswitch!=0) + (dswitch!=0) + (cswitch!=0) + - (Eswitch!=0) + (bswitch!=0) + (Gswitch!=0) + (yswitch!=0) + - (Hswitch!=0) > 1) - gt_abort(">E listg: -aAbMWeEHcdsGy are incompatible\n"); - - if (badargs) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - fprintf(stderr," Try listg -help for more detailed help.\n"); - exit(1); - } - - if (!pswitch || pval1 < 1) pval1 = 1; - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,fswitch, - pswitch ? pval1 : 1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - - nin = 0; - if (!pswitch || pval2 == NOLIMIT) - maxin = NOLIMIT; - else if (pval1 < 1) maxin = pval2; - else maxin = pval2 - pval1 + 1; - first = TRUE; - while (nin < maxin || maxin == NOLIMIT) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++nin; - - if (Gswitch) - { - if (first) fprintf(outfile,"graphs := [\n"); - else fprintf(outfile,",\n"); - } - - first = FALSE; - - if (Fswitch && nin > 1) fprintf(outfile,"\f"); - - if (cswitch) - putcgraph(outfile,g,linelength,m,n); - else if (dswitch) - { - if (qswitch) - fprintf(outfile,"%d\n",n); - else - { - fprintf(outfile,"\n!Graph %lu.\n",pval1+nin-1); - fprintf(outfile,"n=%d $=%d g\n",n,labelorg); - } - putgraphx(outfile,g,linelength,tswitch,m,n); - if (!qswitch) fprintf(outfile,"$$\n"); - } - else if (Mswitch) - putMagma(outfile,g,linelength,m,n,pval1+nin-1); - else if (Wswitch) - putMaple(outfile,g,linelength,m,n,pval1+nin-1); - else if (sswitch) - putve(outfile,pval1+nin-1,g,m,n); - else if (bswitch) - putbliss(outfile,pval1+nin-1,g,m,n); - else if (Gswitch) - putGRAPE(outfile,g,m,n); - else if (yswitch) - putdotty(outfile,g,pval1+nin-1,(Yswitch?yarg:NULL),m,n); - else if (Hswitch) - putHCP(outfile,g,m,n); - else - { - if (qswitch) - { - if (!eswitch && !Eswitch) fprintf(outfile,"%d\n",n); - } - else fprintf(outfile,"\nGraph %lu, order %d.\n", - pval1+nin-1,n); - if (aswitch|Aswitch) - putam(outfile,g,linelength,Aswitch,tswitch,m,n); - else if (eswitch || Eswitch) - putedges(outfile,g,Eswitch,linelength,m,n); - else - putgraphx(outfile,g,linelength,tswitch,m,n); - } - FREES(g); - if (ferror(outfile)) gt_abort(">E listg output error\n"); - } - - if (Gswitch && !first) fprintf(outfile,"\n];\n"); - - exit(0); -} diff --git a/tools/nauty25r9_mac/makefile b/tools/nauty25r9_mac/makefile deleted file mode 100644 index b44b6f5..0000000 --- a/tools/nauty25r9_mac/makefile +++ /dev/null @@ -1,486 +0,0 @@ -# makefile for nauty 2.5 -# makefile. Generated from makefile.in by configure. - -SHELL=/bin/sh -CC=gcc -CFLAGS= -O4 -SAFECFLAGS= -O4 -LDFLAGS= -THREADLIB= -LOK=1 # 0 if no 64-bit integers -TESTPROGS=dreadtest dreadtestS dreadtestS1 dreadtest4K dreadtest1 dreadtestW dreadtestW1 dreadtestL1 dreadtestL -EXEEXT= - -SMALL=-DMAXN=WORDSIZE -S1=-DMAXN=WORDSIZE -DWORDSIZE=16 -W1=-DMAXN=WORDSIZE -DWORDSIZE=32 -L1=-DMAXN=WORDSIZE -DWORDSIZE=64 -S=-DWORDSIZE=16 -W=-DWORDSIZE=32 -L=-DWORDSIZE=64 - -CCOBJ=${CC} -c ${CFLAGS} -o $@ -GTOOLSH=gtools.h nauty.h naututil.h nausparse.h naurng.h - -# ++++++ This file is automatically generated, don't edit it by hand! ++++++ - -all : nauty gtools ; - -nauty : dreadnaut nauty.a nauty1.a ; - -gtools : copyg listg labelg dretog amtog geng complg showg NRswitchg \ - biplabg addedgeg deledgeg countg pickg genrang newedgeg catg genbg directg \ - ranlabg multig planarg gentourng linegraphg watercluster2 \ - subdivideg shortg ; - -NAUTYO=nauty.o nautil.o nausparse.o naugraph.o schreier.o naurng.o -NAUTY1O=nauty1.o nautil1.o nausparse.o naugraph1.o schreier.o naurng.o -NAUTYSO=nautyS.o nautilS.o nausparseS.o naugraphS.o schreierS.o naurng.o -NAUTYS1O=nautyS1.o nautilS1.o nausparseS.o naugraphS1.o schreierS.o naurng.o -NAUTYWO=nautyW.o nautilW.o nausparseW.o naugraphW.o schreierW.o naurng.o -NAUTYW1O=nautyW1.o nautilW1.o nausparseW.o naugraphW1.o schreierW.o naurng.o -NAUTYLO=nautyL.o nautilL.o nausparseL.o naugraphL.o schreierL.o naurng.o -NAUTYL1O=nautyL1.o nautilL1.o nausparseL.o naugraphL1.o schreierL.o naurng.o - -nauty.o: nauty.h schreier.h nauty.c - ${CCOBJ} nauty.c -nauty1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${SMALL} nauty.c -nautyS.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S} nauty.c -nautyS1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S1} nauty.c -nautyW.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W} nauty.c -nautyW1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W1} nauty.c -nautyL.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L} nauty.c -nautyL1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L1} nauty.c - -nautil.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} nautil.c -nautil1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${SMALL} nautil.c -nautilS.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S} nautil.c -nautilS1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S1} nautil.c -nautilW.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W} nautil.c -nautilW1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W1} nautil.c -nautilL.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L} nautil.c -nautilL1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L1} nautil.c - -naugraph.o: nauty.h naugraph.c - ${CCOBJ} naugraph.c -naugraph1.o: nauty.h naugraph.c - ${CCOBJ} ${SMALL} naugraph.c -naugraphS.o: nauty.h naugraph.c - ${CCOBJ} ${S} naugraph.c -naugraphS1.o: nauty.h naugraph.c - ${CCOBJ} ${S1} naugraph.c -naugraphW.o: nauty.h naugraph.c - ${CCOBJ} ${W} naugraph.c -naugraphW1.o: nauty.h naugraph.c - ${CCOBJ} ${W1} naugraph.c -naugraphL.o: nauty.h naugraph.c - ${CCOBJ} ${L} naugraph.c -naugraphL1.o: nauty.h naugraph.c - ${CCOBJ} ${L1} naugraph.c - -naututil.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} naututil.c -naututil1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${SMALL} naututil.c -naututilS.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S} naututil.c -naututilS1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S1} naututil.c -naututilW.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W} naututil.c -naututilW1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W1} naututil.c -naututilL.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L} naututil.c -naututilL1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L1} naututil.c - -nautinv.o: nauty.h naututil.h nautinv.c - ${CCOBJ} nautinv.c -nautinv1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${SMALL} nautinv.c -nautinvS.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S} nautinv.c -nautinvS1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S1} nautinv.c -nautinvW.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W} nautinv.c -nautinvW1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W1} nautinv.c -nautinvL.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L} nautinv.c -nautinvL1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L1} nautinv.c - -schreier.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} schreier.c -schreierS.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${S} schreier.c -schreierW.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${W} schreier.c -schreierL.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${L} schreier.c - -nausparse.o : nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} nausparse.c -nausparseS.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${S} nausparse.c -nausparseW.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${W} nausparse.c -nausparseL.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${L} nausparse.c - -traces.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} traces.c -tracesS.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${S} traces.c -tracesW.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${W} traces.c -tracesL.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${L} traces.c - -gtools.o : ${GTOOLSH} gtools.c - ${CCOBJ} gtools.c -gtoolsS.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${S} gtools.c -gtoolsW.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${W} gtools.c -gtoolsL.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${L} gtools.c - -nautaux.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} nautaux.c -nautauxS.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${S} nautaux.c -nautauxW.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${W} nautaux.c -nautauxL.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${L} nautaux.c - -gtnauty.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} gtnauty.c -gtnautyL1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L1} gtnauty.c -gtnautyW1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W1} gtnauty.c -gtnautyL.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L} gtnauty.c -gtnautyW.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W} gtnauty.c - -naurng.o: naurng.c nauty.h - ${CCOBJ} naurng.c -rng.o: rng.c nauty.h - ${CCOBJ} rng.c - -dreadnaut: dreadnaut.c naututil.o nautinv.o traces.o gtools.o ${NAUTYO} - ${CC} -o dreadnaut ${SAFECFLAGS} dreadnaut.c naututil.o \ - nautinv.o gtools.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} -dreadnautL: dreadnaut.c naututilL.o nautyL.o nautilL.o nautinvL.o \ - nausparseL.o naugraphL.o naurng.o schreierL.o tracesL.o gtoolsL.o - ${CC} -o dreadnautL ${SAFECFLAGS} ${L} dreadnaut.c naututilL.o \ - nautyL.o nautilL.o nautinvL.o naugraphL.o naurng.o gtoolsL.o \ - nausparseL.o schreierL.o tracesL.o ${LDFLAGS} -dreadnaut1: dreadnaut.c naututil1.o nauty1.o nautil1.o nautinv1.o \ - nausparse.o naugraph1.o naurng.o schreier.o traces.o gtools.o - ${CC} -o dreadnaut1 ${SAFECFLAGS} ${SMALL} dreadnaut.c naututil1.o \ - nauty1.o nautil1.o nautinv1.o naugraph1.o naurng.o gtools.o \ - nausparse.o schreier.o traces.o ${LDFLAGS} - -nauty.a: ${NAUTYO} traces.o gtools.o naututil.o nautinv.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty.a - ar crs nauty.a ${NAUTYO} traces.o gtools.o naututil.o \ - nautinv.o gutil1.o gutil2.o gtnauty.o naugroup.o \ - naurng.o schreier.o - -nauty1.a: ${NAUTY1O} traces.o gtools.o naututil1.o nautinv1.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty1.a - ar crs nauty1.a ${NAUTY1O} traces.o gtools.o naututil1.o \ - nautinv1.o gutil1.o gutil2.o gtnauty.o naugroup.o - -nautyW.a: ${NAUTYWO} traces.o gtoolsW.o naututilW.o nautinvW.o \ - gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - rm -rf nautyW.a - ar crs nautyW.a ${NAUTYWO} traces.o gtoolsW.o naututilW.o \ - nautinvW.o gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - -nautyW1.a: ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o nautinvW1.o \ - gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - rm -rf nautyW1.a - ar crs nautyW1.a ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o \ - nautinvW1.o gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - -nautyL.a: ${NAUTYLO} traces.o gtoolsL.o naututilL.o nautinvL.o \ - gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - rm -rf nautyL.a - ar crs nautyL.a ${NAUTYL1O} traces.o gtoolsL.o naututilL.o \ - nautinvL.o gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - -nautyL1.a: ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o nautinvL1.o \ - gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - rm -rf nautyL1.a - ar crs nautyL1.a ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o \ - nautinvL1.o gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - -clean: - rm -f *.o config.log config.cache config.status - rm -f dreadtest${EXEEXT} dreadtestL${EXEEXT} \ - dreadtestW${EXEEXT} \ - dreadtestS${EXEEXT} dreadtestS1${EXEEXT} \ - dreadtest4K${EXEEXT} dreadtest1${EXEEXT} \ - dreadtestL1${EXEEXT} dreadtestW1${EXEEXT} - -gutil1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} gutil1.c -gutil2.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} gutil2.c -gutil1W1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W1} gutil1.c -gutil2W1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W1} gutil2.c -gutil1L1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L1} gutil1.c -gutil2L1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L1} gutil2.c -gutil1W.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W} gutil1.c -gutil2W.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W} gutil2.c -gutil1L.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L} gutil1.c -gutil2L.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L} gutil2.c - -catg : ${GTOOLSH} catg.c gtools.o - ${CC} -o catg ${CFLAGS} catg.c gtools.o ${LDFLAGS} - -copyg : ${GTOOLSH} copyg.c gtools.o - ${CC} -o copyg ${CFLAGS} copyg.c gtools.o ${LDFLAGS} - -listg : ${GTOOLSH} listg.c gtools.o nautil.o - ${CC} -o listg ${CFLAGS} listg.c gtools.o nautil.o ${LDFLAGS} - -labelg : ${GTOOLSH} naututil.h labelg.c gtools.o gtnauty.o ${NAUTYO} \ - nautinv.o nausparse.h gutils.h gutil2.o traces.h traces.o - ${CC} -o labelg ${SAFECFLAGS} labelg.c gtools.o gtnauty.o \ - nautinv.o gutil2.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} - -shortg : ${GTOOLSH} shortg.c gtools.o gtnauty.o ${NAUTYO} \ - nausparse.h gutils.h gutil2.o nautinv.h nautinv.o traces.o - ${CC} -o shortg ${CFLAGS} shortg.c gtools.o gtnauty.o nautinv.o \ - ${NAUTYO} gutil2.o traces.o ${LDFLAGS} ${THREADLIB} - -dretog : ${GTOOLSH} dretog.c naututil.o gtools.o ${NAUTYO} - ${CC} -o dretog ${CFLAGS} dretog.c naututil.o gtools.o \ - ${NAUTYO} ${LDFLAGS} - -amtog : ${GTOOLSH} amtog.c gtools.o ${NAUTYO} - ${CC} -o amtog ${CFLAGS} amtog.c gtools.o ${NAUTYO} ${LDFLAGS} - -genbg : ${GTOOLSH} genbg.c gtoolsW.o nautyW1.o nautilW1.o naugraphW1.o \ - schreierW.o naurng.o - ${CC} -o genbg ${CFLAGS} ${W1} genbg.c gtoolsW.o schreierW.o \ - nautyW1.o nautilW1.o naugraphW1.o naurng.o ${LDFLAGS} - -genbgL : ${GTOOLSH} genbg.c gtoolsL.o nautyL1.o nautilL1.o naugraphL1.o \ - schreierL.o naurng.o - ${CC} -o genbgL ${CFLAGS} ${L1} -DMAXN1=30 genbg.c gtoolsL.o \ - schreierL.o naurng.o nautyL1.o nautilL1.o naugraphL1.o ${LDFLAGS} - -geng : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng ${CFLAGS} -DMAXN=32 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng16 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng16 ${CFLAGS} -DMAXN=16 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng24 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng24 ${CFLAGS} -DMAXN=24 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -gentourng : ${GTOOLSH} gentourng.c gtools.o nauty1.o nautil1.o \ - naugraph1.o schreier.o naurng.o - ${CC} -o gentourng ${CFLAGS} -DMAXN=24 gentourng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -genrang : ${GTOOLSH} genrang.c gtools.o naututil.o ${NAUTYO} - ${CC} -o genrang ${CFLAGS} genrang.c \ - gtools.o naututil.o ${NAUTYO} ${LDFLAGS} - -complg : ${GTOOLSH} complg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o complg ${CFLAGS} complg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -linegraphg : ${GTOOLSH} linegraphg.c gtools.o ${NAUTYO} - ${CC} -o linegraphg ${CFLAGS} linegraphg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -subdivideg : ${GTOOLSH} subdivideg.c gtools.o ${NAUTYO} - ${CC} -o subdivideg ${CFLAGS} subdivideg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -biplabg : ${GTOOLSH} gutils.h biplabg.c gtools.o gutil1.o ${NAUTYO} - ${CC} -o biplabg ${CFLAGS} biplabg.c \ - gtools.o gutil1.o ${NAUTYO} ${LDFLAGS} - -ranlabg : ${GTOOLSH} ranlabg.c gtools.o ${NAUTYO} - ${CC} -o ranlabg ${CFLAGS} ranlabg.c gtools.o ${NAUTYO} ${LDFLAGS} - -NRswitchg : ${GTOOLSH} NRswitchg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o NRswitchg ${CFLAGS} NRswitchg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -deledgeg : ${GTOOLSH} deledgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o deledgeg ${CFLAGS} deledgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -addedgeg : ${GTOOLSH} gutils.h addedgeg.c gtools.o gtnauty.o gutil1.o ${NAUTYO} - ${CC} -o addedgeg ${CFLAGS} addedgeg.c gtools.o gtnauty.o \ - gutil1.o ${NAUTYO} ${LDFLAGS} - -newedgeg : ${GTOOLSH} gutils.h newedgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o newedgeg ${CFLAGS} newedgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -pickg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o pickg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -countg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o countg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -directg : ${GTOOLSH} naugroup.h directg.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o directg ${CFLAGS} directg.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -multig : ${GTOOLSH} naugroup.h multig.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o multig ${CFLAGS} multig.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -planarg : ${GTOOLSH} planarg.c gtools.o planarity.c - ${CC} -o planarg ${CFLAGS} \ - planarg.c planarity.c gtools.o ${LDFLAGS} - -watercluster2 : ${GTOOLSH} nauty.h watercluster2.c gtools.o ${NAUTYO} - ${CC} -o watercluster2 ${CFLAGS} -DMAXN=32 watercluster2.c \ - gtools.o ${NAUTYO} ${LDFLAGS} - -showg : showg.c - ${CC} -o showg ${CFLAGS} showg.c ${LDFLAGS} - -readg : - echo "*** readg is now called showg ***" - make showg - - -sumlines : sumlines.c - ${CC} -o sumlines ${CFLAGS} sumlines.c ${LDFLAGS} -lgmp - -naugroup.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} naugroup.c -naugroupW.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${W} naugroup.c -naugroupL.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${L} naugroup.c - -nautyex1 : nauty.h nautyex1.c nauty.a - ${CC} -o nautyex1 ${CFLAGS} nautyex1.c nauty.a ${LDFLAGS} -nautyex2 : nauty.h nautyex2.c ${NAUTYO} - ${CC} -o nautyex2 ${CFLAGS} nautyex2.c nauty.a ${LDFLAGS} -nautyex3 : nauty.h nautyex3.c nauty.a - ${CC} -o nautyex3 ${CFLAGS} nautyex3.c nauty.a ${LDFLAGS} -nautyex4 : nauty.h nausparse.h nautyex4.c nauty.a - ${CC} -o nautyex4 ${CFLAGS} nautyex4.c nauty.a ${LDFLAGS} -nautyex5 : nauty.h nausparse.h nautyex5.c nauty.a - ${CC} -o nautyex5 ${CFLAGS} nautyex5.c nauty.a ${LDFLAGS} -nautyex6 : nauty.h nautyex6.c nauty.a - ${CC} -o nautyex6 ${CFLAGS} nautyex6.c nauty.a ${LDFLAGS} -nautyex7 : nauty.h nautyex7.c traces.h nauty.a - ${CC} -o nautyex7 ${CFLAGS} nautyex7.c nauty.a ${LDFLAGS} -nautyex8 : nauty.h nausparse.h nautyex8.c nauty.a - ${CC} -o nautyex8 ${CFLAGS} nautyex8.c nauty.a ${LDFLAGS} -nautyex9 : nauty.h nautyex9.c nauty.a - ${CC} -o nautyex9 ${CFLAGS} nautyex9.c nauty.a ${LDFLAGS} -nautyex10 : nauty.h nautyex10.c nauty.a - ${CC} -o nautyex10 ${CFLAGS} nautyex10.c nauty.a ${LDFLAGS} - -checks: naucompare ${TESTPROGS} ; - -naucompare : naucompare.c - ${CC} -o naucompare ${CFLAGS} naucompare.c ${LDFLAGS} - -dreadtest: dreadnaut.c nautinv.o ${NAUTYO} naututil.o traces.o gtools.o - ${CC} -o dreadtest ${SAFECFLAGS} -DDREADTEST dreadnaut.c \ - nautinv.o naututil.o traces.o gtools.o ${NAUTYO} ${LDFLAGS} -dreadtest1: dreadnaut.c nautinv1.o ${NAUTY1O} naututil1.o traces.o gtools.o - ${CC} -o dreadtest1 ${SAFECFLAGS} ${SMALL} -DDREADTEST dreadnaut.c \ - nautinv1.o naututil1.o traces.o gtools.o ${NAUTY1O} ${LDFLAGS} -dreadtestS: dreadnaut.c nautinvS.o ${NAUTYSO} naututilS.o tracesS.o gtoolsS.o - ${CC} -o dreadtestS ${SAFECFLAGS} ${S} -DDREADTEST dreadnaut.c \ - nautinvS.o naututilS.o tracesS.o gtoolsS.o ${NAUTYSO} ${LDFLAGS} -dreadtestS1: dreadnaut.c nautinvS1.o ${NAUTYS1O} naututilS1.o \ - tracesS.o gtoolsS.o - ${CC} -o dreadtestS1 ${SAFECFLAGS} ${S1} -DDREADTEST dreadnaut.c \ - nautinvS1.o naututilS1.o tracesS.o gtoolsS.o ${NAUTYS1O} ${LDFLAGS} -dreadtestW: dreadnaut.c nautinvW.o ${NAUTYWO} naututilW.o tracesW.o gtoolsW.o - ${CC} -o dreadtestW ${SAFECFLAGS} ${W} -DDREADTEST dreadnaut.c \ - nautinvW.o naututilW.o tracesW.o gtoolsW.o ${NAUTYWO} ${LDFLAGS} -dreadtestW1: dreadnaut.c nautinvW1.o ${NAUTYW1O} naututilW1.o \ - tracesW.o gtoolsW.o - ${CC} -o dreadtestW1 ${SAFECFLAGS} ${W1} -DDREADTEST dreadnaut.c \ - nautinvW1.o naututilW1.o tracesW.o gtoolsW.o ${NAUTYW1O} ${LDFLAGS} -dreadtestL: dreadnaut.c nautinvL.o ${NAUTYLO} naututilL.o tracesL.o gtoolsL.o - ${CC} -o dreadtestL ${SAFECFLAGS} ${L} -DDREADTEST dreadnaut.c \ - nautinvL.o naututilL.o tracesL.o gtoolsL.o ${NAUTYLO} ${LDFLAGS} -dreadtestL1: dreadnaut.c nautinvL1.o ${NAUTYL1O} naututilL1.o \ - tracesL.o gtoolsL.o - ${CC} -o dreadtestL1 ${SAFECFLAGS} ${L1} -DDREADTEST dreadnaut.c \ - nautinvL1.o naututilL1.o tracesL.o gtoolsL.o ${NAUTYL1O} ${LDFLAGS} -dreadtest4K: dreadnaut.c nausparse.c schreier.c naututil.c nauty.c \ - nautil.c nautinv.c naugraph.c naurng.o gtools.c traces.c - ${CC} -o dreadtest4K ${SAFECFLAGS} -DMAXN=4096 -DDREADTEST \ - dreadnaut.c naututil.c nauty.c nautil.c nautinv.c \ - naugraph.c nausparse.c naurng.o schreier.c gtools.c \ - traces.c ${LDFLAGS} - -checks6: checks6.c ${GTOOLSH} gtools.o - ${CC} -o checks6 ${SAFECFLAGS} checks6.c gtools.o - -bigs: gtnauty.o gutil2.o nausparse.o nautil.o naututil.o gtools.o \ - naugraph.o nautaux.o nautinv.o nauty.o schreier.o - rm -f gtnautyB.o gutil2B.o nausparseB.o nautilB.o naututilB.o \ - gtoolsB.o naugraphB.o nautauxB.o nautinvB.o nautyB.o - cp gtnauty.o gtnautyB.o - cp gutil2.o gutil2B.o - cp nausparse.o nausparseB.o - cp nautil.o nautilB.o - cp naututil.o naututilB.o - cp gtools.o gtoolsB.o - cp naugraph.o naugraphB.o - cp nautaux.o nautauxB.o - cp nautinv.o nautinvB.o - cp nauty.o nautyB.o - cp schreier.o schreierB.o - -# ++++++ This file is automatically generated, don't edit it by hand! ++++++ diff --git a/tools/nauty25r9_mac/makefile.basic b/tools/nauty25r9_mac/makefile.basic deleted file mode 100644 index 11f6122..0000000 --- a/tools/nauty25r9_mac/makefile.basic +++ /dev/null @@ -1,486 +0,0 @@ -# makefile for nauty 2.5 -# makefile. Generated from makefile.in by configure. - -SHELL=/bin/sh -CC=gcc -CFLAGS=-O2 -SAFECFLAGS= -O4 -LDFLAGS= -THREADLIB=-lpthread -LOK=1 # 0 if no 64-bit integers -TESTPROGS=dreadtest dreadtestS dreadtestS1 dreadtest4K dreadtest1 dreadtestW dreadtestW1 dreadtestL1 dreadtestL -EXEEXT= - -SMALL=-DMAXN=WORDSIZE -S1=-DMAXN=WORDSIZE -DWORDSIZE=16 -W1=-DMAXN=WORDSIZE -DWORDSIZE=32 -L1=-DMAXN=WORDSIZE -DWORDSIZE=64 -S=-DWORDSIZE=16 -W=-DWORDSIZE=32 -L=-DWORDSIZE=64 - -CCOBJ=${CC} -c ${CFLAGS} -o $@ -GTOOLSH=gtools.h nauty.h naututil.h nausparse.h naurng.h - -# ++++++ This file is automatically generated, don't edit it by hand! ++++++ - -all : nauty gtools ; - -nauty : dreadnaut nauty.a nauty1.a ; - -gtools : copyg listg labelg dretog amtog geng complg showg NRswitchg \ - biplabg addedgeg deledgeg countg pickg genrang newedgeg catg genbg directg \ - ranlabg multig planarg gentourng linegraphg watercluster2 \ - subdivideg shortg ; - -NAUTYO=nauty.o nautil.o nausparse.o naugraph.o schreier.o naurng.o -NAUTY1O=nauty1.o nautil1.o nausparse.o naugraph1.o schreier.o naurng.o -NAUTYSO=nautyS.o nautilS.o nausparseS.o naugraphS.o schreierS.o naurng.o -NAUTYS1O=nautyS1.o nautilS1.o nausparseS.o naugraphS1.o schreierS.o naurng.o -NAUTYWO=nautyW.o nautilW.o nausparseW.o naugraphW.o schreierW.o naurng.o -NAUTYW1O=nautyW1.o nautilW1.o nausparseW.o naugraphW1.o schreierW.o naurng.o -NAUTYLO=nautyL.o nautilL.o nausparseL.o naugraphL.o schreierL.o naurng.o -NAUTYL1O=nautyL1.o nautilL1.o nausparseL.o naugraphL1.o schreierL.o naurng.o - -nauty.o: nauty.h schreier.h nauty.c - ${CCOBJ} nauty.c -nauty1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${SMALL} nauty.c -nautyS.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S} nauty.c -nautyS1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S1} nauty.c -nautyW.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W} nauty.c -nautyW1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W1} nauty.c -nautyL.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L} nauty.c -nautyL1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L1} nauty.c - -nautil.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} nautil.c -nautil1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${SMALL} nautil.c -nautilS.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S} nautil.c -nautilS1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S1} nautil.c -nautilW.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W} nautil.c -nautilW1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W1} nautil.c -nautilL.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L} nautil.c -nautilL1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L1} nautil.c - -naugraph.o: nauty.h naugraph.c - ${CCOBJ} naugraph.c -naugraph1.o: nauty.h naugraph.c - ${CCOBJ} ${SMALL} naugraph.c -naugraphS.o: nauty.h naugraph.c - ${CCOBJ} ${S} naugraph.c -naugraphS1.o: nauty.h naugraph.c - ${CCOBJ} ${S1} naugraph.c -naugraphW.o: nauty.h naugraph.c - ${CCOBJ} ${W} naugraph.c -naugraphW1.o: nauty.h naugraph.c - ${CCOBJ} ${W1} naugraph.c -naugraphL.o: nauty.h naugraph.c - ${CCOBJ} ${L} naugraph.c -naugraphL1.o: nauty.h naugraph.c - ${CCOBJ} ${L1} naugraph.c - -naututil.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} naututil.c -naututil1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${SMALL} naututil.c -naututilS.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S} naututil.c -naututilS1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S1} naututil.c -naututilW.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W} naututil.c -naututilW1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W1} naututil.c -naututilL.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L} naututil.c -naututilL1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L1} naututil.c - -nautinv.o: nauty.h naututil.h nautinv.c - ${CCOBJ} nautinv.c -nautinv1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${SMALL} nautinv.c -nautinvS.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S} nautinv.c -nautinvS1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S1} nautinv.c -nautinvW.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W} nautinv.c -nautinvW1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W1} nautinv.c -nautinvL.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L} nautinv.c -nautinvL1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L1} nautinv.c - -schreier.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} schreier.c -schreierS.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${S} schreier.c -schreierW.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${W} schreier.c -schreierL.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${L} schreier.c - -nausparse.o : nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} nausparse.c -nausparseS.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${S} nausparse.c -nausparseW.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${W} nausparse.c -nausparseL.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${L} nausparse.c - -traces.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} traces.c -tracesS.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${S} traces.c -tracesW.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${W} traces.c -tracesL.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${L} traces.c - -gtools.o : ${GTOOLSH} gtools.c - ${CCOBJ} gtools.c -gtoolsS.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${S} gtools.c -gtoolsW.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${W} gtools.c -gtoolsL.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${L} gtools.c - -nautaux.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} nautaux.c -nautauxS.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${S} nautaux.c -nautauxW.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${W} nautaux.c -nautauxL.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${L} nautaux.c - -gtnauty.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} gtnauty.c -gtnautyL1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L1} gtnauty.c -gtnautyW1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W1} gtnauty.c -gtnautyL.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L} gtnauty.c -gtnautyW.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W} gtnauty.c - -naurng.o: naurng.c - ${CCOBJ} naurng.c -rng.o: rng.c - ${CCOBJ} rng.c - -dreadnaut: dreadnaut.c naututil.o nautinv.o traces.o gtools.o ${NAUTYO} - ${CC} -o dreadnaut ${SAFECFLAGS} dreadnaut.c naututil.o \ - nautinv.o gtools.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} -dreadnautL: dreadnaut.c naututilL.o nautyL.o nautilL.o nautinvL.o \ - nausparseL.o naugraphL.o naurng.o schreierL.o tracesL.o gtoolsL.o - ${CC} -o dreadnautL ${SAFECFLAGS} ${L} dreadnaut.c naututilL.o \ - nautyL.o nautilL.o nautinvL.o naugraphL.o naurng.o gtoolsL.o \ - nausparseL.o schreierL.o tracesL.o ${LDFLAGS} -dreadnaut1: dreadnaut.c naututil1.o nauty1.o nautil1.o nautinv1.o \ - nausparse.o naugraph1.o naurng.o schreier.o traces.o gtools.o - ${CC} -o dreadnaut1 ${SAFECFLAGS} ${SMALL} dreadnaut.c naututil1.o \ - nauty1.o nautil1.o nautinv1.o naugraph1.o naurng.o gtools.o \ - nausparse.o schreier.o traces.o ${LDFLAGS} - -nauty.a: ${NAUTYO} traces.o gtools.o naututil.o nautinv.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty.a - ar crs nauty.a ${NAUTYO} traces.o gtools.o naututil.o \ - nautinv.o gutil1.o gutil2.o gtnauty.o naugroup.o \ - naurng.o schreier.o - -nauty1.a: ${NAUTY1O} traces.o gtools.o naututil1.o nautinv1.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty1.a - ar crs nauty1.a ${NAUTY1O} traces.o gtools.o naututil1.o \ - nautinv1.o gutil1.o gutil2.o gtnauty.o naugroup.o - -nautyW.a: ${NAUTYWO} traces.o gtoolsW.o naututilW.o nautinvW.o \ - gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - rm -rf nautyW.a - ar crs nautyW.a ${NAUTYWO} traces.o gtoolsW.o naututilW.o \ - nautinvW.o gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - -nautyW1.a: ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o nautinvW1.o \ - gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - rm -rf nautyW1.a - ar crs nautyW1.a ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o \ - nautinvW1.o gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - -nautyL.a: ${NAUTYLO} traces.o gtoolsL.o naututilL.o nautinvL.o \ - gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - rm -rf nautyL.a - ar crs nautyL.a ${NAUTYL1O} traces.o gtoolsL.o naututilL.o \ - nautinvL.o gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - -nautyL1.a: ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o nautinvL1.o \ - gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - rm -rf nautyL1.a - ar crs nautyL1.a ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o \ - nautinvL1.o gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - -clean: - rm -f *.o config.log config.cache config.status - rm -f dreadtest${EXEEXT} dreadtestL${EXEEXT} \ - dreadtestW${EXEEXT} \ - dreadtestS${EXEEXT} dreadtestS1${EXEEXT} \ - dreadtest4K${EXEEXT} dreadtest1${EXEEXT} \ - dreadtestL1${EXEEXT} dreadtestW1${EXEEXT} - -gutil1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} gutil1.c -gutil2.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} gutil2.c -gutil1W1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W1} gutil1.c -gutil2W1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W1} gutil2.c -gutil1L1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L1} gutil1.c -gutil2L1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L1} gutil2.c -gutil1W.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W} gutil1.c -gutil2W.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W} gutil2.c -gutil1L.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L} gutil1.c -gutil2L.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L} gutil2.c - -catg : ${GTOOLSH} catg.c gtools.o - ${CC} -o catg ${CFLAGS} catg.c gtools.o ${LDFLAGS} - -copyg : ${GTOOLSH} copyg.c gtools.o - ${CC} -o copyg ${CFLAGS} copyg.c gtools.o ${LDFLAGS} - -listg : ${GTOOLSH} listg.c gtools.o nautil.o - ${CC} -o listg ${CFLAGS} listg.c gtools.o nautil.o ${LDFLAGS} - -labelg : ${GTOOLSH} naututil.h labelg.c gtools.o gtnauty.o ${NAUTYO} \ - nautinv.o nausparse.h gutils.h gutil2.o traces.h traces.o - ${CC} -o labelg ${SAFECFLAGS} labelg.c gtools.o gtnauty.o \ - nautinv.o gutil2.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} - -shortg : ${GTOOLSH} shortg.c gtools.o gtnauty.o ${NAUTYO} \ - nausparse.h gutils.h gutil2.o nautinv.h nautinv.o traces.o - ${CC} -o shortg ${CFLAGS} shortg.c gtools.o gtnauty.o nautinv.o \ - ${NAUTYO} gutil2.o traces.o ${LDFLAGS} ${THREADLIB} - -dretog : ${GTOOLSH} dretog.c naututil.o gtools.o ${NAUTYO} - ${CC} -o dretog ${CFLAGS} dretog.c naututil.o gtools.o \ - ${NAUTYO} ${LDFLAGS} - -amtog : ${GTOOLSH} amtog.c gtools.o ${NAUTYO} - ${CC} -o amtog ${CFLAGS} amtog.c gtools.o ${NAUTYO} ${LDFLAGS} - -genbg : ${GTOOLSH} genbg.c gtoolsW.o nautyW1.o nautilW1.o naugraphW1.o \ - schreierW.o naurng.o - ${CC} -o genbg ${CFLAGS} ${W1} genbg.c gtoolsW.o schreierW.o \ - nautyW1.o nautilW1.o naugraphW1.o naurng.o ${LDFLAGS} - -genbgL : ${GTOOLSH} genbg.c gtoolsL.o nautyL1.o nautilL1.o naugraphL1.o \ - schreierL.o naurng.o - ${CC} -o genbgL ${CFLAGS} ${L1} -DMAXN1=30 genbg.c gtoolsL.o \ - schreierL.o naurng.o nautyL1.o nautilL1.o naugraphL1.o ${LDFLAGS} - -geng : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng ${CFLAGS} -DMAXN=32 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng16 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng16 ${CFLAGS} -DMAXN=16 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng24 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng24 ${CFLAGS} -DMAXN=24 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -gentourng : ${GTOOLSH} gentourng.c gtools.o nauty1.o nautil1.o \ - naugraph1.o schreier.o naurng.o - ${CC} -o gentourng ${CFLAGS} -DMAXN=24 gentourng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -genrang : ${GTOOLSH} genrang.c gtools.o naututil.o ${NAUTYO} - ${CC} -o genrang ${CFLAGS} genrang.c \ - gtools.o naututil.o ${NAUTYO} ${LDFLAGS} - -complg : ${GTOOLSH} complg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o complg ${CFLAGS} complg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -linegraphg : ${GTOOLSH} linegraphg.c gtools.o ${NAUTYO} - ${CC} -o linegraphg ${CFLAGS} linegraphg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -subdivideg : ${GTOOLSH} subdivideg.c gtools.o ${NAUTYO} - ${CC} -o subdivideg ${CFLAGS} subdivideg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -biplabg : ${GTOOLSH} gutils.h biplabg.c gtools.o gutil1.o ${NAUTYO} - ${CC} -o biplabg ${CFLAGS} biplabg.c \ - gtools.o gutil1.o ${NAUTYO} ${LDFLAGS} - -ranlabg : ${GTOOLSH} ranlabg.c gtools.o ${NAUTYO} - ${CC} -o ranlabg ${CFLAGS} ranlabg.c gtools.o ${NAUTYO} ${LDFLAGS} - -NRswitchg : ${GTOOLSH} NRswitchg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o NRswitchg ${CFLAGS} NRswitchg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -deledgeg : ${GTOOLSH} deledgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o deledgeg ${CFLAGS} deledgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -addedgeg : ${GTOOLSH} gutils.h addedgeg.c gtools.o gtnauty.o gutil1.o ${NAUTYO} - ${CC} -o addedgeg ${CFLAGS} addedgeg.c gtools.o gtnauty.o \ - gutil1.o ${NAUTYO} ${LDFLAGS} - -newedgeg : ${GTOOLSH} gutils.h newedgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o newedgeg ${CFLAGS} newedgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -pickg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o pickg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -countg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o countg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -directg : ${GTOOLSH} naugroup.h directg.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o directg ${CFLAGS} directg.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -multig : ${GTOOLSH} naugroup.h multig.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o multig ${CFLAGS} multig.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -planarg : ${GTOOLSH} planarg.c gtools.o planarity.c - ${CC} -o planarg ${CFLAGS} \ - planarg.c planarity.c gtools.o ${LDFLAGS} - -watercluster2 : ${GTOOLSH} nauty.h watercluster2.c gtools.o ${NAUTYO} - ${CC} -o watercluster2 ${CFLAGS} -DMAXN=32 watercluster2.c \ - gtools.o ${NAUTYO} ${LDFLAGS} - -showg : showg.c - ${CC} -o showg ${CFLAGS} showg.c ${LDFLAGS} - -readg : - echo "*** readg is now called showg ***" - make showg - - -sumlines : sumlines.c - ${CC} -o sumlines ${CFLAGS} sumlines.c ${LDFLAGS} -lgmp - -naugroup.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} naugroup.c -naugroupW.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${W} naugroup.c -naugroupL.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${L} naugroup.c - -nautyex1 : nauty.h nautyex1.c nauty.a - ${CC} -o nautyex1 ${CFLAGS} nautyex1.c nauty.a ${LDFLAGS} -nautyex2 : nauty.h nautyex2.c ${NAUTYO} - ${CC} -o nautyex2 ${CFLAGS} nautyex2.c nauty.a ${LDFLAGS} -nautyex3 : nauty.h nautyex3.c nauty.a - ${CC} -o nautyex3 ${CFLAGS} nautyex3.c nauty.a ${LDFLAGS} -nautyex4 : nauty.h nausparse.h nautyex4.c nauty.a - ${CC} -o nautyex4 ${CFLAGS} nautyex4.c nauty.a ${LDFLAGS} -nautyex5 : nauty.h nausparse.h nautyex5.c nauty.a - ${CC} -o nautyex5 ${CFLAGS} nautyex5.c nauty.a ${LDFLAGS} -nautyex6 : nauty.h nautyex6.c nauty.a - ${CC} -o nautyex6 ${CFLAGS} nautyex6.c nauty.a ${LDFLAGS} -nautyex7 : nauty.h nautyex7.c traces.h nauty.a - ${CC} -o nautyex7 ${CFLAGS} nautyex7.c nauty.a ${LDFLAGS} -nautyex8 : nauty.h nausparse.h nautyex8.c nauty.a - ${CC} -o nautyex8 ${CFLAGS} nautyex8.c nauty.a ${LDFLAGS} -nautyex9 : nauty.h nautyex9.c nauty.a - ${CC} -o nautyex9 ${CFLAGS} nautyex9.c nauty.a ${LDFLAGS} -nautyex10 : nauty.h nautyex10.c nauty.a - ${CC} -o nautyex10 ${CFLAGS} nautyex10.c nauty.a ${LDFLAGS} - -checks: naucompare ${TESTPROGS} ; - -naucompare : naucompare.c - ${CC} -o naucompare ${CFLAGS} naucompare.c ${LDFLAGS} - -dreadtest: dreadnaut.c nautinv.o ${NAUTYO} naututil.o traces.o gtools.o - ${CC} -o dreadtest ${SAFECFLAGS} -DDREADTEST dreadnaut.c \ - nautinv.o naututil.o traces.o gtools.o ${NAUTYO} ${LDFLAGS} -dreadtest1: dreadnaut.c nautinv1.o ${NAUTY1O} naututil1.o traces.o gtools.o - ${CC} -o dreadtest1 ${SAFECFLAGS} ${SMALL} -DDREADTEST dreadnaut.c \ - nautinv1.o naututil1.o traces.o gtools.o ${NAUTY1O} ${LDFLAGS} -dreadtestS: dreadnaut.c nautinvS.o ${NAUTYSO} naututilS.o tracesS.o gtoolsS.o - ${CC} -o dreadtestS ${SAFECFLAGS} ${S} -DDREADTEST dreadnaut.c \ - nautinvS.o naututilS.o tracesS.o gtoolsS.o ${NAUTYSO} ${LDFLAGS} -dreadtestS1: dreadnaut.c nautinvS1.o ${NAUTYS1O} naututilS1.o \ - tracesS.o gtoolsS.o - ${CC} -o dreadtestS1 ${SAFECFLAGS} ${S1} -DDREADTEST dreadnaut.c \ - nautinvS1.o naututilS1.o tracesS.o gtoolsS.o ${NAUTYS1O} ${LDFLAGS} -dreadtestW: dreadnaut.c nautinvW.o ${NAUTYWO} naututilW.o tracesW.o gtoolsW.o - ${CC} -o dreadtestW ${SAFECFLAGS} ${W} -DDREADTEST dreadnaut.c \ - nautinvW.o naututilW.o tracesW.o gtoolsW.o ${NAUTYWO} ${LDFLAGS} -dreadtestW1: dreadnaut.c nautinvW1.o ${NAUTYW1O} naututilW1.o \ - tracesW.o gtoolsW.o - ${CC} -o dreadtestW1 ${SAFECFLAGS} ${W1} -DDREADTEST dreadnaut.c \ - nautinvW1.o naututilW1.o tracesW.o gtoolsW.o ${NAUTYW1O} ${LDFLAGS} -dreadtestL: dreadnaut.c nautinvL.o ${NAUTYLO} naututilL.o tracesL.o gtoolsL.o - ${CC} -o dreadtestL ${SAFECFLAGS} ${L} -DDREADTEST dreadnaut.c \ - nautinvL.o naututilL.o tracesL.o gtoolsL.o ${NAUTYLO} ${LDFLAGS} -dreadtestL1: dreadnaut.c nautinvL1.o ${NAUTYL1O} naututilL1.o \ - tracesL.o gtoolsL.o - ${CC} -o dreadtestL1 ${SAFECFLAGS} ${L1} -DDREADTEST dreadnaut.c \ - nautinvL1.o naututilL1.o tracesL.o gtoolsL.o ${NAUTYL1O} ${LDFLAGS} -dreadtest4K: dreadnaut.c nausparse.c schreier.c naututil.c nauty.c \ - nautil.c nautinv.c naugraph.c naurng.o gtools.c traces.c - ${CC} -o dreadtest4K ${SAFECFLAGS} -DMAXN=4096 -DDREADTEST \ - dreadnaut.c naututil.c nauty.c nautil.c nautinv.c \ - naugraph.c nausparse.c naurng.o schreier.c gtools.c \ - traces.c ${LDFLAGS} - -checks6: checks6.c ${GTOOLSH} gtools.o - ${CC} -o checks6 ${SAFECFLAGS} checks6.c gtools.o - -bigs: gtnauty.o gutil2.o nausparse.o nautil.o naututil.o gtools.o \ - naugraph.o nautaux.o nautinv.o nauty.o schreier.o - rm -f gtnautyB.o gutil2B.o nausparseB.o nautilB.o naututilB.o \ - gtoolsB.o naugraphB.o nautauxB.o nautinvB.o nautyB.o - cp gtnauty.o gtnautyB.o - cp gutil2.o gutil2B.o - cp nausparse.o nausparseB.o - cp nautil.o nautilB.o - cp naututil.o naututilB.o - cp gtools.o gtoolsB.o - cp naugraph.o naugraphB.o - cp nautaux.o nautauxB.o - cp nautinv.o nautinvB.o - cp nauty.o nautyB.o - cp schreier.o schreierB.o - -# ++++++ This file is automatically generated, don't edit it by hand! ++++++ diff --git a/tools/nauty25r9_mac/makefile.in b/tools/nauty25r9_mac/makefile.in deleted file mode 100644 index 459c551..0000000 --- a/tools/nauty25r9_mac/makefile.in +++ /dev/null @@ -1,486 +0,0 @@ -# makefile for nauty 2.5 -# @configure_input@ - -SHELL=/bin/sh -CC=@CC@ -CFLAGS=@CFLAGS@ @MORECFLAGS@ -SAFECFLAGS=@CFLAGS@ -LDFLAGS=@LDFLAGS@ @LIBS@ -THREADLIB=@threadlib@ -LOK=@lok@ # 0 if no 64-bit integers -TESTPROGS=@testprogs@ -EXEEXT=@EXEEXT@ - -SMALL=-DMAXN=WORDSIZE -S1=-DMAXN=WORDSIZE -DWORDSIZE=16 -W1=-DMAXN=WORDSIZE -DWORDSIZE=32 -L1=-DMAXN=WORDSIZE -DWORDSIZE=64 -S=-DWORDSIZE=16 -W=-DWORDSIZE=32 -L=-DWORDSIZE=64 - -CCOBJ=${CC} -c ${CFLAGS} -o $@ -GTOOLSH=gtools.h nauty.h naututil.h nausparse.h naurng.h - -# @edit_msg@ - -all : nauty gtools ; - -nauty : dreadnaut nauty.a nauty1.a ; - -gtools : copyg listg labelg dretog amtog geng complg showg NRswitchg \ - biplabg addedgeg deledgeg countg pickg genrang newedgeg catg genbg directg \ - ranlabg multig planarg gentourng linegraphg watercluster2 \ - subdivideg @shortg_or_null@ ; - -NAUTYO=nauty.o nautil.o nausparse.o naugraph.o schreier.o naurng.o -NAUTY1O=nauty1.o nautil1.o nausparse.o naugraph1.o schreier.o naurng.o -NAUTYSO=nautyS.o nautilS.o nausparseS.o naugraphS.o schreierS.o naurng.o -NAUTYS1O=nautyS1.o nautilS1.o nausparseS.o naugraphS1.o schreierS.o naurng.o -NAUTYWO=nautyW.o nautilW.o nausparseW.o naugraphW.o schreierW.o naurng.o -NAUTYW1O=nautyW1.o nautilW1.o nausparseW.o naugraphW1.o schreierW.o naurng.o -NAUTYLO=nautyL.o nautilL.o nausparseL.o naugraphL.o schreierL.o naurng.o -NAUTYL1O=nautyL1.o nautilL1.o nausparseL.o naugraphL1.o schreierL.o naurng.o - -nauty.o: nauty.h schreier.h nauty.c - ${CCOBJ} nauty.c -nauty1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${SMALL} nauty.c -nautyS.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S} nauty.c -nautyS1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${S1} nauty.c -nautyW.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W} nauty.c -nautyW1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${W1} nauty.c -nautyL.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L} nauty.c -nautyL1.o: nauty.h schreier.h nauty.c - ${CCOBJ} ${L1} nauty.c - -nautil.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} nautil.c -nautil1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${SMALL} nautil.c -nautilS.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S} nautil.c -nautilS1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${S1} nautil.c -nautilW.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W} nautil.c -nautilW1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${W1} nautil.c -nautilL.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L} nautil.c -nautilL1.o: nauty.h nautil.c sorttemplates.c - ${CCOBJ} ${L1} nautil.c - -naugraph.o: nauty.h naugraph.c - ${CCOBJ} naugraph.c -naugraph1.o: nauty.h naugraph.c - ${CCOBJ} ${SMALL} naugraph.c -naugraphS.o: nauty.h naugraph.c - ${CCOBJ} ${S} naugraph.c -naugraphS1.o: nauty.h naugraph.c - ${CCOBJ} ${S1} naugraph.c -naugraphW.o: nauty.h naugraph.c - ${CCOBJ} ${W} naugraph.c -naugraphW1.o: nauty.h naugraph.c - ${CCOBJ} ${W1} naugraph.c -naugraphL.o: nauty.h naugraph.c - ${CCOBJ} ${L} naugraph.c -naugraphL1.o: nauty.h naugraph.c - ${CCOBJ} ${L1} naugraph.c - -naututil.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} naututil.c -naututil1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${SMALL} naututil.c -naututilS.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S} naututil.c -naututilS1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${S1} naututil.c -naututilW.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W} naututil.c -naututilW1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${W1} naututil.c -naututilL.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L} naututil.c -naututilL1.o: nauty.h naututil.h nausparse.h naututil.c - ${CCOBJ} ${L1} naututil.c - -nautinv.o: nauty.h naututil.h nautinv.c - ${CCOBJ} nautinv.c -nautinv1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${SMALL} nautinv.c -nautinvS.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S} nautinv.c -nautinvS1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${S1} nautinv.c -nautinvW.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W} nautinv.c -nautinvW1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${W1} nautinv.c -nautinvL.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L} nautinv.c -nautinvL1.o: nauty.h naututil.h nautinv.c - ${CCOBJ} ${L1} nautinv.c - -schreier.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} schreier.c -schreierS.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${S} schreier.c -schreierW.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${W} schreier.c -schreierL.o : nauty.h naurng.h schreier.h schreier.c - ${CCOBJ} ${L} schreier.c - -nausparse.o : nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} nausparse.c -nausparseS.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${S} nausparse.c -nausparseW.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${W} nausparse.c -nausparseL.o: nauty.h nausparse.h nausparse.c sorttemplates.c - ${CCOBJ} ${L} nausparse.c - -traces.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} traces.c -tracesS.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${S} traces.c -tracesW.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${W} traces.c -tracesL.o : nauty.h naurng.h schreier.h traces.h nausparse.h traces.c - ${CCOBJ} ${L} traces.c - -gtools.o : ${GTOOLSH} gtools.c - ${CCOBJ} gtools.c -gtoolsS.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${S} gtools.c -gtoolsW.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${W} gtools.c -gtoolsL.o : ${GTOOLSH} gtools.c - ${CCOBJ} ${L} gtools.c - -nautaux.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} nautaux.c -nautauxS.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${S} nautaux.c -nautauxW.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${W} nautaux.c -nautauxL.o: nautaux.h nauty.h naututil.h nautaux.c - ${CCOBJ} ${L} nautaux.c - -gtnauty.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} gtnauty.c -gtnautyL1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L1} gtnauty.c -gtnautyW1.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W1} gtnauty.c -gtnautyL.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${L} gtnauty.c -gtnautyW.o : ${GTOOLSH} gtnauty.c sorttemplates.c - ${CCOBJ} ${W} gtnauty.c - -naurng.o: naurng.c nauty.h - ${CCOBJ} naurng.c -rng.o: rng.c nauty.h - ${CCOBJ} rng.c - -dreadnaut: dreadnaut.c naututil.o nautinv.o traces.o gtools.o ${NAUTYO} - ${CC} -o dreadnaut ${SAFECFLAGS} dreadnaut.c naututil.o \ - nautinv.o gtools.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} -dreadnautL: dreadnaut.c naututilL.o nautyL.o nautilL.o nautinvL.o \ - nausparseL.o naugraphL.o naurng.o schreierL.o tracesL.o gtoolsL.o - ${CC} -o dreadnautL ${SAFECFLAGS} ${L} dreadnaut.c naututilL.o \ - nautyL.o nautilL.o nautinvL.o naugraphL.o naurng.o gtoolsL.o \ - nausparseL.o schreierL.o tracesL.o ${LDFLAGS} -dreadnaut1: dreadnaut.c naututil1.o nauty1.o nautil1.o nautinv1.o \ - nausparse.o naugraph1.o naurng.o schreier.o traces.o gtools.o - ${CC} -o dreadnaut1 ${SAFECFLAGS} ${SMALL} dreadnaut.c naututil1.o \ - nauty1.o nautil1.o nautinv1.o naugraph1.o naurng.o gtools.o \ - nausparse.o schreier.o traces.o ${LDFLAGS} - -nauty.a: ${NAUTYO} traces.o gtools.o naututil.o nautinv.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty.a - ar crs nauty.a ${NAUTYO} traces.o gtools.o naututil.o \ - nautinv.o gutil1.o gutil2.o gtnauty.o naugroup.o \ - naurng.o schreier.o - -nauty1.a: ${NAUTY1O} traces.o gtools.o naututil1.o nautinv1.o \ - gutil1.o gutil2.o gtnauty.o naugroup.o - rm -rf nauty1.a - ar crs nauty1.a ${NAUTY1O} traces.o gtools.o naututil1.o \ - nautinv1.o gutil1.o gutil2.o gtnauty.o naugroup.o - -nautyW.a: ${NAUTYWO} traces.o gtoolsW.o naututilW.o nautinvW.o \ - gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - rm -rf nautyW.a - ar crs nautyW.a ${NAUTYWO} traces.o gtoolsW.o naututilW.o \ - nautinvW.o gutil1W.o gutil2W.o gtnautyW.o naugroupW.o - -nautyW1.a: ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o nautinvW1.o \ - gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - rm -rf nautyW1.a - ar crs nautyW1.a ${NAUTYW1O} traces.o gtoolsW.o naututilW1.o \ - nautinvW1.o gutil1W1.o gutil2W1.o gtnautyW1.o naugroupW.o - -nautyL.a: ${NAUTYLO} traces.o gtoolsL.o naututilL.o nautinvL.o \ - gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - rm -rf nautyL.a - ar crs nautyL.a ${NAUTYL1O} traces.o gtoolsL.o naututilL.o \ - nautinvL.o gutil1L.o gutil2L.o gtnautyL.o naugroupL.o - -nautyL1.a: ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o nautinvL1.o \ - gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - rm -rf nautyL1.a - ar crs nautyL1.a ${NAUTYL1O} traces.o gtoolsL.o naututilL1.o \ - nautinvL1.o gutil1L1.o gutil2L1.o gtnautyL1.o naugroupL.o - -clean: - rm -f *.o config.log config.cache config.status - rm -f dreadtest${EXEEXT} dreadtestL${EXEEXT} \ - dreadtestW${EXEEXT} \ - dreadtestS${EXEEXT} dreadtestS1${EXEEXT} \ - dreadtest4K${EXEEXT} dreadtest1${EXEEXT} \ - dreadtestL1${EXEEXT} dreadtestW1${EXEEXT} - -gutil1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} gutil1.c -gutil2.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} gutil2.c -gutil1W1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W1} gutil1.c -gutil2W1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W1} gutil2.c -gutil1L1.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L1} gutil1.c -gutil2L1.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L1} gutil2.c -gutil1W.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${W} gutil1.c -gutil2W.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${W} gutil2.c -gutil1L.o : ${GTOOLSH} gutils.h gutil1.c - ${CCOBJ} ${L} gutil1.c -gutil2L.o : ${GTOOLSH} gutils.h gutil2.c - ${CCOBJ} ${L} gutil2.c - -catg : ${GTOOLSH} catg.c gtools.o - ${CC} -o catg ${CFLAGS} catg.c gtools.o ${LDFLAGS} - -copyg : ${GTOOLSH} copyg.c gtools.o - ${CC} -o copyg ${CFLAGS} copyg.c gtools.o ${LDFLAGS} - -listg : ${GTOOLSH} listg.c gtools.o nautil.o - ${CC} -o listg ${CFLAGS} listg.c gtools.o nautil.o ${LDFLAGS} - -labelg : ${GTOOLSH} naututil.h labelg.c gtools.o gtnauty.o ${NAUTYO} \ - nautinv.o nausparse.h gutils.h gutil2.o traces.h traces.o - ${CC} -o labelg ${SAFECFLAGS} labelg.c gtools.o gtnauty.o \ - nautinv.o gutil2.o traces.o ${NAUTYO} ${LDFLAGS} ${THREADLIB} - -shortg : ${GTOOLSH} shortg.c gtools.o gtnauty.o ${NAUTYO} \ - nausparse.h gutils.h gutil2.o nautinv.h nautinv.o traces.o - ${CC} -o shortg ${CFLAGS} shortg.c gtools.o gtnauty.o nautinv.o \ - ${NAUTYO} gutil2.o traces.o ${LDFLAGS} ${THREADLIB} - -dretog : ${GTOOLSH} dretog.c naututil.o gtools.o ${NAUTYO} - ${CC} -o dretog ${CFLAGS} dretog.c naututil.o gtools.o \ - ${NAUTYO} ${LDFLAGS} - -amtog : ${GTOOLSH} amtog.c gtools.o ${NAUTYO} - ${CC} -o amtog ${CFLAGS} amtog.c gtools.o ${NAUTYO} ${LDFLAGS} - -genbg : ${GTOOLSH} genbg.c gtoolsW.o nautyW1.o nautilW1.o naugraphW1.o \ - schreierW.o naurng.o - ${CC} -o genbg ${CFLAGS} ${W1} genbg.c gtoolsW.o schreierW.o \ - nautyW1.o nautilW1.o naugraphW1.o naurng.o ${LDFLAGS} - -genbgL : ${GTOOLSH} genbg.c gtoolsL.o nautyL1.o nautilL1.o naugraphL1.o \ - schreierL.o naurng.o - ${CC} -o genbgL ${CFLAGS} ${L1} -DMAXN1=30 genbg.c gtoolsL.o \ - schreierL.o naurng.o nautyL1.o nautilL1.o naugraphL1.o ${LDFLAGS} - -geng : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng ${CFLAGS} -DMAXN=32 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng16 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng16 ${CFLAGS} -DMAXN=16 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -geng24 : ${GTOOLSH} geng.c gtools.o nauty1.o nautil1.o naugraph1.o schreier.o naurng.o - ${CC} -o geng24 ${CFLAGS} -DMAXN=24 geng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -gentourng : ${GTOOLSH} gentourng.c gtools.o nauty1.o nautil1.o \ - naugraph1.o schreier.o naurng.o - ${CC} -o gentourng ${CFLAGS} -DMAXN=24 gentourng.c gtools.o nauty1.o \ - nautil1.o naugraph1.o schreier.o naurng.o ${LDFLAGS} - -genrang : ${GTOOLSH} genrang.c gtools.o naututil.o ${NAUTYO} - ${CC} -o genrang ${CFLAGS} genrang.c \ - gtools.o naututil.o ${NAUTYO} ${LDFLAGS} - -complg : ${GTOOLSH} complg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o complg ${CFLAGS} complg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -linegraphg : ${GTOOLSH} linegraphg.c gtools.o ${NAUTYO} - ${CC} -o linegraphg ${CFLAGS} linegraphg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -subdivideg : ${GTOOLSH} subdivideg.c gtools.o ${NAUTYO} - ${CC} -o subdivideg ${CFLAGS} subdivideg.c gtools.o \ - ${NAUTYO} ${LDFLAGS} - -biplabg : ${GTOOLSH} gutils.h biplabg.c gtools.o gutil1.o ${NAUTYO} - ${CC} -o biplabg ${CFLAGS} biplabg.c \ - gtools.o gutil1.o ${NAUTYO} ${LDFLAGS} - -ranlabg : ${GTOOLSH} ranlabg.c gtools.o ${NAUTYO} - ${CC} -o ranlabg ${CFLAGS} ranlabg.c gtools.o ${NAUTYO} ${LDFLAGS} - -NRswitchg : ${GTOOLSH} NRswitchg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o NRswitchg ${CFLAGS} NRswitchg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -deledgeg : ${GTOOLSH} deledgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o deledgeg ${CFLAGS} deledgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -addedgeg : ${GTOOLSH} gutils.h addedgeg.c gtools.o gtnauty.o gutil1.o ${NAUTYO} - ${CC} -o addedgeg ${CFLAGS} addedgeg.c gtools.o gtnauty.o \ - gutil1.o ${NAUTYO} ${LDFLAGS} - -newedgeg : ${GTOOLSH} gutils.h newedgeg.c gtools.o gtnauty.o ${NAUTYO} - ${CC} -o newedgeg ${CFLAGS} newedgeg.c gtools.o gtnauty.o \ - ${NAUTYO} ${LDFLAGS} - -pickg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o pickg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -countg : ${GTOOLSH} gutils.h testg.c splay.c ${NAUTYO} \ - gtools.o gtnauty.o gutil1.o gutil2.o - ${CC} -o countg ${SAFECFLAGS} testg.c gtools.o gtnauty.o gutil1.o \ - gutil2.o ${NAUTYO} ${LDFLAGS} - -directg : ${GTOOLSH} naugroup.h directg.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o directg ${CFLAGS} directg.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -multig : ${GTOOLSH} naugroup.h multig.c gtools.o naugroup.o ${NAUTYO} - ${CC} -o multig ${CFLAGS} multig.c gtools.o \ - ${NAUTYO} naugroup.o ${LDFLAGS} - -planarg : ${GTOOLSH} planarg.c gtools.o planarity.c - ${CC} -o planarg ${CFLAGS} \ - planarg.c planarity.c gtools.o ${LDFLAGS} - -watercluster2 : ${GTOOLSH} nauty.h watercluster2.c gtools.o ${NAUTYO} - ${CC} -o watercluster2 ${CFLAGS} -DMAXN=32 watercluster2.c \ - gtools.o ${NAUTYO} ${LDFLAGS} - -showg : showg.c - ${CC} -o showg ${CFLAGS} showg.c ${LDFLAGS} - -readg : - echo "*** readg is now called showg ***" - make showg - - -sumlines : sumlines.c - ${CC} -o sumlines ${CFLAGS} sumlines.c ${LDFLAGS} -lgmp - -naugroup.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} naugroup.c -naugroupW.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${W} naugroup.c -naugroupL.o : nauty.h naugroup.h naugroup.c - ${CCOBJ} ${L} naugroup.c - -nautyex1 : nauty.h nautyex1.c nauty.a - ${CC} -o nautyex1 ${CFLAGS} nautyex1.c nauty.a ${LDFLAGS} -nautyex2 : nauty.h nautyex2.c ${NAUTYO} - ${CC} -o nautyex2 ${CFLAGS} nautyex2.c nauty.a ${LDFLAGS} -nautyex3 : nauty.h nautyex3.c nauty.a - ${CC} -o nautyex3 ${CFLAGS} nautyex3.c nauty.a ${LDFLAGS} -nautyex4 : nauty.h nausparse.h nautyex4.c nauty.a - ${CC} -o nautyex4 ${CFLAGS} nautyex4.c nauty.a ${LDFLAGS} -nautyex5 : nauty.h nausparse.h nautyex5.c nauty.a - ${CC} -o nautyex5 ${CFLAGS} nautyex5.c nauty.a ${LDFLAGS} -nautyex6 : nauty.h nautyex6.c nauty.a - ${CC} -o nautyex6 ${CFLAGS} nautyex6.c nauty.a ${LDFLAGS} -nautyex7 : nauty.h nautyex7.c traces.h nauty.a - ${CC} -o nautyex7 ${CFLAGS} nautyex7.c nauty.a ${LDFLAGS} -nautyex8 : nauty.h nausparse.h nautyex8.c nauty.a - ${CC} -o nautyex8 ${CFLAGS} nautyex8.c nauty.a ${LDFLAGS} -nautyex9 : nauty.h nautyex9.c nauty.a - ${CC} -o nautyex9 ${CFLAGS} nautyex9.c nauty.a ${LDFLAGS} -nautyex10 : nauty.h nautyex10.c nauty.a - ${CC} -o nautyex10 ${CFLAGS} nautyex10.c nauty.a ${LDFLAGS} - -checks: naucompare ${TESTPROGS} ; - -naucompare : naucompare.c - ${CC} -o naucompare ${CFLAGS} naucompare.c ${LDFLAGS} - -dreadtest: dreadnaut.c nautinv.o ${NAUTYO} naututil.o traces.o gtools.o - ${CC} -o dreadtest ${SAFECFLAGS} -DDREADTEST dreadnaut.c \ - nautinv.o naututil.o traces.o gtools.o ${NAUTYO} ${LDFLAGS} -dreadtest1: dreadnaut.c nautinv1.o ${NAUTY1O} naututil1.o traces.o gtools.o - ${CC} -o dreadtest1 ${SAFECFLAGS} ${SMALL} -DDREADTEST dreadnaut.c \ - nautinv1.o naututil1.o traces.o gtools.o ${NAUTY1O} ${LDFLAGS} -dreadtestS: dreadnaut.c nautinvS.o ${NAUTYSO} naututilS.o tracesS.o gtoolsS.o - ${CC} -o dreadtestS ${SAFECFLAGS} ${S} -DDREADTEST dreadnaut.c \ - nautinvS.o naututilS.o tracesS.o gtoolsS.o ${NAUTYSO} ${LDFLAGS} -dreadtestS1: dreadnaut.c nautinvS1.o ${NAUTYS1O} naututilS1.o \ - tracesS.o gtoolsS.o - ${CC} -o dreadtestS1 ${SAFECFLAGS} ${S1} -DDREADTEST dreadnaut.c \ - nautinvS1.o naututilS1.o tracesS.o gtoolsS.o ${NAUTYS1O} ${LDFLAGS} -dreadtestW: dreadnaut.c nautinvW.o ${NAUTYWO} naututilW.o tracesW.o gtoolsW.o - ${CC} -o dreadtestW ${SAFECFLAGS} ${W} -DDREADTEST dreadnaut.c \ - nautinvW.o naututilW.o tracesW.o gtoolsW.o ${NAUTYWO} ${LDFLAGS} -dreadtestW1: dreadnaut.c nautinvW1.o ${NAUTYW1O} naututilW1.o \ - tracesW.o gtoolsW.o - ${CC} -o dreadtestW1 ${SAFECFLAGS} ${W1} -DDREADTEST dreadnaut.c \ - nautinvW1.o naututilW1.o tracesW.o gtoolsW.o ${NAUTYW1O} ${LDFLAGS} -dreadtestL: dreadnaut.c nautinvL.o ${NAUTYLO} naututilL.o tracesL.o gtoolsL.o - ${CC} -o dreadtestL ${SAFECFLAGS} ${L} -DDREADTEST dreadnaut.c \ - nautinvL.o naututilL.o tracesL.o gtoolsL.o ${NAUTYLO} ${LDFLAGS} -dreadtestL1: dreadnaut.c nautinvL1.o ${NAUTYL1O} naututilL1.o \ - tracesL.o gtoolsL.o - ${CC} -o dreadtestL1 ${SAFECFLAGS} ${L1} -DDREADTEST dreadnaut.c \ - nautinvL1.o naututilL1.o tracesL.o gtoolsL.o ${NAUTYL1O} ${LDFLAGS} -dreadtest4K: dreadnaut.c nausparse.c schreier.c naututil.c nauty.c \ - nautil.c nautinv.c naugraph.c naurng.o gtools.c traces.c - ${CC} -o dreadtest4K ${SAFECFLAGS} -DMAXN=4096 -DDREADTEST \ - dreadnaut.c naututil.c nauty.c nautil.c nautinv.c \ - naugraph.c nausparse.c naurng.o schreier.c gtools.c \ - traces.c ${LDFLAGS} - -checks6: checks6.c ${GTOOLSH} gtools.o - ${CC} -o checks6 ${SAFECFLAGS} checks6.c gtools.o - -bigs: gtnauty.o gutil2.o nausparse.o nautil.o naututil.o gtools.o \ - naugraph.o nautaux.o nautinv.o nauty.o schreier.o - rm -f gtnautyB.o gutil2B.o nausparseB.o nautilB.o naututilB.o \ - gtoolsB.o naugraphB.o nautauxB.o nautinvB.o nautyB.o - cp gtnauty.o gtnautyB.o - cp gutil2.o gutil2B.o - cp nausparse.o nausparseB.o - cp nautil.o nautilB.o - cp naututil.o naututilB.o - cp gtools.o gtoolsB.o - cp naugraph.o naugraphB.o - cp nautaux.o nautauxB.o - cp nautinv.o nautinvB.o - cp nauty.o nautyB.o - cp schreier.o schreierB.o - -# @edit_msg@ diff --git a/tools/nauty25r9_mac/multig b/tools/nauty25r9_mac/multig deleted file mode 100644 index 6cb97babb9dd39947fe0ba040e0fcca3b5340954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136304 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 B$eREF diff --git a/tools/nauty25r9_mac/multig.c b/tools/nauty25r9_mac/multig.c deleted file mode 100644 index 1f56b57..0000000 --- a/tools/nauty25r9_mac/multig.c +++ /dev/null @@ -1,833 +0,0 @@ -/* multig.c version 1.6; B D McKay, Aug 31, 2011 */ - -#define USAGE \ -"multig [-q] [-u|-T|-G|-A|-B] [-e#|-e#:#] \n" \ -" [-m#] [-f#] [-D#|-r#|-l#] [infile [outfile]]" - -#define HELPTEXT \ -" Read undirected loop-free graphs and replace their edges with multiple\n\ - edges in all possible ways (multiplicity at least 1).\n\ - Isomorphic multigraphs derived from the same input are suppressed.\n\ - If the input graphs are non-isomorphic then the output graphs are also.\n\ -\n\ - -e# | -e#:# specify a value or range of the total number of edges\n\ - counting multiplicities\n\ - -m# maximum edge multiplicity (minimum is 1)\n\ - -D# upper bound on maximum degree\n\ - -r# make regular of specified degree (incompatible with -l, -D, -e)\n\ - -l# make regular multigraphs with multiloops, degree #\n\ - (incompatible with -r, -D, -e)\n\ - Either -l, -r, -D, -e or -m with a finite maximum must be given\n\ - -f# Use the group that fixes the first # vertices setwise\n\ - -T use a simple text output format (nv ne {v1 v2 mult})\n\ - -G like -T but includes group size as third item (if less than 10^10)\n\ - The group size does not include exchange of isolated vertices.\n\ - -A write as the upper triangle of an adjacency matrix, row by row,\n\ - including the diagonal, and preceded by the number of vertices\n\ - -B write as an integer matrix preceded by the number of rows and\n\ - number of columns, where -f determines the number of rows\n\ - -u no output, just count them\n\ - -q suppress auxiliary information\n" - -/*************************************************************************/ - -#include "gtools.h" -#include "naugroup.h" - -nauty_counter mg_nin,mg_nout; -FILE *outfile; - -#define MAXNV 128 -#define MAXNE 1024 -static int v0[MAXNE+MAXNV],v1[MAXNE+MAXNV]; -static int edgeno[MAXNV][MAXNV]; -static int lastlev[MAXNE]; - -static int ix[MAXNE+MAXNV],nix; -static boolean first; -static int lastreject[MAXNV]; -static boolean lastrejok; -static unsigned long groupsize; -static unsigned long newgroupsize; -static boolean Gswitch,Tswitch,Aswitch,Bswitch; -static int Brows; - -#define GROUPTEST_NOT -#ifdef GROUPTEST -static long long totallab; -#endif - -#define PATHCOUNTS_NOT -#ifdef PATHCOUNTS -static long long count0,count1,count2,count3,count4,count5; -static nauty_counter oldlo; -#endif - -/* If OUTPROC is defined at compile time, and -u is not used, the - * procedure OUTPROC is called for each graph. This must be linked - * by the compiler. The arguments are - * f = open output file - * n = number of vertices - * ne = number of edges - * gp = group size ignoring isolated vertices (note: may have overflowed) - * v0[*], v1[*], ix[*] = integer arrays. The edges are - * v0[i]-v1[i] with multiplicity ix[i] for i=0..ne-1. ix[i]>0 always. - */ - -/* SUMMARY feature - * - * If SUMMARY is defined, it must expand as the name of a procedure - * with prototype void SUMMARY(void). It is called at the end before - * the normal summary (which can be suppressed with -q). The numbers of - * graphs read and digraphs produced are available in the global variables - * mg_nin and mg_nout (type nauty_counter). - */ - -#ifdef OUTPROC -extern void OUTPROC(FILE*,int,int,unsigned long,int*,int*,int*); -#endif - -#ifdef SUMMARY -extern void SUMMARY(void); -#endif - -/**************************************************************************/ - -void -writeautom(int *p, int n) -/* Called by allgroup. */ -{ - int i; - - for (i = 0; i < n; ++i) printf(" %2d",p[i]); - printf("\n"); -} - -/**************************************************************************/ - -static boolean -ismax(int *p, int n) -/* test if x^p <= x */ -{ - int i,k; - - for (i = 0; i < nix; ++i) - { - k = edgeno[p[v1[i]]][p[v0[i]]]; - - if (ix[k] > ix[i]) return FALSE; - else if (ix[k] < ix[i]) return TRUE; - } - - ++newgroupsize; - return TRUE; -} - -/**************************************************************************/ - -void -testmax(int *p, int n, int *abort) -/* Called by allgroup2. */ -{ - int i; - - if (first) - { /* only the identity */ - first = FALSE; - return; - } - - if (!ismax(p,n)) - { - *abort = 1; - for (i = 0; i < n; ++i) lastreject[i] = p[i]; - lastrejok = TRUE; - } -} - -/**************************************************************************/ - -void -printam(FILE *f, int n, int ne, int *ix) -/* Write adjacency matrix formats */ -{ - int i,j; - - if (Aswitch) - { - fprintf(f,"%d ",n); - for (i = 0; i < n; ++i) - for (j = i; j < n; ++j) - fprintf(f," %d",(edgeno[i][j]>=0 ? ix[edgeno[i][j]]: 0)); - fprintf(f,"\n"); - } - else - { - if (Brows <= 0 || Brows > n) - { - fprintf(stderr,">E multig: impossible matrix size for output\n"); - exit(1); - } - fprintf(f,"%d %d",Brows,n-Brows); - - for (i = 0; i < Brows; ++i) - { - fprintf(f," "); - for (j = Brows; j < n; ++j) - fprintf(f," %d",(edgeno[i][j]>=0 ? ix[edgeno[i][j]]: 0)); - } - fprintf(f,"\n"); - } -} - -/**************************************************************************/ - -static void -trythisone(grouprec *group, - boolean lswitch, int *deg, int maxdeg, int ne, int n) -/* Try one solution, accept if minimal. */ -{ - int i,ne2; - boolean accept; - - nix = ne; - newgroupsize = 1; - - if (!group || groupsize == 1) - accept = TRUE; - else if (lastrejok && !ismax(lastreject,n)) - accept = FALSE; - else if (lastrejok && groupsize == 2) - accept = TRUE; - else - { - newgroupsize = 1; - first = TRUE; - - if (allgroup2(group,testmax) == 0) - accept = TRUE; - else - accept = FALSE; - } - - if (accept) - { -#ifdef GROUPTEST - if (groupsize % newgroupsize != 0) - gt_abort("group size error\n"); - totallab += groupsize/newgroupsize; -#endif - - ++mg_nout; - - if (outfile) - { - ne2 = ne; - if (lswitch) - for (i = 0; i < n; ++i) - if (deg[i] < maxdeg) - { - v0[ne2] = v1[ne2] = i; - ix[ne2] = (maxdeg-deg[i])/2; - ++ne2; - } -#ifdef OUTPROC - OUTPROC(outfile,n,ne2,newgroupsize,v0,v1,ix); -#else - if (Aswitch || Bswitch) - printam(outfile,n,ne2,ix); - else - { - fprintf(outfile,"%d %d",n,ne2); - if (Gswitch) fprintf(outfile," %lu",newgroupsize); - - for (i = 0; i < ne2; ++i) - fprintf(outfile," %d %d %d",v0[i],v1[i],ix[i]); - fprintf(outfile,"\n"); - } -#endif - } - return; - } - else - return; -} - -/**************************************************************************/ - -static void -scan(int level, int ne, long minedges, long maxedges, long sofar, - long maxmult, grouprec *group, int n) -/* Recursive scan for default case */ -{ - int left; - long min,max,k; - - if (level == ne) - { - trythisone(group,FALSE,NULL,0,ne,n); - return; - } - - left = ne - level - 1; - min = minedges - sofar - maxmult*left; - if (min < 1) min = 1; - max = maxedges - sofar - left; - if (max > maxmult) max = maxmult; - - for (k = min; k <= max; ++k) - { - ix[level] = k; - scan(level+1,ne,minedges,maxedges,sofar+k,maxmult,group,n); - } - - return; -} - -/**************************************************************************/ - -static void -scan_md(int level, int ne, long minedges, long maxedges, long sofar, - long maxmult, grouprec *group, int n, int *deg, int maxdeg) -/* Recursive scan, maxdeg version */ -{ - int left; - int min,max,k; - int x1,x2; - - if (level == ne) - { - trythisone(group,FALSE,deg,maxdeg,ne,n); - return; - } - - x1 = v0[level]; - x2 = v1[level]; - left = ne - level - 1; - min = minedges - sofar - maxmult*left; - if (min < 1) min = 1; - max = maxedges - sofar - left; - if (max > maxmult) max = maxmult; - if (deg[x1] + max - 1 > maxdeg) max = maxdeg - deg[x1] + 1; - if (deg[x2] + max - 1 > maxdeg) max = maxdeg - deg[x2] + 1; - - for (k = min; k <= max; ++k) - { - ix[level] = k; - deg[x1] += k-1; deg[x2] += k-1; - scan_md(level+1,ne,minedges,maxedges,sofar+k,maxmult,group, - n,deg,maxdeg); - deg[x1] -= k-1; deg[x2] -= k-1; - } - - return; -} - -/**************************************************************************/ - -static void -scan_lp(int level, int ne, long minedges, long maxedges, long sofar, - long maxmult, grouprec *group, int n, int *deg, int maxdeg) -/* Recursive scan, regular-with-loops version. */ -{ - int left; - long min,max,k; - int x1,x2; - boolean odd,even; - - if (level == ne) - { - trythisone(group,TRUE,deg,maxdeg,ne,n); - return; - } - - x1 = v0[level]; - x2 = v1[level]; - left = ne - level - 1; - min = minedges - sofar - maxmult*left; - if (min < 1) min = 1; - max = maxedges - sofar - left; - if (max > maxmult) max = maxmult; - if (deg[x1] + max - 1 > maxdeg) max = maxdeg - deg[x1] + 1; - if (deg[x2] + max - 1 > maxdeg) max = maxdeg - deg[x2] + 1; - - odd = even = FALSE; - if (lastlev[x1] == level) - { - if (((maxdeg-deg[x1])&1) == 1) even = TRUE; else odd = TRUE; - } - if (lastlev[x2] == level) - { - if (((maxdeg-deg[x2])&1) == 1) even = TRUE; else odd = TRUE; - } - if (even && odd) return; - - for (k = min; k <= max; ++k) - { - if (even && (k&1) == 1) continue; - if (odd && (k&1) == 0) continue; - - ix[level] = k; - deg[x1] += k-1; deg[x2] += k-1; - scan_lp(level+1,ne,minedges,maxedges,sofar+k,maxmult,group, - n,deg,maxdeg); - deg[x1] -= k-1; deg[x2] -= k-1; - } - - return; -} - -/**************************************************************************/ - -static void -scan_reg(int level, int ne, long minedges, long maxedges, long sofar, - long maxmult, grouprec *group, int n, int *delta, int *def, int maxdeg) -/* Recursive scan, regular version. */ -{ - int left; - long min,max,k; - int x1,x2; - - if (level == ne) - { - trythisone(group,FALSE,NULL,maxdeg,ne,n); - return; - } - - x1 = v0[level]; - x2 = v1[level]; - left = ne - level - 1; - min = minedges - sofar - maxmult*left; - if (min < 1) min = 1; - max = maxedges - sofar - left; - if (max > maxmult) max = maxmult; - if (max > def[x1] + 1) max = def[x1] + 1; - if (max > def[x2] + 1) max = def[x2] + 1; - - if (min < def[x2] + 1 - delta[x1]) min = def[x2] + 1 - delta[x1]; - if (min < def[x1] + 1 - delta[x2]) min = def[x1] + 1 - delta[x2]; - - if (lastlev[x1] == level && min < def[x1] + 1) min = def[x1] + 1; - if (lastlev[x2] == level && min < def[x2] + 1) min = def[x2] + 1; - - for (k = min; k <= max; ++k) - { - ix[level] = k; - delta[x1] += k-1 - def[x2]; - delta[x2] += k-1 - def[x1]; - def[x1] -= k-1; - def[x2] -= k-1; - scan_reg(level+1,ne,minedges,maxedges,sofar+k,maxmult,group, - n,delta,def,maxdeg); - def[x1] += k-1; - def[x2] += k-1; - delta[x1] -= k-1 - def[x2]; - delta[x2] -= k-1 - def[x1]; - } - - return; -} - -/**************************************************************************/ - -static void -multi(graph *g, int nfixed, long minedges, long maxedges, long maxmult, - int maxdeg, boolean lswitch, int m, int n) -{ - static DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - setword workspace[100]; - grouprec *group; - int ne; - int i,j,k,j0,j1,thisdeg,maxd,x0,x1; - set *gi; - int lab[MAXNV],ptn[MAXNV],orbits[MAXNV],deg[MAXNV]; - int delta[MAXNV],def[MAXNV]; - set active[(MAXNV+WORDSIZE-1)/WORDSIZE]; - boolean isreg; - -#ifdef PATHCOUNTS - ++count0; -#endif - - j0 = -1; /* last vertex with degree 0 */ - j1 = n; /* first vertex with degree > 0 */ - - ne = 0; - maxd = 0; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - thisdeg = 0; - for (j = 0; j < m; ++j) thisdeg += POPCOUNT(gi[j]); - deg[i] = thisdeg; - if (thisdeg > maxd) maxd = thisdeg; - if (thisdeg == 0) lab[++j0] = i; - else lab[--j1] = i; - ne += thisdeg; - } - ne /= 2; - - if (maxdeg >= 0 && maxd > maxdeg) return; - -#ifdef PATHCOUNTS - ++count1; -#endif - - if (Aswitch || Bswitch) - for (i = 0; i < n; ++i) - for (j = 0; j < n; ++j) - edgeno[i][j] = -1; - - if (ne == 0 && minedges <= 0 - && (!lswitch || (lswitch && (maxdeg&1) == 0))) - { - trythisone(NULL,lswitch,deg,maxdeg,0,n); - return; - } - -#ifdef PATHCOUNTS - ++count2; -#endif - - k = 0; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - for (j = i; (j = nextelement(gi,m,j)) >= 0; ) - { - v0[k] = i; - v1[k] = j; - edgeno[i][j] = edgeno[j][i] = k; - lastlev[i] = lastlev[j] = k; - ++k; - } - } - - isreg = !lswitch && (maxdeg >= 0 && 2*minedges == n*(long)maxdeg); - /* Case of regular multigraphs */ - - if (isreg) /* regular case */ - /* Condition: def(v) <= total def of neighbours */ - { - for (i = 0; i < n; ++i) - { - def[i] = maxdeg - deg[i]; - delta[i] = -def[i]; - } - - for (i = 0; i < k; ++i) - { - x0 = v0[i]; x1 = v1[i]; - delta[x0] += def[x1]; - delta[x1] += def[x0]; - } - - for (i = 0; i < n; ++i) if (delta[i] < 0) return; - } - - if ((isreg || lswitch) && (maxdeg & n & 1) == 1) return; - if (isreg && j0 >= 0 && maxdeg > 0) return; - if (lswitch && j0 >= 0 && (maxdeg&1) == 1) return; - -#ifdef PATHCOUNTS - ++count3; -#endif - - if (maxedges == NOLIMIT) - { - if (maxmult == NOLIMIT) maxedges = maxdeg*n/2; - else maxedges = ne*maxmult; - } - if (maxmult == NOLIMIT) maxmult = maxedges - ne + 1; - if (maxdeg >= 0 && maxmult > maxdeg) maxmult = maxdeg; - if (maxedges < ne || ne*maxmult < minedges) return; - -#ifdef PATHCOUNTS - ++count4; -#endif - - if (n > MAXNV || ne > MAXNE) - { - fprintf(stderr,">E multig: MAXNV or MAXNE exceeded\n"); - exit(1); - } - - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - for (i = 0; i < n; ++i) ptn[i] = 1; - ptn[n-1] = 0; - EMPTYSET(active,m); - if (j0 != n-1) ADDELEMENT(active,j0+1); - - for (i = 0; i <= j0; ++i) ptn[i] = 0; - - for (i = j0+1; i < n; ++i) - if (lab[i] < nfixed) break; - - if (i != j0+1 && i != n) - { - ptn[i-1] = 0; - ADDELEMENT(active,i); - } - - options.defaultptn = FALSE; - options.userautomproc = groupautomproc; - options.userlevelproc = grouplevelproc; - - nauty(g,lab,ptn,active,orbits,&options,&stats,workspace,100,m,n,NULL); - - if (stats.grpsize2 == 0) - groupsize = stats.grpsize1 + 0.1; - else - groupsize = 0; - - group = groupptr(FALSE); - makecosetreps(group); - - lastrejok = FALSE; - - if (isreg) - scan_reg(0,ne,minedges,maxedges,0,maxmult,group,n,delta,def,maxdeg); - else if (lswitch) - scan_lp(0,ne,minedges,maxedges,0,maxmult,group,n,deg,maxdeg); - else if (maxdeg >= 0) - scan_md(0,ne,minedges,maxedges,0,maxmult,group,n,deg,maxdeg); - else - scan(0,ne,minedges,maxedges,0,maxmult,group,n); -} - -/**************************************************************************/ - -int -main(int argc, char *argv[]) -{ - graph *g; - int m,n,codetype; - int argnum,j,nfixed,maxdeg,regdeg,ldeg; - char *arg,sw; - boolean badargs; - boolean fswitch,uswitch,eswitch,qswitch,mswitch,Dswitch; - boolean lswitch,rswitch; - long minedges,maxedges,maxmult; - double t; - char *infilename,*outfilename; - FILE *infile; - char msg[201]; - int msglen; - - HELP; - - nauty_check(WORDSIZE,1,1,NAUTYVERSIONID); - - rswitch = fswitch = Tswitch = Gswitch = FALSE; - uswitch = eswitch = mswitch = qswitch = FALSE; - lswitch = Aswitch = Bswitch = Dswitch = FALSE; - infilename = outfilename = NULL; - - argnum = 0; - badargs = FALSE; - for (j = 1; !badargs && j < argc; ++j) - { - arg = argv[j]; - if (arg[0] == '-' && arg[1] != '\0') - { - ++arg; - while (*arg != '\0') - { - sw = *arg++; - SWLONG('m',mswitch,maxmult,"multig -m") - else SWBOOLEAN('q',qswitch) - else SWBOOLEAN('u',uswitch) - else SWBOOLEAN('T',Tswitch) - else SWBOOLEAN('G',Gswitch) - else SWBOOLEAN('A',Aswitch) - else SWBOOLEAN('B',Bswitch) - else SWINT('f',fswitch,nfixed,"multig -f") - else SWINT('D',Dswitch,maxdeg,"multig -D") - else SWINT('r',rswitch,regdeg,"multig -r") - else SWINT('l',lswitch,ldeg,"multig -l") - else SWRANGE('e',":-",eswitch,minedges,maxedges,"multig -e") - else badargs = TRUE; - } - } - else - { - ++argnum; - if (argnum == 1) infilename = arg; - else if (argnum == 2) outfilename = arg; - else badargs = TRUE; - } - } - - if (badargs || argnum > 2) - { - fprintf(stderr,">E Usage: %s\n",USAGE); - GETHELP; - exit(1); - } - - if ((Gswitch!=0) + (Tswitch!=0) + (uswitch!=0) - + (Aswitch!=0) + (Bswitch!=0) >= 2) - gt_abort(">E multig: -G, -T, -A, -B and -u are incompatible\n"); - -#ifndef OUTPROC - if (!Tswitch && !Gswitch && !Aswitch && !Bswitch && !uswitch) - gt_abort(">E multig: must use -A, -B, -T, -G or -u\n"); -#endif - - if (rswitch && (Dswitch || eswitch)) - gt_abort(">E multig: -r is incompatible with -D and -e\n"); - - if (lswitch && (rswitch || Dswitch || eswitch)) - gt_abort(">E multig: -l is incompatible with -r, -D and -e\n"); - - if (!eswitch) - { - minedges = 0; - maxedges = NOLIMIT; - } - if (!mswitch) maxmult = NOLIMIT; - if (!fswitch) nfixed = 0; - - if (Bswitch && nfixed == 0) - gt_abort(">E multig: -B requires -f# with #>0\n"); - if (fswitch) Brows = nfixed; - - if (maxedges >= NOLIMIT && maxmult >= NOLIMIT - && !Dswitch && !rswitch && !lswitch) - gt_abort( - ">E multig: either -D or -e or -m or -r must impose a real limit\n"); - - if (!qswitch) - { - msg[0] = '\0'; - CATMSG0(">A multig"); - if (eswitch || mswitch || uswitch || (fswitch && nfixed > 0) - || lswitch || rswitch || Dswitch || Tswitch - || Gswitch || Aswitch || Bswitch) - CATMSG0(" -"); - if (mswitch) CATMSG1("m%ld",maxmult); - if (uswitch) CATMSG0("u"); - if (Tswitch) CATMSG0("T"); - if (Gswitch) CATMSG0("G"); - if (Aswitch) CATMSG0("A"); - if (Bswitch) CATMSG0("B"); - if (fswitch) CATMSG1("f%d",nfixed); - if (eswitch) CATMSG2("e%ld:%ld",minedges,maxedges); - if (Dswitch) CATMSG1("D%d",maxdeg); - if (rswitch) CATMSG1("r%d",regdeg); - if (lswitch) CATMSG1("l%d",ldeg); - msglen = strlen(msg); - if (argnum > 0) msglen += strlen(infilename); - if (argnum > 1) msglen += strlen(outfilename); - if (msglen >= 196) - { - fputs(msg,stderr); - if (argnum > 0) fprintf(stderr," %s",infilename); - if (argnum > 1) fprintf(stderr," %s",outfilename); - fprintf(stderr,"\n"); - } - else - { - if (argnum > 0) CATMSG1(" %s",infilename); - if (argnum > 1) CATMSG1(" %s",outfilename); - CATMSG0("\n"); - fputs(msg,stderr); - } - fflush(stderr); - } - - if (rswitch) - { - eswitch = Dswitch = TRUE; - maxdeg = regdeg; - } - - if (lswitch) - { - eswitch = Dswitch = TRUE; - maxdeg = ldeg; - } - - if (infilename && infilename[0] == '-') infilename = NULL; - infile = opengraphfile(infilename,&codetype,FALSE,1); - if (!infile) exit(1); - if (!infilename) infilename = "stdin"; - - if (uswitch) - outfile = NULL; - else - { - if (!outfilename || outfilename[0] == '-') - { - outfilename = "stdout"; - outfile = stdout; - } - else if ((outfile = fopen(outfilename,"w")) == NULL) - { - fprintf(stderr,"Can't open output file %s\n",outfilename); - gt_abort(NULL); - } - } - - mg_nin = mg_nout = 0; - - t = CPUTIME; - while (TRUE) - { - if ((g = readg(infile,NULL,0,&m,&n)) == NULL) break; - ++mg_nin; -#ifdef PATHCOUNTS - oldlo = mg_nout; -#endif - if (rswitch) - { - minedges = ((long)n * (long)regdeg + 1) / 2; - maxedges = ((long)n * (long)regdeg) / 2; - } - if (lswitch) - { - maxedges = ((long)n * (long)ldeg) / 2; - if ((ldeg & 1) == 1) minedges = (n + 1) / 2; - else minedges = 0; - } - - multi(g,nfixed,minedges,maxedges,maxmult, - (Dswitch?maxdeg:-1),lswitch,m,n); -#ifdef PATHCOUNTS - if (mg_nout != oldlo) ++count5; -#endif - if (!uswitch && ferror(outfile)) - gt_abort(">E multig output error\n"); - FREES(g); - } - t = CPUTIME - t; - -#ifdef SUMMARY - SUMMARY(); -#endif - - if (!qswitch) - { - fprintf(stderr,">Z "); - PRINT_COUNTER(stderr,mg_nin); - fprintf(stderr," graphs read from %s",infilename); - fprintf(stderr,"; "); - PRINT_COUNTER(stderr,mg_nout); - if (!uswitch) - fprintf(stderr," multigraphs written to %s",outfilename); - else - fprintf(stderr," multigraphs generated"); - fprintf(stderr,"; %.2f sec\n",t); - } - -#ifdef GROUPTEST - fprintf(stderr,"Group test = %lld\n",totallab); -#endif - -#ifdef PATHCOUNTS - fprintf(stderr,"Counts: %lld %lld %lld %lld %lld %lld\n", - count0,count1,count2,count3,count4,count5); -#endif - - exit(0); -} diff --git a/tools/nauty25r9_mac/naucompare.c b/tools/nauty25r9_mac/naucompare.c deleted file mode 100644 index 836c153..0000000 --- a/tools/nauty25r9_mac/naucompare.c +++ /dev/null @@ -1,264 +0,0 @@ -/* naucompare - quick and dirty text file comparitor to compare - * two dreadnaut outputs. - */ - -#include -#include -#include -#include - -#define MAXLINELEN 100000 -#define MAXDIFFS 5 - -static char line1[MAXLINELEN+1]; -static char line2[MAXLINELEN+1]; -static char line1mod[MAXLINELEN+100]; -static char line2mod[MAXLINELEN+100]; - -/* special[] contains formats for lines that might not compare exactly. - * See scanline() for the meaning of the format characters. - * These strings should have \n at the end. - */ - -static char* special[] = /* Make sure to use \n */ -{ - "Dreadnaut version %*f (%*d bits).\n", - "cpu time = %*f seconds\n", - "canupdates=%d; cpu time = %*f seconds\n", - "Mode=%s m=%*d n=%d labelorg=%d edges=%d options=(%s))\n", - "group time: %*f, %*f, %*f, group order time: %*f;%\n", - ">Z %d graphs generated in %*f sec\n", - ">Z %d graphs labelled from %s to %s in %*f sec.\n", - "%d graphs altogether; cpu=%*f sec\n", - "group time: %*f,%*f,%*f, order:%*f total:%*f " - "(Schreier fails: %d); exp_paths time:%*f; aut_check time:%*f\n" -}; -#define NUMSPECIALS (sizeof(special)/sizeof(*special)) - -/***********************************************************************/ - -static int -scanline(char *in, char *fmt, char *out) -/* Compare input string against format and return 1 if it matches or - * 0 if it doesn't match. In the case of matching, construct an output - * string with volatile fields replaced by "*" and some standardisation - * of the non-volatile fields. Format specifiers are: - - %d - matches an integer (maybe with sign) - %f - matches a real number of the form ddd.ddd (maybe with sign) - %sx - matches a string, where 'x' is any character. - If 'x' is not a space, match zero or more characters from the - current position up but not including the first 'x'. - If 'x' is a space, match one or more characters from the current - position up to and including the first non-space character - which is followed by a space. - %c - matches a non-white character - %% - matches the character '%' - % - (with a space following the '%') matches zero or more spaces or - tabs, as many as appear in the input. In the output, this - sequence appears as one space. - % - (appearing exactly at the end of the format) matches zero or - more spaces at the end of the line. In the output, nothing. - %*d, %*f, %*sx, %*c - these are similar to the versions - without the '*' except that the fields are volatile. - * The entire line must match. */ -{ - int doass,dots; - char ends,*outf,*s,*f; - - outf = out; - s = in; - f = fmt; - - while (*f != '\0') - { - if (*f == '%') - { - ++f; - if (*f == '*') - { - doass = 0; - ++f; - } - else - doass = 1; - - if (*f == '%') - { - if (*s++ != '%') return 0; - ++f; - *outf++ = '%'; - } - else if (*f == '\n') - { - while (*s != '\0') - { - if (*s != ' ' && *s != '\n') return 0; - ++s; - } - --s; - } - else if (*f == 'c') - { - if (*s == ' ' || *s == '\t' || *s == '\n') return 0; - if (doass) *outf++ = *s; - else *outf++ = '*'; - ++f; - ++s; - } - else if (*f == 's') - { - ends = *(f+1); - if (ends == ' ') - { - dots = 0; - while (*s == ' ' || *s == '\t') - { - if (doass && dots == 0) *outf++ = ' '; - ++s; - ++dots; - } - } - while (*s != '\n' && *s != ends) - { - if (doass) *outf++ = *s; - ++s; - } - if (!doass) *outf++ = '*'; - ++f; - } - else if (*f == 'd') - { - while (*s == ' ' || *s == '\t') ++s; - if (!isdigit(*s) && *s != '-' && *s != '+') return 0; - if (*s == '-' || *s == '+') - { - if (doass) *outf++ = *s; - ++s; - } - while (isdigit(*s)) - { - if (doass) *outf++ = *s; - ++s; - } - if (!doass) *outf++ = '*'; - ++f; - } - else if (*f == 'f') - { - while (*s == ' ' || *s == '\t') ++s; - if (!isdigit(*s) && *s != '.' && *s != '-' && *s != '+') - return 0; - if (*s == '-' || *s == '+') - { - if (doass) *outf++ = *s; - ++s; - } - dots = 0; - while (isdigit(*s) || (dots == 0 && *s == '.')) - { - if (*s == '.') ++dots; - if (doass) *outf++ = *s; - ++s; - } - if (!doass) *outf++ = '*'; - ++f; - } - else if (*f == ' ') - { - while (*s == ' ' || *s == '\t') ++s; - *outf++ = ' '; - ++f; - } - else - { - fprintf(stderr,"Bad format item %%%c\n",*f); - exit(1); - } - } - else - { - if (*s != *f) return 0; - *outf++ = *f; - ++s; - ++f; - } - } - - if (*s != '\0') return 0; - - *outf = '\0'; - - return 1; -} - -/***********************************************************************/ - -int -main(int argc, char *argv[]) -{ - int i,diffs,lineno; - char *l1,*l2; - FILE *f1,*f2; - - if (argc != 3) - { - fprintf(stderr,"Usage: naucompare file1 file2\n"); - exit(0); - } - - if (strcmp(argv[1],"-") == 0) - f1 = stdin; - else if ((f1 = fopen(argv[1],"r")) == NULL) - { - fprintf(stderr,">E naucompare can't open file 1\n"); - exit(1); - } - - if (strcmp(argv[2],"-") == 0) - f2 = stdin; - else if ((f2 = fopen(argv[2],"r")) == NULL) - { - fprintf(stderr,">E naucompare can't open file 2\n"); - exit(1); - } - - diffs = lineno = 0; - - for (;;) - { - l1 = fgets(line1,MAXLINELEN,f1); - l2 = fgets(line2,MAXLINELEN,f2); - - if (l1 == NULL || l2 == NULL) break; - - ++lineno; - if (strcmp(l1,l2) != 0) - { - for (i = 0; i < NUMSPECIALS; ++i) - if (scanline(l1,special[i],line1mod) - && scanline(l2,special[i],line2mod) - && strcmp(line1mod,line2mod) == 0) - break; - if (i == NUMSPECIALS) - { - if (diffs >= MAXDIFFS) - { - printf("----And more differences not reported.\n"); - break; - } - printf("----Difference on line %d:\n",lineno); - printf("%s%s",l1,l2); - ++diffs; - } - } - } - - if (l1 != NULL || l2 != NULL) ++diffs; - if (l1 != NULL && l2 == NULL) printf("File 1 is longer\n"); - if (l1 == NULL && l2 != NULL) printf("File 2 is longer\n"); - - if (diffs == 0) printf("OK\n"); - - exit(diffs != 0); -} diff --git a/tools/nauty25r9_mac/naugraph.c b/tools/nauty25r9_mac/naugraph.c deleted file mode 100644 index 3c9058e..0000000 --- a/tools/nauty25r9_mac/naugraph.c +++ /dev/null @@ -1,711 +0,0 @@ -/***************************************************************************** -* * -* Graph-specific auxiliary source file for version 2.5 of nauty. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 16-Nov-00 : initial creation out of nautil.c * -* 22-Apr-01 : added aproto line for Magma * -* EXTDEFS is no longer required * -* removed dynamic allocation from refine1() * -* 21-Nov-01 : use NAUTYREQUIRED in naugraph_check() * -* 23-Nov-06 : add targetcell(); make bestcell() local * -* 10-Dec-06 : remove BIGNAUTY * -* 10-Nov-09 : remove shortish and permutation types * -* 23-May-10 : add densenauty() * -* 15-Jan-12 : add TLS_ATTR attributes * -* * -*****************************************************************************/ - -#define ONE_WORD_SETS -#include "nauty.h" - - /* macros for hash-codes: */ -#define MASH(l,i) ((((l) ^ 065435) + (i)) & 077777) - /* : expression whose long value depends only on long l and int/long i. - Anything goes, preferably non-commutative. */ - -#define CLEANUP(l) ((int)((l) % 077777)) - /* : expression whose value depends on long l and is less than 077777 - when converted to int then short. Anything goes. */ - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -/* aproto: header new_nauty_protos.h */ - -dispatchvec dispatch_graph = - {isautom,testcanlab,updatecan,refine,refine1,cheapautom,targetcell, - naugraph_freedyn,naugraph_check,NULL,NULL}; - -#if !MAXN -DYNALLSTAT(set,workset,workset_sz); -DYNALLSTAT(int,workperm,workperm_sz); -DYNALLSTAT(int,bucket,bucket_sz); -DYNALLSTAT(set,dnwork,dnwork_sz); -#else -static TLS_ATTR set workset[MAXM]; /* used for scratch work */ -static TLS_ATTR int workperm[MAXN]; -static TLS_ATTR int bucket[MAXN+2]; -static TLS_ATTR set dnwork[40*MAXM]; -#endif - -/***************************************************************************** -* * -* isautom(g,perm,digraph,m,n) = TRUE iff perm is an automorphism of g * -* (i.e., g^perm = g). Symmetry is assumed unless digraph = TRUE. * -* * -*****************************************************************************/ - -boolean -isautom(graph *g, int *perm, boolean digraph, int m, int n) -{ - set *pg; - int pos; - set *pgp; - int posp,i; - - for (pg = g, i = 0; i < n; pg += M, ++i) - { - pgp = GRAPHROW(g,perm[i],M); - pos = (digraph ? -1 : i); - - while ((pos = nextelement(pg,M,pos)) >= 0) - { - posp = perm[pos]; - if (!ISELEMENT(pgp,posp)) return FALSE; - } - } - return TRUE; -} - -/***************************************************************************** -* * -* testcanlab(g,canong,lab,samerows,m,n) compares g^lab to canong, * -* using an ordering which is immaterial since it's only used here. The * -* value returned is -1,0,1 if g^lab <,=,> canong. *samerows is set to * -* the number of rows (0..n) of canong which are the same as those of g^lab. * -* * -* GLOBALS ACCESSED: workset,permset(),workperm * -* * -*****************************************************************************/ - -int -testcanlab(graph *g, graph *canong, int *lab, int *samerows, int m, int n) -{ - int i,j; - set *ph; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"testcanlab"); - DYNALLOC1(set,workset,workset_sz,m,"testcanlab"); -#endif - - for (i = 0; i < n; ++i) workperm[lab[i]] = i; - - for (i = 0, ph = canong; i < n; ++i, ph += M) - { - permset(GRAPHROW(g,lab[i],M),workset,M,workperm); - for (j = 0; j < M; ++j) - if (workset[j] < ph[j]) - { - *samerows = i; - return -1; - } - else if (workset[j] > ph[j]) - { - *samerows = i; - return 1; - } - } - - *samerows = n; - return 0; -} - -/***************************************************************************** -* * -* updatecan(g,canong,lab,samerows,m,n) sets canong = g^lab, assuming * -* the first samerows of canong are ok already. * -* * -* GLOBALS ACCESSED: permset(),workperm * -* * -*****************************************************************************/ - -void -updatecan(graph *g, graph *canong, int *lab, int samerows, int m, int n) -{ - int i; - set *ph; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"updatecan"); -#endif - - for (i = 0; i < n; ++i) workperm[lab[i]] = i; - - for (i = samerows, ph = GRAPHROW(canong,samerows,M); - i < n; ++i, ph += M) - permset(GRAPHROW(g,lab[i],M),ph,M,workperm); -} - -/***************************************************************************** -* * -* refine(g,lab,ptn,level,numcells,count,active,code,m,n) performs a * -* refinement operation on the partition at the specified level of the * -* partition nest (lab,ptn). *numcells is assumed to contain the number of * -* cells on input, and is updated. The initial set of active cells (alpha * -* in the paper) is specified in the set active. Precisely, x is in active * -* iff the cell starting at index x in lab is active. * -* The resulting partition is equitable if active is correct (see the paper * -* and the Guide). * -* *code is set to a value which depends on the fine detail of the * -* algorithm, but which is independent of the labelling of the graph. * -* count is used for work space. * -* * -* GLOBALS ACCESSED: workset,bit,nextelement(),bucket,workperm * -* * -*****************************************************************************/ - -void -refine(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, int *code, int m, int n) -{ - -#if MAXM==1 - refine1(g,lab,ptn,level,numcells,count,active,code,m,n); -} -#else - - int i,c1,c2,labc1; - setword x; - set *set1,*set2; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - long longcode; - set *gptr; - int maxcell,maxpos,hint; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"refine"); - DYNALLOC1(set,workset,workset_sz,m,"refine"); - DYNALLOC1(int,bucket,bucket_sz,n+2,"refine"); -#endif - - longcode = *numcells; - split1 = -1; - hint = 0; - while (*numcells < n && ((split1 = hint, ISELEMENT(active,split1)) - || (split1 = nextelement(active,M,split1)) >= 0 - || (split1 = nextelement(active,M,-1)) >= 0)) - { - DELELEMENT(active,split1); - for (split2 = split1; ptn[split2] > level; ++split2) {} - longcode = MASH(longcode,split1+split2); - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],M); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = level; - longcode = MASH(longcode,c2); - ++*numcells; - if (ISELEMENT(active,cell1) || c2-cell1 >= cell2-c1) - { - ADDELEMENT(active,c1); - if (c1 == cell2) hint = c1; - } - else - { - ADDELEMENT(active,cell1); - if (c2 == cell1) hint = cell1; - } - } - } - } - - else /* nontrivial splitting cell */ - { - EMPTYSET(workset,m); - for (i = split1; i <= split2; ++i) - ADDELEMENT(workset,lab[i]); - longcode = MASH(longcode,split2-split1+1); - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - set1 = workset; - set2 = GRAPHROW(g,lab[i],m); - cnt = 0; - for (c1 = m; --c1 >= 0;) - if ((x = (*set1++) & (*set2++)) != 0) - cnt += POPCOUNT(x); - - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - set1 = workset; - set2 = GRAPHROW(g,lab[i],m); - cnt = 0; - for (c1 = m; --c1 >= 0;) - if ((x = (*set1++) & (*set2++)) != 0) - cnt += POPCOUNT(x); - - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) - { - longcode = MASH(longcode,bmin+cell1); - continue; - } - c1 = cell1; - maxcell = -1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - longcode = MASH(longcode,i+c1); - if (c2-c1 > maxcell) - { - maxcell = c2-c1; - maxpos = c1; - } - if (c1 != cell1) - { - ADDELEMENT(active,c1); - if (c2-c1 == 1) hint = c1; - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = level; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) lab[i] = workperm[i]; - if (!ISELEMENT(active,cell1)) - { - ADDELEMENT(active,cell1); - DELELEMENT(active,maxpos); - } - } - } - } - - longcode = MASH(longcode,*numcells); - *code = CLEANUP(longcode); -} -#endif /* else case of MAXM==1 */ - -/***************************************************************************** -* * -* refine1(g,lab,ptn,level,numcells,count,active,code,m,n) is the same as * -* refine(g,lab,ptn,level,numcells,count,active,code,m,n), except that * -* m==1 is assumed for greater efficiency. The results are identical in all * -* respects. See refine (above) for the specs. * -* * -*****************************************************************************/ - -void -refine1(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, int *code, int m, int n) -{ - int i,c1,c2,labc1; - setword x; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - long longcode; - set *gptr,workset0; - int maxcell,maxpos,hint; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"refine1"); - DYNALLOC1(int,bucket,bucket_sz,n+2,"refine1"); -#endif - - longcode = *numcells; - split1 = -1; - - hint = 0; - while (*numcells < n && ((split1 = hint, ISELEMENT1(active,split1)) - || (split1 = nextelement(active,1,split1)) >= 0 - || (split1 = nextelement(active,1,-1)) >= 0)) - { - DELELEMENT1(active,split1); - for (split2 = split1; ptn[split2] > level; ++split2) {} - longcode = MASH(longcode,split1+split2); - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],1); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT1(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = level; - longcode = MASH(longcode,c2); - ++*numcells; - if (ISELEMENT1(active,cell1) || c2-cell1 >= cell2-c1) - { - ADDELEMENT1(active,c1); - if (c1 == cell2) hint = c1; - } - else - { - ADDELEMENT1(active,cell1); - if (c2 == cell1) hint = cell1; - } - } - } - } - - else /* nontrivial splitting cell */ - { - workset0 = 0; - for (i = split1; i <= split2; ++i) - ADDELEMENT1(&workset0,lab[i]); - longcode = MASH(longcode,split2-split1+1); - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - if ((x = workset0 & g[lab[i]]) != 0) - cnt = POPCOUNT(x); - else - cnt = 0; - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - if ((x = workset0 & g[lab[i]]) != 0) - cnt = POPCOUNT(x); - else - cnt = 0; - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) - { - longcode = MASH(longcode,bmin+cell1); - continue; - } - c1 = cell1; - maxcell = -1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - longcode = MASH(longcode,i+c1); - if (c2-c1 > maxcell) - { - maxcell = c2-c1; - maxpos = c1; - } - if (c1 != cell1) - { - ADDELEMENT1(active,c1); - if (c2-c1 == 1) hint = c1; - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = level; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) lab[i] = workperm[i]; - if (!ISELEMENT1(active,cell1)) - { - ADDELEMENT1(active,cell1); - DELELEMENT1(active,maxpos); - } - } - } - } - - longcode = MASH(longcode,*numcells); - *code = CLEANUP(longcode); -} - -/***************************************************************************** -* * -* cheapautom(ptn,level,digraph,n) returns TRUE if the partition at the * -* specified level in the partition nest (lab,ptn) {lab is not needed here} * -* satisfies a simple sufficient condition for its cells to be the orbits of * -* some subgroup of the automorphism group. Otherwise it returns FALSE. * -* It always returns FALSE if digraph!=FALSE. * -* * -* nauty assumes that this function will always return TRUE for any * -* partition finer than one for which it returns TRUE. * -* * -*****************************************************************************/ - -boolean -cheapautom(int *ptn, int level, boolean digraph, int n) -{ - int i,k,nnt; - - if (digraph) return FALSE; - - k = n; - nnt = 0; - for (i = 0; i < n; ++i) - { - --k; - if (ptn[i] > level) - { - ++nnt; - while (ptn[++i] > level) {} - } - } - - return (k <= nnt + 1 || k <= 4); -} - -/***************************************************************************** -* * -* bestcell(g,lab,ptn,level,tc_level,m,n) returns the index in lab of the * -* start of the "best non-singleton cell" for fixing. If there is no * -* non-singleton cell it returns n. * -* This implementation finds the first cell which is non-trivially joined * -* to the greatest number of other cells. * -* * -* GLOBALS ACCESSED: bit,workperm,workset,bucket * -* * -*****************************************************************************/ - -static int -bestcell(graph *g, int *lab, int *ptn, int level, int tc_level, int m, int n) -{ - int i; - set *gp; - setword setword1,setword2; - int v1,v2,nnt; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"bestcell"); - DYNALLOC1(set,workset,workset_sz,m,"bestcell"); - DYNALLOC1(int,bucket,bucket_sz,n+2,"bestcell"); -#endif - - /* find non-singleton cells: put starts in workperm[0..nnt-1] */ - - i = nnt = 0; - - while (i < n) - { - if (ptn[i] > level) - { - workperm[nnt++] = i; - while (ptn[i] > level) ++i; - } - ++i; - } - - if (nnt == 0) return n; - - /* set bucket[i] to # non-trivial neighbours of n.s. cell i */ - - for (i = nnt; --i >= 0;) bucket[i] = 0; - - for (v2 = 1; v2 < nnt; ++v2) - { - EMPTYSET(workset,m); - i = workperm[v2] - 1; - do - { - ++i; - ADDELEMENT(workset,lab[i]); - } - while (ptn[i] > level); - for (v1 = 0; v1 < v2; ++v1) - { - gp = GRAPHROW(g,lab[workperm[v1]],m); -#if MAXM==1 - setword1 = *workset & *gp; - setword2 = *workset & ~*gp; -#else - setword1 = setword2 = 0; - for (i = m; --i >= 0;) - { - setword1 |= workset[i] & gp[i]; - setword2 |= workset[i] & ~gp[i]; - } -#endif - if (setword1 != 0 && setword2 != 0) - { - ++bucket[v1]; - ++bucket[v2]; - } - } - } - - /* find first greatest bucket value */ - - v1 = 0; - v2 = bucket[0]; - for (i = 1; i < nnt; ++i) - if (bucket[i] > v2) - { - v1 = i; - v2 = bucket[i]; - } - - return (int)workperm[v1]; -} - -/***************************************************************************** -* * -* targetcell(g,lab,ptn,level,tc_level,digraph,hint,m,n) returns the index * -* in lab of the next cell to split. * -* hint is a suggestion for the answer, which is obeyed if it is valid. * -* Otherwise we use bestcell() up to tc_level and the first non-trivial * -* cell after that. * -* * -*****************************************************************************/ - -int -targetcell(graph *g, int *lab, int *ptn, int level, int tc_level, - boolean digraph, int hint, int m, int n) -{ - int i; - - if (hint >= 0 && ptn[hint] > level && - (hint == 0 || ptn[hint-1] <= level)) - return hint; - else if (level <= tc_level) - return bestcell(g,lab,ptn,level,tc_level,m,n); - else - { - for (i = 0; i < n && ptn[i] <= level; ++i) {} - return (i == n ? 0 : i); - } -} - -/***************************************************************************** -* * -* densenauty(g,lab,ptn,orbits,&options,&stats,m,n,h) * -* is a slightly simplified interface to nauty(). It allocates enough * -* workspace for 20 automorphisms and checks that the densegraph dispatch * -* vector is in use. * -* * -*****************************************************************************/ - -void -densenauty(graph *g, int *lab, int *ptn, int *orbits, - optionblk *options, statsblk *stats, int m, int n, graph *h) -{ - if (options->dispatch != &dispatch_graph) - { - fprintf(ERRFILE,"Error: densenauty() needs standard options block\n"); - exit(1); - } - -#if !MAXN - DYNALLOC1(set,dnwork,dnwork_sz,2*60*m,"densenauty malloc"); -#endif - - nauty(g,lab,ptn,NULL,orbits,options,stats,dnwork,2*60*m,m,n,h); -} - -/***************************************************************************** -* * -* naugraph_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -naugraph_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in naugraph.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in naugraph.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in naugraph.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: naugraph.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* naugraph_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -naugraph_freedyn(void) -{ -#if !MAXN - DYNFREE(workset,workset_sz); - DYNFREE(workperm,workperm_sz); - DYNFREE(bucket,bucket_sz); - DYNFREE(dnwork,dnwork_sz); -#endif -} diff --git a/tools/nauty25r9_mac/naugraph.o b/tools/nauty25r9_mac/naugraph.o deleted file mode 100644 index ccc5973887cfb139b20c20f18e9babb1399c370d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16500 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 Dkd~>9 diff --git a/tools/nauty25r9_mac/naugraphW1.o b/tools/nauty25r9_mac/naugraphW1.o deleted file mode 100644 index 9b1c864bfa68363493f0b82bbf2e70f3d4be474f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9388 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 MLpAa7aHvc8AASTb3;+NC diff --git a/tools/nauty25r9_mac/naugroup.c b/tools/nauty25r9_mac/naugroup.c deleted file mode 100644 index daf40d0..0000000 --- a/tools/nauty25r9_mac/naugroup.c +++ /dev/null @@ -1,457 +0,0 @@ -/* naugroup.c - -Procedures for handling groups found by nauty. -*/ - -#include "naugroup.h" - -static permrec *freelist = NULL; -static int freelist_n = 0; - -static grouprec *group = NULL; -static int group_depth = 0; -DYNALLSTAT(cosetrec,coset,coset_sz); -static permrec *gens; -DYNALLSTAT(set,workset,workset_sz); -DYNALLSTAT(int,allp,allp_sz); -DYNALLSTAT(int,id,id_sz); - -/**************************************************************************/ - -permrec -*newpermrec(int n) -/* Get a permrec of order n. This procedure and the next one are -designed to be efficient if lots of group ops are done with the -same value of n. */ -{ - permrec *p; - - if (freelist_n != n) - { - while (freelist != NULL) - { - p = freelist; - freelist = freelist->ptr; - free(p); - } - freelist_n = n; - } - - if (freelist != NULL) - { - p = freelist; - freelist = freelist->ptr; - return p; - } - - p = (permrec*) malloc(sizeof(permrec)+(freelist_n-2)*sizeof(int)); - - if (p == NULL) - { - fprintf(ERRFILE,">E malloc failed in newpermrec()\n"); - exit(1); - } - - return p; -} - -/**************************************************************************/ - -void -freepermrec(permrec *p, int n) -/* Free a permrec of given size. */ -{ - permrec *q; - - if (p == NULL) return; - - if (freelist_n != n) - { - while (freelist) - { - q = freelist; - freelist = freelist->ptr; - free(q); - } - freelist_n = n; - } - - p->ptr = freelist; - freelist = p; -} - -/**************************************************************************/ - -grouprec * -groupptr(boolean cutloose) -/* Give the address of the group structure, cutting it loose - if requested. */ -{ - grouprec *p; - - p = group; - - if (cutloose) - { - group = NULL; - group_depth = 0; - coset = NULL; - coset_sz = 0; - } - - return p; -} - -/**************************************************************************/ - -void -freegroup(grouprec *grp) -/* Free (or pretend to free) group structure. */ -{ - int i,j; - cosetrec *p; - permrec *q,*qq; - - for (i = 0; i < grp->depth; ++i) - { - p = grp->levelinfo[i].replist; - if (p != NULL) - for (j = grp->levelinfo[i].orbitsize; --j >= 0; ) - { - freepermrec(p[j].rep,grp->n); - p[j].rep = NULL; - } - } - - if (grp->depth > 0) - { - p = grp->levelinfo[0].replist; - if (p != NULL && p != coset) - { - free(p); - grp->levelinfo[0].replist = NULL; - } - - q = grp->levelinfo[0].gens; - while (q != NULL) - { - qq = q; - q = q->ptr; - freepermrec(qq,grp->n); - } - grp->levelinfo[0].gens = NULL; - } -} - -/**************************************************************************/ - -void -groupautomproc(int count, int *perm, int *orbits, - int numorbits, int stabvertex, int n) -{ - permrec *p; - int i; - - p = newpermrec(n); - for (i = 0; i < n; ++i) p->p[i] = perm[i]; - p->ptr = gens; - gens = p; -} - -/**************************************************************************/ - -void -grouplevelproc(int *lab, int *ptn, int level, int *orbits, statsblk *stats, - int tv, int index, int tcellsize, int numcells, int cc, int n) -{ - int depth; - size_t sz; - - if (numcells == n) /* first call */ - { - depth = level - 1; - - if (group) freegroup(group); - - if (depth > group_depth || !group) - { - if (depth <= 1) sz = sizeof(grouprec); - else sz = sizeof(grouprec) + (depth-1)*sizeof(levelrec); - if (group) group = (grouprec*)realloc((void*)group,sz); - else group = (grouprec*)malloc(sz); - if (group == NULL) - { - fprintf(ERRFILE,">E malloc failed in grouplevelproc\n"); - exit(1); - } - group_depth = depth; - } - - group->n = n; - group->depth = depth; - gens = NULL; - return; - } - - group->levelinfo[level-1].fixedpt = tv; - group->levelinfo[level-1].orbitsize = index; - group->levelinfo[level-1].gens = gens; - group->levelinfo[level-1].replist = NULL; - - if (level == 1) group->numorbits = stats->numorbits; -} - -/**************************************************************************/ - -void -makecosetreps(grouprec *grp) -/* Make all coset representatives for this group */ -{ - int i,j,k,n,depth; - int l,index; - int *p,*q; - permrec *gen,*g; - cosetrec *cr; - int head,tail; - DYNALLSTAT(int,queue,queue_sz); - DYNALLSTAT(int,lab,lab_sz); - - n = grp->n; - depth = grp->depth; - - DYNALLOC1(int,queue,queue_sz,n,"malloc"); - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - - j = 0; - for (i = 0; i < depth; ++i) - j += grp->levelinfo[i].orbitsize; - - if (j > 0) DYNALLOC1(cosetrec,coset,coset_sz,j,"malloc"); - - cr = coset; - for (i = 0; i < depth; ++i) - { - grp->levelinfo[i].replist = cr; - cr += grp->levelinfo[i].orbitsize; - } - - for (i = 0; i < depth; ++i) - { - cr = grp->levelinfo[i].replist; - gen = grp->levelinfo[i].gens; - for (j = 0; j < n; ++j) lab[j] = -1; - queue[0] = grp->levelinfo[i].fixedpt; - lab[queue[0]] = 0; - cr[0].image = queue[0]; - cr[0].rep = NULL; - head = 0; - tail = 1; - index = 0; - while (head < tail) - { - j = queue[head++]; - p = (cr[lab[j]].rep ? cr[lab[j]].rep->p : NULL); - for (g = gen; g != NULL; g = g->ptr) - { - k = g->p[j]; - if (lab[k] < 0) - { - ++index; - lab[k] = index; - queue[tail++] = k; - cr[index].image = k; - cr[index].rep = newpermrec(n); - q = cr[index].rep->p; - if (p == NULL) - for (l = 0; l < n; ++l) q[l] = g->p[l]; - else - for (l = 0; l < n; ++l) q[l] = g->p[p[l]]; - } - } - } - } -} - -/**************************************************************************/ - -int -permcycles(int *p, int n, int *len, boolean sort) -/* Puts in len[0..] the cycle lengths of p. If sort, sort them. - Return the number of cycles. */ -{ - int m,i,j,k,h,nc,leni; - - m = (n + WORDSIZE - 1) / WORDSIZE; - DYNALLOC1(set,workset,workset_sz,m,"malloc"); - - EMPTYSET(workset,m); - - nc = 0; - for (i = 0; i < n; ++i) - if (!ISELEMENT(workset,i)) - { - k = 1; - for (j = p[i]; j != i; j = p[j]) - { - ADDELEMENT(workset,j); - ++k; - } - len[nc++] = k; - } - - if (sort && nc > 1) - { - j = nc / 3; - h = 1; - do - h = 3 * h + 1; - while (h < j); - - do - { - for (i = h; i < nc; ++i) - { - leni = len[i]; - for (j = i; len[j-h] > leni; ) - { - len[j] = len[j-h]; - if ((j -= h) < h) break; - } - len[j] = leni; - } - h /= 3; - } - while (h > 0); - } - - return nc; -} - -/**************************************************************************/ - -static void -groupelts(levelrec *lr, int n, int level, void (*action)(int*,int), - int *before, int *after, int *id) -/* Recursive routine used by allgroup. */ -{ - int i,j,orbsize; - int *p,*cr; - cosetrec *coset; - - coset = lr[level].replist; - orbsize = lr[level].orbitsize; - - for (j = 0; j < orbsize; ++j) - { - cr = (coset[j].rep == NULL ? NULL : coset[j].rep->p); - if (before == NULL) - p = cr; - else if (cr == NULL) - p = before; - else - { - p = after; - for (i = 0; i < n; ++i) p[i] = cr[before[i]]; - } - - if (level == 0) - (*action)((p == NULL ? id : p),n); - else - groupelts(lr,n,level-1,action,p,after+n,id); - } -} - -/**************************************************************************/ - -void -allgroup(grouprec *grp, void (*action)(int*,int)) -/* Call action(p,n) for every element of the group, including the identity. - The identity is always the first call. */ -{ - int i,depth,n; - - depth = grp->depth; - n = grp->n; - - DYNALLOC1(int,id,id_sz,n,"malloc"); - for (i = 0; i < n; ++i) id[i] = i; - - if (depth == 0) - { - (*action)(id,n); - return; - } - - DYNALLOC1(int,allp,allp_sz,n*depth,"malloc"); - - groupelts(grp->levelinfo,n,depth-1,action,NULL,allp,id); -} - -/**************************************************************************/ - -static void -groupelts2(levelrec *lr, int n, int level, - void (*action)(int*,int,int*), int *before, - int *after, int *id, int *abort) -/* Recursive routine used by allgroup2. */ -{ - int i,j,orbsize; - int *p,*cr; - cosetrec *coset; - - coset = lr[level].replist; - orbsize = lr[level].orbitsize; - - for (j = 0; j < orbsize; ++j) - { - cr = (coset[j].rep == NULL ? NULL : coset[j].rep->p); - if (before == NULL) - p = cr; - else if (cr == NULL) - p = before; - else - { - p = after; - for (i = 0; i < n; ++i) p[i] = cr[before[i]]; - } - - if (level == 0) - (*action)((p == NULL ? id : p),n,abort); - else - groupelts2(lr,n,level-1,action,p,after+n,id,abort); - if (*abort) return; - } -} - -/**************************************************************************/ - -int -allgroup2(grouprec *grp, void (*action)(int*,int,int*)) -/* Call action(p,n,&abort) for every element of the group, including - the identity. The identity is always the first call. - If action() stores a non-zero value in abort, group generation is - aborted and the abort value is returned by this procedure. If no - non-zero value is ever returned in abort by action(), this - procedure returns 0. */ -{ - int i,depth,n,abort; - - depth = grp->depth; - n = grp->n; - - DYNALLOC1(int,id,id_sz,n,"malloc"); - for (i = 0; i < n; ++i) id[i] = i; - - abort = 0; - if (depth == 0) - { - (*action)(id,n,&abort); - return abort; - } - - DYNALLOC1(int,allp,allp_sz,n*depth,"malloc"); - - groupelts2(grp->levelinfo,n,depth-1,action,NULL,allp,id,&abort); - - return abort; -} diff --git a/tools/nauty25r9_mac/naugroup.h b/tools/nauty25r9_mac/naugroup.h deleted file mode 100644 index 7b131cf..0000000 --- a/tools/nauty25r9_mac/naugroup.h +++ /dev/null @@ -1,53 +0,0 @@ -/* naugroup.h - -Procedures for handling groups found by nauty. -*/ - -#include "nauty.h" - -typedef struct perm_struct -{ - struct perm_struct *ptr; /* general-purpose pointer */ - int p[2]; /* extendable section */ -} permrec; - -typedef struct coset_struct -{ - int image; /* image of fixed point */ - permrec *rep; /* pointer to a representative */ -} cosetrec; - -typedef struct level_struct -{ - int fixedpt; /* point that is fixed in this level */ - int orbitsize; /* the size of the orbit containing fixedpt */ - permrec *gens; /* pointer to list of generators */ - cosetrec *replist; /* array of orbitsize representatives */ -} levelrec; - -typedef struct group_struct -{ - int n; /* number of points */ - int numorbits; /* number of orbits */ - int depth; /* number of points in base */ - levelrec levelinfo[1]; /* extendable section */ -} grouprec; - -#ifdef __cplusplus -extern "C" { -#endif - -extern void freepermrec(permrec*, int); -extern grouprec *groupptr(boolean); -extern permrec *newpermrec(int); -extern void groupautomproc(int,int*,int*,int,int,int); -extern void - grouplevelproc(int*,int*,int,int*,statsblk*,int,int,int,int,int,int); -extern void makecosetreps(grouprec*); -extern int permcycles(int*,int,int*,boolean); -extern void allgroup(grouprec*,void(*)(int*,int)); -extern int allgroup2(grouprec*,void(*)(int*,int,int*)); - -#ifdef __cplusplus -} -#endif diff --git a/tools/nauty25r9_mac/naugroup.o b/tools/nauty25r9_mac/naugroup.o deleted file mode 100644 index 5b16c4e33e8ea08e6faa9ae0ad543af773a8af02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11632 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 Z#6;8x0>i}oi;+gFVwi!U;!G^1^512&Wn};W diff --git a/tools/nauty25r9_mac/naurng.c b/tools/nauty25r9_mac/naurng.c deleted file mode 100644 index 5853de2..0000000 --- a/tools/nauty25r9_mac/naurng.c +++ /dev/null @@ -1,133 +0,0 @@ -/* naurng.c - * This is thread-safe version of rng.c if thread-local support - * is available. - * - This file contains the code for a high-quality random number - generator written by Don Knuth. The auxilliary routine - ran_arr_cycle() has been modified slightly, and ran_init() is new. - - To use it: - - 0. #include "naurng.h" (or "naututil.h" if you are using nauty) - - 1. Call ran_init(seed), where seed is any long integer. - This step is optional, but if you don't use it you - will always get the same sequence of random numbers. - - 2. For each random number, use the NEXTRAN macro. It will - give a random value in the range 0..2^30-1. Alternatively, - KRAN(k) will have a random value in the range 0..k-1. - KRAN(k) actually gives you NEXTRAN mod k, so it is not - totally uniform if k is very large. In that case, you - can use the slightly slower GETKRAN(k,var) to set the - variable var to a better random number from 0..k-1. - - Brendan McKay, July 2002. Fixed Nov 2002 on advice of DEK. - -*/ - -/* This program by D E Knuth is in the public domain and freely copyable - * AS LONG AS YOU MAKE ABSOLUTELY NO CHANGES! - * It is explained in Seminumerical Algorithms, 3rd edition, Section 3.6 - * (or in the errata to the 2nd edition --- see - * http://www-cs-faculty.stanford.edu/~knuth/taocp.html - * in the changes to Volume 2 on pages 171 and following). */ - -/* N.B. The MODIFICATIONS introduced in the 9th printing (2002) are - included here; there's no backwards compatibility with the original. */ - -/* If you find any bugs, please report them immediately to - * taocp@cs.stanford.edu - * (and you will be rewarded if the bug is genuine). Thanks! */ - -/************ see the book for explanations and caveats! *******************/ -/************ in particular, you need two's complement arithmetic **********/ - -#include "naurng.h" - -#define KK 100 /* the long lag */ -#define LL 37 /* the short lag */ -#define MM (1L<<30) /* the modulus */ -#define mod_diff(x,y) (((x)-(y))&(MM-1)) /* subtraction mod MM */ - -static TLS_ATTR long ran_x[KK]; /* the generator state */ - -static void -ran_array(long aa[],int n) -{ - int i,j; - for (j=0;j=MM) ss-=MM-2; /* cyclic shift 29 bits */ - } - x[1]++; /* make x[1] (and only x[1]) odd */ - for (ss=seed&(MM-1),t=TT-1; t; ) { - for (j=KK-1;j>0;j--) x[j+j]=x[j], x[j+j-1]=0; /* "square" */ - for (j=KK+KK-2;j>=KK;j--) - x[j-(KK-LL)]=mod_diff(x[j-(KK-LL)],x[j]), - x[j-KK]=mod_diff(x[j-KK],x[j]); - if (is_odd(ss)) { /* "multiply by z" */ - for (j=KK;j>0;j--) x[j]=x[j-1]; - x[0]=x[KK]; /* shift the buffer cyclically */ - x[LL]=mod_diff(x[LL],x[KK]); - } - if (ss) ss>>=1; else t--; - } - for (j=0;j=0 ? *ran_arr_ptr++ : ran_arr_cycle()); -} diff --git a/tools/nauty25r9_mac/naurng.h b/tools/nauty25r9_mac/naurng.h deleted file mode 100644 index fa4b17e..0000000 --- a/tools/nauty25r9_mac/naurng.h +++ /dev/null @@ -1,40 +0,0 @@ -/* naurng.h : definitions for using Don Knuth's random number generator. - This version uses the attribute TLS_ATTR from nauty.h. - - To use it: - 1. Call ran_init(seed) with any long seed. (Optional, - but you will always get the same sequence otherwise.) - 2. Use NEXTRAN to get the next number (0..2^30-1). - Alternatively, use KRAN(k) to get a random number 0..k-1. - For large k, KRAN(k) is not quite uniform. In that case - use GETKRAN(k,var) to set the variable var to a better - random number 0..k-1. -*/ - -#ifndef NAURNG_H -#include "nauty.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void ran_init(long seed); -long ran_nextran(void); - -#ifdef __cplusplus -} -#endif - -#define MAXRAN (0x3fffffffL) /* Values are 0..MAXRAN */ -#define NEXTRAN (ran_nextran()) -#define KRAN(k) (NEXTRAN%(k)) -#define RANREAL ((NEXTRAN+0.5)/(MAXRAN+1.0)) /* Uniform (0,1) */ - -#define MAXSAFE(k) (((MAXRAN+1)/(k))*(k)) -#define GETKRAN(k,var) {long __getkran; \ - do {__getkran = NEXTRAN;} while (__getkran >= MAXSAFE(k)); \ - var = __getkran % (k);} -#define INITRANBYTIME ran_init((long)time(NULL)) - -#define NAURNG_H -#endif diff --git a/tools/nauty25r9_mac/naurng.o b/tools/nauty25r9_mac/naurng.o deleted file mode 100644 index b1ababbf43f6879a6c9f97ace1d0a2b591d55565..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2788 zcma)8T}%{L6u#gt0#XJONod0sY@n4;TY0dtF-EpRa!poiD^(MJ#uau85s<7qDfNZj z>~6zkb}SFr_|lZVG`=+Pp{6T|b#co=A*8iU6B47vCQY?JiH!-xpECW!NX#t98uNou4pI{>~4BZm{#*;B~PtP zh@lv15|(mlca*Aj1fxL*QGG4`Hvcl7lgU-mGy*>AS**nF+j6A6Q`HlvPrHn(`J6so zd|^4rT_4TDEvnjns;4j59#ys8_quvJR5j4z_Akif=)!|w}yV6pD=`iZm2+l_=+XwS7wAe$F(6d2{ zVnM%xAMk(4J6!*T>kIt)9e#NuGSG$?|NAx{`>mRHU0bxQoxEY<=w0GcYS1x?_aF2h z@VD*f@jv$A_<&JQ-aSTLT|f`bnr{~J_-#te&EzPb4*}2O*3n@(b2f>if$l00w>(_XoD*Ocu2Fl~d`N%wytzG!|BF zTnj4$OP=HmaX6m)%mKa|uM05^9mU~&QT3Y|Z?iT3*99SY#4kJKpnx&Bi?pBLuVrunc^lOz`# ztwrAhIu5>Nr%a4}j00#$Z(-;|Mp87jF*$RQ&Z@V|X_=Yj)>wuJw3}hbD-IvVkQ}Em z&^*Q|$JKRDPPiu>cXp+_C0D@{Sq~ndI_*m%HT#ccHMV}|oawE_T{LCsG}n1XdVG%J z%5qDCOXsKu+{%Jzr*_M4<^74pQYEz>wR2Ov=Uf*must-ZRq*)N^j;kHAMqdat4DL9 z56=CF_vgTVZir6u#CFzS!p&X9cdO_O$@Y3qE4}*aw1>I79x%5qHQ3dB@!T|J9e!hY zdJgSq9G;$~{yOvCFpd85_=CSN9qk6D;r#(*ct5DExz1`vo8jE?=NUtPr|`T_-uEj5 zWqIN6cl>>;{DJ&(hc6l4LEKcMH&%l?k%M)byfjZEof|@wzp*SY8@yXj=iLpy$tS$k zC==bK_7E%6)B;PE}e zh4N2A6YmjRh__klEzsm|khoIfJPyIOvK1Pi#2qiusmP-X&Mj|-MqW{^)KCIbd^sG> zJogbsLad%57(0knj@s_QM$(BzcurzX;yV&231jd4{s1*o=ptnsG-2oYcoEp;7T<3- z#tXH=&(uh;SMBQUisC1fdO8|xKdH8No>bq}f{_lU_Jn%c``%ya3J1Ho?X+I}L`1p` nkQ)IB(e>LZ7>N*LBpLz}*~!osjVyx>t)~aEQVk diff --git a/tools/nauty25r9_mac/nausparse.c b/tools/nauty25r9_mac/nausparse.c deleted file mode 100644 index f10952a..0000000 --- a/tools/nauty25r9_mac/nausparse.c +++ /dev/null @@ -1,1668 +0,0 @@ -/***************************************************************************** -* * -* Sparse-graph-specific auxiliary source file for version 2.5 of nauty. * -* * -* Copyright (2004-2014) Brendan McKay. All rights reserved. * -* Subject to waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 26-Oct-04 : initial creation * -* 23-Nov-06 : dispatch uses targetcell_sg, not bestcell_sg * -* 8-Dec-06 : add adjacencies_sg() * -* 10-Nov-09 : remove types shortish and permutation * -* 14-Nov-09 : added copy_sg() * -* 11-May-10 : use sorttemplates.c for sorting procedures * -* 19-May-10 : add two *_tr procedures for traces. * -* 21-May-10 : fixes for nde,v fields becoming size_t * -* 23-May-10 : add sparsenauty() * -* 15-Jan-12 : add TLS_ATTR attributes * -* * -*****************************************************************************/ - -#define TMP - -/* #define ONE_WORD_SETS not sure about this! See notes.txt. */ -#include "nausparse.h" - - /* macros for hash-codes: */ -#define MASH(l,i) ((((l) ^ 065435) + (i)) & 077777) - /* : expression whose long value depends only on long l and int/long i. - Anything goes, preferably non-commutative. */ - -#define CLEANUP(l) ((int)((l) % 077777)) - /* : expression whose value depends on long l and is less than 077777 - when converted to int then short. Anything goes. */ - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#define ACCUM(x,y) x = (((x) + (y)) & 077777) - -static const int fuzz1[] = {037541,061532,005257,026416}; -static const int fuzz2[] = {006532,070236,035523,062437}; - -#define FUZZ1(x) ((x) ^ fuzz1[(x)&3]) -#define FUZZ2(x) ((x) ^ fuzz2[(x)&3]) - -/* aproto: header new_nauty_protos.h */ - -dispatchvec dispatch_sparse = - {isautom_sg,testcanlab_sg,updatecan_sg,refine_sg,refine_sg,cheapautom_sg, - targetcell_sg,nausparse_freedyn,nausparse_check,init_sg,NULL}; - -#if !MAXN -DYNALLSTAT(short,vmark1,vmark1_sz); -DYNALLSTAT(short,vmark2,vmark2_sz); -DYNALLSTAT(int,work1,work1_sz); -DYNALLSTAT(int,work2,work2_sz); -DYNALLSTAT(int,work3,work3_sz); -DYNALLSTAT(int,work4,work4_sz); -DYNALLSTAT(set,snwork,snwork_sz); -#else -static TLS_ATTR short vmark1[MAXN]; -static TLS_ATTR short vmark2[MAXN]; -static TLS_ATTR int work1[MAXN]; -static TLS_ATTR int work2[MAXN]; -static TLS_ATTR int work3[MAXN]; -static TLS_ATTR int work4[MAXN]; -static TLS_ATTR set snwork[40*MAXM]; -#endif - -static TLS_ATTR short vmark1_val = 32000; -#define MARK1(i) vmark1[i] = vmark1_val -#define UNMARK1(i) vmark1[i] = 0 -#define ISMARKED1(i) (vmark1[i] == vmark1_val) -#define ISNOTMARKED1(i) (vmark1[i] != vmark1_val) - -static TLS_ATTR short vmark2_val = 32000; -#define MARK2(i) vmark2[i] = vmark2_val -#define UNMARK2(i) vmark2[i] = 0 -#define ISMARKED2(i) (vmark2[i] == vmark2_val) -#define ISNOTMARKED2(i) (vmark2[i] != vmark2_val) - -#if !MAXN -#define RESETMARKS1 {if (vmark1_val++ >= 32000) \ - {size_t ij; for (ij=0;ij= 32000) \ - {size_t ij; for (ij=0;ij= 32000) \ - {size_t ij; for (ij=0;ij= 32000) \ - {size_t ij; for (ij=0;ijnv; - if (g2->nv != n || g2->nde != g1->nde) return FALSE; - - SG_VDE(g1,v1,d1,e1); - SG_VDE(g2,v2,d2,e2); - - PREPAREMARKS1(n); - - for (i = 0; i < n; ++i) - { - di = d1[i]; - if (d2[i] != di) return FALSE; - - vi = v1[i]; - RESETMARKS1; - for (j = 0; j < di; ++j) MARK1(e1[vi+j]); - vi = v2[i]; - for (j = 0; j < di; ++j) if (ISNOTMARKED1(e2[vi+j])) return FALSE; - } - - return TRUE; -} - -/***************************************************************************** -* * -* testcanlab_sg(g,canong,lab,samerows,m,n) compares g^lab to canong, * -* using an ordering which is immaterial since it's only used here. The * -* value returned is -1,0,1 if g^lab <,=,> canong. *samerows is set to * -* the number of rows (0..n) of canong which are the same as those of g^lab. * -* * -*****************************************************************************/ - -int -testcanlab_sg(graph *g, graph *canong, int *lab, int *samerows, int m, int n) -{ - int *d,*e; - int *cd,*ce; - int i,k,di,dli; - size_t j,vi,vli,*v,*cv; - int mina; - - SG_VDE(g,v,d,e); - SG_VDE(canong,cv,cd,ce); - -#if !MAXN - DYNALLOC1(int,work1,work1_sz,n,"testcanlab_sg"); -#endif -#define INVLAB work1 - - PREPAREMARKS1(n); - - for (i = 0; i < n; ++i) INVLAB[lab[i]] = i; - - for (i = 0; i < n; ++i) - { - /* compare g[lab[i]]^INVLAB to canong[i] */ - vi = cv[i]; - di = cd[i]; - vli = v[lab[i]]; - dli = d[lab[i]]; - - if (di != dli) - { - *samerows = i; - if (di < dli) return -1; - return 1; - } - - RESETMARKS1; - mina = n; - for (j = 0; j < di; ++j) MARK1(ce[vi+j]); - for (j = 0; j < di; ++j) - { - k = INVLAB[e[vli+j]]; - if (ISMARKED1(k)) UNMARK1(k); - else if (k < mina) mina = k; - } - if (mina != n) - { - *samerows = i; - for (j = 0; j < di; ++j) - { - k = ce[vi+j]; - if (ISMARKED1(k) && k < mina) return -1; - } - return 1; - } - } - - *samerows = n; - return 0; -} - -/***************************************************************************** -* * -* updatecan_sg(g,canong,lab,samerows,m,n) sets canong = g^lab, assuming * -* the first samerows vertices of canong are ok already. Also assumes * -* contiguity and ample space in canong. * -* * -*****************************************************************************/ - -void -updatecan_sg(graph *g, graph *canong, int *lab, int samerows, int m, int n) -{ - int *d,*e; - int *cd,*ce; - int i,dli; - size_t *v,*cv,vli,j,k; - - SG_VDE(g,v,d,e); - SG_VDE(canong,cv,cd,ce); - -#if !MAXN - DYNALLOC1(int,work1,work1_sz,n,"testcanlab_sg"); -#endif -#define INVLAB work1 - - ((sparsegraph*)canong)->nv = n; - ((sparsegraph*)canong)->nde = ((sparsegraph*)g)->nde; - - for (i = 0; i < n; ++i) INVLAB[lab[i]] = i; - - if (samerows == 0) k = 0; - else k = cv[samerows-1]+cd[samerows-1]; - - for (i = samerows; i < n; ++i) - { - cv[i] = k; - cd[i] = dli = d[lab[i]]; - vli = v[lab[i]]; - for (j = 0; j < dli; ++j) ce[k++] = INVLAB[e[vli+j]]; - } -} - -/***************************************************************************** -* * -* comparelab_tr(g,lab1,invlab1,lab2,invlab2) compares g^lab1 to g^lab2 * -* and returns -1,0,1 according to the comparison. * -* invlab1[] and invlab2[] are assumed to hold inverses of lab1,lab2. * -* * -*****************************************************************************/ - -int -comparelab_tr(sparsegraph *g, - int *lab1, int *invlab1, int *lab2, int *invlab2) -{ - int d1,*e1,d2,*e2; - int i,j,k,n; - int mina; - - n = g->nv; - PREPAREMARKS1(n); - - for (i = 0; i < n; ++i) - { - e1 = g->e + g->v[lab1[i]]; - d1 = g->d[lab1[i]]; - e2 = g->e + g->v[lab2[i]]; - d2 = g->d[lab2[i]]; - if (d1 < d2) return -1; - else if (d1 > d2) return 1; - - RESETMARKS1; - mina = n; - for (j = 0; j < d1; ++j) MARK1(invlab1[e1[j]]); - - for (j = 0; j < d1; ++j) - { - k = invlab2[e2[j]]; - if (ISMARKED1(k)) UNMARK1(k); - else if (k < mina) mina = k; - } - if (mina != n) - { - for (j = 0; j < d1; ++j) - { - k = invlab1[e1[j]]; - if (ISMARKED1(k) && k < mina) return -1; - } - return 1; - } - } - - return 0; -} - -/***************************************************************************** -* * -* testcanlab_tr(g,canong,lab,invlab,samerows) compares g^lab to canong, * -* using an ordering which is immaterial since it's only used here. The * -* value returned is -1,0,1 if g^lab <,=,> canong. *samerows is set to * -* the number of rows (0..n) of canong which are the same as those of g^lab. * -* invlab[] is assumed to hold the inverse of lab[] * -* * -*****************************************************************************/ - -int -testcanlab_tr(sparsegraph *g, sparsegraph *canong, - int *lab, int *invlab, int *samerows) -{ - int *d,*e; - int *cd,*ce; - int i,di,dli; - int k,n; - size_t *v,*cv,vi,vli,j; - int mina; - - SG_VDE(g,v,d,e); - SG_VDE(canong,cv,cd,ce); - n = g->nv; - - PREPAREMARKS1(n); - - for (i = 0; i < n; ++i) - { - /* compare g[lab[i]]^invlab to canong[i] */ - vi = cv[i]; - di = cd[i]; - vli = v[lab[i]]; - dli = d[lab[i]]; - - if (di != dli) - { - *samerows = i; - if (di < dli) return -1; - return 1; - } - - RESETMARKS1; - mina = n; - for (j = 0; j < di; ++j) MARK1(ce[vi+j]); - - for (j = 0; j < di; ++j) - { - k = invlab[e[vli+j]]; - if (ISMARKED1(k)) UNMARK1(k); - else if (k < mina) mina = k; - } - if (mina != n) - { - *samerows = i; - for (j = 0; j < di; ++j) - { - k = ce[vi+j]; - if (ISMARKED1(k) && k < mina) return -1; - } - return 1; - } - } - - *samerows = n; - return 0; -} - -/***************************************************************************** -* * -* updatecan_tr(g,canong,lab,invlab,samerows) sets canong = g^lab, * -* assuming the first samerows vertices of canong are ok already. * -* Also assumes contiguity and ample space in canong. * -* Assumes invlab[] holds the inverse of lab[] * -* * -*****************************************************************************/ - -void -updatecan_tr(sparsegraph *g, sparsegraph *canong, - int *lab, int *invlab, int samerows) -{ - int *d,*e; - int *cd,*ce; - int i,dli,n; - size_t *v,*cv,vli,j,k; - - SG_VDE(g,v,d,e); - SG_VDE(canong,cv,cd,ce); - n = g->nv; - - PREPAREMARKS1(n); - - canong->nv = n; - canong->nde = g->nde; - - if (samerows == 0) k = 0; - else k = cv[samerows-1]+cd[samerows-1]; - - for (i = samerows; i < n; ++i) - { - cv[i] = k; - cd[i] = dli = d[lab[i]]; - vli = v[lab[i]]; - for (j = 0; j < dli; ++j) ce[k++] = invlab[e[vli+j]]; - } -} - -#define SORT_OF_SORT 3 -#define SORT_NAME sortindirect -#include "sorttemplates.c" - -#define SORT_OF_SORT 1 -#define SORT_NAME sortints -#include "sorttemplates.c" - -/***************************************************************************** -* * -* init_sg(graph *gin, graph **gout, graph *hin, graph **hout, * -* int *lab, int *ptn, set *active, optionblk *options, * -* int *status, int m, int n) * -* Initialse routine for dispatch vector. This one just makes sure * -* that *hin has enough space. * -* * -*****************************************************************************/ - -void -init_sg(graph *gin, graph **gout, graph *hin, graph **hout, int *lab, - int *ptn, set *active, struct optionstruct *options, int *status, - int m, int n) -{ - sparsegraph *sg,*sh; - - if (options->getcanon) - { - sg = (sparsegraph*)gin; - sh = (sparsegraph*)hin; - SG_ALLOC(*sh,sg->nv,sg->nde,"init_sg"); - } - *status = 0; -} - -/***************************************************************************** -* * -* distvals(sparsegraph *sg, int v0, int *dist, int n) sets dist[i] * -* to the distance from v0 to i, for each i, or to n if there is no such * -* distance. work4[] is used as a queue. * -* * -*****************************************************************************/ - -void -distvals(sparsegraph *g, int v0, int *dist, int n) -{ - int *d,*e; - int i,head,tail; - int di,k; - size_t *v,vi,j; - - SG_VDE(g,v,d,e); -#if !MAXN - DYNALLOC1(int,work4,work4_sz,n,"distvals"); -#endif -#define QUEUE work4 - - for (i = 0; i < n; ++i) dist[i] = n; - - QUEUE[0] = v0; - dist[v0] = 0; - - head = 0; - tail = 1; - while (tail < n && head < tail) - { - i = QUEUE[head++]; - vi = v[i]; - di = d[i]; - for (j = 0; j < di; ++j) - { - k = e[vi+j]; - if (dist[k] == n) - { - dist[k] = dist[i] + 1; - QUEUE[tail++] = k; - } - } - } -} - -/***************************************************************************** -* * -* refine_sg(g,lab,ptn,level,numcells,count,active,code,m,n) performs a * -* refinement operation on the partition at the specified level of the * -* partition nest (lab,ptn). *numcells is assumed to contain the number of * -* cells on input, and is updated. The initial set of active cells (alpha * -* in the paper) is specified in the set active. Precisely, x is in active * -* iff the cell starting at index x in lab is active. * -* The resulting partition is equitable if active is correct (see the paper * -* and the Guide). * -* *code is set to a value which depends on the fine detail of the * -* algorithm, but which is independent of the labelling of the graph. * -* count is used for work space. * -* * -*****************************************************************************/ - -void -refine_sg(graph *g, int *lab, int *ptn, int level, int *numcells, - int *count, set *active, int *code, int m, int n) -{ - int i,j,k,l,v1,v2,v3,isplit; - int w1,w2,w3; - long longcode; - int *d,*e; - int size,bigsize,bigpos; - int nactive,hitcells; - int lj,di,splitv; - boolean trivsplit; - size_t *v,vi,ii; - - SG_VDE(g,v,d,e); - -#if !MAXN - DYNALLOC1(int,work1,work1_sz,n,"refine_sg"); - DYNALLOC1(int,work2,work2_sz,n,"refine_sg"); - DYNALLOC1(int,work3,work3_sz,n,"refine_sg"); - DYNALLOC1(int,work4,work4_sz,n,"refine_sg"); -#endif -#define CELLSTART work1 -#define ACTIVE work2 -#define HITS work3 -#define HITCELL work4 - - PREPAREMARKS1(n); - PREPAREMARKS2(n); - - longcode = *numcells; - - /* Set ACTIVE[0..nactive-1] = queue of active cell starts */ - - nactive = 0; - for (i = -1; (i = nextelement(active,m,i)) >= 0;) - ACTIVE[nactive++] = i; - - if (nactive == 0) - { - *code = CLEANUP(longcode); - return; - } - - /* Set CELLSTART[i] = starting point in lab[] of nontrivial cell - containing i, or n if i is a singleton */ - - for (i = 0; i < n; ) - { - /* Just here, i is a cell starting position */ - if (ptn[i] <= level) - { - CELLSTART[lab[i]] = n; - ++i; - } - else - { - j = i; - do - { - CELLSTART[lab[i]] = j; - } while (ptn[i++] > level); - } - } - - if (level <= 2 && nactive == 1 && ptn[ACTIVE[0]] <= level - && *numcells <= n/8) - { - isplit = ACTIVE[--nactive]; - DELELEMENT(active,isplit); - - distvals((sparsegraph*)g,lab[isplit],HITS,n); - - for (v1 = 0; v1 < n; ) - { - if (ptn[v1] <= level) - { - ++v1; - continue; - } - - longcode = MASH(longcode,v1); - w1 = HITS[lab[v1]]; - - v2 = v1+1; - while (ptn[v2-1] > level && HITS[lab[v2]] == w1) ++v2; - - if (ptn[v2-1] <= level) - { - v1 = v2; - continue; - } - - w2 = NAUTY_INFINITY; - v3 = j = v2; - - do - { - lj = lab[j]; - w3 = HITS[lj]; - if (w3 == w1) - { - lab[j] = lab[v3]; - lab[v3] = lab[v2]; - lab[v2] = lj; - ++v2; - ++v3; - } - else if (w3 == w2) - { - lab[j] = lab[v3]; - lab[v3] = lj; - ++v3; - } - else if (w3 < w1) - { - lab[j] = lab[v2]; - lab[v2] = lab[v1]; - lab[v1] = lj; - v3 = v2 + 1; - v2 = v1 + 1; - w2 = w1; - w1 = w3; - } - else if (w3 < w2) - { - lab[j] = lab[v2]; - lab[v2] = lj; - v3 = v2 + 1; - w2 = w3; - } - } while (ptn[j++] > level); - - longcode = MASH(longcode,w2); - longcode = MASH(longcode,v2); - if (j != v2) /* At least two fragments - * v1..v2-1 = w1; v2..v3-1 = w2 */ - { - if (v2 == v1+1) - CELLSTART[lab[v1]] = n; - - if (v3 == v2+1) - CELLSTART[lab[v2]] = n; - else - for (k = v2; k < v3; ++k) - CELLSTART[lab[k]] = v2; - ++*numcells; - ptn[v2-1] = level; - - if (j == v3) - { - /* Two fragments only */ - if (v2-v1 <= v3-v2 && !ISELEMENT(active,v1)) - { - ADDELEMENT(active,v1); - ACTIVE[nactive++] = v1; - } - else - { - ADDELEMENT(active,v2); - ACTIVE[nactive++] = v2; - } - } - else - { - /* Extra fragments: v3..j-1 > w2 */ - sortindirect(lab+v3,HITS,j-v3); - ACTIVE[nactive++] = v2; - ADDELEMENT(active,v2); - if (v2-v1 >= v3-v2) - { - bigpos = -1; - bigsize = v2-v1; - } - else - { - bigpos = nactive-1; - bigsize = v3-v2; - } - for (k = v3-1; k < j-1;) - { - ptn[k] = level; - longcode = MASH(longcode,k); - ++*numcells; - l = k+1; - ADDELEMENT(active,l); - ACTIVE[nactive++] = l; - w3 = HITS[lab[l]]; - for (k = l; k < j-1 - && HITS[lab[k+1]] == w3; ++k) - CELLSTART[lab[k+1]] = l; - size = k-l+1; - if (size == 1) - CELLSTART[lab[l]] = n; - else - { - CELLSTART[lab[l]] = l; - if (size > bigsize) - { - bigsize = size; - bigpos = nactive-1; - } - } - } - - if (bigpos >= 0 && !ISELEMENT(active,v1)) - { - longcode = MASH(longcode,bigpos); - DELELEMENT(active,ACTIVE[bigpos]); - ADDELEMENT(active,v1); - ACTIVE[bigpos] = v1; - } - } - } - v1 = j; - } - } - - /* Iterate until complete */ - while (nactive > 0 && *numcells < n) - { - for (i = 0; i < nactive && i < 10; ++i) - if (ptn[ACTIVE[i]] <= level) break; - - if (i < nactive && i < 10) - { - trivsplit = TRUE; - isplit = ACTIVE[i]; - ACTIVE[i] = ACTIVE[--nactive]; - } - else - { - isplit = ACTIVE[--nactive]; - trivsplit = ptn[isplit] <= level; - } - - DELELEMENT(active,isplit); - longcode = MASH(longcode,isplit); - - if (trivsplit) - { - RESETMARKS1; - RESETMARKS2; - hitcells = 0; - splitv = lab[isplit]; - vi = v[splitv]; - di = d[splitv]; - for (ii = 0; ii < di; ++ii) - { - j = e[vi+ii]; - MARK2(j); - k = CELLSTART[j]; - if (k != n && ISNOTMARKED1(k)) - { - MARK1(k); - HITCELL[hitcells++] = k; - } - } - - if (hitcells > 1) sortints(HITCELL,hitcells); - longcode = MASH(longcode,hitcells); - - /* divide cells according to which vertices are hit */ - - for (i = 0; i < hitcells; ++i) - { - j = v1 = v2 = HITCELL[i]; - longcode = MASH(longcode,v2); - k = 0; - do - { - lj = lab[j]; - if (ISMARKED2(lj)) - HITS[k++] = lj; - else - lab[v2++] = lj; - } while (ptn[j++] > level); - - longcode = MASH(longcode,k); - v3 = v2; - while (--k >= 0) - { - j = HITS[k]; - CELLSTART[j] = v2; - lab[v3++] = j; - } - - if (v2 != v3 && v2 != v1) - { - ++*numcells; - if (v2 == v1+1) CELLSTART[lab[v1]] = n; - if (v3 == v2+1) CELLSTART[lab[v2]] = n; - ptn[v2-1] = level; - longcode = MASH(longcode,v2); - if (v2-v1 <= v3-v2 && !ISELEMENT(active,v1)) - { - ADDELEMENT(active,v1); - ACTIVE[nactive++] = v1; - } - else - { - ADDELEMENT(active,v2); - ACTIVE[nactive++] = v2; - } - } - } - } - else /* non-trivial splitting */ - { - /* isplit is the start of the splitting cell. - Set HITS[i] = hits of i for i in non-trivial cells, - HITCELL[0..hitcells-1] = starts of hit non-trivial cells */ - - RESETMARKS1; - hitcells = 0; - do - { - vi = v[lab[isplit]]; - di = d[lab[isplit]]; - for (ii = 0; ii < di; ++ii) - { - j = e[vi+ii]; - k = CELLSTART[j]; - if (k != n) - { - if (ISNOTMARKED1(k)) - { - MARK1(k); - HITCELL[hitcells++] = k; - do - { - HITS[lab[k]] = 0; - } while (ptn[k++] > level); - } - ++HITS[j]; - } - } - } while (ptn[isplit++] > level); - - if (hitcells > 1) sortints(HITCELL,hitcells); - - /* divide cells according to hit counts */ - - longcode = MASH(longcode,hitcells); - for (i = 0; i < hitcells; ++i) - { - v1 = HITCELL[i]; - w1 = HITS[lab[v1]]; - longcode = MASH(longcode,v1); - - v2 = v1+1; - while (ptn[v2-1] > level && HITS[lab[v2]] == w1) ++v2; - - if (ptn[v2-1] <= level) continue; - w2 = NAUTY_INFINITY; - v3 = j = v2; - - do - { - lj = lab[j]; - w3 = HITS[lj]; - if (w3 == w1) - { - lab[j] = lab[v3]; - lab[v3] = lab[v2]; - lab[v2] = lj; - ++v2; - ++v3; - } - else if (w3 == w2) - { - lab[j] = lab[v3]; - lab[v3] = lj; - ++v3; - } - else if (w3 < w1) - { - lab[j] = lab[v2]; - lab[v2] = lab[v1]; - lab[v1] = lj; - v3 = v2 + 1; - v2 = v1 + 1; - w2 = w1; - w1 = w3; - } - else if (w3 < w2) - { - lab[j] = lab[v2]; - lab[v2] = lj; - v3 = v2 + 1; - w2 = w3; - } - } while (ptn[j++] > level); - - longcode = MASH(longcode,w1); - longcode = MASH(longcode,v2); - if (j != v2) /* At least two fragments - * v1..v2-1 = w1; v2..v3-1 = w2 */ - { - if (v2 == v1+1) - CELLSTART[lab[v1]] = n; - - if (v3 == v2+1) - CELLSTART[lab[v2]] = n; - else - for (k = v2; k < v3; ++k) - CELLSTART[lab[k]] = v2; - ++*numcells; - ptn[v2-1] = level; - - if (j == v3) - { - /* Two fragments only */ - if (v2-v1 <= v3-v2 && !ISELEMENT(active,v1)) - { - ADDELEMENT(active,v1); - ACTIVE[nactive++] = v1; - } - else - { - ADDELEMENT(active,v2); - ACTIVE[nactive++] = v2; - } - } - else - { - /* Extra fragments: v3..j-1 > w2 */ - longcode = MASH(longcode,v3); - sortindirect(lab+v3,HITS,j-v3); - ACTIVE[nactive++] = v2; - ADDELEMENT(active,v2); - if (v2-v1 >= v3-v2) - { - bigpos = -1; - bigsize = v2-v1; - } - else - { - bigpos = nactive-1; - bigsize = v3-v2; - longcode = MASH(longcode,bigsize); - } - for (k = v3-1; k < j-1;) - { - ptn[k] = level; - ++*numcells; - l = k+1; - ADDELEMENT(active,l); - ACTIVE[nactive++] = l; - w3 = HITS[lab[l]]; - longcode = MASH(longcode,w3); - for (k = l; k < j-1 - && HITS[lab[k+1]] == w3; ++k) - CELLSTART[lab[k+1]] = l; - size = k-l+1; - if (size == 1) - CELLSTART[lab[l]] = n; - else - { - CELLSTART[lab[l]] = l; - if (size > bigsize) - { - bigsize = size; - bigpos = nactive-1; - } - } - } - - if (bigpos >= 0 && !ISELEMENT(active,v1)) - { - DELELEMENT(active,ACTIVE[bigpos]); - ADDELEMENT(active,v1); - ACTIVE[bigpos] = v1; - } - } - } - } - } - } - - longcode = MASH(longcode,*numcells); - *code = CLEANUP(longcode); -} - -/***************************************************************************** -* * -* cheapautom_sg(ptn,level,digraph,n) returns TRUE if the partition at the * -* specified level in the partition nest (lab,ptn) {lab is not needed here} * -* satisfies a simple sufficient condition for its cells to be the orbits of * -* some subgroup of the automorphism group. Otherwise it returns FALSE. * -* It always returns FALSE if digraph!=FALSE. * -* * -* nauty assumes that this function will always return TRUE for any * -* partition finer than one for which it returns TRUE. * -* * -*****************************************************************************/ - -boolean -cheapautom_sg(int *ptn, int level, boolean digraph, int n) -{ - int i,k,nnt; - - if (digraph) return FALSE; - - k = n; - nnt = 0; - for (i = 0; i < n; ++i) - { - --k; - if (ptn[i] > level) - { - ++nnt; - while (ptn[++i] > level) {} - } - } - - return (k <= nnt + 1 || k <= 4); -} - -/***************************************************************************** -* * -* bestcell_sg(g,lab,ptn,level,tc_level,m,n) returns the index in lab of * -* the start of the "best non-singleton cell" for fixing. If there is no * -* non-singleton cell it returns n. * -* This implementation finds the first cell which is non-trivially joined * -* to the greatest number of other cells, assuming equitability. * -* This is not good for digraphs! * -* * -*****************************************************************************/ - -static int -bestcell_sg(graph *g, int *lab, int *ptn, int level, - int tc_level, int m, int n) -{ - int nnt; - int *d,*e; - int i,k,di; - int *work1b; - int maxcnt; - size_t *v,vi,j; - - SG_VDE(g,v,d,e); - -#if !MAXN - DYNALLOC1(int,work1,work1_sz,n,"bestcell_sg"); - DYNALLOC1(int,work2,work2_sz,n,"bestcell_sg"); - DYNALLOC1(int,work3,work3_sz,n,"bestcell_sg"); - DYNALLOC1(int,work4,work4_sz,n,"bestcell_sg"); -#endif - work1b = work1 + (n/2); -#define START work1 -#define SIZE work1b -#define NNTCELL work2 -#define HITS work3 -#define COUNT work4 - - /* find non-singleton cells: put starts in START[0..nnt-1], - sizes in SIZE[0..nnt-1]. - Also NNTCELL[i] = n if {i} is a singelton, else index of - nontriv cell containing i. */ - - i = nnt = 0; - - while (i < n) - { - if (ptn[i] > level) - { - START[nnt] = i; - j = i; - do - NNTCELL[lab[j]] = nnt; - while (ptn[j++] > level); - SIZE[nnt] = j-i; - ++nnt; - i = j; - } - else - { - NNTCELL[lab[i]] = n; - ++i; - } - } - - if (nnt == 0) return n; - - /* set COUNT[i] to # non-trivial neighbours of n.s. cell i */ - - for (i = 0; i < nnt; ++i) HITS[i] = COUNT[i] = 0; - - for (i = 0; i < nnt; ++i) - { - vi = v[lab[START[i]]]; - di = d[lab[START[i]]]; - - for (j = 0; j < di; ++j) - { - k = NNTCELL[e[vi+j]]; - if (k != n) ++HITS[k]; - } - for (j = 0; j < di; ++j) - { - k = NNTCELL[e[vi+j]]; - if (k != n) - { - if (HITS[k] > 0 && HITS[k] < SIZE[k]) ++COUNT[i]; - HITS[k] = 0; - } - } - } - - /* find first greatest bucket value */ - - j = 0; - maxcnt = COUNT[0]; - for (i = 1; i < nnt; ++i) - if (COUNT[i] > maxcnt) - { - j = i; - maxcnt = COUNT[i]; - } - - return (int)START[j]; -} -/***************************************************************************** -* * -* targetcell_sg(g,lab,ptn,level,tc_level,digraph,hint,m,n) returns the * -* index in lab of the next cell to split. * -* hint is a suggestion for the answer, which is obeyed if it is valid. * -* Otherwise we use bestcell() up to tc_level and the first non-trivial * -* cell after that. * -* * -*****************************************************************************/ - -int -targetcell_sg(graph *g, int *lab, int *ptn, int level, int tc_level, - boolean digraph, int hint, int m, int n) -{ - int i; - - if (hint >= 0 && ptn[hint] > level && - (hint == 0 || ptn[hint-1] <= level)) - return hint; - else if (level <= tc_level) - return bestcell_sg(g,lab,ptn,level,tc_level,m,n); - else - { - for (i = 0; i < n && ptn[i] <= level; ++i) {} - return (i == n ? 0 : i); - } -} - -/***************************************************************************** -* * -* sortlists_sg(g) sorts the adjacency lists into numerical order * -* * -*****************************************************************************/ - -void -sortlists_sg(sparsegraph *g) -{ - int *d,*e; - int n,i; - size_t *v; - - SG_VDE(g,v,d,e); - n = g->nv; - - for (i = 0; i < n; ++i) - if (d[i] > 1) sortints(e+v[i],d[i]); -} - -/***************************************************************************** -* * -* put_sg(f,sg,digraph,linelength) writes the sparse graph to file f using * -* at most linelength characters per line. If digraph then all directed * -* edges are written; else one v-w for w>=v is written. * -* * -*****************************************************************************/ - -void -put_sg(FILE *f, sparsegraph *sg, boolean digraph, int linelength) -{ - int *d,*e; - int n,di; - int i,curlen,slen; - size_t *v,vi,j; - char s[12]; - - SG_VDE(sg,v,d,e); - n = sg->nv; - - for (i = 0; i < n; ++i) - { - vi = v[i]; - di = d[i]; - if (di == 0) continue; - slen = itos(i+labelorg,s); - putstring(f,s); - putstring(f," :"); - curlen = slen + 2; - - for (j = 0; j < di; ++j) - { - if (!digraph && e[vi+j] < i) continue; - slen = itos(e[vi+j]+labelorg,s); - if (linelength && curlen + slen + 1 >= linelength) - { - putstring(f,"\n "); - curlen = 2; - } - PUTC(' ',f); - putstring(f,s); - curlen += slen + 1; - } - PUTC('\n',f); - } -} - -/***************************************************************************** -* * -* sg_to_nauty(sg,g,reqm,&m) creates a nauty-format graph from a sparse * -* graph. reqm is the required m value (computed from n if reqm=0), and * -* m is the actual value used. g is dynamically generated if NULL is given. * -* A pointer to g is returned. * -* * -*****************************************************************************/ - -graph* -sg_to_nauty(sparsegraph *sg, graph *g, int reqm, int *pm) -{ - int *d,*e; - int m,n,i,di; - size_t *v,vi,j; - set *gi; - - SG_VDE(sg,v,d,e); - n = sg->nv; - if (reqm != 0 && reqm*WORDSIZE < n) - { - fprintf(ERRFILE,"sg_to_nauty: reqm is impossible\n"); - exit(1); - } - - if (reqm != 0) m = reqm; - else m = (n+WORDSIZE-1)/WORDSIZE; - - *pm = m; - - if (g == NULL) - { - if ((g = (graph*)ALLOCS(n,m*sizeof(graph))) == NULL) - { - fprintf(ERRFILE,"sg_to_nauty: malloc failed\n"); - exit(1); - } - } - - for (i = 0, gi = g; i < n; ++i, gi += m) - { - vi = v[i]; - di = d[i]; - EMPTYSET(gi,m); - for (j = 0; j < di; ++j) ADDELEMENT(gi,e[vi+j]); - } - - return g; -} - -/***************************************************************************** -* * -* copy_sg(sg1,sg2) makes a copy of sg1 into sg2. * -* If sg2 is not NULL, it is assumed that the vlen,dlen,elen fields are * -* correct and v,d,e are dynamically allocated (or NULL); they are * -* reallocated if necessary. If sg2==NULL, a new structure is allocated. * -* A pointer to the copy is returned. * -* The new graph e component is the same, no compression is done. * -* * -*****************************************************************************/ - -sparsegraph* -copy_sg(sparsegraph *sg1, sparsegraph *sg2) -{ - int *d1,*e1,*d2,*e2; - int i,n; - size_t *v1,*v2,k; - - if (!sg2) - { - if ((sg2 = (sparsegraph*)ALLOCS(1,sizeof(sparsegraph))) == NULL) - { - fprintf(ERRFILE,"copy_sg: malloc failed\n"); - exit(1); - } - SG_INIT(*sg2); - } - - SG_VDE(sg1,v1,d1,e1); - - n = sg1->nv; - - k = 0; - for (i = 0; i < n; ++i) - if (v1[i]+d1[i]>k) k = v1[i] + d1[i]; - - SG_ALLOC(*sg2,n,k,"copy_sg malloc"); - SG_VDE(sg2,v2,d2,e2); - - sg2->nv = n; - sg2->nde = sg1->nde; - memcpy(v2,v1,n*sizeof(size_t)); - memcpy(d2,d1,n*sizeof(int)); - memcpy(e2,e1,k*sizeof(int)); - - return sg2; -} - -/***************************************************************************** -* * -* nauty_to_sg(g,sg,m,n) creates a sparse graph from a nauty format graph * -* If sg is not NULL, it is assumed that the vlen,dlen,elen fields are * -* correct and v,d,e are dynamically allocated (or NULL); they are * -* reallocated if necessary. If sg==NULL, a new structure is allocated. * -* A pointer to the sparse graph is returned. * -* * -*****************************************************************************/ - -sparsegraph* -nauty_to_sg(graph *g, sparsegraph *sg, int m, int n) -{ - int *d,*e; - int i,k; - set *gi; - size_t j,*v,nde; - - if (!sg) - { - if ((sg = (sparsegraph*)ALLOCS(1,sizeof(sparsegraph))) == NULL) - { - fprintf(ERRFILE,"nauty_to_sg: malloc failed\n"); - exit(1); - } - SG_INIT(*sg); - } - - nde = 0; - for (gi = g + (size_t)m*(size_t)n; --gi >= g; ) - if (*gi != 0) nde += POPCOUNT(*gi); - - sg->nv = n; - sg->nde = nde; - - SG_ALLOC(*sg,n,nde,"nauty_to_sg"); - - SG_VDE(sg,v,d,e); - - j = 0; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - v[i] = j; - for (k = -1; (k = nextelement(gi,m,k)) >= 0; ) - e[j++] = k; - d[i] = j - v[i]; - } - - return sg; -} - -/***************************************************************************** -* * -* distances_sg() assigns to each vertex v a value depending on the number * -* of vertices at each distance from v, and what cells they lie in. * -* If we find any cell which is split in this manner, we don't try any * -* further cells. * -* * -*****************************************************************************/ - -void -distances_sg(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int *d,*e; - int i,k,dlim,wt; - int di; - int cell1,cell2,iv,liv,kcode; - int head,tail; - long longcode; - size_t *v,vi,j; - boolean success; - - SG_VDE(g,v,d,e); - -#if !MAXN - DYNALLOC1(int,work1,work1_sz,n,"distances_sg"); - DYNALLOC1(int,work4,work4_sz,n,"distances_sg"); - DYNALLOC1(int,work3,work3_sz,n,"distances_sg"); -#endif -#define CELLCODE work1 -#define QUEUE work4 -#define DIST work3 - - for (i = n; --i >= 0;) invar[i] = 0; - - wt = 1; - for (i = 0; i < n; ++i) - { - CELLCODE[lab[i]] = FUZZ1(wt); - if (ptn[i] <= level) ++wt; - } - - if (invararg > n || invararg == 0) dlim = n; - else dlim = invararg+1; - - success = FALSE; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell2 == cell1) continue; - - for (iv = cell1; iv <= cell2; ++iv) - { - liv = lab[iv]; - QUEUE[0] = liv; - DIST[liv] = 0; - RESETMARKS1; - MARK1(liv); - longcode = 0; - head = 0; - tail = 1; - - while (tail < n && head < tail) - { - i = QUEUE[head++]; - if (DIST[i] >= dlim) break; - vi = v[i]; - di = d[i]; - - for (j = 0; j < di; ++j) - { - k = e[vi+j]; - if (ISNOTMARKED1(k)) - { - MARK1(k); - DIST[k] = DIST[i] + 1; - kcode = DIST[k]+CELLCODE[k]; - ACCUM(longcode,FUZZ1(kcode)); - QUEUE[tail++] = k; - } - } - } - invar[liv] = CLEANUP(longcode); - if (invar[liv] != invar[lab[cell1]]) success = TRUE; - } - if (success) break; - } -} - -/***************************************************************************** -* * -* adjacencies_sg() assigns to each vertex v a code depending on which cells * -* it is joined to and from, and how many times. It is intended to provide * -* better partitioning that the normal refinement routine for digraphs. * -* It will not help with undirected graphs in nauty at all. * -* * -*****************************************************************************/ - -void -adjacencies_sg(graph *g, int *lab, int *ptn, int level, int numcells, - int tvpos, int *invar, int invararg, boolean digraph, - int m, int n) -{ - int *d,*e; - int vwt,wwt; - int *ei,di,i; - size_t *v,j; - - SG_VDE(g,v,d,e); - -#if !MAXN - DYNALLOC1(int,work2,work2_sz,n,"adjacencies_sg"); -#endif - - vwt = 1; - for (i = 0; i < n; ++i) - { - work2[lab[i]] = vwt; - if (ptn[i] <= level) ++vwt; - invar[i] = 0; - } - - for (i = 0; i < n; ++i) - { - vwt = FUZZ1(work2[i]); - wwt = 0; - di = d[i]; - ei = e + v[i]; - for (j = 0; j < di; ++j) - { - ACCUM(wwt,FUZZ2(work2[ei[j]])); - ACCUM(invar[ei[j]],vwt); - } - ACCUM(invar[i],wwt); - } -} - -/***************************************************************************** -* * -* sparsenauty(g,lab,ptn,orbits,&options,&stats,h) * -* is a slightly simplified interface to nauty(). It allocates enough * -* workspace for 20 automorphisms and checks that the sparsegraph dispatch * -* vector is in use. * -* * -*****************************************************************************/ - -void -sparsenauty(sparsegraph *g, int *lab, int *ptn, int *orbits, - optionblk *options, statsblk *stats, sparsegraph *h) -{ - int m,n; - - if (options->dispatch != &dispatch_sparse) - { - fprintf(ERRFILE,"Error: sparsenauty() needs standard options block\n"); - exit(1); - } - - n = g->nv; - m = SETWORDSNEEDED(n); - -#if !MAXN - DYNALLOC1(set,snwork,snwork_sz,2*60*m,"densenauty malloc"); -#endif - - nauty((graph*)g,lab,ptn,NULL,orbits,options,stats, - snwork,2*60*m,m,n,(graph*)h); -} - -/***************************************************************************** -* * -* nausparse_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -nausparse_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in nausparse.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in nausparse.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in nausparse.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: nausparse.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* nausparse_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -nausparse_freedyn(void) -{ -#if !MAXN - DYNFREE(vmark1,vmark1_sz); - DYNFREE(vmark2,vmark2_sz); - DYNFREE(work1,work1_sz); - DYNFREE(work2,work2_sz); - DYNFREE(work3,work3_sz); - DYNFREE(work4,work4_sz); - DYNFREE(snwork,snwork_sz); -#endif -} diff --git a/tools/nauty25r9_mac/nausparse.h b/tools/nauty25r9_mac/nausparse.h deleted file mode 100644 index 9203287..0000000 --- a/tools/nauty25r9_mac/nausparse.h +++ /dev/null @@ -1,102 +0,0 @@ -/* nausparse.h : header file for sparse digraphs, nauty 2.5 */ -/* This version allows only simple graphs with loops but - * contains the data structures for weights on the edges - * even though they aren't implemented yet. */ - -/***************************************************************************** -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-09 : removed types shortish and permutation * -* 20-May-10 : make some fields type size_t * -* 23-May-10 : add sparsenauty() * -* 3-Jun-10 : add *_tr procedures used by Traces * -* 30-Jun-10 : add DEFAULTOPTIONS_SPARSEDIGRAPH() * -* 18-Aug-12 : fix SG_DECL initialization order * -* * -*****************************************************************************/ - -#ifndef _NAUSPARSE_H_ /* only process this file once */ -#define _NAUSPARSE_H_ - -#include "nauty.h" - -#ifndef SG_WEIGHT -#define SG_WEIGHT int -#endif - -typedef struct -{ - size_t nde; /* Number of directed edges (loops contribute only 1) */ - size_t *v; /* Array of indexes into e[*] */ - int nv; /* Number of vertices */ - int *d; /* Array with out-degree of each vertex */ - int *e; /* Array to hold lists of neighbours */ - SG_WEIGHT *w; /* Not implemented, should be NULL. */ - size_t vlen,dlen,elen,wlen; /* Sizes of arrays in units of type */ -} sparsegraph; - - -#define SG_VDE(sgp,vv,dd,ee) do { vv = ((sparsegraph*)(sgp))->v; \ - dd = ((sparsegraph*)(sgp))->d; ee = ((sparsegraph*)(sgp))->e; } while(0) -#define SG_INIT(sg) do { (sg).v = NULL; (sg).d = (sg).e = (sg).w = NULL; \ - (sg).vlen = (sg).dlen = (sg).elen = (sg).wlen = 0; } while(0) -#define SG_ALLOC(sg,nlen,ndelen,msg) do { \ - DYNALLOC1(size_t,(sg).v,(sg).vlen,nlen,msg); \ - DYNALLOC1(int,(sg).d,(sg).dlen,nlen,msg); \ - DYNALLOC1(int,(sg).e,(sg).elen,ndelen,msg); } while (0) -#define SG_FREE(sg) do { \ - DYNFREE((sg).v,(sg).vlen); \ - DYNFREE((sg).d,(sg).dlen); \ - DYNFREE((sg).e,(sg).elen); } while (0) - -#define SG_DECL(sg) sparsegraph sg = {0,NULL,0,NULL,NULL,NULL,0,0,0,0} - -#define DEFAULTOPTIONS_SPARSEGRAPH(options) optionblk options = \ - {0,FALSE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,NULL,100,0,1,0,&dispatch_sparse,FALSE,NULL} -#define DEFAULTOPTIONS_SPARSEDIGRAPH(options) optionblk options = \ - {0,TRUE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,adjacencies_sg,100,0,999,0,&dispatch_sparse,FALSE,NULL} - -#ifdef __cplusplus -extern "C" { -#endif - -extern dispatchvec dispatch_sparse; - -extern int targetcell_sg(graph*,int*,int*,int,int,boolean,int,int,int); -extern boolean cheapautom_sg(int*,int,boolean,int); -extern void distvals(sparsegraph*,int,int*,int); -extern boolean isautom_sg(graph*,int*,boolean,int,int); -extern void refine_sg(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -extern int testcanlab_sg(graph*,graph*,int*,int*,int,int); -extern void updatecan_sg(graph*,graph*,int*,int,int,int); -extern int testcanlab_tr(sparsegraph*,sparsegraph*,int*,int*,int*); -extern int comparelab_tr(sparsegraph*,int*,int*,int*,int*); -extern void updatecan_tr(sparsegraph*,sparsegraph*,int*,int*,int); -extern void init_sg(graph*,graph**,graph*,graph**,int*,int*,set*, - struct optionstruct*,int*,int,int); -extern void nausparse_freedyn(void); -extern void nausparse_check(int,int,int,int); - -extern sparsegraph *nauty_to_sg(graph*,sparsegraph*,int,int); -extern graph* sg_to_nauty(sparsegraph*,graph*,int,int*); -extern void sortlists_sg(sparsegraph*); -extern boolean aresame_sg(sparsegraph*,sparsegraph*); -extern void put_sg(FILE*,sparsegraph*,boolean,int); -extern sparsegraph *copy_sg(sparsegraph*,sparsegraph*); - -extern void sparsenauty(sparsegraph*g,int*,int*,int*, - optionblk*,statsblk*,sparsegraph*); - -extern void adjacencies_sg(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void distances_sg(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/tools/nauty25r9_mac/nausparse.o b/tools/nauty25r9_mac/nausparse.o deleted file mode 100644 index 6ff3fd84d6b17fb5d58107b3990faeada888144d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32860 zcmeHw3w%`7x$jIEAmGRj8WojDs8N{;mT20tHEK551AD_vKn3-*(uhN%R9;PH5N)0g z0hXHy@zg3>AGEja;q-BvT9t@ZXA&d<6arYDDgji8qw-P`LS*j$TWif^5~23q-upY} z-gDz>6 zi%MqB$^IUXE-dU_U%Z|)S!nFtqCOe44T(QUEG(Qg(?7E(vanFsrfEIlHrcOxWK*8SXlHxVR6aKxkVzeZ~xi~Mf@Tn5`6M}qCOF_ z+0L`s9*92^X5o+1!eFsl)EIAfkQOt0^-$NDZ+=drFL@T#AC*g+3FrUaKF z$fmFIuo*2LHoeuuybU^Yuk+TN^rw2*p~IBj!^RLy4wa3u@d$%887zb1jGDb3)~;Lb zbso#x;IUAHHKWCvzABJygl?uBZuXXkZQ{icO{tX2WV_w$uwk9gE3tT89`#tDzehdj zA5`4j|4b|vvz0dxrMYXuO6{eXOe5qNWH9$?gL&)S*&o(yQx+dX`V?QzuO|B(|K?V6 z9#v{SL6Ire=>4XZ8&Tfm^@lWjG3!q)RiBEL*=!Yt5iGB_`Ev|bzRFT;H$sy7Id0bhOQ>v`#RL>|inWzh8Df>reY@J(Orz{_a z>1ZeBsf@_8(O`A8O<8#n&k#7NZN_JpS+e zz3~S|$+5R%GDUsyNpN5iI7LK3nve<%11Y`*NbwC`-!a4DOKPg?7tZvu zbtc=XvrR@#*zYtfPUdo>@Le`3l>0KxgWM~E7;3^A+wEapUe*@4BC$8N7;HQ0<2jLH zusv>e$|I`uSbW=g)ebNF)WbSUf5JPB0ibPfO^i0^k>qwKhjPEi!zKeQUqxN;)_mw; zN71rj(YW2K0;3acZ$3-g@qtQ4fzj7{)XqSEuli}ywshBQP->SDnTl!2-hdc?s?IhC zKeqc7!#B9uv5cC3m9~WzJe5*%brOAm-XCMmdc#-tm?QKPJIiS>f{_$m-4OVQ*E|}f zYpi#mtZ&sF}hIt(|l~v^OX@j`#oa% z{Eu}PYs}&IsO=?(+%=#1??eylFoXs-+mwBh^9RG1TW|Vu-_(>f&N5{UXMXDLz_4Pi z*#Y(xrOkv-Vn6BXK3yr;XT;Wf)Xz&IZgo>2-;AwytDBYON5Lo!tA2W5XYV$B})NXdS&C4VL07nqN}`){0^ZDyNH_BWG#fxSk1tU>NQ>@~jk>P<_} zqJ&m@;Jc3=X#1`9`py{f?bp0;5@*_9-+6o&nvp{(9u^a;DOf%>Db{sW-~yAyB>rKyRQcA8#S|8IlEo5WPIzmCv zb%LOe1wPCU*X-3^qgnJ{63UMmD?vUj9^de4V5_I!@Ce(bt4Ea(^+}3DkFO0hv)U8N za{%i-A;Zy|9*E`(*zmT=KK(Z+G(C(B^{7#E67enLSHHyXh+cI{2t zjUHv<8Dbto!BLE0o87~9iS7-j#wPh3byjY*8OpcQE*Q^ppLvZ+nZZ~}$v89Qr~;FD zoOh>(J`LZr7rL$V$Jx|w!PBqjMCHuVg)0~HYp)Ah>_4Hxab-n4O z`qO39P3B&vF|epW3l_XykPRnuNjc!woN`({zVcB?^kIUlorN)T@&IFg9d-9*%;36# z3nXozw4|Or|HUiSSpYkSGpD%rsGf!}G1%_X+p(FU`jG_ckh_UbFo@$;Iel@d=Yc$9 zp9C`H{Gy;N@JT}Z<5_iUZl(b)2o3OPlBhXX52itoH~iyW05LZt^O;~Te@7@x-qq+!fD`<&O{#`X>?%Ra*aCW#-&O2;!twHXVG?5xqlns^zL?Wzes zyqC1v#V?_tHDgrGUN1WU%@Yb{QMlrc>y#hTit5bzgAoWM%DuUitYXsG z>D)n$TRC8FGDCSi+s(&avsbBoX(*Ke_YdWD8_>Woe>B(`Exr2Bz#w;ftho&n)mhJ> z&6raAG&M%b2y?HT9Gdo=&8Y6kco2LE3YC42hqW44#VRQn1_%3vAx=96^Foe0mq7m~ zt1;Glf9E2>&;(HpYu&!b=C&HXN0EM!O0w$nl}svWo=L8 z0nA6e9x5Abk7mmCiA6N_PWuiAh=9v?FFRt|p=oXx)Y7c0S1Pp~7=hQ<{3gyZd2aR< zj!@CNWO-fPSU$@1ZLxAKFxLbc-M&*SfsUb8AEMcJ zLsR?~y3B`dxmUI~;jjyO6~l#QwX*%sh|zB<4+n;db>inUYx*dbUTylCHB7grz61T3 zl~)-)M^Nr0k%6DoW;8^9OsP8iM0a(`sEWJ1tPvw~vv#-Zlq}@$PtyB5C|byz`>GKO zlOl>?ds!=~qsj6seJQd$4mq~e!5@NQsH2C=KE}Y8#cWz=A_TY2vVuBm)LowhN(?pw z$K*~>?rPUA9S307DHZ41K$;QaCxFTkBupcn1B{iX$3Oxo z9Bf0BW4+E!MNVP!Y%m8oHq#uLzOWVp=jBs_-c+~yQNY7$7Le#f!=~>ogPk@)xk0|K zpuVouLj`ujw_X-9m^VxXMI)XN=i#R1XiBsN8cs6?IX3F-uZ0O3 z=2pL~NY&W!_VJ`rv%pF%_70MD#nb8G(wK95siS+roSwE5X#FhtBQZ&?JzbHw-$*`aoAYp@g2oRx*8? zj8J+l*xd6bJ8C&snC$)ddC~A)uR7NR(x8X0F=KBT!A5N0FUt;NUqj!=EPUc>3|vZ` zbu-5bE!G4L%*!?^%kweA(TSlFJ4&vg6;vA)?|R}p2&}~DTTzb=W&dCpZ?F@ncPY#qeKNUgwk;Zi`B=?bIcc!1;H03BO+-0njdQ*KTN?Y)&2aE6 zuWDa{QHmfZEQ%sypUJ+21i|!FRiB`J==F8!c5s^M;e0D+t-(5s;2~6+d)nyO894*O zI%$r~J&BEik;{E*4sx!~XX$IvQuIn=&_!tuJKAO_6F_$BO}2&aV<<{qb~JJ3BuVFHpDJ&1?I^SWCM?ccMCG|j zm0x+T%1yRe)_g2cZ82t#&$-XB4Ew6i<4dphk|nKe5KXGEkywt1r?=)OxKZLzj-yLx zbai$N@;jPZr>x;UGkyB&HXMF)@--`GiTZ*6TVP4b8or=7KBjBxM!$k|rzTh&axUd( z$eksx6LGQ`tAeLf%7)0{un$D%Eq9exeUwODv+pvi+lZ)Y_R<)X+VQ;8yah15DvxBE z%9=5lU)T`%;z;c^K`|lPu&}%J&Aw< zA8HqmIu51wEf8IDVD1_yJ01|Y>Dve5Ly*p)T_nja#PRZ(ZX>n{Gx#KGw+!eVbS%5U zuzpT^2fciZ>mNKLSlE;7HW(kLJ%e*z(-|HfigRgd&ECrQsh!0iVvf)$SU+9Il*K!U zB%$lYQbKpy)z*N5K-l!9|I7-E!csknwm`dFmIQ_vzSg9q(9{^TKU72<|4Fe=?9Dx+ z($!OySAmtRj>|e!od$Whk(~i=34RPgn0vyg>GEGM!~s}hj~swd9Ykv7^p#i`m{b`a zte?{wGRI@Yzjk7Y(hQahw&_KlNGyWoLms})BnNTCMbau%Q4iaqx>2ba3})TlA9qK5 zzG$l@ZQODHt9vWH4_P@(ZGtET1vb0Gm|V=RI21vi^yXKLItMv98tK!FWN9E4{wYC;8HU zuR5L#T!zTsLjgd1Wi;wc)aQl>6&%HDZ$Y9``(x}loOjW~>8lJ{KA0O#-`}*g;M367 zk3{Dr%NMBNH+V@2+dbYIUOk=-|1*#QAu%^WQL#`03<3Is#@=GB8tdZ1TvxY|>i!jU z?AN5~{u;8ePK|AgKEOJov*dYzVe9OW8ob&S7|Yf6U79t#E}sprH+}DGmUAVzKpplp zDKyakqgN)$KQyG&+=UhJ`eI*e%*5`VsAm18@@Zmuk`1wDaH05-3L~>O8|;)(y`Olk z$u>d_TKsQZbDvuu7*>DS z^1AjyREbH{*=gMstuWnC;9ZC1&VlxR5Zb!|OBty3X|BC@rj%p}{wgDV_f$K0D%aOL z%RZL%lLjRecQ+JwH!1F}uE2a~sMd^Cu3c`|5nb&B#Y0`^ifm;D+r{NP&a(++eJ5Ae zL!bbZ6UursR3M?OLwVlZhu!cEud~r$H%;viqgY}-F`1_gdy^T;6?SG^B|*yv%0}A0O4d1>1iyXt)J3e?fSKIS8*dOPD0E!w0c5&MdvY-R{tQX!56e^Cut9=x*ZeP#I`mV-eOu zGa?QocE<^CXfo7xcRff0EP1!-bF8#-9+gK&&3@bzXMlt{kE=IK$y;P# z^s})V9=&HN&n5g}$Tg5UPC|ga^I?mDsg8a5Y2~lnOcztH)@T zy=;@R{ATQg=&ecnBlIIXDzf;2N?p$)igy!q`x#ZJQ)j!VoU;5dsq>KR=(l$i<%Sl* zn%s2V*@Oe+qVJpR0~|VGwOWOR6^mQne^oKHKDnB zXzpMgTyuvc>`G|v#z=_8LC&U$AP+R^VJD*BhQ4klT`c-oCNd_qG70smn_o(J{;EM~v( z3f~Jl2k;}ne)@K`8e0z=b~*?QF=mH(HWzy99>!2?-7>KFq$>!qU&;OpL)x~$-DFSO zP@w`~YRC>J>|d>F&Qlea#N~nNf6BoPUng-;27irhh=tXbvR%=BD1|7T^ZP5$hTUpJ zc|MXFQC^A6XiBE1-uC9;r%-R8g1w7#8x)C}@SBLv&$Qp}m^TMKVKiv@cO)ej5y9|^e}H4--*0cY~n#((OHa?dq1Gx8CvGe`dJ z$S}=H?I1d5iMvsq9gQ3wq1%sc?ezGtb2&rJK8YJ)UrUdE&)4HJTuneQ=RA&eiG^|E zFFPE)Su0(A4Kc6eo&!9xSHW1uy!tK0u0gY7Uw=~akOw;AmC zLxaHn9yQhQLLEwOy%}1NW`@RtZ$PsyZ?T^ujmvdPxht#;%{!_LwJAd<00tPr^_k#^ z_=|J~aNB#xqyp2)L&AV%Z}Dc33-(_N1`@i<&LS>Y9s0Ri{SI8&<_AyN{nx@Q=D!ek zk86ptfDMG;9RFAp+6i_#N`6djz)Y#RVrIzS;50+}S|`$A4{FXM*92Sh1Oa)SA|xQM zTZ9DAv#lAHW^^Ff?7-M?lN3(Vg3aB5hWPr3n=PL+2swdPTe;qhQ}%-xHZ~Sa(y%Z< znSCsK1Ltp8`C8LA{BcMdze9^TR$?X%HBxfuEa@XOD}80nwh9G1?Q-p=X|LPL9r-cG zuP_%Yd9Os#w{f4v2dv_z{j^du8!|>%vgrt0q*)haZ(tw9Hgm(ee<14!9HEX;> zZB<@?#A#Jt*}$y;L0l$&m&9!kz2f-%sJcV(?l6=oEt=(j6x?o+Jsz_K6Ow|P*xham zCT#2gT&Imn=BfNX%?Og%i{aK$o=U{NYVO}nv3z>}U&t_{3G_w$JQ&Lh46Z))xDPz| zvKctFi=&p6DjDM&qcG;^#b1xlLOl20;S#={<|ieP(70}ZbCKV zK$i=@AFpOuQYuw54%MW@s~JYs^y2%bbqlJ-Iwc;37 zW-~@aTW?+J4}~uc>D%$~$NkF;kMI7pZ1B+HG^J)Qv`WJoV%(%CHCwob3FjJX$}o97 z3r(Cm)!-KTPQ-DCntEwRl7<wij%O5)6ARD94H)w5;#E)6edCFw`$lmSR`a1!OWq`t zLypT0GQ?$nHpQ3w?-SMB-zhc3x29M*htK6+atqGx{?Wp(497Fv|WhtokR0v^YKHyYk|P|v+ye$)|)>_`y*@_+`mltmUWdJrjj>e6&og5&cpFc zWb}YxsF%Gf+21U1Irq2fDrv__*{y!0EWZF8f=`2Vtum6B3+#QL^|`MPetI_sSqGa7 z=J;zF&oFHzxq~%bL2Kt-omZViD z1rFDf8#pcJXJW}wdp`N2poM&LM}b^{_6^tUWKPs$c7F$ z7pPkU{dILm*;kwGN;|z|XmI0Q=2cGw`Wxz|B=WY(e@%AfD|$GZbf%N~F6j4c z{&c4~1-ZioR_;-+m3~fty6+OhyHYSbTnJ5HExL${E-<=fXq*U?#?*&M;ZTQDB#6{o zUl4M>Dje#Z#kfxp!aGL(bgWzOw|3%hpZRa|FkBrHEz5MBRl>Lt1g(Upxej!-!6H>oP_V2zMqy`HiNR2oYBy6vv zB&1+5B=Edparaf-s)Qi}R&stilE)LcOqgtgp>9=zbyx#hH5fj@#RDX=Rv9%Lz-gBG zVP}RB0jCkkb0AFUvP9f^;R^Z!5uZ4Sk~IUX4OSSy7AUWSlv|DUT^4{1nR9Sik9V0! zL5s*qCFJ4F5bWB7Gbki;YZ4LbtRfB0dIp2jFH9BEsqO+Tlm{E1*LP2i&D(GII-Nl; z=~P0yXi)I@01p$_i~J53mpXLS2#K4_&!({9Z^Ng$79GV|BDdP8iRH7h5EMMRgOw>Q zWPvwu2O^wh;6~T%g^mR`y0CPkdjpwmesZHDCzLuXJt*AhybbWZc$(i@nnBnwvx(p# zN~(dYCxvk7G=i1)u7}*}f)^hrw}< z*o9S?+J`n;yuOd+4CC6=RM#!Mods}$*~`_%^VQ3P%86U>8p*tj^Ya?!g;s|J{mY^z->c~`0vu-GJ#VS+vvjWT0hq*oQJph zM+CcY(H87V@ehQl0JoD+B9b9^%2AS0M{)2ST?*T?e`%_l%~|S1{SLU>;`}XknZ~kl z4}(J^y>||f=6QDc)jgu|Mb~EIuv61;p@Ml~y7{0x5 z@_!+4Axwo&fnnj+#_%17K*i+)dTFSgCA)R?c=;7@IMdYDvOh%A{#r!4S08&p|H-e;VBh7sFR z6KkMp3w#_M$nE`DGTe8hFX1M&{ed^zKY@jyXT6QkV%{ix2u7hz3R2q$js=*$0aor3 zt-AYG&|hV~!G1mtu{vwxmZP?5xZY8zvVJzxt#d{hTL9O(> z5s4M4*v{TlD3H_@VPu4UQ)|Ju1^sd^v2tr+-R$b=)KGPg#mv1E9X` zig!DbXc%9~{ONp9XJiP|z=s&G4SiPBjcj|x#k?=0jFl!7>u~7W-#0hc7VL6OZP`d1kQI`=V|Ob zohc@6B&nuoL(lqq*v}1GXgE-~c6(hX%t$oFjI_fE1TPuA<5s3bp*bkE-vwEF*l#j9 zP2l#fCJ#^G!!<-}a3nNcjWGXrv|?}_+hC^gw!RA0H0IiBz=06ihw(Pn84Yn>W{zCv zzs|#+OG5(riol51LI&`VV<}z~dFWarav+7+jjI)J`qUa~%R|F3J=q&P7ViX<4XU#J zO*D^wrQ&%?X!vh&z%j1neZyM@OWm%IyrE(UzMqR$aL40eA?kTYtJ+9+7aKda!Z3}^ zmtu76_Jll28v5>OT+933DEVVAexoUAde%{VJG1b08$DgBDMP1G+|c2O8>-RMATziw z(+oy3!8khu8)dIO7H?g49=Gh&Z;VY@{5OmPcOf0Sf}LlCBUwR23r*{9CqJit;I3qG zoI)1I8_42#iDvcFtif1Tjiu1CnsC%1KePX-=wO$lq>x6Jq~9mkpjr72&6?!U*kt^T z$8&xv!l?-3Z#q0Y-bf)oE_EGBMZT!(cQ>DY=H^0sK4qBPeAZ|F9= z7mn&lwA2LeuaJH|{P=M4caSZ32`o7eU4(~Pm;zQ1{iM3H;VS%T^vBSbU+~)BqbA(0 zeb^9bh}K;Pp#BhDDBeab#?ox<^_37rw%seOGv3uN6+RDO&@r^OCkcR(H!k7DcOS zCh-qZjWy9>O?I#;4wmnL?rTj>Wm8gFeyTOmX-#&rDNcs9gr%6K1Kb1a7po-uATEL` ze#o6aEzT&)E(i6Jr0_sET3krr-5HO?1q1w}A?p}M>UOO&ed}l)yuNK7ww2_Y!Gx&M zfh1$JSYz~FDuU9)gUYVzDTTd3jTj6!p|TNMqLEYfic!2;+?2J!Gw!ASTx_!C{bjXD z^bEg2oo!QAJORd&B$sb;x8k*h>UAWplY}}~#Cq+Ae?Y#U!I-m?mj9`4b#uiqmh+Sm+gP)WE6RcP z=-~MM9?mkp9n6VTDDSP1@6Ys+?@#bXA$N&+L%#F2rMR~SYSmp_wok-6ekAdAwl&g@ zTcNF6PhkUCIV-f#q?me?p3_%U+cUb~Nw*oLFqQnG6ETXej`T4!C%2Cxfp z0)eC@8T`RRUUf*tsGj}U54Wv*&L*u-lpc(Zq=W%%fX0THyo&XX=xe>`QOawu%yC#P zycFhjePO!Jn32yRwm*f~{sM;+i0#k0*!~>cmAgFGkOb_J*T=cMKHh=7(H7@?5+N*J6a8#arYRmMtBfEX{b9N$^vOaQXfYYSnmsl+W62= zlbz1SJ(>{FtFgN1E{VDVygcB6oWGWL2O@fj+x1SdGA|;}GB~4jfN%bWM6}lNu3P)$6Qc@bxTPNeg%1Kl29J13^l-$)9C1<9i?xalfpeB z87Dm6jO-5@Jhz4mK_D_I6s(%dF7u`*z zXry}$?j?%EjsUoifjBK6 z1hA3N-+6v(0?A!g;J}3r){zyYS`$d(vH~e|F?=a>H`8|S(a%Acv>U*8DrVs%35|mG zec5H0EzZx`I6RF)6iY)Iad48TaxRtSAsVqOO!Mbh>h*2#z;1O`Q5=aD@$-a`$D)yI zWi^QkAeBXvYt2q3V{~#J@;j)eiS;wTPi$$co!b{3{(MDPE;Xf;nr`@4j zpfA|lM|*H-Xjp~AJl6f0)(yB6F2n8JK)8%8=JFgf3;nn`Rf}y7w2`pqFS?)g{Eqt= z{5}Gk{t|cJ7nW3upW>|vWVohZQ=k(q%!6b;tOL>oN8Dn)jIOZ}B41Rx1|k2K{a67+ z!kU)@iyE)e8V83#ykF%BmBW4{{5s+7$lo&%A+iSx2QfYZ>~k!sds#s!7p@5>lj$Q^ z{*o;)7>TR%RmYmLdlF6L_sd;lgaYFAc#W-t-3&*FEAm77Rd$G=i~2V4Iy52Mo0-&G z={?SK$O&Ovg!Qn9C`4L3~9+&vj0L5WXp&pkZkVXyfWzi)zfU}D~y&jNS8IThu25tHtWai#D++=I+!cPiou z4T*UY$4MM3ag@YNiNiR`x75AXL&I>Tjumv{hM^Fm;6uD~s?<)zgoW<4~{?o z`-V^JE;f{TZFuOUhh4?Woc9oLP@vQB*?B4=4;3r#zK=h6yv{!iQ|gh!csM~1NAYl` zSSkJr`pC{z#md4j@$fmm_I^S!c!>TDS=!@;zUW;@R~BqZDy1oV@jDy~I;a@cv8Pzs zhqoZ+HzM4GFxuaD4B^cPzl}2^L;ycOb}KbkV^R!8i5FdqUqS-z#&A)={5IeL;HT(j z6t#az4Iae9d(^}Sc=(9gL(JZFsDD46QDi=z=Y}x>6|(#h>d4!uV*|EpF@C@TPTEZ!ea!5$D#0Z$%W76F5=FkD}X!?3#|5r@Om_QkP0Uf-X30vSmk9! zdC4~bCUbMQk@)YI@QhJ-s0HBTfb6J)veO{ER{1cm^*xQj1(x3j!NTT-sXv{Mh$fd8 zHX;Xczd#qfbi+%%yjiOIY;>+?fza14 zyiwHgCEoqc>PzfLOjeea>>x!yK7z(^zgJWry_^@}kLmQCe3?l-0rP+`rs|d2a*P)w zUvF4bpyN+yzt~L^fbh=$O*$H^2nRsg*uN_0h!Y$}}sCu7^ zThR4%3rg<=*!>s5@fSvU{aG^2>(92uZ$jZdI?nWciDKOz*LoZnUXmwET#1seFz8Jg zI#3x3lkd=pZTM@2hz|3+P`KS~G8p9A2PR(4ydOVL)6tr+-A`!=>6gM?m`wL!Zo0pY zO!paNx_4^L`m@|&mtIFa$1^zvUx*$Q*NJYEEeWq49_KSu5B7?mSi*6Kvp~E$!TEP~ zSSqo!BNF;4+ZjBBtAgCM**oz*&=QU1uEb^NQswz3<(1R+E?5oKNB}@8Ea9-sa6`qj`_`Exg{oh;c&WzY4~?1}ozt(qy>n z7k_0WJKSf#!eS5pUT1_Jj#(jU90y+NN}Qjnp0)7ct+ZF3B+rE3LN9D~^P4g3)H>+5 z202{dtuy#3V{qwNxHhI&+->J_FdS_JU#C9V{1@S_O}>Gi^usm1+-$&t@CwUVtX(l~ zSML;lXbn_7e_=tX{qK0>14_*I6rXdkHT~^;HGPE=T7hKZI|aVskCC6xd<5WNm<}gv z2x%D5viHJe`Wf6tD{HtT8+nB-RCoGsL3`;7^I>ugJ%ShNagwvjTdmwRp=p=c`HFf% zW2hV24REryZVuZ_QeZghNN z*zrn?eD(a3A@)Y`;yLG#X)r`%mRB<8qv-E4nsA(Km)zuh)ISi5KuSCJaDj?~H^Sf| zuPmR3^Ix!hu`Qs`D|};Byr8EnzmyJzUweJ!9OrNHzewVet>PTWIV6;Tk0gze>UAd< z5bzr7%O(G=`vo1wup)tBQVelLCh@aHV3(Z6AH?9`WCN25r(+xt5$!*pzh-9V=PUSZ z`38X4s%RQ?^?K#`u<}YL`Tb*iU}3oZUkiSfQu07SXjZLbQs|z?9Fs$y$Kd!7b-Omj z=^HP8XLVzRt8}%rn^zLHcQ$LBLBQ833v^ent2ZdmH!81m*_)fGIU6n(aqG7ZjxJ63 zi==9JM>+5^@A;pREPd->bMwT15+FgJc-J-Gay&o9m-Pa4HU8Fu-v>s9yRCkPI0Rd8 z{-?K&S|?eKUGTGMfjV4GKQ_bt34Ftsx~Dwi*K8N_g@JMT#ORQDmCl>cuTKy<{DK zV-c#Z&Sqt0>i7jUXl8TpGiuC}mFi*6tn3YtXQIvC4w!M)+T)UcJ$iXIwH?t_ef|*q zKkzBHmHUfI{l1y==FGgWu=IZ0?0K{OgtKOs`WMceQ)(+IDxN*Bh@vuYv<=R*mEK?I zpIM%#Gp)XZ73CZ+LC&Yb5fDy8ntob}_GzM^@)*&^sJDVbk#V`k}snI)w~ zywE6D=Deb!S*4k!{+aV;%`BOfIe&qFHh!Ns^FH+P!NIm!Me}6Vct>O>=vmR+ znI#X>Z<>ftmBc)WnG(|^rb={3&pMBrjD-@ zEh7C<&*DhW(4@Z>j>l6P5kuenebf7fG#TXQmALz>0Y7t=iaMDSUJb|7K{?< zFP|fQ?6o5OkLO5lJE`U_8k377s5rNZOK={PPERg9Dcj z2=%XZtl&F@@>5saekJnLe&L_LlfMiZ#{O31r~UIy`Ts!qSBw0#pL*q=+PgorE#9LH zZ;1S}cxHUX`y<2DZ(4Oj=A(VaKkqLFDAA9BN(@)C(9`e_(7x`&_ep7xY^5kt0`Dwp? zQ~q4!32zelY5#sx{yE4~|BlE{`}v#lKTGv*5&3C<_sZXAy=lB}BmaV(B0uf-Z_3|| z{H-5|{Bj%itk1;YfaMA57W;wr=uw%U_(8Aw&ock_Ab(z)sGs;lul$pG(<}9VIr1;q zFY*(==#~F0_5T(5t3DF>sc+wu|5M6;SmY;u(kuU2=5sjuQ1zL}PyD4<{1Y_>6tKm+&}pvz{<_;;Xgv)%kNpcnCTfEOda0O&?|0uUl6<7yc{ z0yr7*7XrZ&GMvDP2oIF$2f+U*el74jKm`bqm$CnLo9!ClPT(NmNQnc1)J`|}DnwsK zJCM>30I8iFK#25=EkJ5#qfCEM#;=_!>VFJ~>CU)NVEG`RhWsB*5%GH^{tFPFi~=B* zBx52FQ&j)TP5cR$RqzCX~3@EMONe+o$H9|0+TFObS_2U7WUKu$GKzpy-)%tZ=M6IbI+=cjOg~?ypF}1qe+)?F_XDYXD-i$2 z{1TnQ7QE;cWFkxfQu=Omiu$_+h^oefflw(kUIF6Y&8zX1fq&1-@L=FjgroVQdgIje3>PB)1t6lvR01jf`_R`26(GeQQAPN!>jhp4BsyG?EpW+LF>htS z%Mkx#Af@|&G(UF%od{0_(mYO<>De;A?K-|6%eMgS$kzg-{rE>9t;cF$3c`zJdO48l z^#dti5s>N~E7M&v{^>DdpZ_b6>Q!WT`)CpW2Z81P3dGRI1Z4b!5-*qO1AtUMcCBdd z2$1@BD&u#3TeQCwNbyxNe1pV+0?UuNM87rx z`ypRMVy?jQYk*Wf6G-hTK#&tm2ubDu&oMc=q!zZ%1{0e;vr1FP=BoE&g@pHEUo$xi{bi1@j6z*M9&nZ6h}2v_9r1qy zQohYVn%71k#-H&TkoxzEO#h9He;!EXp9WI-5Rk^d1W4r{24a3PN`O>;u1vp2#!m-Q z`KdrEuLG%nHv_5sSRm#v!v&=BSu*`X8SeyA`GG(xe;UlaKky46l|KY@AlwF|@_S|a zMj3xMm^txl2awvW12d=aPr-x>OZ{^}DWm><3rOWI2U30Mz%-x}NOWWeQhU2GdDM?>KnlMAr2Yhflz)zlF9K43 zegvd??*dXiR|Ao+d^nK$)lbHEpixlIeev@xK95`R9OCz7~jo8B6g+icnciQNc9Z>QhhNbPDHp1Naa5QQv6gP?JE;V>l8*J-)9nkD6m`y(!RJ##$PUR zCn~{XM!CcXfwb;-0;#?!Kw8gRfo_z~2GY7;BGbF)%J&rtQ$P0rsr+^z#nXTP zLFMU(@zK?cRX}R@X&{xSvoxy6r~y*>Dw$p^<6lCfc+B{j#2*VRp8}+DWy<)ACBB5l zd47ot1eQ++YRG@JjHkCBDBrv2B(S^*h^UOeQm=u(#uxSbX&|c3cnC=8bAi-v9}u66 zd+uCFV)YlxUOKhJN62Kv?1` ziB%Hsm6#_nQzC$u+kwJEu+VqUq8OWPzYO0i!|fCXVZ3;!NIyXe?aC> z#ki=x1u{%_HYy+g|7nRHDEvcN{tB6Ynan>*hU;XQ?3z^HN*N}*7ll{JFwHB47s>D> z8LpDy+hlmP4BsQe^)ft*!WhquvOfzbj13Y0|8D~n#u(#v@}LaI?c($s)HI&o%K3Sc z!VdhVn5_SoG8~rSf0z01mib?l;c6LvO@=4Q{xr$(?J~SchKpo)y9_@d!+T};K^ZqjD#KwJJ|V-aW%x9OY5aGK^&Nn@q47m!x+23{WO$eicgXNa3R8L7fcT7(=?*!* zY?mzaA6e^s}M`iL)3IDW6PK!(He9;i)*=S;mPkyM!z4E`+Ck)-9SNiLH!ngIQe`237sgKG1 zq2Dq}4sYob{+B-a@9UF(SD&!0aCRv?i002FR~Y;U)I~+MLg5l*E94$Sg+=7Pga7Zk z@V-ZiO6J?}|C%RzDHR45;6D;Cg4+_WpvOn4a322u^P)LLbBpHrZG{OZrb6EXMKc%l zwCJB%a(_|67l*u=gewp4%B+Xy*^;7A)b}9uq|`qPy;^|&K2$Q>j~*8-nvF){9#e&I z=PAYiq|JN8|C{cTB66zoV;D)jr(jR-DMU5T^gW0^K3I5v0DeimqsVv4R#-Z}#6Jf< zS=`mBa6y1OX%(XWqB-+RFo(1K^Gj_MFaQ5?di0@KkGGZ$|93d|zQR-&&GjvKm=Dtb zu<)}Ila+9$D(vG;RhZ;Q#j`FTHz*k^E3y?XBzLCl!qP|Lk2X)?b?8vG8jmQ1PnoUo zq51J_{7L4LaDzy{o>xQZ*Ncc75)m>-P9h>lRxir%UZ9Xb(c*oyQZ$G7Pt#|Y6!{V% ze`&mr */ -#include "nautaux.h" - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#if !MAXN -DYNALLSTAT(set,workset,workset_sz); -DYNALLSTAT(int,workperm,workperm_sz); -#else -static TLS_ATTR set workset[MAXM]; /* used for scratch work */ -static TLS_ATTR int workperm[MAXN+2]; -#endif - -/***************************************************************************** -* * -* ptncode(g,lab,ptn,level,m,n) returns a long integer invariant which * -* depends on the (assumed equitable) partition at the stated level, and * -* the number of edges betwen the various cells. * -* Neither nauty nor dreadnaut use this. * -* * -* GLOBALS ACCESSED: bit,setinter() * -* * -*****************************************************************************/ - -long -ptncode(graph *g, int *lab, int *ptn, int level, int m, int n) -{ - int i; - long code; - int v1,v2,nc,inter,cellend; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"testcanlab"); - DYNALLOC1(set,workset,workset_sz,m,"testcanlab"); -#endif - - /* find all cells: put starts in workperm[0..n] */ - - i = nc = 0; - code = 0; - - while (i < n) - { - workperm[nc++] = i; - code = ((code << 13) ^ (code >> 19)) + i; - while (ptn[i] > level) ++i; - ++i; - } - workperm[nc] = n; - - for (v2 = 0; v2 < nc; ++v2) - { - EMPTYSET(workset,m); - for (i = workperm[v2], cellend = workperm[v2+1] - 1; - i <= cellend; ++i) - ADDELEMENT(workset,lab[i]); - for (v1 = 0; v1 < nc; ++v1) - { - i = workperm[v1]; - cellend = workperm[v1+1] - 1; - inter = setinter(workset,GRAPHROW(g,lab[i],M),M); - code = ((code << 13) ^ (code >> 19)) + inter; - } - } - - return code; -} - -/***************************************************************************** -* * -* equitable(g,lab,ptn,level,m,n) checks that the partition at the given * -* level is equitable. Neither nauty nor dreadnaut use this. * -* * -* GLOBALS ACCESSED: bit,setinter() * -* * -*****************************************************************************/ - -boolean -equitable(graph *g, int *lab, int *ptn, int level, int m, int n) -{ - int i; - int v1,v2,nc,inter,cellend; - boolean ok; - - /* find all cells: put starts in workperm[0..n] */ - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"testcanlab"); - DYNALLOC1(set,workset,workset_sz,m,"testcanlab"); -#endif - - i = nc = 0; - - while (i < n) - { - workperm[nc++] = i; - while (ptn[i] > level) - ++i; - ++i; - } - workperm[nc] = n; - - ok = TRUE; - for (v2 = 0; v2 < nc && ok; ++v2) - { - EMPTYSET(workset,m); - for (i = workperm[v2], cellend = workperm[v2+1] - 1; - i <= cellend; ++i) - ADDELEMENT(workset,lab[i]); - for (v1 = 0; v1 < nc; ++v1) - { - i = workperm[v1]; - cellend = workperm[v1+1] - 1; - if (i == cellend) - continue; - inter = setinter(workset,GRAPHROW(g,lab[i],M),M); - while (++i <= cellend) - if (setinter(workset,GRAPHROW(g,lab[i],M),M) != inter) - ok = FALSE; - } - } - - return ok; -} - -/***************************************************************************** -* * -* component(g,v,c,m,n) determines the set of all vertices that can be * -* reached along directed paths starting at vertex v, including v itself. * -* This set is returned as c, unless c is null. The size of the set is * -* returned as the function value. * -* * -* GLOBALS ACCESSED: bit,setinter(),nextelement() * -* * -*****************************************************************************/ - -int -component(graph *g, int v, set *cmpt, int m, int n) -{ - int i,z; - set newverts[MAXM],*gx; - int head,tail,x; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"testcanlab"); -#endif - - EMPTYSET(workset,m); - ADDELEMENT(workset,v); - head = 0; - tail = 1; - workperm[head] = v; - - while (head < tail && tail < n) - { - x = workperm[head++]; - gx = GRAPHROW(g,x,m); - for (i = m; --i >= 0;) - { - newverts[i] = gx[i] & ~workset[i]; - workset[i] |= gx[i]; - } - for (z = -1; (z = nextelement(newverts,m,z)) >= 0; ) - workperm[tail++] = z; - } - - if (cmpt != NULL) - for (i = m; --i >= 0;) cmpt[i] = workset[i]; - - return tail; -} - -/***************************************************************************** -* * -* nautaux_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -nautaux_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in nautaux.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in nautaux.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in nautaux.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: nautaux.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* nautaux_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -nautaux_freedyn(void) -{ -#if !MAXN - DYNFREE(workset,workset_sz); - DYNFREE(workperm,workperm_sz); -#endif -} diff --git a/tools/nauty25r9_mac/nautaux.h b/tools/nauty25r9_mac/nautaux.h deleted file mode 100644 index b98af32..0000000 --- a/tools/nauty25r9_mac/nautaux.h +++ /dev/null @@ -1,34 +0,0 @@ -/***************************************************************************** -* * -* This is the header file for version 2.5 of nautaux.c. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 26-Apr-89 : initial creation for version 1.5. * -* 14-Oct-90 : renamed as version 1.6 (no changes to this file) * -* 5-Jun-93 : renamed as version 1.7+ (no changes to this file) * -* 18-Aug-93 : renamed as version 1.8 (no changes to this file) * -* 17-Sep-93 : renamed as version 1.9 (no changes to this file) * -* 19-Apr-95 : added prototype wrapper for C++ * -* 16-Nov-00 : made changes listed in nauty.h. * -* 3-Nov-04 : declared nautaux_freedyn and nautaux_check * -* 21-Aug-12 : remove nvector * -* * -*****************************************************************************/ - -#include "nauty.h" /* which includes stdio.h */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern int component(graph*,int,set*,int,int); -extern boolean equitable(graph*,int*,int*,int,int,int); -extern long ptncode(graph*,int*,int*,int,int,int); -extern void nautaux_freedyn(void); -extern void nautaux_check(int,int,int,int); -#ifdef __cplusplus -} -#endif diff --git a/tools/nauty25r9_mac/nautest.c b/tools/nauty25r9_mac/nautest.c deleted file mode 100644 index 2b4adff..0000000 --- a/tools/nauty25r9_mac/nautest.c +++ /dev/null @@ -1,126 +0,0 @@ -/* Test for basic nauty functions (but not nauty itself) */ - -#include "nauty.h" - -int -main(int argc, char *argv[]) -{ - int i,j,bad; - setword w,ww; - - printf("NAUTYVERSION=%s NAUTYVERSIONID=%d\n", - NAUTYVERSION,NAUTYVERSIONID); - printf("MAXN=%d MAXM=%d WORDSIZE=%d NAUTY_INFINITY=%d\n", - MAXN,MAXM,WORDSIZE,NAUTY_INFINITY); - printf("sizes: short=%d int=%d long=%d double=%d\n", - (int)sizeof(short),(int)sizeof(int),(int)sizeof(long), - (int)sizeof(double)); - printf("sizes: boolean=%d setword=%d\n", - (int)sizeof(boolean),(int)sizeof(setword)); - printf("CLZ=%d,%d,%d\n",HAVE_CLZ,HAVE_CLZL,HAVE_CLZLL); - -#if SIZEOF_LONGLONG > 0 - printf("sizeof(long long)=%d\n",sizeof(long long)); -#endif - - printf("defined:"); -#ifdef __STDC__ - printf(" __STDC__"); -#endif -#ifdef BIGNAUTY - printf(" BIGNAUTY(obsolete!)"); -#endif -#ifdef SYS_UNIX - printf(" SYS_UNIX"); -#endif -#ifdef SYS_CRAY - printf(" SYS_CRAY"); -#endif -#ifdef SETWORD_SHORT - printf(" SETWORD_SHORT"); -#endif -#ifdef SETWORD_INT - printf(" SETWORD_INT"); -#endif -#ifdef SETWORD_LONG - printf(" SETWORD_LONG"); -#endif -#ifdef SETWORD_LONGLONG - printf(" SETWORD_LONGLONG"); -#endif - printf("\n"); - - bad = 0; - - if (8*sizeof(setword) != WORDSIZE) - { - printf("\n ***** NOTE: WORDSIZE mismatch *****\n\n"); - ++bad; - } - - for (i = 0; i < WORDSIZE; ++i) - { - w = ALLMASK(i); - if (POPCOUNT(w) != i) - { - printf("\n ***** POPCOUNT(ALLMASK) error %d *****\n\n",i); - ++bad; - } - } - - for (i = 0; i < WORDSIZE; ++i) - { - w = BITMASK(i); - if (POPCOUNT(w) != WORDSIZE-i-1) - { - printf("\n ***** POPCOUNT(BITMASK) error %d *****\n\n",i); - ++bad; - } - } - - for (i = 0; i < WORDSIZE; ++i) - if (POPCOUNT(ALLMASK(i)) != i) - { - printf("\n ***** POPCOUNT(ALLMASK) error %d *****\n\n",i); - ++bad; - } - - for (i = 0; i < WORDSIZE; ++i) - if (FIRSTBIT(BITT[i]) != i) - { - printf("\n ***** FIRSTBIT(BITT) error %d *****\n\n",i); - ++bad; - } - - if (FIRSTBIT((setword)0) != WORDSIZE) - { - printf("\n ***** FIRSTBIT(0) error *****\n\n"); - ++bad; - } - - for (i = 0; i < WORDSIZE; ++i) - if (POPCOUNT(BITT[i]) != 1) - { - printf("\n ***** POPCOUNT(BITT) error %d *****\n\n",i); - ++bad; - } - - for (i = 0; i < WORDSIZE; ++i) - { - w = 0; - for (j = 1; j <= WORDSIZE; ++j) - { - w |= BITT[(j*97+i)%WORDSIZE]; - if (POPCOUNT(w) != j) - { - printf("\n ***** POPCOUNT(w) error %d %d *****\n\n",i,j); - ++bad; - } - } - } - - if (!bad) printf("\nNo errors found\n"); - else printf("\nXXXXXXX %d errors found XXXXXXX\n",bad); - - exit(0); -} diff --git a/tools/nauty25r9_mac/nautest1.dre b/tools/nauty25r9_mac/nautest1.dre deleted file mode 100644 index 07d5917..0000000 --- a/tools/nauty25r9_mac/nautest1.dre +++ /dev/null @@ -1,58 +0,0 @@ -!Hoffman-Singleton graph -n=50 $=0 g - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -$$ -t ? x o -c -ax z jxz b -_ x o -f=3 x o -q diff --git a/tools/nauty25r9_mac/nautest1a.ans b/tools/nauty25r9_mac/nautest1a.ans deleted file mode 100644 index 5cd01ab..0000000 --- a/tools/nauty25r9_mac/nautest1a.ans +++ /dev/null @@ -1,149 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=dense m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -(5 45 35 25 15)(6 46 36 26 16)(7 47 37 27 17)(8 48 38 28 18)(9 49 39 29 19) - (10 11 12 13 14)(20 22 24 21 23)(30 33 31 34 32)(40 44 43 42 41) -(10 20 40 30)(11 21 41 31)(12 22 42 32)(13 23 43 33)(14 24 44 34)(15 35 45 25) - (16 36 46 26)(17 37 47 27)(18 38 48 28)(19 39 49 29) -level 4: 11 orbits; 10 fixed; index 20 -(1 6 21 23 46)(3 5 25 15 45)(4 7 37 27 47)(8 40 26 41 49)(9 42 14 44 48) - (10 13 19 22 38)(11 18 20 34 16)(12 36 31 24 39)(28 30 29 32 33) -level 3: 5 orbits; 1 fixed; index 36 -(1 4)(2 3)(6 9)(7 8)(11 14)(12 13)(15 45)(16 49)(17 48)(18 47)(19 46)(21 24) - (22 23)(25 35)(26 39)(27 38)(28 37)(29 36)(31 34)(32 33)(41 44)(42 43) -level 2: 3 orbits; 2 fixed; index 7 -(0 1 2 3 4)(5 16 27 38 49)(6 17 28 39 45)(7 18 29 35 46)(8 19 25 36 47)(9 15 - 26 37 48)(20 24 23 22 21)(30 33 31 34 32)(40 42 44 41 43) -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -cpu time = 0.00 seconds - 0:49 (50); -level 4: 11 orbits; 10 fixed; index 20 -level 3: 5 orbits; 1 fixed; index 36 -level 2: 3 orbits; 2 fixed; index 7 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[N4fa37bd7 27e16be2 7d20780d] -level 4: 11 orbits; 2 fixed; index 20 -level 3: 5 orbits; 1 fixed; index 36 -level 2: 3 orbits; 6 fixed; index 7 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[N4fa37bd7 27e16be2 7d20780d] - 0 6 46 29 8 35 17 30 42 43 34 19 10 22 1 14 11 27 31 24 45 44 21 7 40 25 37 4 - 5 38 2 49 33 20 47 23 16 28 3 41 13 18 15 26 32 12 36 39 9 48 - 0 : 1 2 3 4 5 6 7; - 1 : 0 8 9 10 11 12 13; - 2 : 0 14 25 26 27 28 29; - 3 : 0 17 23 30 38 46 47; - 4 : 0 16 21 31 40 41 42; - 5 : 0 19 24 32 34 39 44; - 6 : 0 18 20 33 36 43 48; - 7 : 0 15 22 35 37 45 49; - 8 : 1 14 20 21 22 23 24; - 9 : 1 19 27 30 37 41 48; - 10 : 1 16 25 43 44 45 47; - 11 : 1 18 29 32 35 38 42; - 12 : 1 17 26 31 33 39 49; - 13 : 1 15 28 34 36 40 46; - 14 : 2 8 15 16 17 18 19; - 15 : 7 13 14 30 39 42 43; - 16 : 4 10 14 32 46 48 49; - 17 : 3 12 14 35 36 41 44; - 18 : 6 11 14 31 34 37 47; - 19 : 5 9 14 33 38 40 45; - 20 : 6 8 29 30 40 44 49; - 21 : 4 8 25 36 37 38 39; - 22 : 7 8 28 32 33 41 47; - 23 : 3 8 26 34 42 45 48; - 24 : 5 8 27 31 35 43 46; - 25 : 2 10 21 30 33 34 35; - 26 : 2 12 23 32 37 40 43; - 27 : 2 9 24 36 42 47 49; - 28 : 2 13 22 31 38 44 48; - 29 : 2 11 20 39 41 45 46; - 30 : 3 9 15 20 25 31 32; - 31 : 4 12 18 24 28 30 45; - 32 : 5 11 16 22 26 30 36; - 33 : 6 12 19 22 25 42 46; - 34 : 5 13 18 23 25 41 49; - 35 : 7 11 17 24 25 40 48; - 36 : 6 13 17 21 27 32 45; - 37 : 7 9 18 21 26 44 46; - 38 : 3 11 19 21 28 43 49; - 39 : 5 12 15 21 29 47 48; - 40 : 4 13 19 20 26 35 47; - 41 : 4 9 17 22 29 34 43; - 42 : 4 11 15 23 27 33 44; - 43 : 6 10 15 24 26 38 41; - 44 : 5 10 17 20 28 37 42; - 45 : 7 10 19 23 29 31 36; - 46 : 3 13 16 24 29 33 37; - 47 : 3 10 18 22 27 39 40; - 48 : 6 9 16 23 28 35 39; - 49 : 7 12 16 20 27 34 38; -level 4: 20 orbits; 20 fixed; index 4 -level 3: 7 orbits; 2 fixed; index 30 -level 2: 3 orbits; 1 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds - 0:49 (50); -[fixing partition] -level 3: 20 orbits; 10 fixed; index 4 -level 2: 7 orbits; 1 fixed; index 30 -level 1: 3 orbits; 0 fixed; index 42 -3 orbits; grpsize=5040; 4 gens; 12 nodes; maxlev=4 -canupdates=1; cpu time = 0.00 seconds - 0:2 4 6:18 20:23 25 27 28 30:43 45:47 49 (42); 3; 5 19 24 26 29 44 48 (7); diff --git a/tools/nauty25r9_mac/nautest1a.dre b/tools/nauty25r9_mac/nautest1a.dre deleted file mode 100644 index b848622..0000000 --- a/tools/nauty25r9_mac/nautest1a.dre +++ /dev/null @@ -1,149 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=dense m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -(5 45 35 25 15)(6 46 36 26 16)(7 47 37 27 17)(8 48 38 28 18)(9 49 39 29 19) - (10 11 12 13 14)(20 22 24 21 23)(30 33 31 34 32)(40 44 43 42 41) -(10 20 40 30)(11 21 41 31)(12 22 42 32)(13 23 43 33)(14 24 44 34)(15 35 45 25) - (16 36 46 26)(17 37 47 27)(18 38 48 28)(19 39 49 29) -level 4: 11 orbits; 10 fixed; index 20 -(1 6 21 23 46)(3 5 25 15 45)(4 7 37 27 47)(8 40 26 41 49)(9 42 14 44 48) - (10 13 19 22 38)(11 18 20 34 16)(12 36 31 24 39)(28 30 29 32 33) -level 3: 5 orbits; 1 fixed; index 36 -(1 4)(2 3)(6 9)(7 8)(11 14)(12 13)(15 45)(16 49)(17 48)(18 47)(19 46)(21 24) - (22 23)(25 35)(26 39)(27 38)(28 37)(29 36)(31 34)(32 33)(41 44)(42 43) -level 2: 3 orbits; 2 fixed; index 7 -(0 1 2 3 4)(5 16 27 38 49)(6 17 28 39 45)(7 18 29 35 46)(8 19 25 36 47)(9 15 - 26 37 48)(20 24 23 22 21)(30 33 31 34 32)(40 42 44 41 43) -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -cpu time = 0.00 seconds - 0:49; -level 4: 11 orbits; 10 fixed; index 20 -level 3: 5 orbits; 1 fixed; index 36 -level 2: 3 orbits; 2 fixed; index 7 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[N4fa37bd7 27e16be2 7d20780d] -level 4: 11 orbits; 4 fixed; index 20 -level 3: 5 orbits; 3 fixed; index 36 -level 2: 3 orbits; 1 fixed; index 7 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 16 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[N4fa37bd7 27e16be2 7d20780d] - 0 1 2 25 47 21 17 12 30 44 33 6 11 27 3 40 18 29 24 36 42 14 19 23 28 49 16 - 48 7 10 4 22 43 8 32 13 39 38 34 46 5 45 35 41 15 37 31 9 26 20 - 0 : 1 2 3 4 5 6 7; - 1 : 0 8 9 10 11 12 13; - 2 : 0 14 25 26 27 28 29; - 3 : 0 17 23 30 38 46 47; - 4 : 0 16 21 31 40 41 42; - 5 : 0 19 24 32 34 39 44; - 6 : 0 18 20 33 36 43 48; - 7 : 0 15 22 35 37 45 49; - 8 : 1 14 20 21 22 23 24; - 9 : 1 19 27 30 37 41 48; - 10 : 1 16 25 43 44 45 47; - 11 : 1 18 29 32 35 38 42; - 12 : 1 17 26 31 33 39 49; - 13 : 1 15 28 34 36 40 46; - 14 : 2 8 15 16 17 18 19; - 15 : 7 13 14 30 39 42 43; - 16 : 4 10 14 32 46 48 49; - 17 : 3 12 14 35 36 41 44; - 18 : 6 11 14 31 34 37 47; - 19 : 5 9 14 33 38 40 45; - 20 : 6 8 29 30 40 44 49; - 21 : 4 8 25 36 37 38 39; - 22 : 7 8 28 32 33 41 47; - 23 : 3 8 26 34 42 45 48; - 24 : 5 8 27 31 35 43 46; - 25 : 2 10 21 30 33 34 35; - 26 : 2 12 23 32 37 40 43; - 27 : 2 9 24 36 42 47 49; - 28 : 2 13 22 31 38 44 48; - 29 : 2 11 20 39 41 45 46; - 30 : 3 9 15 20 25 31 32; - 31 : 4 12 18 24 28 30 45; - 32 : 5 11 16 22 26 30 36; - 33 : 6 12 19 22 25 42 46; - 34 : 5 13 18 23 25 41 49; - 35 : 7 11 17 24 25 40 48; - 36 : 6 13 17 21 27 32 45; - 37 : 7 9 18 21 26 44 46; - 38 : 3 11 19 21 28 43 49; - 39 : 5 12 15 21 29 47 48; - 40 : 4 13 19 20 26 35 47; - 41 : 4 9 17 22 29 34 43; - 42 : 4 11 15 23 27 33 44; - 43 : 6 10 15 24 26 38 41; - 44 : 5 10 17 20 28 37 42; - 45 : 7 10 19 23 29 31 36; - 46 : 3 13 16 24 29 33 37; - 47 : 3 10 18 22 27 39 40; - 48 : 6 9 16 23 28 35 39; - 49 : 7 12 16 20 27 34 38; -level 4: 20 orbits; 8 fixed; index 4 -level 3: 7 orbits; 4 fixed; index 30 -level 2: 3 orbits; 3 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 4 gens; 15 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds - 0:49; -[fixing partition] -level 3: 20 orbits; 8 fixed; index 4 -level 2: 7 orbits; 4 fixed; index 30 -level 1: 3 orbits; 0 fixed; index 42 -3 orbits; grpsize=5040; 3 gens; 10 nodes; maxlev=4 -canupdates=1; cpu time = 0.00 seconds - 0 1 4:17 19:23 25:28 31:35 37:39 41:49; 2 18 24 29 30 36 40; 3; diff --git a/tools/nauty25r9_mac/nautest1b.ans b/tools/nauty25r9_mac/nautest1b.ans deleted file mode 100644 index 45aa8cb..0000000 --- a/tools/nauty25r9_mac/nautest1b.ans +++ /dev/null @@ -1,150 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=sparse m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -(10 30 40 20)(11 31 41 21)(12 32 42 22)(13 33 43 23)(14 34 44 24)(15 25 45 35) - (16 26 46 36)(17 27 47 37)(18 28 48 38)(19 29 49 39) -level 4: 20 orbits; 15 fixed; index 4 -(2 5)(4 6)(7 9)(10 17)(11 49)(12 34)(13 43)(14 32)(18 38)(19 41)(20 27) - (21 39)(22 44)(24 42)(25 35)(26 36)(28 48)(29 31)(30 37)(40 47) -(2 5 15)(4 6 16)(7 10 19)(8 38 18)(9 41 17)(11 24 29)(12 13 22)(14 47 20) - (21 33 39)(23 37 30)(25 45 35)(26 46 36)(27 40 32)(31 42 49)(34 44 43) -level 3: 7 orbits; 7 fixed; index 30 -(1 4 9 8 7 6)(2 5 3)(10 18 37 20 28 47)(11 46 49 44 33 22)(12 21 36 29 24 13) - (14 23 32 41 16 19)(17 40 48 27 30 38)(25 35)(26 39 34 43 42 31) -level 2: 3 orbits; 1 fixed; index 42 -(0 1)(2 6)(4 5)(10 19)(11 47)(12 22)(14 24)(15 16)(17 41)(18 38)(20 29) - (21 37)(23 33)(25 36)(26 35)(27 31)(28 48)(30 39)(32 42)(34 44)(40 49) - (45 46) -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -cpu time = 0.00 seconds - 0:49 (50); -level 4: 20 orbits; 15 fixed; index 4 -level 3: 7 orbits; 7 fixed; index 30 -level 2: 3 orbits; 1 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[S7c9fbc52 9edc578 5ff84822] -level 4: 20 orbits; 6 fixed; index 4 -level 3: 7 orbits; 2 fixed; index 30 -level 2: 3 orbits; 1 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 6 gens; 18 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[S7c9fbc52 9edc578 5ff84822] - 0 6 35 8 17 30 29 46 1 2 13 9 40 19 48 12 28 21 20 47 44 34 18 16 32 10 23 26 - 41 15 22 36 39 7 3 49 45 33 43 4 37 5 38 25 24 11 31 42 27 14 - 0 : 1 2 3 4 5 6 7; - 1 : 0 13 21 25 30 38 47; - 2 : 0 12 19 24 28 37 44; - 3 : 0 10 20 22 29 35 45; - 4 : 0 11 18 23 27 36 46; - 5 : 0 14 15 16 17 26 49; - 6 : 0 9 31 32 33 34 48; - 7 : 0 8 39 40 41 42 43; - 8 : 7 44 45 46 47 48 49; - 9 : 6 35 36 37 38 43 49; - 10 : 3 26 30 32 36 40 44; - 11 : 4 26 28 33 38 41 45; - 12 : 2 26 27 31 35 39 47; - 13 : 1 26 29 34 37 42 46; - 14 : 5 19 25 34 36 39 45; - 15 : 5 21 23 33 35 42 44; - 16 : 5 20 24 31 38 40 46; - 17 : 5 18 22 32 37 41 47; - 18 : 4 17 25 29 31 43 44; - 19 : 2 14 22 30 33 43 46; - 20 : 3 16 23 28 34 43 47; - 21 : 1 15 24 27 32 43 45; - 22 : 3 17 19 27 38 42 48; - 23 : 4 15 20 30 37 39 48; - 24 : 2 16 21 29 36 41 48; - 25 : 1 14 18 28 35 40 48; - 26 : 5 10 11 12 13 43 48; - 27 : 4 12 21 22 34 40 49; - 28 : 2 11 20 25 32 42 49; - 29 : 3 13 18 24 33 39 49; - 30 : 1 10 19 23 31 41 49; - 31 : 6 12 16 18 30 42 45; - 32 : 6 10 17 21 28 39 46; - 33 : 6 11 15 19 29 40 47; - 34 : 6 13 14 20 27 41 44; - 35 : 3 9 12 15 25 41 46; - 36 : 4 9 10 14 24 42 47; - 37 : 2 9 13 17 23 40 45; - 38 : 1 9 11 16 22 39 44; - 39 : 7 12 14 23 29 32 38; - 40 : 7 10 16 25 27 33 37; - 41 : 7 11 17 24 30 34 35; - 42 : 7 13 15 22 28 31 36; - 43 : 7 9 18 19 20 21 26; - 44 : 2 8 10 15 18 34 38; - 45 : 3 8 11 14 21 31 37; - 46 : 4 8 13 16 19 32 35; - 47 : 1 8 12 17 20 33 36; - 48 : 6 8 22 23 24 25 26; - 49 : 5 8 9 27 28 29 30; -level 4: 20 orbits; 11 fixed; index 4 -level 3: 7 orbits; 2 fixed; index 30 -level 2: 3 orbits; 1 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds - 0:49 (50); -[fixing partition] -level 3: 11 orbits; 10 fixed; index 20 -level 2: 5 orbits; 0 fixed; index 36 -level 1: 3 orbits; 5 fixed; index 7 -3 orbits; grpsize=5040; 5 gens; 13 nodes; maxlev=4 -canupdates=1; cpu time = 0.00 seconds - 0:2 4 6:18 20:23 25 27 28 30:43 45:47 49 (42); 3; 5 19 24 26 29 44 48 (7); diff --git a/tools/nauty25r9_mac/nautest1b.dre b/tools/nauty25r9_mac/nautest1b.dre deleted file mode 100644 index 66216d1..0000000 --- a/tools/nauty25r9_mac/nautest1b.dre +++ /dev/null @@ -1,150 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=sparse m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -(10 30 40 20)(11 31 41 21)(12 32 42 22)(13 33 43 23)(14 34 44 24)(15 25 45 35) - (16 26 46 36)(17 27 47 37)(18 28 48 38)(19 29 49 39) -level 4: 20 orbits; 15 fixed; index 4 -(2 5)(4 6)(7 9)(10 17)(11 49)(12 34)(13 43)(14 32)(18 38)(19 41)(20 27) - (21 39)(22 44)(24 42)(25 35)(26 36)(28 48)(29 31)(30 37)(40 47) -(2 5 15)(4 6 16)(7 10 19)(8 38 18)(9 41 17)(11 24 29)(12 13 22)(14 47 20) - (21 33 39)(23 37 30)(25 45 35)(26 46 36)(27 40 32)(31 42 49)(34 44 43) -level 3: 7 orbits; 7 fixed; index 30 -(1 4 9 8 7 6)(2 5 3)(10 18 37 20 28 47)(11 46 49 44 33 22)(12 21 36 29 24 13) - (14 23 32 41 16 19)(17 40 48 27 30 38)(25 35)(26 39 34 43 42 31) -level 2: 3 orbits; 1 fixed; index 42 -(0 1)(2 6)(4 5)(10 19)(11 47)(12 22)(14 24)(15 16)(17 41)(18 38)(20 29) - (21 37)(23 33)(25 36)(26 35)(27 31)(28 48)(30 39)(32 42)(34 44)(40 49) - (45 46) -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -cpu time = 0.00 seconds - 0:49; -level 4: 20 orbits; 15 fixed; index 4 -level 3: 7 orbits; 7 fixed; index 30 -level 2: 3 orbits; 1 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 5 gens; 17 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[S7c9fbc52 9edc578 5ff84822] -level 4: 20 orbits; 1 fixed; index 4 -level 3: 7 orbits; 4 fixed; index 30 -level 2: 3 orbits; 3 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 4 gens; 15 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds -[S7c9fbc52 9edc578 5ff84822] - 0 1 21 47 17 12 25 2 3 4 5 26 28 6 20 37 38 19 8 32 14 33 45 39 15 11 13 41 - 46 35 27 31 9 23 34 22 42 43 44 48 16 7 10 49 36 18 24 30 29 40 - 0 : 1 2 3 4 5 6 7; - 1 : 0 13 21 25 30 38 47; - 2 : 0 12 19 24 28 37 44; - 3 : 0 10 20 22 29 35 45; - 4 : 0 11 18 23 27 36 46; - 5 : 0 14 15 16 17 26 49; - 6 : 0 9 31 32 33 34 48; - 7 : 0 8 39 40 41 42 43; - 8 : 7 44 45 46 47 48 49; - 9 : 6 35 36 37 38 43 49; - 10 : 3 26 30 32 36 40 44; - 11 : 4 26 28 33 38 41 45; - 12 : 2 26 27 31 35 39 47; - 13 : 1 26 29 34 37 42 46; - 14 : 5 19 25 34 36 39 45; - 15 : 5 21 23 33 35 42 44; - 16 : 5 20 24 31 38 40 46; - 17 : 5 18 22 32 37 41 47; - 18 : 4 17 25 29 31 43 44; - 19 : 2 14 22 30 33 43 46; - 20 : 3 16 23 28 34 43 47; - 21 : 1 15 24 27 32 43 45; - 22 : 3 17 19 27 38 42 48; - 23 : 4 15 20 30 37 39 48; - 24 : 2 16 21 29 36 41 48; - 25 : 1 14 18 28 35 40 48; - 26 : 5 10 11 12 13 43 48; - 27 : 4 12 21 22 34 40 49; - 28 : 2 11 20 25 32 42 49; - 29 : 3 13 18 24 33 39 49; - 30 : 1 10 19 23 31 41 49; - 31 : 6 12 16 18 30 42 45; - 32 : 6 10 17 21 28 39 46; - 33 : 6 11 15 19 29 40 47; - 34 : 6 13 14 20 27 41 44; - 35 : 3 9 12 15 25 41 46; - 36 : 4 9 10 14 24 42 47; - 37 : 2 9 13 17 23 40 45; - 38 : 1 9 11 16 22 39 44; - 39 : 7 12 14 23 29 32 38; - 40 : 7 10 16 25 27 33 37; - 41 : 7 11 17 24 30 34 35; - 42 : 7 13 15 22 28 31 36; - 43 : 7 9 18 19 20 21 26; - 44 : 2 8 10 15 18 34 38; - 45 : 3 8 11 14 21 31 37; - 46 : 4 8 13 16 19 32 35; - 47 : 1 8 12 17 20 33 36; - 48 : 6 8 22 23 24 25 26; - 49 : 5 8 9 27 28 29 30; -level 4: 20 orbits; 18 fixed; index 4 -level 3: 7 orbits; 4 fixed; index 30 -level 2: 3 orbits; 3 fixed; index 42 -level 1: 1 orbit; 0 fixed; index 50 -1 orbit; grpsize=252000; 4 gens; 15 nodes; maxlev=5 -canupdates=1; cpu time = 0.00 seconds - 0:49; -[fixing partition] -level 3: 11 orbits; 4 fixed; index 20 -level 2: 5 orbits; 1 fixed; index 36 -level 1: 3 orbits; 2 fixed; index 7 -3 orbits; grpsize=5040; 4 gens; 11 nodes; maxlev=4 -canupdates=1; cpu time = 0.00 seconds - 0 1 4:17 19:23 25:28 31:35 37:39 41:49; 2 18 24 29 30 36 40; 3; diff --git a/tools/nauty25r9_mac/nautest1c.ans b/tools/nauty25r9_mac/nautest1c.ans deleted file mode 100644 index bed6def..0000000 --- a/tools/nauty25r9_mac/nautest1c.ans +++ /dev/null @@ -1,142 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=Traces m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d-P y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -Gen #1: (0 11 32 10 26 35 6 15 13 30 12 1)(2 17 34 38 22 24 21 23 8 33 29 4)(3 45 28 - 49 27 43 31 41 19 47 18 46)(5 14 36)(7 16 25 39)(9 37 20)(40 48 44) -Gen #2: (0 35 12 7 2)(3 36 46 6 4)(5 39 18 32 47)(8 37 45 31 29)(9 38 44 34 41) - (10 42 17 15 24)(11 19 28 13 40)(14 22 27 25 43)(20 23 21 49 48) -level 1: 3 cells; target cell: 50; 1 orbit; 3 nodes (1 kept); 1 update; -level 2: 7 cells; target cell: 42; 1 orbit; 1 node (1 kept); 1 update; -level 3: 20 cells; target cell: 30; 1 orbit; 1 node (1 kept); 1 update; -level 4: 50 cells; target cell: 4; 1 orbit; 1 node (1 kept); 1 update; -1 orbit; grpsize=252000; 2 gens; 16 nodes (2 peak); maxlev=4 -cpu time = 0.00 seconds - 0:49 (50); -level 1: 3 cells; target cell: 50; 1 orbit; 3 nodes (1 kept); 1 update; -level 2: 7 cells; target cell: 42; 1 orbit; 1 node (1 kept); 1 update; -level 3: 20 cells; target cell: 30; 1 orbit; 1 node (1 kept); 1 update; -level 4: 50 cells; target cell: 4; 1 orbit; 1 node (1 kept); 1 update; -1 orbit; grpsize=252000; 2 gens; 16 nodes (2 peak); maxlev=4 -canupdates=1; cpu time = 0.00 seconds -[T59831010 1d19a3af 43c72725] -level 1: 3 cells; target cell: 50; 1 orbit; 3 nodes (1 kept); 1 update; -level 2: 7 cells; target cell: 42; 1 orbit; 1 node (1 kept); 1 update; -level 3: 20 cells; target cell: 30; 1 orbit; 1 node (1 kept); 1 update; -level 4: 50 cells; target cell: 4; 1 orbit; 1 node (1 kept); 1 update; -1 orbit; grpsize=252000; 2 gens; 16 nodes (2 peak); maxlev=4 -canupdates=1; cpu time = 0.00 seconds -[T59831010 1d19a3af 43c72725] - 19 41 32 6 20 37 11 27 13 48 18 38 21 28 5 4 9 40 17 49 26 42 8 35 25 36 39 - 46 44 3 10 12 7 33 24 22 45 34 43 31 29 1 23 2 47 16 14 30 15 0 - 0 : 9 14 16 23 34 36 43; - 1 : 10 13 18 21 34 35 44; - 2 : 8 12 17 22 34 37 42; - 3 : 11 15 19 24 34 38 45; - 4 : 12 20 23 28 31 38 44; - 5 : 14 20 24 27 32 35 42; - 6 : 15 20 21 26 30 37 43; - 7 : 13 20 22 25 33 36 45; - 8 : 2 19 21 28 32 36 46; - 9 : 0 18 22 27 30 38 46; - 10 : 1 16 24 25 31 37 46; - 11 : 3 17 23 26 33 35 46; - 12 : 2 4 18 24 33 40 43; - 13 : 1 7 19 23 30 40 42; - 14 : 0 5 17 21 31 40 45; - 15 : 3 6 16 22 32 40 44; - 16 : 0 10 15 28 33 39 42; - 17 : 2 11 14 25 30 39 44; - 18 : 1 9 12 26 32 39 45; - 19 : 3 8 13 27 31 39 43; - 20 : 4 5 6 7 34 39 46; - 21 : 1 6 8 14 33 38 47; - 22 : 2 7 9 15 31 35 47; - 23 : 0 4 11 13 32 37 47; - 24 : 3 5 10 12 30 36 47; - 25 : 7 10 17 29 32 38 43; - 26 : 6 11 18 29 31 36 42; - 27 : 5 9 19 29 33 37 44; - 28 : 4 8 16 29 30 35 45; - 29 : 25 26 27 28 34 40 47; - 30 : 6 9 13 17 24 28 48; - 31 : 4 10 14 19 22 26 48; - 32 : 5 8 15 18 23 25 48; - 33 : 7 11 12 16 21 27 48; - 34 : 0 1 2 3 20 29 48; - 35 : 1 5 11 22 28 41 43; - 36 : 0 7 8 24 26 41 44; - 37 : 2 6 10 23 27 41 45; - 38 : 3 4 9 21 25 41 42; - 39 : 16 17 18 19 20 41 47; - 40 : 12 13 14 15 29 41 46; - 41 : 35 36 37 38 39 40 48; - 42 : 2 5 13 16 26 38 49; - 43 : 0 6 12 19 25 35 49; - 44 : 1 4 15 17 27 36 49; - 45 : 3 7 14 18 28 37 49; - 46 : 8 9 10 11 20 40 49; - 47 : 21 22 23 24 29 39 49; - 48 : 30 31 32 33 34 41 49; - 49 : 42 43 44 45 46 47 48; -level 1: 3 cells; target cell: 50; 1 orbit; 3 nodes (1 kept); 1 update; -level 2: 7 cells; target cell: 42; 1 orbit; 1 node (1 kept); 1 update; -level 3: 20 cells; target cell: 30; 1 orbit; 1 node (1 kept); 1 update; -level 4: 50 cells; target cell: 4; 1 orbit; 1 node (1 kept); 1 update; -1 orbit; grpsize=252000; 2 gens; 16 nodes (2 peak); maxlev=4 -canupdates=1; cpu time = 0.00 seconds - 0:49 (50); -level 1: 7 cells; target cell: 42; 3 orbits; 3 nodes (1 kept); 1 update; -level 2: 20 cells; target cell: 30; 3 orbits; 1 node (1 kept); 1 update; -level 3: 50 cells; target cell: 4; 3 orbits; 1 node (1 kept); 1 update; -3 orbits; grpsize=5040; 2 gens; 12 nodes (2 peak); maxlev=3 -canupdates=1; cpu time = 0.00 seconds - 0:2 4:23 25:28 31:35 37 38 40:43 45 47:49 (42); 3; 24 29 30 36 39 44 46 (7); diff --git a/tools/nauty25r9_mac/nautest1c.dre b/tools/nauty25r9_mac/nautest1c.dre deleted file mode 100644 index 9e86919..0000000 --- a/tools/nauty25r9_mac/nautest1c.dre +++ /dev/null @@ -1,143 +0,0 @@ - 0 : 2 3 5 15 25 35 45; - 1 : 3 4 6 16 26 36 46; - 2 : 0 4 7 17 27 37 47; - 3 : 0 1 8 18 28 38 48; - 4 : 1 2 9 19 29 39 49; - 5 : 0 6 9 10 20 30 40; - 6 : 1 5 7 11 21 31 41; - 7 : 2 6 8 12 22 32 42; - 8 : 3 7 9 13 23 33 43; - 9 : 4 5 8 14 24 34 44; - 10 : 5 12 13 16 27 38 49; - 11 : 6 13 14 17 28 39 45; - 12 : 7 10 14 18 29 35 46; - 13 : 8 10 11 19 25 36 47; - 14 : 9 11 12 15 26 37 48; - 15 : 0 14 16 19 23 32 41; - 16 : 1 10 15 17 24 33 42; - 17 : 2 11 16 18 20 34 43; - 18 : 3 12 17 19 21 30 44; - 19 : 4 13 15 18 22 31 40; - 20 : 5 17 22 23 29 36 48; - 21 : 6 18 23 24 25 37 49; - 22 : 7 19 20 24 26 38 45; - 23 : 8 15 20 21 27 39 46; - 24 : 9 16 21 22 28 35 47; - 25 : 0 13 21 26 29 34 42; - 26 : 1 14 22 25 27 30 43; - 27 : 2 10 23 26 28 31 44; - 28 : 3 11 24 27 29 32 40; - 29 : 4 12 20 25 28 33 41; - 30 : 5 18 26 32 33 39 47; - 31 : 6 19 27 33 34 35 48; - 32 : 7 15 28 30 34 36 49; - 33 : 8 16 29 30 31 37 45; - 34 : 9 17 25 31 32 38 46; - 35 : 0 12 24 31 36 39 43; - 36 : 1 13 20 32 35 37 44; - 37 : 2 14 21 33 36 38 40; - 38 : 3 10 22 34 37 39 41; - 39 : 4 11 23 30 35 38 42; - 40 : 5 19 28 37 42 43 46; - 41 : 6 15 29 38 43 44 47; - 42 : 7 16 25 39 40 44 48; - 43 : 8 17 26 35 40 41 49; - 44 : 9 18 27 36 41 42 45; - 45 : 0 11 22 33 44 46 49; - 46 : 1 12 23 34 40 45 47; - 47 : 2 13 24 30 41 46 48; - 48 : 3 14 20 31 42 47 49; - 49 : 4 10 21 32 43 45 48; -Mode=Traces m=2 n=50 labelorg=0 edges=175 options=(-c+a+m-p-d-P y=100 k=(0,1)) -linelen=78 worksize=60 input_depth=0 G=10; 1 cell -(0 16 5 24 20 47 29 46 25 1)(2 33 40 21 36)(3 15 10 9 22 48 41 12 34 26)(4 45 - 42 6 35 17 30 28 23 13)(7 31 43 18 32 27 8 19 49 44)(11 39)(14 38) -(0 45 22 19 18 30 47 2)(1 8 16 9)(3 33 24 4)(5 46 7 15 44 26 13 17)(6 23 42 - 14 36 43 10 34)(11 20 40 12 32 41 27 25)(21 39 48 37 35 49 38 31)(28 29) -group time: 0.0000, 0.0000, 0.0000, group order time: 0.0000; -0 refinements interrupted by trace comparison ------- -CandList length: 1; GarbList length: 1 -1 orbit; grpsize=252000; 2 gens; 16 nodes; maxlev=4; canlist=1 -cpu time = 0.00 seconds - 0:49; -group time: 0.0000, 0.0000, 0.0000, group order time: 0.0000; -0 refinements interrupted by trace comparison ------- -CandList length: 1; GarbList length: 1 -1 orbit; grpsize=252000; 2 gens; 16 nodes; maxlev=4; canlist=1 -canupdates=1; cpu time = 0.00 seconds -[T2248f06c 652ffd7d 4b56e2d9] -group time: 0.0000, 0.0000, 0.0000, group order time: 0.0000; -0 refinements interrupted by trace comparison ------- -CandList length: 1; GarbList length: 1 -1 orbit; grpsize=252000; 3 gens; 17 nodes; maxlev=4; canlist=1 -canupdates=1; cpu time = 0.00 seconds -[T2248f06c 652ffd7d 4b56e2d9] - 0 1 2 22 43 26 46 29 47 32 17 15 37 14 13 4 20 21 41 6 12 3 36 40 45 10 8 38 - 34 49 27 28 35 19 39 9 25 30 5 24 16 11 18 23 48 42 33 7 44 31 - 0 : 43 44 45 46 47 48 49; - 1 : 37 38 39 40 41 42 49; - 2 : 28 29 30 31 36 42 48; - 3 : 14 18 22 27 36 40 46; - 4 : 12 17 19 26 36 38 44; - 5 : 13 16 21 24 36 37 45; - 6 : 11 15 20 25 36 39 43; - 7 : 15 23 26 31 33 40 45; - 8 : 17 23 27 30 34 37 43; - 9 : 18 23 24 29 32 39 44; - 10 : 16 23 25 28 35 38 46; - 11 : 6 22 24 31 34 38 47; - 12 : 4 21 25 30 32 40 47; - 13 : 5 19 27 28 33 39 47; - 14 : 3 20 26 29 35 37 47; - 15 : 6 7 21 27 35 42 44; - 16 : 5 10 22 26 32 42 43; - 17 : 4 8 20 24 33 42 46; - 18 : 3 9 19 25 34 42 45; - 19 : 4 13 18 31 35 41 43; - 20 : 6 14 17 28 32 41 45; - 21 : 5 12 15 29 34 41 46; - 22 : 3 11 16 30 33 41 44; - 23 : 7 8 9 10 36 41 47; - 24 : 5 9 11 17 35 40 48; - 25 : 6 10 12 18 33 37 48; - 26 : 4 7 14 16 34 39 48; - 27 : 3 8 13 15 32 38 48; - 28 : 2 10 13 20 34 40 44; - 29 : 2 9 14 21 33 38 43; - 30 : 2 8 12 22 35 39 45; - 31 : 2 7 11 19 32 37 46; - 32 : 9 12 16 20 27 31 49; - 33 : 7 13 17 22 25 29 49; - 34 : 8 11 18 21 26 28 49; - 35 : 10 14 15 19 24 30 49; - 36 : 2 3 4 5 6 23 49; - 37 : 1 5 8 14 25 31 44; - 38 : 1 4 10 11 27 29 45; - 39 : 1 6 9 13 26 30 46; - 40 : 1 3 7 12 24 28 43; - 41 : 1 19 20 21 22 23 48; - 42 : 1 2 15 16 17 18 47; - 43 : 0 6 8 16 19 29 40; - 44 : 0 4 9 15 22 28 37; - 45 : 0 5 7 18 20 30 38; - 46 : 0 3 10 17 21 31 39; - 47 : 0 11 12 13 14 23 42; - 48 : 0 2 24 25 26 27 41; - 49 : 0 1 32 33 34 35 36; -group time: 0.0000, 0.0000, 0.0000, group order time: 0.0000; -0 refinements interrupted by trace comparison ------- -CandList length: 1; GarbList length: 1 -1 orbit; grpsize=252000; 2 gens; 16 nodes; maxlev=4; canlist=1 -canupdates=1; cpu time = 0.00 seconds - 0:49; -group time: 0.0000, 0.0000, 0.0000, group order time: 0.0000; -0 refinements interrupted by trace comparison ------- -CandList length: 1; GarbList length: 1 -3 orbits; grpsize=5040; 2 gens; 12 nodes; maxlev=3; canlist=1 -canupdates=1; cpu time = 0.00 seconds - 0:2 5:10 12:25 27:32 34:36 38 40:48; 3; 4 11 26 33 37 39 49; diff --git a/tools/nauty25r9_mac/nautest2.c b/tools/nauty25r9_mac/nautest2.c deleted file mode 100644 index c042482..0000000 --- a/tools/nauty25r9_mac/nautest2.c +++ /dev/null @@ -1,79 +0,0 @@ -/* Test for basic nauty and dreadnaut functions (but not nauty itself) */ - -#include "naututil.h" - -long seed; - -int -main(int argc, char *argv[]) -{ - int i,j,bad; - setword w; - int curfile; - FILE *f; -#ifdef CPUDEFS - CPUDEFS -#endif - - printf("NAUTYVERSION=%s NAUTYVERSIONID=%d\n", - NAUTYVERSION,NAUTYVERSIONID); - printf("MAXN=%d MAXM=%d WORDSIZE=%d NAUTY_INFINITY=%d\n", - MAXN,MAXM,WORDSIZE,NAUTY_INFINITY); - - printf("defined:"); -#ifdef __STDC__ - printf(" __STDC__"); -#endif -#ifdef BIGNAUTY - printf(" BIGNAUTY(obsolete!)"); -#endif -#ifdef SYS_UNIX - printf(" SYS_UNIX"); -#endif -#ifdef SYS_CRAY - printf(" SYS_CRAY"); -#endif -#ifdef SETWORD_SHORT - printf(" SETWORD_SHORT"); -#endif -#ifdef SETWORD_INT - printf(" SETWORD_INT"); -#endif -#ifdef SETWORD_LONG - printf(" SETWORD_LONG"); -#endif -#ifdef SETWORD_LONGLONG - printf(" SETWORD_LONGLONG"); -#endif - printf("\n"); - -#ifdef DOPROMPT - curfile = 0; - printf("DOPROMPT(stdin)=%d DOPROMPT(stdout)=%d\n", - DOPROMPT(stdin),DOPROMPT(stdout)); -#else - printf("DOPROMPT is not defined\n"); -#endif - -#ifdef CPUTIME - printf("CPUTIME = %f\n",CPUTIME); -#else - printf("CPUTIME is not defined\n"); -#endif - -#ifdef INITSEED - INITSEED; - printf("INITSEED: seed=%ld\n",seed); -#else - printf("INITSEED is not defined\n"); -#endif - -#ifdef OPENOUT - OPENOUT(f,"nautest.txt",0); - fprintf(f,"test\n"); -#else - printf("OPENOUT is not defined\n"); -#endif - - exit(0); -} diff --git a/tools/nauty25r9_mac/nautest2.dre b/tools/nauty25r9_mac/nautest2.dre deleted file mode 100644 index f708f5c..0000000 --- a/tools/nauty25r9_mac/nautest2.dre +++ /dev/null @@ -1,7 +0,0 @@ -n=12 $=1 g -2;3;4;5;6;7;8;9;10;11;12;1. -v -i & -x -c xz jxz -q diff --git a/tools/nauty25r9_mac/nautest2a.ans b/tools/nauty25r9_mac/nautest2a.ans deleted file mode 100644 index caff68d..0000000 --- a/tools/nauty25r9_mac/nautest2a.ans +++ /dev/null @@ -1,24 +0,0 @@ -1-12:2 - 1 cell; code = 41; cpu time = 0.0000000 seconds -unit partition -(2 12)(3 11)(4 10)(5 9)(6 8) -level 2: 7 orbits; 5 fixed; index 2 -(1 2 3 4 5 6 7 8 9 10 11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 2 gens; 6 nodes; maxlev=3 -cpu time = 0.00 seconds -(2 12)(3 11)(4 10)(5 9)(6 8) -level 2: 7 orbits; 5 fixed; index 2 -(1 2 3 4 5 6 7 8 9 10 11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 2 gens; 6 nodes; maxlev=3 -canupdates=1; cpu time = 0.00 seconds -[N2552efde 394889fc 3c67aaf3] -(2 8)(3 9)(4 5)(6 7)(10 11) -level 2: 7 orbits; 2 fixed; index 2 -(1 2)(3 6)(4 12)(7 11)(9 10) -(1 3)(2 7)(4 6)(5 9)(8 10)(11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 3 gens; 8 nodes; maxlev=3 -canupdates=1; cpu time = 0.00 seconds -[N2552efde 394889fc 3c67aaf3] diff --git a/tools/nauty25r9_mac/nautest2b.ans b/tools/nauty25r9_mac/nautest2b.ans deleted file mode 100644 index 609c372..0000000 --- a/tools/nauty25r9_mac/nautest2b.ans +++ /dev/null @@ -1,24 +0,0 @@ -1-12:2 - 1 cell; code = 3; cpu time = 0.0000000 seconds -unit partition -(2 12)(3 11)(4 10)(5 9)(6 8) -level 2: 7 orbits; 5 fixed; index 2 -(1 2 3 4 5 6 7 8 9 10 11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 2 gens; 6 nodes; maxlev=3 -cpu time = 0.00 seconds -(2 12)(3 11)(4 10)(5 9)(6 8) -level 2: 7 orbits; 5 fixed; index 2 -(1 2 3 4 5 6 7 8 9 10 11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 2 gens; 6 nodes; maxlev=3 -canupdates=1; cpu time = 0.00 seconds -[S694e3b60 2ef1aacb 10268774] -(2 8)(3 9)(4 5)(6 7)(10 11) -level 2: 7 orbits; 2 fixed; index 2 -(1 2)(3 6)(4 12)(7 11)(9 10) -(1 3)(2 7)(4 6)(5 9)(8 10)(11 12) -level 1: 1 orbit; 1 fixed; index 12 -1 orbit; grpsize=24; 3 gens; 8 nodes; maxlev=3 -canupdates=1; cpu time = 0.00 seconds -[S694e3b60 2ef1aacb 10268774] diff --git a/tools/nauty25r9_mac/nautest2c.ans b/tools/nauty25r9_mac/nautest2c.ans deleted file mode 100644 index a42d9e8..0000000 --- a/tools/nauty25r9_mac/nautest2c.ans +++ /dev/null @@ -1,17 +0,0 @@ -1-12:2 - 1 cell; code = 6f62; cpu time = 0.0000000 seconds -unit partition -Gen #1: (1 12 11 10 9 8 7 6 5 4 3 2) -Gen #2: (1 2)(3 12)(4 11)(5 10)(6 9)(7 8) -1 orbit; grpsize=24; 2 gens; 1 node (1 peak); maxlev=0 -cpu time = 0.00 seconds -Gen #1: (1 12 11 10 9 8 7 6 5 4 3 2) -Gen #2: (1 2)(3 12)(4 11)(5 10)(6 9)(7 8) -1 orbit; grpsize=24; 2 gens; 1 node (1 peak); maxlev=0 -canupdates=0; cpu time = 0.00 seconds -[T40ae9d28 336706d1 2832ac44] -Gen #1: (1 11 5 7 2 9 12 3 8 6 4 10) -Gen #2: (1 10)(2 3)(4 11)(5 6)(7 8)(9 12) -1 orbit; grpsize=24; 2 gens; 1 node (1 peak); maxlev=0 -canupdates=0; cpu time = 0.00 seconds -[T40ae9d28 336706d1 2832ac44] diff --git a/tools/nauty25r9_mac/nautesta.ans b/tools/nauty25r9_mac/nautesta.ans deleted file mode 100644 index d123db8..0000000 --- a/tools/nauty25r9_mac/nautesta.ans +++ /dev/null @@ -1,2 +0,0 @@ ->A ./geng -td1D7 n=11 e=6-30 ->Z 92779 graphs generated in 0.18 sec diff --git a/tools/nauty25r9_mac/nautestb.ans b/tools/nauty25r9_mac/nautestb.ans deleted file mode 100644 index 0685980..0000000 --- a/tools/nauty25r9_mac/nautestb.ans +++ /dev/null @@ -1,3391 +0,0 @@ -I??????~w -I?????@~g -I?????@~w -I?????B~O -I?????B~G -I?????B~W -I?????F}O -I?????F}G -I?????F}W -I?????N{O -I????AF]G -I?????N{W -I????GA}W -I???G?@}w -I???G?@~w -I????GB}G -I????GB}_ -I????GB}g -I????GB~_ -I????GB}W -I????GI{o -I????CK|o -I????OE{W -I????OE{w -I????CK{w -I????CK|w -I????CL{O -I????OF{_ -I????CL{_ -I????CL{o -I????GJ|_ -I????OF{G -I????OF{W -I????OF{g -I????_Mwo -I????C[xo -I????_MwW -I????_Mww -I????C[ww -I????C[xw -I???C@FMO -I????FaFO -I????C\wo -I????GZx_ -I???C@FMW -I???G?xoo -I????C{po -I???G?xow -I????C{ow -I????C{pw -I????CB~G -I????CF}O -I????CF~? -I????CF}G -I????CF~G -I????CN{O -I????CN|? -I????CN|G -I???OGB{G -I???OGB|? -I????SE~? -I????SE{G -I???GCH{W -I???OCD|G -I???GCH|G -I????SE~G -I????gIx_ -I????cKwg -I????gIxg -I????cKwW -I????KWww -I????gIxw -I???GCXwO -I???GCXx? -I????cMx? -I????SUz? -I????KYwO -I????KYwo -I????KYxO -I????SUxO -I????KYzO -I???_CLwW -I???GCXxG -I????cMxG -I????SUzG -I???@GYp_ -I????Wqoo -I????Sspo -I????Kwog -I???@GYpg -I???@C[ow -I???@_Mow -I???@GYpw -I????NKM_ -I????SurO -I????NKMg -I???CGN[_ -I???CGN[g -I????SF{_ -I????SF|? -I????SF~? -I????SF{G -I????SF|G -I????KXw_ -I????gJx_ -I???E?FMG -I????oFwg -I????cLwW -I???GCxoo -I????KZx? -I????SVz? -I????KZxO -I???CGZX_ -I???@SUr? -I????]QWg -I???CLcEg -I???@SUrG -I???BGY`_ -I???EGMKg -I????KZwO -I???BGY`w -I???EWiDg -I???_OCww -I???G_Gxw -I?C?G?@zw -I?C?G?@~w -I???G_Hwg -I???OGPx_ -I??G?_Bxg -I?C??GBz_ -I???G_Hxg -I???G_Hz_ -I???G_Hzg -I?C??GB~_ -I???_ODww -I???G_Hxw -I???OGRwO -I???_OFx? -I???G_Jx? -I???OGRxO -I???GORxO -I???_OFz? -I???OGRz? -I???OGRzO -I???OGR~? -I???_OFwW -I???_OFxG -I???_Ocpo -I??O?Cgro -I??G?Covo -I???OGoow -I???_Ocpw -I??G?Copw -I???H?Wrw -I??G?Corw -I??G?Covw -I???OGpoo -I??G@?Rp_ -I??@?GXp_ -I??G?Cppo -I???_Odr_ -I???GOppo -I???H?Xr_ -I???GOpr_ -I???GOpro -I???G_hv_ -I???OGqoW -I??@?_Low -I??G@?Rpg -I???H?Xpg -I???H?Xpw -I???H?Xrg -I??C?GZXO -I???K@dEo -I???OJKKo -I???OGrrO -I???OGrv? -I???_Pc`o -I?C??Dcbo -I??G?Dofo -I???OHo_w -I???_Pc`w -I??G?Do`w -I?C??Dcbw -I??G?Dobw -I??G?Dofw -I??C?GN[O -I??O?Dhb_ -I???K?xPo -I??O?Dkao -I???GPpb_ -I???GPpbo -I???G`hf_ -I???K?xPw -I??O?Dkaw -I?C??FcBo -I??G?FoFo -I?C??FcBw -I??G?FoBw -I??G?FoFw -I??G?CB|G -I??G?CB~G -I??G?CF{O -I???GOF{O -I??G?CF}? -I??G?CF}O -I???GOF}O -I??G?CF{G -I???GOF{W -I??G?CRxO -I?C??CFz? -I??G?CRzO -I??G?CR~? -I??O?CJxG -I?C??CFzG -I??G?CRzG -I??G?CR~G -I??G?CVyO -I???GOVyO -I???G_N}? -I??G?CrrO -I??G?Crv? -I??G?FKKw -I??G?CrvG -I???GON{O -I???GgIwG -I???W_DwG -I??GGCPy? -I??GGCPyG -I??OGCHyG -I??OOCDyG -I???GgI}? -I???GgI}G -I???WGPwW -I??OOGBwW -I???W_DyW -I???GgIwW -I???GcKyW -I???GgI}W -I???h?HpG -I???Gcgr? -I???`OErG -I??@_ODv? -I??@G_HpW -I??@?KWoW -I???HCWpG -I??@?SSpW -I???PCSrG -I??@?KWpW -I???OKorG -I??@?KWrW -I???OKovG -I??@_ODow -I??@G_Hpw -I???GckqO -I???OKwp? -I???GSsqO -I??GGCpqO -I???Ggiu? -I???GSsuO -I???OKsoo -I??G?Kqoo -I???_KkqO -I???_Kkqo -I??CGHHKW -I???HGYqW -I???OKwpG -I???GWqqW -I??GGCpqW -I???GgiuG -I???GgiuW -I???_Lgb? -I???_LgbO -I???OLof? -I???_Tc`o -I??OCGJWg -I???_LgbG -I???_KLwG -I???OLobG -I??A?SsbW -I???OLofG -I???OLo_w -I???_Tc`w -I??G?pbd_ -I??A?SubO -I??G?orp_ -I??G?orpg -I???OKK{G -I???WOD{W -I???OK[wO -I??GGCXwO -I???OK[{? -I???OK[{O -I??G?KYwo -I???OK[wo -I???OK[{o -I???WOTwW -I???OK[{G -I??G?Krq_ -I???ONILO -I???OKtu_ -I???OK{so -I???GcJx? -I???_SFz? -I???_SFxG -I???_SF~? -I??@?SVr? -I???OKrr? -I???OKrv? -I??__OBpG -I??O?Sar? -I@??OGBv? -I??H?_BrG -I??H?CPv? -I@??OGB~? -I??_OCPpG -I??H?CPpW -I??O@CIrG -I??_OCPrG -I@??GCHvG -I??G@CQrG -I??H?CPrW -I??H?CPvG -I?C?GC`vG -I?C?GC`~G -I???W_dqO -I??_?SUu? -I???gOdqO -I??G_CdqO -I???W_du? -I???gOduO -I??_G_Ju? -I??OOCd}? -I??GB?R`_ -I???Ogeoo -I??G?ceoo -I??O?SeqO -I???_Weqo -I??@?gMqO -I??@?WUuO -I??G?ceqO -I???Ogeqo -I??G?ceqo -I??G?ceuO -I???Ogeuo -I??G@CUuO -I??G?ce}O -I??GH?RqW -I??_?SUuG -I??A@OSb_ -I?C?AGaf_ -I??@AGW`g -I??OAOabg -I???IOobg -I???I_gfg -I??A@GW_w -I???P`C`w -I?C?AGabw -I???IOo`w -I???H`Gbw -I?C?AGafw -I???gP`b? -I???oH`bO -I???Q_ef? -I??E@_EAW -I???Oha`o -I??@?hIbO -I???M?JL? -I???Gpa`o -I???OhabO -I???Gpabo -I???H`IbO -I???PHQfO -I???[?pPW -I??@I?X`w -I??A@OUbW -I?C??Lab? -I??O@DKa_ -I?@?OCpf? -I??G_D`bO -I?C?GD`f? -I??GACqf? -I?C?GD`n? -I??G?da`O -I??G?da`o -I?C??LabO -I??_?dIbO -I??_?TQfO -I??G?dabO -I??G?dabo -I??G?dafO -I??G@DQfO -I??G?danO -I??S?GJWW -I?C??LabG -I??O@DKag -I?@?OCpfG -I??G_D`bG -I??I?CpbW -I?C?GD`fG -I??GACqfG -I?C?GD`nG -I??GG_rqO -I@G?GATQo -I???gPdao -I???W`deo -I??G@DUmO -I?C?@FCB_ -I???K`gF_ -I??GE?q@o -I??@?jGBo -I???HbGBo -I???HROFo -I?C?@FCBg -I???Gr_Bg -I???K`gFg -I???SGF[G -I???U?FLG -I?C?CHaBw -I???M?FMG -I???KPoBw -I???M?wBw -I???K`gFw -I???gR`Bo -I???S_VZ? -I???HO]{? -I??@?oNt? -I??G_F`Bo -I???GoN{? -I???K_N]? -I??G@FQNO -I???HO]{G -I???oGLwO -I??G_CLwO -I?CG?CF{? -I???oGL{O -I???GoMwO -I???GoMwo -I??G?cMwo -I???GoM{O -I???GoM{o -I?C?GOFwW -I?CG?CF{G -I???oGdqO -I??o?CJu? -I???Goeoo -I???Goeqo -I???H_MqO -I???HOUuO -I??o?CJuG -I???HOUqW -I???H_MqW -I???H_MuW -I???gOlso -I???HO]{O -I???OKTw_ -I??G?KRw_ -I??O?SFy? -I???_KLy_ -I??G?cFy? -I???OKTy_ -I??G?KRy_ -I??G?cF}? -I???_KL}_ -I??O?KJyG -I??G?KRyG -I??G?KR}G -I???OgFwg -I???_Wbp_ -I??@?KXr? -I???GSpp_ -I???Ocdr? -I???Gchr_ -I???OKpr? -I???_Khv? -I???KGXWg -I???PCTrG -I???Gpa_w -I??_?cJp_ -I?G??KRr? -I@???SFv? -I??G@CRr_ -I?C??Kbv? -I@???SF~? -I???cGLWg -I?C?@CFrG -I??G@CRrG -I??G@CRvG -I??@?WVq_ -I???Gpeao -I??G?deao -I???Gojt? -I???Ogfu_ -I??G@CV}? -I??G?cfuO -I?C?AGbb_ -I???H`Hb_ -I?C?AGbf_ -I??GE?RHg -I???M?XHg -I???J?Xbg -I??CACdEW -I???IOp`w -I???IOrb_ -I???S_fV? -I??_?pJd_ -I??GACrb_ -I???Gphd_ -I???K_xR_ -I??G@DRn? -I??G?dbfO -I???K_xRg -I???K`hF_ -I???GKXw_ -I???GoFy? -I???GKXy_ -I???GKXyG -I???GKXwW -I???GoN{_ -I???GoN{O -I??APGRf? -I??A@SUbG -I???PK[s_ -I??G@SU{? -I???HWYp_ -I???Gwisg -I???PWU{G -I???IWqag -I??OCoiPg -I???GpbbO -I???IgieW -I???aSff? -I?C?Agi`_ -I???`LKe_ -I???Owes? -I??GAcem? -IC???xIHg -I??GAKqag -I???aKkeg -I???_weqG -I??G@LQmG -I??ACWiDg -I??E?SsBW -I??OCoMWg -I??C?KZXO -I?C?EGi@w -I??C?tSJ? -I???G[ws? -I@??CTEN? -I?@?CoiDg -I??GECqBg -I???M_wBg -I???KoM[G -I??GDDQNG -I???_libO -I??G@pRh_ -I???PgMs_ -I???G[qqG -I??G?]QWg -I?C??weog -I???G[wsg -I???Glgag -I???Gph`o -I???N?XBg -I???G\oeW -I???`LYbO -I@??@yIPg -I??W?CByG -I???GKWwW -I???GoEyW -I???GKwqO -I???GKXwG -I???GKwqW -I???GNIMO -I???G[qu? -I???Gser? -I???Olcag -I???HcMuG -I???WKpuG -I???gWWwG -I?COOGBwW -I?C?GcKwW -I?CGGC`s? -I?CGH?BsG -I??GPGQ{? -I??g_OBoW -I?CG@CEsG -I?CH?CDsW -I??@OgK{G -I??GoG`oW -I??G_KgoW -I??GHCWsG -I??_OcKsW -I?CGGC`sG -I?CGGC`sW -I??GHOQ{G -I???XOSoW -I??GGcgow -I??GGcgsW -I??H?gIsw -I??GPGQ{W -I??OOKwwO -I??OGSwoo -I??W?Sqoo -I??GGoqoo -I??GGcwwO -I??OGSwwo -I??OOoewW -I???XHOe? -I?@_?cIm? -I???pHG`G -I??Y?C`aW -I??@I_KeG -I??GI_aeG -I?@_OCPmG -I??OPB@@o -I??OGT_aG -I???gX_eG -I??_aOEaW -I???iGgeG -I??OOL_mG -I???W```O -I?@?GSo_w -I??OGT_aW -I??GGd_aW -I??GGd_eW -I??@GpCaW -I?@?Goaaw -I??@GXOeW -I???X`CeW -I???iOcmW -I@GOO@D_o -I??W?Taco -I??_GTWco -I???gXgkO -I??GGpaco -I??GHDWco -I??GGdgkO -I?CGG_boW -I@GOO@D_w -I??GgP`_w -I???gohpG -I??GgP`cw -I??I?Sscw -I??GHPQkW -I???gWww? -I??GGobs? -I??GGf_MO -I???gWwwG -I??GGoRwG -I??@_oLpG -I???k_LYG -I??GHFOMW -I??GOctw_ -I??GGcXw_ -I??W?cJw_ -I??OGoJwg -I???ogLw_ -I???gWXx_ -I???ogLx_ -I??GHCXs_ -I??GPGR{? -I??GGobp_ -I???XGXs_ -I??GGobt_ -I???XOT{_ -I???Wgxx_ -I?C?GTsgo -I???Whde_ -I?@?Gcjf? -I??_GdMeO -I??_GdJn? -I???WpedO -I???gYqYO -I???gYqYW -I???Wpdd_ -I???WiqYO -I???golw_ -I?GP?`H`_ -I??@OhK{? -I??C_WsQO -I??_GpIco -I?COAKaaG -I??W@DIco -I??@OhKkO -I??C_xGHG -I??AOgkkO -I???qGkkO -I??@OhK{O -I??A@SUb? -I???pHK`o -I??@GpKco -I??@GpKdo -I??@OhKko -I??APG[co -I???iOkko -I??@OhK{o -IC?GO`DGw -I?GP?`H`g -I??@OhK{G -I??CaOcF? -I??@Oj?BG -I??APIOFG -I???[`_@W -I??COh_BW -I??CaOcFW -I??E@GW?w -I??CIOo@w -I??E@OSBw -I??CaOcFw -I??@QG[k? -I??@OgLs? -I??C_odR? -I??A_YcMO -I?CG?Kbs? -I??GGoqoO -I???iQcMO -I?@_s?D?w -I??@_NGBO -I??BGiGAW -I???pJCBo -I??@OjCEo -I??B?KXb? -I???ZASEo -I??@QISEo -I???YacMo -I??@QG[kG -I??OKPaAw -I??GK_RYG -I??GM?RMG -I??@S_TRG -I??GL@QMW -I??GJ?ru? -I??@GoNt? -I??@OgN{? -I??@OjK[o -I?G?OKTs_ -I??W@CJs_ -I???gWh{? -I??@OWT{G -I???oWdp_ -I??@OgLs_ -I???gWhp_ -I??_GSXt_ -I???pGLs_ -I??W?Sbt_ -I??@OgL{_ -I??@GWXsg -I???gWhsg -I???gWh{g -I?@_?cJm? -I?@G@CRb_ -I??A_Wde_ -I??B?gLe_ -I??B?gLm_ -I??@OhI`W -I??@aGLeg -I???iOdm? -I???s_dRG -I??CQKSIG -I??@GpDb_ -I???XHPe_ -I??@GXPe_ -I???gX`e_ -I???gX`m_ -I??@GhIaW -I??AGWqaW -I???iGheg -I???]?hDW -I??_GpJd_ -I???hQqRO -I??@IO\{_ -I??@OhLko -I??B?iIBO -I??E@OTB_ -I??CaOdF_ -I??E@OUBW -I??CGLHKW -I??@QG\k_ -I??@QG]kO -I??@OgN{O -I??@I_Nm? -I???iWwh_ -I???qgkw_ -I@??xAHPW -I??_KdIN? -I?C?aKkgg -I??@Olce? -I?C?_LbbO -I??GPadSo -I??GHpRh_ -I??GHyaSg -I??BCtSJG -I?COF@IH_ -I???g\oi? -I??@ogLw? -I???XhWg_ -I??@ShK[_ -I?OGBaQHg -I??CWpcDW -I??@goLwG -I??@QYS[g -I?COF@IHg -I??BAuKLG -I???g]qYO -I???g[wx? -I???g[wxG -I?@_GcJm? -I??_IcMeG -I???g\ceG -I??_GlIeG -I???g\cmG -I???ZOUkG -I???WtcdG -I???g\oiG -I???o[dsG -I???scdRG -I???YgikW -I???g[wwG -I??C_tcBW -I??@OlK{? -I??@YOTkG -I???{`HHW -I?A?GxQIg -I??@OlceG -I??@OlK{G -I??@QK[kG -I??CaSsBW -I??EdPKL? -I??AhZGkG -I??EdPMLO -I??__OFqO -I??H?_FqO -I??__OFu? -I??__OFuO -I??OP?FuO -I??__OF}? -I??OP?F}O -I?@@?_G`w -I??I@?Obw -I?C?I?_fw -IGC?G?@nw -IGC?G?@~w -I??OQ?``g -I??__P@b_ -I??_a?Hbg -I?@@?_Hf_ -I?C?I?`bg -I??H?`@f_ -I@??I?Hfg -IGC??GBn_ -I?C?I?`fg -I?C?I?`n_ -I?C?I?`ng -IGC??GB~_ -I??OQ?``w -I?C?I?`bw -I?C?I?`fw -I?C_?EIPO -I?C@?HBbO -I?C?H@BbO -I??_a?Jf? -I?@?_Obf? -I@??OHBfO -IG??OGRn? -I??H?`BbO -I??I@?Rf? -I??Ga?bf? -I??H?`BfO -I??G`@BfO -I??I@?Rn? -I@??OHBn? -I??H?`BnO -I@??OHB~? -I??OS?dOw -I?GO?DK_w -I??I@?RbW -I??I@?RfG -I?@?O_rbO -I??OS@XHo -I??__QwPo -I??OP@FmO -I??__PF}? -I?@@?aGBo -I??I@AOFo -IA?G?E_No -I@?G?F?^o -I??__R?@w -I?@@?aGBw -I?GO?F?Bw -I??I@AOFw -I?C?K@_Fw -I?C?K@_Nw -I@?G?F?Nw -I@?G?F?^w -I??_aAHB_ -I?GO?F@B_ -I??__R@Bo -I?@@?aHF_ -I??H?b@Bo -I?G?K@PF_ -I?G?Gb@F_ -I@??GR@Fo -I?O?HAPN_ -I?C?HB@Fo -I?C?K@`N_ -I?C?HB@N_ -I?C?HB@No -I?C?IA`^_ -I??OS@`@w -I??_aAHBg -I?C_?FCAw -I?C?K@`Bw -I?G?K@PFg -I?C?K@`Fg -I?C?K@`Fw -I?C?K@`Ng -I??H?_VqO -I??OQ?fm? -I?G?G_VqO -I?C?K?N[O -I??HA?]kO -I??H?_N{? -I??H?bBNO -I@??OJB^? -I?GO?CBrG -I@?G?CBvG -I@?G?CB~G -I?C@?GFqO -I?G?G_FqO -I@?G?CFu? -I@?G?CFuO -I@??GOFuO -I?C_?CFuO -I?C?H?FuO -I@?G?CF}? -I@?G?CF}O -I?C?H?F}O -I?G?G_FqW -I?C_?CFuG -I?C?H?FuW -I??__ON{O -I??H?_N{O -I?GO?DBbO -I?O_?CRf? -I@?G?DBfO -IG?G?CRn? -I@?G?DBnO -I@?G?DB~? -I?O_?CRfG -I?D??CbfG -IG?G?CRnG -I@?G?DBnG -I@?G?DB~G -I??I?_rbO -I?C?K@XHo -I@?G?EwPo -I@?G?DFmO -I?C?H@FmO -I@?G?DF}? -I?C?K@XHw -I??K?`pBo -I?C?I?fm? -I@?G?FBNO -I@?G?FB^? -I?C?I?fmG -I@?G?CN{G -I@?G?FB^G -I@??GON{O -I??OS?dOo -I??OPHAe? -I??P?TCaW -I??OY?`eG -I??PI?HeG -I?@@G_Hm? -I?@@?WQeW -I?@?_ScmG -I?@@G_H}? -I?@@G_H_w -I??IH?PaW -I?@?X?Paw -I??OY?`eW -I?@@G_H`w -I??P?XBe_ -I?@@?STm? -I??OPHBe_ -I??GaCdm? -I?@?_Wbe_ -I??__XBm_ -I??OPHB}? -I?AAHGICW -I??I?cdb_ -I??I@GRag -I??OPHBf_ -I?GO?LAaG -I?G?GdCe? -I?OOGC`eG -I?G?IGQeG -I?GOI?BeG -IG??GgIm? -IG??OKSmG -I?C?IGaeG -I?C@I?DeG -I?D?GC`m? -I@??OLCmG -I?D?GC`mG -I@@?OCDmG -IG?OOGB}? -I@??OLC}G -I?O?h?DaW -I?O__GBaW -I?G?gH@eW -I?C@GH@eW -I?D@?GBeW -I?C@I?DmW -I?O?HGQaW -I?G?GdCeW -IG??GgImW -I?C?IGaeW -I?C?ICcmW -IG??GgI}W -I??G`EIPO -I??H?hIco -I?@?OckkO -I??OSocOg -I??G`HIco -I??OQCkkO -I@?G`AIPO -I??_OdKkO -I??HG`HkO -I??G`HIko -I?GOGDHkO -I??Gh@H{? -I??_OdK{O -I?CA@CFb? -I?CACCdB_ -I??OPDK`o -I??a?S[co -I??P?TKco -I??__XIco -I??P?TKdo -I?C_?LIco -I??Q?SkkO -I?C?ICkko -I?COS?dOw -I??Gq?dcw -I?O?HGYkW -I?C_AECAg -I?A?`DGF? -I?A@Q?PFG -I?@?_U_N? -I?C@IA@FG -I??HAEON? -I?CAK?`NG -I@?E?OD^? -I?@CP?PBW -I??Ka?`FW -I??Ge?BHG -I?C@?N?BG -I??c?dGBW -I?@?cCgFG -I?CC?L_BW -I?A?_T_FG -I??c?TOFW -I?A?_T_NG -I??K?d_BW -I??GcD_FG -I??K@DOFW -I??HCDONG -I??K?d_FW -I@??ON?NG -I??K?d_NW -I@??ON?^G -I?AB?_H@w -I??Q@EGBw -I??M@?PBw -I??I@EOFw -I?C@ECEBG -I??OY?wgO -I?CB?GFaO -I??S?WbU? -I??HAOUk? -I??_OjAEo -I@??OK[w? -I??OXB@MO -I??I?ecMO -I??__VC]? -I?B@G_H?w -I??H?fCAo -I??H?fCBo -I??I@ESEo -I??S?XaAw -I?COS?FWW -I??OY?wgW -I??__VC@w -I@??gOloo -I??_bAJV? -I?A?W`dEo -I?C?ICmkO -I??K?cdU? -I?C@?KLs? -I??HQ?Tk? -I?O?GecMO -I?C?GKhs? -I??HAC[k? -I?C?IEcMO -I@CG?CFw? -I?C?HFCMO -I@?GGF@MO -I@??ONC]? -I?C?HFC]O -I?C@?NCAo -I?@@?WRe? -I?O@?MSEo -I??H?cLs? -I?C@?NCEo -I?C_?NAEo -I?CA?McMO -I?C?IEcMo -I??PC_JRG -I??H?oRpG -I?CK?_FWW -I??HQ?TkG -I?_?HHQMW -I?C?K_FYG -I?c?G_FWW -I??HAC[kG -I?C?KHaMW -I@CG?CFwG -I?C?HJAMW -I@?GGF@MW -I@??ONC]G -I?C?IIa]W -I?G?GoVw_ -I??_b@Jf? -I?A?gON[O -I?C@?KLs_ -I?GO?KJs_ -I?G?_KLs_ -I??__WJ{? -I?C@?KL{_ -I?GO?SF{_ -I??__WJp_ -I??__SLt_ -I??P?WJsg -I??__WJ|_ -I@??OKKsG -I@?GOGBsW -I@??OKK{G -I@?GOGB{W -I??H?gYoo -I@?G?KYoo -I??__S[wO -I??OX?XwO -I??H?gYwo -I@?GGCXwO -I@?G?KYwo -I@??OK[oo -I??__S[po -I@??OK[wo -I??__S[xo -I??_gPhco -I@?GGDXgo -I?A?_TUJO -I?A?gOlSo -I@??OMiTO -I??P?XJl_ -I?@@?S\{_ -IA??OKkkO -I@?G?LIco -I@??OLKkO -I@?GGDHkO -I@??OLK{? -I@??OLK{O -I@?G?LIko -I@??OLKco -IA??OKkko -I@??OLKko -I@??OLK{o -I?CK?_bPW -I@?H?`K_w -I@?GGPBkW -I@??OLK{G -I??__T[ho -I?@?_S{wo -I??IBApF_ -I?C_GCxoo -I?@?_Slk_ -I??H?c\w_ -I??HAC\k_ -I?C@?ND]_ -I??IBApFg -I@??J?Nu? -I@?G?cNw_ -I??H?cN{? -I@??ONK[o -I??OPGJs_ -I?G?GKXs_ -I??G_Wb{? -I?C?GKh{_ -I??G_Wbp_ -I??G`CLs_ -I??G_Wbt_ -I??OPGYoo -I??G`C[wO -I??_gOXwO -I??OPGYwo -I?C_GCXwO -I??H?c[oo -I??_OgYoo -I??OPC[po -I?C_?KYoo -I?C?H_MwW -I@C?GOFwW -I?CA?Kda_ -I??_OhIco -I??_gPHkO -I??I?ckkO -I??H?dK{? -I??H?dK`o -I??I@C[co -I?O?HOUkW -I??H?dK{G -I??I@C[cw -I??__Xico -I??_OgZx_ -I??__S{po -I??OOKbr? -I?C@?SFpG -I??_GcJu? -I??_GcJv? -I??H?KRqG -I??GHCRr? -I??OGSbu? -I??OHCJv? -I??OHCJuG -I??_GcJ}? -I??_GcJ~? -I@?A?SFf? -I?CA@CFbG -IG??_SFn? -I??H?dBbG -I??I@CRf? -I@?A?SFn? -I??I@CRfG -IG??_SF~? -I?@?_Sff? -I?@?_Sfm? -I?@?Ogfe_ -I??_aCNm? -I@??OL[go -I??__TFn? -I?@?_Sf}? -I?@?_S{go -I??GaC{go -I@??OK{oo -I@??ONB^? -I??H?cN|? -I??IGchl? -I??I@SU{? -I??GaSef? -I?@?Owecg -I?C?Hgip_ -I??_`S[p_ -I??OPp``g -I??OQoewW -I?@@O_LkO -I??PQ?LkO -I??aO_LkO -I?GQ?CLkO -I?@H?_J{? -I??aO_L{O -I?@@?oMcO -I?@@?oMco -I??S?scQG -I??_aOMco -I??PAOMco -I?GOACMco -I?O?`GMkO -I?@?`OMko -I??Q@OMko -I??_aOMkO -I??_aOMko -I?GOACMko -I??_aOM{O -I??_aOM{o -I??_aOMk? -I??R?QDMO -I?B?_Ob]? -I??GbAEAo -I??K?oeSO -I??_QaEEo -I??HAaEEo -I??P?WYoO -I??IC_eMO -I??OOoeoO -I??ORAEEo -I??ORAEMO -I??ORAEMo -I??OU?eMO -I??OT@E]O -I?__a?H@g -I?O_?eAF? -I?`@?_BN? -I?EA@?BFG -I?D?@EAN? -I`??OGB^? -I@?KA?BNG -I@?K?D@^? -I`??OGB~? -I?O__E@BG -I?GS?D@BW -I?O_CCQFG -I?O__E@FG -I?`?_C`NG -I?D?CCaFG -I@?K?D@FW -I?D?CCaNG -I@A?OD@NG -I_C?GC`^G -I@?GCDANG -I@?K?D@NW -I@?K?D@^G -IGC?GE@^G -IGC?GE@~G -I@GCA?MDO -I??XA?Jk? -I?O@GaDMO -I?GACG[K_ -I_?OOCd]? -I@C?I?MgO -I?C@IADMO -I?CACGwH_ -I@A?ODD]? -I??HA_Mk? -I?CAHADMO -I?Ca?EDMO -IG?G?eE]? -I?CAHAD]O -I?E?I?b]? -IG?G?eE}? -I?CA@IEAo -I??a?SXd? -I?O@?iEEo -I??a?S[cO -I?`??ceMO -I?CC?cdR? -I@??QIEEo -I@?GAEEEo -IG?G?eEMO -I?O?`IEMo -IA?GCCeMO -IC?G@DE]O -I??K?WqSO -I?C@AIEEo -I?C_AEEEo -I?D?@EEMO -I?CA@IEMo -I?D?CCeMO -I?CC@HE]O -I@?GAEEMO -I?C@AIEMo -I?C_AEEMo -I@?GAEE]O -I?C@AIE]o -I@?GCDE]O -I@?GAEE}O -I?OOc?bBW -I@GCA?MDW -IA?Gc?bBW -IC?I?_bBW -I@C?I?MgW -I@?GK@BMW -I?CACGwHg -I@A?ODD]G -I??XA@JkO -Io?OO@XHo -I?C?J?Nk_ -I??PAQM[o -I??_cPM{O -I?CB?GLkO -I??J?_LkO -I?G?I_Mco -I??HA_Mco -I??G_waoG -I?C?J?Mco -I??Gb?Mco -I??HA_MkO -I?C?J?Mko -I??Gb?Mko -I??Ha?Lcw -IA?@OGLkO -I@?AOGLkO -I@?I?CLkO -I@??IOM{? -I@?AOGL{O -I??K?waSG -I@??IOMco -I@?GACMco -IG??GoMkO -IA??HOMko -I@??IOMkO -I@??IOMko -I@?GACMko -I@??IOM{O -I@??IOM{o -I@O?GOFkW -I@??IOM{G -I??_Q_]wo -I?C@I?\wo -I?CB?IDMO -I?F??Cb]? -I?CB?IDAo -I?G?IaEEo -I??H?c[oO -I?O?K_eMO -I?C?JAEEo -I?C?JAEMo -I?C?M?eMO -I?C?L@E]O -I@??IOMkG -I?F??Cb]G -I?_?J?UMW -I?C?L@EMW -I?C?M?eMW -I?C?M?e]W -I@?GIBBMO -IoC?G@XHo -I??HA_Nk_ -IG??gQL[o -I@??KPM{O -IoC?G@XHw -I?@?OKpe_ -I??P?LHe_ -I??OOL`e_ -I??OR?Fm? -I??_OLPm_ -I?O?_od`g -I??OOp``g -I??OOL`mG -I?GA?KTe_ -I?G?_LDe_ -I?GO?LBe_ -IG?G?cFm? -I?O@?KTm_ -I?CA?Kde_ -I?D??Kbe_ -I@@??SFm? -I?CA?Kdm_ -I@?GACFm? -I?C@?LDm_ -I?C_?LBm_ -I@?GACF}? -I?CA?Kd}_ -I?GA?oT`g -I??Q?oh`g -IG?G?KRmG -I?O?Gop`g -I?D??KbmG -I@?G?LBmG -I@?G?LB}G -I??PCOJPg -I??HC_RRG -I?C@AGFeg -I?@?`ONk_ -I?C@I?NkO -I?C@AGNk_ -I?GOACNk_ -I??OR?fu? -I??_aON{_ -I??_aON{O -I??_QEPF_ -I?@@?UPN? -I??I@EPF_ -I??K?d`N? -I??G`F@F_ -I??HAEPN? -I??HAEPN_ -I??H?f@N? -I??I?e`^? -I?CAC_dBg -IA??K_hBg -I?C?K``Bg -I??HCDPNG -I??Ge?bBg -I??HE?RFG -I?C?M?h@w -I@??QG]go -I??OU?f]? -IQ???SFN? -I@?GCDBF_ -IOC??LBN? -I`???SF^? -I@?GCDBN_ -IGC??MB^? -I`???SF~? -I?@@C_XBg -I??IC_pBg -IG?GCCRNG -I@?GCDBNG -I@?GCDB^G -I?@@O_\go -I?A?b?jV? -I??Ha?\go -I??KB?rV? -I??Gb?]go -I@?GAC]go -I??GbAbV? -I?C@AIF]_ -I??HE@RN? -I@?GCDF}? -I@?GAEF]O -I?G?GLPe_ -I?C?GL`e_ -I?C?J?Fm? -I?C?GL`m_ -I?CA?od`g -I?C?Gp``g -I?C?GL`mG -I?C?M?FMG -I?C?GL`eW -I?@?P_Zh_ -I@??QGNk_ -I@?GACNk_ -I?C?J?fu? -I@??ION{_ -I@??ION{O -I??HA_]go -I?C?M?f]? -I??cGTPN? -I?@@GUP]? -I??aGiIEW -I??OqCkgW -I_?GB_iD_ -I??_aYIL_ -I??PF?MU? -I?C@CLK[_ -I??_aYI{? -I??Pq?LgW -I??_WTPl? -I?C?G\al? -I??_WTPlG -I?A?`TKDg -I??_aS[h_ -I??P?\Ww_ -I?G?Ic[h_ -I??__\Ww_ -I@??wH`aW -I??__xIhg -I?GO?\acg -I??Q?skwg -I??OSXaDg -I?C?ISekG -I??_`oMog -I?H?BaEEg -I??S?SfUO -I?CA@GNkO -I??G`Xbd_ -I??HF?[S_ -I@??SLK[_ -I_??HWY{? -I@??KXIL_ -I?@?PoUgg -I?`?B_UIg -I??Gb_Mgg -I@?GAcMgg -IA?GF?qBg -I??IBaQJG -I@??QYE[g -I@??KXI{G -I??OOlbj? -I??QAUeMO -I??a?]R]? -IQ??EWeEg -I??GWd`l? -I?A?WSsSW -I??HAc[h_ -I??_OtSw_ -I??K?dbFO -I??I@_\go -I??G_weog -I?C?G\ogg -I@?G@pB`g -I??OO|cgg -I??G`xa`g -I??QCTeMO -I??OV@WH_ -I?CADGM[_ -I?@?PKYkG -I??HQCTkG -I??HOcTwG -I?GO@cMog -I?O_BaQBg -I??__^G[g -I??K?cN[O -I?C?N@WH_ -I@??UGM[_ -I?@?oSdkG -I??H_cLwG -I@?G@cMog -IG?GBaQBg -I@??G^G[g -I@?GECqBg -I?C?N@WHg -I??I?likO -I??IAcmkO -I??G_WaoW -I?Cg?CBsG -I??H?cKsW -I??H?cK{G -I??GX?Pow -I?G?I_EeG -I?D_?CBmG -I?O?H_EaW -I?G?GLOeW -I?C?GL_eW -I?C?J?EmW -I??K?d`B_ -I??G_Xaco -I?C?GLgkO -I??H?WRog -I??G_Xbd_ -I@??GMiUO -I?C?GN_MO -I?C@?oFpG -I?C?GoFwG -I?C?GN_MW -I??G_clw_ -I?C?GoEwW -I??G_cLw_ -I??OOgJx_ -I?C?GoFwW -I??G_Wqoo -I?C?GKwwO -I?C?GoewW -I??OWSpx? -I?C?G[qx? -I??HOcTr? -I?C@OKTr? -I??HOcTxG -I?C?G[qwG -I??aGSXl? -I?C?HLI{? -I?C?HLIf? -I?C?IKil? -I?A?gXQIW -I??OQKilG -I??__\gcg -I?C?ISe{G -I?@?OsedG -I?C?HNA]? -I?C?IMaN? -I?@?dCkEg -I?C@ECeFG -I??HAc[gg -I?C?MCe]G -I?@?Ossgg -I??K_d`BW -I??G`ckog -I??Gackgg -I@??WN@]G -I??OPgjp_ -I??OgShx? -I??POSTr? -I??OWT`dG -I??G_[qwG -I??OgShxG -I??_`WYp_ -I?C?Hp``g -I?C?IoewW -I??[?c`QG -I@GOOH@_g -IA?GHCWgW -I?COPHAw? -I?CGI_awG -I?C@IOSwG -I?D@?WQ_W -I@?I?KW_w -I@CGGD@gW -I@CI?CDgW -I??K_o`PG -I@?G_LG_w -I@C?GTCgW -I@CAGODgW -I?@G`CWgW -I?D@_GHgw -I?C@GXOwW -I??qO_HwW -I?COPHA_W -I??Y?So_w -I?CGHDOgW -I?CH_H@gw -I?COPHAwW -I?COPHA`w -I??OpHHw_ -I?CGICph_ -I??GiOph_ -I??OX`Hx_ -I@CGACEgG -I@CACGKGg -I?o?HGQ[? -I?o?Gcc[G -I??qO_H_W -I??i_Q@KW -I??K_`HHO -I??J?iGKW -I?o?HGQ[W -I?CGG_boO -I?CC_GdQO -I??aO_LcO -I?CGI_agG -I??GqI_KW -I??PGOXoO -I?CH?GRoO -I??HOgooG -I??HOj?KW -I??IOi_KW -I?CI?M_KW -I??HOj?[G -I??HK`G[W -I??W@FAAo -I?GU?CH@W -I?CGHF?Cw -I??ka?HCw -I?Oc_ODCw -I?CGIE_Kw -I??G@eIP_ -I??GjAGCw -I??KaOcCw -I??HIaGKw -I??HOj?Kw -I??M@OS[w -I?COGSbp? -I?C?G[qp? -I?G?GtSg_ -I?C@_KLw? -I?CP?SFw? -I?C?XbCHo -I?COV?cOg -I??GhROWo -I??g_VOWo -I?CGH_bog -I??QJ?heG -I?GAJ?TeG -I?E?gOFWW -I??GiahX_ -I@G?GgIoW -I@GOOGBoW -I?GP_ODow -I?C@_Wdp_ -I?C?XGpp_ -I?COPGbp_ -I??_hOXp_ -I??_hOXr_ -I?COPDc`o -I??X?Tooo -I?GOOLooo -I??HOho_o -I?C?X`c`o -I??HOhooo -I?GOOLoow -I@??WjHX_ -I??_hOZr? -I?COHCJx? -I?CH?cFr? -I??X?cJx? -I??W_SbxG -I?CG`CFz? -I??GpIiTO -I??W`DJj? -I?CGICrz? -I??WQCrj? -I??gQER\? -I?OOOMb\? -I??GqGrj? -I??HOgrr? -I?GOONB^? -I??_ojHX_ -IK`@??LCo -I??I`IWwO -I?_GGcsOo -I@C?GTc_o -I?@__Sw_o -I??oSDWWo -I?C?KLSI_ -I@??G\Wg_ -I@??wH`aO -Ih???wI@g -I??SHPWWo -I?C?G\og_ -I?COOLagO -I?CAHQSHo -I??HV?SSG -I??PIQWWo -I?GGIaQWo -I??HU?T[? -I??PKPWWo -I??QHQWwO -I??PIQWwo -I???hLKe? -I?_GGLQKO -I?_WGCpOo -I?@H?eWBo -I?@?Osek? -I?@?XaWHo -I?O?XaSHo -I?@?PoUg_ -I??IK_wHo -I?A?X`WWo -I??k?dWXo -I?H?GoRgg -I?O?j?deG -IH?GI?RaW -IK`@??LCw -I??KaOswW -I?D_?Sqoo -I?OH?cs`o -I?@__Swoo -I?G?XhO_g -I?CAHOs`o -I??O]@`M? -I??_Y_woo -I?CGJ?qoo -I?C?Z?s`o -I?G?Y_spo -I?@__Sw`o -I?@H?cwbo -I?@__Swpo -I?@GPCRk? -I?A__TWWo -I??__\gc_ -I??P?[wo_ -I??O\@WWo -I?C?ZASHo -I???g[wp? -I?@__UWHo -I??O]?wHo -I?A__TWXo -Io??OLYLO -I@?AOiLX_ -I?@COgxx_ -I??O\@wpo -I?OGHCRl? -I?CGICbkG -I??Y@CJ{? -I??g_TBf? -I?@?WoecW -I??gaCJl? -I?@GPCRl? -I?OGHCRn? -I??WQCblG -I?@GPCR|? -I?B@?cJ]? -I?Aa?cJN? -I?@@K_MEW -I?B@?cJN? -I?B@?cJ^? -IH??OM[oo -I?AAHO][O -I??_iOxb_ -I?@H?eJ\? -I?B?_S{Wo -I?AH?dJ|? -I?C@QGTh_ -I??HOhPw_ -I??gOdPw_ -I??PGpHb_ -I?@?hOXh_ -IA?OGShh_ -I@?@OhI`W -I??QGohwg -I??IGophg -I@C?QGFgg -I??HK`H[_ -I??O[KoQG -I??W_Sbp? -I??IGq`L_ -I??OqGigW -I?A?XOUSW -I??HU?TKg -I??OoSdoW -I?_APGT[_ -I??_kPH{? -I??KQScDG -I??GqGdc_ -I?AAHOXL_ -I?@?l?hEg -I??O]@`MG -I?O@GrSgo -I?AAHO\[_ -I?A@OhXw_ -I?C?Z?Th_ -I??OZ?Xh_ -I?C?gXagW -I??OWp``g -I??OWp`hg -I?D_OEpPo -I?G?qGVj? -I??aOiXX_ -I?@?hOZxO -I??OZ?xpo -I?B?_Sl[_ -I??_iONm? -I?@__UwPo -I??_iON{O -I?B?_Sf]? -I?CI_M`Z? -I?C?iWeiG -I??HGlge? -I?B__SbU? -I??OZagp_ -I?C?]GtY_ -I??OZahp_ -I??wPCRq? -I?C?Xj_Pg -I??x?cJqG -I??OXr_Pg -IB?GOGBgW -I??OWo`oG -I??OZ?WgW -I??Z?_H_w -I?CR?ODgw -I?COOKbwG -I??GoiiXO -I??OXp``g -I??OXL`eG -I??HGlgeG -I??OXLWwW -I??HGkwqG -I??aGoNkO -I??HGnG[G -IG??gWWwG -IGCOOGBgW -IGC?GcKgW -IGCOOGBwW -IGC?GcKwW -I?GP_XA_W -I?GQ?Wqoo -I@G?gXA_W -I?D?PCs`o -IG?GM?RM? -I??Y@Oqoo -I?O_Gcwoo -I?H?Ocspo -IA?g?Sqoo -IA?GHOqoo -I??gq?o_W -I?`G@CQ[? -I?Oc?_RBO -I?_@GhG[G -I?G[A?o?w -I?_IH?P[? -I?AIP?P{? -I?C_AEEAo -I?@@_OX`O -I?CK?GbSO -I??i?qAKW -I??QKOoIG -I@C?IGIgG -I?`G?ca[G -I??a_OLcO -I?H?k?HCw -I?@K?oaKW -I??i?eGKW -I?_@GpC[W -I??OZ?WgG -I?GY?E@KW -I?_H?dC[G -I?@H?eG[G -I?@H?eG{G -I?GOCDBB_ -I?CK_H@GW -I??gs@@KW -I??WACba_ -I?_IH?P@w -I?GGk@@Cw -I?CKI?`Cw -I?CHK@@Kw -I@GOOH@__ -I@GQC?H@g -I_?GPGQ[? -I@_GGD@[? -I@_?ICK[G -I@?GSHA{? -I?d@?_D?w -IA?k?CHKW -I_?@OgK[G -I@@K?OBKW -I@_GACE[G -I@_AGOD[W -I_?@OgK{G -I?CaO_D_W -I?Ca?CLcO -I?CQCGgGg -IA?K?KgKW -I@CGI?BgG -IAGGGE@KW -I_?GHOQ[G -I@C?IOEgG -I@?IOI@KW -I@?I?MGKW -I@_GGD@[G -I@_?GTC[W -I@?GIQA[G -I@?IK?H[W -IGC?GUC{G -I?CS?DHHO -IC?I?KgCw -IA?GHEGKW -IA?GHQAKw -I_??XOS[W -I@?GSHAKW -I@?GIEGKw -I@?GKDG[W -I@?K?LG[w -I_??XOS{W -I@@?OSTg_ -IWEA??LCo -I?_GgK`SG -I?G_GtO_g -I_?GR_cCg -I?@G`ORg_ -I?O__USHo -I?CHF?ESG -I?@H?qQWo -I@@G?UQWo -Ig??P_FF? -I?I?GdWWo -I?GAGiWwO -I?C?XHEcO -I@C?G\__g -I@G?GMQQO -I?GOOLo_o -I?Ca?USHo -I?GOGUaSO -I??aV?WDG -I??XAQQWo -I@?GIQQWo -I?@PE?JM? -I?GOKDWWo -I?O?hIWwO -I@C?Y?FgW -I?D@F?W@g -IWEA??X@o -IG?OOMWwO -I?H?OcFk? -I?D?`OFg_ -I_?GJ?RM? -IO?OGTWWo -I??Hf?KSG -IG?OGUWWo -IG?W?UQWo -IG?GGqQWo -IG?GGeWwO -IG?OGUWwo -IAG?J?FeG -IHC?IAH@w -IWEA??X@w -IG?OOqEwW -I?O__cLw_ -IA?H?WRh_ -I?H?_cLh_ -I?D@?KXw_ -I?H?_cLx_ -I?H?_Wq_o -I?@G`Oq_o -I?O__Ss`o -I?@G`Oqoo -I@@G?Sqoo -I?C_QCs`o -I??gaOqoo -I@?GIOqoo -I@?I`?Low -I?_GGceSO -I?@P?SXg_ -I@?OOL`a_ -I??gaQQWo -I?D?M?bM? -I?CAHIWwO -I??Ka_kwW -IA?_OiJX_ -I?D?GSbl? -I?O_GcJl? -I?C_ICJl? -I?GQ?SF{? -I?O_OKR|? -I?H?OKRkG -I?GOOLo_w -I?GOOLB{G -I?O__SFf? -I?C_OLBf? -I?O_GcJn? -I?Ca?SFdG -I?GQ?SFn? -I?GOOLB~? -IA?__SLh_ -I?@P?SXw_ -I?L??cFw_ -I??i?oRb_ -I?@@_oLh_ -IA?g?SRh_ -I?@H?cXh_ -I@@?GSXh_ -I?OH?cTj_ -I@@G?SRh_ -I?@@_WXw_ -I?@@_WXx_ -I?GA_WTx_ -I?@@OoThg -I?C_QCTh_ -I?CH?LPw_ -I?C_OLPw_ -I@?GgP`_w -I??X?dHb_ -I?@?pOTh_ -IA?GHORh_ -I??_qOTh_ -I@?GICXh_ -I?CH?dDj_ -I??_oXPw_ -I?@?pOTx_ -I@??YOTh_ -I?G?gXPx_ -IGC?_KLw_ -IGCO?SFw_ -I?H?P_R`g -I?CAJ?deG -IG?OGoJwg -I?@@`OX`_ -IG??gWXh_ -IG??ogLh_ -IG??ogLw_ -IG??gWXx_ -IG??ogLx_ -I??Y@Orr_ -I??gcDH[_ -I?C@IQD{? -IG?GM?RMG -I??I@SUb? -I??GpHBd? -I??Gx@DcO -I??Y@QBL_ -I?_@GhH[_ -I??GYCpd? -I??SPHHF_ -I@??WhHg_ -I?@H?qBL_ -I@??WlGgG -I??XAQBL_ -I??_sHH[_ -I?@H?qB\_ -I?C?gXagO -I?GAGqDL_ -I?CCHHH[_ -I?C@KHH[_ -I?CAHIH{_ -I?AAOoeDW -I?OOPEF\? -IA?_GUwoo -I??XQ?rbO -I_?_GdJN? -I??XAOrb_ -I??PQOubO -I?O_GeJ\? -I?C_QEF^? -I@A?GT[Wo -I?Q?HC][O -I?`?HCZ|? -I?GOQCVj? -I??aOqTX_ -I?GA_iLX_ -I_??gYqYO -I@?GKDH[_ -I_??XOT{? -I@?HA_M_w -I?D?M?bMG -I?@?pOTg_ -IG?GGqBL_ -I_??XOT[_ -I@?@_]GPG -I@?GIQBL_ -I@??[HH[_ -I@?GIQB\_ -I_??XOT{_ -I@?GPaDOw -I?C@IG]iO -I??XAaJX_ -I?G?iaLX_ -I_??WiqYO -IG?OON`e_ -IG??WiXX_ -IG??oiLX_ -IG??WqTX_ -I_??Wj`M_ -IG??WiXx_ -I??oOTPw_ -I??POhHb_ -I?@G_chh_ -I??PQOTh_ -I??H_XPw_ -I??PQOTx_ -I@@?OekPo -I?D?HCZz? -I??HaaLX_ -I?CI`EDZ? -I??[Acix? -I??gapab_ -I??JAosb_ -I?Ca_MHZ? -I?E?Icix? -I@?GcTEN? -I@?IOeDXG -I?O_Guoog -I??GhXWg_ -I_?BSgcEG -IG?Q?UFMO -IoC?Agi@w -I?GOKTXX_ -I??XCdJx? -I@`CA?XH_ -I?@PS?XwO -I@G?W`D_o -I_??j_KIG -I??kA_YWo -Ig?G@oQ@g -I?AHA_YWo -I?I?I_YWo -I??XE?J[? -I?@HC_YWo -I?OoCCYWo -I??caO[wO -I?@HC_Ywo -I???sLSJ? -I?@?`WYg_ -I?AAP_[Ho -I?_AH_[Ho -IC?APG[Wo -I?AA`O[Xo -I@??xAHPO -I??caO[Ho -I?GAK_[Ho -I??cQ_[Wo -I??cQ_[Xo -I?GCI_[Xo -I@?CQG[wo -I?AA`O[xo -IAH@C?RBW -I?@GP_Rg_ -Ig??H_XB_ -I?A_Q_YWo -I??p?SXo_ -I@?GM@BM? -I??oU?YWo -I???Wssp? -I??H@c[o_ -I??PU?[Ho -I@?@gPDaO -I??QT?[Ho -I?CAL?[Ho -I??LA_[Wo -I??LA_[Xo -I?D?L?bEg -I@?GM@BMG -Ig??gOlco -I?B?`ON[_ -I@A?ION[_ -I_?@OjKKo -I??caO{po -I?cA?Kd[_ -I??cb@HFG -I??OOsep? -I??OSLSI_ -I?@c?SXL_ -I?C@`GLo_ -I?B@?SXL_ -I@?@OhI`O -I?AP?THL_ -I?GA_YDL_ -I?CE@GL[_ -I??TAOL\_ -I?C@aGLgg -I??c_XH[g -I?AA`OUBW -I?@HC_J[_ -I??abAHFG -I??GcLSI_ -I??Y?U`L_ -I@?@OhEaO -I?@G_U`L_ -I?H?GUPL_ -I??X?V@L_ -I?CAL?L[_ -I??g_V@\_ -I?@?Wopgg -I??OqOdgg -I??Gh_hog -I?C@GZ@[g -I@_?OLD[_ -I@@GCCJ[_ -IG??kOL{? -I?AAb?hFG -I??MB?pFG -I??IbA`FG -IG?OGUH{G -I?@?hOXg_ -IO@?GSXL_ -I?@@_WXg_ -IG?W?UBL_ -I_?@OgL[_ -I@?@_XDa_ -I@@G?UBL_ -I@?CQGL[_ -I@A?GTHL_ -I@?CIOL\_ -I@?ASGL[_ -I@@G?UB\_ -I@?CQGL{_ -I?@@d?LEg -I?@@OoTgg -IC?@GXH[g -I??Ha_Lgg -I@?CGXH[g -I@?AGYH[g -I@?AGYH{g -I?AA`PMLO -I@A?IO]Wo -I_??hQqRO -I??iC_Zx_ -I@?CQG\wo -I??OWSpp? -I??OgShp? -I??I_Y`L_ -I?C?qGdgg -I?B?p@LKo -I?B@O_\Wo -I@?CQGN{O -I?K?gN@Z? -I??gpGRoW -I??GphKg_ -I?B@GcXY? -I_?BdOSBG -I??GXqcS_ -I?B_oc`QG -I??JCgwR_ -I?B@GdHM? -I??aOyop_ -Io??wHPIW -I?@?k\gKg -I_?DbOUBW -I??Gx`Di? -I?A@iGXY? -I?B__dIIO -I?O?lGwR_ -I_?@YoSgG -I??i?uop_ -I?OOHUop_ -I?C_oN@Z? -I??gWcpq? -IG?I?cNkO -I??GhdKi? -I?B__TQIO -I_?@v?SBG -I??J?yop_ -I?F?J?bEg -I_??hZGKg -I?G?mHYJO -I??gePRh_ -IG?GKorp_ -I?GOMDXJ_ -I??_u`Lh_ -I??j?cXr? -I@?QHOJf? -I??r?SXr? -I?D?PiaPg -I@?GWf@XG -I?AOPTQx? -I?KA_MDZ? -IG?__^Gcg -I?@OPeIXG -I?AOQcixG -IB??G]gog -I?@AlGhEg -I?OGGma]? -I@B?HCJUG -I??GyGpiG -I??GxGpqG -I??GiWqiG -I?OGgM`[G -I?OGGma]G -I??hGcXqG -I??i?cNkO -I??pOgJu? -I??_WvOXG -I??OXT`dG -I??OYgiwW -I?CGHLQy? -I?DOHCJm? -I?C@iGLiG -I@??WnGXG -I??OpTKhG -I??I`qcPg -I?CBAeDJG -I?GBAcTbG -I??HOgrpO -I??gqIB{? -I?AAHS[[G -I?@?XeWx? -I?O?XjOgg -I@?AOmKXG -I?A?YcwxG -I??WXDPy? -I??_iWYiG -I?@?XeWXG -I??J?kwr? -I??XOf@XG -I?B?hChUG -I??QHO\go -I?A@OlWwG -I??PQeKXG -I??M@TSKW -I?GBCcTRG -I??GpHbdO -I?O@Gkwr? -I?CB@iKPg -I?QGHCR]? -I?`GHCR{? -I??a[OXLG -I?Q?HSU[G -I??gy?paW -I_??g\cMG -I?B?j?hEg -I?O@GzOgg -I??q?S\go -I?_BAcTJG -IG??g]Wx? -IG??g]WXG -IG??WuSXG -I_??g^_MG -IG??g]WxG -I?CWICby? -I?CWICbiG -I??oOvAXG -I??JAePJG -I??MBCpFG -I?AA`S[x? -I?B?aSkKg -I?AA`TKLG -I??GYgqy? -I??_xIPQW -I??GXadSo -I??OiUgXG -I?hO?]QWg -I??MPucTG -I?D@?oE_W -I?CAHGWwG -I??K_WoOW -I@?I?cK_w -I?D?HCWgW -I@C?IOEgW -I??H_XOwW -I@?CQGoBG -I?C@GGXoO -I??I_Y_KW -I??GCdaB_ -I??Kb?KCw -I??G\@OKw -I?C?Gsep? -I??H_cLw? -I?C?Gtcg_ -I??H_ZOWo -IG?GJ?ReG -I?C?qGdw_ -I??QOihX_ -I?SoON__w -I?S@G]opG -IgC?H?RBO -I??gu@@KG -I@GO?SFo_ -I@?G@KYo_ -I@GU?ODOw -I@?M@GWOw -IAH@C?RBO -IGD@C?LCo -II?HG_H_w -IGD?gO``w -IoCOOGaOO -IK_PA?H@g -I@Q?_CdAo -I`?GJ?BEG -IgCOP?D?w -I`GOQ?D?w -IoCQ@?EAW -I@@K`?HoW -I?L??ce_o -Ih?G?oB@g -I_?_j?HEG -IGCGM?BKG -IIGOS?B@W -IqGOO?B@W -I@?IOi_oW -I@@G?SRg_ -I?HO?Sq_o -I@D??SFg_ -I@O__UC@w -Ig??p_DBG -I@AJ?_HOw -I@EB?GHOw -I?WOM?BKG -IH?G_MGOw -IH?GoI@Ow -I@CAGY_oW -I@@GOe_ow -I?GO?\ac_ -I?K_GDP_o -I?K_aIA@w -I?OHM?PKG -I@?J?iGOw -I@CJ?I@Ow -I@GOQIAoW -I?GPaQCow -IAJ@GCHCW -IGF?GCJKO -I?N@GD@CW -IK?@Wj?AW -I?F__ChOo -I?N?GCRWO -I@?gaFGBo -Io??yOcCW -I?D?Xb_`o -I@@GaChb_ -I?AAhXGKG -I?@H_p`b_ -I?@PQOpf_ -I@OP?UFV? -I@E?GTbv? -I@?Y?Sbr? -I@GQ?SFr? -I?GY@CRr? -I?GW`DK_w -I?GX?dBrG -I@@?iOhb_ -I@?XAPBb_ -IAC_GVBj? -I?CQPJEiO -I@?GjAHp_ -IAC_ONDi_ -I?CQPIipO -I@D?GUbV? -I?KAIadF_ -ICCGICrZ? -I?S__NabO -I?L?_Mbr? -I`@@WGHCW -IAI?GLaEO -IQ?@gZ?AW -I?J?GSR[? -I?F?GSqWO -IIA?GKiEO -I@AGaDgBo -Io?@WhGCW -I?OGl@o`o -I?SD?hc`o -I?CLA`c`o -I?BAHcgEG -I?o_GcpR_ -I?oo@CRR_ -Io??ohIHO -I?SD?gdp_ -I_@@OoeDW -Io??gXQIW -I?B@HdGEG -I?hO?cbR_ -I?@SP_hF_ -I?_J@_TR_ -I?@SP_hp_ -I?@c`OXr_ -Io??gpIHO -I?S@Gi`p_ -I@?HOhK_o -I@?QOY`p_ -I?GI`aDPg -I?B@GtGKG -I?gOI_bR_ -I?KAHIPF_ -I?_Ha_dR_ -I?B@gOXWO -I?WOKCpR_ -I??qOq`p_ -I??ZC_hR_ -I??i_q`r_ -ICD?HCZZ? -I?gQ?LqbO -I?hO?dbb_ -I?hO_Ddao -I?GGhb@Pg -Io??okgPG -I?SOHE`p_ -I@?HOhI`O -I?CQPI`p_ -Ic??WgiWW -I?P@OiacW -I?F@O`DGw -I?_IH_VyO -I@C_G^AUG -I??KYosw? -I?@PUQoF_ -I??MTHSM? -I?@PO~GkG -I?Q`_cLu? -ICCQHHIIW -I?o__]cSg -IOGOG^AUG -I@E_ICJu? -ICCPPHIPW -IA?geQBHg -I?hO@eIPg -I??guAdSo -I?ASZ@TIo -I?KR?NG`W -I??XUAdSo -I@?I@SUr? -I?GQ@KYr? -I?GSA?MKO -I?Oc?_FMO -I?__a?FMO -I_?__OF]? -I_?OP?F]O -I@?KA?[Go -I?EA@?FMO -I?CcA?FMO -IGA?_OF]? -I?EA@?F]O -IG?OS?F]O -I_?__OF}? -IG?OS?F}O -I?D@C?X@w -IO?OQ@FMO -IG?OS@FMO -I_?__QF]? -I?O_c?N{O -ICO_?CBFG -I@`??CBNG -I`?G?CB^G -I`?G?CB~G -ICO_?CFMO -ICO?H?FMO -I@OC?GFMO -I@_?I?FMO -I`?G?CF]? -I`?G?CF]O -I_C?H?F]O -IGE??CF]O -IGC?K?F]O -I`?G?CF}? -I`?G?CF}O -IGC?K?F}O -I@?KA?MKW -I@_?I?FMW -IGE??CF]G -IGC?K?F]W -I?E@A@FMO -IOC?I@FMO -IGC?K@FMO -I`?G?EF]? -I_?__ON{O -IGC?K?N{O -I`??GON{O -I`?G?FBNG -I?`@?gJ[_ -I?CcAGJ[_ -I?H?cGJ[_ -I?OcB?RFG -I?`?_Kh[_ -I?GQCCL{? -I?Cc?LH{_ -I?COPHB`_ -I?_P?TDL_ -I?GQ?UDL_ -I?GPa?L_w -I?H?_UDL_ -I?GQCCL[_ -I?OP?UD\_ -I@?GgP`_o -I_?_b_KAg -I?_PAGYWo -I@?KAGYWo -IG?OU?FM? -I?OPCGYWo -I_GSA?MKO -I?O_cC[wO -I?OSH?XwO -I@?ICGYwo -IAGCGGXwO -I?_W_CdOo -I?H?Ocs_o -I?`?_chH_ -I?O_cC[Ho -I?D?P_e_o -I?IA?c[Ho -I_?OR?FM? -I?Oc?c[Wo -I?Q@?gYWo -I?Oc?c[Xo -IAI??KYWo -I?D@c?LGw -I_C@?KL[_ -I_GO?SF[_ -IGCC?KL[_ -I@`??KJ[_ -I@_A?KL[_ -I_?__WJ{? -IGCC?KL{_ -I_GO?SF{_ -I?_G_dEHO -IA?c?SLL_ -I_?__WJ\_ -I@AA?WJL_ -IG?S?SL\_ -I@@C?WJ[g -I_?__WJ|_ -I_?P?XJL_ -IGA?_TUJO -IQ??ONILO -I?Oc?gZx_ -IQ?GOGBKW -I`??OKK[G -I`??WOD[W -I`??OKK{G -I`??WOD{W -I?D?HOq_o -I_?_b?JF? -IO?I?gYWo -I`?G?KYWo -I_?Gb_KGg -IG?K?gYWo -IK?G?KYWo -IGA?_S[wO -IG?O[?XwO -IG?K?gYwo -IG_?gGXwO -I`?G?KYwo -I?Q@?csAo -IGA?_S[Ho -I`??OK[Wo -I_?__S[Xo -IK??OK[Wo -IGA?_S[Xo -I`??OK[wo -IGA?_S[xo -I_G?W`dco -ICO_GCxoo -I_?__T[Ho -IGA?_S{Po -IQ??OK{oo -I?O_k?xpo -I_C?GKh[_ -I@@?SGJ[_ -IG?KB?RFG -I@_?GLH[_ -IGC?KOF{? -IGC?GMH{_ -I?_GgccOW -IG?G_YBL_ -I@?Ha?L_w -I@?I?YBL_ -I@?ICCL[_ -I@?I?YB\_ -I@?I@_L_w -I?Q@?ciDO -I@@@?SX`_ -I@A?QGYWo -I?E@AGYWo -I`?KA?[Go -I?`@G_XwO -I?D@K?XwO -I?_WgD@GW -I?C?sLCHG -I@?GxA@OW -I?GSAC[Ho -I?CcAC[Ho -I?D@K?bEW -IGD@C?X@w -I?EA@CFFG -I@AAGO\Wo -I?EAH?\Wo -I@@?GSXg_ -I_?Gb?bF? -IO?OQGYWo -IGC?M?FM? -IG?OSGYWo -I`?KA?MKO -IG?GcC[wO -IG?KG_XwO -IG?OSGYwo -IGCCGGXwO -I?D?HCw_o -I?Q?`ccAg -IG?OSC[Ho -I_C?J?FM? -IG?K?c[Wo -IGA?OgYWo -IG?K?c[Xo -IGE??KYWo -I@?KB@BFG -IH?KA?RBW -IGC?M?FMG -IWC?I?X@w -I`?KA?MKW -IGC?K_MwW -IG?K__LwW -I_G?Gpeco -IGA?Wb`Eo -I?Q@G_N[O -I@AAGON[O -I`??ONILO -IGA?OgZx_ -I`??gOloo -I_C_GCxoo -I_?__TFN? -I`??OK{oo -I_?__S{po -IGA?GcJN? -I?O_GeBN? -I?H?SCRLG -IO@?GcJ]? -I_?_GcJ^? -I?E?ICbN? -I?D?KCbMG -IGA?GcJ]? -IGA?GcJ^? -I@?HAC[_w -I?C_KDBN? -I@@?GUB]? -I?DC?Kb^? -I?D?KCb]G -IGA?GcJ}? -IGA?GcJ~? -I?`@?cN|? -I_?H?cN|? -I?Gg_dH`_ -I?O__mIZ? -I@@?O]Qx? -IA?_oUDZ? -I@O?KSUx? -I?Ggi?RaW -I?GQ[?hDW -I?GX?dH`_ -I?GgohA_W -I?D?hEHZ? -I?E@?\Qx? -IA?GpEDZ? -I@?KASUx? -I?GPIC[aW -I?E?iCkWW -IGA?yGHKG -I?OS@ckp_ -I@AA?wip_ -ICO?Hckp_ -I_?__xIHg -I?Q@?tSHg -IGC?gMHZ? -IGC?G]Qx? -IG?G_mIZ? -IG?OWUPx? -I@?JAEPBW -IG?OOuEXG -I@O?G]oog -IG?OScMxG -I?F@Gd@IG -I?D@@iIPg -I?GSACN[O -I?H?cWVY_ -I_?G`Xbd_ -I_@@GghE_ -I`??HWYp_ -I_?OPckp_ -IG?OTFKDo -I?GXOhA_W -I?D?pEDZ? -I@?I?]Qx? -I_@_gcHIG -IGA@iGHEG -I?Oc?ssp_ -IGA?_\gcg -I_GO?^AKg -IAB@GcHIG -I?F@I?bEW -IK??wIHWW -I?D@?CX`O -I?CaCGWGg -IA?K@CKKW -I_?H?cK[G -I@?I?YAKW -I@`G?CB[G -I@_?IOE[W -I_?H?cK{G -IC?I@CKCw -I@?G[@@Kw -I?D@@CX`_ -I?C_Gt__g -IA?H?YQWo -IAG?GMWwO -I?GQ?iJX_ -IQ??GNIMO -IGC?GoEgW -IGC?GoEwW -IG?OOgJh_ -IG?G_cLw_ -IG?OOgJx_ -IGC?GoFwW -I?D@?oe_o -I@?H_XA_W -IG?G_Wqoo -I@?I?Wqoo -I?D@?KXg_ -IG?G_YQWo -IGC?GMWwO -IGC?J?FeG -IGC?GqEwW -IG?OOiJX_ -I`??GNIMO -I?O_gchr? -I@O?Gkir? -IG?G_kir? -IGC?gKhr? -I?O_`SUrG -I?GQEWiDg -I?O`GcXr? -IGC?oKdr? -I?GQ@SUr? -I@@?SSUx? -IAG?oMDZ? -I_@?gWqIW -I@@?OmIXG -I?O__^_cg -I@@?OmIxG -IG?OgUHx? -IGC?oMDZ? -I_?_WTPLG -IG?OgUHXG -IG?G_^_cg -IG?OgUHxG -I@?MACpBW -I@BAHCHEG -I?FAHC`EG -I@?KACN[O -I_?OPgjp_ -I_@@GgiEO -I_?OPgip_ -I`??G[wog -I`?G?^AKg -IK?CQKWHG -I@OOHEHp_ -I?R@gO`CW -I?O_haHp_ -IAAAXG`EG -I@?GhXG_g -I@?YCChR_ -I??gx`@aG -I?K_i?FaW -I?O_kOpR_ -I`?BGiGAW -IK_AHGICW -I@OCOhc`o -IGB?GcJM? -Ig?_wGPAW -Ik??wODGW -I?QH?do`o -ICCI@Dc`o -IAA@GKXY? -IGQ?gKHKG -I`@?GKiEO -I_D_GCJKO -I@?[ADgBo -I_@_GcJM? -I?`H?doBo -IC?Y@DgBo -IGQ?gQ`Cw -I?_aOiXX_ -I_?_iOxb_ -ICO?hQdR_ -I?__iPpb_ -I_OH?esBo -I?`H?foBo -I?E?iOeWW -I?EI@CRx? -I@CGKDBx? -I?GW`DK_o -I?GcQGYDW -I?EGaCbZ? -ICCGICbZ? -I?_Y@ERZ? -I?CpQIBu? -ICKR?GFQO -IC?I`Lgf? -I?EA`LgbG -ICO?hUcRG -ICSr?CH@W -I_?WRIQGw -I?Cq?U`p_ -I@?GxAHPO -I@O?kGhR_ -IAIAHGPAg -I??OpTKh? -I?E@IHQIO -I_@_x?PAW -I?_PGp`R_ -I?J@gP@CW -I?O_k_hR_ -IK?CQKSIG -ICO?gY`Wg -I@?Y?U`p_ -I?OPGq`p_ -I?Ci?e`r_ -I@OOGU`p_ -IOGI?cTR_ -I?SS@Cdp_ -I??PPhIb? -I?EAHHQIO -IAGH?cFb? -IGAAGkgEG -I?_Y@CpR_ -IK?CQSSHG -I?`@OhacW -I?DCP_dp_ -IG_W?cbR_ -I@OD?gLp_ -I?CqCOJHg -IGAA`OUBW -IGAAGghE_ -IQ?E@GXB_ -I?Os?chp_ -IA__HORp_ -IAG@GKXb? -IG_?godR_ -IOCI?cdR_ -I@Oc?cLp_ -IA?k@CXr_ -I??_hpKa_ -I?`@_odR_ -I@IA?WRp_ -I?MA?gbr_ -I`G?I?TAo -I`G?GgIoW -I`GOOGBoW -I_GP_ODOw -I_GP_ODow -IK?B?iIBO -I`??pGLp_ -I_C?X_dp_ -I_COPGbp_ -I_@@GkgEG -I_?_hOXR_ -I_?OX_hp_ -I_?_hOXr_ -Iq?@OoD@g -IoCA`OE@W -IcG@IGHCg -I_GTA_EAW -IGQ@gGHCW -IAIBGGPAW -I_D_gC`AW -IoCAWG`CW -I?MA?dc`o -ICOf?_H@W -IAI?_Tc`o -I_CH?dc`o -I?EBGHPIO -I`?AXOS_W -I?EA`Pc`o -I_C@Ohc`o -IAI?_Tc@w -ICOP?MiRO -I?`P?dkao -I_?_gphb_ -I_@_gSHKG -IAG@OKTb? -IGI?iGHCg -I??OxPHh? -IAB@HCHEG -I?R@GcPIG -I?EAHL_EG -I?_X@DPR_ -I@?I_Y`p_ -I?J@GcPQG -I?OT?ghp_ -IA?H@KYb? -I`@@GgIAW -IA_H@CTR_ -I??OxHHi? -I?gQ?gbR_ -IBAAHGIAW -I?_a_odR_ -I@@CP_Lp_ -I?Sc?cdp_ -I?DD?odr_ -I`??WgioW -Ik?@OgI@W -IcG?X_EOW -IIA@GKHEG -I`@@GKHEG -I@QAGKHKG -I?R?GciKO -Ig?_gKHEG -I`?@iIGAW -Ik??WoEGW -I?CcQ`c`o -IoC?wH@GW -ICC_QDc`o -IGCCOhc`o -IGa?gP`Cw -IGE?gOFWW -I?QP?dkao -I_GQ?KybO -I?HS?dhb_ -I_G?grDJ_ -ICD?HCJZ? -IGC_GVO_w -I?M?ICRx? -I?COQgi`_ -I?U@?cFN? -I_@?XOUKW -I?M?_LBZ? -I@@GOeBN? -I@@GOeBXG -I?S_cCFZ? -I?F?QCsGw -I?c__LBZ? -IA_G_KbZ? -ICD?HCJ^? -I@AI?SRx? -I@@GOeBxG -I?S__MBz? -IA___KJZ? -ICO__SFZ? -IAI?GcJx? -ICO__SFz? -I?CWCdIH_ -I@`?_SFN? -ICO__SF^? -ICO__SF~? -IGCOON__w -IGCGKCRx? -I_?OWp`Hg -I_CG`CFZ? -IG?W_UBXG -IGCGcCFZ? -IG?[?cJx? -IG?W_UBxG -IGCG_MBz? -IC?IPGyTO -I_C_OMiTO -I@EA?Sfv? -ICC_Y?xPo -ICCI@GrR_ -I_GOONBN? -I@`?OKrv? -IECHY?`@W -IKCOOLIHO -I?HL?dPf? -IGGOOnCag -ICSq?CFIO -I?`HOhQgO -ICKQBGEAg -IECgQGBGg -IKCOOTEHO -IH?KQGRN? -I?HT?dHf? -I?S`aEDFG -IGCOPNCag -I@?G]QcS_ -I??X[PPw? -I@?KIMWY? -I?D@MQoF_ -IOCa_NGBW -I?GQQMYhO -I@Gg_dH`_ -IAI_GSR]? -I@Q_GcJu? -I@O_G]QUG -IOC_G^AUG -IECGX@BHO -IGDOHCJm? -I?C[ASe{? -I@H??cJ`_ -Ih?GO_D?w -I_?OZ?`EG -I`__a?H@g -IOCR?ODOw -I@IAG_HoW -I@GO?]AOg -I?K_k@@@w -I?OoPCRr? -IAGG_Kbf? -IGCH?fC@w -I@O_GcJr? -IGCG`CFr? -I@D@?KJv? -I@D@?UFV? -I_COOMiXO -I@@?qGhb_ -I?D@Gp`b_ -I?NAGC`CW -I?aIPGqSO -ICKQ@GFQ_ -IECHQGDGg -I?Ot?dHf? -I??YPUSw? -I@?KINGM? -I_?_hrGBg -I?DH@eMsO -I@?G]AdSo -I?DQPGbm? -I?C[ASew? -I?OgpGR{? -ICCY@CFY? -IGGOQMSag -I?GY@fAbG -I?CoQN_ag -I?_IJOUKW -I?@QPegFG -I?__iON[O -I?C_]?tQo -I?O_WmoUG -I?_IHXQKW -I?O_g]oqG -I?OGl@p`o -I?C_lPHPg -I?__iOxPo -I_?_g^GMG -I@?KqgkwG -I?OkSHPK_ -I?Sc@dEf? -I?DcAcif? -I@`KACXH_ -ICCQPKgPG -IK?GaSef? -ICO_aKif? -I@?IKXWg_ -I??XUQcS_ -ICCYACiHO -I?`HKOqSO -I?`HOhacO -IE?H@LIf? -IEG@GLHf? -ICD@@WYPg -I?Sc@eERG -I?GUAMYJO -I`H?gWQAW -IC@I`Chf? -IC@a_Shf? -I`C@GLHf? -I_O_cKkEg -ICCY@DIHO -I?aIPHQKO -IEG@OLDf? -I_?gu?dCw -I@aIACXH_ -ICCQQKcIG -ICO_aSef? -I??guQcS_ -I@?IKZAM? -I?d@Agrb_ -I?D`SCTu? -I?CQPNCiG -I?C_mDHJG -I?OpSCTu? -I?`@OmWXG -I?O_onGhG -I?`?hOZXO -I@OgGeBu? -IOCoICJu? -I_?pOgJu? -I_GOG^AMG -I?C_qMcqG -I@OoGUBu? -I_G?gvCJG -I_?WPjAGw -IAA`_SLu? -I?GQ]?hDW -I@KGKdEwG -I@OGM?BKG -Ih??GoH@g -I_C_J?BEG -IqGO?CK?w -I@?I_Y_oW -I@@G?Sq_o -I@`@_CH@W -IH?GcCKOw -I@?G?]aS_ -I@?JC_KOw -I@?HcPCow -IGD@C?X@o -II?GX?P_w -I?CY@FIhO -I`?@Wj?AW -I@R?GCJKO -I?F_oD@GW -I?D@Gr_`o -I?C[ACbx? -I?D@Gr`b_ -Ig?_gWQAW -I??gpGRq? -I?o_`GRR_ -I`_?X_EOW -I?F?HCYWO -IGE?GLaEO -I`?@gZ?AW -I?DD?pc`o -I?J?_dhb_ -I?E@IH`E_ -I?CY@E`p_ -I?E?pH`og -I?F@HD@EG -IgC?H?X@o -I@?G@cMo_ -I@?M@_KOw -I@?JIqobG -IQ`@_GH?w -I`Q@G_H?w -I`?L?hG?w -IoD@?WQ@w -I@A@WpHp? -IB?KSHIHO -IK?KQSSHG -I@?IGzAi? -IGIOaEKAw -IG?qSaHF_ -I@?IWj@i? -IB?KASeb? -I@?IOzCg_ -I@AAGwiq? -I`?I@SUb? -IGAPSPPF_ -I??g}P_cG -I@@?yQHh? -I?HK`b@F_ -IKCY?CdAo -IGCQPII`W -IGLC?cFf? -IKOG_Kbf? -IKO__SFf? -ICCQPScPG -I@`ICC[Go -ICOgaCbf? -ICOhAC[Cw -I?DH[APWO -IEGH?LBf? -IPOG_LBN? -I@GSIQiTO -I?DKb?xh_ -I?HcQ_Zl? -I@GQSGN{? -I@GQQIhd_ -Ii?HOsSHG -I?Ka_mDqG -I?CpShIoW -I@GO[hIw? -I?EJQ_phG -I@KaKIQQO -IG`HOgR{? -I@C[QIaWW -I?dS@pEGw -I@GG[hQw? -I`Gg_dH`_ -I@KGIeEw? -I?GTbPSb? -I@GTQhG`G -IgEP?KJ]? -I?`ad_kEg -I?GTbHWb? -IAISQCd]? -I@GTcXGPG -I@GTShGPG -I``@_OD?w -I`?LA_K?w -I@@AWqHh? -IB?K@MIR? -I@?[IDHi? -IpD?GUbV? -IsP@OkWHG -I`?M@_K?w -I@AISHBM? -I_OgpGR{? -I?dPcPDGw -I@KcIIQQO -It?IQGiDO -IsPH@CYDO -IqKaK?X@w ->A ./geng -cfd1D9 n=10 e=9-16 ->Z 3389 graphs generated in 0.01 sec diff --git a/tools/nauty25r9_mac/nautestc.ans b/tools/nauty25r9_mac/nautestc.ans deleted file mode 100644 index db37078..0000000 --- a/tools/nauty25r9_mac/nautestc.ans +++ /dev/null @@ -1,2 +0,0 @@ - 100 graphs : n=114; e=171; mindeg=3; maxdeg=3; regular - 100 graphs altogether; cpu=0.000 sec diff --git a/tools/nauty25r9_mac/nauthread1.c b/tools/nauty25r9_mac/nauthread1.c deleted file mode 100644 index c15d2e7..0000000 --- a/tools/nauty25r9_mac/nauthread1.c +++ /dev/null @@ -1,134 +0,0 @@ -/* nauthread1.c - - This program tests dense nauty running in multiple threads. - It must be linked with nauty as configured with - --enable-tls and will only run on systems which support - thread-local storage. -*/ - -#include -#include "nauty.h" -/* MAXN=0 is defined by nauty.h, which implies dynamic allocation */ - -#define THREADS 1000 /* Total number of threads to run */ -#define ATONCE 20 /* Number of threads to run at once */ -#define GRAPHSIZE 200 /* Least graph size to use */ - -typedef struct -{ - int n; - boolean writeautoms; -} params; /* Used to pass parameters to the thread */ - -static void* -runit(void * threadarg) /* Main routine for one thread */ -{ - DYNALLSTAT(graph,g,g_sz); - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DEFAULTOPTIONS_GRAPH(options); - statsblk stats; - set *gv; - - int n,m,v; - - n = ((params*)threadarg)->n; - - /* Default options are set by the DEFAULTOPTIONS_GRAPH macro above. - Here we change those options that we want to be different from the - defaults. writeautoms=TRUE causes automorphisms to be written. */ - - options.writeautoms = ((params*)threadarg)->writeautoms; - - m = SETWORDSNEEDED(n); - - /* The following optional call verifies that we are linking - to compatible versions of the nauty routines. */ - - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC2(graph,g,g_sz,m,n,"malloc"); - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - - /* Now we will make a polygon of n vertices */ - - EMPTYGRAPH(g,m,n); - for (v = 0; v < n; ++v) ADDONEEDGE(g,v,(v+1)%n,m); - - if (options.writeautoms) - printf("Generators for Aut(C[%d]):\n",n); - densenauty(g,lab,ptn,orbits,&options,&stats,m,n,NULL); - - if (options.writeautoms) - { - printf("order = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - } - if (stats.numorbits != 1 || stats.grpsize1 != 2*n) - fprintf(stderr,">E group error\n"); - - /* If we are using multiple threads, we need to free all the dynamic - memory we have allocated. We don't have to do this after each - call to nauty, just once before the thread finishes. */ - - DYNFREE(g,g_sz); - DYNFREE(lab,lab_sz); - DYNFREE(ptn,ptn_sz); - DYNFREE(orbits,orbits_sz); - nauty_freedyn(); - nautil_freedyn(); - naugraph_freedyn(); /* Use nausparse_freedyn() instead if - sparse format is being used. */ - - return NULL; -} - - -int -main(int argc, char *argv[]) -{ - int n,ret; - pthread_t thread[THREADS]; - params par[THREADS]; - int started,finished; - -#if !HAVE_TLS - fprintf(stderr,">E This program needs to be linked with a version\n"); - fprintf(stderr," of nauty successfully configured with --enable-tls.\n"); - exit(1); -#endif - - for (started = finished = 0; finished < THREADS; ) - { - if (started == THREADS || started-finished == ATONCE) - { - if ((ret = pthread_join(thread[finished],NULL)) != 0) - { - fprintf(stderr,">E Thread joining failed, code=%d\n",ret); - exit(1); - } - ++finished; - } - else - { - /* We vary the graph size a bit as it tests the - thread independence better. */ - par[started].n = GRAPHSIZE + (started % 17); - par[started].writeautoms = FALSE; - - if ((ret = pthread_create(&thread[started],NULL, - runit,&par[started])) != 0) - { - fprintf(stderr,">E Thread creation failed, code=%d\n",ret); - exit(1); - } - ++started; - } - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/nauthread2.c b/tools/nauty25r9_mac/nauthread2.c deleted file mode 100644 index 89b74b3..0000000 --- a/tools/nauty25r9_mac/nauthread2.c +++ /dev/null @@ -1,140 +0,0 @@ -/* nauthread2.c - - This program tests sparse nauty running in multiple threads. - It must be linked with nauty as configured with - --enable-tls and will only run on systems which support - thread-local storage. -*/ - -#include -#include "nauty.h" -#include "nausparse.h" -/* MAXN=0 is defined by nauty.h, which implies dynamic allocation */ - -#define THREADS 1000 /* Total number of threads to run */ -#define ATONCE 20 /* Number of threads to run at once */ -#define GRAPHSIZE 500 /* Least graph size to use */ - -typedef struct -{ - int n; - boolean writeautoms; -} params; /* Used to pass parameters to the thread */ - -static void* -runit(void * threadarg) /* Main routine for one thread */ -{ - DYNALLSTAT(int,lab,lab_sz); - DYNALLSTAT(int,ptn,ptn_sz); - DYNALLSTAT(int,orbits,orbits_sz); - DEFAULTOPTIONS_SPARSEGRAPH(options); - statsblk stats; - sparsegraph sg; /* Declare sparse graph structure */ - - int n,m,i; - - n = ((params*)threadarg)->n; - options.writeautoms = ((params*)threadarg)->writeautoms; - - /* Initialise sparse graph structure. */ - - SG_INIT(sg); - - m = SETWORDSNEEDED(n); - nauty_check(WORDSIZE,m,n,NAUTYVERSIONID); - - DYNALLOC1(int,lab,lab_sz,n,"malloc"); - DYNALLOC1(int,ptn,ptn_sz,n,"malloc"); - DYNALLOC1(int,orbits,orbits_sz,n,"malloc"); - - /* SG_ALLOC makes sure that the v,d,e fields of a sparse graph - structure point to arrays that are large enough. This only - works if the structure has been initialised. */ - - SG_ALLOC(sg,n,2*n,"malloc"); - - sg.nv = n; /* Number of vertices */ - sg.nde = 2*n; /* Number of directed edges */ - - for (i = 0; i < n; ++i) - { - sg.v[i] = 2*i; - sg.d[i] = 2; - sg.e[2*i] = (i+n-1)%n; /* edge i->i-1 */ - sg.e[2*i+1] = (i+n+1)%n; /* edge i->i+1 */ - } - - if (options.writeautoms) - printf("Generators for Aut(C[%d]):\n",n); - sparsenauty(&sg,lab,ptn,orbits,&options,&stats,NULL); - - if (options.writeautoms) - { - printf("Automorphism group size = "); - writegroupsize(stdout,stats.grpsize1,stats.grpsize2); - printf("\n"); - } - if (stats.numorbits != 1 || stats.grpsize1 != 2*n) - fprintf(stderr,">E group error\n"); - - /* If we are using multiple threads, we need to free all the dynamic - memory we have allocated. We don't have to do this after each - call to nauty, just once before the thread finishes. */ - - SG_FREE(sg); - DYNFREE(lab,lab_sz); - DYNFREE(ptn,ptn_sz); - DYNFREE(orbits,orbits_sz); - nauty_freedyn(); - nautil_freedyn(); - nausparse_freedyn(); /* Use naugraph_freedyn() instead if - dense format is being used. */ - - return NULL; -} - - -int -main(int argc, char *argv[]) -{ - int n,ret; - pthread_t thread[THREADS]; - params par[THREADS]; - int started,finished; - -#if !HAVE_TLS - fprintf(stderr,">E This program needs to be linked with a version\n"); - fprintf(stderr," of nauty successfully configured using --enable-tls.\n"); - exit(1); -#endif - - for (started = finished = 0; finished < THREADS; ) - { - if (started == THREADS || started-finished == ATONCE) - { - if ((ret = pthread_join(thread[finished],NULL)) != 0) - { - fprintf(stderr,">E Thread joining failed, code=%d\n",ret); - exit(1); - } - ++finished; - } - else - { - /* We vary the graph size a bit as it tests the - thread independence better. */ - par[started].n = GRAPHSIZE + (started % 17); - par[started].writeautoms = FALSE; - - if ((ret = pthread_create(&thread[started],NULL, - runit,&par[started])) != 0) - { - fprintf(stderr,">E Thread creation failed, code=%d\n",ret); - exit(1); - } - ++started; - } - } - - exit(0); -} diff --git a/tools/nauty25r9_mac/nautil.c b/tools/nauty25r9_mac/nautil.c deleted file mode 100644 index eca6b56..0000000 --- a/tools/nauty25r9_mac/nautil.c +++ /dev/null @@ -1,743 +0,0 @@ -/***************************************************************************** -* * -* Auxiliary source file for version 2.5 of nauty. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : renamed to version 1.3 (no changes to this file) * -* 28-Sep-88 : renamed to version 1.4 (no changes to this file) * -* 23-Mar-89 : changes for version 1.5 : * -* - added procedure refine1() * -* - changed type of ptn from int* to nvector* in fmptn() * -* - declared level in breakout() * -* - changed char[] to char* in a few places * -* - minor rearrangement in bestcell() * -* 31-Mar-89 : - added procedure doref() * -* 5-Apr-89 : - changed MAKEEMPTY uses to EMPTYSET * -* 12-Apr-89 : - changed writeperm() and fmperm() to not use MARKing * -* 5-May-89 : - redefined MASH to gain about 8% efficiency * -* 18-Oct-90 : changes for version 1.6 : * -* - improved line breaking in writeperm() * -* 10-Nov-90 : - added dummy routine nautil_null() * -* 27-Aug-92 : changes for version 1.7 : * -* - made linelength <= 0 mean no line breaks * -* 5-Jun-93 : renamed to version 1.7+ (no changes to this file) * -* 18-Aug-93 : renamed to version 1.8 (no changes to this file) * -* 17-Sep-93 : renamed to version 1.9 (no changes to this file) * -* 29-Jun-95 : changes for version 1.10 : * -* - replaced loop in nextelement() to save reference past * -* end of array (thanks to Kevin Maylsiak) * -* 11-Jul-96 : changes for version 2.0 : * -* - added alloc_error() * -* - added dynamic allocation * -* 21-Oct-98 : use 077777 in place of INFINITY for CLEANUP() * -* 9-Jan-00 : added nautil_check() * -* 12-Feb-00 : did a little formating of the code * -* 28-May-00 : added nautil_freedyn() * -* 16-Aug-00 : added OLDNAUTY behaviour * -* 16-Nov-00 : moved graph-specific things to naugraph.c * -* use function prototypes, remove UPROC, nvector * -* 22-Apr-01 : added code for compilation into Magma * -* removed nautil_null() * -* removed EXTDEFS and included labelorg * -* 21-Nov-01 : use NAUTYREQUIRED in nautil_check() * -* 26-Jun-02 : revised permset() to avoid fetch past the end of * -* the array (thanks to Jan Kieffer) * -* 17-Nov-03 : changed INFINITY to NAUTY_INFINITY * -* 14-Sep-04 : extended prototypes to recursive functions * -* 23-Nov-06 : replave targetcell() by maketargetcell() * -* 10-Dec-06 : remove BIGNAUTY * -* 10-Dec-10 : remove shortish and permutation types * -* 11-May-10 : use sorttemplates.c * -* 27-Mar-11 : add writegroupsize() * -* 15-Jan-12 : add TLS_ATTR attributes * -* 16-Sep-12 : small change to objoin(), more efficient for sparse case * -* 22-Sep-12 : change documentation of orbjoin() * -* * -*****************************************************************************/ - -#define ONE_WORD_SETS -#include "nauty.h" -#ifdef NAUTY_IN_MAGMA -#include "io.e" -#endif - - /* macros for hash-codes: */ - /* Don't use NAUTY_INFINITY here as that would make the canonical - * labelling depend on whether BIGNAUTY is in operation */ -#define MASH(l,i) ((((l) ^ 065435) + (i)) & 077777) - /* : expression whose long value depends only on long l and int/long i. - Anything goes, preferably non-commutative. */ - -#define CLEANUP(l) ((int)((l) % 077777)) - /* : expression whose value depends on long l and is less than 077777 - when converted to int then short. Anything goes. */ - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#if !MAXN -DYNALLSTAT(int,workperm,workperm_sz); -#else -static TLS_ATTR int workperm[MAXN]; -#endif - -int labelorg = 0; /* no TLS_ATTR on purpose */ - -/* aproto: header new_nauty_protos.h */ - -/***************************************************************************** -* * -* nextelement(set1,m,pos) = the position of the first element in set set1 * -* which occupies a position greater than pos. If no such element exists, * -* the value is -1. pos can have any value less than n, including negative * -* values. * -* * -* GLOBALS ACCESSED: none * -* * -*****************************************************************************/ - -int -nextelement(set *set1, int m, int pos) -{ - setword setwd; - int w; - -#if MAXM==1 - if (pos < 0) setwd = set1[0]; - else setwd = set1[0] & BITMASK(pos); - - if (setwd == 0) return -1; - else return FIRSTBITNZ(setwd); -#else - if (pos < 0) - { - w = 0; - setwd = set1[0]; - } - else - { - w = SETWD(pos); - setwd = set1[w] & BITMASK(SETBT(pos)); - } - - for (;;) - { - if (setwd != 0) return TIMESWORDSIZE(w) + FIRSTBITNZ(setwd); - if (++w == m) return -1; - setwd = set1[w]; - } - -#endif -} - -/***************************************************************************** -* * -* permset(set1,set2,m,perm) defines set2 to be the set * -* {perm[i] | i in set1}. * -* * -* GLOBALS ACCESSED: bit,leftbit * -* * -*****************************************************************************/ - -void -permset(set *set1, set *set2, int m, int *perm) -{ - setword setw; - int pos,w,b; - - EMPTYSET(set2,m); - -#if MAXM==1 - setw = set1[0]; - while (setw != 0) - { - TAKEBIT(b,setw); - pos = perm[b]; - ADDELEMENT(set2,pos); - } -#else - for (w = 0; w < m; ++w) - { - setw = set1[w]; - while (setw != 0) - { - TAKEBIT(b,setw); - pos = perm[TIMESWORDSIZE(w)+b]; - ADDELEMENT(set2,pos); - } - } -#endif -} - -/***************************************************************************** -* * -* putstring(f,s) writes the nul-terminated string s to file f. * -* * -*****************************************************************************/ - -void -putstring(FILE *f, char *s) -{ - while (*s != '\0') - { - PUTC(*s,f); - ++s; - } -} - -/***************************************************************************** -* * -* itos(i,s) converts the int i to a nul-terminated decimal character * -* string s. The value returned is the number of characters excluding * -* the nul. * -* * -* GLOBALS ACCESSED: NONE * -* * -*****************************************************************************/ - -int -itos(int i, char *s) -{ - int digit,j,k; - char c; - int ans; - - if (i < 0) - { - k = 0; - i = -i; - j = 1; - s[0] = '-'; - } - else - { - k = -1; - j = 0; - } - - do - { - digit = i % 10; - i = i / 10; - s[++k] = digit + '0'; - } - while (i); - - s[k+1] = '\0'; - ans = k + 1; - - for (; j < k; ++j, --k) - { - c = s[j]; - s[j] = s[k]; - s[k] = c; - } - - return ans; -} - -/***************************************************************************** -* * -* orbits represents a partition of {0,1,...,n-1}, by orbits[i] = the * -* smallest element in the same cell as i. map[] is any array with values * -* in {0,1,...,n-1}. orbjoin(orbits,map,n) joins the cells of orbits[] * -* together to the minimum extent such that for each i, i and map[i] are in * -* the same cell. The function value returned is the new number of cells. * -* * -* GLOBALS ACCESSED: NONE * -* * -*****************************************************************************/ - -int -orbjoin(int *orbits, int *map, int n) -{ - int i,j1,j2; - - for (i = 0; i < n; ++i) - if (map[i] != i) - { - j1 = orbits[i]; - while (orbits[j1] != j1) j1 = orbits[j1]; - j2 = orbits[map[i]]; - while (orbits[j2] != j2) j2 = orbits[j2]; - - if (j1 < j2) orbits[j2] = j1; - else if (j1 > j2) orbits[j1] = j2; - } - - j1 = 0; - for (i = 0; i < n; ++i) - if ((orbits[i] = orbits[orbits[i]]) == i) ++j1; - - return j1; -} - -/***************************************************************************** -* * -* writeperm(f,perm,cartesian,linelength,n) writes the permutation perm to * -* the file f. The cartesian representation (i.e. perm itself) is used if * -* cartesian != FALSE; otherwise the cyclic representation is used. No * -* more than linelength characters (not counting '\n') are written on each * -* line, unless linelength is ridiculously small. linelength<=0 causes no * -* line breaks at all to be made. The global int labelorg is added to each * -* vertex number. * -* * -* GLOBALS ACCESSED: itos(),putstring() * -* * -*****************************************************************************/ - -void -writeperm(FILE *f, int *perm, boolean cartesian, int linelength, int n) -{ - int i,k,l,curlen,intlen; - char s[30]; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"writeperm"); -#endif - - /* CONDNL(x) writes end-of-line and 3 spaces if x characters - won't fit on the current line. */ -#define CONDNL(x) if (linelength>0 && curlen+(x)>linelength)\ - {putstring(f,"\n ");curlen=3;} - - curlen = 0; - if (cartesian) - { - for (i = 0; i < n; ++i) - { - intlen = itos(perm[i]+labelorg,s); - CONDNL(intlen+1); - PUTC(' ',f); - putstring(f,s); - curlen += intlen + 1; - } - PUTC('\n',f); - } - else - { - for (i = n; --i >= 0;) workperm[i] = 0; - - for (i = 0; i < n; ++i) - { - if (workperm[i] == 0 && perm[i] != i) - { - l = i; - intlen = itos(l+labelorg,s); - if (curlen > 3) CONDNL(2*intlen+4); - PUTC('(',f); - do - { - putstring(f,s); - curlen += intlen + 1; - k = l; - l = perm[l]; - workperm[k] = 1; - if (l != i) - { - intlen = itos(l+labelorg,s); - CONDNL(intlen+2); - PUTC(' ',f); - } - } - while (l != i); - PUTC(')',f); - ++curlen; - } - } - - if (curlen == 0) putstring(f,"(1)\n"); - else PUTC('\n',f); - } -} - -/***************************************************************************** -* * -* fmperm(perm,fix,mcr,m,n) uses perm to construct fix and mcr. fix * -* contains those points are fixed by perm, while mcr contains the set of * -* those points which are least in their orbits. * -* * -* GLOBALS ACCESSED: bit * -* * -*****************************************************************************/ - -void -fmperm(int *perm, set *fix, set *mcr, int m, int n) -{ - int i,k,l; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"writeperm"); -#endif - - EMPTYSET(fix,m); - EMPTYSET(mcr,m); - - for (i = n; --i >= 0;) workperm[i] = 0; - - for (i = 0; i < n; ++i) - if (perm[i] == i) - { - ADDELEMENT(fix,i); - ADDELEMENT(mcr,i); - } - else if (workperm[i] == 0) - { - l = i; - do - { - k = l; - l = perm[l]; - workperm[k] = 1; - } - while (l != i); - - ADDELEMENT(mcr,i); - } -} - -/***************************************************************************** -* * -* fmptn(lab,ptn,level,fix,mcr,m,n) uses the partition at the specified * -* level in the partition nest (lab,ptn) to make sets fix and mcr. fix * -* represents the points in trivial cells of the partition, while mcr * -* represents those points which are least in their cells. * -* * -* GLOBALS ACCESSED: bit * -* * -*****************************************************************************/ - -void -fmptn(int *lab, int *ptn, int level, set *fix, set *mcr, int m, int n) -{ - int i,lmin; - - EMPTYSET(fix,m); - EMPTYSET(mcr,m); - - for (i = 0; i < n; ++i) - if (ptn[i] <= level) - { - ADDELEMENT(fix,lab[i]); - ADDELEMENT(mcr,lab[i]); - } - else - { - lmin = lab[i]; - do - if (lab[++i] < lmin) lmin = lab[i]; - while (ptn[i] > level); - ADDELEMENT(mcr,lmin); - } -} - -#define SORT_TYPE1 int -#define SORT_TYPE2 int -#define SORT_OF_SORT 2 -#define SORT_NAME sortparallel -#include "sorttemplates.c" - -/***************************************************************************** -* * -* doref(g,lab,ptn,level,numcells,qinvar,invar,active,code,refproc, * -* invarproc,mininvarlev,maxinvarlev,invararg,digraph,m,n) * -* is used to perform a refinement on the partition at the given level in * -* (lab,ptn). The number of cells is *numcells both for input and output. * -* The input active is the active set for input to the refinement procedure * -* (*refproc)(), which must have the argument list of refine(). * -* active may be arbitrarily changed. invar is used for working storage. * -* First, (*refproc)() is called. Then, if invarproc!=NULL and * -* |mininvarlev| <= level <= |maxinvarlev|, the routine (*invarproc)() is * -* used to compute a vertex-invariant which may refine the partition * -* further. If it does, (*refproc)() is called again, using an active set * -* containing all but the first fragment of each old cell. Unless g is a * -* digraph, this guarantees that the final partition is equitable. The * -* arguments invararg and digraph are passed to (*invarproc)() * -* uninterpretted. The output argument code is a composite of the codes * -* from all the calls to (*refproc)(). The output argument qinvar is set * -* to 0 if (*invarproc)() is not applied, 1 if it is applied but fails to * -* refine the partition, and 2 if it succeeds. * -* See the file nautinv.c for a further discussion of vertex-invariants. * -* Note that the dreadnaut I command generates a call to this procedure * -* with level = mininvarlevel = maxinvarlevel = 0. * -* * -*****************************************************************************/ - -void -doref(graph *g, int *lab, int *ptn, int level, int *numcells, - int *qinvar, int *invar, set *active, int *code, - void (*refproc)(graph*,int*,int*,int,int*,int*,set*,int*,int,int), - void (*invarproc)(graph*,int*,int*,int,int,int,int*, - int,boolean,int,int), - int mininvarlev, int maxinvarlev, int invararg, - boolean digraph, int m, int n) -{ - int pw; - int i,cell1,cell2,nc,tvpos,minlev,maxlev; - long longcode; - boolean same; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"doref"); -#endif - - if ((tvpos = nextelement(active,M,-1)) < 0) tvpos = 0; - - (*refproc)(g,lab,ptn,level,numcells,invar,active,code,M,n); - - minlev = (mininvarlev < 0 ? -mininvarlev : mininvarlev); - maxlev = (maxinvarlev < 0 ? -maxinvarlev : maxinvarlev); - if (invarproc != NULL && *numcells < n - && level >= minlev && level <= maxlev) - { - (*invarproc)(g,lab,ptn,level,*numcells,tvpos,invar,invararg, - digraph,M,n); - EMPTYSET(active,m); - for (i = n; --i >= 0;) workperm[i] = invar[lab[i]]; - nc = *numcells; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - pw = workperm[cell1]; - same = TRUE; - for (cell2 = cell1; ptn[cell2] > level; ++cell2) - if (workperm[cell2+1] != pw) same = FALSE; - - if (same) continue; - - sortparallel(workperm+cell1, lab+cell1, cell2-cell1+1); - - for (i = cell1 + 1; i <= cell2; ++i) - if (workperm[i] != workperm[i-1]) - { - ptn[i-1] = level; - ++*numcells; - ADDELEMENT(active,i); - } - } - - if (*numcells > nc) - { - *qinvar = 2; - longcode = *code; - (*refproc)(g,lab,ptn,level,numcells,invar,active,code,M,n); - longcode = MASH(longcode,*code); - *code = CLEANUP(longcode); - } - else - *qinvar = 1; - } - else - *qinvar = 0; -} - -/***************************************************************************** -* * -* maketargetcell(g,lab,ptn,level,tcell,tcellsize,&cellpos, * -* tc_level,digraph,hint,targetcell,m,n) * -* calls targetcell() to determine the target cell at the specified level * -* in the partition nest (lab,ptn). It must be a nontrivial cell (if not, * -* the first cell. The intention of hint is that, if hint >= 0 and there * -* is a suitable non-trivial cell starting at position hint in lab, * -* that cell is chosen. * -* tc_level and digraph are input options. * -* When a cell is chosen, tcell is set to its contents, *tcellsize to its * -* size, and cellpos to its starting position in lab. * -* * -* GLOBALS ACCESSED: bit * -* * -*****************************************************************************/ - -void -maketargetcell(graph *g, int *lab, int *ptn, int level, set *tcell, - int *tcellsize, int *cellpos, int tc_level, boolean digraph, - int hint, - int (*targetcell)(graph*,int*,int*,int,int,boolean,int,int,int), - int m, int n) -{ - int i,j,k; - - i = (*targetcell)(g,lab,ptn,level,tc_level,digraph,hint,m,n); - for (j = i + 1; ptn[j] > level; ++j) {} - - *tcellsize = j - i + 1; - - EMPTYSET(tcell,m); - for (k = i; k <= j; ++k) ADDELEMENT(tcell,lab[k]); - - *cellpos = i; -} - -/***************************************************************************** -* * -* shortprune(set1,set2,m) ANDs the contents of set set2 into set set1. * -* * -* GLOBALS ACCESSED: NONE * -* * -*****************************************************************************/ - -void -shortprune(set *set1, set *set2, int m) -{ - int i; - - for (i = 0; i < M; ++i) INTERSECT(set1[i],set2[i]); -} - -/***************************************************************************** -* * -* breakout(lab,ptn,level,tc,tv,active,m) operates on the partition at * -* the specified level in the partition nest (lab,ptn). It finds the * -* element tv, which is in the cell C starting at index tc in lab (it had * -* better be) and splits C in the two cells {tv} and C\{tv}, in that order. * -* It also sets the set active to contain just the element tc. * -* * -* GLOBALS ACCESSED: bit * -* * -*****************************************************************************/ - -void -breakout(int *lab, int *ptn, int level, int tc, int tv, - set *active, int m) -{ - int i,prev,next; - - EMPTYSET(active,m); - ADDELEMENT(active,tc); - - i = tc; - prev = tv; - - do - { - next = lab[i]; - lab[i++] = prev; - prev = next; - } - while (prev != tv); - - ptn[tc] = level; -} - -/***************************************************************************** -* * -* longprune(tcell,fix,bottom,top,m) removes zero or elements of the set * -* tcell. It is assumed that addresses bottom through top-1 contain * -* contiguous pairs of sets (f1,m1),(f2,m2), ... . tcell is intersected * -* with each mi such that fi is a subset of fix. * -* * -* GLOBALS ACCESSED: NONE * -* * -*****************************************************************************/ - -void -longprune(set *tcell, set *fix, set *bottom, set *top, int m) -{ - int i; - - while (bottom < top) - { - for (i = 0; i < M; ++i) - if (NOTSUBSET(fix[i],bottom[i])) break; - bottom += M; - - if (i == M) - for (i = 0; i < M; ++i) INTERSECT(tcell[i],bottom[i]); - bottom += M; - } -} - -/***************************************************************************** -* * -* writegroupsize(f,gpsize1,gpsize2) writes a real number gpsize1*10^gpsize2 * -* It is assumed that gpsize1 >= 1 and that gpsize1 equals an integer in the * -* case that gpsize2==0. These assumptions are true for group sizes * -* computed by nauty. * -* * -*****************************************************************************/ - -void -writegroupsize(FILE *f, double gpsize1, int gpsize2) -{ - if (gpsize2 == 0) - fprintf(f,"%.0f",gpsize1+0.1); - else - { - while (gpsize1 >= 10.0) - { - gpsize1 /= 10.0; - ++gpsize2; - } - fprintf(f,"%14.12fe%d",gpsize1,gpsize2); - } -} - -/***************************************************************************** -* * -* nautil_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -nautil_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in nautil.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in nautil.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in nautil.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: nautil.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* alloc_error() writes a message and exits. Used by DYNALLOC? macros. * -* * -*****************************************************************************/ - -void -alloc_error(char *s) -{ - fprintf(ERRFILE,"Dynamic allocation failed: %s\n",s); - exit(2); -} - -/***************************************************************************** -* * -* nautil_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -nautil_freedyn(void) -{ -#if !MAXN - DYNFREE(workperm,workperm_sz); -#endif -} diff --git a/tools/nauty25r9_mac/nautil.o b/tools/nauty25r9_mac/nautil.o deleted file mode 100644 index 8427bed5c80a2d55e9d006eb3ccf0421141d02b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12480 zcmeHNeRLE>w(ki;NHEwz0iz}|ksxHxf@F~VKF?_(GDtqSh4%p{m0;75Wk2C@R83&!{n&^6)1%=_K$nq-oo zXWyRp$NS^;nV#EKb?er>w{G2gtGeI5_*vH=NpcO4@Q2%tdm0ryxN%*N`(T>=c*Vbo zw>Z@gQy*L&Q3g$k?hLBL<@X0mR|lPEr##0ye@;(1`LyaL=ZWYMFY5~>=^?6eOX~?F zFTa0jd9bu%(b9=djo;s!-fBT7TXbm7mn6ZWT|=}}FTX#qV%f44%ae6}zoyPnlcgTH zQv0Q;vC5xwP=Jp%XTuSW1E2_o&_FO_yGEqeC*AE~TNsqD+&SfTf%yo8!6?-lr~ z3|5pce@xKq$DhY(cv`f#j}i|8q{>cJw*FQw3IzS3<*UkP6D;FJ0^}t5~$G)M@O?-$cRB$D-E`$e$|jRg$#W>FNAqILX${;K6nU zb<4rsiSb7RvRfr-HI#&Y(k$F`5hmT&;LgRJiTi(g&1L+rkt3@|s=QH+b*B3Q2icy4 zbFJIh#NPRM<|y~uZRyM$gj>uc8P{9JV%+l&RMLUZVmc+u*PNuY1 zwqw-Dk*fKIHH50mYVJ03^ivQ;NXs9mLX5rXpC^F;o3|+ z5o3v3HGJ_J9$$4xwRD#rh}CQ9X_BfOTsx{P$^Z0CCFz^8MoizBl|F4_$q2}afgtLd zGf-*T!aCCbY|^Q`3*6IibUn@QTdhVUea3lVp_$NBs~@=-f9-V%8R!u=j82m@+)7u>RCYB z>ZX1G)<3(HW~Z~O9rl=}G=&a7NYj%tzpy`bt~zHn3x7Ia<8_QL+{k?|s{GH4hj!`w zGBXDfKg^UE_cj`VOQJ$o;*Z}>)}6)7DTHC$fx+$PnO4cZ?mEUD3J|2aJsoagOygut0-h zl_xOyEYW}|*J$~iXXRav{aj+PHrP+%X4lCjCkJ=5SaWWeuyM|im%{ZhpVwI;7Vf%+ zUtINuYRz>S{BssN<6-+dF(PT1S-~G>uvnL;Ub}s_q%^J_Y17{{XW;Hl3x@38xM1LJ z(Av$&pc<5eYtERy7b6W-GiF#?;Q-}e)ujF8iVS|n*2#X)-&Iiel20`F;a>Qgyt}KT zh821#IHJa0Zw^g$Q@Wn0$AW9q`LVk!W5@tK5r^hBs!Cjr{8v{Z(K;7eCk@{MXw6PA zYo?3wx7nU>OR>pG#$0p#=&b-_%= zPqOe?S8%vIFFIWws_kjF|4*rVGSHocFQrvprSlGhAB8Y&I{p}}CLF(P6vmlVvIlFI zg->@Hg|#4%y58iWgXE!iwc|d8yAfTYEL__jI_pql%DLbY)w(Cq(Ghu_ETZw@i>_cE7D_N{dR*Ic89YgP;_YvH4qtFrkR({&jxahn^+pow z&XMw3F(-^4D{Ao;eO4pX6fW5z$&vlk0#j9TcgWShL&33L*Kyn5*~Z&;wPUfu;Wg;| z1gw@>KNeQY0vB2NNylEBS?puj>!q7rbxZ07cQjjC+Juc7>@}Xr67^)SiEH@rRc}~# zx{N^A^m=W|@8IpCYsaSetLd9G7$^*L`bJnPdhfPfUIV=1nhzmXni~GbZ7zIq&0Uce z+gR7SmF9oYSoe{!?jMW4q?t!r4BieOv4eZJugh;;kA+0uF@?YWhRv*nF9max{wT%1 zyW`1S*3v0(@Ab^|?b6KR4a~HIU);UHUa0269jbCduD%vIf_XblwdVSI^$3`%GXpoI zj^A;D{6}&&SfB}OqC5Q9{-f(V<|7^RG2EFC3O_U-Comr>=HtS5&Bub_m=E$8+Hhw+ z>=5M4houd1PxihjZ}|W#_8)Q@_B^!y0^Q4MXo|l@$B04Gq;J(P3wXDag0HAwQt$7f zSYhAiSLg81_HG5|rpzzudmDT&YcH$$U$A%Cx{j8;lRtf@y|;c&D#ebZ+dx(LebcwG zC;q~lDTn3A=*x)&Vp3>KFLT~sl+v{q9pMHjB2M-;hHgyG8w($p|Dd`+U1;Y~t?2H= zL}vBG$6o7!@(;!@bkm#2EZcg-@9`4mlTs5swT2POtZ>gh%{#rY2t`9UpSE_PLbvULqgOYX?EF>W>w&kB+90;X5L-5quMD3- zY^f)gex-O)k9gwaZ!)M(xk&NE*Ds!Y?>pkjE)h@OL_E3TbDwy!t6dMjj(GCfx^uRA z)KUfh$5PDF0=!Nn$csZb>C^9*qwMW z?;0{}W-W+yrutJBryzickNiM6O!MDRbt4QU+9~p}p8boVL@V1h)0a&+tBP6-M{-&Y zDeEy%rwn^aGjpG=Dkgh37d-9Olon0CyG5Dvl$%-8Te7YFo7~DDte_-&) z#{i5!({6)(jR4^P;qJw1r^CL$x$bpW|G3x7-$1H@e5Zd}Y%gpqzL!a3eHNdcaC!L$ za`j5&jheZ3zG2QCYnWaSGZ*GC^IF<%9tjny*181tDBb%rI|WkW!Rwhhr!IrCQKUbg zID5?_;qy~7Ymv1?j%c#}iN=kB9F4Cj$TqlEkimFv0W)o(7=L-}H;~k{B{fW2Zhjb| z7?>_KaYW;1`7tmufgvHP{xjG&z0-JYN3(3ynsX=eqa7z?<2?G4!Zb5YRXSzsH$YR~ zlDGbf;6Zuw^MDxLqw>qdMULs61wOJ(FSFS(z1fVryIC?*S>o15AnfI>iFc5e!Gq^i z-C}y@vmMwf_q9iiLiR}e<%6(Ce##q(GKZSH{o82~snGu?J z$7EZhz?~T|UcvTfZnl}VX*xG{U-rSRso~DFibBV}ZG>ba6*@(s6PR6C?(5#iK=PI{ zdth6!ro^%uIRfb2Jyc6NNN+^C*nQ23SOuSy@~5Q}(9wc(3)Znz?&*YuHrH zbU(}Z#TwPrwp~VsI!5L0ZS)Mltoss?BYS9`Lnqs^d-Z3$5oZc2&)sIYE@~V^5^+uW zBJ^v+v=!F+Jhnn9>)){c=m=pA`xE9NhcsaQ-jTq(UfuA`RB*Yj94n*~Y(rBLVem+X zE%+}d*xddXYdHkD>j zX$IBSzuCIB`BdHmVpWE6T=pGDXTh(=zlePS4!>whSo0EsN$^HGPsEku_G9thDp@(t z8>>bj>GPf7&22-JFERcg<*4jCic>Lb?l(R1b&2jIY7c>tLQe*_HKUwY`8!o(Y=3%io8d zrqKjgRWQx>bj!Uh@^#f{!*!my4l&cRU7MA=P3Lt!cr?UEe$2;@`gmj8y(pm$B{a51 z$)IjF?@)P3fyT$PaJ}2$wdBssJNP6oPuF>)9*(;8@B!TQ?p6w^WPK_2phw{k?o0oOml)d{$rU3oofWs&+JDU23wg4vsy65_!uw zooPTwg?QzJUnIzZ2Dn%53w%VD68pf-`1T>T_pcse zyY0k*wpA(ijIMvr;G+cPEH1cU#D!&Z;YxCma8>2@3~cbt&cJ_64y>7W0Q5#a()cNP z>$VFpNYjo+So~G15t0&7bM3=$ZIlz?j0#HHV+WHwm^3^n_U||m!$Iw2_)CFYJ*2i&yb!^AqQ+w!`Bcm)Ns_wZwdv8Gm6EY^B;d5qc$ z5nFC*8`3=_qC;|&F3-}dnXD(#-$!SQgT zW`-te;2nvv$MlXhebbO;W@{u8vN;VY+uR8(a4@<5(3GVnvUuIK?r*OVgN3!OLn^-x ziBeU89yp3U=evFO7rpnN%E5J0SfHKPCg9rFHZrUDRl~B+mYw-9@4!|VCzg26k=vZy z{^VY!E*R~tf`SN4Ic{8o7 zqsYgV3l*7od=H0`l{1)iS2nZm&ejvPdieC^q`Y#r+Ae2j%Gt93a^yLU@|URenefpPtGbozFDgcpcCbyMQIspl7-pppKuydG_#Qy0}7qQ&XZm zj`t;e*t5h#ukq>qm-GIC`}Q#9kQ}}Q)6fIRTNduptbajRTDxZkE)uj`vukq&{@5?HwS;n%1^Vk+1PM zrT5RnYv9cNR# zmu{5|gCe@{ymMxL$!R@tfVMz0;A%*{Nc&IGF*v5kqg%N#jYqY@Q;t5FIUDvk5B7L1 z%fAkx4)z#_J=SH1qp-&spQ{Ti#^<`^b6wD}Tl~qt;K(jzWs-gJbJ)S$Rwj=hcodqe z$T=@(4|#($iSvQ;@ub6Xmwi`z`3+O+b%;$&DJ0AdX|+}E?X1~EcTQy_bgu&3YIS&9~hj(N>+FtFRiF7U$ML!d$6QEv3$|8 z@_=X2(xoc`i-Ocxwy1n*>7$c8qbuo6rnt%-DC{a(D@iNGQ7&^&;1tqvu<)4#(YcrFsEJ`@Z^1xYjw6OJ8Muz4Mr(IeJ<`@e<2r`NC^AE z@yFHKPo>Qmf+HdOB0LRuyTBtmvackbH#~5Qd+PwgTZ((}`wl&_C;Lj`%?P`U-eI@D6>`!+o@E3pV&?S59g)ihMy4z{|RtJylvKQX0 z-gF870PwTFa`4Gc?JLR073BL0_>BVpgTDBpOnS(LOgsMO&=vN3MLlT1YZrLQ@6NjC zOYhAu(G3FsREI-X*mXa;g!iw&%b~YWxP*OQ5$^!-W(hoD=l$@OVI4qhs|+w-lEy6p zM7O+oPW>_!a3tz~2zWE#SinrQ-vo%?lx+MVSm&jS@+qu45Ad1+VN!WbfS@u%f;Ky;b%>UB^A9#wqQ~S&jSdRe=FcG1bjxojRM9nY1IGM zfYkqKKMJfDa2eTfm<{ z8ARs+K%z4na1{FA2}t^$3P}2%1W4_LqCN+Z^z}m^6`=j!>}f<5kWiI=3V#Hn0`3%W zy?_r3I88v0fRccxKo5`UQ2}=fxL&}A1)L_JM?e6(-zapx8Zsuo!yQXy7<%$M+S^5W z!Y$N8lIYm}YUr}YV;7}6MY&Uy?-u2si}L-V{7X@ONR)Sqa+xUa7Ukuld{mUzN!X8| zE}3UEi*hnw~mveM;2$xj(} zWhp&`g5o=CdJIVZ^5BX}$-koFksqxnUoQE3@^Qc4Um08!SmF;XUgCc&w5Z}y2_Hb0 zmP-C*b`mZ5mo9pwbm@wU$MCUr3M!@5lHW%0ms0lbG(U>xm7uT^A9)AMB!B7ZaD0;!Ic%E5Ao#iAtO6 z$0}BYR#uij2_$DD0M1JTOE8Gt++9mTJo*GidxSVxwW4AP@!+p~vZo*!{_#+g022kg QO~Bg)EEe#e1SFgIZ*5r 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 E2KLXYQ2+n{ diff --git a/tools/nauty25r9_mac/nautinv.c b/tools/nauty25r9_mac/nautinv.c deleted file mode 100644 index 149f4b7..0000000 --- a/tools/nauty25r9_mac/nautinv.c +++ /dev/null @@ -1,1751 +0,0 @@ -/***************************************************************************** -* * -* Vertex-invariants source file for nauty 2.5. * -* * -* Copyright (1989-2013) Brendan McKay. All rights reserved. * -* Subject to waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 13-Mar-90 : initial release for version 1.5 * -* 10-Nov-90 : changes for version 1.6 : * -* - added dummy routine nautinv_null() * -* 27-Aug-92 : renamed to version 1.7, no changes to this file * -* 5-Jun-93 : renamed to version 1.7+, no changes to this file * -* 18-Aug-93 : renamed to version 1.8, no changes to this file * -* 17-Sep-93 : changes for version 1.9 : * -* - added invariant routine adjacencies() * -* 20-Jun-96 : changes for version 2.0 : * -* - added invariants cellfano() and cellfano2() * -* 11-Jul-96 - added dynamic allocation * -* 21-Oct-98 - use shortish in place of short for BIGNAUTY * -* 9-Jan-00 - added nautinv_check() * -* 12-Feb-00 - minor code formatting * -* 16-Nov-00 - made changes listed in nauty.h * -* 22-Apr-01 : changes for version 2.1 : * -* - made all large dynamic memory external to routines * -* - added nautinv_freedyn() to free all such memory * -* - include nautinv.h rather than naututil.h * -* - removed nautinv_null() * -* - added code to facilitate compilation into Magma * -* - removed EXTDEFS * -* 12-Jul-01 - use invararg in distances() * -* - fixed comments in ind and cliq routines * -* 21-Nov-01 : use NAUTYREQUIRED in nautinv_check() * -* 10-Dec-06 : remove BIGNAUTY * -* 10-Nov-09 : remove types shortish and permutation * -* 23-Nov-09 : add refinvar() * -* 12-Jun-10 : fixed identical errors in cellcliq() and cellind() * -* 15-Jan-12 : add TLS_ATTR attributes * -* 23-Aug-12 : fix getbigcells(), thanks to Fatih Demirkale * -* * -*****************************************************************************/ - -#define ONE_WORD_SETS -#include "nautinv.h" - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#define MASH(l,i) ((((l) ^ 056345) + (i)) & 077777) - /* : expression whose long value depends only on long l and int/long i. - Anything goes, preferably non-commutative. */ - -#define CLEANUP(l) ((int)((l) % 077777)) - /* : expression whose value depends on long l and is less than 077777 - when converted to int then short. Anything goes. */ - -#define ACCUM(x,y) x = (((x) + (y)) & 077777) - /* : must be commutative. */ - -static const int fuzz1[] = {037541,061532,005257,026416}; -static const int fuzz2[] = {006532,070236,035523,062437}; - -#define FUZZ1(x) ((x) ^ fuzz1[(x)&3]) -#define FUZZ2(x) ((x) ^ fuzz2[(x)&3]) - -#define MAXCLIQUE 10 /* max clique size for cliques() and maxindset() */ - -#if MAXN -static TLS_ATTR int workshort[MAXN+2]; -static TLS_ATTR int vv[MAXN],ww[MAXN]; -static TLS_ATTR int workperm[MAXN]; -static TLS_ATTR int bucket[MAXN+2]; -static TLS_ATTR int count[MAXN]; -static TLS_ATTR set workset[MAXM]; -static TLS_ATTR set w01[MAXM],w02[MAXM],w03[MAXM],w12[MAXM],w13[MAXM],w23[MAXM]; -static TLS_ATTR set pt0[MAXM],pt1[MAXM],pt2[MAXM]; -static TLS_ATTR set wss[MAXCLIQUE-1][MAXM]; -static TLS_ATTR set ws1[MAXM],ws2[MAXM]; -#else -DYNALLSTAT(int,workshort,workshort_sz); -DYNALLSTAT(int,vv,vv_sz); -DYNALLSTAT(int,ww,ww_sz); -DYNALLSTAT(int,workperm,workperm_sz); -DYNALLSTAT(int,bucket,bucket_sz); -DYNALLSTAT(int,count,count_sz); -DYNALLSTAT(set,ws1,ws1_sz); -DYNALLSTAT(set,ws2,ws2_sz); -DYNALLSTAT(set,workset,workset_sz); -DYNALLSTAT(set,w01,w01_sz); -DYNALLSTAT(set,w02,w02_sz); -DYNALLSTAT(set,w03,w03_sz); -DYNALLSTAT(set,w12,w12_sz); -DYNALLSTAT(set,w13,w13_sz); -DYNALLSTAT(set,w23,w23_sz); -DYNALLSTAT(set,pt0,pt0_sz); -DYNALLSTAT(set,pt1,pt1_sz); -DYNALLSTAT(set,pt2,pt2_sz); -DYNALLSTAT(set,wss,wss_sz); -#endif - -/* aproto: header new_nauty_protos.h */ - -/***************************************************************************** -* * -* This file contains a number of procedures which compute vertex-invariants * -* for stronger partition refinement. Since entirely different * -* vertex-invariants seem to work better for different types of graph, we * -* cannot do more than give a small collection of representative examples. * -* Any serious computations with difficult graphs may well need to use * -* specially-written vertex-invariants. The use of vertex-invariants * -* procedures is supported by nauty from version 1.5 onwards, via the * -* options userinvarproc, mininvarlevel, maxinvarlevel and invararg. * -* The meaning of these fields in detail are as follows: * -* userinvarproc is the address of the vertex-invariant procedure. If * -* no vertex-invariants is required, this field should * -* have the value NULL. * -* maxinvarlevel The absolute value of this is the maximum level in the * -* search tree at which the vertex-invariant will be * -* computed. The root of the tree is at level 1, so the * -* vertex-invariant will not be invoked at all if * -* maxinvarlevel==0. Negative values of maxinvarlevel * -* request nauty to not compute the vertex-invariant at * -* a level greater than that of the earliest node (if any) * -* on the path to the first leaf of the search tree at * -* which the vertex-invariant refines the partition. * -* mininvarlevel The absolute value of this is the minimum level in the * -* search tree at which the vertex-invariant will be * -* computed. The root of the tree is at level 1, so there * -* is no effective limit if mininvarlevel is -1, 0 or 1. * -* Negative values of mininvarlevel request nauty to not * -* compute the vertex-invariant at a level less than * -* that of the earliest node (if any) on the path to the * -* first leaf of the search tree at which the * -* vertex-invariant refines the partition. * -* invararg is passed to the vertex-invariant procedure via the * -* argument of the same name. It can be used by the * -* procedure for any purpose. * -* Note that negative values of maxinvarlevel and mininvarlevel make the * -* canonical labelling invalid, but can speed automorphism group finding. * -* Nauty already knows this and takes their absolute values. * -* * -* A vertex-invariant must be declared thus: * -* void invarproc(g,lab,ptn,level,numcells,tvpos,invar,invararg,digraph,m,n) * -* All of these arguments must be treated as read-only except for invar. * -* g : the graph, exactly as passed to nauty() * -* lab,ptn : the current partition nest (see nauty.h for the format) * -* level : the level of this node in the search tree. * -* numcells : the number of cells in the partition at this node. * -* tvpos : the index in (lab,ptn) of one cell in the partition. * -* If level <= 1, the cell will be the first fragment of the * -* first active cell (as provided by the initial call to nauty), * -* or the first cell, if there were no active cells. * -* If level > 1, the cell will be the singleton cell which was * -* created to make this node of the search tree from its parent. * -* invararg : a copy of options.invararg * -* digraph : a copy of options.digraph * -* m,n : size parameters as passed to nauty() * -* invar : an array to return the answer in. The procedure must put in * -* each invar[i] (0 <= i < n) an invariant of the 6-tuple * -* (,g,,level, * -* invararg,digraph) * -* Note that invar[] is declared as an int array. Since the * -* absolute value of the invariant is irrelevant, only the * -* comparative values, any short, int or long value can be * -* assigned to the entries of invar[] without fear. However, * -* you should assign a value less than 077777 to ensure machine- * -* independence of the canonical labelling. * -* * -* The refinement procedure has already been called before the invariant * -* procedure is called. That means that the partition is equitable if * -* digraph==FALSE. * -* * -*****************************************************************************/ - -/***************************************************************************** -* * -* twopaths() assigns to each vertex v the sum of the weights of each vertex * -* which can be reached from v along a walk of length two (including itself * -* usually). The weight of each vertex w is defined as the ordinal number * -* of the cell containing w, starting at 1 for the first cell. * -* * -*****************************************************************************/ - -void -twopaths(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,v,w; - int wt; - set *gv,*gw; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"twopaths"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"twopaths"); -#endif - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = wt; - if (ptn[i] <= level) ++wt; - } - - for (v = 0, gv = (set*)g; v < n; ++v, gv += M) - { - EMPTYSET(workset,m); - w = -1; - while ((w = nextelement(gv,M,w)) >= 0) - { - gw = GRAPHROW(g,w,m); - for (i = M; --i >= 0;) UNION(workset[i],gw[i]); - } - wt = 0; - w = -1; - while ((w = nextelement(workset,M,w)) >= 0) ACCUM(wt,workshort[w]); - invar[v] = wt; - } -} - -/***************************************************************************** -* * -* quadruples() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2,v3), where w(v,v1,v2,v3) depends on the number of * -* vertices adjacent to an odd number of {v,v1,v2,v3}, and to the cells * -* that v,v1,v2,v3 belong to. {v,v1,v2,v3} are permitted to range over all * -* distinct 4-tuples which contain at least one member in the cell tvpos. * -* * -*****************************************************************************/ - -void -quadruples(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - set *gw; - int wt; - int v,iv,v1,v2,v3; - set *gv; - long wv,wv1,wv2,wv3; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"quadruples"); - DYNALLOC1(set,ws1,ws1_sz,m,"quadruples"); - DYNALLOC1(set,workset,workset_sz,m,"quadruples"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ2(wt); - if (ptn[i] <= level) ++wt; - } - - iv = tvpos - 1; - do - { - v = lab[++iv]; - gv = GRAPHROW(g,v,m); - wv = workshort[v]; - for (v1 = 0; v1 < n-2; ++v1) - { - wv1 = workshort[v1]; - if (wv1 == wv && v1 <= v) continue; - wv1 += wv; - gw = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv[i] ^ gw[i]; - for (v2 = v1+1; v2 < n-1; ++v2) - { - wv2 = workshort[v2]; - if (wv2 == wv && v2 <= v) continue; - wv2 += wv1; - gw = GRAPHROW(g,v2,m); - for (i = M; --i >= 0;) ws1[i] = workset[i] ^ gw[i]; - for (v3 = v2+1; v3 < n; ++v3) - { - wv3 = workshort[v3]; - if (wv3 == wv && v3 <= v) continue; - wv3 += wv2; - gw = GRAPHROW(g,v3,m); - pc = 0; - for (i = M; --i >= 0;) - if ((sw = ws1[i] ^ gw[i]) != 0) pc += POPCOUNT(sw); - wt = (FUZZ1(pc)+wv3) & 077777; - wt = FUZZ2(wt); - ACCUM(invar[v],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - ACCUM(invar[v3],wt); - } - } - } - } - while (ptn[iv] > level); -} - -/***************************************************************************** -* * -* triples() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2), where w(v,v1,v2) depends on the number of vertices * -* adjacent to an odd number of {v,v1,v2}, and to the cells that * -* v,v1,v2 belong to. {v,v1,v2} are permitted to range over all distinct * -* triples which contain at least one member in the cell tvpos. * -* * -*****************************************************************************/ - -void -triples(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - set *gw; - int wt; - int v,iv,v1,v2; - set *gv; - long wv,wv1,wv2; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"triples"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"triples"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ1(wt); - if (ptn[i] <= level) ++wt; - } - - iv = tvpos - 1; - do - { - v = lab[++iv]; - gv = GRAPHROW(g,v,m); - wv = workshort[v]; - for (v1 = 0; v1 < n-1; ++v1) - { - wv1 = workshort[v1]; - if (wv1 == wv && v1 <= v) continue; - wv1 += wv; - gw = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv[i] ^ gw[i]; - for (v2 = v1+1; v2 < n; ++v2) - { - wv2 = workshort[v2]; - if (wv2 == wv && v2 <= v) continue; - wv2 += wv1; - gw = GRAPHROW(g,v2,m); - pc = 0; - for (i = M; --i >= 0;) - if ((sw = workset[i] ^ gw[i]) != 0) pc += POPCOUNT(sw); - wt = (FUZZ1(pc)+wv2) & 077777; - wt = FUZZ2(wt); - ACCUM(invar[v],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - } - } - } - while (ptn[iv] > level); -} - -/***************************************************************************** -* * -* adjtriang() assigns to each vertex v a value depending on the numbers * -* of common neighbours between each pair {v1,v2} of neighbours of v, and * -* which cells v1 and v2 lie in. The vertices v1 and v2 must be adjacent * -* if invararg == 0 and not adjacent if invararg == 1. * -* * -*****************************************************************************/ - -void -adjtriang(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int j,pc; - setword sw; - set *gi; - int wt; - int i,v1,v2; - boolean v1v2; - set *gv1,*gv2; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"adjtriang"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"adjtriang"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ1(wt); - if (ptn[i] <= level) ++wt; - } - - for (v1 = 0, gv1 = g; v1 < n; ++v1, gv1 += M) - { - for (v2 = (digraph ? 0 : v1+1); v2 < n; ++v2) - { - if (v2 == v1) continue; - v1v2 = (ISELEMENT(gv1,v2) != 0); - if ((invararg == 0 && !v1v2) - || (invararg == 1 && v1v2)) continue; - wt = workshort[v1]; - ACCUM(wt,workshort[v2]); - ACCUM(wt,v1v2); - - gv2 = GRAPHROW(g,v2,m); - for (i = M; --i >= 0;) workset[i] = gv1[i] & gv2[i]; - i = -1; - while ((i = nextelement(workset,M,i)) >= 0) - { - pc = 0; - gi = GRAPHROW(g,i,m); - for (j = M; --j >= 0;) - if ((sw = workset[j] & gi[j]) != 0) pc += POPCOUNT(sw); - pc = (pc + wt) & 077777; - ACCUM(invar[i],pc); - } - } - } -} - -/***************************************************************************** -* * -* getbigcells(ptn,level,minsize,bigcells,cellstart,cellsize,n) is an * -* auxiliary procedure to make a list of all the large cells in the current * -* partition. On entry, ptn, level and n have their usual meanings, * -* while minsize is the smallest size of an interesting cell. On return, * -* bigcells is the number of cells of size at least minsize, cellstart[0...] * -* contains their starting positions in ptn, and cellsize[0...] contain * -* their sizes. These two arrays are in increasing order of cell size, * -* then position. * -* * -*****************************************************************************/ - -void -getbigcells(int *ptn, int level, int minsize, int *bigcells, - int *cellstart, int *cellsize, int n) -{ - int cell1,cell2,j; - int si,st; - int bc,i,h; - - bc = 0; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - - if (cell2 >= cell1 + minsize - 1) - { - cellstart[bc] = cell1; - cellsize[bc] = cell2 - cell1 + 1; - ++bc; - } - } - *bigcells = bc; - - j = bc / 3; - h = 1; - do - h = 3 * h + 1; - while (h < j); - - do /* shell sort */ - { - for (i = h; i < bc; ++i) - { - st = cellstart[i]; - si = cellsize[i]; - for (j = i; cellsize[j-h] > si || - (cellsize[j-h] == si && cellstart[j-h] > st); ) - { - cellsize[j] = cellsize[j-h]; - cellstart[j] = cellstart[j-h]; - if ((j -= h) < h) break; - } - cellsize[j] = si; - cellstart[j] = st; - } - h /= 3; - } - while (h > 0); -} - -/***************************************************************************** -* * -* celltrips() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2), where w(v,v1,v2) depends on the number of vertices * -* adjacent to an odd number of {v,v1,v2}. {v,v1,v2} are constrained to * -* belong to the same cell. We try the cells in increasing order of size, * -* and stop as soon as any cell splits. * -* * -*****************************************************************************/ - -void -celltrips(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - set *gw; - int wt; - int v,iv,v1,iv1,v2,iv2; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - set *gv; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"celltrips"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"celltrips"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,3,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (iv = cell1; iv <= cell2 - 2; ++iv) - { - v = lab[iv]; - gv = GRAPHROW(g,v,m); - for (iv1 = iv + 1; iv1 <= cell2 - 1; ++iv1) - { - v1 = lab[iv1]; - gw = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv[i] ^ gw[i]; - for (iv2 = iv1 + 1; iv2 <= cell2; ++iv2) - { - v2 = lab[iv2]; - gw = GRAPHROW(g,v2,m); - pc = 0; - for (i = M; --i >= 0;) - if ((sw = workset[i] ^ gw[i]) != 0) - pc += POPCOUNT(sw); - wt = FUZZ1(pc); - ACCUM(invar[v],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - } - } - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} - -/***************************************************************************** -* * -* cellquads() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2,v3), where w(v,v1,v2,v3) depends on the number of * -* vertices adjacent to an odd number of {v,v1,v2,v3}. {v,v1,v2,v3} are * -* constrained to belong to the same cell. We try the cells in increasing * -* order of size, and stop as soon as any cell splits. * -* * -*****************************************************************************/ - -void -cellquads(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - set *gw; - int wt; - int v,iv,v1,iv1,v2,iv2,v3,iv3; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - set *gv; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"cellquads"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellquads"); - DYNALLOC1(set,ws1,ws1_sz,m,"cellquads"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,4,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (iv = cell1; iv <= cell2 - 3; ++iv) - { - v = lab[iv]; - gv = GRAPHROW(g,v,m); - for (iv1 = iv + 1; iv1 <= cell2 - 2; ++iv1) - { - v1 = lab[iv1]; - gw = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv[i] ^ gw[i]; - for (iv2 = iv1 + 1; iv2 <= cell2 - 1; ++iv2) - { - v2 = lab[iv2]; - gw = GRAPHROW(g,v2,m); - for (i = M; --i >= 0;) ws1[i] = workset[i] ^ gw[i]; - for (iv3 = iv2 + 1; iv3 <= cell2; ++iv3) - { - v3 = lab[iv3]; - gw = GRAPHROW(g,v3,m); - pc = 0; - for (i = M; --i >= 0;) - if ((sw = ws1[i] ^ gw[i]) != 0) - pc += POPCOUNT(sw); - wt = FUZZ1(pc); - ACCUM(invar[v],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - ACCUM(invar[v3],wt); - } - } - } - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} - -/***************************************************************************** -* * -* cellquins() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2,v3,v4), where w(v,v1,v2,v3,v4) depends on the number * -* of vertices adjacent to an odd number of {v,v1,v2,v3,v4}. * -* {v,v1,v2,v3,v4} are constrained to belong to the same cell. We try the * -* cells in increasing order of size, and stop as soon as any cell splits. * -* * -*****************************************************************************/ - -void -cellquins(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - set *gw; - int wt; - int v,iv,v1,iv1,v2,iv2,v3,iv3,v4,iv4; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - set *gv; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"cellquins"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellquins"); - DYNALLOC1(set,ws1,ws1_sz,m,"cellquins"); - DYNALLOC1(set,ws2,ws2_sz,m,"cellquins"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,5,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (iv = cell1; iv <= cell2 - 4; ++iv) - { - v = lab[iv]; - gv = GRAPHROW(g,v,m); - for (iv1 = iv + 1; iv1 <= cell2 - 3; ++iv1) - { - v1 = lab[iv1]; - gw = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv[i] ^ gw[i]; - for (iv2 = iv1 + 1; iv2 <= cell2 - 2; ++iv2) - { - v2 = lab[iv2]; - gw = GRAPHROW(g,v2,m); - for (i = M; --i >= 0;) ws1[i] = workset[i] ^ gw[i]; - for (iv3 = iv2 + 1; iv3 <= cell2 - 1; ++iv3) - { - v3 = lab[iv3]; - gw = GRAPHROW(g,v3,m); - for (i = M; --i >= 0;) ws2[i] = ws1[i] ^ gw[i]; - for (iv4 = iv3 + 1; iv4 <= cell2; ++iv4) - { - v4 = lab[iv4]; - gw = GRAPHROW(g,v4,m); - pc = 0; - for (i = M; --i >= 0;) - if ((sw = ws2[i] ^ gw[i]) != 0) - pc += POPCOUNT(sw); - wt = FUZZ1(pc); - ACCUM(invar[v],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - ACCUM(invar[v3],wt); - ACCUM(invar[v4],wt); - } - } - } - } - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} - -/***************************************************************************** -* * -* uniqinter(s1,s2,m) returns the number in both sets if it is unique, * -* or -1 if there is none or it is not unique. * -*****************************************************************************/ - -static int -uniqinter(set *s1, set *s2, int m) -{ - int i,j; - setword w; - - for (i = 0; i < M; ++i) - { - if ((w = s1[i] & s2[i]) != 0) - { - j = FIRSTBITNZ(w); - if (w != BITT[j]) return -1; - j += TIMESWORDSIZE(i); - for (++i; i < M; ++i) - if (s1[i] & s2[i]) return -1; - return j; - } - } - return -1; -} - -/***************************************************************************** -* * -* cellfano2() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2,v3), where w(v,v1,v2,v3) depends on the number of * -* fano-plane analogues containing {v,v1,v2,v3}. {v,v1,v2,v3} are * -* constrained to belong to the same cell and being independent and * -* non-collinear. We try the cells in increasing order of size, and stop * -* as soon as any cell splits. * -* * -*****************************************************************************/ - -void -cellfano2(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - int wt; - int v0,v1,v2,v3,iv0,iv1,iv2,iv3; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - int nw,x01,x02,x03,x12,x13,x23; - int pnt0,pnt1,pnt2; - set *gv0,*gv1,*gv2,*gv3; - set *gp0,*gp1,*gp2; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellfano2"); - DYNALLOC1(int,vv,vv_sz,n,"cellfano2"); - DYNALLOC1(int,ww,ww_sz,n,"cellfano2"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,4,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (iv0 = cell1; iv0 <= cell2 - 3; ++iv0) - { - v0 = lab[iv0]; - gv0 = GRAPHROW(g,v0,m); - nw = 0; - for (iv1 = iv0 + 1; iv1 <= cell2; ++iv1) - { - v1 = lab[iv1]; - if (ISELEMENT(gv0,v1)) continue; - if ((x01 = uniqinter(gv0,GRAPHROW(g,v1,m),m)) < 0) continue; - vv[nw] = v1; - ww[nw] = x01; - ++nw; - } - - for (iv1 = 0; iv1 < nw-2; ++iv1) - { - v1 = vv[iv1]; - gv1 = GRAPHROW(g,v1,m); - x01 = ww[iv1]; - - for (iv2 = iv1 + 1; iv2 < nw-1; ++iv2) - { - x02 = ww[iv2]; - if (x02 == x01) continue; - v2 = vv[iv2]; - if (ISELEMENT(gv1,v2)) continue; - gv2 = GRAPHROW(g,v2,m); - if ((x12 = uniqinter(gv1,gv2,m)) < 0) continue; - - for (iv3 = iv2 + 1; iv3 < nw; ++iv3) - { - x03 = ww[iv3]; - if (x03 == x01 || x03 == x02) continue; - v3 = vv[iv3]; - if (ISELEMENT(gv1,v3) || ISELEMENT(gv2,v3)) - continue; - gv3 = GRAPHROW(g,v3,m); - if ((x13 = uniqinter(gv1,gv3,m)) < 0) continue; - if ((x23 = uniqinter(gv2,gv3,m)) < 0 - || x23 == x13) continue; - - if ((pnt0 = uniqinter(GRAPHROW(g,x01,m), - GRAPHROW(g,x23,m),m)) < 0) - continue; - if ((pnt1 = uniqinter(GRAPHROW(g,x02,m), - GRAPHROW(g,x13,m),m)) < 0) - continue; - if ((pnt2 = uniqinter(GRAPHROW(g,x03,m), - GRAPHROW(g,x12,m),m)) < 0) - continue; - - gp0 = GRAPHROW(g,pnt0,m); - gp1 = GRAPHROW(g,pnt1,m); - gp2 = GRAPHROW(g,pnt2,m); - - pc = 0; - for (i = M; --i >= 0;) - { - sw = gp0[i] & gp1[i] & gp2[i]; - if (sw) pc += POPCOUNT(sw); - } - wt = FUZZ1(pc); - ACCUM(invar[v0],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - ACCUM(invar[v3],wt); - } - } - } - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} - -/***************************************************************************** -* * -* setnbhd(g,m,n,w,wn) is an auxiliary routine that sets wn to the union * -* of the neighbours of the vertices in w. * -* * -*****************************************************************************/ - -void -setnbhd(graph *g, int m, int n, set *w, set *wn) -{ - int i,j; - set *gi; - - i = nextelement(w,M,-1); - if (i < 0) - { - EMPTYSET(wn,M); - return; - } - - gi = GRAPHROW(g,i,M); - for (j = M; --j >= 0;) wn[j] = gi[j]; - - while ((i = nextelement(w,M,i)) >= 0) - { - gi = GRAPHROW(g,i,M); - for (j = M; --j >= 0;) wn[j] |= gi[j]; - } -} - -/***************************************************************************** -* * -* cellfano() assigns to each vertex v a value depending on the set of * -* weights w(v,v1,v2,v3), where w(v,v1,v2,v3) depends on the number of * -* fano-plane analogues containing {v,v1,v2,v3}. {v,v1,v2,v3} are * -* constrained to belong to the same cell and being independent. We try * -* the cells in increasing order of size, and stop as soon as any cell * -* splits. * -* * -*****************************************************************************/ - -void -cellfano(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,pc; - setword sw; - int wt; - int v0,v1,v2,v3,iv0,iv1,iv2,iv3; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - set *gv0,*gv1,*gv2,*gv3; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellfano"); - DYNALLOC1(set,w01,w01_sz,m,"cellfano"); - DYNALLOC1(set,w02,w02_sz,m,"cellfano"); - DYNALLOC1(set,w03,w03_sz,m,"cellfano"); - DYNALLOC1(set,w12,w12_sz,m,"cellfano"); - DYNALLOC1(set,w13,w13_sz,m,"cellfano"); - DYNALLOC1(set,w23,w23_sz,m,"cellfano"); - DYNALLOC1(set,pt0,pt0_sz,m,"cellfano"); - DYNALLOC1(set,pt1,pt1_sz,m,"cellfano"); - DYNALLOC1(set,pt2,pt2_sz,m,"cellfano"); - DYNALLOC1(set,workset,workset_sz,m,"cellfano"); -#else -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,4,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (iv0 = cell1; iv0 <= cell2 - 3; ++iv0) - { - v0 = lab[iv0]; - gv0 = GRAPHROW(g,v0,m); - for (iv1 = iv0 + 1; iv1 <= cell2 - 2; ++iv1) - { - v1 = lab[iv1]; - if (ISELEMENT(gv0,v1)) continue; - gv1 = GRAPHROW(g,v1,m); - for (i = M; --i >= 0;) workset[i] = gv0[i] & gv1[i]; - setnbhd(g,m,n,workset,w01); - - for (iv2 = iv1 + 1; iv2 <= cell2 - 1; ++iv2) - { - v2 = lab[iv2]; - if (ISELEMENT(gv0,v2) || ISELEMENT(gv1,v2)) - continue; - gv2 = GRAPHROW(g,v2,m); - for (i = M; --i >= 0;) workset[i] = gv0[i] & gv2[i]; - setnbhd(g,m,n,workset,w02); - for (i = M; --i >= 0;) workset[i] = gv1[i] & gv2[i]; - setnbhd(g,m,n,workset,w12); - - for (iv3 = iv2 + 1; iv3 <= cell2; ++iv3) - { - v3 = lab[iv3]; - if (ISELEMENT(gv0,v3) || ISELEMENT(gv1,v3) || - ISELEMENT(gv2,v3)) - continue; - gv3 = GRAPHROW(g,v3,m); - for (i = M; --i >= 0;) workset[i] = gv0[i] & gv3[i]; - setnbhd(g,m,n,workset,w03); - for (i = M; --i >= 0;) workset[i] = gv1[i] & gv3[i]; - setnbhd(g,m,n,workset,w13); - for (i = M; --i >= 0;) workset[i] = gv2[i] & gv3[i]; - setnbhd(g,m,n,workset,w23); - - for (i = M; --i >= 0;) workset[i] = w01[i] & w23[i]; - setnbhd(g,m,n,workset,pt0); - for (i = M; --i >= 0;) workset[i] = w03[i] & w12[i]; - setnbhd(g,m,n,workset,pt1); - for (i = M; --i >= 0;) workset[i] = w02[i] & w13[i]; - setnbhd(g,m,n,workset,pt2); - pc = 0; - for (i = M; --i >= 0;) - { - sw = pt0[i] & pt1[i] & pt2[i]; - if (sw) pc += POPCOUNT(sw); - } - wt = FUZZ1(pc); - ACCUM(invar[v0],wt); - ACCUM(invar[v1],wt); - ACCUM(invar[v2],wt); - ACCUM(invar[v3],wt); - } - } - } - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} - -/***************************************************************************** -* * -* distances() assigns to each vertex v a value depending on the number of * -* vertices at each distance from v, and what cells they lie in. * -* If we find any cell which is split in this manner, we don't try any * -* further cells. * -* * -*****************************************************************************/ - -void -distances(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i; - set *gw; - int wt; - int d,dlim,cell1,cell2,iv,v,w; - boolean success; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"distances"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"distances"); - DYNALLOC1(set,ws1,ws1_sz,m,"distances"); - DYNALLOC1(set,ws2,ws2_sz,m,"distances"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ1(wt); - if (ptn[i] <= level) ++wt; - } - - if (invararg > n || invararg == 0) dlim = n; - else dlim = invararg+1; - - success = FALSE; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell2 == cell1) continue; - - for (iv = cell1; iv <= cell2; ++iv) - { - v = lab[iv]; - EMPTYSET(ws1,m); - ADDELEMENT(ws1,v); - EMPTYSET(ws2,m); - ADDELEMENT(ws2,v); - for (d = 1; d < dlim; ++d) - { - EMPTYSET(workset,m); - wt = 0; - w = -1; - while ((w = nextelement(ws2,M,w)) >= 0) - { - gw = GRAPHROW(g,w,m); - ACCUM(wt,workshort[w]); - for (i = M; --i >= 0;) workset[i] |= gw[i]; - } - if (wt == 0) break; - ACCUM(wt,d); - wt = FUZZ2(wt); - ACCUM(invar[v],wt); - for (i = M; --i >= 0;) - { - ws2[i] = workset[i] & ~ws1[i]; - ws1[i] |= ws2[i]; - } - } - if (invar[v] != invar[lab[cell1]]) success = TRUE; - } - if (success) break; - } -} - -/***************************************************************************** -* * -* indsets() assigns to each vertex v a value depending on which cells the * -* vertices which join v in an independent set lie in. The size of the * -* independent sets which are used is the smallest of invararg and MAXCLIQUE.* -* * -*****************************************************************************/ - -void -indsets(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i; - int wt; - set *gv; - int ss,setsize; - int v[MAXCLIQUE]; - long wv[MAXCLIQUE]; - set *s0,*s1; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"indsets"); - DYNALLOC2(set,wss,wss_sz,m,MAXCLIQUE-1,"indsets"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - if (invararg <= 1 || digraph) return; - - if (invararg > MAXCLIQUE) setsize = MAXCLIQUE; - else setsize = invararg; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ2(wt); - if (ptn[i] <= level) ++wt; - } - - for (v[0] = 0; v[0] < n; ++v[0]) - { - wv[0] = workshort[v[0]]; - s0 = (set*)wss; - EMPTYSET(s0,m); - for (i = v[0]+1; i < n; ++i) ADDELEMENT(s0,i); - gv = GRAPHROW(g,v[0],m); - for (i = M; --i >= 0;) s0[i] &= ~gv[i]; - ss = 1; - v[1] = v[0]; - while (ss > 0) - { - if (ss == setsize) - { - wt = FUZZ1(wv[ss-1]); - for (i = ss; --i >= 0;) ACCUM(invar[v[i]],wt); - --ss; - } - else if ((v[ss] = nextelement((set*)wss+M*(ss-1),M,v[ss])) < 0) - --ss; - else - { - wv[ss] = wv[ss-1] + workshort[v[ss]]; - ++ss; - if (ss < setsize) - { - gv = GRAPHROW(g,v[ss-1],m); - s1 = (set*)wss + M*(ss-2); - for (i = M; --i >= 0;) s1[i+M] = s1[i] & ~gv[i]; - v[ss] = v[ss-1]; - } - } - } - } -} - -/***************************************************************************** -* * -* cliques() assigns to each vertex v a value depending on which cells the * -* vertices which join v in a clique lie in. The size of the cliques used * -* is the smallest of invararg and MAXCLIQUE. * -* * -*****************************************************************************/ - -void -cliques(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i; - int wt; - set *gv; - int ss,setsize; - int v[MAXCLIQUE]; - long wv[MAXCLIQUE]; - set *ns; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"cliques"); - DYNALLOC2(set,wss,wss_sz,m,MAXCLIQUE-1,"cliques"); -#else - set wss[MAXCLIQUE-1][MAXM]; -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - if (invararg <= 1 || digraph) return; - - if (invararg > MAXCLIQUE) setsize = MAXCLIQUE; - else setsize = invararg; - - wt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = FUZZ2(wt); - if (ptn[i] <= level) ++wt; - } - - for (v[0] = 0; v[0] < n; ++v[0]) - { - wv[0] = workshort[v[0]]; - gv = GRAPHROW(g,v[0],m); - ns = (set*)wss; - for (i = M; --i >= 0;) ns[i] = gv[i]; - ss = 1; - v[1] = v[0]; - while (ss > 0) - { - if (ss == setsize) - { - wt = FUZZ1(wv[ss-1]); - for (i = ss; --i >= 0;) ACCUM(invar[v[i]],wt); - --ss; - } - else if ((v[ss] = nextelement((set*)wss+M*(ss-1),M,v[ss])) < 0) - --ss; - else - { - wv[ss] = wv[ss-1] + workshort[v[ss]]; - ++ss; - if (ss < setsize) - { - gv = GRAPHROW(g,v[ss-1],m); - ns = (set*)wss + M*(ss-2); - for (i = M; --i >= 0;) ns[i+M] = ns[i] & gv[i]; - v[ss] = v[ss-1]; - } - } - } - } -} - -/***************************************************************************** -* * -* cellcliq() assigns to each vertex v a value depending on the number of * -* cliques which v lies in and which lie in the same cell as v. The size * -* of clique counted is the smallest of invararg and MAXCLIQUE. We try the * -* cells in increasing order of size and stop as soon as any cell splits. * -* * -*****************************************************************************/ - -void -cellcliq(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i; - int wt; - set *gv; - int ss,setsize; - int v[MAXCLIQUE]; - set *ns; - int *cellstart,*cellsize; - int iv,icell,bigcells,cell1,cell2; - int pc; - setword sw; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"cellcliq"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellcliq"); - DYNALLOC2(set,wss,wss_sz,m,MAXCLIQUE-1,"cellcliq"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - if (invararg <= 1 || digraph) return; - - if (invararg > MAXCLIQUE) setsize = MAXCLIQUE; - else setsize = invararg; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,setsize > 6 ? setsize : 6,&bigcells, - cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - - EMPTYSET(workset,m); - for (iv = cell1; iv <= cell2; ++iv) ADDELEMENT(workset,lab[iv]); - - for (iv = cell1; iv <= cell2; ++iv) - { - v[0] = lab[iv]; - gv = GRAPHROW(g,v[0],m); - ns = (set*)wss; - pc = 0; - - for (i = M; --i >= 0;) - { - ns[i] = gv[i] & workset[i]; - if ((sw = ns[i]) != 0) pc += POPCOUNT(sw); - } - if (pc <= 1 || pc >= cellsize[icell] - 2) continue; - - ss = 1; - v[1] = v[0]; - while (ss > 0) - { - if (ss == setsize) - { - for (i = ss; --i >= 0;) ++invar[v[i]]; - --ss; - } - else if ((v[ss] - = nextelement((set*)wss+M*(ss-1),M,v[ss])) < 0) - --ss; - else - { - ++ss; - if (ss < setsize) - { - gv = GRAPHROW(g,v[ss-1],m); - ns = (set*)wss + M*(ss-2); - for (i = M; --i >= 0;) ns[i+M] = ns[i] & gv[i]; - v[ss] = v[ss-1]; - } - } - } - } - wt = invar[lab[cell1]]; - for (iv = cell1 + 1; iv <= cell2; ++iv) - if (invar[lab[iv]] != wt) return; - } -} - -/***************************************************************************** -* * -* cellind() assigns to each vertex v a value depending on the number of * -* independent sets which v lies in and which lie in the same cell as v. * -* The size of clique counted is the smallest of invararg and MAXCLIQUE. * -* We try the cells in increasing order of size and stop as soon as any * -* cell splits. * -* * -*****************************************************************************/ - -void -cellind(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i; - int wt; - set *gv; - int ss,setsize; - int v[MAXCLIQUE]; - set *ns; - int *cellstart,*cellsize; - int iv,icell,bigcells,cell1,cell2; - int pc; - setword sw; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"cellind"); - DYNALLOC1(int,workshort,workshort_sz,n+2,"cellind"); - DYNALLOC2(set,wss,wss_sz,m,MAXCLIQUE-1,"cellind"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - if (invararg <= 1 || digraph) return; - - if (invararg > MAXCLIQUE) setsize = MAXCLIQUE; - else setsize = invararg; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,setsize > 6 ? setsize : 6,&bigcells, - cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - - EMPTYSET(workset,m); - for (iv = cell1; iv <= cell2; ++iv) ADDELEMENT(workset,lab[iv]); - - for (iv = cell1; iv <= cell2; ++iv) - { - v[0] = lab[iv]; - gv = GRAPHROW(g,v[0],m); - ns = (set*)wss; - pc = 0; - - for (i = M; --i >= 0;) - { - ns[i] = ~gv[i] & workset[i]; - if ((sw = ns[i]) != 0) pc += POPCOUNT(sw); - } - if (pc <= 1 || pc >= cellsize[icell] - 2) continue; - - ss = 1; - v[1] = v[0]; - while (ss > 0) - { - if (ss == setsize) - { - for (i = ss; --i >= 0;) ++invar[v[i]]; - --ss; - } - else if ((v[ss] - = nextelement((set*)wss+M*(ss-1),M,v[ss])) < 0) - --ss; - else - { - ++ss; - if (ss < setsize) - { - gv = GRAPHROW(g,v[ss-1],m); - ns = (set*)wss + M*(ss-2); - for (i = M; --i >= 0;) ns[i+M] = ns[i] & ~gv[i]; - v[ss] = v[ss-1]; - } - } - } - } - wt = invar[lab[cell1]]; - for (iv = cell1 + 1; iv <= cell2; ++iv) - if (invar[lab[iv]] != wt) return; - } -} - -/***************************************************************************** -* * -* adjacencies() assigns to each vertex v a code depending on which cells * -* it is joined to and from, and how many times. It is intended to provide * -* better partitioning that the normal refinement routine for digraphs. * -* It will not help with undirected graphs in nauty at all. * -* * -*****************************************************************************/ - -void -adjacencies(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,v,w; - int vwt,wwt; - set *gv; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"adjacencies"); -#endif - - vwt = 1; - for (i = 0; i < n; ++i) - { - workshort[lab[i]] = vwt; - if (ptn[i] <= level) ++vwt; - invar[i] = 0; - } - - for (v = 0, gv = (set*)g; v < n; ++v, gv += M) - { - vwt = FUZZ1(workshort[v]); - wwt = 0; - w = -1; - while ((w = nextelement(gv,M,w)) >= 0) - { - ACCUM(wwt,FUZZ2(workshort[w])); - ACCUM(invar[w],vwt); - } - ACCUM(invar[v],wwt); - } -} - -/***************************************************************************** -* * -* nautinv_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -nautinv_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in nautinv.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in nautinv.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in nautinv.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: nautinv.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* nautinv_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -nautinv_freedyn(void) -{ -#if !MAXN - DYNFREE(workset,workset_sz); - DYNFREE(workshort,workshort_sz); - DYNFREE(ws1,ws1_sz); - DYNFREE(ws2,ws2_sz); - DYNFREE(vv,vv_sz); - DYNFREE(ww,ww_sz); - DYNFREE(w01,w01_sz); - DYNFREE(w02,w02_sz); - DYNFREE(w03,w03_sz); - DYNFREE(w12,w12_sz); - DYNFREE(w13,w13_sz); - DYNFREE(w23,w23_sz); - DYNFREE(pt0,pt0_sz); - DYNFREE(pt1,pt1_sz); - DYNFREE(pt2,pt2_sz); - DYNFREE(wss,wss_sz); -#endif -} - -/*===================================================================*/ - - -/***************************************************************************** -* * -* semirefine(g,lab,ptn,level,numcells,strength,active,m,n) performs a * -* refinement operation on the partition at the specified level of the * -* partition nest (lab,ptn). *numcells is assumed to contain the number of * -* cells on input, and is updated. The initial set of active cells (alpha * -* in the paper) is specified in the set active. Precisely, x is in active * -* iff the cell starting at index x in lab is active. * -* *code is set to a value which depends on the fine detail of the * -* algorithm, but which is independent of the labelling of the graph. * -* * -*****************************************************************************/ - -static int -semirefine(graph *g, int *lab, int *ptn, int level, int *numcells, - int strength, set *active, int m, int n) -{ - int i,c1,c2,labc1; - setword x; - set *set1,*set2; - int split1,split2,cell1,cell2; - int cnt,bmin,bmax; - long longcode; - set *gptr; - int maxcell,maxpos,hint; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n,"refine"); - DYNALLOC1(set,workset,workset_sz,m,"refine"); - DYNALLOC1(int,bucket,bucket_sz,n+2,"refine"); - DYNALLOC1(int,count,count_sz,n,"refine"); -#endif - - longcode = *numcells; - split1 = -1; - hint = 0; - while (*numcells < n && ((split1 = hint, ISELEMENT(active,split1)) - || (split1 = nextelement(active,M,split1)) >= 0 - || (split1 = nextelement(active,M,-1)) >= 0)) - { - DELELEMENT(active,split1); - for (split2 = split1; ptn[split2] > level; ++split2) {} - longcode = MASH(longcode,split1+split2); - if (split1 == split2) /* trivial splitting cell */ - { - gptr = GRAPHROW(g,lab[split1],M); - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - c1 = cell1; - c2 = cell2; - while (c1 <= c2) - { - labc1 = lab[c1]; - if (ISELEMENT(gptr,labc1)) - ++c1; - else - { - lab[c1] = lab[c2]; - lab[c2] = labc1; - --c2; - } - } - if (c2 >= cell1 && c1 <= cell2) - { - ptn[c2] = level; - longcode = MASH(longcode,FUZZ1(c2)); - ++*numcells; - if (ISELEMENT(active,cell1) || c2-cell1 >= cell2-c1) - { - ADDELEMENT(active,c1); - if (c1 == cell2) hint = c1; - } - else - { - ADDELEMENT(active,cell1); - if (c2 == cell1) hint = cell1; - } - } - } - } - else /* nontrivial splitting cell */ - { - EMPTYSET(workset,m); - for (i = split1; i <= split2; ++i) - ADDELEMENT(workset,lab[i]); - longcode = MASH(longcode,FUZZ2(split2-split1+1)); - - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - if (cell1 == cell2) continue; - i = cell1; - set1 = workset; - set2 = GRAPHROW(g,lab[i],m); - cnt = 0; - for (c1 = m; --c1 >= 0;) - if ((x = (*set1++) & (*set2++)) != 0) - cnt += POPCOUNT(x); - - count[i] = bmin = bmax = cnt; - bucket[cnt] = 1; - while (++i <= cell2) - { - set1 = workset; - set2 = GRAPHROW(g,lab[i],m); - cnt = 0; - for (c1 = m; --c1 >= 0;) - if ((x = (*set1++) & (*set2++)) != 0) - cnt += POPCOUNT(x); - - while (bmin > cnt) bucket[--bmin] = 0; - while (bmax < cnt) bucket[++bmax] = 0; - ++bucket[cnt]; - count[i] = cnt; - } - if (bmin == bmax) - { - longcode = MASH(longcode,FUZZ1(bmin+cell1)); - continue; - } - c1 = cell1; - maxcell = -1; - for (i = bmin; i <= bmax; ++i) - if (bucket[i]) - { - c2 = c1 + bucket[i]; - bucket[i] = c1; - longcode = MASH(longcode,i+c1); - if (c2-c1 > maxcell) - { - maxcell = c2-c1; - maxpos = c1; - } - if (c1 != cell1) - { - ADDELEMENT(active,c1); - if (c2-c1 == 1) hint = c1; - ++*numcells; - } - if (c2 <= cell2) ptn[c2-1] = level; - c1 = c2; - } - for (i = cell1; i <= cell2; ++i) - workperm[bucket[count[i]]++] = lab[i]; - for (i = cell1; i <= cell2; ++i) lab[i] = workperm[i]; - if (!ISELEMENT(active,cell1)) - { - ADDELEMENT(active,cell1); - DELELEMENT(active,maxpos); /* check maxpos is alwas defined */ - } - } - } - if (--strength == 0) break; /* negative is fine! */ - } - - longcode = MASH(longcode,FUZZ2(*numcells)); - return CLEANUP(longcode); -} - -void -refinvar(graph *g, int *lab, int *ptn, int level, int numcells, int tvpos, - int *invar, int invararg, boolean digraph, int m, int n) -{ - int i,j; - int wt; - int icell,bigcells,cell1,cell2; - int *cellstart,*cellsize; - int newnumcells; - -#if !MAXN - DYNALLOC1(int,workshort,workshort_sz,n+2,"refinvar"); - DYNALLOC1(int,vv,vv_sz,n,"refinvar"); - DYNALLOC1(int,ww,ww_sz,n,"refinvar"); - DYNALLOC1(set,ws1,ws1_sz,n,"refinvar"); -#endif - - for (i = n; --i >= 0;) invar[i] = 0; - - cellstart = workshort; - cellsize = workshort + (n/2); - getbigcells(ptn,level,2,&bigcells,cellstart,cellsize,n); - - for (icell = 0; icell < bigcells; ++icell) - { - cell1 = cellstart[icell]; - cell2 = cell1 + cellsize[icell] - 1; - for (i = cell1; i <= cell2; ++i) - { - for (j = 0; j < n; ++j) - { - vv[j] = lab[j]; - ww[j] = ptn[j]; - } - newnumcells = numcells + 1; - ww[cell1] = level; - EMPTYSET(ws1,m); - ADDELEMENT(ws1,cell1); - vv[i] = lab[cell1]; - vv[cell1] = lab[i]; - invar[lab[i]] = semirefine(g,vv,ww,level,&newnumcells, - invararg,ws1,m,n); - } - wt = invar[lab[cell1]]; - for (i = cell1 + 1; i <= cell2; ++i) - if (invar[lab[i]] != wt) return; - } -} diff --git a/tools/nauty25r9_mac/nautinv.h b/tools/nauty25r9_mac/nautinv.h deleted file mode 100644 index 738d8c2..0000000 --- a/tools/nauty25r9_mac/nautinv.h +++ /dev/null @@ -1,42 +0,0 @@ -/***************************************************************************** -* This is the header file for versions 2.5 of nautinv.c. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 20-Apr-01 : initial creation out of naututil.h * -* 10-Nov-10 : remove types shortish and permutation * -* * -*****************************************************************************/ - -#include "nauty.h" /* which includes stdio.h */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void adjacencies(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void adjtriang(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellcliq(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellfano(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellfano2(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellind(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellquads(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellquins(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void celltrips(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void cellstarts(int*,int,set*,int,int); -extern void cliques(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void distances(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void getbigcells(int*,int,int,int*,int*,int*,int); -extern void indsets(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void nautinv_check(int,int,int,int); -extern void nautinv_freedyn(void); -extern void quadruples(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void refinvar(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void setnbhd(graph*,int,int,set*,set*); -extern void triples(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -extern void twopaths(graph*,int*,int*,int,int,int,int*,int,boolean,int,int); -#ifdef __cplusplus -} -#endif diff --git a/tools/nauty25r9_mac/nautinv.o b/tools/nauty25r9_mac/nautinv.o deleted file mode 100644 index 70e09dab22e3dd800b1a5c6c40e1c78dd0b05618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59288 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 AaR2}S diff --git a/tools/nauty25r9_mac/nautinv1.o b/tools/nauty25r9_mac/nautinv1.o deleted file mode 100644 index acbebb539e8a1fa8ae2db759982ca9245a6f4084..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32720 zcmeHw3w%`7wf77ec}5OsYOyAo2wGC9mq=O}6Dud21LuSpuu7C#X~ZE^syqxcihcx$ zlTo%O2cm$|`l7vUKYH8VVp}XK=uCo1cnIN9URnfS5TiDLl7KPu{ny_6Br_oqd;9g? z@7}NT<7Az^&wibK*8cCc)?RzFVETRTrY zh{`nk?-5~?>7uK*2)c@kgC+BWG5}IsJXxPIxijqC?I{*_R35cu)f|`05Di=Gq#;^d zeCIq_HIFVX*3`*rXNtqJ9Su$c@QBKDepF=QuedlcXZF0#26k=VVcD)sS>Eb9lgmpi zi|$e0ykP0f**}yIx|ZjfAs(!d&!czA8%er$Ikj)r+-ZSeacK7aGiOgPF7|1OIabN? z7R!uNX1ZMTP4_?Ga;1rcNktYHm)uo6qjcJ=67jHW`-UJt{i0L|e*5nh<%y8XHNfRc zYVj~U7(@^I_vcBdvLU$UKj?B@3wo>!7djpJTsPvP-zD;*_WcX4zPSF@Uy;GyQ*Tvo zQH#{cH{WQoxMocqsYl*WmKLKnJ!doSgXe4Pt?*IztMt)>Sw^6@VP8)b)p;JFC~tq| z*{JeDYrIZDvtFgQ7uvz4ot%#%`x@cuzG}F-J+y^4OIf-B1^Dc5Q8_;Q z3QpK(UCL+v2BYr0ws<^F&tIYTy@WvAU~e@InNei~8cfTx&*;Y+#~hwe=ojB7Vo5_{D!3uGAw_C#zrhL;xQv!)7R2RdSgl? zKy3(b>id25c6F-y1GRW+jdIx-SJL+|!XIX8%$|&-%%090z0%-h-53y)edc3RS8G;i zq|YiDq(@FEOG9`;KWjDvQPrLs_t_KO#;dJJOYiMtTaB#Ga(4N$b|@7QMEF^)$*Rrl zgNA*J+X%niiXLt?VjraFIZ-2C9qebY-A4EwcknC9tx;7OtW`AgzlYWJ#A`w z%|NXYj<)%-qo(btFyaWk-|EY*MHb~Umogat#x&zPjH>}Dqxh7~p`$+5V6ZdPRPWB< z57E|^z2WwD{%Mp+d+lH^H#-r2J0)@|=!xtKUL8K;4rZXfV5(ZDRkWdYml3b;=|0@< zDZLO4m{BEKO%04h7oE@}QM~iQo7eO15De+F&!^IKcEYeW^4_(cq28ULTn2<-)o6rj zBpMd)kBql{BymBAuY5Y{7`m8EIG3d4#}uSGFy5smVU2xAVpX7%5Aqprpo^@s>2c@KnS% z{t7V||2fSjt21MN9c{20Bi3}aQT|RFzJtj&nXwPAG|S%=p{N-7w&ps|C_Z2NAca)xzo6AROO72KNtjY+15P6Ny(%1T| zqBXc5<+G-)Hms>pWO&wKpJ{;Ol-!5?fz5@sr@!CMuc-o~EWBib6@0zbjBhrrK4!SC z)$rB^k2YR|FEFDjrEG)7n!|@vWcAvp+=o>+7_#{a0w^{7zVoDDl;;J*Dr*39Z*bR^ zzt11D+zn%`+!aoEEX!Sia79A6LQU~hin5rek}xe^?LFXQA1jf$?O>9)zDi?Jzdgo{ z+bWH?D$?>faWv;B;ElzhOtbh9u>@;boPnD9fIq9jL-9J4s)0cw=_0EbmwZfkQ`alY z)&bCgo|y^gDaKbaezKLEaoIXzPYk3rnl(#eAo3FGY72*Jt zyM0+Fb9VW&_9_*O#s{l0v)?f69{?ra0ZP^YC7T3F)(}b_1bFt0l9&xu)YB765=VE; zCtrY<`+e+$>D?9l(LVqzFXCtoyz7dWA1%B!87w(o=yT@+_Um62V_(sH1V8sDrj{}NWuBKM#`AA5)6uca>mSn5lRK)u0$ z5mtn%^94Lh1hVjH8_2hq>3ecc={awx92Ps;g9&ndCqAxX`ldX6Pv~OZTeB$5jMr#v zf8zms@{aU{R_a@Yqf!BT9E?nRtXuOQThJFA(6|-}IRNULQuIA23L|~B$&UNjE*~ob z+aCa)2t3lP{3<}SmRGhXl&%4bxFDfankb_2PaKOxe~AZ;Kj%^CeTC`(oPjENV>zn#A#%j5pyA4b3Wo{0yf44Z5EI-wagi_JeW1J>G4;+=(zXzN|MO zUi-6Zl!{7xeLs88&-R!sW@aDo+xNRoNKqIot!C_F0L?BlUK{KOWK0srB3vAc99CZ< zam)<2_bMH21~v(xX)tXq;xgk9pO3csv-kBVk6{Yo@>so}9q_Za{p>@(w>}uuFx{&y z4QjZx{bhW~xT;Lrui09PTVplhcTylqK{9&-lG$e@nSJ&pB{LM~DILPwvKVbX3vbYI z^MD3A+v#U})t3p4^&G%6=N-f5=#$w07{Hk9bSrJKo^!A;;CV%3Y2gBI>PteKP~A1? z0o{8#wAaUulaTclF5#4|Htg}O7|cg-H6+vDpbz^9+3YTTN)>9)Dtrl~U zT}$I%2p}DJjUv{AyDC=TnWYa2x4OqDE9xRqWd*oNUt?GU%>GLI{fo2hWizgDwGSdewrTi|b~E|!0_G1RluV7vp)R!30Nk|D_I zkHnRgF^qN9{koPi3kt`qZ6xmq+(bD#1d`PHoG34%@ez6}l5b76AK)?CWCzSx;$wqD$r)1@&cyG>*<9HQaq19R`BAw4p$zo zd>Rj+H>7x;Oz}Kt1Wx%_lga*)F#km;YT?C*G_3UF=Fr+AL*?}#l+=U(*+lRw0sAE0Nwj zZj+HP%4Pnf@$F|@pdJr`qzSEf;gt9my35&|$d6{=fDzx?IiGuj&v^{{`|d@j3LwIH zYZeRvijHTgYx%6IW!Jm+k7b_UtMOV)M&376c3{B<9|TB^<&a`EGkQx=5!w(lVvRRo zI>>a_a}~Q|zOsF$+Z$WZ>fjZ9XsDO=n|OCt-?HBqIOYo+f%y1a-WyDB$k~9sHL!j-~z7>W_%g1uXSvMhe7F?@5EE(1SWVRQ6Ld zu-By9{Kriewe)Q;1XP*vO;%Aoa2&6udN(N%p#pC)0@dC150pd}QA_Peq^BDO&A}_;9kn$0+dhyeYyZDXf@JCIeu^Pv3ApYDmWAEZD{~(ze2FBOlr2Z zi`=Xhl0S#+Q^Bjk?e5?um@R?>>a^ujm)_F-Z6{od{^RYZwnla>Ithg@cI-0E-LSLO z7ijj0aX-mU{S!cVm|^RCUcwv*X}S&{pT+#F^%yasRkVlZ$JYsnEqyWOR|4Wygz_9I z%|Py}VAyL_EAY>g3+B|!|ecxj#E z8}kIpM3#VOEz+(AU@tZ-55OOK`KS)y&I|ofvA-iAeo5l@gis4yqWr0-%OA!4D#P~F zlO($V>0OPF;*XKD(`1{0&;V)@?*P~XqxwMq@QJnu%(y!H1(nlhEEv_eUE%gW9C3){%(myA^-3m$hu-~3O zEN*zW1dla-k9h4emza;G#;=V^FGq*0u{@UM-p}!xc`&>AS9gukq4K7O)$(^pB-B`X z7>NMQ^%x3y{y&0wl*(O%(Q*0&Fa*HnfI%YUIPVsN)hd;xcpm2;%Ho`YFHIlOTdh>~ z!6WD^#3PbPEzUO`1|QBF&S$hd;m+@i4_9^x8iNnyd)`B$q{j+=&~#x3-p1>^`;Tr`{OFfzuG8XDC$iMIkpj~ zjTUIuX@MjBf)Faz+C*#5ESS##wfZ;FN7_1}ADP(nd2XTj#<<_fA^{WRAdXcc56{VUaX?RseJ) z-m(jTj;Xl8szIh8$55JsUzQWe*-_vlCCgh$H7NE)9M+-DS}S>qPJ9$)a<=zb5z1rn z3I&{7ycH}m67dQ0w2#U47Cl-RNL$=9UJ~9KjN_%2$B|#LzfV{l5JOC?LOMui?K&q%G5m`wxt?w3|A#b66 zlhZhhbDod$5oYnxD@O{U|FeK)puY>rB>HO>AIpG$8reunV^J`arwWoVUX07XU@+ff zkbkR%{F{~_|7zYkrELbN_F__b2yUpyA2CVd?F+&rE;(ZK?_hx()QoLy~x^rP> z1-F;3IIO-XRPR=9FRd2#(t5FcT|+B8zU-~sL^;OQ?RrcN*S8NEtkuNQ+mFtrZ(mLN zb_VI&w0OP3QMh}$CzU&CJ!VC-RJczhDBOJMm_C-YjlyoTxI^t0V)0+O+AVZ$tXD+d zL~5D`j$xMIpO{YqoJUN1ya$T#VWhy?zZ8#wjl?N(s6q)Vu+qu_V6DU=ffJB!1i$dlwoC#TIbQSwU!Q zCWj+?3RO+WW|7$vGH|_St)zkpP&@3es-;zVj6kzAIvSDGme2$&Tp(M1i;=Y>_#H#p z2=mLS8>I2r$jd(&%0>#t1*rgdk4*30qR3qwC6IVFEHXEUqD~s zv;4?12G(M3=$#lyU!r@Pur$yy-4(5Y`M3d-6hn5{sChbHBp*u~KkQ6|rQ|fM!Z-M` zT9t}P6t8Rq`{4Cq(3W)?d7cwW~`*MWg9Km0|vwvkh`0{IMm8IfC zyr$+os8qazo5Dc)^FG$<>(?Nq2qWS-q(tgzTI65OvmZmym({LR{E_06jqOIb4*MZ!H{}zh9|Hrx;~poe^$M z$N(mZ@eH2>u3#Sp)6eJZScJOJkFeuIQsz-Z^G_%hdnuW+ai0-Bkz5K4_o((y^w`=+ zqEw-sdlUnQXSF?GI5FYda6uAwC``VbhZ>K7pGg0zg((rLkuXv45Hut?%dQ(ut>Teb z8+0OR))0}Gc18~Gh=khYq|EGygk^|FDlfD_${T`sa$yh>o8$q!!5GA20)%q9k!r?m zAKX%X@|J3mw^TOW;_8jgq9Sn%0flQA{1zQ6Ty8q~4eHnx_?-JXy4SN8w{wvh%OHEP z-WLzP*?1Iqqp`!>%Yly~ZPc)b@LdN%SwiY5NNst3uelFPjqCULXfQ%`iCLQ*gBJay zb7KFA9KTq1qoJ?D8W3s5?1|MzljeK>1|@PM!f}0tFiPpG^YjWOl1gdVX2*gkELg(R zfuo{QdFBk^nge(oK}m+SLW3;N!^lS%3{&}I07VzQwzZM))|qd;ZPaLnWN zJQ4i3DLoMndE+?JE0y_FQ~4&EP!s258sQ!I>CDeJ--xjf0T1iLd^yGOk>j&RBsxDA z3rSes-C?qU{5hOgSas8dj{lt5ueTE|b3E`~Qy;UAdwU8uH}2wgmOM}|Cvo+Y6Bf(vLdpbGZ)CmnGh z(f-cG0R#NfvpDcp7jYmTsYx6t?Td*EtDqbzfpj#;ogt5fr$G8+U{@*{cIjSLZnb}44i zH3oa;E-H>aL$f}ga60%ATu;v+dfWkGk{gkb7*tw;oq#&f82%`bUxDcw^WASLgY^tm z0RJ}26Q2;s{f!yHym5iXjy3j2o=$#eQ=j(3Tr||vB1{f^7ER!IVIS;t0iAz?WPC$7 zgg9Id=Kq>lU;RS=(WU_j&Zhv9#j5u;#h!#=VHG{Cu_hn;En%CV9fu738))j#2I-xq z!gq2p*xIGCLn^r)1-8lz%}X!+CCwY`j!&ehdcPW_yQj==po|WU|~Av zyN&Jf-7a2^P5aOZ07ikF|f*!Rwy-ZU@)pO9}oCS2$s+{^_BR4G4WDY5ZcJfQKy zR~4}gNvn}qhLrvyTax@m61~$%3Xgr#`G88luEb^sQkav6ee3hY4r zaP`ME00P=TTuMUo;N*pv=W#uT39w_#J9-YFlm>gEyc3Bo{F-6;;J`W5SKVq3^}%8Q z6%PI-mjj0#p^{I95Gt{HNkV1J^1Rq7O}ZhUaA~?7Z^0d!B-zU1~EhT!XomTQaKw|l;ru4)Xy3v^66=6oDLO`&li~2;D}Ob z@oCnY`gGH9#B@v|&I6iC@GuEaA-e`BD0_V;z?-OYr54 zCtJ8+O0r*qV9LvLCI8Rbkb zeF8f8Q)6$y*-y37f2_fq1^#s^OMf`gz0Sa{AMcsaKHb}@JQt;Ph7~nxJlYq`(5fn0 z6mGKkX2j<3lv9@e4gf<2CO$or{W{PJDQ>l4FM^5#e)9TWg1^)v_)DQYJBZXUt#D|7 z9hcj?Nq)q*4x~QJ*A}H`AlbXcgdvHrV28^#^-?O2q5uaEyW0zt;5)X2HVVLbZV$i^ z?v}ElP)ODbe#d;Rv!i-S{u8F9{n;hwQJuBP;qJ(X9Eh<4Xa^i7h*jZF3+K*5!D8M0 zSM&^5T_wuo6Ux-1$O^UmDA|?a{#4=2MG(MSb{a#aY%WMY*e3X$8h=g8o3%-)ypm*J zxxNf#)xtg;Zl-|qU?6p=n&+tu_CY^#aOa??ukjM@xs}RaL%9r>t#DZwXIOotF%~*M zUZ;8EtW~L;O3G+>)0Bi^nv74$n?8{!o^F8!hn% z+EjbNFfbk*V_zgRqUJ$?!nlRQt3NBIR6NFG&iJzr`p$BReM633XhVnH!67r0zeZ0M zD2ue0n+1`Y9Us8sI=o`{Lx~B4XW@_qEALyBD+wP@DvMmW#x&EP!}O;CBOiJod}QD8 zvwd&@^m`kE^HqDiaI$(84TqCe>o{Ax0j{xi;iJ+uHV)U=IN5#Uu=^I&X)kjX&y4Tr z>7KjBUM5=9F@EJM!AG|Z!)Q@6janoGQ=bF~T6!i1T!hx<5ZPaSl{OFR%EVUQ%Uckw zvm>1&oZCv|$Ar9>CnD9eKpE0>4E@)^Q`Ng*r^B_*Z0`XnXppZW#Rvu^Mos4Hl9%xJ~w= zJt{)H2&U1(6kPF;XEWvVv#r6w=;Aq^t@PKob&%iw9`=638u^g|KfX7F)?BiJC!iUwfj|clk zHitYpr<$$`pLPc?M#F>sCk{vl0@uP4)ZHBlRl}#TC-ZdaRj9vah{ld;*;tJ^B=BRv zy~m6J_cr5dH3sCM?U`V`5YU?=HtbV0wBh@;lW++iKp+v*e=gkBbUQdK?hmx<-ff|q z`L4FF;Zqh`6`%9(4LD2kr!WJXt!Ic)u;aAiIlL%4h@CV_gdiW{%b>iz=s9a^J?sqB%6c$- z6Y!hf2fcEhATA?MZwOrg178<8iuZ#fUv|akRw_a+;r8 zj@;##pi4(P?=Q!1;`4;@n;7kkU(AQ^Cy!sT*+5J=O67y-o-Z1`G$IqkE8Y>E->>WV z75<~2!fq%`sM2LhAL#=kC13-Wv|!vN^yQnu=R?q%l(ffjyDtm77a(YDS1O1Zxtess zu!}K!zLT)Y5l-xUljEVJwe&~0{rr&*`#Inb_H%MZha3BTtOh^QDP>_CIsMz?c*dHg zpPleyGkC}T##iwPAzHQD!9H%*0>O%J22YZ!u!jDKG@a9C@NVyEGkDT^`Xdk-#eQ&X zoyTx)hcs2==@`!Iaf`_Q>INxIz3*ecxC2eWzEuJpcGSDWLJIrSnJ#DakY&-30-N`?#r9UkklF0P#r>a`^qP7mvsTQJ>UTNAot;Y{X ztx(VB6A_E`Q*fKJOU{C@Oc;S&GS83ZDLgQLdddsz1-;{JW00acwH+*(E_;>6lyF;> z&l&edEwHuTSfy9l2~C;Upk|*i;dh0tXvT}+UHUCDvo;%9(6ElHTtK6OT)~@6_i@zC z8)>JmEwCq}l)YH$pIDuZUDYSW`bj%B$>gB<+`xnR@!mG9U-<^)o-_vJ<8*--j&+E( z(|G`!A%kGg+BI&oU%TP04}INa%{~T+*QQr#Bwc{kL*+s!Z+PR2z*smJ6xcx*mffQ8 zWc3}7*Rtm9`t0q&eozb`97UThG6R|ovlf?sQFS#$LX?aTFPkOnD22WvUnh5o{Q$Jq zW+QM*n=!z%+X!65i9CuTT-QtU?pSaH>l7ppNu5*o)?@38#&#&nGSM(@|G@eO%p(!B z(qF}(k6FTh(@uk%)khq98wo9)@qu0!ZvM2z9QL(@E#`2wlKVYtlU%K6+dAxP3ES4; zYQ=YFVKEo0xRO78EH*A>1jA_+u%?X|fD6_%PE&oB;O~?XFCwZO`?4GxoA_!8@)x#y zrW=;l0{fW<9w6FDsFB#7b*ynLx&ivR8vY!k={%s0!=o0L^exX4d}hA-LBjwVZ&k48PHL~Wy(}I4v(5uGMD==>VZHZ~#P@+mR^G~7>if#0ijbFfAsuCg}VbLW@vhr@C9 z4V^CbOVUdioRQ(_lM}@`0;!}3%Ol1x-S&LMSe=gV3$d9mRg%@^fr<9*4|^us!G}DP z?CBAY2K`IVj>+AmUA~VQm`CT0{a*D>#DQb{9H%o-9EJ(wY+#hi((nu?me7G_?tN;V zXBgFH;#49Nhj-yb23(tP3|Xu_^oN``!et|20BKW}?nNRlj|gQzvvOB);g0)J`PflD z?dEKTOi_mOl^`abz>zV|Q9M@K6I#v*Rd1lHf0x|A!~&r(OD!^wV&BOehV)blKO#XVkK9m7jhr;Bqb0r`B{x zBRE9kdU~B#uEd`v^{n`&!DmIiLj4Z8))8nrintu{+(VLgDL<1=$TS`6hf`~M)}QBt z?{o%LXNSf%lFN|E_CTi)#>ukP{3x}lgXko+Ov0Ezt$hoUobbV>3=PHTI3mb^dXsek z%Vt>K&N`%2gwZO4)fw444Ewe&3UpK|&<9}q>~uyCa|Jrwah4i5IS*%rkZS7VXQ^SC z0-?9DOi|4h=*6g_dw=w5tS`bD9sA6EY_I7(jq}uuc+1Z4Y3Dq(owg6>scoV2)HZi> zo?19Th3@tq2IGYD)WRM5Gi!!I>~5C&@ET}~3Cb|^U&HqA@w30YgvkoqlF&xDthMv6 zoQy}%guks|NXKh6wvM*>(9s8sZ{fiaYO+WZ`ZcUpeTgNdN!Ly-mv$@| zf%qr1a}l$SJE+rUe8wGQ?f(U3_5j=XA+?YFVh~k;l_xChZxqg!576y?JT+_+YPVgF zThsOpqx&fCbKdA^16I~pgxi~Fqd!~MK)Kj6>v?8jnT5MR?vL?kEyV?}A)PzOLh+;i z!SYiIxyeJ}7Aqv)IzQXwBbBipcIwVaZ6v)XU)78Zp$4<9oWE)LyDz#EesWyrU*C#{ z;8d5H6@8I2NJTa=u3Q#nF`vZ^eWrJ_vRo%6Ms%QTYOUctp(@Ma;~L?e=B-BvKD2zL z-|!wp=rw4E^unfho3cCxcU0;>!+QqBMGbE=lAGQG2&^}~pD4@W{&;$fvb^q5EJIen zXO_l=o{8gmaE_(xa(^@wy1Zz;bN~+p$7Ftn7V$o`)`<^rJ)MGy28b_n9)$=7*YIs&{|r&tkns)?lq9hS3UZt*dG zx*>d4o+2L>=2>2+S5VKu!(xfWxAB3)=c6z*IFks@W`NZj3Nt@Ejr}!A-f_0Q@f@^d zAA!*f3*A;x1)a|!2dWiXVnlLdtRXZBUPXM8k~0F*aXf&>C05IGoTtM5SWFt7&y^)# zN9jrRV?9w;;;czIYvukWa&5|_O}(Nah48E96Ih4*1B}(YUK;m{K7o_VDx>`Pd$)rV za(fw=WZ7;t8{RkjXhew#ms}Z6DoY>25G0oroH&HZ8LRg=RfT^Kf8Ybt_M<*Nz;KMk zny&TXw5riC=Ak|nJNqi8qimdZq+)z8dmNtut^_cStfpNVJ}VbC(MFTjLEpm0fv0kI zRiQ!)edT=2NN!DNgvna1^e4u$bexG+!#qzI@hz(D`Ks!TEo^AII=Oz+z1zpO;H`D< z0XR(iQ55@Z!E-9x+0=*R7nRk(zX3dn$xIFzEKz9L4NB!pXdPU#RJL8u-mX-xp&%XZ z!WRa?c~3y1SXF+Kx=*8Jyd>%7pnEq=ROHvg8pyqiVZ820R-Uo`u>ZaAta zmA7FKHtvK|uoyqIEvC~-N*@=->Pih?#bj;X29-5via)B-jBH>Ufe3*7^n*Dc-TWP^A8BV<}wHP z{^A070my3GL+@cyn1D@GFo$mUv%`kBH8cbUN%>K@Ig~iCu{U1DyN~Tu{5#??R-fIP zeL6UZET029HgYwkJ3tih0DO7t`~z}vbYop-iL~f_gFVS%UBeEp_uwgKpH6wo2>hVU z9N;-%1TN(ShEQn|_3m8owjo?_umf2#DA;&a`3YhPl^?d3==YLduDW-_rb$eZvx^4S z)K$vTYhgZ5lvlCO%%0fUD9_qteugEtV?23xDit4M+_9n+ul2C%7;}nTrx4=@A@}eV8!{NI1!6)gcZk#Vmpo8?AiubD}EX%7l6m5 zc$Von5DQlxuJ7QwLBqZ5E6NBPX0UpLo8d{SVS^@tnmA$Sk{RMD~I^ohcAioATGAPXWTp1A_a$qOPsy*u zbvdq~<8aBoK`?WC%7QB(`pjAjZ>bIBG395UB=bWL{WZbqFWvjOvUEHj-TPq&R_(I5 zmJJ@c6|ddUMZDin-XB?qf(CiJW&>xESH?)HA84@s9khL_}-;KBI!rnc9gRS*<^P@NU5l>yuORkji{bp#o-QHt=2}&ma zg^m<-Lraq`6F1FtgSND3-qVZTL{dz4TxbA)`Rfr`mIgW|+; z$_GHz;I;!sgc~KS^A!#l;gma#Ex`6o?8t*4SveO53)TC2XuQT6JAos`zk<~hZoqX% zK-Z}Ja`!%*{UK(PGWdmZO%CfoP~YgVEf#Bh7oT`xs(jM;37UaZLi~ZhOt4d*R@Z|Y z;BB!&K297D*2UzB@-R<-T(i?sn7gwns-2(W-Uo+VObIw-vPzlMz>2D@q80E6yAGN< z&0P}P%>hAp2X;|gDyp8HTu`mPfjjNhQ$oWmhMw85h z@k$TrKr&hy=gV1`cpvhC32CoV%%gix;`~ea;VPAM9y;q8K)DbTZ#_9PUS1*^*a)iR@v7N^Z9Pu4HHgIN?7!5PHvuRH_3*iV_R56I< zK9pyZ2NOXj`d+F0-U(9IPSc$2neqG-ToPJAM1UxTf9Ua@`hixqb&l zdLY+A5b1I)=6`V%t)!WflKF*xl$Cx|J^iQ~=|{r}zs3CTKeJOeWXityZ_#xwy|i>r z>2;a6PP$3E*}P59oHcXatZBi(U70gyXU?7$3eKE;-_?QsPBOnb#g8Y`rkC6snieeS zG10_xCh90V^S+YOc{AtC?x>lZt~!5};IN%j$e$$nS0!Vv1H*Us-1&ct0^r#0o{t$I z$~%Ao+1>L@*rVx32QPK^yjgzUSv{102bYyxuJe0n-`uZ>@;~n3`5l?!`QsS4-PP|J zE}qW;ndVM8tAFOo=a-;6yUSm7jmZDA9^QYX6^7$wDj@`A7{!bHjAhd03>UahX(pm-nT9*O313 z5s_YwQ`iCJIFZ>Y-91QWye-l>&F-3xzRwD(U#6pR%YROJUHb3j54ez$@f%QN%Ls#_ z?2NlWVX*$@)u0z6+y@j;obka_F63lv1nr0LbWqAS8Iy? zP2^h!ilLG5O;B`AM$Pv`x<^4FJZ0PsO3(X&((`|tBI*f&;xlA?AC%I47nGiVMTUEW z4ng?STSYrQ0Ht(CWcZJu^nAVy-zuN?0Yy3XpKlTGQ431%@hcf-GF%J_R?N^q>Af!l zrSe`X66tRPrT7mf3;Gr)^~)YfYeA{ppM!oI{qdZPuaMydGCU2G(tUKZX#bm_R89>j zl|Nt7Y4W)y!y{$*!<$6AR)bRd$3dwd=F9lg-xcu(K`H)mP^xbtD1I5=0Hya@f1^nE zOHfJ|1icdNz8RF#)nZ;4h42Q@T+rWweiiZm3VMypb^S`vix9SC_#seC^%?VJ_(z~= z2;U*Y`~9L{o&u%s{1_&QhgVKQhVAp5uOT4`LbmAYoOGg_s5F%n4lEy1xoGtxIoamB|V~w z_Phv6<;()5?=((^8z5g${f~oE|CGw`?LzLz_}OX>qNe7pj6%;Kq-DcD3v=_hOd(J0k3$U#?gY7gCf2C z>9wMqk3p&a87PeEdl8^SU35RDXedemN+98U1AZNiZ$) z*?$J5a<+p~xiz5F&kxA>3qdJgDk!!8t7rt#{pf^2pxZ$y{R^OjL05rZ0QxAX2Q*8D zzbc=5MA&WtC{p`A0HyQ|G8~iP-^uVZp!9xEfI<|{SOz)}v;q|M+4qA|IX@EN3{}#9 zk?|Rzl>Z{o^FbBRR8SA-AmnekTDAie;f$E1zmxILfb#l5`{VgCPzAI?Q2TyRUcZc= zBde2Bq{r2R$F@pOo>Big3m>Nhitp@t~Cc z+map}A-=~ZP`s!8Cr~Q)-$XbgEa|;6z8IA9YoO>~`&t?Q4H3@hE9t4LL^&UWQu@D0 zIvo`KV&5vC7m9Gk2uZ&t<1YZEd~Qj<_6^Bbpu|5Xvcpe!&Oi8H{ia(4$M5B_fmUOYCcSt%$(o9KRk{(7Sxa}R4bhV_5CA~w^F_LCV z3c~YUhs*=f7U%zI)@AsZe36M1M&CI9?{blR-YlQrCZ9JKQ;9BDi4zWpFzIBJ-!)x? z@0IymW&ZnQ*fm=`f6xif5#fbSc&-SCWw@^lFOlIvGHlE65E*`4hBIaONf{n4!=wY! z`;V02pUUuP87BW?dOk*me=Wl|$}s(3eglceW{CFvNrt~J!{k>=&wVmnC&Ty3@D2*2 z{MGl0{QI1+EdP)UuPqhN4}d6$bL<-5lwrpXRV%}e-Q+?AV!f8FuVe8)ewB<5bA7V;6$B!pnE;V9R893qsxIMAyM$@S zKw^3dB!;i)5+2YczpFTS|D3tgf_Kex70<^1#9new$*hvuL02&hq0>u4bMGm^1N?{O z;%3_PAK`u){`d0YAC?5~ocY5*$vyWV0TD_hZz*rb?abNocE+^XbFOg}&npSezVoi> zA``{Ail@(<7o0XbKvm(tFh>I16c-~daCdRwuDgqW7@Ag!42e-Qrp>$uMcgy<-VkM@ z22eoUp%7Ow+Bz*zGCMGno=dYVN-GK6ElQeRQd&CKRXpSV(wV^$S8>VwnRsg_-Hg(b zlIai3b`_VF%z&wQS}EnZ^TCo*w02g>tiap{T*dd#DZP8%U2{s2jo+5wW=8122l0;g z&&zQY-}ykWBrqpLok`IYLsi^A4+-wO4>$MY8j0xpM^cs?`ZIDA-O-h2> oxj|m)JeRNdYW)B4lH^EwjiktOXDDztHAGfS4Vzn1I?MHc0OpAVaR2}S diff --git a/tools/nauty25r9_mac/naututil-h.in b/tools/nauty25r9_mac/naututil-h.in deleted file mode 100644 index c618bdb..0000000 --- a/tools/nauty25r9_mac/naututil-h.in +++ /dev/null @@ -1,278 +0,0 @@ -/***************************************************************************** -* This is the header file for versions 2.5 of naututil.c and dreadnaut.c. * -* @configure_input@ -*****************************************************************************/ - -/* The parts between the ==== lines are modified by configure when -creating naututil.h out of naututil-h.in. If configure is not being -used, it is necessary to check they are correct. -====================================================================*/ - -/* Check whether various headers are available */ - -#define HAVE_ISATTY @have_isatty@ /* if isatty() is available */ -#define HAVE_TIMES @have_times@ /* if times() is available */ -#define HAVE_TIME @have_time@ /* if time() is available */ -#define HAVE_GETRUSAGE @have_getrusage@ /* if getrusage() is available */ -#define HAVE_GETTIMEOFDAY @have_gettimeofday@ /* if gettimeofday() */ - -/*==================================================================*/ - -/***************************************************************************** -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : changes for version 1.3 : * -* - added declarations of readinteger() and readstring() * -* - added definition of DEFEXT : default file-name * -* extension for dreadnaut input files * -* 28-Sep-88 : changes for version 1.4 : * -* - added support for PC Turbo C * -* 29-Nov-88 : - added getc macro for AZTEC C on MAC * -* 23-Mar-89 : changes for version 1.5 : * -* - added DREADVERSION macro * -* - added optional ANSI function prototypes * -* - changed file name to naututil.h * -* - moved ALLOCS to nauty.h and defined DYNALLOC * -* 25-Mar-89 : - added declaration of twopaths() * -* 29-Mar-89 : - added declaration of putmapping() * -* 4-Apr-89 : - added declarations of triples, quadruples, adjtriang * -* - only define ERRFILE if not in nauty.h * -* 25-Apr-89 : - added declarations of cellquads,distances,getbigcells * -* 26-Apr-89 : - added declarations of indsets,cliques,cellquins * -* - removed declarations of ptncode and equitable * -* 27-Apr-89 : - added declaration of putquotient * -* 18-Aug-89 : - added new arg to putset, and changed mathon * -* 2-Mar-90 : - added declarations of celltrips, cellcliq, cellind * -* - changed declarations to use EXTPROC * -* 12-Mar-90 : - added changes for Cray version * -* 20-Mar-90 : - added changes for THINK version * -* 27-Mar-90 : - split SYS_MSDOS into SYS_PCMS4 and SYS_PCMS5 * -* 13-Oct-90 : changes for version 1.6 : * -* - changed CPUTIME to use HZ on Unix for times() * -* 14-Oct-90 : - added SYS_APOLLO variant * -* 19-Oct-90 : - changed CPUTIME defs for BSDUNIX to avoid conficting * -* declarations of size_t and ptrdiff_t in gcc * -* 27-Aug-92 : changes for version 1.7 : * -* - added SYS_IBMC variant * -* - removed workaround for bad gcc installation * -* 5-Jun-93 : changes for version 1.8 : * -* - changed CRAY version of CPUTIME to use CLK_TCK * -* if HZ could not be found (making 1.7+) * -* 30-Jul-93 : - added SYS_ALPHA variant * -* 17-Sep-93 : changes for version 1.9 : * -* - declared adjacencies() * -* 24-Feb-94 : changes for version 1.10 : * -* - added version SYS_AMIGAAZT (making 1.9+) * -* 19-Apr-95 : - added C++ prototype wrapper * -* 6-Mar-96 : - added SYS_ALPHA32 code * -* 23-Jul-96 : changes for version 2.0 : * -* - changed readstring() declaration * -* - removed DYNALLOC definition * -* - added sublabel() definition * -* 15-Aug-96 : - added sethash() definition * -* 30-Aug-96 : - added KRAN and D. Knuth routines * -* 16-Sep-96 : - fixed the above! * -* 7-Feb-96 : - declared nautinv_null() and setnbhd() * -* 4-Sep-97 : - arg of time() is type time_t*, was long* * -* 22-Sep-97 : - defined fileno() and time_t for SYS_PCTURBO * -* 10-Dec-97 : - revised KRAN for new rng.c from Knuth * -* 18-Feb-98 : - changed time() to time_t for Unix * -* 21-Oct-98 : - changed short to shortish as needed * -* 9-Jan-00 : - declared nautinv_check() and naututil_check() * -* 16-Nov-00 : - applied changes logged in nauty.h * -* 22-Apr-01 : changes for version 2.1 : * -* - prototypes for nautinv.c are now in nautinv.h * -* - CPUTIME for UNIX uses CLK_TCK (needs revision!) * -* 2-Jun-01 : - prototype for converse() * -* 18-Oct-01 : - complete revision; sysdeps in separate files * -* 28-Aug-02 : changes for version 2.2 : * -* - revised for autoconf * -* 17-Nov-02 : added explicit "extern" where it was implicit before * -* 11-Apr-02 : added rangraph2() * -* 10-Sep-07 : Define CPUTIME=0.0 for hosts that don't provide it * -* 4-Nov-09 : added readgraph_sg(), putgraph_sg(), putcanon_sg() * -* 10-Nov-09 : removed types shortish and permutation * -* 14-Nov-09 : added relabel_sg(), copy_sg(), putdegs_sg(), * -* sublabel_sg() * -* 19-Nov-09 : added individualise() * -* 20-Nov-09 : added hashgraph_sg(), listhash(), hashgraph() * -* 19-Dec-09 : added ranreg(), rangraph2_sg() * -* 5-Jun-10 : added mathon_sg() and converse_sg() * -* 10-Jun-10 : added putquotient_sg() and complement_sg() * -* 15-Jan-12 : added TLS_ATTR to static declarations * -* 3-Mar-12 : added putorbitsplus() and putset_firstbold() * -* 17-Mar-12 : include naurng.h and remove redundant lines * -* * -* @edit_msg@ -* * -*****************************************************************************/ - -#include "nauty.h" /* which includes stdio.h */ -#include "nausparse.h" -#include "naurng.h" -/* At this point we can assume that , , , - , or and if necessary have - been included if they exist. */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void complement(graph*,int,int); -extern void converse(graph*,int,int); -extern void converse_sg(sparsegraph*, sparsegraph*); -extern void copycomment(FILE*,FILE*,int); -extern void complement_sg(sparsegraph*, sparsegraph*); -extern void flushline(FILE*); -extern void fixit(int*,int*,int*,int,int); -extern int getint(FILE*); -extern long hash(set*,long,int); -extern long hashgraph(graph*,int,int,long); -extern long hashgraph_sg(sparsegraph*,long); -extern void individualise(int*,int*,int,int,int*,int*,int); -extern long listhash(int*,int,long); -extern void mathon(graph*,int,int,graph*,int,int); -extern void mathon_sg(sparsegraph*,sparsegraph*); -extern void naututil_check(int,int,int,int); -extern void naututil_freedyn(void); -extern void putcanon(FILE*,int*,graph*,int,int,int); -extern void putcanon_sg(FILE*,int*,sparsegraph*,int); -extern void putdegs(FILE*,graph*,int,int,int); -extern void putdegs_sg(FILE*,sparsegraph*,int); -extern void putgraph(FILE*,graph*,int,int,int); -extern void putgraph_sg(FILE*,sparsegraph*,int); -extern void putmapping(FILE*,int*,int,int*,int,int,int); -extern void putorbits(FILE*,int*,int,int); -extern void putorbitsplus(FILE*,int*,int,int); -extern void putptn(FILE*,int*,int*,int,int,int); -extern void putquotient(FILE*,graph*,int*,int*,int,int,int,int); -extern void putquotient_sg(FILE*,sparsegraph*,int*,int*,int,int); -extern void putset(FILE*,set*,int*,int,int,boolean); -extern void putset_firstbold(FILE*,set*,int*,int,int,boolean); -extern void rangraph(graph*,boolean,int,int,int); -extern void rangraph2(graph*,boolean,int,int,int,int); -extern void rangraph2_sg(sparsegraph*,boolean,int,int,int); -extern void ranreg_sg(sparsegraph *sg, int degree, int n); -extern void ranperm(int*,int); -extern void readgraph(FILE*,graph*,boolean,boolean,boolean,int,int,int); -extern void readgraph_sg(FILE*,sparsegraph*,boolean,boolean,int,int); -extern boolean readinteger(FILE*,int*); -extern void readperm(FILE*,int*,boolean,int); -extern void readptn(FILE*,int*,int*,int*,boolean,int); -extern void readvperm(FILE*,int*,boolean,int,int*); -extern boolean readstring(FILE*,char*,int); -extern void relabel(graph*,int*,int*,graph*,int,int); -extern void relabel_sg(sparsegraph*,int*,int*,sparsegraph*); -extern long sethash(set*,int,long,int); -extern int setinter(set*,set*,int); -extern int setsize(set*,int); -extern void sublabel(graph*,int*,int,graph*,int,int); -extern void sublabel_sg(sparsegraph*,int*,int,sparsegraph*); -extern void unitptn(int*,int*,int*,int); - -#ifdef __cplusplus -} -#endif - -#define MAXREG 8 /* Used to limit ranreg_sg() degree */ - -#define PROMPTFILE stdout /* where to write prompts */ -#ifndef ERRFILE -#define ERRFILE stderr /* where to write error messages */ -#endif -#define MAXIFILES 10 /* how many input files can be open at once */ -#define EXIT exit(0) /* how to stop normally */ -#define DEFEXT ".dre" /* extension for dreadnaut files */ - -/************************************************************************* - The following macros may represent differences between system. This - file contains the UNIX/POSIX editions. For other systems, a separate - file of definitions is read in first. That file should define the - variables NAUTY_*_DEFINED for sections that are to replace the UNIX - versions. See the provided examples for more details. - - If your system does not have a predefined macro you can use to cause - a definitions file to be read, you have to make up one and arrange for - it to be defined when this file is read. - - The system-dependent files can also redefine the macros just ahead of - this comment. -**************************************************************************/ - -#ifdef __weirdmachine__ -#include "weird.h" /* Some weird machine (ILLUSTRATION ONLY) */ -#endif - -/*************************************************************************/ - -#ifndef NAUTY_PROMPT_DEFINED -#if HAVE_ISATTY -#define DOPROMPT(fp) (isatty(fileno(fp)) && isatty(fileno(PROMPTFILE))) -#else -#define DOPROMPT(fp) (curfile==0) -#endif -#endif /*NAUTY_PROMPT_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_OPEN_DEFINED -#define OPENOUT(fp,name,append) fp = fopen(name,(append)?"a":"w") -#endif /*NAUTY_OPEN_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_CPU_DEFINED -#if HAVE_TIMES -#include -#define CPUDEFS static TLS_ATTR struct tms timebuffer; -#ifndef CLK_TCK -#include -#endif -#if !defined(CLK_TCK) && defined(_SC_CLK_TCK) -#define CLK_TCK sysconf(_SC_CLK_TCK) -#endif -#ifndef CLK_TCK -#define CLK_TCK 60 -#endif -#define CPUTIME (times(&timebuffer),\ - (double)(timebuffer.tms_utime + timebuffer.tms_stime) / CLK_TCK) -#else -#if HAVE_GETRUSAGE -#include -#include -#define CPUDEFS struct rusage ruse; -#define CPUTIME (getrusage(RUSAGE_SELF,&ruse),\ - ruse.ru_utime.tv_sec + ruse.ru_stime.tv_sec + \ - 1e-6 * (ruse.ru_utime.tv_usec + ruse.ru_stime.tv_usec)) -#endif -#endif - -#ifndef CPUTIME -#define CPUTIME 0.0 -#endif - -#endif /*NAUTY_CPU_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_SEED_DEFINED -#if HAVE_GETTIMEOFDAY -#include -#define INITSEED \ -{struct timeval nauty_tv; \ - struct timezone nauty_tz; \ - gettimeofday(&nauty_tv,&nauty_tz); \ - seed = ((nauty_tv.tv_sec<<10) + (nauty_tv.tv_usec>>10)) & 0x7FFFFFFFL;} -#else -#if HAVE_TIME -#include -#define INITSEED seed = ((time((time_t*)NULL)<<1) | 1) & 0x7FFFFFFFL -#endif -#endif -#endif /*NAUTY_SEED_DEFINED*/ - -/* @edit_msg@ */ diff --git a/tools/nauty25r9_mac/naututil.c b/tools/nauty25r9_mac/naututil.c deleted file mode 100644 index 34ef062..0000000 --- a/tools/nauty25r9_mac/naututil.c +++ /dev/null @@ -1,2714 +0,0 @@ -/***************************************************************************** -* * -* miscellaneous utilities for use with nauty 2.5. * -* None of these procedures are needed by nauty, but all are by dreadnaut. * -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : changes made for version 1.3 : * -* - added procedures readinteger() and readstring() * -* - replaced all uses of fscanf() by appropriate uses * -* of readinteger() or readstring() * -* - "N:" is now illegal in readgraph() if N is too large * -* or too small * -* 28-Sep-88 : renamed to version 1.4 (no changes to this file) * -* 23-Mar-89 : changes for version 1.5 : * -* - declared key in hash() * -* - changed file name to naututil.c * -* 29-Mar-89 : - declared workperm[] and workset[], and modified * -* many routines to use them. * -* - added putmapping() * -* - reworked some code in mathon() and rangraph() * -* 3-Apr-89 : - changed putorbits() to use O(n) algorithm * -* 5-Apr-89 : - modifed readgraph() to not require fresh line * -* - changed MAKEEMPTY uses to EMPTYSET uses * -* 26-Apr-89 : - moved ptncode() and equitable() to nautaux.c * -* - added putquotient() * -* 18-Aug-89 : - modified putset() to use "i:j" syntax optionally * -* - modified putorbits() to use putset() * -* - modified calling sequence for mathon() * -* 19-Aug-90 : - changed delimeter arg of copycomment to int * -* 14-Oct-90 : renamed to version 1.6 (no changes to this file) * -* 23-Jan-91 : changes for version 1.7 : * -* - fixed bug in complement() * -* 27-Aug-92 : - made linelength <= 0 mean no line breaks * -* 5-Jun-93 : renamed to version 1.7+ (no changes to this file) * -* 18-Aug-93 : renamed to version 1.8 (no changes to this file) * -* 17-Sep-93 : renamed to version 1.9 (no changes to this file) * -* 13-Jul-96 : changes for version 2.0 : * -* - added dynamic allocation * -* - added limit parameter to readstring * -* - added readvperm() and sublabel() * -* 31-Aug-96 : - converted from RAN to KRAN * -* 6-Feb-97 : - corrected DYNALLOC1 call in putmapping * -* 10-Dec-97 : - KRAN now initialises automatically * -* 9-Jan-00 : - added naututil_check() * -* 12-Feb-00 : - some minor code formatting * -* 16-Nov-00 : - changes as listed in nauty.h * -* 23-Apr-01 : changes for version 2.1 : * -* - removed EXTDEFS * -* 2-Jun-01 : - added converse() * -* 21-Nov-01 : use NAUTYREQUIRED in naututil_check() * -* 11-Apr-03 : changes for version 2.2 : * -* - added rangraph2() * -* 17-Nov-03 : changed INFINITY to NAUTY_INFINITY * -* 10-Dec-06 : removed BIGNAUTY * -* 4-Nov-09 : added readgraph_sg, putgraph_sg, putcanon_sg * -* 10-Nov-09 : removed shortish and permutation types * -* 14-Nov-09 : added relabel_sg(), putdegs_sg(), sublabel_sg() * -* 19-Nov-09 : added individualise() * -* 20-Nov-09 : added hashgraph_sg(), listhash(), hashgraph() * -* 19-Dec-09 : added ranreg_sg(), rangraph2_sg() * -* 21-May-10 : conform to type changes in sparsegraph * -* 5-Jun-10 : add mathon_sg() * -* 10-Jun-10 : add putquotient_sg() and complement_sg() * -* 26-Jan-11 : fix nde error in sublabel_sg() * -* 15-Jan-12 : add TLS_ATTR attributes * -* 3-Mar-12 : add putorbitsplus() and putset_firstbold() * -* : write orbit sizes if not trivial * -* 17-Mar-12 : move seed definition to naututil.h * -* 20-Sep-12 : allow quoted strings in readstring() * -* 20-Sep-12 : the first argument of ungetc is int, not char * -* * -*****************************************************************************/ - -#define ONE_WORD_SETS -#include "naututil.h" /* which includes nauty.h, nautinv.h and stdio.h */ -#include "nausparse.h" - -#if MAXM==1 -#define M 1 -#else -#define M m -#endif - -#if !MAXN -DYNALLSTAT(int,workperm,workperm_sz); -DYNALLSTAT(set,workset,workset_sz); -#else -static TLS_ATTR int workperm[MAXN+2]; /* used for scratch purposes */ -static TLS_ATTR set workset[MAXM]; /* used for scratch purposes */ -#endif - -#define ECHUNKSIZE 1000 /* should be even */ -typedef struct echunk {struct echunk *next; int edge[2*ECHUNKSIZE];} echunk; -static TLS_ATTR echunk first_echunk = {NULL,{0}}; - -#ifdef NLMAP -#define GETNW(c,f) do c = getc(f); while (c==' '||c=='\t') -#define GETNWC(c,f) do c = getc(f); while (c==' '||c==','||c=='\t') -#define GETNWL(c,f) do c = getc(f); while (c==' '||c=='\n'||c=='\t') -#else -#define GETNW(c,f) do c = getc(f); while (c==' '||c=='\t'||c=='\r') -#define GETNWC(c,f) do c = getc(f); while (c==' '||c==','||c=='\t'||c=='\r') -#define GETNWL(c,f) do c = getc(f); while (c==' '||c=='\n'||c=='\t'||c=='\r') -#endif - -#define ISDIGIT(c) ((c) >= '0' && (c) <= '9') - -static const long fuzz1[] = {1984625421L, 971524688L,1175081625L, 377165387L}; -static const long fuzz2[] = {2001381726L,1615243355L, 191176436L,1212176501L}; -#define FUZZ1(x) ((x) ^ fuzz1[(x)&3L]) -#define FUZZ2(x) ((x) ^ fuzz2[(x)&3L]) - - -/***************************************************************************** -* * -* setinter(set1,set2,m) = the number of elements in the intersection of * -* the sets set1 and set2. * -* * -*****************************************************************************/ - -int -setinter(set *set1, set *set2, int m) -{ - setword x; - -#if MAXM==1 - if ((x = *set1 & *set2) != 0) return POPCOUNT(x); - else return 0; -#else - int count,i; - - count = 0; - for (i = m; --i >= 0;) - if ((x = (*set1++) & (*set2++)) != 0) count += POPCOUNT(x); - - return count; -#endif -} - -/***************************************************************************** -* * -* setsize(set1,m) = the number of elements in the set set1. * -* * -*****************************************************************************/ - -int -setsize(set *set1, int m) -{ - -#if MAXM==1 - if (set1 != 0) return POPCOUNT(*set1); - else return 0; -#else - int count,i; - setword x; - - count = 0; - for (i = m; --i >= 0;) - if ((x = *set1++) != 0) count += POPCOUNT(x); - - return count; -#endif -} - -/***************************************************************************** -* * -* flushline(f) reads from f until '\n' or EOF. * -* If non-trivial characters are skipped, the user is informed. * -* * -*****************************************************************************/ - -void -flushline(FILE *f) -{ - boolean msg; - int c; - - msg = FALSE; - - while ((c = getc(f)) != EOF && c != '\n') - if (msg) - PUTC((char)c,ERRFILE); - else if (c != ' ' && c != '\t' && c != '\f' && - c != '\r' && c != ',') - { - msg = TRUE; - fprintf(ERRFILE,"input skipped : '%c",(char)c); - } - if (msg) fprintf(ERRFILE,"'\n\n"); -} - -/***************************************************************************** -* * -* readinteger(f,&i) reads an optionally-signed integer from f, preceded by * -* any amount of white space. The function value returned is TRUE if an * -* integer was found, FALSE otherwise. * -* * -*****************************************************************************/ - -boolean -readinteger(FILE *f, int *p) -{ - int c,ans,minus; - - GETNWL(c,f); - if (!ISDIGIT(c) && c != '-' && c != '+') - { - if (c != EOF) ungetc(c,f); - return FALSE; - } - - minus = c == '-'; - ans = (c == '-' || c == '+' ? 0 : c - '0'); - - c = getc(f); - while (ISDIGIT(c)) - { - ans *= 10; - ans += c - '0'; - c = getc(f); - } - - if (c != EOF) ungetc(c,f); - - *p = (minus ? -ans : ans); - return TRUE; -} - -/***************************************************************************** -* * -* readstring(f,s,slen) reads a string from f. First any amount of white * -* space is skipped (including newlines). If the next character is a * -* double-quote, everything after that before the next double-quote or * -* newline is put into s. If the next character is not a double-quote, * -* everything before the next white space is put into s. A nul is added, * -* but no more than slen characters are ever put into s. The function * -* value is TRUE if a string was found and FALSE otherwise. * -* * -*****************************************************************************/ - -boolean -readstring(FILE *f, char *s, int slen) -{ - int c; - char *slim; - - slim = s + slen - 1; - GETNWL(c,f); - if (c == EOF) - { - *s = '\0'; - return FALSE; - } - - if (c == '"') - { - c = getc(f); - while (c != '"' && c != '\n' && c != '\r' && c != EOF) - { - if (s <= slim) *s++ = c; - c = getc(f); - } - if (c != '"' && c != EOF) ungetc(c,f); - } - else - { - if (s <= slim) *s++ = c; - c = getc(f); - while (c != ' ' && c != '\n' && c != '\t' && c != '\r' && c != EOF) - { - if (s <= slim) *s++ = c; - c = getc(f); - } - if (c != EOF) ungetc(c,f); - } - if (s <= slim) *s = '\0'; - else *slim = '\0'; - - return TRUE; -} - -/***************************************************************************** -* * -* getint(f) reads an integer from f, optionally preceded by '=' * -* and white space. -1 is returned if the attempt was unsuccessful. * -* * -*****************************************************************************/ - -int -getint(FILE *f) -{ - int i,c; - - GETNWL(c,f); - if (c != '=') ungetc(c,f); - - if (readinteger(f,&i)) return i; - else return -1; -} - -/***************************************************************************** -* * -* putset(f,set1,curlenp,linelength,m,compress) writes the set set1 to * -* file f using at most linelength characters per line (excluding '\n'). * -* A value of linelength <= 0 dictates no line breaks at all. * -* *curlenp is the number of characters on the line so far; it is updated. * -* A range j1,j1+1,...,j2 for j2-j1>=2 is written as "j1:j2" if compress * -* is nonzero (eg. TRUE); otherwise each element is written separately. * -* No final '\n' is written. labelorg is used. * -* * -* FUNCTIONS CALLED: nextelement(),itos() * -* * -*****************************************************************************/ - -void -putset(FILE *f, set *set1, int *curlenp, int linelength, - int m, boolean compress) -{ - int slen,j1,j2; - char s[40]; - - j1 = -1; - while ((j1 = nextelement(set1,m,j1)) >= 0) - { - j2 = j1; - if (compress) - { - while (nextelement(set1,m,j2) == j2 + 1) ++j2; - if (j2 == j1+1) j2 = j1; - } - slen = itos(j1+labelorg,s); - if (j2 >= j1 + 2) - { - s[slen] = ':'; - slen += 1 + itos(j2+labelorg,&s[slen+1]); - } - - if (linelength > 0 && *curlenp + slen + 1 >= linelength) - { - fprintf(f,"\n "); - *curlenp = 3; - } - fprintf(f," %s",s); - *curlenp += slen + 1; - j1 = j2; - } -} - -/***************************************************************************** -* * -* putset_firstbold(f,set1,curlenp,linelength,m,compress) is the same as * -* putset(f,set1,curlenp,linelength,m,compress) except that the first * -* element of the set is written bold. This is only useful when output is * -* to a device that interprets ANSI control sequences. * -* * -* FUNCTIONS CALLED: nextelement(),itos() * -* * -*****************************************************************************/ - -void -putset_firstbold(FILE *f, set *set1, int *curlenp, int linelength, - int m, boolean compress) -{ - int slen,slen1,j1,j2; - char s[50],c; - boolean bold; - - bold = TRUE; - j1 = -1; - while ((j1 = nextelement(set1,m,j1)) >= 0) - { - j2 = j1; - if (compress) - { - while (nextelement(set1,m,j2) == j2 + 1) ++j2; - if (j2 == j1+1) j2 = j1; - } - slen1 = slen = itos(j1+labelorg,s); - if (j2 >= j1 + 2) - { - s[slen] = ':'; - slen += 1 + itos(j2+labelorg,&s[slen+1]); - } - c = s[slen1]; - - if (linelength > 0 && *curlenp + slen + 1 >= linelength) - { - fprintf(f,"\n "); - *curlenp = 3; - } - if (bold) - { - s[slen1] = '\0'; - fprintf(f," \033[1m%s\033[0m",s); - s[slen1] = c; - fprintf(f,"%s",&s[slen1]); - bold = FALSE; - } - else - fprintf(f," %s",s); - - *curlenp += slen + 1; - j1 = j2; - } -} - -/***************************************************************************** -* * -* readgraph(f,g,digraph,prompt,edit,linelength,m,n) reads a graph g from f. * -* Commands: (There is always a "current vertex" v, initially labelorg; * -* n is an unsigned integer.) * -* n : add edge (v,n) * -* -n : delete edge (v,n) * -* n: : set v := n, and exit if v >= n. * -* ? : type neighbours of vertex v * -* ; : increment v, and exit if v >= n. * -* . : exit * -* ! : skip rest of input line * -* * -* If digraph==FALSE, loops are illegal and (x,y) => (y,x) * -* If edit==FALSE, the graph is initialized to empty. * -* If prompt==TRUE, prompts are written to PROMPTFILE. * -* linelength is a limit on the number of characters per line caused by '?' * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED : putset() * -* * -*****************************************************************************/ - -void -readgraph(FILE *f, graph *g, boolean digraph, boolean prompt, - boolean edit, int linelength, int m, int n) -{ - int v,c; - int curlen,w; - graph *gv; - boolean neg; - - if (!edit) - for (v = 0, gv = g; v < n; ++v, gv += M) EMPTYSET(gv,m); - - v = 0; - gv = g; - neg = FALSE; - - while (TRUE) - { - GETNWC(c,f); - if (ISDIGIT(c)) - { - ungetc(c,f); - readinteger(f,&w); - w -= labelorg; - if (neg) - { - neg = FALSE; - if (w < 0 || w >= n || (!digraph && w == v)) - fprintf(ERRFILE,"illegal edge (%d,%d) ignored\n\n", - v+labelorg,w+labelorg); - else - { - DELELEMENT(gv,w); - if (!digraph) DELELEMENT(GRAPHROW(g,w,M),v); - } - } - else - { - GETNWC(c,f); - if (c == ':') - if (w < 0 || w >= n) - fprintf(ERRFILE, - "illegal vertex number %d ignored\n\n", - w+labelorg); - else - { - v = w; - gv = GRAPHROW(g,v,M); - } - else - { - ungetc(c,f); - if (w < 0 || w >= n || (!digraph && w == v)) - fprintf(ERRFILE,"illegal edge (%d,%d) ignored\n\n", - v+labelorg,w+labelorg); - else - { - ADDELEMENT(gv,w); - if (!digraph) ADDELEMENT(GRAPHROW(g,w,M),v); - } - } - } - } - else switch(c) - { - case ';': - neg = FALSE; - ++v; - if (v >= n) return; - gv = GRAPHROW(g,v,M); - break; - case '?': - neg = FALSE; - fprintf(PROMPTFILE,"%2d : ",v+labelorg); - curlen = 5; - putset(PROMPTFILE,gv,&curlen,linelength,M,FALSE); - fprintf(PROMPTFILE,";\n"); - break; - case '\n': - neg = FALSE; - if (prompt) fprintf(PROMPTFILE,"%2d : ",v+labelorg); - break; - case EOF: - case '.': - return; - case '-': - neg = TRUE; - break; - case '!': - do - c = getc(f); - while (c != '\n' && c != EOF); - if (c == '\n') ungetc(c,f); - break; - default : - fprintf(ERRFILE,"illegal char '%c' - use '.' to exit\n\n", - (char)c); - } - } -} - -/**************************************************************************/ - -void -ranreg_sg(sparsegraph *sg, int degree, int n) -/* Make a random regular simple undirected graph. - * For MAXN!=0, the maximum degree is MAXREG. - * sg must be initialised - */ -{ - long i,k,v,w; - boolean ok; - int *dd,*ee; - size_t *vv,nde,j; - -#if MAXN - int p[MAXREG*MAXN]; -#else - DYNALLSTAT(int,p,p_sz); - - DYNALLOC2(int,p,p_sz,degree,n,"genrang"); -#endif - - nde = (size_t)n * (size_t)degree; - - SG_ALLOC(*sg,n,nde,"ranreg_sg"); - SG_VDE(sg,vv,dd,ee); - if (sg->w) - { - FREES(sg->w); - sg->w = NULL; - sg->wlen = 0; - } - - sg->nv = n; - sg->nde = nde; - - for (i = j = 0; i < n; ++i) - for (k = 0; k < degree; ++k) p[j++] = i; - - for (i = 0; i < n; ++i) vv[i] = i*(size_t)degree; - - do - { - ok = TRUE; - - for (j = nde; j > 0; j -= 2) - { - i = KRAN(j-1); - k = p[i]; - if (k == p[j-1]) break; - p[i] = p[j-2]; p[j-2] = k; - } - if (j > 0) { ok = FALSE; continue; } - - for (i = 0; i < n; ++i) dd[i] = 0; - - for (j = nde; j > 0; ) - { - v = p[--j]; - w = p[--j]; - if (v != w) - { - for (i = dd[w]; --i >= 0;) if (ee[vv[w]+i] == v) break; - if (i >= 0) { ok = FALSE; break; } - } - ee[vv[w]+(dd[w]++)] = v; - ee[vv[v]+(dd[v]++)] = w; - } - } - while (!ok); -} - -/***************************************************************************** -* * -* readgraph_sg(f,sg,digraph,prompt,linelength,n) reads a graph g from f. * -* Commands: (There is always a "current vertex" v, initially labelorg; * -* n is an unsigned integer.) * -* n : add edge (v,n) * -* -n : delete edge (v,n) * -* n: : set v := n, and exit if v >= n. * -* ? : type neighbours of vertex v ** NOT IMPLEMENTED ** * -* ; : increment v, and exit if v >= n. * -* . : exit * -* ! : skip rest of input line * -* sg must be initialised * -* * -* If digraph==FALSE, loops are illegal and (x,y) => (y,x) * -* If prompt==TRUE, prompts are written to PROMPTFILE. * -* linelength is a limit on the number of characters per line caused by '?' * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -*****************************************************************************/ - -void -readgraph_sg(FILE *f, sparsegraph *sg, boolean digraph, boolean prompt, - int linelength, int n) -{ - int i,j,k,vv,ww,c; - boolean neg,done; - int *d,*e,*evi; - echunk *ec,*ecnext,*ec_end; - size_t ned,*v,iec,iec_end; - - sg->nv = n; - DYNALLOC1(size_t,sg->v,sg->vlen,n,"malloc"); - DYNALLOC1(int,sg->d,sg->dlen,n,"malloc"); - if (sg->w) - { - FREES(sg->w); - sg->w = NULL; - sg->wlen = 0; - } - v = sg->v; - d = sg->d; - - for (i = 0; i < n; ++i) d[i] = 0; - - ec = &first_echunk; - iec = 0; - vv = 0; - neg = done = FALSE; - - while (!done) - { - GETNWC(c,f); - if (ISDIGIT(c)) - { - ungetc(c,f); - readinteger(f,&ww); - ww -= labelorg; - if (neg) - { - neg = FALSE; - if (ww < 0 || ww >= n || (!digraph && ww == vv)) - fprintf(ERRFILE,"illegal edge (%d,%d) ignored\n\n", - vv+labelorg,ww+labelorg); - else - { - if (iec == ECHUNKSIZE) - { - if (!ec->next) - { - ecnext = (echunk*)ALLOCS(1,sizeof(echunk)); - if (!ecnext) alloc_error("malloc"); - ecnext->next = NULL; - ec->next = ecnext; - } - ec = ec->next; - iec = 0; - } - ec->edge[iec++] = vv; - ec->edge[iec++] = -1 - ww; - ++d[vv]; - if (!digraph && ww != vv) ++d[ww]; - } - } - else - { - GETNWC(c,f); - if (c == ':') - { - if (ww < 0 || ww >= n) - fprintf(ERRFILE, - "illegal vertex number %d ignored\n\n", - ww+labelorg); - else - vv = ww; - } - else - { - ungetc(c,f); - if (ww < 0 || ww >= n || (!digraph && ww == vv)) - fprintf(ERRFILE,"illegal edge (%d,%d) ignored\n\n", - vv+labelorg,ww+labelorg); - else - { - if (iec == ECHUNKSIZE) - { - if (!ec->next) - { - ecnext = (echunk*)ALLOCS(1,sizeof(echunk)); - if (!ecnext) alloc_error("malloc"); - ecnext->next = NULL; - ec->next = ecnext; - } - ec = ec->next; - iec = 0; - } - ec->edge[iec++] = vv; - ec->edge[iec++] = ww; - ++d[vv]; - if (!digraph && ww != vv) ++d[ww]; - } - } - } - } - else switch(c) - { - case ';': - neg = FALSE; - ++vv; - if (vv >= n) done = TRUE; - break; - case '?': - neg = FALSE; - fprintf(ERRFILE,"Command \'?\' not implemented.\n\n"); - break; - case '\n': - neg = FALSE; - if (prompt) fprintf(PROMPTFILE,"%2d : ",vv+labelorg); - break; - case EOF: - case '.': - done = TRUE; - break; - case '-': - neg = TRUE; - break; - case '!': - do - c = getc(f); - while (c != '\n' && c != EOF); - if (c == '\n') ungetc(c,f); - break; - default : - fprintf(ERRFILE,"illegal char '%c' - use '.' to exit\n\n", - (char)c); - } - } - - ned = 0; - for (i = 0; i < n; ++i) ned += d[i]; - DYNALLOC1(int,sg->e,sg->elen,ned,"malloc"); - e = sg->e; - - v[0] = 0; - for (i = 1; i < n; ++i) v[i] = v[i-1] + d[i-1]; - for (i = 0; i < n; ++i) d[i] = 0; - - iec_end = iec; - ec_end = ec; - - iec = 0; - ec = &first_echunk; - - if (ned != 0) while (TRUE) - { - vv = ec->edge[iec++]; - ww = ec->edge[iec++]; - - if (ww >= 0) - { - e[v[vv]+(d[vv]++)] = ww; - if (!digraph && ww != vv) e[v[ww] +(d[ww]++)] = vv; - } - else - { - ww = -1 - ww; - for (i = 0; i < d[vv]; ++i) - if (e[v[vv]+i] == ww) break; - if (i < d[vv]) - { - e[v[vv]+i] = e[v[vv]+d[vv]-1]; - --d[vv]; - } - if (!digraph && ww != vv) - { - for (i = 0; i < d[ww]; ++i) - if (e[v[ww]+i] == vv) break; - if (i < d[ww]) - { - e[v[ww]+i] = e[v[ww]+d[ww]-1]; - --d[ww]; - } - } - } - if (iec == iec_end && ec == ec_end) break; - if (iec == ECHUNKSIZE) { iec = 0; ec = ec->next; } - } - - sortlists_sg(sg); - - ned = 0; - for (i = 0; i < n; ++i) - { - if (d[i] > 1) - { - evi = e + v[i]; - j = 1; - for (k = 1; k < d[i]; ++k) - if (evi[k] != evi[j-1]) evi[j++] = evi[k]; - d[i] = j; - } - ned += d[i]; - } - sg->nde = ned; -} - -/***************************************************************************** -* * -* putgraph(f,g,linelength,m,n) writes a list of the edges of g to f * -* using at most linelength characters per line (excluding '\n'). * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED: putset() * -* * -*****************************************************************************/ - -void -putgraph(FILE *f, graph *g, int linelength, int m, int n) -{ - int i,curlen; - set *pg; - - for (i = 0, pg = g; i < n; ++i, pg += M) - { - fprintf(f,"%3d : ",i+labelorg); - curlen = 7; - putset(f,pg,&curlen,linelength,M,FALSE); - fprintf(f,";\n"); - } -} - -/***************************************************************************** -* * -* putgraph_sg(f,sg,linelength,m,n) writes a list of the edges of g to f * -* using at most linelength characters per line (excluding '\n'). * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -*****************************************************************************/ - -void -putgraph_sg(FILE *f, sparsegraph *sg, int linelength) -{ - int i,n,curlen,slen; - int *d,*e; - size_t *v,j; - char s[60]; - - n = sg->nv; - SG_VDE(sg,v,d,e); - - for (i = 0; i < n; ++i) - { - fprintf(f,"%3d : ",i+labelorg); - curlen = 7; - - for (j = v[i]; j < v[i]+d[i]; ++j) - { - slen = itos(e[j]+labelorg,s); - if (linelength > 0 && curlen + slen + 1 > linelength) - { - putstring(f,"\n "); - curlen = 2; - } - PUTC(' ',f); - putstring(f,s); - curlen += slen + 1; - } - putstring(f,";\n"); - } -} - -/***************************************************************************** -* * -* putmapping(f,lab1,org1,lab2,org2,linelength,n) writes n pairs * -* (lab1[i]+org1)-(lab2[i]+org2) to file f in increasing order of lab1[i]. * -* lab1 and lab2 are assumed to be permutations. At most linelength * -* characters (excluding '\n') are written per line. * -* A value of linelength <= 0 dictates no line breaks at all. * -* * -* FUNCTIONS CALLED: itos(),putstring() * -* * -*****************************************************************************/ - -void -putmapping(FILE *f, int *lab1, int org1,int *lab2, int org2, - int linelength, int n) -{ - int i,curlen,slen; - char s[60]; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putmapping"); -#endif - - for (i = 0; i < n; ++i) workperm[lab1[i]] = lab2[i]; - - curlen = 0; - for (i = 0; i < n; ++i) - { - slen = itos(i+org1,s); - s[slen++] = '-'; - slen += itos(workperm[i]+org2,&s[slen]); - if (linelength > 0 && curlen + slen + 1 > linelength) - { - putstring(f,"\n "); - curlen = 2; - } - PUTC(' ',f); - putstring(f,s); - curlen += slen + 1; - } - PUTC('\n',f); -} - -/***************************************************************************** -* * -* putorbits(f,orbits,linelength,n) writes the orbits to f as lists * -* of integers separated by semicolons. No more than linelength characters * -* (excluding '\n') are written per line. * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED: itos(),putset() * -* * -*****************************************************************************/ - -void -putorbits(FILE *f, int *orbits, int linelength, int n) -{ - int i,j; - int m,curlen,sz,slen; - char s[20]; - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putorbits"); - DYNALLOC1(set,workset,workset_sz,m,"putorbits"); -#endif - - for (i = n; --i >= 0;) workperm[i] = 0; - for (i = n; --i >= 0;) - if ((j = orbits[i]) < i) - { - workperm[i] = workperm[j]; - workperm[j] = i; - } - - curlen = 0; - for (i = 0; i < n; ++i) - if (orbits[i] == i) - { - sz = 0; - EMPTYSET(workset,m); - j = i; - do - { - ADDELEMENT(workset,j); - j = workperm[j]; - ++sz; - } - while (j > 0); - putset(f,workset,&curlen,linelength-1,m,TRUE); - if (sz > 1) - { - s[0] = ' '; - s[1] = '('; - slen = 2 + itos(sz,s+2); - s[slen++] = ')'; - s[slen] = '\0'; - if (linelength > 0 && curlen + slen + 1 >= linelength) - { - fprintf(f,"\n "); - curlen = 3; - } - fprintf(f,"%s",s); - curlen += slen; - } - - PUTC(';',f); - ++curlen; - } - PUTC('\n',f); -} - - -/***************************************************************************** -* * -* putorbitsplus(f,orbits,linelength,n) is the same as * -* putorbits(f,orbits,linelength,n) except that the first element of each * -* orbit is written bold. This only works if output is to a device that * -* interprets ANSI controls. * -* * -* FUNCTIONS CALLED: itos(),putset() * -* * -*****************************************************************************/ - -void -putorbitsplus(FILE *f, int *orbits, int linelength, int n) -{ - int i,j; - int m,curlen,sz,slen; - char s[20]; - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putorbits"); - DYNALLOC1(set,workset,workset_sz,m,"putorbits"); -#endif - - for (i = n; --i >= 0;) workperm[i] = 0; - for (i = n; --i >= 0;) - if ((j = orbits[i]) < i) - { - workperm[i] = workperm[j]; - workperm[j] = i; - } - - curlen = 0; - for (i = 0; i < n; ++i) - if (orbits[i] == i) - { - sz = 0; - EMPTYSET(workset,m); - j = i; - do - { - ADDELEMENT(workset,j); - j = workperm[j]; - ++sz; - } - while (j > 0); - putset_firstbold(f,workset,&curlen,linelength-1,m,TRUE); - if (sz > 1) - { - s[0] = ' '; - s[1] = '('; - slen = 2 + itos(sz,s+2); - s[slen++] = ')'; - s[slen] = '\0'; - if (linelength > 0 && curlen + slen + 1 >= linelength) - { - fprintf(f,"\n "); - curlen = 3; - } - fprintf(f,"%s",s); - curlen += slen; - } - - PUTC(';',f); - ++curlen; - } - PUTC('\n',f); -} - -/***************************************************************************** -* * -* putquotient(f,g,lab,ptn,level,linelength,m,n) writes the quotient matrix * -* of g defined by the partition at the given level. Precisely, for each * -* cell W, it writes the number w of the least vertex in W, then the size * -* of W, then the number of times w is joined FROM each cell. A complete * -* join is written as "*", while an empty join is written as "-". No more * -* than linelength characters (excluding '\n') are written per line unless * -* linelength is very small. A value of linelength <= 0 dictates no line * -* breaks at all. labelorg is used. * -* * -* FUNCTIONS CALLED: itos() * -* * -*****************************************************************************/ - -void -putquotient(FILE *f, graph *g, int *lab, int *ptn, int level, - int linelength, int m, int n) -{ - int i; - char s[50]; - int ic,curlen,v,w,cell1,cell2,numcells,jc,csize,k; - set *gw; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putquotient"); - DYNALLOC1(set,workset,workset_sz,m,"putquotient"); -#endif - - numcells = 0; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - w = lab[cell1]; - for (i = cell1 + 1; i <= cell2; ++i) - if (lab[i] < w) w = lab[i]; - workperm[numcells++] = w; - } - - for (ic = cell1 = 0; ic < numcells; ++ic, cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - EMPTYSET(workset,M); - for (i = cell1; i <= cell2; ++i) ADDELEMENT(workset,lab[i]); - v = workperm[ic]; - csize = cell2 - cell1 + 1; - if (v + labelorg < 10) - { - s[0] = ' '; - curlen = 1; - } - else - curlen = 0; - curlen += itos(v+labelorg,&s[curlen]); - s[curlen++] = '['; - curlen += itos(csize,&s[curlen]); - fprintf(f,"%s",s); - if (csize < 10) - { - fprintf(f,"] :"); - curlen += 4; - } - else - { - fprintf(f,"] :"); - curlen += 3; - } - - for (jc = 0; jc < numcells; ++jc) - { - w = workperm[jc]; - gw = GRAPHROW(g,w,m); - k = setinter(gw,workset,M); - if (k == 0 || k == csize) - { - if (linelength > 0 && curlen + 2 > linelength) - { - fprintf(f,"\n "); - curlen = 4; - } - if (k == 0) fprintf(f," -"); - else fprintf(f," *"); - curlen += 2; - } - else - { - i = itos(k,s); - if (linelength > 0 && curlen + i + 1 > linelength) - { - fprintf(f,"\n "); - curlen = 4; - } - fprintf(f," %s",s); - curlen += i + 1; - } - } - fprintf(f,"\n"); - } -} - -/***************************************************************************** -* * -* putquotient_sg(f,g,lab,ptn,level,linelength) writes the quotient matrix * -* of g defined by the partition at the given level. Precisely, for each * -* cell W, it writes the number w of the least vertex in W, then the size * -* of W, then the number of times w is joined FROM each cell. A complete * -* join is written as "*", while an empty join is written as "-". No more * -* than linelength characters (excluding '\n') are written per line unless * -* linelength is very small. A value of linelength <= 0 dictates no line * -* breaks at all. labelorg is used. * -* * -* FUNCTIONS CALLED: itos() * -* * -*****************************************************************************/ - -void -putquotient_sg(FILE *f, sparsegraph *g, int *lab, int *ptn, - int level, int linelength) -{ - int i,m,n; - char s[50]; - int ic,curlen,v,w,cell1,cell2,numcells,jc,csize,k; - int *dd,*ee; - size_t *vv,j; - - n = g->nv; - m = SETWORDSNEEDED(n); - SG_VDE(g,vv,dd,ee); - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putquotient"); - DYNALLOC1(set,workset,workset_sz,m,"putquotient"); -#endif - - numcells = 0; - for (cell1 = 0; cell1 < n; cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - w = lab[cell1]; - for (i = cell1 + 1; i <= cell2; ++i) - if (lab[i] < w) w = lab[i]; - workperm[numcells++] = w; - } - - for (ic = cell1 = 0; ic < numcells; ++ic, cell1 = cell2 + 1) - { - for (cell2 = cell1; ptn[cell2] > level; ++cell2) {} - EMPTYSET(workset,M); - for (i = cell1; i <= cell2; ++i) ADDELEMENT(workset,lab[i]); - v = workperm[ic]; - csize = cell2 - cell1 + 1; - if (v + labelorg < 10) - { - s[0] = ' '; - curlen = 1; - } - else - curlen = 0; - curlen += itos(v+labelorg,&s[curlen]); - s[curlen++] = '['; - curlen += itos(csize,&s[curlen]); - fprintf(f,"%s",s); - if (csize < 10) - { - fprintf(f,"] :"); - curlen += 4; - } - else - { - fprintf(f,"] :"); - curlen += 3; - } - - for (jc = 0; jc < numcells; ++jc) - { - w = workperm[jc]; - k = 0; - for (j = vv[w]; j < vv[w]+dd[w]; ++j) - if (ISELEMENT(workset,ee[j])) ++k; - - if (k == 0 || k == csize) - { - if (linelength > 0 && curlen + 2 > linelength) - { - fprintf(f,"\n "); - curlen = 4; - } - if (k == 0) fprintf(f," -"); - else fprintf(f," *"); - curlen += 2; - } - else - { - i = itos(k,s); - if (linelength > 0 && curlen + i + 1 > linelength) - { - fprintf(f,"\n "); - curlen = 4; - } - fprintf(f," %s",s); - curlen += i + 1; - } - } - fprintf(f,"\n"); - } -} - -/***************************************************************************** -* * -* putptn(f,lab,ptn,level,linelength,n) writes the partition at the given * -* level as sorted lists of integers separated by semicolons. No more than * -* linelength characters (excluding '\n') are written per line. * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED: itos(),putset() * -* * -*****************************************************************************/ - -void -putptn(FILE *f, int *lab, int *ptn, int level, int linelength, int n) -{ - int i; - int curlen,m; - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"putptn"); -#endif - - PUTC('[',f); - curlen = 1; - i = 0; - while (i < n) - { - EMPTYSET(workset,m); - while (TRUE) - { - ADDELEMENT(workset,lab[i]); - if (ptn[i] > level) ++i; - else break; - } - putset(f,workset,&curlen,linelength-2,m,TRUE); - if (i < n-1) - { - fprintf(f," |"); - curlen += 2; - } - ++i; - } - fprintf(f," ]\n"); -} - -/***************************************************************************** -* * -* putcanon(f,canonlab,canong,linelength,m,n) writes the label canonlab * -* and the graph canong to f, using at most linelength characters * -* (excluding '\n') per line. labelorg is used. * -* A value of linelength <= 0 dictates no line breaks at all. * -* * -* FUNCTIONS CALLED: writeperm(),putgraph() * -* * -*****************************************************************************/ - -void -putcanon(FILE *f, int *canonlab, graph *canong, int linelength, int m, int n) -{ - int i; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putcanon"); -#endif - - for (i = 0; i < n; ++i) workperm[i] = canonlab[i]; - writeperm(f,workperm,TRUE,linelength,n); - putgraph(f,canong,linelength,m,n); -} - -/***************************************************************************** -* * -* putcanon_sg(f,canonlab,canong,linelength) writes the label canonlab * -* and the graph canong to f, using at most linelength characters * -* (excluding '\n') per line. labelorg is used. * -* A value of linelength <= 0 dictates no line breaks at all. * -* * -* FUNCTIONS CALLED: writeperm(),putgraph_sg() * -* * -*****************************************************************************/ - -void -putcanon_sg(FILE *f, int *canonlab, sparsegraph *canong, int linelength) -{ - int i,n; - - n = canong->nv; -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putcanon"); -#endif - - for (i = 0; i < n; ++i) workperm[i] = canonlab[i]; - writeperm(f,workperm,TRUE,linelength,n); - putgraph_sg(f,canong,linelength); -} - -/***************************************************************************** -* * -* readptn(f,lab,ptn,&numcells,prompt,n) reads a partition from f * -* and establishes it in (lab,ptn). * -* The format can be just a number, which is fixed alone, or an arbitrary * -* partition [...|...|...]. Ranges x:y can be used. * -* labelorg is used. * -* * -*****************************************************************************/ - -void -readptn(FILE *f, int *lab, int *ptn, int *numcells, boolean prompt, int n) -{ - int i,j; - int c,v1,v2,m; - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"readptn"); -#endif - - GETNW(c,f); - if (c == '=') GETNW(c,f); - if (ISDIGIT(c)) - { - ungetc(c,f); - readinteger(f,&v1); - v1 -= labelorg; - if (v1 >= 0 && v1 < n) - fixit(lab,ptn,numcells,v1,n); - else - { - fprintf(ERRFILE,"vertex out of range (%d), fixing nothing\n\n", - v1+labelorg); - unitptn(lab,ptn,numcells,n); - } - return; - } - if (c != '[') - { - ungetc(c,f); - fprintf(ERRFILE,"illegal partition, fixing nothing\n\n"); - unitptn(lab,ptn,numcells,n); - return; - } - EMPTYSET(workset,m); - *numcells = 0; - for (i = 0; i < n; ++i) ptn[i] = NAUTY_INFINITY; - i = 0; - j = -1; - while (TRUE) - { - GETNWC(c,f); - if (ISDIGIT(c)) - { - ungetc(c,f); - readinteger(f,&v1); - v1 -= labelorg; - GETNWC(c,f); - if (c == ':') - if (!readinteger(f,&v2)) - { - fprintf(ERRFILE,"unfinished range\n\n"); - v2 = v1; - } - else - v2 -= labelorg; - else - { - ungetc(c,f); - v2 = v1; - } - while (v1 <= v2) - { - if (v1 < 0 || v1 >= n || ISELEMENT(workset,v1)) - fprintf(ERRFILE,"illegal or repeated number : %d\n\n", - v1+labelorg); - else - { - ADDELEMENT(workset,v1); - lab[++j] = v1; - } - ++v1; - } - } - else if (c == '|' || c == ']' || c == EOF) - { - if (j >= i) - { - ++*numcells; - ptn[j] = 0; - } - if (c == '|') - i = j + 1; - else if (j == n - 1) - return; - else - { - i = j + 1; - ++*numcells; - for (j = 0; j < n; ++j) - if (!ISELEMENT(workset,j)) lab[i++] = j; - ptn[n-1] = 0; - return; - } - } - else if (c == '\n') - { - if (prompt) fprintf(PROMPTFILE,"] "); - } - else - fprintf(ERRFILE,"illegal character '%c' in partition\n\n",c); - } -} - -/***************************************************************************** -* * -* unitptn(lab,ptn,&numcells,n) establishes the partition with one cell. * -* * -*****************************************************************************/ - -void -unitptn(int *lab,int *ptn, int *numcells, int n) -{ - int i; - - for (i = 0; i < n; ++i) - { - lab[i] = i; - ptn[i] = NAUTY_INFINITY; - } - ptn[n-1] = 0; - *numcells = 1; -} - -/***************************************************************************** -* * -* individualise(lab,ptn,level,v,&pos,&numcells,n) individualises vertex v. * -* numcells is updated and the position of the possibly-new singleton is * -* returned in pos. -* * -*****************************************************************************/ - -void -individualise(int *lab,int *ptn, int level, - int v, int *pos, int *numcells, int n) -{ - int i,j; - - for (i = 0; i < n; ++i) if (lab[i] == v) break; - - for (j = i; j > 0 && ptn[j-1] > level; --j) {}; - - *pos = j; - if (ptn[j] <= level) return; /* individual already */ - - lab[i] = lab[j]; - lab[j] = v; - ptn[j] = level; - ++*numcells; -} - -/***************************************************************************** -* * -* cellstarts(ptn,level,cell,m,n) sets the set cell to contain the indices * -* of the starts in ptn of the partition at level level. * -* * -*****************************************************************************/ - -void -cellstarts(int *ptn, int level, set *cell, int m, int n) -{ - int i; - - EMPTYSET(cell,m); - i = 0; - while (i < n) - { - ADDELEMENT(cell,i); - while (ptn[i] > level) ++i; - ++i; - } -} - -/***************************************************************************** -* * -* fixit(lab,ptn,&numcells,fixedvertex,n) establishes the partition * -* with one cell {fixedvertex} and all the other vertices (if any) in * -* another cell. * -* * -*****************************************************************************/ - -void -fixit(int *lab, int *ptn, int *numcells, int fixedvertex, int n) -{ - int i; - - for (i = 1; i < n; ++i) - { - lab[i] = i; - ptn[i] = 1; - } - - lab[0] = fixedvertex; - lab[fixedvertex] = 0; - ptn[0] = 0; - ptn[n-1] = 0; - if (n == 1) *numcells = 1; - else *numcells = 2; -} - -/***************************************************************************** -* * -* sethash(s,n,seed,key) is a function whose value depends only on the * -* set s, a long seed, and an integer key. It is intended to be independent * -* of the word size provided long ints have at least 32 bits, and also * -* independent of m. n is the underlying universal set size. * -* 31 bits of seed and 15 bits of key are significant. * -* The result is in 0..2^31-1. * -* * -*****************************************************************************/ - -long -sethash(set *s, int n, long seed, int key) -{ - int i,j,lsh,rsh; - unsigned long l,res,lshmask,salt; - setword si; - - lsh = key & 0xF; - rsh = 28 - lsh; - salt = (key >> 4) & 0x7FFL; - res = seed & 0x7FFFFFFFUL; - lshmask = (1UL << lsh) - 1; - - j = 0; - for (i = 0; ; ++i) - { - si = s[i]; - l = SWCHUNK0(si); - res = (((res << lsh) ^ ((res >> rsh) & lshmask) ^ l) + salt) - & 0x7FFFFFFFUL; - res = FUZZ1(res); - if ((j += 16) >= n) break; -#if WORDSIZE > 16 - l = SWCHUNK1(si); - res = (((res << lsh) ^ ((res >> rsh) & lshmask) ^ l) + salt) - & 0x7FFFFFFFUL; - res = FUZZ1(res); - if ((j += 16) >= n) break; -#if WORDSIZE == 64 - l = SWCHUNK2(si); - res = (((res << lsh) ^ ((res >> rsh) & lshmask) ^ l) + salt) - & 0x7FFFFFFFUL; - res = FUZZ1(res); - if ((j += 16) >= n) break; - l = SWCHUNK3(si); - res = (((res << lsh) ^ ((res >> rsh) & lshmask) ^ l) + salt) - & 0x7FFFFFFFUL; - res = FUZZ1(res); - if ((j += 16) >= n) break; -#endif -#endif - } - - return res; -} - -/***************************************************************************** -* * -* listhash(x,nx,key) is a function whose value depends on the SET of values * -* in the first 'nx' entries of the array 'x', and the value of key. * -* Machine-independent if long ints have at least 32 bits, otherwise not. * -* The result is in 0..2^31-1. * -* * -*****************************************************************************/ - -long -listhash(int *x, int nx, long key) -{ - unsigned long lkey,val,accum; - int i; - - lkey = (unsigned long)key & 0x7FFFFFFFUL; - accum = nx; - - for (i = 0; i < nx; ++i) - { - val = (unsigned long)x[i] & 0x7FFFFFFFUL; - val = (val + lkey) & 0x7FFFFFFFUL; - accum += FUZZ1(val); - } - - return accum & 0x7FFFFFFFUL; -} - -/***************************************************************************** -* * -* hashgraph_sg(sg,key) is a function whose value depends on the sparse * -* graph or digraph sg. * -* Machine-independent if long ints have at least 32 bits, otherwise not. * -* The result is in 0..2^31-1. * -* * -*****************************************************************************/ - -long -hashgraph_sg(sparsegraph *sg, long key) -{ - int n,i; - int *d,*e; - size_t *v; - unsigned long val,accum; - - accum = n = sg->nv; - - SG_VDE(sg,v,d,e); - - for (i = 0; i < n; ++i) - if (d[i] == 0) - accum += FUZZ1(i); - else - { - accum = (accum>>7) | ((accum<<24)&0x7FFFFFFFUL); - val = listhash(e+v[i],d[i],key); - val = (val + i) & 0x7FFFFFFFUL; - accum += FUZZ2(val); - } - - return (long)(accum & 0x7FFFFFFFUL); -} - -/***************************************************************************** -* * -* hashgraph(g,m,n,key) is a function whose value depends on the * -* graph or digraph sg. * -* Machine-independent if long ints have at least 32 bits, otherwise not. * -* The result is in 0..2^31-1. * -* * -*****************************************************************************/ - -long -hashgraph(graph *g, int m, int n, long key) -{ - int i; - set *gi; - unsigned long val,accum; - - accum = n; - for (i = 0, gi = g; i < n; ++i, gi += m) - { - accum = (accum>>12) | ((accum<<19)&0x7FFFFFFFUL); - val = sethash(gi,n,key,(key&0xFL)+i); - val = (val + i) & 0x7FFFFFFFUL; - accum += FUZZ2(val); - } - - return (long)(accum & 0x7FFFFFFFUL); -} - -/***************************************************************************** -* * -* hash(setarray,length,key) is a function whose value depends only on the * -* first 'length' entries of the array 'setarray', and the value of key. * -* key should be in the range 1..31 and preferably odd. * -* This works best if long ints have at least 32 bits, but it's valid anyway.* -* Not machine-indpendent! Use sethash() in preference. * -* * -*****************************************************************************/ - -long -hash(set *setarray, long length, int key) -{ - long code; - set *sptr; - - code = length; - sptr = setarray + length; - - while (--sptr >= setarray) - code = (code<>(32-key)) + *sptr); - - return code; -} - -/***************************************************************************** -* * -* readperm is like readvperm without the last argument. It is provided * -* only for backward compatibility. * -* * -*****************************************************************************/ - -void -readperm(FILE *f, int *perm, boolean prompt, int n) -{ - int nv; - - readvperm(f,perm,prompt,n,&nv); -} - -/***************************************************************************** -* * -* readvperm(f,perm,prompt,n,nv) reads a permutation of order n from * -* f, terminated by a semicolon. Any repeated or illegal numbers or * -* characters are reported then ignored. Missing numbers are filled in * -* in numerical order. A prompt is issued for each line if prompt!=FALSE. * -* labelorg is used. *nv is set equal to the number of numbers actually * -* given. Ranges like v1:v2 are allowed. * -* * -*****************************************************************************/ - -void -readvperm(FILE *f, int *perm, boolean prompt, int n, int *nv) -{ - int i; - int m,c,v1,v2; - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"readperm"); -#endif - - EMPTYSET(workset,m); - - i = 0; - - while (TRUE) - { - GETNWC(c,f); - if (c == ';' || c == EOF) break; - if (ISDIGIT(c)) - { - ungetc(c,f); - readinteger(f,&v1); - v1 -= labelorg; - GETNWC(c,f); - if (c == ':') - if (!readinteger(f,&v2)) - { - fprintf(ERRFILE,"unfinished range\n\n"); - v2 = v1; - } - else - v2 -= labelorg; - else - { - ungetc(c,f); - v2 = v1; - } - - if (v1 < 0 || v1 >= n || v2 >= n || v1 > v2) - { - if (v1 < v2) - fprintf(ERRFILE, - "illegal range in permutation : %d:%d\n\n", - v1+labelorg,v2+labelorg); - else - fprintf(ERRFILE, - "illegal number in permutation : %d\n\n", - v1+labelorg); - } - else - for (; v1 <= v2; ++v1) - { - if (!ISELEMENT(workset,v1)) - { - perm[i++] = v1; - ADDELEMENT(workset,v1); - } - else - fprintf(ERRFILE, - "repeated number in permutation : %d\n\n", - v1+labelorg); - } - } - else - { - if (c == '\n' && prompt) - fprintf(PROMPTFILE,"+ "); - if (c != '\n') - fprintf(ERRFILE,"bad character '%c' in permutation\n\n", - (char)c); - } - } - - *nv = i; - - for (v1 = 0; v1 < n; ++v1) - if (!ISELEMENT(workset,v1)) perm[i++] = v1; -} - -/***************************************************************************** -* * -* ranperm(perm,n) creates a random permutation in perm. * -* * -*****************************************************************************/ - -void -ranperm(int *perm, int n) -{ - int i,j,t; - - for (i = n; --i >= 0; ) perm[i] = i; - - for (i = n; --i > 0; ) - { - j = KRAN(i+1); - t = perm[i]; - perm[i] = perm[j]; - perm[j] = t; - } -} - -/***************************************************************************** -* * -* relabel(g,perm,lab,workg,m,n) replaces g by g^perm, using workg as * -* scratch space. If lab!=NULL, it is taken as a labelling vector and * -* also permuted. * -* * -* FUNCTIONS CALLED: updatecan() * -* * -*****************************************************************************/ - -void -relabel(graph *g, int *lab, int *perm, graph *workg, int m, int n) -{ - long li; - int i; - - for (li = (long)M * (long)n; --li >= 0;) workg[li] = g[li]; - - updatecan(workg,g,perm,0,M,n); - if (lab != NULL) - { -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"relabel"); -#endif - for (i = 0; i < n; ++i) workperm[perm[i]] = i; - for (i = 0; i < n; ++i) lab[i] = workperm[lab[i]]; - } -} - -/***************************************************************************** -* * -* relabel_sg(g,perm,lab,workg,m,n) replaces g by g^perm, using workg as * -* scratch space. If lab!=NULL, it is taken as a labelling vector and * -* also permuted. * -* * -* FUNCTIONS CALLED: copy_sg(), updatecan_sg() * -* * -*****************************************************************************/ - -void -relabel_sg(sparsegraph *sg, int *lab, int *perm, sparsegraph *workg) -{ - int i,n; - sparsegraph *tempsg; - sparsegraph tmp; - - n = sg->nv; - - if (workg) - { - tempsg = copy_sg(sg,workg); - updatecan_sg((graph*)tempsg,(graph*)sg,perm,0,SETWORDSNEEDED(n),n); - } - else - { - SG_INIT(tmp); - tempsg = copy_sg(sg,&tmp); - updatecan_sg((graph*)tempsg,(graph*)sg,perm,0,SETWORDSNEEDED(n),n); - SG_FREE(tmp); - } - - if (lab != NULL) - { -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"relabel_sg"); -#endif - for (i = 0; i < n; ++i) workperm[perm[i]] = i; - for (i = 0; i < n; ++i) lab[i] = workperm[lab[i]]; - } -} - -/***************************************************************************** -* * -* sublabel(g,perm,nperm,workg,m,n) replaces g by g^perm, using workg as * -* scratch space. perm is a partial vector, of length nperm, where it is * -* known that the elements of perm are distinct. * -* * -*****************************************************************************/ - -void -sublabel(graph *g, int *perm, int nperm, graph *workg, int m, int n) -{ - long li; - int i,j,k; - int newm; - set *gi,*wgi; - - for (li = (long)m * (long)n; --li >= 0;) workg[li] = g[li]; - - newm = SETWORDSNEEDED(nperm); - - for (li = (long)newm * (long)nperm; --li >= 0;) g[li] = 0; - - for (i = 0, gi = (set*)g; i < nperm; ++i, gi += newm) - { - wgi = GRAPHROW(workg,perm[i],m); - for (j = 0; j < nperm; ++j) - { - k = perm[j]; - if (ISELEMENT(wgi,k)) ADDELEMENT(gi,j); - } - } -} - -/***************************************************************************** -* * -* sublabel_sg(sg,perm,nperm,workg) replaces g by g^perm, using workg as * -* scratch space. perm is a partial vector, of length nperm, where it is * -* known that the elements of perm are distinct. * -* * -*****************************************************************************/ - -void -sublabel_sg(sparsegraph *sg, int *perm, int nperm, sparsegraph *workg) -{ - int i,j,k,n; - size_t newnde,kk; - sparsegraph *tempsg; - sparsegraph tmp; - int *d,*e; - int *dd,*ee; - size_t *v,*vv; - - n = sg->nv; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"relabel_sg"); -#endif - for (i = 0; i < n; ++i) workperm[i] = -1; - for (i = 0; i < nperm; ++i) workperm[perm[i]] = i; - - newnde = 0; - SG_VDE(sg,v,d,e); - - for (i = 0; i < nperm; ++i) - { - j = perm[i]; - for (k = 0; k < d[j]; ++k) - if (workperm[e[v[j]+k]] >= 0) ++newnde; - } - - if (workg) - tempsg = workg; - else - { - SG_INIT(tmp); - tempsg = &tmp; - } - - SG_ALLOC(*tempsg,nperm,newnde,"sublabel_sg"); - SG_VDE(tempsg,vv,dd,ee); - - kk = 0; - for (i = 0; i < nperm; ++i) - { - j = perm[i]; - vv[i] = kk; - dd[i] = 0; - for (k = 0; k < d[j]; ++k) - if (workperm[e[v[j]+k]] >= 0) - { - ee[vv[i]+dd[i]] = workperm[e[v[j]+k]]; - ++dd[i]; - } - kk += dd[i]; - } - tempsg->nv = nperm; - tempsg->nde = newnde; - - copy_sg(tempsg,sg); - - if (!workg) SG_FREE(tmp); -} - -/***************************************************************************** -* * -* copycomment(fin,fout,delimiter) copies fin to fout until either EOF or * -* the character 'delimiter' is read. The delimiter itself isn't written. * -* Escape sequences \n,\t,\b,\r,\f,\\,\',\",\\n are recognised. Otherwise, * -* '\' is ignored. * -* * -*****************************************************************************/ - -void -copycomment(FILE *fin, FILE *fout, int delimiter) -{ - int c,backslash; - - backslash = FALSE; - - while ((c = getc(fin)) != EOF && (c != delimiter || backslash)) - if (backslash) - { - switch (c) - { - case '\n': - break; - case 'n': - PUTC('\n',fout); - break; - case 't': - PUTC('\t',fout); - break; - case 'b': - PUTC('\b',fout); - break; - case 'r': - PUTC('\r',fout); - break; - case 'f': - PUTC('\f',fout); - break; - case '\\': - PUTC('\\',fout); - break; - case '\'': - PUTC('\'',fout); - break; - case '"': - PUTC('"',fout); - break; - default: - PUTC(c,fout); - } - backslash = FALSE; - } - else if (c == '\\') - backslash = TRUE; - else - PUTC(c,fout); -} - -/***************************************************************************** -* * -* converse_sg(g1,g2) performs a digraph converse operation on g1, * -* leaving the result in g2. g2 must exist and be initialised. * -* If g1 is an undirected graph, g2 will be the same. * -* * -*****************************************************************************/ - -void -converse_sg(sparsegraph *g1, sparsegraph *g2) -{ - int *e1,*d1,*e2,*d2; - size_t *v1,*v2,j; - int i,k,n; - - n = g1->nv; - - SG_ALLOC(*g2,n,g1->nde,"converse_sg"); - g2->nv = n; - g2->nde = g1->nde; - if (g2->w) - { - FREES(g2->w); - g2->w = NULL; - g2->wlen = 0; - } - - SG_VDE(g1,v1,d1,e1); - SG_VDE(g2,v2,d2,e2); - - for (i = 0; i < n; ++i) d2[i] = 0; - for (i = 0; i < n; ++i) - for (j = v1[i]; j < v1[i]+d1[i]; ++j) ++d2[e1[j]]; - - v2[0] = 0; - for (i = 1; i < n; ++i) v2[i] = v2[i-1] + d2[i-1]; - for (i = 0; i < n; ++i) d2[i] = 0; - - for (i = 0; i < n; ++i) - for (j = v1[i]; j < v1[i]+d1[i]; ++j) - { - k = e1[j]; - e2[v2[k] + (d2[k]++)] = i; - } -} - -/***************************************************************************** -* * -* complement_sg(g1,g2) sets g2 to the complement of g1. * -* If g1 has loops then the loop set is also complemented; otherwise * -* no loops are created. g2 must exist and be initialised. * -* * -*****************************************************************************/ - -void -complement_sg(sparsegraph *g1, sparsegraph *g2) -{ - int *e1,*d1,*e2,*d2; - size_t *v1,*v2,j,ndec; - int i,l,m,n; - int loops; - - n = g1->nv; - SG_VDE(g1,v1,d1,e1); - - loops = 0; - for (i = 0; i < n; ++i) - for (j = v1[i]; j < v1[i] + d1[i]; ++j) - if (e1[j] == i) ++loops; - - if (loops > 1) ndec = n*(size_t)n - g1->nde; - else ndec = n*(size_t)n - n - g1->nde; - SG_ALLOC(*g2,n,ndec,"converse_sg"); - g2->nv = n; - SG_VDE(g2,v2,d2,e2); - - m = SETWORDSNEEDED(n); -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"putorbits"); -#endif - - if (g2->w) - { - FREES(g2->w); - g2->w = NULL; - g2->wlen = 0; - } - - ndec = 0; - - for (i = 0; i < n; ++i) - { - EMPTYSET(workset,m); - for (j = v1[i]; j < v1[i]+d1[i]; ++j) ADDELEMENT(workset,e1[j]); - if (loops == 0) ADDELEMENT(workset,i); - - v2[i] = ndec; - for (l = 0; l < n; ++l) - if (!ISELEMENT(workset,l)) e2[ndec++] = l; - d2[i] = ndec - v2[i]; - } - g2->nde = ndec; -} - -/***************************************************************************** -* * -* mathon_sg(g1,g2) performs a Mathon doubling operation on g1, * -* leaving the result in g2. g2 must exist and be initialised. * -* * -*****************************************************************************/ - -void -mathon_sg(sparsegraph *g1, sparsegraph *g2) -{ - int *e1,*d1,*e2,*d2; - size_t *v1,*v2,j; - int i,k,m,n1,n2; - - n1 = g1->nv; - n2 = 2*n1 + 2; - SG_ALLOC(*g2,n2,n2*(size_t)n1,"mathon_sg"); - g2->nv = n2; - g2->nde = n2*(size_t)n1; - if (g2->w) - { - FREES(g2->w); - g2->w = NULL; - g2->wlen = 0; - } - - SG_VDE(g1,v1,d1,e1); - SG_VDE(g2,v2,d2,e2); - - m = SETWORDSNEEDED(n1); -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"mathon_sg"); -#endif - - for (i = 0; i < n2; ++i) - { - v2[i] = i*(size_t)n1; - d2[i] = 0; - } - - for (i = 0; i < n1; ++i) - { - e2[v2[0]+(d2[0]++)] = i+1; - e2[v2[i+1]+(d2[i+1]++)] = 0; - e2[v2[n1+1]+(d2[n1+1]++)] = i+n1+2; - e2[v2[i+n1+2]+(d2[i+n1+2]++)] = n1+1; - } - - for (i = 0; i < n1; ++i) - { - EMPTYSET(workset,m); - for (j = v1[i]; j < v1[i]+d1[i]; ++j) - { - k = e1[j]; - if (k == i) continue; /* ignore loops */ - ADDELEMENT(workset,k); - e2[v2[i+1]+(d2[i+1]++)] = k+1; - e2[v2[i+n1+2]+(d2[i+n1+2]++)] = k+n1+2; - } - for (k = 0; k < n1; ++k) - if (k != i && !ISELEMENT(workset,k)) - { - e2[v2[i+1]+(d2[i+1]++)] = k+n1+2; - e2[v2[k+n1+2]+(d2[k+n1+2]++)] = i+1; - } - } -} - -/***************************************************************************** -* * -* mathon(g1,m1,n1,g2,m2,n2) performs a Mathon doubling operation on g1, * -* leaving the result in g2. * -* m1,n1 and m2,n2 are the values of m,n before and after the operation. * -* * -*****************************************************************************/ - -void -mathon(graph *g1, int m1, int n1, graph *g2, int m2, int n2) -{ - int i,j,ii,jj; - long li; - set *rowptr,*gp; - - for (li = (long)m2 * (long)n2; --li >= 0;) g2[li] = 0; - - for (i = 1; i <= n1; ++i) - { - ii = i + n1 + 1; - gp = GRAPHROW(g2,0,m2); /* unnecessarily convoluted code */ - ADDELEMENT(gp,i); /* needed to avoid compiler bug */ - gp = GRAPHROW(g2,i,m2); /* in MSDOS version */ - ADDELEMENT(gp,0); - gp = GRAPHROW(g2,n1+1,m2); - ADDELEMENT(gp,ii); - gp = GRAPHROW(g2,ii,m2); - ADDELEMENT(gp,n1+1); - } - - for (i = 0, rowptr = g1; i < n1; ++i, rowptr += m1) - for (j = 0; j < n1; ++j) - if (j != i) - { - ii = i + n1 + 2; - jj = j + n1 + 2; - if (ISELEMENT(rowptr,j)) - { - gp = GRAPHROW(g2,i+1,m2); - ADDELEMENT(gp,j+1); - gp = GRAPHROW(g2,ii,m2); - ADDELEMENT(gp,jj); - } - else - { - gp = GRAPHROW(g2,i+1,m2); - ADDELEMENT(gp,jj); - gp = GRAPHROW(g2,ii,m2); - ADDELEMENT(gp,j+1); - } - } -} - -/***************************************************************************** -* * -* rangraph(g,digraph,invprob,m,n) makes a random graph (or digraph if * -* digraph!=FALSE) with edge probability 1/invprob. * -* * -*****************************************************************************/ - -void -rangraph(graph *g, boolean digraph, int invprob, int m, int n) -{ - int i,j; - long li; - set *row,*col; - - for (li = (long)m * (long)n; --li >= 0;) g[li] = 0; - - for (i = 0, row = g; i < n; ++i, row += m) - if (digraph) - { - for (j = 0; j < n; ++j) - if (KRAN(invprob) == 0) ADDELEMENT(row,j); - } - else - { - for (j = i + 1, col = GRAPHROW(g,j,m); j < n; ++j, col += m) - if (KRAN(invprob) == 0) - { - ADDELEMENT(row,j); - ADDELEMENT(col,i); - } - } -} - - -/***************************************************************************** -* * -* rangraph2(g,digraph,p1,p2,m,n) makes a random graph (or digraph if * -* digraph!=FALSE) with edge probability p1/p2. * -* * -*****************************************************************************/ - -void -rangraph2(graph *g, boolean digraph, int p1, int p2, int m, int n) -{ - int i,j; - long li; - set *row,*col; - - for (li = (long)m * (long)n; --li >= 0;) g[li] = 0; - - for (i = 0, row = g; i < n; ++i, row += m) - if (digraph) - { - for (j = 0; j < n; ++j) - if (KRAN(p2) < p1) ADDELEMENT(row,j); - } - else - for (j = i + 1, col = GRAPHROW(g,j,m); j < n; ++j, col += m) - if (KRAN(p2) < p1) - { - ADDELEMENT(row,j); - ADDELEMENT(col,i); - } -} - -/***************************************************************************** -* * -* rangraph2_sg(sg,digraph,p1,p2,n) makes a random graph (or digraph if * -* digraph!=FALSE) with edge probability p1/p2. sg must be initialised. * -* * -*****************************************************************************/ - -void -rangraph2_sg(sparsegraph *sg, boolean digraph, int p1, int p2, int n) -{ - int i,j,k; - int *dd,*ee; - double rn,expec,var,sd; - int ldeg; - size_t *vv,inc,nde; - - sg->nv = n; - - rn = n; - expec = (rn*rn-rn)*(double)p1/(double)p2; - var = expec*(double)(p2-p1)/(double)p2; - if (!digraph) var *= 2.0; - sd = 1.0; - if (var > 1.0) - for (i = 0; i < 19; ++i) sd = (sd + var/sd) / 2.0; - inc = sd + 20; - - SG_ALLOC(*sg,n,(size_t)expec+4*inc,"rangraph2_sg"); - SG_VDE(sg,vv,dd,ee); - if (sg->w) - { - FREES(sg->w); - sg->w = NULL; - sg->wlen = 0; - } - - for (i = 0; i < n; ++i) dd[i] = 0; - vv[0] = 0; - nde = 0; - - if (!digraph) - { - for (i = 0; i < n; ++i) - { - ldeg = 0; - for (j = i+1; j < n; ++j) - if (KRAN(p2) < p1) - { - nde += 2; - if (nde > sg->elen) - { - DYNREALLOC(int,sg->e,sg->elen,sg->elen+inc, - "rangraph2_sg realloc"); - ee = sg->e; - } - ee[vv[i]+ldeg++] = j; - ++dd[j]; - } - if (i < n-1) vv[i+1] = vv[i] + dd[i] + ldeg; - dd[i] = ldeg; - } - for (i = 0; i < n; ++i) - for (k = 0; k < dd[i]; ++k) - { - j = ee[vv[i]+k]; - if (j > i) ee[vv[j]+dd[j]++] = i; - } - sg->nde = nde; - } - else - { - for (i = 0; i < n; ++i) - { - ldeg = 0; - for (j = 0; j < n; ++j) - if (j != i && KRAN(p2) < p1) - { - ++nde; - if (nde > sg->elen) - { - DYNREALLOC(int,sg->e,sg->elen,sg->elen+inc, - "rangraph2_sg realloc"); - ee = sg->e; - } - ee[vv[i]+ldeg++] = j; - } - if (i < n-1) vv[i+1] = vv[i] + ldeg; - dd[i] = ldeg; - } - sg->nde = nde; - } -} - -/****************************************************************************/ - -static void -putsequence(FILE *f, int *x, int linelength, int n) -/* Write n integers to f with equal values collapsed. - * labelorg is used. */ -{ - char s[60]; - int j,v1,v2,xval,curlen; - - curlen = 0; - v1 = 0; - while (v1 < n) - { - xval = x[v1]; - - for (v2 = v1; v2 < n - 1 && x[v2+1] == xval; ++v2) {} - j = itos(v1+labelorg,s); - if (v2 > v1) - { - s[j++] = '-'; - j += itos(v2+labelorg,&s[j]); - } - s[j++] = ':'; - j += itos(xval,&s[j]); - s[j] = ' '; - s[j+1] = '\0'; - if (linelength > 0 && curlen + j >= linelength) - { - PUTC('\n',f); - curlen = 0; - } - curlen += j + 1; - putstring(f,s); - v1 = v2 + 1; - } - PUTC('\n',f); -} - -/***************************************************************************** -* * -* putdegs(f,g,linelength,m,n) writes the degree of each vertex of g to * -* file f, using at most linelength characters per line (excluding '\n'). * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED : itos(),putstring(),setsize() * -* * -*****************************************************************************/ - -void -putdegs(FILE *f, graph *g, int linelength, int m, int n) -{ - int i; - graph *gp; - -#if !MAXN - DYNALLOC1(int,workperm,workperm_sz,n+2,"putdegs"); -#endif - - for (i = 0, gp = g; i < n; ++i, gp += M) - workperm[i] = setsize(gp,m); - - putsequence(f,workperm,linelength,n); -} - -/***************************************************************************** -* * -* putdegs_sg(f,sg,linelength) writes the degree of each vertex of sg to * -* file f, using at most linelength characters per line (excluding '\n'). * -* A value of linelength <= 0 dictates no line breaks at all. * -* labelorg is used. * -* * -* FUNCTIONS CALLED : itos(),putstring(), * -* * -*****************************************************************************/ - -void -putdegs_sg(FILE *f, sparsegraph *sg, int linelength) -{ - putsequence(f,sg->d,linelength,sg->nv); -} - -/***************************************************************************** -* * -* complement(g,m,n) replaces the graph g by its complement * -* No loops are created unless there are loops present, in which case the * -* loops are also complemented. * -* * -*****************************************************************************/ - -void -complement(graph *g, int m, int n) -{ - boolean loops; - int i,j; - graph *gp; - -#if !MAXN - DYNALLOC1(set,workset,workset_sz,m,"complement"); -#endif - - loops = FALSE; - for (i = 0, gp = g; i < n && !loops; ++i, gp += M) - if (ISELEMENT(gp,i)) loops = TRUE; - - EMPTYSET(workset,m); - for (i = 0; i < n; ++ i) ADDELEMENT(workset,i); - - for (i = 0, gp = g; i < n; ++i, gp += M) - { - for (j = 0; j < M; ++j) gp[j] = workset[j] & ~gp[j]; - if (!loops) DELELEMENT(gp,i); - } -} - -/***************************************************************************** -* * -* converse(g,m,n) replaces the digraph g by its converse. * -* There is no effect on an undirected graph. * -* * -*****************************************************************************/ - -void -converse(graph *g, int m, int n) -{ - int i,j; - graph *gi,*gj; - - for (i = 0, gi = g; i < n; ++i, gi += M) - for (j = i+1, gj = gi+M; j < n; ++j, gj += M) - if ((ISELEMENT(gi,j)!=0) + (ISELEMENT(gj,i)!=0) == 1) - { - FLIPELEMENT(gi,j); - FLIPELEMENT(gj,i); - } -} - -/***************************************************************************** -* * -* naututil_check() checks that this file is compiled compatibly with the * -* given parameters. If not, call exit(1). * -* * -*****************************************************************************/ - -void -naututil_check(int wordsize, int m, int n, int version) -{ - if (wordsize != WORDSIZE) - { - fprintf(ERRFILE,"Error: WORDSIZE mismatch in naututil.c\n"); - exit(1); - } - -#if MAXN - if (m > MAXM) - { - fprintf(ERRFILE,"Error: MAXM inadequate in naututil.c\n"); - exit(1); - } - - if (n > MAXN) - { - fprintf(ERRFILE,"Error: MAXN inadequate in naututil.c\n"); - exit(1); - } -#endif - - if (version < NAUTYREQUIRED) - { - fprintf(ERRFILE,"Error: naututil.c version mismatch\n"); - exit(1); - } -} - -/***************************************************************************** -* * -* naututil_freedyn() - free the dynamic memory in this module * -* * -*****************************************************************************/ - -void -naututil_freedyn(void) -{ - echunk *ec1,*ec2; - -#if !MAXN - DYNFREE(workperm,workperm_sz); - DYNFREE(workset,workset_sz); -#endif - ec1 = first_echunk.next; - - while (ec1) - { - ec2 = ec1->next; - FREES(ec1); - ec1 = ec2; - } -} diff --git a/tools/nauty25r9_mac/naututil.h b/tools/nauty25r9_mac/naututil.h deleted file mode 100644 index 047ce3e..0000000 --- a/tools/nauty25r9_mac/naututil.h +++ /dev/null @@ -1,278 +0,0 @@ -/***************************************************************************** -* This is the header file for versions 2.5 of naututil.c and dreadnaut.c. * -* naututil.h. Generated from naututil-h.in by configure. -*****************************************************************************/ - -/* The parts between the ==== lines are modified by configure when -creating naututil.h out of naututil-h.in. If configure is not being -used, it is necessary to check they are correct. -====================================================================*/ - -/* Check whether various headers are available */ - -#define HAVE_ISATTY 1 /* if isatty() is available */ -#define HAVE_TIMES 1 /* if times() is available */ -#define HAVE_TIME 1 /* if time() is available */ -#define HAVE_GETRUSAGE 1 /* if getrusage() is available */ -#define HAVE_GETTIMEOFDAY 1 /* if gettimeofday() */ - -/*==================================================================*/ - -/***************************************************************************** -* * -* Copyright (1984-2013) Brendan McKay. All rights reserved. * -* Subject to the waivers and disclaimers in nauty.h. * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : changes for version 1.3 : * -* - added declarations of readinteger() and readstring() * -* - added definition of DEFEXT : default file-name * -* extension for dreadnaut input files * -* 28-Sep-88 : changes for version 1.4 : * -* - added support for PC Turbo C * -* 29-Nov-88 : - added getc macro for AZTEC C on MAC * -* 23-Mar-89 : changes for version 1.5 : * -* - added DREADVERSION macro * -* - added optional ANSI function prototypes * -* - changed file name to naututil.h * -* - moved ALLOCS to nauty.h and defined DYNALLOC * -* 25-Mar-89 : - added declaration of twopaths() * -* 29-Mar-89 : - added declaration of putmapping() * -* 4-Apr-89 : - added declarations of triples, quadruples, adjtriang * -* - only define ERRFILE if not in nauty.h * -* 25-Apr-89 : - added declarations of cellquads,distances,getbigcells * -* 26-Apr-89 : - added declarations of indsets,cliques,cellquins * -* - removed declarations of ptncode and equitable * -* 27-Apr-89 : - added declaration of putquotient * -* 18-Aug-89 : - added new arg to putset, and changed mathon * -* 2-Mar-90 : - added declarations of celltrips, cellcliq, cellind * -* - changed declarations to use EXTPROC * -* 12-Mar-90 : - added changes for Cray version * -* 20-Mar-90 : - added changes for THINK version * -* 27-Mar-90 : - split SYS_MSDOS into SYS_PCMS4 and SYS_PCMS5 * -* 13-Oct-90 : changes for version 1.6 : * -* - changed CPUTIME to use HZ on Unix for times() * -* 14-Oct-90 : - added SYS_APOLLO variant * -* 19-Oct-90 : - changed CPUTIME defs for BSDUNIX to avoid conficting * -* declarations of size_t and ptrdiff_t in gcc * -* 27-Aug-92 : changes for version 1.7 : * -* - added SYS_IBMC variant * -* - removed workaround for bad gcc installation * -* 5-Jun-93 : changes for version 1.8 : * -* - changed CRAY version of CPUTIME to use CLK_TCK * -* if HZ could not be found (making 1.7+) * -* 30-Jul-93 : - added SYS_ALPHA variant * -* 17-Sep-93 : changes for version 1.9 : * -* - declared adjacencies() * -* 24-Feb-94 : changes for version 1.10 : * -* - added version SYS_AMIGAAZT (making 1.9+) * -* 19-Apr-95 : - added C++ prototype wrapper * -* 6-Mar-96 : - added SYS_ALPHA32 code * -* 23-Jul-96 : changes for version 2.0 : * -* - changed readstring() declaration * -* - removed DYNALLOC definition * -* - added sublabel() definition * -* 15-Aug-96 : - added sethash() definition * -* 30-Aug-96 : - added KRAN and D. Knuth routines * -* 16-Sep-96 : - fixed the above! * -* 7-Feb-96 : - declared nautinv_null() and setnbhd() * -* 4-Sep-97 : - arg of time() is type time_t*, was long* * -* 22-Sep-97 : - defined fileno() and time_t for SYS_PCTURBO * -* 10-Dec-97 : - revised KRAN for new rng.c from Knuth * -* 18-Feb-98 : - changed time() to time_t for Unix * -* 21-Oct-98 : - changed short to shortish as needed * -* 9-Jan-00 : - declared nautinv_check() and naututil_check() * -* 16-Nov-00 : - applied changes logged in nauty.h * -* 22-Apr-01 : changes for version 2.1 : * -* - prototypes for nautinv.c are now in nautinv.h * -* - CPUTIME for UNIX uses CLK_TCK (needs revision!) * -* 2-Jun-01 : - prototype for converse() * -* 18-Oct-01 : - complete revision; sysdeps in separate files * -* 28-Aug-02 : changes for version 2.2 : * -* - revised for autoconf * -* 17-Nov-02 : added explicit "extern" where it was implicit before * -* 11-Apr-02 : added rangraph2() * -* 10-Sep-07 : Define CPUTIME=0.0 for hosts that don't provide it * -* 4-Nov-09 : added readgraph_sg(), putgraph_sg(), putcanon_sg() * -* 10-Nov-09 : removed types shortish and permutation * -* 14-Nov-09 : added relabel_sg(), copy_sg(), putdegs_sg(), * -* sublabel_sg() * -* 19-Nov-09 : added individualise() * -* 20-Nov-09 : added hashgraph_sg(), listhash(), hashgraph() * -* 19-Dec-09 : added ranreg(), rangraph2_sg() * -* 5-Jun-10 : added mathon_sg() and converse_sg() * -* 10-Jun-10 : added putquotient_sg() and complement_sg() * -* 15-Jan-12 : added TLS_ATTR to static declarations * -* 3-Mar-12 : added putorbitsplus() and putset_firstbold() * -* 17-Mar-12 : include naurng.h and remove redundant lines * -* * -* ++++++ This file is automatically generated, don't edit it by hand! ++++++ -* * -*****************************************************************************/ - -#include "nauty.h" /* which includes stdio.h */ -#include "nausparse.h" -#include "naurng.h" -/* At this point we can assume that , , , - , or and if necessary have - been included if they exist. */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void complement(graph*,int,int); -extern void converse(graph*,int,int); -extern void converse_sg(sparsegraph*, sparsegraph*); -extern void copycomment(FILE*,FILE*,int); -extern void complement_sg(sparsegraph*, sparsegraph*); -extern void flushline(FILE*); -extern void fixit(int*,int*,int*,int,int); -extern int getint(FILE*); -extern long hash(set*,long,int); -extern long hashgraph(graph*,int,int,long); -extern long hashgraph_sg(sparsegraph*,long); -extern void individualise(int*,int*,int,int,int*,int*,int); -extern long listhash(int*,int,long); -extern void mathon(graph*,int,int,graph*,int,int); -extern void mathon_sg(sparsegraph*,sparsegraph*); -extern void naututil_check(int,int,int,int); -extern void naututil_freedyn(void); -extern void putcanon(FILE*,int*,graph*,int,int,int); -extern void putcanon_sg(FILE*,int*,sparsegraph*,int); -extern void putdegs(FILE*,graph*,int,int,int); -extern void putdegs_sg(FILE*,sparsegraph*,int); -extern void putgraph(FILE*,graph*,int,int,int); -extern void putgraph_sg(FILE*,sparsegraph*,int); -extern void putmapping(FILE*,int*,int,int*,int,int,int); -extern void putorbits(FILE*,int*,int,int); -extern void putorbitsplus(FILE*,int*,int,int); -extern void putptn(FILE*,int*,int*,int,int,int); -extern void putquotient(FILE*,graph*,int*,int*,int,int,int,int); -extern void putquotient_sg(FILE*,sparsegraph*,int*,int*,int,int); -extern void putset(FILE*,set*,int*,int,int,boolean); -extern void putset_firstbold(FILE*,set*,int*,int,int,boolean); -extern void rangraph(graph*,boolean,int,int,int); -extern void rangraph2(graph*,boolean,int,int,int,int); -extern void rangraph2_sg(sparsegraph*,boolean,int,int,int); -extern void ranreg_sg(sparsegraph *sg, int degree, int n); -extern void ranperm(int*,int); -extern void readgraph(FILE*,graph*,boolean,boolean,boolean,int,int,int); -extern void readgraph_sg(FILE*,sparsegraph*,boolean,boolean,int,int); -extern boolean readinteger(FILE*,int*); -extern void readperm(FILE*,int*,boolean,int); -extern void readptn(FILE*,int*,int*,int*,boolean,int); -extern void readvperm(FILE*,int*,boolean,int,int*); -extern boolean readstring(FILE*,char*,int); -extern void relabel(graph*,int*,int*,graph*,int,int); -extern void relabel_sg(sparsegraph*,int*,int*,sparsegraph*); -extern long sethash(set*,int,long,int); -extern int setinter(set*,set*,int); -extern int setsize(set*,int); -extern void sublabel(graph*,int*,int,graph*,int,int); -extern void sublabel_sg(sparsegraph*,int*,int,sparsegraph*); -extern void unitptn(int*,int*,int*,int); - -#ifdef __cplusplus -} -#endif - -#define MAXREG 8 /* Used to limit ranreg_sg() degree */ - -#define PROMPTFILE stdout /* where to write prompts */ -#ifndef ERRFILE -#define ERRFILE stderr /* where to write error messages */ -#endif -#define MAXIFILES 10 /* how many input files can be open at once */ -#define EXIT exit(0) /* how to stop normally */ -#define DEFEXT ".dre" /* extension for dreadnaut files */ - -/************************************************************************* - The following macros may represent differences between system. This - file contains the UNIX/POSIX editions. For other systems, a separate - file of definitions is read in first. That file should define the - variables NAUTY_*_DEFINED for sections that are to replace the UNIX - versions. See the provided examples for more details. - - If your system does not have a predefined macro you can use to cause - a definitions file to be read, you have to make up one and arrange for - it to be defined when this file is read. - - The system-dependent files can also redefine the macros just ahead of - this comment. -**************************************************************************/ - -#ifdef __weirdmachine__ -#include "weird.h" /* Some weird machine (ILLUSTRATION ONLY) */ -#endif - -/*************************************************************************/ - -#ifndef NAUTY_PROMPT_DEFINED -#if HAVE_ISATTY -#define DOPROMPT(fp) (isatty(fileno(fp)) && isatty(fileno(PROMPTFILE))) -#else -#define DOPROMPT(fp) (curfile==0) -#endif -#endif /*NAUTY_PROMPT_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_OPEN_DEFINED -#define OPENOUT(fp,name,append) fp = fopen(name,(append)?"a":"w") -#endif /*NAUTY_OPEN_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_CPU_DEFINED -#if HAVE_TIMES -#include -#define CPUDEFS static TLS_ATTR struct tms timebuffer; -#ifndef CLK_TCK -#include -#endif -#if !defined(CLK_TCK) && defined(_SC_CLK_TCK) -#define CLK_TCK sysconf(_SC_CLK_TCK) -#endif -#ifndef CLK_TCK -#define CLK_TCK 60 -#endif -#define CPUTIME (times(&timebuffer),\ - (double)(timebuffer.tms_utime + timebuffer.tms_stime) / CLK_TCK) -#else -#if HAVE_GETRUSAGE -#include -#include -#define CPUDEFS struct rusage ruse; -#define CPUTIME (getrusage(RUSAGE_SELF,&ruse),\ - ruse.ru_utime.tv_sec + ruse.ru_stime.tv_sec + \ - 1e-6 * (ruse.ru_utime.tv_usec + ruse.ru_stime.tv_usec)) -#endif -#endif - -#ifndef CPUTIME -#define CPUTIME 0.0 -#endif - -#endif /*NAUTY_CPU_DEFINED*/ - -/*************************************************************************/ - -#ifndef NAUTY_SEED_DEFINED -#if HAVE_GETTIMEOFDAY -#include -#define INITSEED \ -{struct timeval nauty_tv; \ - struct timezone nauty_tz; \ - gettimeofday(&nauty_tv,&nauty_tz); \ - seed = ((nauty_tv.tv_sec<<10) + (nauty_tv.tv_usec>>10)) & 0x7FFFFFFFL;} -#else -#if HAVE_TIME -#include -#define INITSEED seed = ((time((time_t*)NULL)<<1) | 1) & 0x7FFFFFFFL -#endif -#endif -#endif /*NAUTY_SEED_DEFINED*/ - -/* ++++++ This file is automatically generated, don't edit it by hand! ++++++ */ diff --git a/tools/nauty25r9_mac/naututil.o b/tools/nauty25r9_mac/naututil.o deleted file mode 100644 index 4939272b22f01f916d5bb9b039a0ec7f3ae59eac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54700 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 diff --git a/tools/nauty25r9_mac/naututil1.o b/tools/nauty25r9_mac/naututil1.o deleted file mode 100644 index c5f51887550ad1e508038fcaec7db764fc50994e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51164 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 */ -#define HAVE_SYSTYPES_H @header_sys_types_h@ /* */ -#define HAVE_STDDEF_H @header_stddef_h@ /* */ -#define HAVE_STDLIB_H @header_stdlib_h@ /* */ -#define HAVE_STRING_H @header_string_h@ /* */ -#define MALLOC_DEC @malloc_dec@ /* 1 = malloc() is declared in stdlib.h, */ - /* 2 = in malloc.h, 0 = in neither place */ -#define HAS_MATH_INF @has_math_inf@ /* INFINITY is defined in math.h or */ - /* some system header likely to be used */ -#define HAS_STDIO_UNLOCK @stdio_nolock@ /* Whether there are getc_unlocked, */ - /* putc_unlocked,flockfile and funlockfile*/ - -#define DEFAULT_WORDSIZE @default_wordsize@ -#define SIZEOF_INT @ac_cv_sizeof_int@ -#define SIZEOF_LONG @ac_cv_sizeof_long@ -#define SIZEOF_LONG_LONG @ac_cv_sizeof_long_long@ /* 0 if nonexistent */ - -#define HAVE_CONST @have_const@ /* compiler properly supports const */ - -#define HAVE_TLS @have_tls@ /* have storage attribute for thread-local */ -#define TLS_ATTR @ac_cv_tls@ /* if so, what it is. if not, empty */ - -#define USE_ANSICONTROLS @have_ansicontrols@ - /* whether --enable-ansicontrols is used */ - -#define _FILE_OFFSET_BITS @ac_cv_sys_file_offset_bits@ -#if _FILE_OFFSET_BITS == 64 -#define _LARGEFILE_SOURCE -#else -#undef _FILE_OFFSET_BITS -#endif - -/* Support of gcc extensions __builtin_clz, __builtin_clzl, __builtin_clzll */ -#define HAVE_CLZ @have_clz@ -#define HAVE_CLZL @have_clzl@ -#define HAVE_CLZLL @have_clzll@ - -/*==================================================================*/ - -/* The following line must be uncommented for compiling into Magma. */ -/* #define NAUTY_IN_MAGMA */ - -#ifdef NAUTY_IN_MAGMA -#include "defs.h" -#include "system.h" -#include "bs.h" -#define OLDEXTDEFS -#else -#include -#define P_(x) x -#endif - -#if defined(__cray) || defined(__cray__) || defined(cray) -#define SYS_CRAY /* Cray UNIX, portable or standard C */ -#endif - -#if defined(__unix) || defined(__unix__) || defined(unix) -#define SYS_UNIX -#endif - -#if !HAVE_CONST -#define const -#endif - -/***************************************************************************** -* * -* AUTHOR: Brendan D. McKay * -* Research School of Computer Science * -* Australian National University * -* Canberra, ACT 0200, Australia * -* phone: +61 2 6125 3845 fax: +61 2 6125 0010 * -* email: bdm@cs.anu.edu.au * -* * -* Nauty is copyright (1984-2013) Brendan McKay. All rights reserved. * -* Permission -* is hereby given for use and/or distribution with the exception of * -* sale for profit or application with nontrivial military significance. * -* You must not remove this copyright notice, and you must document any * -* changes that you make to this program. * -* This software is subject to this copyright only, irrespective of * -* any copyright attached to any package of which this is a part. * -* * -* This program is only provided "as is". No responsibility will be taken * -* by the author, his employer or his pet rabbit* for any misfortune which * -* befalls you because of its use. I don't think it will delete all your * -* files, burn down your computer room or turn your children against you, * -* but if it does: stiff cheddar. On the other hand, I very much welcome * -* bug reports, or at least I would if there were any bugs. * -* * RIP, 1989 * -* Traces is copyright Adolfo Piperno (2011-). * -* * -* Reference manual: * -* B. D. McKay and A. Piperno, nauty User's Guide (Version 2.5), * -* http://pallini.di.uniroma1.it * -* http://cs.anu.edu.au/~bdm/nauty/ * -* * -* CHANGE HISTORY * -* 10-Nov-87 : final changes for version 1.2 * -* 5-Dec-87 : renamed to version 1.3 (no changes to this file) * -* 28-Sep-88 : added PC Turbo C support, making version 1.4 * -* 23-Mar-89 : changes for version 1.5 : * -* - reworked M==1 code * -* - defined NAUTYVERSION string * -* - made NAUTYH_READ to allow this file to be read twice * -* - added optional ANSI function prototypes * -* - added validity check for WORDSIZE * -* - added new fields to optionblk structure * -* - updated DEFAULTOPTIONS to add invariants fields * -* - added (set*) cast to definition of GRAPHROW * -* - added definition of ALLOCS and FREES * -* 25-Mar-89 : - added declaration of new function doref() * -* - added UNION macro * -* 29-Mar-89 : - reduced the default MAXN for small machines * -* - removed OUTOFSPACE (no longer used) * -* - added SETDIFF and XOR macros * -* 2-Apr-89 : - extended statsblk structure * -* 4-Apr-89 : - added IS_* macros * -* - added ERRFILE definition * -* - replaced statsblk.outofspace by statsblk.errstatus * -* 5-Apr-89 : - deleted definition of np2vector (no longer used) * -* - introduced EMPTYSET macro * -* 12-Apr-89 : - eliminated MARK, UNMARK and ISMARKED (no longer used) * -* 18-Apr-89 : - added MTOOBIG and CANONGNIL * -* 12-May-89 : - made ISELEM1 and ISELEMENT return 0 or 1 * -* 2-Mar-90 : - added EXTPROC macro and used it * -* 12-Mar-90 : - added SYS_CRAY, with help from N. Sloane and A. Grosky * -* - added dummy groupopts field to optionblk * -* - select some ANSI things if __STDC__ exists * -* 20-Mar-90 : - changed default MAXN for Macintosh versions * -* - created SYS_MACTHINK for Macintosh THINK compiler * -* 27-Mar-90 : - split SYS_MSDOS into SYS_PCMS4 and SYS_PCMS5 * -* 13-Oct-90 : changes for version 1.6: * -* - fix definition of setword for WORDSIZE==64 * -* 14-Oct-90 : - added SYS_APOLLO version to avoid compiler bug * -* 15-Oct-90 : - improve detection of ANSI conformance * -* 17-Oct-90 : - changed temp name in EMPTYSET to avoid A/UX bug * -* 16-Apr-91 : changes for version 1.7: * -* - made version SYS_PCTURBO use free(), not cfree() * -* 2-Sep-91 : - noted that SYS_PCMS5 also works for Quick C * -* - moved MULTIPLY to here from nauty.c * -* 12-Jun-92 : - changed the top part of this comment * -* 27-Aug-92 : - added version SYS_IBMC, thanks to Ivo Duentsch * -* 5-Jun-93 : - renamed to version 1.7+, only change in naututil.h * -* 29-Jul-93 : changes for version 1.8: * -* - fixed error in default 64-bit version of FIRSTBIT * -* (not used in any version before ALPHA) * -* - installed ALPHA version (thanks to Gordon Royle) * -* - defined ALLOCS,FREES for SYS_IBMC * -* 3-Sep-93 : - make calloc void* in ALPHA version * -* 17-Sep-93 : - renamed to version 1.9, * -* changed only dreadnaut.c and nautinv.c * -* 24-Feb-94 : changes for version 1.10: * -* - added version SYS_AMIGAAZT, thanks to Carsten Saager * -* (making 1.9+) * -* 19-Apr-95 : - added prototype wrapper for C++, * -* thanks to Daniel Huson * -* 5-Mar-96 : - added SYS_ALPHA32 version (32-bit setwords on Alpha) * -* 13-Jul-96 : changes for version 2.0: * -* - added dynamic allocation * -* - ERRFILE must be defined * -* - added FLIPELEM1 and FLIPELEMENT macros * -* 13-Aug-96 : - added SWCHUNK? macros * -* - added TAKEBIT macro * -* 28-Nov-96 : - include sys/types.h if not ANSI (tentative!) * -* 24-Jan-97 : - and stdlib.h if ANSI * -* - removed use of cfree() from UNIX variants * -* 25-Jan-97 : - changed options.getcanon from boolean to int * -* Backwards compatibility is ok, as boolean and int * -* are the same. Now getcanon=2 means to get the label * -* and not care about the group. Sometimes faster. * -* 6-Feb-97 : - Put in #undef for FALSE and TRUE to cope with * -* compilers that illegally predefine them. * -* - declared nauty_null and nautil_null * -* 2-Jul-98 : - declared ALLBITS * -* 21-Oct-98 : - allow WORDSIZE==64 using unsigned long long * -* - added BIGNAUTY option for really big graphs * -* 11-Dec-99 : - made bit, leftbit and bytecount static in each file * -* 9-Jan-00 : - declared nauty_check() and nautil_check() * -* 12-Feb-00 : - Used #error for compile-time checks * -* - Added DYNREALLOC * -* 4-Mar-00 : - declared ALLMASK(n) * -* 27-May-00 : - declared CONDYNFREE * -* 28-May-00 : - declared nautil_freedyn() * -* 16-Aug-00 : - added OLDNAUTY and changed canonical labelling * -* 16-Nov-00 : - function prototypes are now default and unavoidable * -* - removed UPROC, now assume all compilers know void * -* - removed nvector, now just int (as it always was) * -* - added extra parameter to targetcell() * -* - removed old versions which were only to skip around * -* bugs that should have been long fixed: * -* SYS_APOLLO and SYS_VAXBSD. * -* - DEFAULTOPIONS now specifies no output * -* - Removed obsolete SYS_MACLSC version * -* 21-Apr-01 : - Added code to satisfy compilation into Magma. This * -* is activated by defining NAUTY_IN_MAGMA above. * -* - The *_null routines no longer exist * -* - Default maxinvarlevel is now 1. (This has no effect * -* unless an invariant is specified.) * -* - Now labelorg has a concrete declaration in nautil.c * -* and EXTDEFS is not needed * -* 5-May-01 : - NILFUNCTION, NILSET, NILGRAPH now obsolete. Use NULL. * -* 11-Sep-01 : - setword is unsigned int in the event that UINT_MAX * -* is defined and indicates it is big enough * -* 17-Oct-01 : - major rewrite for 2.1. SYS_* variables gone! * -* Some modernity assumed, eg size_t * -* 8-Aug-02 : - removed MAKEEMPTY (use EMPTYSET instead) * -* - deleted OLDNAUTY everywhere * -* 27-Aug-02 : - converted to use autoconf. Now the original of this * -* file is nauty-h.in. Run configure to make nauty.h. * -* 20-Dec-02 : - increased INFINITY * -* some reorganization to please Magma * -* - declared nauty_freedyn() * -* 17-Nov-03 : - renamed INFINITY to NAUTY_INFINITY * -* 29-May-04 : - added definition of SETWORD_FORMAT * -* 14-Sep-04 : - extended prototypes even to recursive functions * -* 16-Oct-04 : - added DEFAULTOPTIONS_GRAPH * -* 24-Oct-04 : Starting 2.3 * -* - remove register declarations as modern compilers * -* tend to find them a nuisance * -* - Don't define the obsolete symbol INFINITY if it is * -* defined already * -* 17-Nov-04 : - make 6 counters in statsblk unsigned long * -* 17-Jan-04 : - add init() and cleanup() to dispatchvec * -* 12-Nov-05 : - Changed NAUTY_INFINITY to 2^30+2 in BIGNAUTY case * -* 22-Nov-06 : Starting 2.4 * -* - removed usertcellproc from options * -* changed bestcell to targetcell in dispatch vector * -* declare targetcell and maketargetcell * -* 29-Nov-06 : - add extraoptions to optionblk * -* - add declarations of extra_autom and extra_level * -* 10-Dec-06 : - BIGNAUTY is gone! Now permutation=shortish=int. * -* NAUTY_INFINITY only depends on whether sizeof(int)=2. * -* 27-Jun-08 : - define nauty_counter and LONG_LONG_COUNTERS * -* 30-Jun-08 : - declare version 2.4 * -* 8-Nov-09 : - final release of version 2.4; * -* 10-Nov-10 : Starting 2.5 * -* - declare shortish and permutation obsolete, now int * -* 14-Nov-10 : - SETWORDSNEEDED(n) * -* 23-May-10 : - declare densenauty() * -* 29-Jun-10 : - add PRINT_COUNTER(f,x) * -* - add DEFAULTOPTIONS_DIGRAPH() * -* 27-Mar-11 : - declare writegroupsize() * -* 14-Jan-12 : - add HAVE_TLS and TLS_ATTR * -* 21-Feb-12 : - add ENABLE_ANSI * -* 18-Mar-12 : - add COUNTER_FMT * -* 18-Aug-12 : - add ADDONEARC, ADDONEEDGE, EMPTYGRAPH * -* 29-Aug-12 : - add CLZ macros and FIRSTBITNZ * -* 19-Oct-12 : - add DEFAULT_WORDSIZE * -* 3-Jan-12 : Released 2.5rc1 * -* * -* @edit_msg@ -* * -*****************************************************************************/ - -/***************************************************************************** -* * -* 16-bit, 32-bit and 64-bit versions can be selected by defining WORDSIZE. * -* The largest graph that can be handled has MAXN vertices. * -* Both WORDSIZE and MAXN can be defined on the command line. * -* WORDSIZE must be 16, 32 or 64; MAXN must be <= NAUTY_INFINITY-2; * -* * -* With a very slight loss of efficiency (depending on platform), nauty * -* can be compiled to dynamically allocate arrays. Predefine MAXN=0 to * -* achieve this effect, which is default behaviour from version 2.0. * -* In that case, graphs of size up to NAUTY_INFINITY-2 can be handled * -* if the the memory is available. * -* * -* If only very small graphs need to be processed, use MAXN<=WORDSIZE * -* since this causes substantial code optimizations. * -* * -* Conventions and Assumptions: * -* * -* A 'setword' is the chunk of memory that is occupied by one part of * -* a set. This is assumed to be >= WORDSIZE bits in size. * -* * -* The rightmost (loworder) WORDSIZE bits of setwords are numbered * -* 0..WORDSIZE-1, left to right. It is necessary that the 2^WORDSIZE * -* setwords with the other bits zero are totally ordered under <,=,>. * -* This needs care on a 1's-complement machine. * -* * -* The int variables m and n have consistent meanings throughout. * -* Graphs have n vertices always, and sets have m setwords always. * -* * -* A 'set' consists of m contiguous setwords, whose bits are numbered * -* 0,1,2,... from left (high-order) to right (low-order), using only * -* the rightmost WORDSIZE bits of each setword. It is used to * -* represent a subset of {0,1,...,n-1} in the usual way - bit number x * -* is 1 iff x is in the subset. Bits numbered n or greater, and * -* unnumbered bits, are assumed permanently zero. * -* * -* A 'graph' consists of n contiguous sets. The i-th set represents * -* the vertices adjacent to vertex i, for i = 0,1,...,n-1. * -* * -* A 'permutation' is an array of n ints repesenting a permutation of * -* the set {0,1,...,n-1}. The value of the i-th entry is the number to * -* which i is mapped. * -* * -* If g is a graph and p is a permutation, then g^p is the graph in * -* which vertex i is adjacent to vertex j iff vertex p[i] is adjacent * -* to vertex p[j] in g. * -* * -* A partition nest is represented by a pair (lab,ptn), where lab and ptn * -* are int arrays. The "partition at level x" is the partition whose * -* cells are {lab[i],lab[i+1],...,lab[j]}, where [i,j] is a maximal * -* subinterval of [0,n-1] such that ptn[k] > x for i <= k < j and * -* ptn[j] <= x. The partition at level 0 is given to nauty by the user. * -* This is refined for the root of the tree, which has level 1. * -* * -*****************************************************************************/ - -#ifndef NAUTY_IN_MAGMA -#if HAVE_SYSTYPES_H -#include -#endif -#if HAVE_UNISTD_H -#include -#endif -#if HAVE_STDDEF_H -#include -#endif -#if HAVE_STDLIB_H -#include -#endif -#if HAVE_STRING_H -#include -#else -#include -#endif -#endif - -/* WORDSIZE is the number of set elements per setword (16, 32 or 64). - WORDSIZE and setword are defined as follows: - - DEFAULT_WORDSIZE is usually 0 but is set by the configure script - to NN if --enable-wordsize=NN is used, where NN is 16, 32 or 64. - - If WORDSIZE is not defined, but DEFAULT_WORDSIZE > 0, then set - WORDSIZE to the same value as DEFAULT_WORDSIZE. - If WORDSIZE is so far undefined, use 32 unless longs have more - than 32 bits, in which case use 64. - Define setword thus: - WORDSIZE==16 : unsigned short - WORDSIZE==32 : unsigned int unless it is too small, - in which case unsigned long - WORDSIZE==64 : the first of unsigned int, unsigned long, - unsigned long long, which is large enough. -*/ - -#ifdef NAUTY_IN_MAGMA -#undef WORDSIZE -#define WORDSIZE WORDBITS -#endif - -#ifndef WORDSIZE -#if DEFAULT_WORDSIZE > 0 -#define WORDSIZE DEFAULT_WORDSIZE -#endif -#endif - -#ifdef WORDSIZE - -#if (WORDSIZE != 16) && (WORDSIZE != 32) && (WORDSIZE != 64) - #error "WORDSIZE must be 16, 32 or 64" -#endif - -#else /* WORDSIZE undefined */ - -#if SIZEOF_LONG>4 -#define WORDSIZE 64 -#else -#define WORDSIZE 32 -#endif - -#endif /* WORDSIZE */ - -#ifdef NAUTY_IN_MAGMA -typedef t_uint setword; -#define SETWORD_INT /* Don't assume this is correct in Magma. */ - -#else /* NAUTY_IN_MAGMA */ - -#if WORDSIZE==16 -typedef unsigned short setword; -#define SETWORD_SHORT -#endif - -#if WORDSIZE==32 -#if SIZEOF_INT>=4 -typedef unsigned int setword; -#define SETWORD_INT -#else -typedef unsigned long setword; -#define SETWORD_LONG -#endif -#endif - -#if WORDSIZE==64 -#if SIZEOF_INT>=8 -typedef unsigned int setword; -#define SETWORD_INT -#else -#if SIZEOF_LONG>=8 -typedef unsigned long setword; -#define SETWORD_LONG -#else -typedef unsigned long long setword; -#define SETWORD_LONGLONG -#endif -#endif -#endif - -#endif /* NAUTY_IN_MAGMA else */ - -#if SIZEOF_LONG_LONG>=8 && SIZEOF_LONG==4 -typedef unsigned long long nauty_counter; -#define LONG_LONG_COUNTERS 1 -#define COUNTER_FMT "%llu" -#else -typedef unsigned long nauty_counter; -#define LONG_LONG_COUNTERS 0 -#define COUNTER_FMT "%lu" -#endif -#define PRINT_COUNTER(f,x) fprintf(f,COUNTER_FMT,x) - -#define NAUTYVERSIONID (25490+HAVE_TLS) /* 10000*version + HAVE_TLS */ -#define NAUTYREQUIRED NAUTYVERSIONID /* Minimum compatible version */ - -#if WORDSIZE==16 -#define NAUTYVERSION "2.5 (16 bits)" -#endif -#if WORDSIZE==32 -#define NAUTYVERSION "2.5 (32 bits)" -#endif -#if WORDSIZE==64 -#define NAUTYVERSION "2.5 (64 bits)" -#endif - -#ifndef MAXN /* maximum allowed n value; use 0 for dynamic sizing. */ -#define MAXN 0 -#define MAXM 0 -#else -#define MAXM ((MAXN+WORDSIZE-1)/WORDSIZE) /* max setwords in a set */ -#endif /* MAXN */ - -/* Starting at version 2.2, set operations work for all set sizes unless - ONE_WORD_SETS is defined. In the latter case, if MAXM=1, set ops - work only for single-setword sets. In any case, macro versions - ending with 1 work for single-setword sets and versions ending with - 0 work for all set sizes. -*/ - -#if WORDSIZE==16 -#define SETWD(pos) ((pos)>>4) /* number of setword containing bit pos */ -#define SETBT(pos) ((pos)&0xF) /* position within setword of bit pos */ -#define TIMESWORDSIZE(w) ((w)<<4) -#define SETWORDSNEEDED(n) ((((n)-1)>>4)+1) /* setwords needed for n bits */ -#endif - -#if WORDSIZE==32 -#define SETWD(pos) ((pos)>>5) -#define SETBT(pos) ((pos)&0x1F) -#define TIMESWORDSIZE(w) ((w)<<5) -#define SETWORDSNEEDED(n) ((((n)-1)>>5)+1) -#endif - -#if WORDSIZE==64 -#define SETWD(pos) ((pos)>>6) -#define SETBT(pos) ((pos)&0x3F) -#define TIMESWORDSIZE(w) ((w)<<6) /* w*WORDSIZE */ -#define SETWORDSNEEDED(n) ((((n)-1)>>6)+1) -#endif - -#ifdef NAUTY_IN_MAGMA -#define BITT bs_bit -#else -#define BITT bit -#endif - -#define ADDELEMENT1(setadd,pos) (*(setadd) |= BITT[pos]) -#define DELELEMENT1(setadd,pos) (*(setadd) &= ~BITT[pos]) -#define FLIPELEMENT1(setadd,pos) (*(setadd) ^= BITT[pos]) -#define ISELEMENT1(setadd,pos) ((*(setadd) & BITT[pos]) != 0) -#define EMPTYSET1(setadd,m) *(setadd) = 0; -#define GRAPHROW1(g,v,m) ((set*)(g)+(v)) -#define ADDONEARC1(g,v,w,m) (g)[v] |= BITT[w] -#define ADDONEEDGE1(g,v,w,m) { ADDONEARC1(g,v,w,m); ADDONEARC1(g,w,v,m); } -#define EMPTYGRAPH1(g,m,n) EMPTYSET0(g,n) /* really EMPTYSET0 */ - -#define ADDELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] |= BITT[SETBT(pos)]) -#define DELELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] &= ~BITT[SETBT(pos)]) -#define FLIPELEMENT0(setadd,pos) ((setadd)[SETWD(pos)] ^= BITT[SETBT(pos)]) -#define ISELEMENT0(setadd,pos) (((setadd)[SETWD(pos)] & BITT[SETBT(pos)]) != 0) -#define EMPTYSET0(setadd,m) \ - {setword *es; \ - for (es = (setword*)(setadd)+(m); --es >= (setword*)(setadd);) *es=0;} -#define GRAPHROW0(g,v,m) ((set*)(g) + (m)*(size_t)(v)) -#define ADDONEARC0(g,v,w,m) ADDELEMENT0(GRAPHROW0(g,v,m),w) -#define ADDONEEDGE0(g,v,w,m) { ADDONEARC0(g,v,w,m); ADDONEARC0(g,w,v,m); } -#define EMPTYGRAPH0(g,m,n) EMPTYSET0(g,(m)*(size_t)(n)) - -#if (MAXM==1) && defined(ONE_WORD_SETS) -#define ADDELEMENT ADDELEMENT1 -#define DELELEMENT DELELEMENT1 -#define FLIPELEMENT FLIPELEMENT1 -#define ISELEMENT ISELEMENT1 -#define EMPTYSET EMPTYSET1 -#define GRAPHROW GRAPHROW1 -#define ADDONEARC ADDONEARC1 -#define ADDONEEDGE ADDONEEDGE1 -#define EMPTYGRAPH EMPTYGRAPH1 -#else -#define ADDELEMENT ADDELEMENT0 -#define DELELEMENT DELELEMENT0 -#define FLIPELEMENT FLIPELEMENT0 -#define ISELEMENT ISELEMENT0 -#define EMPTYSET EMPTYSET0 -#define GRAPHROW GRAPHROW0 -#define ADDONEARC ADDONEARC0 -#define ADDONEEDGE ADDONEEDGE0 -#define EMPTYGRAPH EMPTYGRAPH0 -#endif - - -#ifdef NAUTY_IN_MAGMA -#undef EMPTYSET -#define EMPTYSET(setadd,m) {t_int _i; bsp_makeempty(setadd,m,_i);} -#endif - -#define NOTSUBSET(word1,word2) ((word1) & ~(word2)) /* test if the 1-bits - in setword word1 do not form a subset of those in word2 */ -#define INTERSECT(word1,word2) ((word1) &= (word2)) /* AND word2 into word1 */ -#define UNION(word1,word2) ((word1) |= (word2)) /* OR word2 into word1 */ -#define SETDIFF(word1,word2) ((word1) &= ~(word2)) /* - word2 into word1 */ -#define XOR(word1,word2) ((word1) ^= (word2)) /* XOR word2 into word1 */ -#define ZAPBIT(word,x) ((word) &= ~BITT[x]) /* delete bit x in setword */ -#define TAKEBIT(iw,w) {(iw) = FIRSTBITNZ(w); (w) ^= BITT[iw];} - -#ifdef SETWORD_LONGLONG -#define MSK3232 0xFFFFFFFF00000000ULL -#define MSK1648 0xFFFF000000000000ULL -#define MSK0856 0xFF00000000000000ULL -#define MSK1632 0x0000FFFF00000000ULL -#define MSK0840 0xFF0000000000ULL -#define MSK1616 0xFFFF0000ULL -#define MSK0824 0xFF000000ULL -#define MSK0808 0xFF00ULL -#define MSK63C 0x7FFFFFFFFFFFFFFFULL -#define MSK31C 0x7FFFFFFFULL -#define MSK15C 0x7FFFULL -#define MSK64 0xFFFFFFFFFFFFFFFFULL -#define MSK32 0xFFFFFFFFULL -#define MSK16 0xFFFFULL -#define MSK8 0xFFULL -#endif - -#ifdef SETWORD_LONG -#define MSK3232 0xFFFFFFFF00000000UL -#define MSK1648 0xFFFF000000000000UL -#define MSK0856 0xFF00000000000000UL -#define MSK1632 0x0000FFFF00000000UL -#define MSK0840 0xFF0000000000UL -#define MSK1616 0xFFFF0000UL -#define MSK0824 0xFF000000UL -#define MSK0808 0xFF00UL -#define MSK63C 0x7FFFFFFFFFFFFFFFUL -#define MSK31C 0x7FFFFFFFUL -#define MSK15C 0x7FFFUL -#define MSK64 0xFFFFFFFFFFFFFFFFUL -#define MSK32 0xFFFFFFFFUL -#define MSK16 0xFFFFUL -#define MSK8 0xFFUL -#endif - -#if defined(SETWORD_INT) || defined(SETWORD_SHORT) -#define MSK3232 0xFFFFFFFF00000000U -#define MSK1648 0xFFFF000000000000U -#define MSK0856 0xFF00000000000000U -#define MSK1632 0x0000FFFF00000000U -#define MSK0840 0xFF0000000000U -#define MSK1616 0xFFFF0000U -#define MSK0824 0xFF000000U -#define MSK0808 0xFF00U -#define MSK63C 0x7FFFFFFFFFFFFFFFU -#define MSK31C 0x7FFFFFFFU -#define MSK15C 0x7FFFU -#define MSK64 0xFFFFFFFFFFFFFFFFU -#define MSK32 0xFFFFFFFFU -#define MSK16 0xFFFFU -#define MSK8 0xFFU -#endif - -#if defined(SETWORD_LONGLONG) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04llx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08llx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16llx" -#endif -#endif - -#if defined(SETWORD_LONG) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04lx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08lx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16lx" -#endif -#endif - -#if defined(SETWORD_INT) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04x" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08x" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16x" -#endif -#endif - -#if defined(SETWORD_SHORT) -#if WORDSIZE==16 -#define SETWORD_FORMAT "%04hx" -#endif -#if WORDSIZE==32 -#define SETWORD_FORMAT "%08hx" -#endif -#if WORDSIZE==64 -#define SETWORD_FORMAT "%16hx" -#endif -#endif - -/* POPCOUNT(x) = number of 1-bits in a setword x - FIRSTBIT(x) = number of first 1-bit in non-zero setword (0..WORDSIZE-1) - or WORDSIZE if x == 0 - FIRSTBITNZ(x) = as FIRSTBIT(x) but assumes x is not zero - BITMASK(x) = setword whose rightmost WORDSIZE-x-1 (numbered) bits - are 1 and the rest 0 (0 <= x < WORDSIZE) - (I.e., bits 0..x are unselected and the rest selected.) - ALLBITS = all (numbered) bits in a setword */ - -#if WORDSIZE==64 -#define POPCOUNT(x) (bytecount[(x)>>56 & 0xFF] + bytecount[(x)>>48 & 0xFF] \ - + bytecount[(x)>>40 & 0xFF] + bytecount[(x)>>32 & 0xFF] \ - + bytecount[(x)>>24 & 0xFF] + bytecount[(x)>>16 & 0xFF] \ - + bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK3232 ? \ - (x) & MSK1648 ? \ - (x) & MSK0856 ? \ - 0+leftbit[((x)>>56) & MSK8] : \ - 8+leftbit[(x)>>48] \ - : (x) & MSK0840 ? \ - 16+leftbit[(x)>>40] : \ - 24+leftbit[(x)>>32] \ - : (x) & MSK1616 ? \ - (x) & MSK0824 ? \ - 32+leftbit[(x)>>24] : \ - 40+leftbit[(x)>>16] \ - : (x) & MSK0808 ? \ - 48+leftbit[(x)>>8] : \ - 56+leftbit[x]) -#define BITMASK(x) (MSK63C >> (x)) -#define ALLBITS MSK64 -#define SWCHUNK0(w) ((long)((w)>>48)&0xFFFFL) -#define SWCHUNK1(w) ((long)((w)>>32)&0xFFFFL) -#define SWCHUNK2(w) ((long)((w)>>16)&0xFFFFL) -#define SWCHUNK3(w) ((long)(w)&0xFFFFL) -#endif - -#if WORDSIZE==32 -#define POPCOUNT(x) (bytecount[(x)>>24 & 0xFF] + bytecount[(x)>>16 & 0xFF] \ - + bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK1616 ? ((x) & MSK0824 ? \ - leftbit[((x)>>24) & MSK8] : 8+leftbit[(x)>>16]) \ - : ((x) & MSK0808 ? 16+leftbit[(x)>>8] : 24+leftbit[x])) -#define BITMASK(x) (MSK31C >> (x)) -#define ALLBITS MSK32 -#define SWCHUNK0(w) ((long)((w)>>16)&0xFFFFL) -#define SWCHUNK1(w) ((long)(w)&0xFFFFL) -#endif - -#if WORDSIZE==16 -#define POPCOUNT(x) (bytecount[(x)>>8 & 0xFF] + bytecount[(x) & 0xFF]) -#define FIRSTBIT(x) ((x) & MSK0808 ? leftbit[((x)>>8) & MSK8] : 8+leftbit[x]) -#define BITMASK(x) (MSK15C >> (x)) -#define ALLBITS MSK16 -#define SWCHUNK0(w) ((long)(w)&0xFFFFL) -#endif - -#if defined(SETWORD_LONGLONG) && HAVE_CLZLL -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clzll(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif -#if defined(SETWORD_LONG) && HAVE_CLZL -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clzl(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif -#if defined(SETWORD_INT) && HAVE_CLZ -#undef FIRSTBIT -#undef FIRSTBITNZ -#define FIRSTBITNZ(x) __builtin_clz(x) -#define FIRSTBIT(x) ((x) ? FIRSTBITNZ(x) : WORDSIZE) -#endif - -#ifndef FIRSTBITNZ -#define FIRSTBITNZ FIRSTBIT -#endif - -#ifdef SYS_CRAY -#undef POPCOUNT -#undef FIRSTBIT -#undef BITMASK -#define POPCOUNT(x) _popcnt(x) -#define FIRSTBIT(x) _leadz(x) -#define BITMASK(x) _mask(65+(x)) -#endif - -#ifdef NAUTY_IN_MAGMA -#undef POPCOUNT -#undef FIRSTBIT -#undef BITMASK -#define POPCOUNT(x) bs_popcount(x) -#define FIRSTBIT(x) bs_firstbit(x) -#define BITMASK(x) bs_bitmask(x) -#endif - -#define ALLMASK(n) ((n)?~BITMASK((n)-1):(setword)0) /* First n bits */ - - /* various constants: */ -#undef FALSE -#undef TRUE -#define FALSE 0 -#define TRUE 1 - -#if SIZEOF_INT>=4 -#define NAUTY_INFINITY 0x40000002 -#else -#define NAUTY_INFINITY 0x7FFF -#endif - -/* The following four types are obsolete, use int in new code. */ -typedef int shortish; -typedef shortish permutation; -typedef int nvector,np2vector; - -/* For backward compatibility: */ -#if !HAS_MATH_INF && !defined(INFINITY) -#define INFINITY NAUTY_INFINITY -#endif - -#if MAXN > NAUTY_INFINITY-2 - #error MAXN must be at most NAUTY_INFINITY-2 -#endif - - /* typedefs for sets, graphs, permutations, etc.: */ - -typedef int boolean; /* boolean MUST be the same as int */ - -#define UPROC void /* obsolete */ - -typedef setword set,graph; -#ifdef NAUTY_IN_MAGMA -typedef graph nauty_graph; -typedef set nauty_set; -#endif - -typedef struct -{ - double grpsize1; /* size of group is */ - int grpsize2; /* grpsize1 * 10^grpsize2 */ -#define groupsize1 grpsize1 /* for backwards compatibility */ -#define groupsize2 grpsize2 - int numorbits; /* number of orbits in group */ - int numgenerators; /* number of generators found */ - int errstatus; /* if non-zero : an error code */ -#define outofspace errstatus; /* for backwards compatibility */ - unsigned long numnodes; /* total number of nodes */ - unsigned long numbadleaves; /* number of leaves of no use */ - int maxlevel; /* maximum depth of search */ - unsigned long tctotal; /* total size of all target cells */ - unsigned long canupdates; /* number of updates of best label */ - unsigned long invapplics; /* number of applications of invarproc */ - unsigned long invsuccesses; /* number of successful uses of invarproc() */ - int invarsuclevel; /* least level where invarproc worked */ -} statsblk; - -/* codes for errstatus field (see nauty.c for more accurate descriptions): */ -#define NTOOBIG 1 /* n > MAXN or n > WORDSIZE*m */ -#define MTOOBIG 2 /* m > MAXM */ -#define CANONGNIL 3 /* canong = NULL, but getcanon = TRUE */ - -/* manipulation of real approximation to group size */ -#define MULTIPLY(s1,s2,i) if ((s1 *= i) >= 1e10) {s1 /= 1e10; s2 += 10;} - -struct optionstruct; /* incomplete definition */ - -typedef struct -{ - boolean (*isautom) /* test for automorphism */ - (graph*,int*,boolean,int,int); - int (*testcanlab) /* test for better labelling */ - (graph*,graph*,int*,int*,int,int); - void (*updatecan) /* update canonical object */ - (graph*,graph*,int*,int,int,int); - void (*refine) /* refine partition */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - void (*refine1) /* refine partition, MAXM==1 */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - boolean (*cheapautom) /* test for easy automorphism */ - (int*,int,boolean,int); - int (*targetcell) /* decide which cell to split */ - (graph*,int*,int*,int,int,boolean,int,int,int); - void (*freedyn)(void); /* free dynamic memory */ - void (*check) /* check compilation parameters */ - (int,int,int,int); - void (*init)(graph*,graph**,graph*,graph**,int*,int*,set*, - struct optionstruct*,int*,int,int); - void (*cleanup)(graph*,graph**,graph*,graph**,int*,int*, - struct optionstruct*,statsblk*,int,int); -} dispatchvec; - -typedef struct optionstruct -{ - int getcanon; /* make canong and canonlab? */ -#define LABELONLY 2 /* new value UNIMPLEMENTED */ - boolean digraph; /* multiple edges or loops? */ - boolean writeautoms; /* write automorphisms? */ - boolean writemarkers; /* write stats on pts fixed, etc.? */ - boolean defaultptn; /* set lab,ptn,active for single cell? */ - boolean cartesian; /* use cartesian rep for writing automs? */ - int linelength; /* max chars/line (excl. '\n') for output */ - FILE *outfile; /* file for output, if any */ - void (*userrefproc) /* replacement for usual refine procedure */ - (graph*,int*,int*,int,int*,int*,set*,int*,int,int); - void (*userautomproc) /* procedure called for each automorphism */ - (int,int*,int*,int,int,int); - void (*userlevelproc) /* procedure called for each level */ - (int*,int*,int,int*,statsblk*,int,int,int,int,int,int); - void (*usernodeproc) /* procedure called for each node */ - (graph*,int*,int*,int,int,int,int,int,int); - void (*invarproc) /* procedure to compute vertex-invariant */ - (graph*,int*,int*,int,int,int,int*,int,boolean,int,int); - int tc_level; /* max level for smart target cell choosing */ - int mininvarlevel; /* min level for invariant computation */ - int maxinvarlevel; /* max level for invariant computation */ - int invararg; /* value passed to (*invarproc)() */ - dispatchvec *dispatch; /* vector of object-specific routines */ - boolean schreier; /* use random schreier method */ - void *extra_options; /* arbitrary extra options */ -#ifdef NAUTY_IN_MAGMA - boolean print_stats; /* CAYLEY specfic - GYM Sep 1990 */ - char *invarprocname; /* Magma - no longer global sjc 1994 */ - int lab_h; /* Magma - no longer global sjc 1994 */ - int ptn_h; /* Magma - no longer global sjc 1994 */ - int orbitset_h; /* Magma - no longer global sjc 1994 */ -#endif -} optionblk; - -#ifndef CONSOLWIDTH -#define CONSOLWIDTH 78 -#endif - -/* The following are obsolete. Just use NULL. */ -#define NILFUNCTION ((void(*)())NULL) /* nil pointer to user-function */ -#define NILSET ((set*)NULL) /* nil pointer to set */ -#define NILGRAPH ((graph*)NULL) /* nil pointer to graph */ - -#define DEFAULTOPTIONS_GRAPH(options) optionblk options = \ - {0,FALSE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,NULL,100,0,1,0,&dispatch_graph,FALSE,NULL} -#define DEFAULTOPTIONS_DIGRAPH(options) optionblk options = \ - {0,TRUE,FALSE,FALSE,TRUE,FALSE,CONSOLWIDTH, \ - NULL,NULL,NULL,NULL,NULL,adjacencies,100,0,999,0,&dispatch_graph,FALSE,NULL} - -#ifndef DEFAULTOPTIONS -#define DEFAULTOPTIONS DEFAULTOPTIONS_GRAPH -#endif - -#ifdef NAUTY_IN_MAGMA -#define PUTC(c,f) io_putchar(c) -#else -#ifdef IS_JAVA -extern void javastream(FILE* f,char c); -#define PUTC(c,f) javastream(f,c) -#else -#define PUTC(c,f) putc(c,f) -#endif -#endif - -/* We hope that malloc, free, realloc are declared either in - or . Otherwise we will define them. We also assume that - size_t has been defined by the time we get to define malloc(). */ -#ifndef NAUTY_IN_MAGMA -#if MALLOC_DEC==2 -#include -#endif -#if MALLOC_DEC==0 -extern void *malloc(size_t); -extern void *realloc(void*,size_t); -extern void free(void*); -#endif -#endif - -/* ALLOCS(x,y) should return a pointer (any pointer type) to x*y units of new - storage, not necessarily initialised. A "unit" of storage is defined by - the sizeof operator. x and y are integer values of type int or larger, - but x*y may well be too large for an int. The macro should cast to the - correct type for the call. On failure, ALLOCS(x,y) should return a NULL - pointer. FREES(p) should free storage previously allocated by ALLOCS, - where p is the value that ALLOCS returned. */ - -#ifdef NAUTY_IN_MAGMA -#define ALLOCS(x,y) mem_malloc((size_t)(x)*(size_t)(y)) -#define REALLOCS(p,x) mem_realloc(p,(size_t)(x)) -#define FREES(p) mem_free(p) -#else -#define ALLOCS(x,y) malloc((size_t)(x)*(size_t)(y)) -#define REALLOCS(p,x) realloc(p,(size_t)(x)) -#define FREES(p) free(p) -#endif - -/* The following macros are used by nauty if MAXN=0. They dynamically - allocate arrays of size dependent on m or n. For each array there - should be two static variables: - type *name; - size_t name_sz; - "name" will hold a pointer to an allocated array. "name_sz" will hold - the size of the allocated array in units of sizeof(type). DYNALLSTAT - declares both variables and initialises name_sz=0. DYNALLOC1 and - DYNALLOC2 test if there is enough space allocated, and if not free - the existing space and allocate a bigger space. The allocated space - is not initialised. - - In the case of DYNALLOC1, the space is allocated using - ALLOCS(sz,sizeof(type)). - In the case of DYNALLOC2, the space is allocated using - ALLOCS(sz1,sz2*sizeof(type)). - - DYNREALLOC is like DYNALLOC1 except that the old contents are copied - into the new space. realloc() is assumed. This is not currently - used by nauty or dreadnaut. - - DYNFREE frees any allocated array and sets name_sz back to 0. - CONDYNFREE does the same, but only if name_sz exceeds some limit. -*/ - -#define DYNALLSTAT(type,name,name_sz) \ - static TLS_ATTR type *name; static TLS_ATTR size_t name_sz=0 -#define DYNALLOC1(type,name,name_sz,sz,msg) \ - if ((size_t)(sz) > name_sz) \ - { if (name_sz) FREES(name); name_sz = (sz); \ - if ((name=(type*)ALLOCS(sz,sizeof(type))) == NULL) {alloc_error(msg);}} -#define DYNALLOC2(type,name,name_sz,sz1,sz2,msg) \ - if ((size_t)(sz1)*(size_t)(sz2) > name_sz) \ - { if (name_sz) FREES(name); name_sz = (size_t)(sz1)*(size_t)(sz2); \ - if ((name=(type*)ALLOCS((sz1),(sz2)*sizeof(type))) == NULL) \ - {alloc_error(msg);}} -#define DYNREALLOC(type,name,name_sz,sz,msg) \ - {if ((size_t)(sz) > name_sz) \ - { if ((name = (type*)REALLOCS(name,(sz)*sizeof(type))) == NULL) \ - {alloc_error(msg);} else name_sz = (sz);}} -#define DYNFREE(name,name_sz) if (name_sz) {FREES(name); name_sz = 0;} -#define CONDYNFREE(name,name_sz,minsz) \ - if (name_sz > (size_t)(minsz)) {FREES(name); name_sz = 0;} - -/* File to write error messages to (used as first argument to fprintf()). */ -#define ERRFILE stderr - -/* Don't use OLDEXTDEFS, it is only still here for Magma. */ -#ifdef OLDEXTDEFS -#define EXTDEF_CLASS -#ifdef EXTDEFS -#define EXTDEF_TYPE 1 -#else -#define EXTDEF_TYPE 2 -#endif -#else -#define EXTDEF_CLASS static -#define EXTDEF_TYPE 2 -#endif - -extern int labelorg; /* Declared in nautil.c */ - -#ifndef NAUTY_IN_MAGMA - /* Things equivalent to bit, bytecount, leftbit are defined - in bs.h for Magma. */ -#if EXTDEF_TYPE==1 -extern setword bit[]; -extern int bytecount[]; -extern int leftbit[]; - -#else - /* array giving setwords with single 1-bit */ -#if WORDSIZE==64 -#ifdef SETWORD_LONGLONG -EXTDEF_CLASS const -setword bit[] = {01000000000000000000000LL,0400000000000000000000LL, - 0200000000000000000000LL,0100000000000000000000LL, - 040000000000000000000LL,020000000000000000000LL, - 010000000000000000000LL,04000000000000000000LL, - 02000000000000000000LL,01000000000000000000LL, - 0400000000000000000LL,0200000000000000000LL, - 0100000000000000000LL,040000000000000000LL, - 020000000000000000LL,010000000000000000LL, - 04000000000000000LL,02000000000000000LL, - 01000000000000000LL,0400000000000000LL,0200000000000000LL, - 0100000000000000LL,040000000000000LL,020000000000000LL, - 010000000000000LL,04000000000000LL,02000000000000LL, - 01000000000000LL,0400000000000LL,0200000000000LL, - 0100000000000LL,040000000000LL,020000000000LL,010000000000LL, - 04000000000LL,02000000000LL,01000000000LL,0400000000LL, - 0200000000LL,0100000000LL,040000000LL,020000000LL, - 010000000LL,04000000LL,02000000LL,01000000LL,0400000LL, - 0200000LL,0100000LL,040000LL,020000LL,010000LL,04000LL, - 02000LL,01000LL,0400LL,0200LL,0100LL,040LL,020LL,010LL, - 04LL,02LL,01LL}; -#else -EXTDEF_CLASS const -setword bit[] = {01000000000000000000000,0400000000000000000000, - 0200000000000000000000,0100000000000000000000, - 040000000000000000000,020000000000000000000, - 010000000000000000000,04000000000000000000, - 02000000000000000000,01000000000000000000, - 0400000000000000000,0200000000000000000, - 0100000000000000000,040000000000000000,020000000000000000, - 010000000000000000,04000000000000000,02000000000000000, - 01000000000000000,0400000000000000,0200000000000000, - 0100000000000000,040000000000000,020000000000000, - 010000000000000,04000000000000,02000000000000, - 01000000000000,0400000000000,0200000000000,0100000000000, - 040000000000,020000000000,010000000000,04000000000, - 02000000000,01000000000,0400000000,0200000000,0100000000, - 040000000,020000000,010000000,04000000,02000000,01000000, - 0400000,0200000,0100000,040000,020000,010000,04000, - 02000,01000,0400,0200,0100,040,020,010,04,02,01}; -#endif -#endif - -#if WORDSIZE==32 -EXTDEF_CLASS const -setword bit[] = {020000000000,010000000000,04000000000,02000000000, - 01000000000,0400000000,0200000000,0100000000,040000000, - 020000000,010000000,04000000,02000000,01000000,0400000, - 0200000,0100000,040000,020000,010000,04000,02000,01000, - 0400,0200,0100,040,020,010,04,02,01}; -#endif - -#if WORDSIZE==16 -EXTDEF_CLASS const -setword bit[] = {0100000,040000,020000,010000,04000,02000,01000,0400,0200, - 0100,040,020,010,04,02,01}; -#endif - - /* array giving number of 1-bits in bytes valued 0..255: */ -EXTDEF_CLASS const -int bytecount[] = {0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, - 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8}; - - /* array giving position (1..7) of high-order 1-bit in byte: */ -EXTDEF_CLASS const -int leftbit[] = {8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; -#endif /* EXTDEFS */ - -#endif /* not NAUTY_IN_MAGMA */ - -#define ANSIPROT 1 -#define EXTPROC(func,args) extern func args; /* obsolete */ - -/* The following is for C++ programs that read nauty.h. Compile nauty - itself using C, not C++. */ - -#ifdef __cplusplus -extern "C" { -#endif - -extern void alloc_error(char*); -extern void breakout(int*,int*,int,int,int,set*,int); -extern boolean cheapautom(int*,int,boolean,int); -extern void doref(graph*,int*,int*,int,int*,int*,int*,set*,int*, - void(*)(graph*,int*,int*,int,int*,int*,set*,int*,int,int), - void(*)(graph*,int*,int*,int,int,int,int*,int,boolean,int,int), - int,int,int,boolean,int,int); -extern void extra_autom(int*,int); -extern void extra_level(int,int*,int*,int,int,int,int,int,int); -extern boolean isautom(graph*,int*,boolean,int,int); -extern dispatchvec dispatch_graph; -extern int itos(int,char*); -extern void fmperm(int*,set*,set*,int,int); -extern void fmptn(int*,int*,int,set*,set*,int,int); -extern void longprune(set*,set*,set*,set*,int); -extern void nauty(graph*,int*,int*,set*,int*,optionblk*, - statsblk*,set*,int,int,int,graph*); -extern void maketargetcell(graph*,int*,int*,int,set*,int*,int*,int,boolean, - int,int (*)(graph*,int*,int*,int,int,boolean,int,int,int),int,int); -extern int nextelement(set*,int,int); -extern int orbjoin(int*,int*,int); -extern void permset(set*,set*,int,int*); -extern void putstring(FILE*,char*); -extern void refine(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -extern void refine1(graph*,int*,int*,int,int*,int*,set*,int*,int,int); -extern void shortprune(set*,set*,int); -extern int targetcell(graph*,int*,int*,int,int,boolean,int,int,int); -extern int testcanlab(graph*,graph*,int*,int*,int,int); -extern void updatecan(graph*,graph*,int*,int,int,int); -extern void writeperm(FILE*,int*,boolean,int,int); -extern void nauty_freedyn(void); -extern void nauty_check(int,int,int,int); -extern void naugraph_check(int,int,int,int); -extern void nautil_check(int,int,int,int); -extern void nautil_freedyn(void); -extern void naugraph_freedyn(void); -extern void densenauty(graph*,int*,int*,int*, - optionblk*,statsblk*,int,int,graph*); -extern void writegroupsize(FILE*,double,int); - -#ifdef __cplusplus -} -#endif - -/* @edit_msg@ */ - - -#endif /* _NAUTY_H_ */ diff --git a/tools/nauty25r9_mac/nauty.a b/tools/nauty25r9_mac/nauty.a deleted file mode 100644 index 670386730f4c69f0b98ce6bbebd2a43c1ef71cc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 522600 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