Changeset 6a1aa7 in git
- Timestamp:
- Jul 11, 2014, 5:08:34 PM (9 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- 1234c77ed4ce613f813076f72fa15a303743e451312a931ca75e1ecf46c185282254d34874f9f4a4
- Parents:
- 653440a090c5b7f2086e19c2cadf27bb08f91644
- git-author:
- Hans Schoenemann <hannes@mathematik.uni-kl.de>2014-07-11 17:08:34+02:00
- git-committer:
- Hans Schoenemann <hannes@mathematik.uni-kl.de>2014-07-11 17:09:41+02:00
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/iparith.cc
r653440 r6a1aa7 1018 1018 static BOOLEAN jjTIMES_MA_BI1(leftv res, leftv u, leftv v) 1019 1019 { 1020 number n=n_Init_bigint((number)v->Data(),coeffs_BIGINT,currRing->cf); 1020 nMapFunc nMap=n_SetMap(coeffs_BIGINT,currRing->cf); 1021 if (nMap==NULL) return TRUE; 1022 number n=nMap((number)v->Data(),coeffs_BIGINT,currRing->cf); 1021 1023 poly p=pNSet(n); 1022 1024 ideal I= (ideal)mp_MultP((matrix)u->CopyD(MATRIX_CMD),p,currRing); … … 1727 1729 static BOOLEAN jjCHINREM_ID(leftv res, leftv u, leftv v) 1728 1730 { 1731 coeffs cf; 1729 1732 lists c=(lists)u->CopyD(); // list of ideal or bigint/int 1730 1733 lists pl=NULL; … … 1752 1755 return_type=BIGINT_CMD; 1753 1756 } 1757 if (return_type==BIGINT_CMD) 1758 cf=coeffs_BIGINT; 1759 else 1760 { 1761 cf=currRing->cf; 1762 if (nCoeff_is_Extension(cf) && (cf->extRing!=NULL)) 1763 cf=cf->extRing->cf; 1764 } 1765 nMapFunc nMap=n_SetMap(coeffs_BIGINT,cf); 1754 1766 if (return_type!=BIGINT_CMD) 1755 1767 { … … 1777 1789 { 1778 1790 xx=(number *)omAlloc(rl*sizeof(number)); 1791 if (nMap==NULL) 1792 { 1793 Werror("not implemented: map bigint -> %s",cf->cfCoeffString(cf)); 1794 return TRUE; 1795 } 1779 1796 for(i=rl-1;i>=0;i--) 1780 1797 { 1781 1798 if (c->m[i].Typ()==INT_CMD) 1782 1799 { 1783 xx[i]=n_Init(((int)(long)c->m[i].Data()),c oeffs_BIGINT);1800 xx[i]=n_Init(((int)(long)c->m[i].Data()),cf); 1784 1801 } 1785 1802 else if (c->m[i].Typ()==BIGINT_CMD) 1786 1803 { 1787 xx[i]= (number)c->m[i].Data();1804 xx[i]=nMap((number)c->m[i].Data(),coeffs_BIGINT,cf); 1788 1805 } 1789 1806 else … … 1801 1818 for(i=rl-1;i>=0;i--) 1802 1819 { 1803 q[i]=n_Init((*p)[i], c oeffs_BIGINT);1820 q[i]=n_Init((*p)[i], cf); 1804 1821 } 1805 1822 } … … 1810 1827 if (pl->m[i].Typ()==INT_CMD) 1811 1828 { 1812 q[i]=n_Init((int)(long)pl->m[i].Data(),c oeffs_BIGINT);1829 q[i]=n_Init((int)(long)pl->m[i].Data(),cf); 1813 1830 } 1814 1831 else if (pl->m[i].Typ()==BIGINT_CMD) 1815 1832 { 1816 q[i]=n _Copy((number)(pl->m[i].Data()),coeffs_BIGINT);1833 q[i]=nMap((number)(pl->m[i].Data()),coeffs_BIGINT,cf); 1817 1834 } 1818 1835 else … … 1821 1838 for(i++;i<rl;i++) 1822 1839 { 1823 n_Delete(&(q[i]),c oeffs_BIGINT);1840 n_Delete(&(q[i]),cf); 1824 1841 } 1825 1842 omFree(x); // delete c … … 1851 1868 for(i=rl-1;i>=0;i--) 1852 1869 { 1853 n_Delete(&(q[i]),c oeffs_BIGINT);1870 n_Delete(&(q[i]),cf); 1854 1871 } 1855 1872 omFree(q); … … 2225 2242 int par_perm_size=0; 2226 2243 BOOLEAN bo; 2227 //if (!nSetMap(rInternalChar(r),r->parameter,rPar(r),r->minpoly))2228 2244 if ((nMap=n_SetMap(r->cf,currRing->cf))==NULL) 2229 2245 { … … 2312 2328 return TRUE; 2313 2329 err_fetch: 2314 Werror("no identity map from %s",u->Fullname()); 2330 Werror("no identity map from %s (%s -> %s)",u->Fullname(), 2331 r->cf->cfCoeffString(r->cf), 2332 currRing->cf->cfCoeffString(currRing->cf)); 2315 2333 return TRUE; 2316 2334 } … … 6724 6742 { 6725 6743 number b=(number)h->Data(); 6726 number n=n_Init_bigint(b,coeffs_BIGINT,currRing->cf); 6744 nMapFunc nMap=n_SetMap(coeffs_BIGINT,currRing->cf); 6745 if (nMap==NULL) return TRUE; 6746 number n=nMap(b,coeffs_BIGINT,currRing->cf); 6727 6747 if (!nIsZero(n)) 6728 6748 { -
Singular/ipconv.cc
r653440 r6a1aa7 55 55 static void * iiBI2P(void *data) 56 56 { 57 number n=n_Init_bigint((number)data, coeffs_BIGINT /*currRing->cf*/, currRing->cf); 57 nMapFunc nMap=n_SetMap(coeffs_BIGINT,currRing->cf); 58 if (nMap==NULL) 59 { 60 Werror("no conversion from bigint to %s",currRing->cf->cfCoeffString(currRing->cf)); 61 return NULL; 62 } 63 number n=nMap((number)data,coeffs_BIGINT,currRing->cf); 58 64 n_Delete((number *)&data, coeffs_BIGINT); 59 65 poly p=p_NSet(n, currRing); … … 70 76 static void * iiBI2V(void *data) 71 77 { 72 number n=n_Init_bigint((number)data, coeffs_BIGINT/*currRing->cf*/, currRing->cf); 78 nMapFunc nMap=n_SetMap(coeffs_BIGINT,currRing->cf); 79 if (nMap==NULL) 80 { 81 Werror("no conversion from bigint to %s",currRing->cf->cfCoeffString(currRing->cf)); 82 return NULL; 83 } 84 number n=nMap((number)data,coeffs_BIGINT,currRing->cf); 73 85 n_Delete((number *)&data, coeffs_BIGINT); 74 86 poly p=p_NSet(n, currRing); … … 87 99 { 88 100 ideal I=idInit(1,1); 89 number n=n_Init_bigint((number)data, coeffs_BIGINT, currRing->cf); 101 nMapFunc nMap=n_SetMap(coeffs_BIGINT,currRing->cf); 102 if (nMap==NULL) 103 { 104 Werror("no conversion from bigint to %s",currRing->cf->cfCoeffString(currRing->cf)); 105 return NULL; 106 } 107 number n=nMap((number)data,coeffs_BIGINT,currRing->cf); 90 108 n_Delete((number *)&data,coeffs_BIGINT); 91 109 poly p=pNSet(n); … … 165 183 { 166 184 if (currRing==NULL) return NULL; 167 // a bigint is really a number from char 0, with diffrent 168 // operations... 169 number n = n_Init_bigint((number)data, coeffs_BIGINT, currRing->cf); 185 nMapFunc nMap=n_SetMap(coeffs_BIGINT,currRing->cf); 186 if (nMap==NULL) 187 { 188 Werror("no conversion from bigint to %s",currRing->cf->cfCoeffString(currRing->cf)); 189 return NULL; 190 } 191 number n=nMap((number)data,coeffs_BIGINT,currRing->cf); 170 192 n_Delete((number *)&data, coeffs_BIGINT); 171 193 return (void*)n; -
Tst/Short/imap.res.gz.uu
r653440 r6a1aa7 1 begin 644 imap.res.gz 2 M'XL("//+YU(``VEM87`N<F5S`,V=7W/CMA'`W^]3<#)]\-7.!=C%'^(R=YWI 3 M]"5MIR_7]T1*K-0S/MN1>*WT[0M*(D&3H+BP`)`/.<NTC5WL@KO`_@#DR[__ 4 M]M._BJ+@GXM__O37XKMJ5WUX?%A_]^.[+^>?P.?"/OSYX>FANGG_8_'\4CT\ 5 M/]W\]'7U\O['=_73XO/GXL%^^^'I_G\?=M6J:O\4/Q?M9_&AV#X\_5YL6?&I 6 M8'?%S>IN?;>_.[R_*QY?G#3YN7AY?CP4+_:W>'%;K.K_P/ZSKC\<_]G7_QSJ 7 M1_6G^K_ZF_WAQ\*VLX+;U?IVM;]='6Y7M^O][?IV?[C=WQYN>2M#==32C5K< 8 M"KRQ>JVL0C?KNV)_5_1U*Z_4S6ISL[KE[_]\U.GTL7E4?V]5MQ];<<:IR5FC 9 M)C1JWA7K6M.AFIQ?J>9)M[5'N_7MZ7DK"CHJXEG%7>U@!,9PS,E<I'<REQW5 10 M5*/:T<EGW<8=S7561_.RHZII5(6NJG<CO@:6S=?`G98`9RVKVM=ZS,^`Z?T, 11 MHJ.6;-0Z^EE?\C&HK#X&W5&S;-2$1LU1_YIL_D7F-$1^UG##VJA8]"U9?'UX 12 M.NKVZ:01;[5&2&Q;IW0GPV"383;.^R%*7YMYZ$IW\@\V^6=S'`O"7!JS&"$! 13 MK>1)/_OU^(W])'0KH)-RA$TY[6?>^6S?_=U]=<[EK6X"3Y.`FZT=+?7,X(<? 14 MBO^NML7J8_&TM<I^__GXM7F\/CZ&\V-H'N^/C_'\&)O'A^-C<7XL*'%!B),^ 15 MQ<V6OU)H_4JAGF3P2\96LGW\<NI5_<5UBZ*1;"P$KQ3:OU*H)QDF)9^?KT_/ 16 MG44I&JFS1KN%^$PW/MN=?69G07\IGIZ+A]_NGZJ'ZE#4/]ULG[_:5'[ZX?UV 17 M^[PMGG_]]=MV>_];\?!4V&_7]YOG[7UQ:O;QX>G>-OVQ^.55V[^T4LO&"C`I 18 M%,*$EF>A3=-.ICG+K)9A><D:RU>3EJ_"+"]9:_FJ9WG)&RM,6KX*L[SDC>6K 19 MGN4EG&5N)F5N`F5"(W/3E]G$QLVD<3>!QL569M^VHI')<H0_[_AJ=>G,Q:7J 20 MI`^7?:6>3!]'B?XW@OO?"/"_$1@X=Y,E*95PORW!;\M@)0PE>X`_>V#'<0-S 21 M>K('#U1.L<E$,IOW%.\GE1F\IR!5CE$PEF,43N:8^9PB^OEF#J?(5.E'R;'T 22 MHU2J]*/46/I1NI=^LMC:F;FD9*)TXCMK<ZR0?:Y*/YFY//,6KZ7Q7N?U4@ 23 M8$VN83KS>#08O,.'WCL<H`%2T@[WIYT@0>+-*22Q#^1T_DCL`]5+'LE\H-^< 24 M,1+[H)Q.%XE]8'JY(I4/2I8J091L+$&4?#)!1+3NL<>NOS"9'=+)[E0/2^%2 25 MP\Z5M4HYF1JR+M1+M;2R5JDI&2)G6:LL)U-)7I\9T@HDH\\,HV24G#XS?#+U 26 M9/69@7[&B580,S!:$#.8:D5B<&Q%8D2JA&/$6,(QLI=PHA7$C!PKB!E%68;D 27 M*8B9#@TT92?QN(*8,6]>DPQ74W%7[YPQ4A)*NGKGC%/RSCP%,<[@S:N9]-[# 28 M^0MBG`E*!IK+>_+-ZZ#TWE/32Z'TWM.I\I1M>B11<5:F2E2VZ9%,Q9F97!HE 29 ML'9K:,XH22N=>+?GA_,.]]^UM3/.I[G_+#4#S@D;`)+6##@G`?_K:P:<3W/\ 30 MF7PP`/K9?="'^\E\,$WTY_$!#-!^;A]`'_.G\@$D8_NVZ;$,`7VXGZ^`Q6$: 31 M\J>3[:`^AP[4K]KB&8=IJ/_D?R6&*[$(BWH.-)"?KQ##@43U,Q9B.$ZC_*P^ 32 MPP&^C[8GS+8]MBF,8S)@;YL>(?8<IXE]7MO3*'W&]P7[R'[^]R49T+=-C^4< 33 M)!']++4LCB2\GTD7Q_JYZ+#^JJVK<?%VUC]<:45>VPL"[A\J$7EM+TC$?Z;* 34 MC'C[+H'TWB-L%$COO?Y>@7AY2ZBQO"7>OF\@O5<(6P?2>X6T>V"F=THFVW'` 35 MY=B6`RZGMQPD\(KK\_2N@Z3BW<8#+CL;#RI75Y/3&P_FJ2=(P@Z$M/4$2=IQ 36 M$*&>(*<W$LSD`\*.@K0^4*0=!!%\H*8W!LSC`S78(9#=!_W=`LE\D&R+@&UZ 37 M+$.H_AZ!C+4M-;U7()ULMS>`J\[>@(W+#:J_-V#<'UL6Z`_3^./<=NL//8#^ 38 M%Z0&%F*T.R.V[15B=!_S7Y`:./9T>TALVQM[NH_O+\RB`PVL7?6G;^`!EX]7 39 MZ=(X6NG2?1(?;\6@Q=B*0?<(>Q%M:3"LT.@!,8^VE<NV/;:7B^MTC%R/,G+= 40 M9^2QYK67CHUSW8?DT;9SV:9']G/QLH_&+P@-?$<[.Z5[[VC9`>)E!XAO7(&I 41 M?#L03[`8;M-*23L/GVS)4Y)@>+8EL-/K[>P\J;L(Y#RINY(=BK=-CV6%\NT, 42 M/:4O#(&@I_2%(?'S_*^.28?;S2AN-].X/:DO2,?JTXGO0'?3@>X;!]W-HD[2 43 M.\WG.43OY"_K_'RC%[!%'9UW:LUS:M[)3\;?;=,C^0?8HD[,.UO,<UC>R4]V 44 M3MXV/;*2`9:,J]NF1Y(+L%E/R@.;]:0\,$?/@3/?+5]0;PC>W%>__J>?7:PD 45 MNVA:U4)7G6?\8[&NGZT[S^SKMZ^?[3O/\&-QJ)\="%LNH+YU\JC$()><M%A[ 46 MM-A[M#B<M#C5WXZ".C*P[2AX1.P](@XG$4WUM&U)-"WM9C29;$T6O;AD&[?O 47 MT^O6VS>JWII\[GWT0,Y5(W<0R>N-QZ>?5#,:O6R-'KWR9!MW1J_Z1C=M[Z-' 48 M;&Y:H_=#=KW3^/23^#$;6"NV'[2AC4G1RT^V;2>V9V2`5JQOB+T]"+4"'"0& 49 M$+Y;LP#D=#A>>X;YWC/,#^_6<-3@X!G*H`@A=^WI[=[3VT,S:W[U,@9M6@#0 50 MT_%Y[8G/^RG93G!/8#D=QN.8V@Q"];RF1I8NA",;#>'(IT-X%(,C#,+TS`;' 51 M=.$;<31\HT@7OE&,AF^4_?"=V_K.\&HZI.=2Q5%@P-)W:Q6@F0[^>\\+<GBW 52 MA\%+(!@AP.\]???WDS#*!9^.X'M/!/<+=,_<5(Z\P0$$3`=WNBF1$,#CFE+T 53 M(_2,II3389MN2D4(S7%-J?NQ=T93END"LBA'`[(PTP'Y2INW791L.N)&D^78 54 M+4CPW?8$$J=#:O)EHQ2$4'QE>4/*Z>!+*V](-1TZTYM,$T+NM28KIX,LT61F 55 M.D0F-YEB@]`:KSBAV'AQ0O%TLUO%1V>W"M(%T^,=O/Y@JK`?3.,5)Q2.%B>4 56 MF(ZK5Q4GE`.1H)3O!B-0>CJ81EG`J9(0,',NX)29CJY1BQ.:30?A**;6G!!H 57 M<YI:PW14CFMJG`[><4PM"'/?K*:6Z0*WEJ.!6ZMT@5NKT<"M]?0L.%,M0)?3 58 MP3R7*AU$6#+?A4!0$A`A>0%84E!?U`5@20!_N1:`)0$=TDTY1("I33E@?S.: 59 MD@`$Z:8<@KW4IAP0O?E,:1)B/C..^<P`\Z4K%1@"VXLFJX/YC/#=HP.&@/F2 60 M+Q@-!0%>N<8V!*I'6V,;`JY+;[(ARHNWZ\*8T5T7R-(A.]OV&+)#1D!VJ8V. 61 MC(+SKANGR`:$[HWC%%DZZ&;;'@NFR`C0[9KZ`#("2KM.@`-DR$K?52_("(`L 62 MQE(-.06>95RJ(2>PM9BK8N0$@!;'U!2XEM74`_86+]1R,1IJ.0&SQ3$X!<%E 63 M-3B!T,4=V^DP'/)1#(><@.'RK/H1")0NERH.XB&`[^84!`+$HR[U$"@P+N92 64 M#X&`YC(M]1`(<(]N2@JDBVM*`K++9DH"]".;$H?P+K$I<4#MYC,EID-YB*,H 65 M#W&`\I(5!1`)_"Z:+(?R$)7OPA'$`<J+=N.(;;NU>._*$<0AV(MVYXAMW*V? 66 M>Y>.(`X`7K1;1VS;KK^]$28&&"_:O2.V;3>7[)E9#*%>M#*%;7R\3"$&\"[> 67 MW%G`Z-Q9]!%>X8G%42;/8LCPHFVRL(V/;K)`D8[5V;;'6!V*`:M+,%&\=!4) 68 MB@&VB[;?PK8]MM\"Q0#11;N-!+M;]?IOKL-Q*)GO.A*4!!P79:Q+"JK+M$J0 69 M!(AWY1K1R2)`NC@&I@"\7`9.=ZS/MCT:N26!XL6Q-87PY;(U@?W%&LPJ'=M# 70 MMREP,+56!+:7R=J*@/YRJ>+(("KAN^P#5:8#@*CF/P#H[)+^[)^3E>G8'ZKY 71 MC_VUG=8)\:$>QX<ZTXD_U/.?^'.V3G?8#_7H83_4";FC'N>.>C&'_5`OYK`? 72 MZ@[+U*7OX@VL-][5#OGZ\Y85G^Q/[KZN]M95J\<;;A>P]>.;N@\$0%Y?G'AN 73 MBM=-\4%3_*8=$+^NGNR@J-Q@^'W[_.WIMV+S</_X6_&\L7]>5,_%<4@\5:]^ 74 M&C9HCG<N$M1JAU*]S_#\^U#_/@Q^'T*Z`9&ZP5TW+JGEN@%--W:U8W<#Q^[H 75 MCL6VJ=J"NX$%=R&.W<5R++86N:B6LXAHNU%;<#>PX"[$L;M8CA6N&Y?4<MV0 76 M33>JVK'5P+$5W;&J;:JV8#6P8!7BV"J68U5KD8MJ.8OHMANU!:N!!:L0QU:Q 77 M'*M=-RZIY;I1-MW8U+^_&?S^)J0;FUC=*-MN7%3+=:/-*)O:>YN!]S8A@VH3 78 M:U`9UXU+:K7=,&TVV]2OV6;PFFU82#=8G&X8E\TNJN6ZT>':!GR7O:!!VA3@ 79 MPL37"%KJ#]N18>02,[&1@9G8*%HFOF1?3<O`@?8MEY@031F8$(VA)<1Q^PK& 80 M:(DPR+Z"\07F):M56%X2#!:8E\3QMLV`O"08TO(2=74EF*!E"'J##I@+IGQW 81 MLPBF:;%ZN+=#L)(6HRD#V]`",WGKA>",%B,]_>*<%AL)_>)`"X@!_4):;/+U 82 M2]!B$J5?DA:(`OJEEA@3N`J,"5S38L+E]Y:7M$`PT8ICK@*8[QH1`9SV]D\O 83 M_00`+1ID+=8(@+!BC0!<X!31:A4V110@:.&/XEA)"X=9BS56J[!BC0"UP+FI 84 MU2IL;BI`T^(_Q;$E+1]D+=98K<**-0+,$B?%8`(GQ<B6F`"1!29`Y+0$F+58 85 M8[4**]8(!%H&SEJL$0AAQ1J!#LP+%+[+;P1*VA3@PF(7%2WUARUV42\Q$Z,. 86 MS,18TC+Q)?L:6@8.LZ]@2TR(@@4F1,%I"?&"?070$F&@?7&)>4E@8%X28HEY 87 M28C`O"0D+2^1:RM"T3($O4''UH4H?3?6"$%DZY[%OR2R=,+`ED2>35_\2R): 88 M]O6+B)(I_2+BW(!^$<FJKU]$DDKI%Y%F!O1KB6#1:A48$R01+%Y^;Q61ZTVT 89 MXK":4."[7$4H(E8C+/T4$:_E+=8H$5BL44OD>5:KP"FB(O(\BF.)7"]OL4;I 90 MP&*-6B)(M%H%SDT5$202'*N)0#%OL4:SP&*-7B3!U*$$4R^28.I0@JF)!#-O 91 ML49C8+%&$[EIWF*-%H'%&MVAM5KY+@H2FDAK+RQV-9':ABUV-1'@YLW$V@1F 92 MXI)(C2_8MR32XS#[ED20G#<AEA"8$$LBO;YD7R+%#K0O$6CGS4NE#,Q+Y2(I 93 M>AE*T4LB12?75DHB4*<WV&'KAOEN]Q&&R-8]BW]#9.F$@6V(/)N^^#=$M.SK 94 M%Q$E4_I%Q+D!_2*255^_B"25TB\BS23W2[(E@D7)`L&B9$2P>/&]E8S(]29: 95 M<5A-,N&[B$8R(E8C3HCBS$DEZY0F+JGEK$Y$>UD+19*IL$*19$MDB5:KL.FI 96 M9$262)P%QAI4G;+();5<-X@\,VN1RFH55J22?(D`U6H5-B>7_&J`*CD1H&8M 97 M3EFMPHI3DB^1V%JMPA8!DA.)[<0-19(3D6G6ZI#D,JPZ)#D1U&:M#LGNSF)* 98 M=4ARAX<E+WTW*$E.Q,,7WF0@8F+J0DG"$@\_2P@\_"R!2*@OF99(JNFF7>+Q 99 M8ZM58/X!(B2_9%HB+*>;=HD'@*U6@9D`ELCI)01R>@E$3D]V+Q*1/;U!1^\E 100 M@N\")(E7'XJ5&.E0K%-[B?S<:A48G/'J\[`2(YV'=:9=(L&6&$BP)5Y]%%:* 101 M2$=A6].*)3)D*0(9LA1+9,A2!#)D*2*?@I4B\BE8*1Q7E4)]*'[XH;#6O-^O 102 MOKX\WA<WFX?]R2#P/?M>WA5_MS\$QH3[>_VA.$;S+Y]NV-WJ_=W-_N[;^[O' 103 MES:VUY>JOCP_'HH_/M4EV%H1^.9J@?6VS6,#_S@V4/_QS?Y5`_7NS`?;Z9LO 104 M=W^\;^]WVG\\7N=4W]%4?VT>?SL^AOIQ?9,3O+,RO\'M-ZC%MBUV,E+]_Q"O 105 7=M7/NVI5?=O55OS3N_\#_,9%T$[A```` 1 begin 640 imap.res.gz 2 M'XL("'?GOU,``VEM87`N<F5S`,U=WW/CMA%^O[^"D^F#KU8NP"Y^$)>YZTRG 3 M+VD[?;F^)U)BI9[QV8[$:Z7_OJ`D$C0)B@N*`/F0.YOV:3_LDOL!^RTW7_[] 4 MMY_^E649_YS]\Z>_9M\5^^+#T^/FNQ_??;G\!#YG]N+/C\^/Q=W['[.7U^+Q 5 MY?GNIZ_KU_<_OBNO9I\_9X_VVP_/#__[L"_61?U/\7-6?RT^9+O'Y]^S'<L^ 6 M96R5W:U7F]5A=7R_RIY>G37Y.7M]>3IFK_:W>':?K<O_P/ZQ*;\X_7$H_SB6 7 ME\JORO_*;P[''S/[.6NX7V_NUX?[]?%^?;\YW&_N#\?[P_WQGM<V5`.6KF!Q 8 M:_#.XEI;0'>;579896UL^8W8+)J[]3U__^<3IO.7U:7R>PO=?EF;,PXF9Q5, 9 MJ&"NLDV)M`N3\QMAGK%M/.@V]^?KM2EH0,0+Q'T98`3&L"_(7,0/,I<-:*J" 10 M=@KR!5M_H+E.&FB>-Z":"BHTH:YZ8@TL6:R!.Y0`%Y1%&6O=%V?`^'$&T8`E 11 M*UBG..MK,0:5-,:@&S#S"B94,'OC:Y+%%YE#B/R"<,OJK)BU/9E]?7P^8?MT 12 M1L1KU`B1?>M`-Q@&*X;9NNB'@+Z5>>B@&_R#%?]L3_>",-?N69R`@-;RC,_^ 13 M??K&?B5T;:!!.<)23OTU;WQMG_W]0W'A\AJ;P/,FX&YG[Y9R9_###]E_U[ML 14 M_3%[WEFPWW\^_5U=WIPNP^4R5)</I\MXN8S5Y>/ILKA<%I2\(,093W:WXV\` 15 M;=X`:ED&OV6L+=O+K^=5E7^Y95$0R<I#\`;0X0V@EF48M'RYOCE?=QZE(%(7 16 M1/N%Q$Q7,=M?8F9W07_)GE^RQ]\>GHO'XIB5/]WN7KZ65'YAQW5I@KT__^[# 17 M;O>RRUY^_?7;;O?P6_;XG-EO-P_;E]U#=K;R]/C\8"U]S'YY8^J7&D1>.04& 18 M,4"-8;49@R*_H*AL.1#F`J)81F0DJR)3#$;&DJ]-OF.B(ED=E:(5%<DKAPQ& 19 MQ;)J:7]41"2O(E*T(B+A`F`[","F\C*1C_(`5/:W;?M5?MT.!F`[/@!8FV_[ 20 M7U3F68ILZKT=:RR-K;U4#39R9"[U(!N=+/H?(.Y_@,#_`&'@5E#F)&;B?E^" 21 MWY?!(`R%C,!/1M@(7,>='C+B@>`4&^2EV:*G>)NC9HB>@ALX:K4.2PH*^EA* 22 MX2!+S1<GT6:L.>(D1[)6<(QD'V\I-8ZW@A&H/N92NL5<20+A8I!3F"N>^<:1 23 M2K,&64%-5IJ/)JM3EO4_1]S_'$%`24##,%-Y$'0>\&/K`0]`@!2:XGZ:"C(D 24 M1E-.Y!C(8;Z)'`/5(IMH,="CZ21R#/)A+HD<`],BDE@QR-E8NEAMP@@C9WV$ 25 MD?-!PIC0VR</N/7#(%O$L]TH9N;"4<7>5=ER.4@52>L"N5I:E2W7%,9(667+ 26 M\T%J21LS0SK!)(R9812&21DSPP>I*&G,#+09B%1_.QW\PM*R@=X:G,%QIYDQ 27 M*+#O/&/$*((:@T'T$921+8(BU>+&0)!]]3BC**>:-/4XT]`V3=[@+5>/,V;T 28 M$:=[.)NV4L`9(W%8U$H!9YQ"6_/4XSB#T8>C^-'#^>MQG`D*@<T5/3GZ6!4_ 29 M>FKX9!4_>OH&7@NMDUEK/=3&63Z>VL)AY#WLQID9/'Y%"$D=#<XHS!;/O&MS 30 MXKS1ZK"OZW6<#[<ZS%*GX)S0\Q"U3L$YJ<?A]CH%Y\.M"S/%H-/#D#P&[0:& 31 M:#$8;E*8)P;0Z59('0-HMRO$B@&,:TNH%<%`UH"^_@0.[?Z$=(4S#L/-"?%L 32 MNV8$#HUFA*(NVG$8;D9X]C\FW2/<!,4$#K0&A'0%(`ZD;H2$!2".PRT(26.& 33 MG;8#<FN<#GS&D??UQG&\H>\@&$9?VP''X;:#M+&AM1HD?)ZPW7<P__,TK@TA 34 M^*;IZT+@2.I"2%(PXTAJ24B$Q?4G<-'H3RCJXAT7X_L3NB>UB0L(@M"BT`4Q 35 M<0%!D+H49BK_B/&=#?&C1VANB!^]=G]#"*D%UUV$ZJ,U,;[](7Z@"!T0\0-% 36 M:H*8Z3&3XQHGPF\@V=<WP>5PWT2$&#D/#+=.1#7ONB>X;'1/%*YP)X>[)^8I 37 M6$A"&T7<@H4DM4U,4+"0P]T0,\6`T!81-P:*U`8Q00S4<'?#/#%0G3:'Y#%H 38 M]SA$B\&X/@8]HFBG^AH9N&HW,B0LG*GA#H9XMEW'`E>-CH6MXPK5T[%P\ZZK 39 M>S;6G0:$_GMAQ\O7L4^W0GE+!-X)VKU@MVN5=G2[`>$*!CAA..^`QZ"H7[+; 40 MM>Y'W6XTN+(59Y>M^%@0KKS$6B`Z'07D4ML8'-A;;=/MKH*`@\D8)*+O9*); 41 M'019S(>ATQ%`ZG0;LU[5U^G&]<B.@#$H>ML!=+L=8*K]]+41`%RWU7]2;]N8 42 MA9N>WC:>MSL`KD!@MZ3#1@MZ*P?DC2Z`O-$%L'55L7Q\%T"$XWI-;3EM[D&T 43 M8UA.Z@!(=DAWN,8W#$0-%Z%=(&JX;IAV$%Z[R/L&'O!\?"]!S/`80B=!S/`8 44 M4A]!^J?)C&L["+]C3&_#@1EN.(@:&=)`A'CF&VT'IM%VL'5M!V91,Q`<\GG& 45 M'SC[RYI\4.$"MJBA!P[6//,.G/V4HPZLM1Z"`K:H60?./?.,.7#V4TTXL)9Z 46 M#DK`$HTXL(9ZR`C8K#,.@,TZXP"8ZR$`SGSCX:!LJ]X^%+_^I\U&UI(]A9T" 47 MLFY<XQ^STWVR:5RSS^:AO'9H7,./V;&\=B0TH4`YKO0$HL,]9Q0;#XJ#!\7Q 48 MC.)<5#P9:MC`>J'@,7'PF#B>350EXOJ31/5)^QE=)FN7Q9[)9FW9Q^NML?H! 49 M*_N]+\Z(/I;-&JN`=&B@;.\^_Z28,2AY'928X]BL'1>0HAT04SLBZD0V:Z@. 50 M1COQEWW>YY]$'<IF[=00VHD?ZKP6<RZ;->,0M`(!4"/PW9'C<UIMP`GK`,(W 51 M;@U`#F?WC>>I.'B>BN.[#9P0'#UW/BA"!M]X5GOPK/98;=K?/+M!;1\`>CC= 52 M;SSI_C!DVQEN&<R'66$:5YM.YI_7U<ANH8#@S1ZR7A)`/DP"D\0`H9/H9XX! 53 MCLWZX?['WKR/8F3>#P<A>C,_RG;F3QT:%Q4U3`&IH#AE'3#WC3L#-,-D<?`\ 54 M/<=W!^@\(8(1".'@6;M_G81'0/#AC'_P9'R_07?-[13)320@8)@,Z*Y$0L*? 55 MUI6BG=%G=*4<SNET5RI"WI[6E;J=F&=T93XZ/8?V-H'(>Q.T,,,)^L88U$N6 56 M;#@#3V;+:=,@P3<F#"0.I]CHIU0I"*GYQFJ+E,/)F%9MD6HXE<9WF2:DX%M= 57 ME@\G7:++S'#*C.XRQ3JI-M9H+&NKOQZB^,B=\2@@O'=OK&!<\AT%`WJ3K\)V 58 M\HTU(\N:ZJV-*#&<EF^JC2@GPX)2OM%7H/1P+I[DL*AR0KY->5A49C@Y3UH; 59 MT6PXAT_B:LT)>3JEJS4,)_5I78W#N7\:5PO"5CJIJ^4MB3ZX`J%E;ZK7ZH94 60 M'PY$]29[K8=WVHGJ#SH?SOBIH#14T9SY)DE!3E!%R8?.G*)N3GKHS`E:9ZI# 61 M9TY02^FN[*J>L5W9T3=G="5!XZ2[LJM5QG9E1YF<SY5FI$(Y<CZ3M=>;I$U' 62 MJ8Q7HC`$37(R6PUYT@C?`"8P!'DR^D'54*3+&\_VAJ!&TL[VAB`SQG=95X*, 63 M-?7(VNIM/D%VB_(8",0:Z],=D1%TQ]A!04;1)&^[CY%U9,:1]S&RD5)A<-1Z 64 MA4)D!*'PEB($,H+\=YL!)^HARWTS@I`11+TISH/(*8)?PO,@<H(>..71&SE! 65 M])O&U11!,*FK.WIAS+>5K+G>3,P):N$T,:`HB4EC0!`:I[W=1ZJ)(^+=JR4B 66 M)VB):<H*"`2I,144IT0B@&_D#@)!B:2>)1$HBN*49TD$@KZ8Z"R)0%`HZ:ZD 67 M*(W3NI*@.R9S)4&Y)+L2NPID9%=B1VN<SY4X4F\<,<@&L5=O1.SHC=$J#H@$ 68 M57$R6TY@1%2^236(B01&Q*[`&&E0C37E3N.M236('5DQVJ@::ZN^XUJS:E!T 69 MQ,9HPVJL+;<392T872DRXK@::ZZ_3"(Z(F34@3767N_^7+3ER2S60R&Z^F2D 70 M@3765&_["8JQJN08'+V2)(J.)!EA<WIM?@V*CA89:8"-M=37=X*BHT)&&F&# 71 MS?['=F9P^B-*YIMA@Y*@/T[RE$B*-IGHU"()JN6-)UAGBZ!*3N-@BF*9RL&W 72 MO*L9?FR7O6]KHB0HF=.XGZ)RIG(_0?^<ZOY6(_7-\"B[WLO.WE\1E,U$OE<$ 73 MX3,5%*>+HA*^"3&H$KVVB6K^US:=7^*_L>EL)7I9$]7\+VO6B]9)W]-$W:^7 74 MZD3O::*>_SU-Y_YDKVBB[GU%$W6J5S11]RNO>C&O:*)>S"N:J!MJKLY]TUJP 75 M;%TLP_/UYQW+/MF?K+ZN#S9PZZ<[;L_2Y>6[<@V$=H%RF.?EHWCY4;SS4?RN 76 MOCU^73_;6Z1PM\;ONY=OS[]EV\>'I]^REVU952I>LM,M\5R\^6G837.:_$F` 77 M5=]*9:?FY?>A_'WH_#Z$+`,F6@9WR[@&RRT#JF7LR\#N.X'=TP.+]4>5'MQW 78 M/+@/">Q^JL!B[9&KL)Q'1+V,TH/[C@?W(8'=3Q58X99Q#99;AJR6492!+3J! 79 M+>B!5?5'E1XL.AXL0@);3!5857OD*BSG$5TOH_1@T?%@$1+88JK`:K>,:[#< 80 M,O)J&=OR][>=W]^&+&,[U3+R>AE78;EEU(RR+:.W[41O&W)3;:>ZJ8Q;QC58 81 M]3),S6;;\C';=AZS+0M9!IMF&<:QV558;AD-X=Z`;Z0/&J1M`:[LBHV@47]8 82 M`XJ12V1B(P.9V"@:$U_SKZ8Q<*!_\R42HLD#"=$8&B'V^U<P1B/"(/\*QA?( 83 M2Q95&"\)!@OD)7&:WQK`2X(AC9>HIRO!!(TAZ!_H.@`$4[Z).H)I6J[N-J\( 84 MEM-R-.7&-K3$3.XM$9S1<J1G79S3<B-A71QH"3%@74C+3;YU"5I.HJQ+TA)1 85 MP+K4$G,"5X$Y@6M:3KC^W/*<E@@&/L6)N`*8;]B+`$Y[^H>/?@*`E@V2%FLL 86 MJK!BC0!<X!;1H@K;(@H0M/1'":RDI<.DQ1J+*JQ8(T`M<&]J487M305H6OZG 87 M!#:G\4'28HU%%5:L$6"6N"D&$[@I1K9$`D062(#(:028M%AC4845:P0"C8&3 88 M%FL$0EBQ1J`3\@4*WXPA@9*V!;ARV$5%H_ZPPR[J)3(QZD`FQIS&Q-?\:V@, 89 M'.9?P99(B((%$J+@-$*\XE\!-"(,]"\ND9<$!O*2$$OD)2$">4E(&B^1:RM" 90 MT1B"_H%.6Q<B]\W\$8*HK7L._Y*HI1-N;$G4L^F'?TF4EGWK(DK)E'41Y=R` 91 M=1&55=^ZB$HJ95U$-3-@74L4%BVJP)P@B<+B]>=6$76]@4]QLII0X!M%(Q11 92 M5B,<_1117DM;K%$BL%BCEJCG652!6T1%U/,H@27J>FF+-4H'%FO4$H5$BRIP 93 M;ZJ(0B(AL)HH**8MUF@66*S1BU0P=:B"J1>I8.I0!5,3%<RTQ1J-@<4:3=1- 94 MTQ9KM`@LUNB&6JN5;U22T$2U]LIA5Q-5V[##KB8*N&F96)M`)LZ)JO$5_^9$ 95 M]3C,OSE12$Y+B#D$$F).5*^O^9>H8@?ZERAHI^6E7`;R4KY(%3T/5=%SHHI. 96 MKJWD1$&=_H$-;=TPW_@B88C:NN?P;XA:.N'&-D0]FW[X-T1IV;<NHI1,61=1 97 MS@U8%U%9]:V+J*12UD54,\GKDFR)PJ)D@<*B9$1A\>IS*QE1UQOX%">K229\ 98 MDW4DNUE6DXPHJR4MTDBFPHHTDBU1Q[.HPK:&DA%U/.(.;)I#AD7E=F#78+EE 99 M$+7$I`4BBRJL0"3Y$L5+BRIL/RSYS>*EY$3Q,FEAR*(**PQ)OD2UU*(*VX!+ 100 M3E1+!T8124Z4*Y-69BRJL,J,Y$21-&EE1C:[>BF5&<F=-"MY[AN')#E1FKWR 101 M)`-1HJ4>4B0L\<5C"8$O'DL@JL/77$M4B>FN7>*KOQ95(/\`4:"^YEJB4$UW 102 M[1)?OK6H`ID`EJB12PC4R"40-7)R>)$HE],_T"GG$L$WK$CBS2^D2ISHA50' 103 M>XG:M445F)SQYG=1)4[T+JIS[1+58XF!ZK'$FU]#E6*BUU!KUXHEZK=2!.JW 104 M4BQ1OY4B4+^58N(W4*68^`U4*9RF*87ZD/WP0V:]^7!8?WU]>LCNMH^'LT/@ 105 M>_:]7&5_MS\$QH3[]_I#=LKF7SZ5DT[?K^X.JV_O5T^O=6XOYZ6^OCP=LS\^ 106 ME>7/$@A\<W6XLF7R]`'_.'U`^8_O#F\^H.R,?+2+OONR^N-]/5OI\/$T2JF< 107 MCU3^75W^=KH,Y>5RBA*\LS:_P?TW*,W6G]A@I/+_LE[LBY_WQ;KXMB^]^*=W 108 *_P=^R6KV..4````` 106 109 ` 107 110 end -
Tst/Short/ringmaps.res.gz.uu
r653440 r6a1aa7 1 begin 664 ringmaps.res.gz 2 M'XL("&&](E,``W)I;F=M87!S+G)E<P"]75MO&S<6?O>O&`1]L"/9.^3A9:;! 3 M>H'%O@18%#"Z3WWP5E+L0D`BQ[:"1?OKES.2>#N''(XCIF@11\,9GLN(_#Z> 4 M\[F__N=?'W]IFH;=-O_^^,]W^]?]S>?M^MV'BU^/%_AM8S[\[W:WW5]>?;@8 5 M_FQN;YN7[>Z/+ZNOKS>[A__=O.Y7>WL#W#;V9W$S#FRVN_W#'P\OS=^;R^./ 6 M5\OF<K5LULMF8W[\]-5-*&^;[:>'U>?FHQG>:]GRMH7V_>I>OE\O&;0@6]WK 7 M]^OWF_M^R=M>,<U[>;A^#\MF!8NUN-Z`>Z*Z;;X^??ZS><0/;!9-],CFN@D> 8 MZAZC;YO=MR]KX\;./`@$!P%<N.N=F<9XN[]\]]L[$ZG?[(7^=.&C^=@:L)+K 9 MY86=?+WIEQ=V8G,-EA=KL5B!\>3T(-:>'O1H'N3?NO"?>NT]QM[*3K?NS*TG 10 MV^U5?DAH\VP<:U.987#NS#!QELPPF<\,4S8S=T-F[NP%?:[,=&_/3)_+#&^/ 11 MF?EKIUKOZ[-L5)O\"G'F)PK$:L'X>K/@?+-L.*SX6FP6&S>:'Y,P9H&OAJ'K 12 MS6JQVJR'_]PX"*+,F;LBW)O_-]6.+[_YTUZ6?I1'4P:;!G,NK#EVL/(C>;`& 13 M5FMW7?OAXLQ^WME`01@HR`2JGQ,H:,L"!2P5*.!>H.`8*+"!`D"!2L8)1#Y. 14 M(.DX@;)Q8C*($Y/).(&>%:>N,$Y]*DZB]>+$Y"%.S'YE!*/BI$V8NBA*@N>C 15 M),"/DK(?BU.08/\$X=MD_DW&2<@Y<1*J+$Y")^/4^>_3/1Q?J'N[+HD>14JG 16 MWBC9YF,E&?U&R=/F\1??/S$>1(N;UXJ'X?+C)6%.O*0HBY>4J7A)Y<6+WS-^ 17 M"-CPDQVB9RQ6LIL(64^'3+5>R%#$>/+]4K,6=E6XL*ODPJY$$"\;+ALM%2SM 18 MW,3)A.DZBI+"2_JU%R05K.@N1IT7HZZ-@]2E5W4U:U77A:NZ3J[JF@=1ZMI3 19 MF#J[LFN\LJ??*CVQM.O$TJZ50]Y:WS2O^S%^GU[WSE035/-W8__)5'?)1.WU 20 M8;SE\A#R*WNM,S%JK(_-_JEY9^"9>=#@Z/#7T-N.N>%;0Q)<XCY>O0%GF?2U 21 M7<]EQ\PUH7C/M-"M&28=`.MX:LK'JQPBBY_=]4JVG?F'.8360>K9NRL"LG7" 22 M"]9=&*P[(E@R>OISS3`I/-D9`J3Q4^G0=/Y[9"!B]"H=/XD"U$=/'Z#P,4;F 23 MPC^:W=/P==_MM_L_&W.]>7QY^C+BY</EAY>7IY?F:;/Y]O+R\,E0T<;\=?WP 24 M^/3RT!RF^+S=/9AI?FY^3\SS^\F6OB5M>3RS+7U+V_(8V!)_RPYC=N>VA=&V 25 M[`);>)!80(D%(K%]_+T:H'M!8F&F`X`=`)180=HRF=BYM@C:EC"Q\8IP&#.9 26 MV+FV2-J6,+$J2*RA#%%B#Y]$B8W7@X%K%"36(/Q9#FCLP&D>YT!'VC*9V+FV 27 M=+0M86+Q2C:,F4SL7%N(E>PTS\D6UK;A-_8>T%?V\%&06M:B16=@2-.Y'4;- 28 M<L+,A+QP4SDWXGW_.&@JOV^PAR?L>0SL06O:8=!4CM]@#U[6W%3.'A&D>6`Z 29 M<9Y/GT6)1HO0R.ZF,ST.F^D*7HF\R9PO,7@YC9I*]EM,4BF3PG2CE>XX:BK? 30 M;S$)+W?>9,ZD+LHXD7`JWVAM&JAI4;KG^H&7)S>5=8,AI'485)#KF?8P#+;< 31 M5,X>M/`=!A4D>JX]>.%S4SE[>)3F#F&NTV=AHAE:H4:R=\QTGIHRAF#2\>8Q 32 M+8BJ,D:M(MT)S%CJRH83>H^7<DM+V7!$[]-2?N4N!6]Z@I5R.SI^P4-2RD>6 33 M-9*K:_*,G_'XC0PIYD"<AH<L+"]B/,F#1_=M2KB?RQ1CM([P.('/Y2[$Z7O. 34 M&$_PTLCL$!OFV)PS'D-#2^;HXR/&,8)3P1OG'28Q3I/%T7#[MD&$?3)LQ1H. 35 MF&W5("MFGFFVP@"AGBILQ<PS35<8T#3NW'3%S#/-5QB$>"?'5UQJ,=^J05?, 36 M/--\A0$".57XBIEGFK`PH(G<N0F+F:>`L4`(;/*,Q247+0BU"`M@7$,0%H%P 37 M32W"(C"N(0B+2!"Z\Q,6D2)T099%C&ORA,7F65"PQO*5Q-8B*#AC&07:7$2* 38 M$X7;BU"1"SD$[AR@J,24_6AK]$`R-C\!\4/K91M9GP>6UGY)`>1N8F^7:"-# 39 M>-+W0*:P:^2""-`D\^#D4!OTX23S\*0,\I;`D\PY'"<L!)37!SAV#>WAR![Z 40 MG@9E,DYBB"N/#Q@?=ST^Q-Z81+1C.*[%Z=R=*3^G*8#I/%-Q*I_G^J3BO#Y/ 41 M>J,(6(O\"'?W'.+TO,';>XWZ@9EGNH#`%-[>:Q00S#S3%02F:#!^[@J"F6>Z 42 MA,!4M+UG0+F76PSWJZ!R11RI(E2N<7&H"BK71'4(H7)-\Y6SHW*=X"M!;G6X 43 MJ>=0N<NMQKRB"BS7!*]`L%SC^E`56*Z)`A&"Y9HF+&>'Y3I!6,+<AF@G#\N] 44 M[**UIQ8NUWCU(7"Y1E"J%B[7N%1$X'*=X"WGQ^4ZQ5N"-'<Q+,SC<I=HU`P2 45 M`/.)\T;4UH$!>G#>B%HU`H3NSAN[N"R2@^B>+Q0!B#`Z<H&J6F0\2-"`$.%V 46 M\2%_'J1['E`<H/3T%W<_Y$]_<8<"??H[=`]8O,ZD0^M#AX!%ZV;I<5B]#Q)( 47 M8G7;+\I003U$ZG($M7Q$M&%#C7"(MH_3&*+TX>Z%'/ME6H=I42$\1.@6U_I% 48 MZ@0^][R)4_@\PP_>QCE\SGG`4;WW.;*=M^'>GL;DS#T4[^PJ>`7I;E[>XDU8 49 M)=\^CBN8#MTJ.RC:O9*HT[,>HV8HLAZ?8T/&>AK9AM:S<%%.XRIG/:YC.525 50 MLY[A(V<+@+#UN,CD$(JS/ER$<\C!LQ]EM1)N,#,5X`;.T/)>"3>8F0IP`V<) 51 M7'5VW&!F*L`-G,4[50XW>&FF]JDZ[0=FKI+V`X[J?_7:#\Q<)>T''!48Z[4? 52 MF+E*V@\XC\]OT\C*91N5-&LU'YB9"IH/.*J3UFH^,#,5-!]P5(NMU7Q@9BIH 53 M/N`\/N'.P4\OS12V[0K.:\9A,QTANV6Z-LXT=8+>%9S:O,4D3/R\R9Q)*8A> 54 MD.W9)I%+7Q>=W_"A8&X!.CC1`!^JX@Z@@Y,,<`C6`1*@6^$;1R7D$*#S8PN\ 55 MQM"6]P[:0ORM#2'Z>/MB?-:".P$F1^5?&J1SOS*;`.F>1T1+_"Q?XO?R><H+ 56 M@A6$]HL0+*:!NO,"%P<Q4">I(A<8+F:@.B[>.:AN:2(7$5Y,8G7/`;J5NL0! 57 M?%"?0>NX>.?0NN=`B(72<-US@&X9Q@X<\3I3UB:)CZ,CQ,XZSP5<OR,@NXSZ 58 M_#.0W?F`JW:U(+M,]<0&:[Y$NWLMR"[Q[DY`=IF@-.>'[#)%:8+57L:[>PZR 59 M>VE.]<)6@.PRV0L;9IK:W2M!=DGN[@BRHZ)M1<@ND\0FR+>*CW;3D-UE&]6( 60 MJT%VE>J'#5*-*L[5(+O"37$$9$?E[&J07:4H39CD^,0[!]F]-*<:>"M`=J*` 61 M3D%V7$*O!]F),CH%V7$AO1YD)XKI%&17OM)7>9!=^3I?`[,<9-?3*E_[2STX 62 MJB]'9^H!S(4`YTH/Y^H)W>Z(=B5"NZ@VG,#L>EJ+Z[F44N(6.Y-4UZ;<2`EG 63 MG0.EBEG/C8Q>-E_@X5U&WHI!+Z[L4:B]*Y6&.@]P%:]*5X>99[JK@W<_1AEJ 64 MYIGNZN"X`%FEJ\/,,]W5P;M2;:B7V8PR]$1G)$UGNHR0$PXOI_#Y#"$;MWP& 65 M+*'IRV60S@M<UZQ%:`CQ-4%H^A\E@C0SE1`:+.RN16@(;3=!:/HY(D@OS3]. 66 M`LD),39%:%`5NB*AZ8LDD!R+O>L1&D+Q31&:OEP"Z64[)X"$=K6`UJQ+3!X6 67 M)B%/"PV@BKK//,R-XTF+="L38`VU1PV$M,/F*/RL'X"+Z]40.Q`:9`*Q`Z[; 68 M5T/L9JX2Q`ZDO+D.8@=:WAPC=FB=!O+.PG5H/?WC\Y7[>$K[>&='YG6/;_^E 69 MAX`DNMNRW[E#_!9$0&T)V]SOV`$VI9BT[J-.A+?^>AW?\92,<I[+*8$E<K9, 70 M9^E<SF@L\P0`V)36TB<`@(OT!`$`7J:VM.;CHG;AF3WPC"P26X^+SL29/?`R 71 M0:&S/B,FS/37`,_H_@C;,\(\90>5"N:<\3FQ7/:W!P+D=&W8`2RG]2"BBSZ4 72 MJ\&L$UB/6MYP"JB&F&\X!:P=)1M.`4HU8<Z-`CT8LGY2#Q8:7R((`U$N"+/& 73 MX\)A>9LIX-IAMLT42.D?;C,%X<G"W`8K/$78<=-QVZR8E(39D7DUV'?L-DCD 74 M]QW;+"HGYK=9.:D;LR-3DK'O<!R)`]^TS:+J8VJ;E87B,CL^HRN;>,-E1@6& 75 MWV]<6*.V65FHG[+C,]*I_#:K,CHG;#TN%%';K"I4"-GQ&7%0;IM5&1T/87M& 76 M:&.W654L@+%WY+0O^6U6Y60JA`,Y%8F+OIXA[K#W?(>N`]"Q_\0VB[5@]#:K 77 MBW4=]H[YD@Y`Y_SY;19+G:AM5L^0=-A[OD/-`?BP/[_-DD(>8IL=#OSMSW`S 78 9_M\CAO]!Q+?72W;UX:>+_P/6*"8!<F(````` 1 begin 640 ringmaps.res.gz 2 M'XL(""RJOU,``W)I;F=M87!S+G)E<P"]7=]OX[@1?L]?(2SZD*SM5.20E-1% 3 M4Z#HRP+%`<'UZ1[2L[W)(<"NLTF\*.[^^E*2S5\SI,A(N<,=-FM1S#?#\7`^ 4 MS@SOY__\Z_-/556QF^K?G__YX?AZO/[ZN/OPZ>+GTP-^4^D/__MX>#Q>7GVZ 5 MZ/^L;FZJE\?#;]^VWU^O#_?_NWX];H_F!;BIS,_B>AA8/1Z.][_=OU1_KRY/ 6 M/UZMJ\OMNMJMJ[W^\<MW^POE3?7XY7[[M?JLAW>-K'E=0_UQ>R<_[M8,:I!U 7 MTS4?=Q_W=]V:UYUB#>_D^/P.UM465CNQV8.=4=U4WY^^_EX]X`FK515,66TJ 8 M;U([37-3'7Y\VVDQ#GHB$!P$<&&?M_K7:&F/EQ]^^:`U]8MYT)T??-8?&P!; 9 MN5M?F%^^VW?K"_.+]3-87^S$:@M:DO-$K#Y/]*`G<E]=N;-NG&G,J^S\ZD&_ 10 M>L9NGO)Q0:MG+5@=6QD&2Z\,$XNL#)/IE6'*K,QMOS*WYD&SU,JT;U^9+K4R 11 MO#ZMS!\'53M?GW6EZNA7B#-WH4!L5XSO]BO.]^N*PY;OQ'ZUMZ/Y:1&&5>#; 12 M?NANOUUM][O^/SL./"US9I\(:_E_5?5@_/I/\UBZ6AZ@])AZ.!<&CAFL7$V. 13 M:&"[L\\;5UV<F<];HRCP%04)174EBH(Z3U'`8HH"[B@*3HH"HR@`I*BHGD"D 14 M]022UA,HHR<F/3TQ&=43-$5Z:C/UU,7T)&I'3TR.>F+F*R,8I:=&JZD-M"1X 15 M6DL"7"TI\[$X*PF.3^!;D_XWJB<A2_0D5)Z>1!/54^O:TQV<#.K.^"71(4TU 16 M,8N2=5I7DM$6)<^;QQ_\^,2XIRVNS8K[ZG+U):%$7U+DZ4O*F+ZD<O3%[Q@? 17 M%=;_9(8T!<Y*MA,JZVB5J=I1&=(8C]J7*G+L*M.QJZAC5\+3EU&7T9;R7#O7 18 M>M)JV@1:4MBE;QPE*<^C6QVUCH[:.E12&_?JJLBK-YE>O8EZ]89[6FKKLYI: 19 MX]D;[-GC5M5,N/8FXMH;92/OIKFN7H^#_KZ\'BU4K53]=XW_#-4^TEI[O1]> 20 MN1Q5?F6>M5I'E9&Q.CY5'W1XIB?J!>W_ZDO;,CO\49,$NW"?K]X09^GEJ]N. 21 MRY;I9T+QCC6BJ?4P:0.PEL=^Y<-5*B(+YVX[)>M6_\-LA-9";.[#%1&RM<)1 22 MUJVOK%M"63*8_?D]U:3P+UM`00V>E59-Z]J1#A$#4SI]$BBH"V;O0^&3CO2# 23 M?U2'I_[K?C@^'G^O]//JX>7IVQ@OFY72/V]NSBQTW<]^-;Y[__+R]%(][?<_ 24 M7E[NO^@1E?[K[O[AZ>6^&G__U\?#O<;PM^K7"(A?ST"[F@3Z\&<"[6H:Z(,' 25 M-/Q^CF,.?RI01@,]>$"Y9R^`[`4(>^G"KVO/"#+L!1SI8*YT@*4#9"^"!#II 26 M+XL"%310WUY"%S6.F;2718%*&JAO+\JS%TUP`GL9/PGL)?1>/3/*L!<]EY%. 27 M_SQ/N@9+=P9AI6M)H)/VLBC0E@;JVPOVV/V827M9%"CAL<\@SD!97?O^Y0Z0 28 M@QD_\BR&U<A_]C1QVF0&,FF_$7KJ62)J'$A&"\0*&89&IT%3=K,X6AY!^^"A 29 M1=Y['#1E/(NCQ1[<`K%HA6=`/9$,+>C\66!"R*4.Y'G:AD:.;03E:_VWF9)B 30 MS^I@L:*&H>-YU)0=O0-B%4/LFQ)R[*=14[;T#HBQ?W>P6,1M8$Z$-5'&A/QM 31 M?ZR094N>F+.EQ#[7`C%",A0FCX,R[&A1M`R'RA:(18M\_3@HPX:618M]O05B 32 MT?+`@%H4,I\_\TV((;<['`&<;"A]8,$8"F1/+P]+B@XP&*.<7WN.*,V!!NOS 33 M-LYI!3>'%:Q/W+B'%?S*/O*^0Y&S"FY&AU\=_ZB"#]Q[H-P;,O/#>&C-_L%# 34 M3Z?[25:&+3,>/1T9Q#=+PMVUC)TC&$%XN(#/^2*$R_><`$^<5@2P_1@\Q?$M 35 M>!R"&XI/'RHRCH-AY5F<<\3(.'V$,``WU@9!,)@@FP8X8"8]EVNN>:%G`()) 36 MAUR3`0H"9W/-<J`X`$1<DP'-WN=PS7*@$?;NN5KP0[\4U[3F@HGT7*I9+AQ! 37 MI$.JR0`%>[.I9CE0'.4AJLF`)N]SJ&8YT`AY]\W%#^W25-,:#')<2S#-<@EQ 38 M8$<038$"NR6(9C%8@>,Z@F>*"(>?QS/+P<8HO&<\(@SKTC33F(^@HCK#,B,[ 39 MJZ"B.4/TT-XJ8DS6WUV%"D1(41LK`$7AIO"CR,#A%QA^A#OYZ&4=H$_'U0:_ 40 MI-A#.Q':2+17HW#:E4#&0O=`!.$%T\R)ION$N1M-,R><EMZZ1<)I9@4.%\R/ 41 MIS=C-+J!>LQC0=?1,:D,%]$/JT\3#--MADG,B]&`?E#'1IR344RY:QJ+KZUD 42 M*ES*YU*95+BNSY/2*"*J1W+X@4@JX':DP9'(W*3:FI4Z/T6$(F%6C2D<BLS- 43 MJKT!*1&+A&DUIF@6,R>M]@:D1#`2YM68"H*1!-5Q3`:3J-E<IUP\XE@?D9T& 44 M)V)GDYUBI`V1B45LIZ'YXRRV4XXT0B`]DVG\$"1%=ZS)-)C,S>8[Y>(1;`X1 45 MG@;G8F<3GG*D1#(6,9Z&YI"S&$\YT@B)]$W&#_G2E,<Q&N1&%^$\Y3)B3TJ0 46 MG@9%FXN0GG*T.#%+L)XFPB=GLIYRM#%"Z1E0&T;=:=IC30@5H'F\9^(T&Y62 47 M8?[CG6:C\C"/`-G3[#;,%:88D",+Q:\""H1$H')U"0DB+,LG$&V8G$IS($<" 48 MBF+EYA9P454ZMX!KF^C<0E]:9.@0DY8,]>5#A@QIIV:I4.<M($F%3(TZ0S4S 49 M/A&2`V?@`V'PB_B$)0Q=N(P^">K?7LFA1J^VE`&5L_@$R-`&MYHD0G\<:<(E 50 M?"Z0@]?A&CZG)."HO.(YP,YK/QB)4QYF)\6AB/),D.X@X#4.#%34^CA.ZUL* 51 MH,R@8%^,1M\.>DPM(`L]SI)``CT=X?OHF>^4XX&@18]SJ#8,3*%G.&EA@C*, 52 M'J<P;6!DT?M..!63./C1JBX0D6C/4K1G:A09\0AGR/4O$(^48\5\&4<CG$4B 53 MO5G12#G66)QW\+"&NU\J%G%,A]K[%JCS*9>2K,T(JWPX2F<O5.53C)>3U1EA 54 MC0]'R?2%:GS*\9+U&6&%#^?A27X\"+1&A'+[2]3WE$N(>32N[N&HF&")ZIYR 55 MK)A)X]H>CHH9EJCM*<=*UM\APPGS)ZGHVS$=*K1O,X[MQJ8K*V0_]RPIR0JX 56 MM@[-ATK>M!F'=XOCQ7S:06+QQKA-A@TMBY?T[VUPC,?[(A=#>\"V?_&^DL72 57 M'K#-7QP\ET72'M/"S%'YAD][^*F9J<&$@7>6,$#H1'SB,[R^&N9:<=M*SU%Y 58 M!4U]N%O=$*$^CD1$<U.1+*%%/T])07`M'[_P0_`X_;%2X'0WIC\D`><"!^$) 59 M`H0SSI8`&?+-11"%1QF0(P#=@Y(C`$X@)3@0SCA;#N0(X$>#<1+D"$`W16`! 60 M3BR(*8-)XGQ&P(-8ZXB`D\X$$9)!:U6""%D9<*IY`2($A:6P&D4.$9(H$%F` 61 M")5CQ8$(081DA&#.(D+E6&,$T]M!9!B(I(B08SJQ8OR91*A<RF@IOF\^5""R 62 M`!$JQTL&(H@(H;J'A8A0.=XHT?3,2(5G^W$B9(T(U6`L082*)52Q4GS/@%"U 63 MQQ)$J!PKKKDEB!`J,UF"")5CC1%,WW#"-$J*"#FF$^LYF$F$RJ4DZ1XB0KCL 64 M91DB5(Z7;+9"1`@7ORQ#A,KQ1HFF;T;N31C*(4+*O0=#!Z^6"#73MV"82Z\X 65 MJNSPB9#TR`-X[$$Z[*&9N-=BX!`2<0A4>!%A0LWT716.2+&;*K*%B=X^$1,C 66 M=K&$%2#W1@E'C,1]$NED)&\3-SQ@*H&ST!07:G/O.+`2X(SSW$HL5?HM:S,N 67 M..#MXA<<E./,N-^`XQ3[W"JL<IP9UQOP-O=Z`\=4$I<;G%FGI%EGF[AN`$9K 68 M%R[M).YI,;03#._L\EONK10XJ;\`[RQ>(^+*$H)W=N_1;E^.-:?9GN.K4A;@ 69 MG>58<UKM>5?2:N^8SCLUVI=+F=5FSU'-QT*\LQQO5I,]Q[>G+,,[R_%FM=CS 70 M+K_%WC&B5(,]U-L5U-J%,CGZ4"'//A%0Y8M+`O6+P]F=M$X4\-4B#A,3T@PK 71 MZ?,V<@`N@EF&!)4N%A"W:Q`D"'#QS3(DJ!POF4\,21"0MWHL0(+*\49)YL'# 72 M:QOL;PT#@MIIKG^^LA]/-=;?FI'IIOJWW[,,Z.Z(@`X57+P,J"K)YTC!W77` 73 MIMKQC?BH$.FM-_JY@L=Z],M$CG7O(V'SFOBMR(D&_C2G`C;5R.]R*L#U-`2G 74 M`I[7RF_@XRJ2S.02\$1?/4:/"SF(Y!+PO,YRBS[159XHKP.>:/(FL"<ZK949 75 ME-OE;,&G.IR3%Q8#I/J-L0#XK@8GV+7:A_Q>6R,$OK0@O]X<4+([76\.^!(! 76 MLMX<(+?CUHJ1T6V+T$]VV_K@<]IM0>2WVQKP.,.=7V4..,F=K#('LK$:5YF# 77 M<)IN[08KG'[;TZ9CMUDQV7!K1J9[;6?L-JB%>L8VB_+>Z6U63G;EFI&QAMP9 78 M@J/6ZS=MLRA-'MMF96;KKAF?Z-J=L'"9:*/%]HVSM=0V*S/;2,WX1`=I>IM5 79 MB8Y.C!ZG":EM5F5V-)KQB6;&U#:K$JV%!/9$>Y_99E5V9YUY(]54E]YF5:K# 80 MC1`@U6)FM=\4]':9=V:T=0'*I$QLL[AWE=YFF^RV+O-&>4<7H-1)>IO%/934 81 M-ML4='29=V8T<P'.GZ2W6;*/C]AF^QR*^1FNA_]A5?__I/KQ>LFN/OWEXO_P 82 '$%6HY6H````` 79 83 ` 80 84 end -
libpolys/coeffs/OPAE.cc
r653440 r6a1aa7 341 341 r->cfName = nAEName; 342 342 r->cfInpMult=nAEInpMult; //???? 343 r->cfInit_bigint= NULL; // nAEMap0;344 343 r->cfCoeffWrite=nAECoeffWrite; //???? 345 344 -
libpolys/coeffs/OPAEQ.cc
r653440 r6a1aa7 334 334 r->cfName = nAEQName; 335 335 r->cfInpMult=nAEQInpMult; //???? 336 r->cfInit_bigint= NULL; // nAEQMap0;337 336 r->cfCoeffWrite=nAEQCoeffWrite; //???? 338 337 -
libpolys/coeffs/OPAEp.cc
r653440 r6a1aa7 363 363 r->cfName = nAEpName; 364 364 r->cfInpMult=nAEpInpMult; //???? 365 r->cfInit_bigint= NULL; // nAEpMap0;366 365 r->cfCoeffWrite=nAEpCoeffWrite; //???? 367 366 -
libpolys/coeffs/coeffs.h
r653440 r6a1aa7 91 91 } LongComplexInfo; 92 92 93 94 enum n_coeffRep 95 { 96 n_rep_unknown=0, 97 n_rep_int, /**< (int), see modulop.h */ 98 n_rep_gap_rat, /**< (number), see longrat.h */ 99 n_rep_gap_gmp, /**< (), see rinteger.h, new impl. */ 100 n_rep_poly, /**< (poly), see algext.h */ 101 n_rep_rat_fct, /**< (fraction), see transext.h */ 102 n_rep_gmp, /**< (mpz_ptr), see rmodulon,h */ 103 n_rep_float, /**< (float), see shortfl.h */ 104 n_rep_gmp_float, /**< (gmp_float), see */ 105 n_rep_gmp_complex,/**< (gmp_complex), see gnumpc.h */ 106 n_rep_gf /**< (int), see ffields.h */ 107 }; 108 93 109 struct n_Procs_s 94 110 { … … 96 112 coeffs next; 97 113 int ref; 114 n_coeffRep rep; 98 115 n_coeffType type; 99 116 /// how many variables of factory are already used by this coeff … … 251 268 /// Inplace: a += b 252 269 void (*cfInpAdd)(number &a, number b, const coeffs r); 253 254 /// maps the bigint i (from dummy == coeffs_BIGINT!!!) into the255 /// coeffs dst256 /// TODO: to be exchanged with a map!!!257 number (*cfInit_bigint)(number i, const coeffs dummy, const coeffs dst);258 270 259 271 /// rational reconstruction: "best" rational a/b with a/b = p mod n … … 768 780 } 769 781 770 static inline number n_Init_bigint(number i, const coeffs dummy,771 const coeffs dst)772 {773 assume(dummy != NULL && dst != NULL); assume(dst->cfInit_bigint!=NULL);774 return dst->cfInit_bigint(i, dummy, dst);775 }776 777 782 static inline number n_RePart(number i, const coeffs cf) 778 783 { -
libpolys/coeffs/ffields.cc
r653440 r6a1aa7 798 798 } 799 799 } 800 if ( nCoeff_is_Zp(src,dst->m_nfCharP))800 if ((src->rep==n_rep_int) && nCoeff_is_Zp(src,dst->m_nfCharP)) 801 801 { 802 802 return nfMapP; /* Z/p -> GF(p,n) */ 803 803 } 804 if (src->rep==n_rep_gap_rat) /*Q, Z */ 805 return nlModP; 804 806 return NULL; /* default */ 805 807 } … … 832 834 r->is_field=TRUE; 833 835 r->is_domain=TRUE; 836 r->rep=n_rep_gf; 834 837 //r->cfInitChar=npInitChar; 835 838 r->cfKillChar=nfKillChar; … … 860 863 861 864 r->cfWriteLong = nfWriteLong; 862 r->cfInit_bigint = nlModP;863 865 r->cfRead = nfRead; 864 866 //r->cfNormalize=ndNormalize; -
libpolys/coeffs/gnumpc.cc
r653440 r6a1aa7 475 475 n->is_field=TRUE; 476 476 n->is_domain=TRUE; 477 n->rep=n_rep_gmp_complex; 477 478 478 479 n->cfKillChar = ngcKillChar; … … 516 517 517 518 n->cfSetChar=ngcSetChar; 518 519 n->cfInit_bigint=ngcMapQ;520 519 521 520 // we need to initialize n->nNULL at least for minpoly printing … … 624 623 { 625 624 assume( getCoeffType(r) == ID ); 626 assume( getCoeffType(aRing) == n_Q);625 assume( aRing->rep == n_rep_gap_rat); 627 626 628 627 if ( from != NULL ) … … 635 634 } 636 635 636 number ngcMapZ(number from, const coeffs aRing, const coeffs r) 637 { 638 assume( getCoeffType(r) == ID ); 639 assume( aRing->rep == n_rep_gap_gmp); 640 641 if ( from != NULL ) 642 { 643 if (SR_HDL(from) & SR_INT) 644 { 645 gmp_float f_i= gmp_float(SR_TO_INT(from)); 646 gmp_complex *res=new gmp_complex(f_i); 647 return (number)res; 648 } 649 gmp_float f_i=(mpz_ptr)from; 650 gmp_complex *res=new gmp_complex(f_i); 651 return (number)res; 652 } 653 else 654 return NULL; 655 } 656 637 657 static number ngcMapLongR(number from, const coeffs aRing, const coeffs r) 638 658 { … … 692 712 assume( getCoeffType(dst) == ID ); 693 713 694 if ( nCoeff_is_Q(src))714 if (src->rep==n_rep_gap_rat) /* Q, Z*/ 695 715 { 696 716 return ngcMapQ; 697 717 } 698 if (nCoeff_is_long_R(src)) 718 if (src->rep==n_rep_gap_gmp) /* Z */ 719 { 720 return ngcMapZ; 721 } 722 if ((src->rep==n_rep_gmp_float) && nCoeff_is_long_R(src)) 699 723 { 700 724 return ngcMapLongR; 701 725 } 702 if ( nCoeff_is_long_C(src))726 if ((src->rep==n_rep_gmp_complex) && nCoeff_is_long_C(src)) 703 727 { 704 728 return ngcCopyMap; 705 729 } 706 if ( nCoeff_is_R(src))730 if ((src->rep==n_rep_float) && nCoeff_is_R(src)) 707 731 { 708 732 return ngcMapR; 709 733 } 710 if ( nCoeff_is_Zp(src))734 if ((src->rep==n_rep_int) && nCoeff_is_Zp(src)) 711 735 { 712 736 return ngcMapP; -
libpolys/coeffs/gnumpfl.cc
r653440 r6a1aa7 413 413 n->is_field=TRUE; 414 414 n->is_domain=TRUE; 415 n->rep=n_rep_gmp_float; 415 416 416 417 n->cfKillChar = ndKillChar; /* dummy */ … … 443 444 n->cfSetMap = ngfSetMap; 444 445 n->cfCoeffWrite = ngfCoeffWrite; 445 n->cfInit_bigint = ngfMapQ;446 446 #ifdef LDEBUG 447 447 n->cfDBTest = ndDBTest; // not yet implemented: ngfDBTest … … 474 474 { 475 475 assume( getCoeffType(dst) == ID ); 476 assume( getCoeffType(src) == n_Q);476 assume( src->rep == n_rep_gap_rat ); 477 477 478 478 gmp_float *res=new gmp_float(numberFieldToFloat(from,QTOF,dst)); 479 479 return (number)res; 480 480 } 481 number ngfMapZ(number from, const coeffs aRing, const coeffs r) 482 { 483 assume( getCoeffType(r) == ID ); 484 assume( aRing->rep == n_rep_gap_gmp); 485 486 if ( from != NULL ) 487 { 488 if (SR_HDL(from) & SR_INT) 489 { 490 gmp_float f_i= gmp_float(SR_TO_INT(from)); 491 gmp_float *res=new gmp_float(f_i); 492 return (number)res; 493 } 494 gmp_float f_i=(mpz_ptr)from; 495 gmp_float *res=new gmp_float(f_i); 496 return (number)res; 497 } 498 else 499 return NULL; 500 } 501 481 502 482 503 static number ngfMapR(number from, const coeffs src, const coeffs dst) … … 510 531 assume( getCoeffType(dst) == ID ); 511 532 512 if ( nCoeff_is_Q(src))533 if (src->rep==n_rep_gap_rat) /*Q, Z*/ 513 534 { 514 535 return ngfMapQ; 515 536 } 516 if (nCoeff_is_long_R(src)) 537 if (src->rep==n_rep_gap_gmp) /*Q, Z*/ 538 { 539 return ngfMapZ; 540 } 541 if ((src->rep==n_rep_gmp_float) && nCoeff_is_long_R(src)) 517 542 { 518 543 return ndCopyMap; //ngfCopyMap; 519 544 } 520 if ( nCoeff_is_R(src))545 if ((src->rep==n_rep_float) && nCoeff_is_R(src)) 521 546 { 522 547 return ngfMapR; 523 548 } 524 if ( nCoeff_is_long_C(src))549 if ((src->rep==n_rep_gmp_complex) && nCoeff_is_long_C(src)) 525 550 { 526 551 return ngfMapC; 527 552 } 528 if ( nCoeff_is_Zp(src))553 if ((src->rep==n_rep_int) && nCoeff_is_Zp(src)) 529 554 { 530 555 return ngfMapP; … … 532 557 return NULL; 533 558 } 534 535 559 536 560 void ngfCoeffWrite (const coeffs r, BOOLEAN /*details*/) -
libpolys/coeffs/longrat.cc
r653440 r6a1aa7 144 144 z=nlShort3(z); 145 145 return z; 146 } 147 148 number nlMapZ(number from, const coeffs src, const coeffs dst) 149 { 150 if (SR_HDL(from) & SR_INT) 151 { 152 return from; 153 } 154 return nlMapGMP(from,src,dst); 146 155 } 147 156 … … 1288 1297 } 1289 1298 1290 // Map q \in QQ \to Zp1291 // src = Q , dst = Zp (or an extension of Zp?)1299 // Map q \in QQ or ZZ \to Zp or an extension of it 1300 // src = Q or Z, dst = Zp (or an extension of Zp) 1292 1301 number nlModP(number q, const coeffs Q, const coeffs Zp) 1293 1302 { … … 2168 2177 nMapFunc nlSetMap(const coeffs src, const coeffs dst) 2169 2178 { 2170 if ( getCoeffType(src)==n_Q /*nCoeff_is_Q(src) or coeffs_BIGINT*/)2179 if (src->rep==n_rep_gap_rat) /*Q, coeffs_BIGINT */ 2171 2180 { 2172 2181 return ndCopyMap; 2173 2182 } 2174 if ( nCoeff_is_Zp(src))2183 if ((src->rep==n_rep_int) && nCoeff_is_Zp(src)) 2175 2184 { 2176 2185 return nlMapP; 2177 2186 } 2178 if ( nCoeff_is_R(src))2187 if ((src->rep==n_rep_float) && nCoeff_is_R(src)) 2179 2188 { 2180 2189 return nlMapR; 2181 2190 } 2182 if ( nCoeff_is_long_R(src))2191 if ((src->rep==n_rep_gmp_float) && nCoeff_is_long_R(src)) 2183 2192 { 2184 2193 return nlMapLongR; /* long R -> Q */ 2185 2194 } 2186 2195 #ifdef HAVE_RINGS 2187 if ( nCoeff_is_Ring_Z(src) || nCoeff_is_Ring_PtoM(src) || nCoeff_is_Ring_ModN(src))2196 if (src->rep==n_rep_gmp) // nCoeff_is_Ring_Z(src) || nCoeff_is_Ring_PtoM(src) || nCoeff_is_Ring_ModN(src)) 2188 2197 { 2189 2198 return nlMapGMP; 2190 2199 } 2191 if (nCoeff_is_Ring_2toM(src)) 2200 if (src->rep==n_rep_gap_gmp) 2201 { 2202 return nlMapZ; 2203 } 2204 if ((src->rep==n_rep_int) && nCoeff_is_Ring_2toM(src)) 2192 2205 { 2193 2206 return nlMapMachineInt; … … 3020 3033 { 3021 3034 r->is_domain=TRUE; 3035 r->rep=n_rep_gap_rat; 3022 3036 3023 3037 //const int ch = (int)(long)(p); … … 3083 3097 r->cfInpMult=nlInpMult; 3084 3098 r->cfInpAdd=nlInpAdd; 3085 r->cfInit_bigint=nlCopyMap;3086 3099 r->cfCoeffWrite=nlCoeffWrite; 3087 3100 -
libpolys/coeffs/modulop.cc
r653440 r6a1aa7 457 457 r->is_field=TRUE; 458 458 r->is_domain=TRUE; 459 r->rep=n_rep_int; 459 460 460 461 r->ch = c; … … 503 504 //r->cfName = ndName; 504 505 r->cfInpMult=ndInpMult; 505 r->cfInit_bigint= nlModP; // npMap0;506 506 #ifdef NV_OPS 507 507 if (c>NV_MAX_PRIME) … … 690 690 } 691 691 692 number npMapZ(number from, const coeffs src, const coeffs dst) 693 { 694 if (SR_HDL(from) & SR_INT) 695 { 696 long f_i=SR_TO_INT(from); 697 return npInit(f_i,dst); 698 } 699 return npMapGMP(from,src,dst); 700 } 701 692 702 /*2 693 703 * convert from an machine long … … 710 720 { 711 721 #ifdef HAVE_RINGS 712 if ( nCoeff_is_Ring_2toM(src))722 if ((src->rep==n_rep_int) && nCoeff_is_Ring_2toM(src)) 713 723 { 714 724 return npMapMachineInt; 715 725 } 716 if ( nCoeff_is_Ring_Z(src) || nCoeff_is_Ring_PtoM(src) || nCoeff_is_Ring_ModN(src))726 if (src->rep==n_rep_gmp) //nCoeff_is_Ring_Z(src) || nCoeff_is_Ring_PtoM(src) || nCoeff_is_Ring_ModN(src)) 717 727 { 718 728 return npMapGMP; 719 729 } 720 #endif 721 if (nCoeff_is_Q(src)) 730 if (src->rep==n_rep_gap_gmp) //nCoeff_is_Ring_Z(src) 731 { 732 return npMapZ; 733 } 734 #endif 735 if (src->rep==n_rep_gap_rat) /* Q, Z */ 722 736 { 723 737 return nlModP; // npMap0; 724 738 } 725 if ( nCoeff_is_Zp(src) )739 if ((src->rep==n_rep_int) && nCoeff_is_Zp(src) ) 726 740 { 727 741 if (n_GetChar(src) == n_GetChar(dst)) … … 734 748 } 735 749 } 736 if ( nCoeff_is_long_R(src))750 if ((src->rep==n_rep_gmp_float) && nCoeff_is_long_R(src)) 737 751 { 738 752 return npMapLongR; -
libpolys/coeffs/mpr_complex.cc
r653440 r6a1aa7 444 444 if (SR_HDL(num) & SR_INT) 445 445 { 446 int nn = SR_TO_INT(num); 447 if((long)nn == SR_TO_INT(num)) 448 r = SR_TO_INT(num); 449 else 450 r = gmp_float(SR_TO_INT(num)); 446 r = gmp_float(SR_TO_INT(num)); 451 447 } 452 448 else … … 458 454 if (SR_HDL(num) & SR_INT) 459 455 { 460 int nn = SR_TO_INT(num); 461 if((long)nn == SR_TO_INT(num)) 462 r = SR_TO_INT(num); 463 else 464 r = gmp_float(SR_TO_INT(num)); 456 r = gmp_float(SR_TO_INT(num)); 465 457 } 466 458 else -
libpolys/coeffs/numbers.cc
r653440 r6a1aa7 79 79 number ndFarey(number,number,const coeffs r) 80 80 { 81 Werror("farey not implemented for (c=%d)",getCoeffType(r));81 Werror("farey not implemented for %s (c=%d)",r->cfCoeffString(r),getCoeffType(r)); 82 82 return NULL; 83 83 } 84 84 number ndChineseRemainder(number *,number *,int,BOOLEAN,const coeffs r) 85 85 { 86 Werror("ChineseRemainder not implemented for (c=%d)",getCoeffType(r));86 Werror("ChineseRemainder not implemented for %s (c=%d)",r->cfCoeffString(r),getCoeffType(r)); 87 87 return n_Init(0,r); 88 88 } … … 243 243 { 244 244 Werror("no conversion from factory"); 245 return NULL;246 }247 248 number ndInit_bigint(number, const coeffs, const coeffs)249 {250 Werror("no conversion from bigint to this field");251 245 return NULL; 252 246 } … … 338 332 n->cfGcd = ndGcd; 339 333 n->cfLcm = ndGcd; /* tricky, isn't it ?*/ 340 n->cfInit_bigint = ndInit_bigint;341 334 n->cfInitMPZ = ndInitMPZ; 342 335 n->cfMPZ = ndMPZ; -
libpolys/coeffs/rintegers.cc
r653440 r6a1aa7 3 3 ****************************************/ 4 4 /* 5 * ABSTRACT: numbers modulo n5 * ABSTRACT: numbers (integers) 6 6 */ 7 7 … … 29 29 omBin gmp_nrz_bin = omGetSpecBin(sizeof(mpz_t)); 30 30 31 #if SI_INTEGER_VARIANT == 2 31 32 /* 32 33 * Multiply two numbers … … 214 215 mpz_init(r); 215 216 mpz_tdiv_qr(erg, r, (int_number) a, (int_number) b); 216 if (!nrzIsZero((number) r, R))217 {218 WerrorS("Division by non divisible element.");219 WerrorS("Result is without remainder.");220 }217 //if (!nrzIsZero((number) r, R)) 218 //{ 219 // WerrorS("Division by non divisible element."); 220 // WerrorS("Result is without remainder."); 221 //} 221 222 mpz_clear(r); 222 223 omFreeBin(r, gmp_nrz_bin); … … 408 409 r->is_field=FALSE; 409 410 r->is_domain=TRUE; 411 r->rep=n_rep_gmp; 410 412 411 413 r->nCoeffIsEqual = ndCoeffIsEqual; … … 427 429 r->cfExtGcd = nrzExtGcd; // only for ring stuff 428 430 r->cfDivBy = nrzDivBy; // only for ring stuff 429 r->cfInit_bigint = nrzMapQ;430 431 //#endif 431 432 r->cfInpNeg = nrzNeg; … … 460 461 } 461 462 462 #endif 463 #elif SI_INTEGER_VARIANT == 3 464 465 //make sure that a small number is an immediate integer 466 //bascially coped from longrat.cc nlShort3 467 //TODO: is there any point in checking 0 first??? 468 //TODO: it is not clear that this works in 32/64 bit everywhere. 469 // too many hacks. 470 #ifdef LDEBUG 471 #define nrzTest(A) nrzDBTest(A,__FILE__,__LINE__,NULL) 472 BOOLEAN nrzDBTest (number x, const char *f, const int l, const coeffs); 473 #else 474 #define nrzTest(A) 475 #endif 476 477 #define CF_DEBUG 0 478 static inline number nrz_short(number x) 479 { 480 #if CF_DEBUG 481 StringAppendS("short("); 482 nrzWrite(x, NULL); 483 #endif 484 if (mpz_cmp_ui((int_number) x,(long)0)==0) 485 { 486 mpz_clear((int_number)x); 487 omFreeBin(x, gmp_nrz_bin); 488 #if CF_DEBUG 489 StringAppendS(")=0"); 490 #endif 491 return INT_TO_SR(0); 492 } 493 if (mpz_size1((int_number)x)<=MP_SMALL) 494 { 495 int ui=mpz_get_si((int_number)x); 496 if ((((ui<<3)>>3)==ui) 497 && (mpz_cmp_si((int_number)x,(long)ui)==0)) 498 { 499 mpz_clear((int_number)x); 500 omFreeBin(x, gmp_nrz_bin); 501 #if CF_DEBUG 502 StringAppendS(")=imm"); 503 #endif 504 return INT_TO_SR(ui); 505 } 506 } 507 #if CF_DEBUG 508 StringAppendS(")"); 509 #endif 510 return x; 511 } 512 513 514 515 516 /* 517 * Multiply two numbers 518 * check for 0, 1, -1 maybe 519 */ 520 #if CF_DEBUG 521 number _nrzMult(number, number, const coeffs); 522 number nrzMult(number a, number b, const coeffs R) 523 { 524 StringSetS("Mult: "); 525 nrzWrite(a, R); 526 StringAppendS(" by "); 527 nrzWrite(b, R); 528 number c = _nrzMult(a, b, R); 529 StringAppendS(" is "); 530 nrzWrite(c, R); 531 char * s = StringEndS(); 532 Print("%s\n", s); 533 omFree(s); 534 return c; 535 } 536 number _nrzMult (number a, number b, const coeffs R) 537 #else 538 number nrzMult (number a, number b, const coeffs R) 539 #endif 540 { 541 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) { 542 //from longrat.cc 543 if (SR_TO_INT(a)==0) 544 return a; 545 if (SR_TO_INT(b)==0) 546 return b; 547 long r=(long)((unsigned long)(SR_HDL(a)-1L))*((unsigned long)(SR_HDL(b)>>1)); 548 if ((r/(SR_HDL(b)>>1))==(SR_HDL(a)-1L)) 549 { 550 number u=((number) ((r>>1)+SR_INT)); 551 // if (((((long)SR_HDL(u))<<1)>>1)==SR_HDL(u)) return (u); 552 return nrzInit(SR_HDL(u)>>2, R); 553 } 554 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 555 mpz_init(erg); 556 mpz_set_si(erg, SR_TO_INT(a)); 557 mpz_mul_si(erg, erg, SR_TO_INT(b)); 558 nrzTest((number)erg); 559 return (number) erg; 560 } 561 else if (n_Z_IS_SMALL(a)) 562 { 563 if (SR_TO_INT(a)==0) 564 return a; 565 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 566 mpz_init_set(erg, (int_number) b); 567 mpz_mul_si(erg, erg, SR_TO_INT(a)); 568 nrzTest((number)erg); 569 return (number) erg; 570 } 571 else if (n_Z_IS_SMALL(b)) 572 { 573 if (SR_TO_INT(b)==0) 574 return b; 575 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 576 mpz_init_set(erg, (int_number) a); 577 mpz_mul_si(erg, erg, SR_TO_INT(b)); 578 nrzTest((number)erg); 579 return (number) erg; 580 } 581 else 582 { 583 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 584 mpz_init(erg); 585 mpz_mul(erg, (int_number) a, (int_number) b); 586 nrzTest((number)erg); 587 return (number) erg; 588 } 589 } 590 591 592 static int int_gcd(int a, int b) 593 { 594 int r; 595 a = ABS(a); 596 b = ABS(b); 597 if (!a) return b; 598 if (!b) return a; 599 do 600 { 601 r = a % b; 602 a = b; 603 b = r; 604 } while (b); 605 return ABS(a); // % in c doeas not imply a signn 606 // it would be unlikely to see a negative here 607 // but who knows 608 } 609 610 /* 611 * Give the smallest non unit k, such that a * x = k = b * y has a solution 612 */ 613 number nrzLcm (number a, number b, const coeffs R) 614 { 615 PrintS("nrzLcm\n"); 616 int_number erg; 617 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 618 { 619 int g = int_gcd(SR_TO_INT(a), SR_TO_INT(b)); 620 return nrzMult(a, INT_TO_SR(SR_TO_INT(b)/g), R); 621 } 622 else if (n_Z_IS_SMALL(a)) 623 { 624 erg = (int_number) omAllocBin(gmp_nrz_bin); 625 mpz_init_set(erg, (int_number) b); 626 unsigned long g = mpz_gcd_ui(NULL, erg, (unsigned long) ABS(SR_TO_INT(a))); 627 mpz_mul_si(erg, erg, SR_TO_INT(a)/g); 628 } 629 else if (n_Z_IS_SMALL(b)) 630 { 631 erg = (int_number) omAllocBin(gmp_nrz_bin); 632 mpz_init_set(erg, (int_number) a); 633 unsigned long g = mpz_gcd_ui(NULL, erg, (unsigned long) ABS(SR_TO_INT(b))); 634 mpz_mul_si(erg, erg, SR_TO_INT(b)/g); 635 } 636 else 637 { 638 erg = (int_number) omAllocBin(gmp_nrz_bin); 639 mpz_init(erg); 640 mpz_lcm(erg, (int_number) a, (int_number) b); 641 } 642 return (number) erg; 643 } 644 645 /* 646 * Give the largest non unit k, such that a = x * k, b = y * k has 647 * a solution. 648 */ 649 number nrzGcd (number a,number b,const coeffs R) 650 { 651 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 652 { 653 int g = int_gcd(SR_TO_INT(a), SR_TO_INT(b)); 654 return INT_TO_SR(g); 655 } 656 else if (n_Z_IS_SMALL(a)) 657 { 658 if (a==INT_TO_SR(0)) 659 return nrzCopy(b, R); 660 unsigned long g = mpz_gcd_ui(NULL, (int_number)b, (unsigned long) ABS(SR_TO_INT(a))); 661 return INT_TO_SR( g); 662 } 663 else if (n_Z_IS_SMALL(b)) 664 { 665 if (b==INT_TO_SR(0)) 666 return nrzCopy(a, R); 667 unsigned long g = mpz_gcd_ui(NULL, (int_number)a, (unsigned long) ABS(SR_TO_INT(b))); 668 return INT_TO_SR(g); 669 } 670 else 671 { 672 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 673 mpz_init(erg); 674 mpz_gcd(erg, (int_number) a, (int_number) b); 675 return (number) erg; 676 } 677 } 678 679 /* 680 * Give the largest non unit k, such that a = x * k, b = y * k has 681 * a solution and r, s, s.t. k = s*a + t*b 682 */ 683 static int int_extgcd(int a, int b, int * u, int* x, int * v, int* y) 684 { 685 int q, r; 686 if (!a) 687 { 688 *u = 0; 689 *v = 1; 690 *x = -1; 691 *y = 0; 692 return b; 693 } 694 if (!b) 695 { 696 *u = 1; 697 *v = 0; 698 *x = 0; 699 *y = 1; 700 return a; 701 } 702 *u=1; 703 *v=0; 704 *x=0; 705 *y=1; 706 do 707 { 708 q = a/b; 709 r = a%b; 710 assume (q*b+r == a); 711 a = b; 712 b = r; 713 714 r = -(*v)*q+(*u); 715 (*u) =(*v); 716 (*v) = r; 717 718 r = -(*y)*q+(*x); 719 (*x) = (*y); 720 (*y) = r; 721 } while (b); 722 723 return a; 724 } 725 726 number nrzExtGcd (number a, number b, number *s, number *t, const coeffs) 727 { 728 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 729 { 730 int u, v, x, y; 731 int g = int_extgcd(SR_TO_INT(a), SR_TO_INT(b), &u, &v, &x, &y); 732 *s = INT_TO_SR(u); 733 *t = INT_TO_SR(v); 734 return INT_TO_SR(g); 735 } 736 else 737 { 738 mpz_t aa, bb; 739 if (n_Z_IS_SMALL(a)) 740 { 741 mpz_init_set_si(aa, SR_TO_INT(a)); 742 } 743 else 744 { 745 mpz_init_set(aa, (int_number) a); 746 } 747 if (n_Z_IS_SMALL(b)) 748 { 749 mpz_init_set_si(bb, SR_TO_INT(b)); 750 } 751 else 752 { 753 mpz_init_set(bb, (int_number) b); 754 } 755 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 756 int_number bs = (int_number) omAllocBin(gmp_nrz_bin); 757 int_number bt = (int_number) omAllocBin(gmp_nrz_bin); 758 mpz_init(erg); 759 mpz_init(bs); 760 mpz_init(bt); 761 mpz_gcdext(erg, bs, bt, aa, bb); 762 *s = nrz_short((number) bs); 763 *t = nrz_short((number) bt); 764 mpz_clear(aa); 765 mpz_clear(bb); 766 return nrz_short((number) erg); 767 } 768 } 769 #if CF_DEBUG 770 number _nrzXExtGcd(number, number, number *, number *, number *, number *, const coeffs); 771 number nrzXExtGcd(number a, number b, number *x, number * y, number * u, number * v, const coeffs R) 772 { 773 char * s; 774 StringSetS("XExtGcd: "); 775 nrzWrite(a, R); 776 StringAppendS(" by "); 777 nrzWrite(b, R); 778 number c = _nrzXExtGcd(a, b, x, y, u, v, R); 779 StringAppendS(" is "); 780 nrzWrite(c, R); 781 StringAppendS("[["); 782 nrzWrite(*x, R); 783 StringAppendS(", "); 784 nrzWrite(*y, R); 785 StringAppendS("], "); 786 nrzWrite(*u, R); 787 StringAppendS(", "); 788 nrzWrite(*v, R); 789 s=StringEndS(); 790 Print("%s]]\n", s); 791 omFree(s); 792 return c; 793 } 794 number _nrzXExtGcd (number a, number b, number *s, number *t, number *u, number *v, const coeffs ) 795 #else 796 number nrzXExtGcd (number a, number b, number *s, number *t, number *u, number *v, const coeffs ) 797 #endif 798 { 799 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 800 { 801 int uu, vv, x, y; 802 int g = int_extgcd(SR_TO_INT(a), SR_TO_INT(b), &uu, &vv, &x, &y); 803 *s = INT_TO_SR(uu); 804 *t = INT_TO_SR(vv); 805 *u = INT_TO_SR(x); 806 *v = INT_TO_SR(y); 807 return INT_TO_SR(g); 808 } 809 else 810 { 811 mpz_t aa, bb; 812 if (n_Z_IS_SMALL(a)) 813 { 814 mpz_init_set_si(aa, SR_TO_INT(a)); 815 } 816 else 817 { 818 mpz_init_set(aa, (int_number) a); 819 } 820 if (n_Z_IS_SMALL(b)) 821 { 822 mpz_init_set_si(bb, SR_TO_INT(b)); 823 } 824 else 825 { 826 mpz_init_set(bb, (int_number) b); 827 } 828 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 829 int_number bs = (int_number) omAllocBin(gmp_nrz_bin); 830 int_number bt = (int_number) omAllocBin(gmp_nrz_bin); 831 mpz_init(erg); 832 mpz_init(bs); 833 mpz_init(bt); 834 835 mpz_gcdext(erg, bs, bt, aa, bb); 836 837 int_number bu = (int_number) omAllocBin(gmp_nrz_bin); 838 int_number bv = (int_number) omAllocBin(gmp_nrz_bin); 839 840 mpz_init_set(bu, (int_number) bb); 841 mpz_init_set(bv, (int_number) aa); 842 843 mpz_clear(aa); 844 mpz_clear(bb); 845 assume(mpz_cmp_si(erg, 0)); 846 847 mpz_div(bu, bu, erg); 848 mpz_div(bv, bv, erg); 849 850 mpz_mul_si(bu, bu, -1); 851 *u = nrz_short((number) bu); 852 *v = nrz_short((number) bv); 853 854 *s = nrz_short((number) bs); 855 *t = nrz_short((number) bt); 856 return nrz_short((number) erg); 857 } 858 } 859 #if CF_DEBUG 860 number _nrzQuotRem(number, number, number *, const coeffs); 861 number nrzQuotRem(number a, number b, number * r, const coeffs R) 862 { 863 StringSetS("QuotRem: "); 864 nrzWrite(a, R); 865 StringAppendS(" by "); 866 nrzWrite(b, R); 867 number c = _nrzQuotRem(a, b, r, R); 868 StringAppendS(" is "); 869 nrzWrite(c, R); 870 if (r) { 871 StringAppendS("+R("); 872 nrzWrite(*r, R); 873 StringAppendS(")"); 874 } 875 char * s = StringEndS(); 876 Print("%s\n", s); 877 omFree(s); 878 return c; 879 } 880 number _nrzQuotRem (number a, number b, number * r, const coeffs ) 881 #else 882 number nrzQuotRem (number a, number b, number * r, const coeffs ) 883 #endif 884 { 885 assume(SR_TO_INT(b)); 886 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 887 { 888 if (r) 889 *r = INT_TO_SR(SR_TO_INT(a) % SR_TO_INT(b)); 890 return INT_TO_SR(SR_TO_INT(a)/SR_TO_INT(b)); 891 } 892 else if (n_Z_IS_SMALL(a)) 893 { 894 //a is small, b is not, so q=0, r=a 895 if (r) 896 *r = a; 897 return INT_TO_SR(0); 898 } 899 else if (n_Z_IS_SMALL(b)) 900 { 901 unsigned long rr; 902 int_number qq = (int_number) omAllocBin(gmp_nrz_bin); 903 mpz_init(qq); 904 mpz_t rrr; 905 mpz_init(rrr); 906 rr = mpz_divmod_ui(qq, rrr, (int_number) a, (unsigned long)ABS(SR_TO_INT(b))); 907 mpz_clear(rrr); 908 909 if (r) 910 *r = INT_TO_SR(rr); 911 if (SR_TO_INT(b)<0) 912 { 913 mpz_mul_si(qq, qq, -1); 914 } 915 return nrz_short((number)qq); 916 } 917 int_number qq = (int_number) omAllocBin(gmp_nrz_bin), 918 rr = (int_number) omAllocBin(gmp_nrz_bin); 919 mpz_init(qq); 920 mpz_init(rr); 921 mpz_divmod(qq, rr, (int_number)a, (int_number)b); 922 if (r) 923 *r = (number) rr; 924 else 925 { 926 mpz_clear(rr); 927 } 928 nrzTest((number)qq); 929 return (number) qq; 930 } 931 932 933 void nrzPower (number a, int i, number * result, const coeffs) 934 { 935 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 936 mpz_init(erg); 937 mpz_t aa; 938 if (n_Z_IS_SMALL(a)) 939 mpz_init_set_si(aa, SR_TO_INT(a)); 940 else 941 mpz_init_set(aa, (int_number) a); 942 mpz_pow_ui(erg, aa, i); 943 *result = nrz_short((number) erg); 944 } 945 946 /* 947 * create a number from int 948 * TODO: do not create an mpz if not necessary 949 */ 950 number nrzInit (long i, const coeffs) 951 { 952 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 953 mpz_init_set_si(erg, i); 954 return nrz_short((number) erg); 955 } 956 957 void nrzDelete(number *a, const coeffs) 958 { 959 if (*a == NULL) return; 960 if (n_Z_IS_SMALL(*a)==0) 961 { 962 mpz_clear((int_number) *a); 963 omFreeBin((ADDRESS) *a, gmp_nrz_bin); 964 } 965 *a = NULL; 966 } 967 968 number nrzCopy(number a, const coeffs) 969 { 970 if (n_Z_IS_SMALL(a)) return a; 971 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 972 mpz_init_set(erg, (int_number) a); 973 return (number) erg; 974 } 975 976 int nrzSize(number a, const coeffs) 977 { 978 if (a == NULL) return 0; 979 if (n_Z_IS_SMALL(a)) return 1; 980 return mpz_size1((int_number)a)+1; 981 } 982 983 /* 984 * convert a number to int 985 */ 986 int nrzInt(number &n, const coeffs) 987 { 988 if (n_Z_IS_SMALL(n)) return SR_TO_INT(n); 989 return (int) mpz_get_si( (int_number)n); 990 } 991 #if CF_DEBUG 992 number _nrzAdd(number, number, const coeffs); 993 number nrzAdd(number a, number b, const coeffs R) 994 { 995 StringSetS("Add: "); 996 nrzWrite(a, R); 997 StringAppendS(" to "); 998 nrzWrite(b, R); 999 number c = _nrzAdd(a, b, R); 1000 StringAppendS(" is "); 1001 nrzWrite(c, R); 1002 char * s = StringEndS(); 1003 Print("%s\n", s); 1004 omFree(s); 1005 return c; 1006 } 1007 number _nrzAdd (number a, number b, const coeffs R) 1008 #else 1009 number nrzAdd (number a, number b, const coeffs R) 1010 #endif 1011 { 1012 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 1013 { 1014 int c = SR_TO_INT(a) + SR_TO_INT(b); 1015 if (INT_IS_SMALL(c)) 1016 return INT_TO_SR(c); 1017 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1018 mpz_init_set_si(erg, c); 1019 1020 nrzTest((number)erg); 1021 return (number) erg; 1022 } 1023 else if (n_Z_IS_SMALL(a)) 1024 { 1025 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1026 mpz_init(erg); 1027 if (SR_TO_INT(a)>0) 1028 mpz_add_ui(erg, (int_number) b, (unsigned long)SR_TO_INT(a)); 1029 else 1030 mpz_sub_ui(erg, (int_number) b, (unsigned long)-(SR_TO_INT(a))); 1031 return nrz_short((number) erg); 1032 } 1033 else if (n_Z_IS_SMALL(b)) 1034 { 1035 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1036 mpz_init(erg); 1037 if (SR_TO_INT(b)>0) 1038 mpz_add_ui(erg, (int_number) a, (unsigned long)SR_TO_INT(b)); 1039 else 1040 mpz_sub_ui(erg, (int_number) a, (unsigned long)-(SR_TO_INT(b))); 1041 return nrz_short((number) erg); 1042 } 1043 else 1044 { 1045 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1046 mpz_init(erg); 1047 mpz_add(erg, (int_number) a, (int_number) b); 1048 return nrz_short((number) erg); 1049 } 1050 } 1051 1052 number nrzSub (number a, number b, const coeffs) 1053 { 1054 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 1055 { 1056 int c = SR_TO_INT(a) - SR_TO_INT(b); 1057 if (INT_IS_SMALL(c)) 1058 return INT_TO_SR(c); 1059 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1060 mpz_init_set_si(erg, c); 1061 nrzTest((number)erg); 1062 return (number) erg; 1063 } 1064 else if (n_Z_IS_SMALL(a)) 1065 { 1066 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1067 mpz_init(erg); 1068 1069 if (SR_TO_INT(a)>0) 1070 mpz_ui_sub(erg, (unsigned long)SR_TO_INT(a), (int_number) b); 1071 else 1072 { 1073 mpz_add_ui(erg, (int_number) b, (unsigned long)-SR_TO_INT(a)); 1074 mpz_neg(erg, erg); 1075 } 1076 return nrz_short((number) erg); 1077 } 1078 else if (n_Z_IS_SMALL(b)) 1079 { 1080 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1081 mpz_init(erg); 1082 if (INT_TO_SR(b)>0) 1083 mpz_sub_ui(erg, (int_number) a, (unsigned long)SR_TO_INT(b)); 1084 else 1085 mpz_add_ui(erg, (int_number) a, (unsigned long)-SR_TO_INT(b)); 1086 return nrz_short((number) erg); 1087 } 1088 else 1089 { 1090 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1091 mpz_init(erg); 1092 mpz_sub(erg, (int_number) a, (int_number) b); 1093 return nrz_short((number) erg); 1094 } 1095 } 1096 1097 number nrzGetUnit (number n, const coeffs r) 1098 { 1099 //if (n_Z_IS_SMALL(n)) 1100 //{ 1101 // if (SR_TO_INT(n)<0) 1102 // return INT_TO_SR(-1); 1103 // else 1104 // return INT_TO_SR(1); 1105 //} 1106 if (nrzGreaterZero(n, r)) 1107 return INT_TO_SR(1); 1108 else 1109 return INT_TO_SR(-1); 1110 } 1111 1112 number nrzAnn(number n, const coeffs) 1113 { 1114 if (SR_TO_INT(n)) // in Z: the annihilator of !=0 is 0 1115 return INT_TO_SR(0); 1116 else 1117 return INT_TO_SR(1); 1118 } 1119 1120 BOOLEAN nrzIsUnit (number a, const coeffs) 1121 { 1122 return ABS(SR_TO_INT(a))==1; 1123 } 1124 1125 BOOLEAN nrzIsZero (number a, const coeffs) 1126 { 1127 return a==INT_TO_SR(0); 1128 } 1129 1130 BOOLEAN nrzIsOne (number a, const coeffs) 1131 { 1132 return a==INT_TO_SR(1); 1133 } 1134 1135 BOOLEAN nrzIsMOne (number a, const coeffs) 1136 { 1137 return a==INT_TO_SR(-1); 1138 } 1139 1140 BOOLEAN nrzEqual (number a,number b, const coeffs) 1141 { 1142 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 1143 return a==b; 1144 else if (n_Z_IS_SMALL(a) || n_Z_IS_SMALL(b)) 1145 return FALSE; 1146 else 1147 return 0 == mpz_cmp((int_number) a, (int_number) b); 1148 } 1149 1150 BOOLEAN nrzGreater (number a,number b, const coeffs) 1151 { 1152 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 1153 return ((long)a)>((long)b); 1154 else if (n_Z_IS_SMALL(a)) 1155 return 0 > mpz_cmp_si((int_number)b,SR_TO_INT(a)); 1156 else if (n_Z_IS_SMALL(b)) 1157 return 0 < mpz_cmp_si((int_number)a,SR_TO_INT(b)); 1158 return 0 < mpz_cmp((int_number) a, (int_number) b); 1159 } 1160 1161 BOOLEAN nrzGreaterZero (number k, const coeffs C) 1162 { 1163 return nrzGreater(k, INT_TO_SR(0), C); 1164 } 1165 1166 int nrzDivComp(number a, number b, const coeffs r) 1167 { 1168 if (nrzDivBy(a, b, r)) 1169 { 1170 if (nrzDivBy(b, a, r)) return 2; 1171 return -1; 1172 } 1173 if (nrzDivBy(b, a, r)) return 1; 1174 return 0; 1175 } 1176 1177 BOOLEAN nrzDivBy (number a,number b, const coeffs) 1178 { 1179 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 1180 { 1181 return SR_TO_INT(a) %SR_TO_INT(b) ==0; 1182 } 1183 else if (n_Z_IS_SMALL(a)) 1184 { 1185 return a==INT_TO_SR(0); 1186 } 1187 else if (n_Z_IS_SMALL(b)) 1188 { 1189 return mpz_divisible_ui_p((int_number)a, (unsigned long)ABS(SR_TO_INT(b))) != 0; 1190 } 1191 else 1192 return mpz_divisible_p((int_number) a, (int_number) b) != 0; 1193 } 1194 1195 number nrzDiv (number a,number b, const coeffs R) 1196 { 1197 assume(SR_TO_INT(b)); 1198 if (n_Z_IS_SMALL(a) && n_Z_IS_SMALL(b)) 1199 { 1200 //if (SR_TO_INT(a) % SR_TO_INT(b)) 1201 //{ 1202 // WerrorS("1:Division by non divisible element."); 1203 // WerrorS("Result is without remainder."); 1204 //} 1205 return INT_TO_SR(SR_TO_INT(a)/SR_TO_INT(b)); 1206 } 1207 else if (n_Z_IS_SMALL(a)) 1208 { 1209 //if (SR_TO_INT(a)) 1210 //{ 1211 // WerrorS("2:Division by non divisible element."); 1212 // WerrorS("Result is without remainder."); 1213 //} 1214 return INT_TO_SR(0); 1215 } 1216 else if (n_Z_IS_SMALL(b)) 1217 { 1218 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1219 mpz_t r; 1220 mpz_init(r); 1221 mpz_init(erg); 1222 if (mpz_divmod_ui(erg, r, (int_number) a, (unsigned long)ABS(SR_TO_INT(b)))) { 1223 // WerrorS("3:Division by non divisible element."); 1224 // WerrorS("Result is without remainder."); 1225 } 1226 mpz_clear(r); 1227 if (SR_TO_INT(b)<0) 1228 mpz_neg(erg, erg); 1229 return nrz_short((number) erg); 1230 } 1231 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1232 mpz_init(erg); 1233 mpz_t r; 1234 mpz_init(r); 1235 mpz_tdiv_qr(erg, r, (int_number) a, (int_number) b); 1236 #if CF_DEBUG 1237 StringSetS("division of"); 1238 nrzWrite(a, R); 1239 StringAppendS(" by "); 1240 nrzWrite(b, R); 1241 StringAppendS(" is "); 1242 number du; 1243 nrzWrite(du = (number)erg, R); 1244 StringAppendS(" rest "); 1245 nrzWrite(du = (number)r, R); 1246 char * s = StringEndS(); 1247 Print("%s\n", s); 1248 omFree(s); 1249 #endif 1250 1251 if (mpz_cmp_si(r, 0)!=0) 1252 { 1253 //WerrorS("4:Division by non divisible element."); 1254 //WerrorS("Result is without remainder."); 1255 } 1256 mpz_clear(r); 1257 return nrz_short((number) erg); 1258 } 1259 1260 number nrzExactDiv (number a,number b, const coeffs) 1261 { 1262 assume(SR_TO_INT(b)); 1263 mpz_t aa, bb; 1264 if (n_Z_IS_SMALL(a)) 1265 mpz_init_set_si(aa, SR_TO_INT(a)); 1266 else 1267 mpz_init_set(aa, (int_number) a); 1268 if (n_Z_IS_SMALL(b)) 1269 mpz_init_set_si(bb, SR_TO_INT(b)); 1270 else 1271 mpz_init_set(bb, (int_number) b); 1272 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1273 mpz_init(erg); 1274 mpz_tdiv_q(erg, (int_number) aa, (int_number) bb); 1275 mpz_clear(aa); 1276 mpz_clear(bb); 1277 nrzTest((number)erg); 1278 return (number) erg; 1279 } 1280 1281 number nrzIntMod (number a,number b, const coeffs) 1282 { 1283 mpz_t aa, bb; 1284 assume(SR_TO_INT(b)); 1285 if (n_Z_IS_SMALL(a)) 1286 mpz_init_set_si(aa, SR_TO_INT(a)); 1287 else 1288 mpz_init_set(aa, (int_number) a); 1289 if (n_Z_IS_SMALL(b)) 1290 mpz_init_set_si(bb, SR_TO_INT(b)); 1291 else 1292 mpz_init_set(bb, (int_number) b); 1293 1294 mpz_t erg; 1295 mpz_init(erg); 1296 int_number r = (int_number) omAllocBin(gmp_nrz_bin); 1297 mpz_init(r); 1298 mpz_tdiv_qr(erg, r, (int_number) aa, (int_number) bb); 1299 mpz_clear(erg); 1300 mpz_clear(aa); 1301 mpz_clear(bb); 1302 1303 return nrz_short((number) r); 1304 } 1305 1306 number nrzInvers (number c, const coeffs r) 1307 { 1308 if (!nrzIsUnit((number) c, r)) 1309 { 1310 WerrorS("Non invertible element."); 1311 return (number)0; //TODO 1312 } 1313 return c; // has to be 1 or -1.... 1314 } 1315 1316 number nrzNeg (number c, const coeffs) 1317 { 1318 // nNeg inplace !!! 1319 if (n_Z_IS_SMALL(c)) 1320 return INT_TO_SR(-SR_TO_INT(c)); 1321 mpz_mul_si((int_number) c, (int_number) c, -1); 1322 return c; 1323 } 1324 1325 static number nrzFarey(number r, number N, const coeffs R) 1326 { 1327 number a0 = nrzCopy(N, R); 1328 number b0 = nrzInit(0, R); 1329 number a1 = nrzCopy(r, R); 1330 number b1 = nrzInit(1, R); 1331 number two = nrzInit(2, R); 1332 #if 0 1333 Print("Farey start with "); 1334 n_Print(r, R); 1335 Print(" mod "); 1336 n_Print(N, R); 1337 Print("\n"); 1338 #endif 1339 while (1) 1340 { 1341 number as = nrzMult(a1, a1, R); 1342 n_InpMult(as, two, R); 1343 if (nrzGreater(N, as, R)) 1344 { 1345 nrzDelete(&as, R); 1346 break; 1347 } 1348 nrzDelete(&as, R); 1349 number q = nrzDiv(a0, a1, R); 1350 number t = nrzMult(a1, q, R), 1351 s = nrzSub(a0, t, R); 1352 nrzDelete(&a0, R); 1353 a0 = a1; 1354 a1 = s; 1355 nrzDelete(&t, R); 1356 1357 t = nrzMult(b1, q, R); 1358 s = nrzSub(b0, t, R); 1359 nrzDelete(&b0, R); 1360 b0 = b1; 1361 b1 = s; 1362 nrzDelete(&t, R); 1363 nrzDelete(&q, R); 1364 } 1365 number as = nrzMult(b1, b1, R); 1366 n_InpMult(as, two, R); 1367 nrzDelete(&two, R); 1368 if (nrzGreater(as, N, R)) 1369 { 1370 nrzDelete(&a0, R); 1371 nrzDelete(&a1, R); 1372 nrzDelete(&b0, R); 1373 nrzDelete(&b1, R); 1374 nrzDelete(&as, R); 1375 return NULL; 1376 } 1377 nrzDelete(&as, R); 1378 nrzDelete(&a0, R); 1379 nrzDelete(&b0, R); 1380 1381 number a, b, ab; 1382 coeffs Q = nInitChar(n_Q, 0); 1383 nMapFunc f = n_SetMap(R, Q); 1384 a = f(a1, R, Q); 1385 b = f(b1, R, Q); 1386 ab = n_Div(a, b, Q); 1387 n_Delete(&a, Q); 1388 n_Delete(&b, Q); 1389 nKillChar(Q); 1390 1391 nrzDelete(&a1, R); 1392 nrzDelete(&b1, R); 1393 return ab; 1394 } 1395 1396 number nrzMapMachineInt(number from, const coeffs /*src*/, const coeffs /*dst*/) 1397 { 1398 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1399 mpz_init_set_ui(erg, (NATNUMBER) from); 1400 return nrz_short((number) erg); 1401 } 1402 1403 number nrzMapZp(number from, const coeffs /*src*/, const coeffs /*dst*/) 1404 { 1405 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1406 mpz_init_set_si(erg, (long) from); 1407 return nrz_short((number) erg); 1408 } 1409 1410 number nrzModNMap(number from, const coeffs src, const coeffs /*dst*/) 1411 { 1412 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1413 mpz_init_set(erg, (int_number) from); 1414 return nrz_short((number) erg); 1415 } 1416 1417 number nrzMapQ(number from, const coeffs src, const coeffs dst) 1418 { 1419 if (SR_HDL(from) & SR_INT) 1420 return nrzInit(SR_TO_INT(from),dst); 1421 if (from->s!=3) 1422 { 1423 WerrorS("rational in map to integer"); 1424 return NULL; 1425 } 1426 int_number erg = (int_number) omAllocBin(gmp_nrz_bin); 1427 mpz_init_set(erg, from->z); 1428 return nrz_short((number) erg); 1429 } 1430 1431 nMapFunc nrzSetMap(const coeffs src, const coeffs /*dst*/) 1432 { 1433 /* dst = rintegers */ 1434 if (src->rep==n_rep_gmp) //nCoeff_is_Ring_ModN(src) || nCoeff_is_Ring_PtoM(src)) 1435 return nrzModNMap; 1436 1437 if ((src->rep==n_rep_gap_gmp) && nCoeff_is_Ring_Z(src)) 1438 { 1439 return ndCopyMap; //nrzCopyMap; 1440 } 1441 if (src->rep==n_rep_gap_rat) /*&& nCoeff_is_Ring_Z(src)) Q, bigint*/ 1442 { 1443 return nrzMapQ; 1444 } 1445 if ((src->rep=n_rep_int) && nCoeff_is_Ring_2toM(src)) 1446 { 1447 return nrzMapMachineInt; 1448 } 1449 if ((src->rep=n_rep_int) && nCoeff_is_Zp(src)) 1450 { 1451 return nrzMapZp; 1452 } 1453 return NULL; // default 1454 } 1455 1456 1457 /* 1458 * set the exponent (allocate and init tables) (TODO) 1459 */ 1460 1461 void nrzSetExp(int, coeffs) 1462 { 1463 } 1464 1465 void nrzInitExp(int, coeffs) 1466 { 1467 } 1468 1469 #ifdef LDEBUG 1470 BOOLEAN nrzDBTest (number x, const char *f, const int l, const coeffs) 1471 { 1472 if (SR_HDL(x) & SR_INT) return TRUE; 1473 if (mpz_cmp_ui((int_number) x,(long)0)==0) 1474 { 1475 Print("gmp-0 %s:%d\n",f,l); 1476 return FALSE; 1477 } 1478 if (mpz_size1((int_number)x)<=MP_SMALL) 1479 { 1480 int ui=mpz_get_si((int_number)x); 1481 if ((((ui<<3)>>3)==ui) 1482 && (mpz_cmp_si((int_number)x,(long)ui)==0)) 1483 { 1484 Print("gmp-small %s:%d\n",f,l); 1485 return FALSE; 1486 } 1487 } 1488 return TRUE; 1489 } 1490 #endif 1491 1492 void nrzWrite (number &a, const coeffs) 1493 { 1494 char *s,*z; 1495 if (a==NULL) 1496 { 1497 StringAppendS("o"); 1498 } 1499 else 1500 { 1501 if (n_Z_IS_SMALL(a)) 1502 { 1503 StringAppend("%d", SR_TO_INT(a)); 1504 } 1505 else 1506 { 1507 int l=mpz_sizeinbase((int_number) a, 10) + 2; 1508 s=(char*)omAlloc(l); 1509 z=mpz_get_str(s,10,(int_number) a); 1510 StringAppendS(z); 1511 omFreeSize((ADDRESS)s,l); 1512 } 1513 } 1514 } 1515 1516 /*2 1517 * extracts a long integer from s, returns the rest (COPY FROM longrat0.cc) 1518 */ 1519 static const char * nlEatLongC(char *s, mpz_ptr i) 1520 { 1521 const char * start=s; 1522 1523 if (*s<'0' || *s>'9') 1524 { 1525 mpz_set_si(i,1); 1526 return s; 1527 } 1528 while (*s >= '0' && *s <= '9') s++; 1529 if (*s=='\0') 1530 { 1531 mpz_set_str(i,start,10); 1532 } 1533 else 1534 { 1535 char c=*s; 1536 *s='\0'; 1537 mpz_set_str(i,start,10); 1538 *s=c; 1539 } 1540 return s; 1541 } 1542 1543 const char * nrzRead (const char *s, number *a, const coeffs) 1544 { 1545 int_number z = (int_number) omAllocBin(gmp_nrz_bin); 1546 { 1547 mpz_init(z); 1548 s = nlEatLongC((char *) s, z); 1549 } 1550 *a = nrz_short((number) z); 1551 return s; 1552 } 1553 1554 void nrzCoeffWrite (const coeffs, BOOLEAN /*details*/) 1555 { 1556 //PrintS("// ZZ\n"); 1557 PrintS("// coeff. ring is : Integers\n"); 1558 } 1559 1560 static char* nrzCoeffString(const coeffs) 1561 { 1562 return omStrDup("integer"); 1563 } 1564 1565 static CanonicalForm nrzConvSingNFactoryN( number n, BOOLEAN setChar, const coeffs /*r*/ ) 1566 { 1567 if (setChar) setCharacteristic( 0 ); 1568 1569 CanonicalForm term; 1570 if ( n_Z_IS_SMALL(n)) 1571 { 1572 term = SR_TO_INT(n); 1573 } 1574 else 1575 { 1576 mpz_t dummy; 1577 mpz_init_set( dummy,n->z ); 1578 term = make_cf( dummy ); 1579 } 1580 return term; 1581 } 1582 1583 static number nrzConvFactoryNSingN( const CanonicalForm n, const coeffs r) 1584 { 1585 if (n.isImm()) 1586 { 1587 return nrzInit(n.intval(),r); 1588 } 1589 else 1590 { 1591 if ( !n.den().isOne() ) 1592 { 1593 WerrorS("rational in conversion to integer"); 1594 return NULL; 1595 } 1596 int_number z = (int_number) omAlloc0Bin(gmp_nrz_bin); 1597 gmp_numerator( n,z); 1598 return nrz_short((number)z); 1599 } 1600 } 1601 1602 static void nrzMPZ(mpz_t res, number &a, const coeffs) 1603 { 1604 if (n_Z_IS_SMALL(a)) 1605 mpz_init_set_si(res, SR_TO_INT(a)); 1606 else 1607 mpz_init_set(res, (int_number) a); 1608 } 1609 1610 coeffs nrzQuot1(number c, const coeffs r) 1611 { 1612 int_number dummy; 1613 dummy = (int_number) omAlloc(sizeof(mpz_t)); 1614 if(n_Z_IS_SMALL(c)) 1615 { 1616 int ch = r->cfInt(c, r); 1617 mpz_init_set_ui(dummy, ch); 1618 } 1619 else 1620 { 1621 mpz_init_set(dummy, (int_number)c); 1622 } 1623 ZnmInfo info; 1624 info.base = dummy; 1625 info.exp = (unsigned long) 1; 1626 coeffs rr = nInitChar(n_Zn, (void*)&info); 1627 return(rr); 1628 } 1629 1630 BOOLEAN nrzInitChar(coeffs r, void *) 1631 { 1632 assume( getCoeffType(r) == ID ); 1633 1634 r->is_field=FALSE; 1635 r->is_domain=TRUE; 1636 r->rep=n_rep_gap_gmp; 1637 1638 r->nCoeffIsEqual = ndCoeffIsEqual; 1639 r->cfCoeffString = nrzCoeffString; 1640 r->cfKillChar = ndKillChar; 1641 r->cfMult = nrzMult; 1642 r->cfSub = nrzSub; 1643 r->cfAdd = nrzAdd; 1644 r->cfDiv = nrzDiv; 1645 r->cfIntMod= nrzIntMod; 1646 r->cfExactDiv= nrzExactDiv; 1647 r->cfInit = nrzInit; 1648 r->cfSize = nrzSize; 1649 r->cfInt = nrzInt; 1650 //#ifdef HAVE_RINGS 1651 r->cfDivComp = nrzDivComp; // only for ring stuff 1652 r->cfIsUnit = nrzIsUnit; // only for ring stuff 1653 r->cfGetUnit = nrzGetUnit; // only for ring stuff 1654 r->cfAnn = nrzAnn; 1655 r->cfExtGcd = nrzExtGcd; // only for ring stuff 1656 r->cfXExtGcd = nrzXExtGcd; // only for ring stuff 1657 r->cfQuotRem = nrzQuotRem; 1658 r->cfDivBy = nrzDivBy; // only for ring stuff 1659 //#endif 1660 r->cfInpNeg = nrzNeg; 1661 r->cfInvers= nrzInvers; 1662 r->cfCopy = nrzCopy; 1663 r->cfWriteLong = nrzWrite; 1664 r->cfRead = nrzRead; 1665 r->cfGreater = nrzGreater; 1666 r->cfEqual = nrzEqual; 1667 r->cfIsZero = nrzIsZero; 1668 r->cfIsOne = nrzIsOne; 1669 r->cfIsMOne = nrzIsMOne; 1670 r->cfGreaterZero = nrzGreaterZero; 1671 r->cfPower = nrzPower; 1672 r->cfGcd = nrzGcd; 1673 //r->cfLcm = nrzLcm; 1674 r->cfDelete= nrzDelete; 1675 r->cfSetMap = nrzSetMap; 1676 r->cfCoeffWrite = nrzCoeffWrite; 1677 r->convSingNFactoryN = nrzConvSingNFactoryN; 1678 r->convFactoryNSingN = nrzConvFactoryNSingN; 1679 r->cfMPZ = nrzMPZ; 1680 r->cfFarey = nrzFarey; 1681 1682 r->cfQuot1 = nrzQuot1; 1683 // debug stuff 1684 1685 #ifdef LDEBUG 1686 r->cfDBTest=nrzDBTest; 1687 #endif 1688 1689 r->nNULL = 0; 1690 r->ch = 0; 1691 r->has_simple_Alloc=FALSE; 1692 r->has_simple_Inverse=FALSE; 1693 return FALSE; 1694 } 1695 1696 #else 1697 #error set SI_INTEGER_VARIANT 1698 #endif 1699 #endif -
libpolys/coeffs/rmodulo2m.cc
r653440 r6a1aa7 105 105 r->is_field=FALSE; 106 106 r->is_domain=FALSE; 107 r->rep=n_rep_int; 107 108 108 109 r->cfKillChar = ndKillChar; /* dummy*/ … … 151 152 r->cfName = ndName; 152 153 r->cfCoeffWrite = nr2mCoeffWrite; 153 r->cfInit_bigint = nr2mMapQ;154 154 r->cfQuot1 = nr2mQuot1; 155 155 #ifdef LDEBUG … … 682 682 } 683 683 684 number nr2mMapZ(number from, const coeffs src, const coeffs dst) 685 { 686 if (SR_HDL(from) & SR_INT) 687 { 688 long f_i=SR_TO_INT(from); 689 return nr2mInit(f_i,dst); 690 } 691 return nr2mMapGMP(from,src,dst); 692 } 693 684 694 nMapFunc nr2mSetMap(const coeffs src, const coeffs dst) 685 695 { 686 if ( nCoeff_is_Ring_2toM(src)696 if ((src->rep==n_rep_int) && nCoeff_is_Ring_2toM(src) 687 697 && (src->mod2mMask == dst->mod2mMask)) 688 698 { 689 699 return ndCopyMap; 690 700 } 691 if ( nCoeff_is_Ring_2toM(src)701 if ((src->rep==n_rep_int) && nCoeff_is_Ring_2toM(src) 692 702 && (src->mod2mMask < dst->mod2mMask)) 693 703 { /* i.e. map an integer mod 2^s into Z mod 2^t, where t < s */ 694 704 return nr2mMapMachineInt; 695 705 } 696 if ( nCoeff_is_Ring_2toM(src)706 if ((src->rep==n_rep_int) && nCoeff_is_Ring_2toM(src) 697 707 && (src->mod2mMask > dst->mod2mMask)) 698 708 { /* i.e. map an integer mod 2^s into Z mod 2^t, where t > s */ … … 700 710 return nr2mMapProject; 701 711 } 702 if ( nCoeff_is_Ring_Z(src))712 if ((src->rep==n_rep_gmp) && nCoeff_is_Ring_Z(src)) 703 713 { 704 714 return nr2mMapGMP; 705 715 } 706 if (nCoeff_is_Q(src)) 716 if ((src->rep==n_rep_gap_gmp) /*&& nCoeff_is_Ring_Z(src)*/) 717 { 718 return nr2mMapZ; 719 } 720 if ((src->rep==n_rep_gap_rat) && nCoeff_is_Q(src)) 707 721 { 708 722 return nr2mMapQ; 709 723 } 710 if ( nCoeff_is_Zp(src) && (src->ch == 2))724 if ((src->rep=n_rep_int) && nCoeff_is_Zp(src) && (src->ch == 2)) 711 725 { 712 726 return nr2mMapZp; 713 727 } 714 if (nCoeff_is_Ring_PtoM(src) || nCoeff_is_Ring_ModN(src)) 728 if ((src->rep=n_rep_gmp) && 729 (nCoeff_is_Ring_PtoM(src) || nCoeff_is_Ring_ModN(src))) 715 730 { 716 731 if (mpz_divisible_2exp_p(src->modNumber,dst->modExponent)) -
libpolys/coeffs/rmodulon.cc
r653440 r6a1aa7 120 120 r->is_field=FALSE; 121 121 r->is_domain=FALSE; 122 r->rep=n_rep_gmp; 122 123 123 124 … … 159 160 r->cfCoeffWrite = nrnCoeffWrite; 160 161 r->nCoeffIsEqual = nrnCoeffsEqual; 161 r->cfInit_bigint = nrnMapQ;162 162 r->cfKillChar = ndKillChar; 163 163 r->cfQuot1 = nrnQuot1; … … 554 554 } 555 555 556 number nrnMapZ(number from, const coeffs src, const coeffs dst) 557 { 558 if (SR_HDL(from) & SR_INT) 559 { 560 long f_i=SR_TO_INT(from); 561 return nrnInit(f_i,dst); 562 } 563 return nrnMapGMP(from,src,dst); 564 } 565 556 566 number nrnMapQ(number from, const coeffs src, const coeffs dst) 557 567 { … … 565 575 nMapFunc nrnSetMap(const coeffs src, const coeffs dst) 566 576 { 567 /* dst = currRing->cf*/568 if ( nCoeff_is_Ring_Z(src))577 /* dst = nrn */ 578 if ((src->rep==n_rep_gmp) && nCoeff_is_Ring_Z(src)) 569 579 { 570 580 return nrnMapGMP; 571 581 } 572 if (nCoeff_is_Q(src)) 582 if ((src->rep==n_rep_gap_gmp) /*&& nCoeff_is_Ring_Z(src)*/) 583 { 584 return nrnMapZ; 585 } 586 if ((src->rep==n_rep_gap_rat) && nCoeff_is_Q(src)) 573 587 { 574 588 return nrnMapQ; -
libpolys/coeffs/shortfl.cc
r653440 r6a1aa7 430 430 431 431 assume( getCoeffType(r) == ID ); 432 assume( getCoeffType(aRing) == n_Q);432 assume( aRing->rep == n_rep_gap_rat ); 433 433 434 434 mpz_ptr z; 435 435 mpz_ptr zz=NULL; 436 #if SIZEOF_LONG == 8437 436 if (IS_IMM(from)) 438 437 { 439 int ui=SR_TO_INT(from);440 if ((long)ui==SR_TO_INT(from))441 return nf((float)ui).N();442 438 zz=(mpz_ptr)omAlloc(sizeof(mpz_t)); 443 439 mpz_init_set_si(zz,SR_TO_INT(from)); 444 440 z=zz; 445 441 } 446 #else447 if (IS_IMM(from))448 return nf((float)nlInt(from,aRing)).N();449 #endif450 442 else 451 443 { … … 461 453 mpf_abs (e, e); 462 454 463 #if SIZEOF_LONG == 8464 455 if (zz!=NULL) 465 456 { … … 467 458 omFreeSize(zz,sizeof(mpz_t)); 468 459 } 469 #endif470 460 /* if number was an integer, we are done*/ 471 461 if(IS_IMM(from)|| IS_INT(from)) … … 509 499 mpf_clear(d); 510 500 mpf_clear(q); 501 return nf(f).N(); 502 } 503 504 number nrMapZ(number from, const coeffs aRing, const coeffs r) 505 { 506 assume( getCoeffType(r) == ID ); 507 assume( aRing->rep == n_rep_gap_gmp ); 508 509 mpz_ptr z; 510 mpz_ptr zz=NULL; 511 if (IS_IMM(from)) 512 { 513 zz=(mpz_ptr)omAlloc(sizeof(mpz_t)); 514 mpz_init_set_si(zz,SR_TO_INT(from)); 515 z=zz; 516 } 517 else 518 { 519 /* read out the enumerator */ 520 z=(mpz_ptr)from; 521 } 522 523 int i = mpz_size1(z); 524 mpf_t e; 525 mpf_init(e); 526 mpf_set_z(e,z); 527 int sign= mpf_sgn(e); 528 mpf_abs (e, e); 529 530 if (zz!=NULL) 531 { 532 mpz_clear(zz); 533 omFreeSize(zz,sizeof(mpz_t)); 534 } 535 if(i>4) 536 { 537 WerrorS("float overflow"); 538 return nf(0.0).N(); 539 } 540 double basis; 541 signed long int exp; 542 basis = mpf_get_d_2exp(&exp, e); 543 float f= sign*ldexp(basis,exp); 544 mpf_clear(e); 511 545 return nf(f).N(); 512 546 } … … 631 665 assume( getCoeffType(dst) == ID ); 632 666 633 if ( nCoeff_is_Q(src))667 if (src->rep=n_rep_gap_rat) /*Q, Z */ 634 668 { 635 669 return nrMapQ; 636 670 } 637 if (nCoeff_is_long_R(src)) 671 if (src->rep=n_rep_gap_gmp) /*Q, Z */ 672 { 673 return nrMapZ; 674 } 675 if ((src->rep==n_rep_gmp_float) && nCoeff_is_long_R(src)) 638 676 { 639 677 return nrMapLongR; 640 678 } 641 if ( nCoeff_is_R(src))679 if ((src->rep==n_rep_float) && nCoeff_is_R(src)) 642 680 { 643 681 return ndCopyMap; 644 682 } 645 if (nCoeff_is_Zp(src))683 if ((src->rep==n_rep_int) && nCoeff_is_Zp(src)) 646 684 { 647 685 return nrMapP; 648 686 } 649 if ( nCoeff_is_long_C(src))687 if ((src->rep==n_rep_gmp_complex) && nCoeff_is_long_C(src)) 650 688 { 651 689 return nrMapC; … … 667 705 n->is_field=TRUE; 668 706 n->is_domain=TRUE; 707 n->rep=n_rep_float; 669 708 670 709 n->cfKillChar = ndKillChar; /* dummy */ … … 693 732 n->cfSetMap = nrSetMap; 694 733 n->cfCoeffWrite = nrCoeffWrite; 695 n->cfInit_bigint = nrMapQ;696 734 697 735 /* nName= ndName; */ -
libpolys/misc/auxiliary.h.in
r653440 r6a1aa7 54 54 #endif 55 55 56 #ifdef HAVE_FACTORY57 58 56 #ifndef SINGULAR 59 57 #undef SINGULAR … … 64 62 #endif 65 63 66 #endif67 // #ifdef HAVE_FACTORY68 69 64 // ---------------- end of parts/extensions 70 65 71 66 // ---------------- Singular standard types etc. 72 // BOOLEAN 67 /* SI_INTEGER_VARIANT: 1: from longrat.cc 68 * 2: GMP 69 * 3: rintegers.cc */ 70 #define SI_INTEGER_VARIANT 2 71 72 /* SI_BIGINT_VARIANT: 1: from longrat.cc 73 * 2: given by SI_INTEGER_VARIANT */ 74 #define SI_BIGINT_VARIANT 1 75 73 76 #ifndef SIZEOF_LONG 74 77 -
libpolys/polys/ext_fields/algext.cc
r653440 r6a1aa7 350 350 } 351 351 352 number naInit_bigint(number longratBigIntNumber, const coeffs src, const coeffs cf)353 {354 assume( cf != NULL );355 356 const ring A = cf->extRing;357 358 assume( A != NULL );359 360 const coeffs C = A->cf;361 362 assume( C != NULL );363 364 number n = n_Init_bigint(longratBigIntNumber, src, C);365 366 if ( n_IsZero(n, C) )367 {368 n_Delete(&n, C);369 return NULL;370 }371 372 return (number)p_NSet(n, A);373 }374 375 376 377 352 number naInit(long i, const coeffs cf) 378 353 { … … 889 864 } 890 865 891 /* assumes that src = Q , dst = Q(a) */866 /* assumes that src = Q or Z, dst = Q(a) */ 892 867 number naMap00(number a, const coeffs src, const coeffs dst) 893 868 { 894 869 if (n_IsZero(a, src)) return NULL; 895 assume(src == dst->extRing->cf);870 assume(src->rep == dst->extRing->cf->rep); 896 871 poly result = p_One(dst->extRing); 897 872 p_SetCoeff(result, n_Copy(a, src), dst->extRing); 873 return (number)result; 874 } 875 876 /* assumes that src = Z, dst = K(a) */ 877 number naMapZ0(number a, const coeffs src, const coeffs dst) 878 { 879 if (n_IsZero(a, src)) return NULL; 880 poly result = p_One(dst->extRing); 881 nMapFunc nMap=n_SetMap(src,dst->extRing->cf); 882 p_SetCoeff(result, nMap(a, src, dst->extRing->cf), dst->extRing); 883 if (n_IsZero(pGetCoeff(result),dst->extRing->cf)) 884 p_Delete(&result,dst->extRing); 898 885 return (number)result; 899 886 } … … 1061 1048 if (h==0) 1062 1049 { 1063 if (nCoeff_is_Q(src) && nCoeff_is_Q(bDst)) 1064 return naMap00; /// Q --> Q(a) 1050 if ((src->rep==n_rep_gap_rat) && nCoeff_is_Q(bDst)) 1051 return naMap00; /// Q or Z --> Q(a) 1052 if ((src->rep==n_rep_gap_gmp) && nCoeff_is_Q(bDst)) 1053 return naMapZ0; /// Z --> Q(a) 1065 1054 if (nCoeff_is_Zp(src) && nCoeff_is_Q(bDst)) 1066 1055 return naMapP0; /// Z/p --> Q(a) 1067 1056 if (nCoeff_is_Q(src) && nCoeff_is_Zp(bDst)) 1068 1057 return naMap0P; /// Q --> Z/p(a) 1058 if ((src->rep==n_rep_gap_gmp) && nCoeff_is_Zp(bDst)) 1059 return naMapZ0; /// Z --> Z/p(a) 1069 1060 if (nCoeff_is_Zp(src) && nCoeff_is_Zp(bDst)) 1070 1061 { … … 1423 1414 cf->is_field=TRUE; 1424 1415 cf->is_domain=TRUE; 1416 cf->rep=n_rep_poly; 1425 1417 1426 1418 #ifdef LDEBUG … … 1437 1429 cf->cfIsMOne = naIsMOne; 1438 1430 cf->cfInit = naInit; 1439 cf->cfInit_bigint = naInit_bigint;1440 1431 cf->cfFarey = naFarey; 1441 1432 cf->cfChineseRemainder= naChineseRemainder; … … 1617 1608 cf->cfIsMOne = naIsMOne; 1618 1609 cf->cfInit = naInit; 1619 cf->cfInit_bigint = naInit_bigint;1620 1610 cf->cfFarey = naFarey; 1621 1611 cf->cfChineseRemainder= naChineseRemainder; -
libpolys/polys/ext_fields/transext.cc
r653440 r6a1aa7 565 565 } 566 566 567 number ntInit_bigint(number longratBigIntNumber, const coeffs src, const coeffs cf)568 {569 assume( cf != NULL );570 571 const ring A = cf->extRing;572 573 assume( A != NULL );574 575 const coeffs C = A->cf;576 577 assume( C != NULL );578 579 number n = n_Init_bigint(longratBigIntNumber, src, C);580 581 if ( n_IsZero(n, C) )582 {583 n_Delete(&n, C);584 return NULL;585 }586 587 fraction result = (fraction)omAlloc0Bin(fractionObjectBin);588 589 number den = n_GetDenom(n, C);590 591 assume( n_GreaterZero(den, C) );592 593 if( n_IsOne(den, C) )594 {595 NUM(result) = p_NSet(n, A);596 //DEN(result) = NULL; // done by ..Alloc0..597 n_Delete(&den, C);598 }599 else600 {601 DEN(result) = p_NSet(den, A);602 NUM(result) = p_NSet(n_GetNumerator(n, C), A);603 n_Delete(&n, C);604 }605 606 //COM(result) = 0; // done by ..Alloc0..607 608 ntTest((number)result);609 //check_N((number)result,cf);610 611 return (number)result;612 }613 614 615 567 number ntInit(long i, const coeffs cf) 616 568 { … … 1804 1756 } 1805 1757 1806 /* assumes that src = Q , dst = Q(t_1, ..., t_s) */1758 /* assumes that src = Q or Z, dst = Q(t_1, ..., t_s) */ 1807 1759 number ntMap00(number a, const coeffs src, const coeffs dst) 1808 1760 { 1809 1761 if (n_IsZero(a, src)) return NULL; 1810 1762 assume(n_Test(a, src)); 1811 assume(src == dst->extRing->cf);1763 assume(src->rep == dst->extRing->cf->rep); 1812 1764 if ((SR_HDL(a) & SR_INT) || (a->s==3)) 1813 1765 { … … 1825 1777 //check_N((number)ff,dst); 1826 1778 return (number)ff; 1779 } 1780 1781 number ntMapZ0(number a, const coeffs src, const coeffs dst) 1782 { 1783 if (n_IsZero(a, src)) return NULL; 1784 assume(n_Test(a, src)); 1785 nMapFunc nMap=n_SetMap(src,dst->extRing->cf); 1786 poly p=p_NSet(nMap(a, src,dst->extRing->cf), dst->extRing); 1787 if (n_IsZero(pGetCoeff(p),dst->extRing->cf)) 1788 p_Delete(&p,dst->extRing); 1789 number res=ntInit(p, dst); 1790 n_Test(res,dst); 1791 return res; 1827 1792 } 1828 1793 … … 1992 1957 if (h==0) 1993 1958 { 1994 if (nCoeff_is_Q(src) && nCoeff_is_Q(bDst)) 1995 return ntMap00; /// Q --> Q(T) 1959 if ((src->rep==n_rep_gap_rat) && nCoeff_is_Q(bDst)) 1960 return ntMap00; /// Q or Z --> Q(T) 1961 if (src->rep==n_rep_gap_gmp) 1962 return ntMapZ0; /// Z --> K(T) 1996 1963 if (nCoeff_is_Zp(src) && nCoeff_is_Q(bDst)) 1997 1964 return ntMapP0; /// Z/p --> Q(T) … … 2431 2398 cf->is_field=TRUE; 2432 2399 cf->is_domain=TRUE; 2400 cf->rep=n_rep_rat_fct; 2433 2401 2434 2402 cf->factoryVarOffset = R->cf->factoryVarOffset + rVar(R); … … 2443 2411 cf->cfIsMOne = ntIsMOne; 2444 2412 cf->cfInit = ntInit; 2445 cf->cfInit_bigint = ntInit_bigint;2446 2413 cf->cfFarey = ntFarey; 2447 2414 cf->cfChineseRemainder = ntChineseRemainder;
Note: See TracChangeset
for help on using the changeset viewer.