lat.avm 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #
  2. # This module contains some operations on lattices. Most depend on the
  3. # assumption that the lattice has a single root.
  4. #
  5. # Copyright (C) 2007-2010 Dennis Furey
  6. #
  7. # bwi (1045)
  8. # edges (273)
  9. # fswi (2623)
  10. # fwi (2447)
  11. # grid (8385)
  12. # ldis (576)
  13. # ldiz (372)
  14. # levels (360)
  15. # lfold (595)
  16. # lmap (535)
  17. # lnodes (369)
  18. # lzip (686)
  19. # sever (1058)
  20. # swi (2682)
  21. #
  22. # compressed with granularity 91
  23. #
  24. #
  25. # This program is free software; you can redistribute it and/or modify
  26. # it under the terms of the GNU General Public License as published by
  27. # the Free Software Foundation; version 3.
  28. #
  29. # This program is distributed in the hope that it will be useful,
  30. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  31. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  32. # GNU General Public License for more details.
  33. #
  34. # You should have received a copy of the GNU General Public License
  35. # along with this program; if not, write to the Free Software Foundation,
  36. # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  37. #
  38. {iwiwNiwwhsizpgKwqQghooZhbQEoJaxsiaZEWKFnwyVRcnkjhEXppjzp\QFcWnvxiksVsgh\tIG>R\
  39. vsIxgNkseMgG>wP{OckQeFfpkqjVERahoDlwCIgQRPkoVowMNAkOfvOwAiEJXhg[GOKkzfIWWKr^Wsa
  40. Vj_Kp^kQdp>N{IwogpxgKMKZfQQ`eML[nfriPvhgRw[FIENIoV{\fKnkI\_b>[p^p`ukOgKvxgzfEti
  41. J@oIPNxl^FkKM<Bvgj_Kg<_FomFSsOWNGNjzHVnOKj_rvfd[yFeML[gdhnR^vjhjzoJfPQM?fnIXrx`
  42. k?H\]{Fob>[gYFlnh[KowOQdoOJTvvxfmUNnDo]DdawGI@<WeP^knzAOIOqijYoIdqQinp`^i`e<KND
  43. cuGF]{htoq>InOgnS`ki[{Hc^fQOE<WZp^_QELS^oDDSjXnttEUIQhk@mHjc{yvnAH]_POHo`^Xnf[w
  44. DfSrafkKOXdAhtfjLq`[a{s{Ho_EhGPW@^x]b[GnDavNnnIEVqok@rOqGhecn[a{{Yvgf`@mDN=KF\<
  45. AnfacxcFfhnOph_>hwG`sL<]vMZauCwC{[HvNDhgnXuOHdL[gMpmaTP`^XsYOQiL=Bj[FSnAqcy[yxn
  46. NpnAEoDPiE<SpwHhuJHaO@a\fxhJ<]AjcrUurCyay{yyNpeQPqIHnUj_XQDrINsFimOph<FT@Ut<ma\
  47. MYXcqE[[{{HuPh>]IQN={mNH]Nv?KFbRoug_^=B=iJ[aecjeyNS{y[yQQILPOQ<]zkIKAI@pDKP=cEN
  48. <tAT]Aof?BPEcpFYmaz[S{PePiGQFm[AAMMVxOLg[ut<Ylw^Z=bDHbd[R^[PSwy[ppQQQQP\cy_JCaW
  49. MaKX@IQYT?rA=L=ph[pfCvaymykqsQPFpiPUcuQQ=PqQzqwAJswrKnbh<@?pg<YNaqLEymYckQQIQQP
  50. <L[VIhruLcy[P{QQoxyVquAGbRt@Udaj@CPEyA{vQQIQQNExgNwPYM=A@hNYEUuWo<CPIQU^{GmMO`b
  51. qHtLZeyMyQQOQQL`PiNvQAqOPwynP{IowyzWAQ?QQAu]FbV<qIRT[bCyQQPqPJ<l=QwI[QCAFWB@hYL
  52. qoY{Oo[eeW]kWP>AMdBn@CTL[pqGIQD=DvSHzCWs`cyLy_gAaKRjoQXiwQrXnZo^UqSMIQIQqQOOQQm
  53. GMqiYXFWdE{TaiP^i`y]Ou?mtrARWPas]xaQKcP<?dBQQPqNqQP^wQNuXwEwIHjqQG`zpfmNOQsTpAn
  54. pyfiaoUye]IjmprwQHaQINFImSmgxx<cn[VxLKGmoJO?MOulSzyRb@aAIQMIDSQPQ@inAQQIQPqQ=AE
  55. LvCer_AHyX@=MAHaiMhlS`yJKiOkJVQAo_j@`[U^u?g_kcAHqPq?qGNC]QIyeYFyU^r<N@WpyDyCWdo
  56. Aa@tj^wmLuz{PpaQkOiWQQOQPPPOoOeOX@=waZyNIFcLrZvQTIOeF{_QAKVatXEzyR?a\Py=FeIPOIO
  57. RH@tAYSNezP=QsdodZ=YHirkHKQdcYYe]EGHpR<WgjpPPtkV>iIIOIPqNQGNuLcz>oSN=SqXyGqqCrU
  58. wab?RpQPdiogm{dSQJVwRiCAPiQQWNrJNEL<ByJGS__FIpz<Niano[OGYHhPeU\LPYJR>AuacyQMDP^
  59. NHiQGOGQPkHT[zo\yPP>gu\oMZs>YNSNyWmS^KpJrIKfcWqRqjTg`qQQHpnpCPSQ<][fWqU`_{Qk<@f
  60. {Utvn<Nia=YLyRieLvYfCpWOykYOlv=QOIALAYL{>jSgFWzSZ`ndmShfxmINQQPOj=ZGjpaIaZ?LhVP
  61. JXwMqM]E@qPqOOJ\cYFH[q>`xsRqvLfhYIn_=O`TX<FiIp]YRGmUSH\@>IA]XAjQ<gPpppom]QNA=kP
  62. gkiOPuQ\OyUIVgqRQsFwqJUUpAAOpL\ToahiTlOIHpqJOeM=[q@ejtsJPuP@osTPdCrQNSneOMYryQb
  63. ZADAXwsnwPQQPhhKAoLd[pcGKoKyQIJP[qJjcOxqis\jGyaYBpyqyTeMpWSMix?QQ?IILJfEAvl@Jzm
  64. sSQdRy=DQl=ANzZuiwayLPHwSaeLuqR]QpWha?RwCQM@pqPX_IGcyMeKFjjq[sILTiyZYOprzQ]T?F_
  65. TRNySNDpSuGErps<\qImZKQQQPGrH@LSf=ju>R=WA{iRUPCWjAH@pVbKl{QRfsHeNMJ]_KsGeYJADO=
  66. NQRYoINfxclB[\B`uJu[qQ`jSTkPkCoA{T`zvQNbHKqVE^EMSDQ@=d{WOsOoaMYphgOnTn\MzHwgQkQ
  67. rbQDSO=EUHl{VXbWyozs[cN=HzXIS^PZ^PcUuEMka?O_yXnoGNXxg]zJ`v{PVaYES_PPbr<ooKk?QOp
  68. NKkWQqp\RLsG=gQWhNi]PAW`jsakVYiUQI=QIJF=]xEHvOVa<qJexmbxiFo>ARJ>oStF{kq?bSsDlQN
  69. yEbps>JOmKiV@qPqSS\pKOPq<dHh?AajwIVDJa<ANQfNuM_JQKKuQx\xsoZuqygc>@eIroG]NUMYwYb
  70. pDug`pqNmQaFQ<VDE@PWaGVQJNB`n?=FaJIQwZWSqIj{OksSt[yEdUhaMuiIKP\SjaQPfEHgVEJA[ah
  71. `hiE`wtQGtqiF>=ckMGAycujqto{ZzvSkJ{coDa{Pi[p@tQL=EL\zNPtsGPNaNYLSIqiNxG\@wyY@pG
  72. ebhoPBE^[adSqcvy=[qkRkwxyXrs[PaxNezvlmYJRYFW`cVdQI\<<IaPqwPqQQXT<sjuWrwEPv^ccOF
  73. m{QUzjqmwzKSUPRQOwXkrRQO{QU{`ez>NCwluQJvHSiwM]PcRqg{{KO_Xtpfll=PwlOgmXFLo=IojV<
  74. aw\HCpnfuS?qEUSOMOLGzwFxoyIA[qOc>SnLmxI=yHK[AywWJ]YbolpJoQsS[wzPcHwqIOSDztpmGSQ
  75. bl>lSQH]cmMHZuQbftqaPqQ?PHkiwwlikZA?AqjLy[FSl\MT<A_GAYaPWNQnOQQFRt]F?ggiSQPOYw_
  76. hYsQhiMG<Ujf_FZuYL>IbL\=Z<TMdIIRVuLpIBwj^{j{SR{gz{crvjYPmzCtN[\eugKeWzwIApWJIn]
  77. RbaOH]W?EaeQPOOFjjq{WHqQ=jxX_sEYFZANBQ=n^HHiAFWisKsKKQowwhuQYSo{PyS^[sJHq=?yNUz
  78. zAtb=BASKYQWNpjjsAOT>`pZD_aYaZg^fO@ELAm[wQMPpdCOh^OQiMMeUTN^L@VlhyogkaGkaHp[U[F
  79. qkmOTjMu?qjLjMtd@wuOM`u[`\mz<B[DHqvDzryEXGaGXPQiVFbp]krRcpmPGdOu[QRNtoEa<ZtDNa=
  80. bxI?N]pAGJvPwmxlkCn^Sc{vkZkPkrLpPmzIaQHPmZBx[PLnxu{M=]ZDA\XnoSN{pkSMo\P^?hqNPfa
  81. BySN=R=RjfskYeaNAiOp_`tTaVhj=GNW\x[mNHCz\HCz\ciYMimSCOKjGwkk]>]zPp@E?ct_=z\x{`=
  82. CrLUZEOxhbRMqQNPuUEpx@dJ`V>a=wPwH_dP^qpWSNQtqQPwLKkqeH\pMaUDl[vDhE[LnCx]OFjMNY]
  83. kLDy[NioquxnxM{Loj=AtlatZP{P^[FJ[zkNNsI`yJM]gmo]MePa>D__eMh@inGVPIOf[HTIOyLJOhA
  84. F<WRZ`laxdNez``CqG^aHgmwJzIaSTFHgBS]tonFCrwonu{Fc{q@Su?=L<H[\DJ^JXiQWH{OfKFQaC^
  85. `SQQb]dZEP^?eL=P`qLx]EXyuinwOEFau=a=yB\R>SE>agqDhcuOM{FkG{a{s?t`E{X{?l^@SBNCu{a
  86. U{LJ<ExKlNLTt>jXygpqLWNWOCyzYAP=MYAO`]APqH=zuqVq<hdnUEzNhA`bWPGgfJLjIYQ?C{oGzkz
  87. TuzSqQyl@Ok?Kwz_cnpAlCy>=Ar<@A_n>HxSKnuNq=RPwNvAoKhqfdbrytqgIQF<PWaroJoFiGb[^<b
  88. DBjCHHiHivjMjd[]T^y[gqct\<SuzdEyPjx[da{m[v=]^<ct[dF[ObqD@JnHogZDobtnbaKM?mjvQK@
  89. ]JhpGeOLDGHwwX<q>ptD<HS^L=qtnFLmQFPsXx={PfuQu^uQ=zEz=Ct>Cj<<l[{F[]UatN<MTTT[<@N
  90. <aPhH@@J]YMKyI@iBit<VCAN?L_@jwER>tEwesQ_ht@\UzkuylhttfLjxH`Cn`QI]ZGOU@[zCvUy<UG
  91. HS]D_AyLu{>\LHZtDD?\<gZ[KNw\>PsQWqudb_KAdegNE`z?RqANNDhS]yn[qOSKLGkCvDEz@Lqcy@I
  92. >mx<LS<LZM@]cx<EXd<=Z\\]<BW?yRnIKAar<nEQN[XeP_SQClL^ZxnRFtt\>SAyPTSJ^C_zCDlS{G=
  93. @K^@S\z<DZEvE\T`Sgctcz?DeXQ]e`A@QMQ]ecXqrdDcjIJDG@u?q?MEEv[f\EUL[WyoticlNDuoDu{
  94. oDeRBENJ[VE@C]XJE=NpcGaZTROHqVq_<YnRdY<ztNzvG\Nmz=UD[qm{CCsN<Cl<XH\T[XH]d@D\<R<
  95. J<Et<gzx^QssIFLNa@qMIRqLoFMKYriD<d>SdTmZqFcn\SQE^Wz^?A{d^DU\=@[HsBMkLQAOj@Eo\Na
  96. =\]>zyHSFTdUx>>S_\<Abcj`eU{v\`Szd>OqH?P^Phr^=MSYa`EM@`Wv?zaN<AccyJX\@N>ELS]Xnal
  97. Nd\DLJ]^y`jElRQSSAOKtcY>]`<`S`DPH<BSqPzamD?QTZX_MZzbXIdMwkr?NF@J[<b<av\\=UdjyTQ
  98. u^yzcWMYR`UJxoH`x<=t@cr>ETQJqSqQEUCZ?Ogzq=CkHD@eI>NHRTEuyOcnaDFN?PnQVYzF`mJH\<?
  99. \E\?OjpSmNo>h]>WR?SQ>Cwf<eByPgPaGG`t]NxnHKdU@u^nvlIuFzCINDk@IsV]Zx]GFdOl[HnTh>R
  100. =HSFHMZTMA_wPlEnMHrKv?T[D@cXDLNdQpesLP?v^eLA=`vTIDLK\GlRK`nL_t^pgxN\_twlxn<d{nP
  101. O><d{DtHh_uAF?TzVU=?xh__xe^Lz=Dlzflz=RK]@Kc?tP[h=zLct>[ect=AvctD[^ctHS\cv]ZF[^]
  102. ZnS]ezA=z`atB[]]ZB[_=ZJ[^LSaau@c`GxFx<geF=\