===================================================================
RCS file: /home/cvs/OpenXM_contrib2/asir2000/lib/weight,v
retrieving revision 1.35
retrieving revision 1.40
diff -u -p -r1.35 -r1.40
--- OpenXM_contrib2/asir2000/lib/weight	2004/05/06 02:28:07	1.35
+++ OpenXM_contrib2/asir2000/lib/weight	2004/05/23 02:48:47	1.40
@@ -306,27 +306,26 @@ def makeret(Res,Vars,FLAG){
 	else
 		M=-1$
 
-        for(I=0;I<ResNum;I++){
-                if(member(Res[I][0],Vars)){
-                        ResVec[I]=Res[I][1]$
+	for(I=0;I<ResNum;I++){
+    	if(member(Res[I][0],Vars)){
+        	ResVec[I]=Res[I][1]$
 
-                        if(FLAG){
+			if(FLAG){
 				if(type(ResVec[I])==1){
-                                	if(M==0)
-                                        	M=ResVec[I]$
-                                	else
-                                        	if(ResVec[I]<M)
-                                                	M=ResVec[I]$
+        			if(M==0)
+                		M=ResVec[I]$
+            		else
+                		if(ResVec[I]<M)
+                    		M=ResVec[I]$
 				}
 				else
 					M=-1$
 			}
 		}
-        }               
+	}
 
-
 	if(M!=-1)
-		ResVec=ResVec/M;
+		ResVec=map(red,ResVec/M)$
 
  	RET=newvect(VarsNum,Vars)$
 
@@ -341,14 +340,14 @@ def makeret(Res,Vars,FLAG){
 			
 	for(I=0;I<VarsNum;I++)
 		if(type(RET[I])!=1)
-			return [1,RET]$
+			return [1,vtol(RET)]$
 
-	return [0,RET]$
+	return [0,vtol(RET)]$
 }
 
 def roundret(V){
 
-	VN=size(V)[0]$
+	VN=length(V)$
 
 	K=1$
 	RET0=V$
@@ -358,7 +357,7 @@ def roundret(V){
 		S+=(RET0[J]-RET1[J])^2$
 
 	for(I=2;I<10;I++){
-		RET0=I*V$
+		RET0=I*ltov(V)$
 		RET1=map(drint,RET0)$
 
 		T=0$
@@ -371,7 +370,7 @@ def roundret(V){
 		}	
 	}
 	
-	return map(drint,K*V)$
+	return map(drint,vtol(K*ltov(V)))$
 }
 
 def chkou(L,ExpMat,CHAGORD){
@@ -417,7 +416,7 @@ def qcheckmain(PolyList,Vars){
 		Poly=dp_ptod(PolyList[I],Vars)$
 		BASE0=dp_etov(dp_ht(Poly))$
 		Poly=dp_rest(Poly)$
-		for(;Poly!=0;Poly=dp_rest(Poly)){
+		for(;L!=VarsNum && Poly!=0;Poly=dp_rest(Poly)){
 			ExpMat[L]=dp_etov(dp_ht(Poly))-BASE0$
 			L=chkou(L,ExpMat,CHAGORD)$
 			if(L==VarsNum-1)
@@ -455,7 +454,7 @@ def checktd(PolyList,Vars,ResVars){
 	return 1$
 }
 
-def value2(Vars,Ans,Ba){
+def value2(Vars,Ans,Ba,FLAG){
 
 	N=length(Vars)$
 	Res=newvect(N)$
@@ -469,10 +468,8 @@ def value2(Vars,Ans,Ba){
 
 	Res=getgcd(Res,Vars)$
 
-	if(nonposdegchk(Res)){
-		TMP1=makeret(Res,Vars,1)$
-		return vtol(TMP1[1])$
-	}
+	if(nonposdegchk(Res))
+		return makeret(Res,Vars,FLAG)$
 	else
 		return []$
 }
@@ -514,105 +511,50 @@ def qcheck(PolyList,Vars,FLAG){
 
 			if(FLAG==0){
 
-				if(TMP1[0]==0)
+				if(TMP1[0]==0){
 					RET=append(RET,wsort(TMP1[1],Vars,TMP1[1],0))$
+				}
 				else{
 
-					TMP=vtol(TMP1[1])$
-					RET0=[]$
+					TMP=TMP1[1]$					
+					RET1=[]$
 					if((TMP0=fixedpoint(TMP,0))!=[]){
-					
+
 						for(I=0;I<length(TMP0);I++)
 							TMP=map(subst,TMP,TMP0[I][0],TMP0[I][1])$
-						RET0=value2(Vars,TMP,1)$
+
+						RET0=value2(Vars,TMP,1,0)$
+
 						if(RET0!=[])
-							RET0=wsort(RET0,Vars,RET0,-1)$
+							RET1=wsort(RET0[1],Vars,RET0[1],-1)$
 					}
-	
-					TMP=vtol(TMP1[1])$
-					if(RET0==[] && (TMP0=fixedpoint(TMP,1))!=[]){
-					
+
+					TMP=TMP1[1]$					
+					if(RET1==[] && (TMP0=fixedpoint(TMP,1))!=[]){
+
 						for(I=0;I<length(TMP0);I++)
 							TMP=map(subst,TMP,TMP0[I][0],TMP0[I][1])$
-						RET0=value2(Vars,TMP,-1)$
+
+						RET0=value2(Vars,TMP,-1,0)$
 	
 						if(RET0!=[])
-							RET0=wsort(RET0,Vars,RET0,-1)$
+							RET1=wsort(RET0[1],Vars,RET0[1],-1)$
 					}
-					RET=append(RET,RET0)$
+
+					if(RET1!=[])
+						RET=append(RET,RET1)$
+
 				}
+
 			}
 			else if(FLAG==1)
-				RET=append(RET,[[0,Vars,vtol(TMP1[1])]])$
+				RET=append(RET,[[0,Vars,TMP1[1]]])$
 		}
 	}
 
 	return RET$
 }
 
-def unitweight2(NormMat0,ExpMat,Vars,FLAG,ID){
-
-	RET=[]$
-
-	ExpMatRowNum=size(ExpMat)[0]$
-	ExpMatColNum=size(ExpMat[0])[0]$
-	ExtMatColNum=ExpMatColNum+1$
-
-	ExtVars=append(Vars,[uc()])$
-
-	if(NormMat==0){
-
-		NormMat0=newvect(ExtMatColNum)$
-		for(I=0;I<ExtMatColNum;I++)
-			NormMat0[I]=newvect(ExtMatColNum)$
-
-		for(I=0;I<ExpMatColNum;I++)
-			for(J=I;J<ExpMatColNum;J++)
-				for(K=0;K<ExpMatRowNum;K++)
-					NormMat0[I][J]+=
-						ExpMat[K][I]*
-						ExpMat[K][J]$
-	}
-
-	for(I=0;I<ExpMatColNum;I++)
-		for(K=0;K<ExpMatRowNum;K++)
-			NormMat0[I][ExpMatColNum]-=ExpMat[K][I]$
-
-	NormMat0[ExpMatColNum][ExpMatColNum]=ExpMatRowNum$
-
-	WorkMat=newvect(ExtMatColNum)$
-	for(I=0;I<ExtMatColNum;I++)
-		WorkMat[I]=newvect(ExtMatColNum)$
-
-	if(jacobi(ExtMatColNum,NormMat0,WorkMat)){
-
-		Res=newvect(ExtMatColNum)$
-		for(I=0;I<ExtMatColNum;I++){
-			Res[I]=newvect(2)$
-			Res[I][0]=ExtVars[I]$
-			Res[I][1]=WorkMat[ExtMatColNum-1][I]$
-		}
-
-		if(nonposdegchk(Res)){
-
-			TMP1=makeret(Res,Vars,1)$
-
-			if(FLAG==0){		
-				TMP=roundret(TMP1[1])$
-
-				RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]*1.0),ID))$
-
-				if(TMP!=[])
-					RET=append(RET,wsort(TMP1[1],Vars,TMP,ID+1))$
-			}
-			else if(FLAG==1)
-				RET=append(RET,[[ID,Vars,vtol(TMP1[1])]])$
-		}
-	}	
-	
-	return [NormMat0,RET]$
-}
-
 def unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG){
 
 	RET=[]$
@@ -672,15 +614,15 @@ def unitweight1(ExpMat,Vars,PolyListNum,OneMat,FLAG){
 			TMP1=makeret(Res,Vars,1)$
 
 			if(FLAG==0){		
-				TMP=roundret(TMP1[1])$
+				RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]),1))$
 
-				RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]*1.0),1))$
-
+				TMP=roundret(TMP1[1])$
 				if(TMP!=[])
 					RET=append(RET,wsort(TMP1[1],Vars,TMP,2))$
+
 			}
 			else if(FLAG==1)
-				RET=append(RET,[[1,Vars,vtol(TMP1[1])]])$
+				RET=append(RET,[[1,Vars,TMP1[1]]])$
 		}
 	}	
 	
@@ -740,47 +682,54 @@ def leastsq(NormMat,ExpMat,Vars,FLAG,ID){
 		if(FLAG==0){
 
 			if(TMP1[0]==0){	
+				RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]),ID))$
 
 				TMP=roundret(TMP1[1])$
 
-				RET=append(RET,wsort(TMP1[1],Vars,map(drint,TMP1[1]*1.0),ID))$
-
 				if(TMP!=[])
 					RET=append(RET,wsort(TMP1[1],Vars,TMP,ID+1))$
 			}
 			else{
 
-				TMP=vtol(TMP1[1])$
-				RET0=[]$
+				TMP=TMP1[1]$
+				RET1=[]$
 				if((TMP0=fixedpoint(TMP,0))!=[]){
 					
 					for(I=0;I<length(TMP0);I++)
 						TMP=map(subst,TMP,TMP0[I][0],TMP0[I][1])$
-					RET0=value2(Vars,TMP)$
+					RET0=value2(Vars,TMP,1,1)$
+
 					if(RET0!=[])
-						RET0=wsort(RET0,Vars,RET0,-ID)$
+						RET1=wsort(RET0[1],Vars,map(drint,RET0[1]),-ID)$
+
 				}
 	
-				TMP=vtol(TMP1[1])$
-				if(RET0==[] && (TMP0=fixedpoint(TMP,1))!=[]){
+				TMP=TMP1[1]$
+				if(RET1==[] && (TMP0=fixedpoint(TMP,1))!=[]){
 					
 					for(I=0;I<length(TMP0);I++)
 						TMP=map(subst,TMP,TMP0[I][0],TMP0[I][1])$
-					RET0=value2(Vars,TMP)$
+					RET0=value2(Vars,TMP,-1,1)$
 	
 					if(RET0!=[])
-						RET0=wsort(RET0,Vars,RET0,-ID)$
+						RET1=wsort(RET0[1],Vars,map(drint,RET0[1]),-ID)$
 				}
 
-				RET=append(RET,RET0)$
+				if(RET1!=[]){
+					RET=append(RET,RET1)$
+					TMP=roundret(RET0[1])$
+					if(TMP!=[])
+						RET=append(RET,wsort(RET0[1],Vars,TMP,-(ID+1)))$
+				}
+
 			}
 
 		}
 		else if(FLAG==1)
-			RET=append(RET,[[ID,Vars,vtol(TMP1[1])]])$
+			RET=append(RET,[[ID,Vars,TMP1[1]]])$
 	}
 
-	return RET$
+	return [NormMat0,RET]$
 }
 
 def weight(PolyList,Vars,FLAG){
@@ -823,13 +772,9 @@ def weight(PolyList,Vars,FLAG){
 	if(TMP[1]!=[])
 		RET=append(RET,TMP[1])$
 
-	TMP=unitweight2(TMP[0],ExpMat,Vars,FLAG,3)$
+	TMP=leastsq(0,ExpMat,Vars,FLAG,3)$
 	if(TMP[1]!=[])
 		RET=append(RET,TMP[1])$
-	else{
-		TMP=leastsq(0,ExpMat,Vars,FLAG,7)$
-		RET=append(RET,TMP)$
-	}
 
 	ExpMat=qsort(ExpMat,junban)$
 
@@ -840,13 +785,9 @@ def weight(PolyList,Vars,FLAG){
 
 	if(size(ExpMat)[0]!=length(ExpMat2)){
 		ExpMat=newvect(length(ExpMat2),ExpMat2)$
-		TMP=unitweight2(0,ExpMat,Vars,FLAG,5)$
+		TMP=leastsq(0,ExpMat,Vars,FLAG,5)$
 		if(TMP[1]!=[])
 			RET=append(RET,TMP[1])$
-		else{
-			TMP=leastsq(0,ExpMat,Vars,FLAG,9)$
-			RET=append(RET,TMP)$
-		}
 	}
 	else{
 		TMP=map(ltov,TMP[1])$
@@ -856,10 +797,11 @@ def weight(PolyList,Vars,FLAG){
 				TMP[I][0]=5$
 			else if(TMP[I][0]==4)
 				TMP[I][0]=6$
-			else if(TMP[I][0]==7)
-				TMP[I][0]=9$
-			else if(TMP[I][0]==8)
-				TMP[I][0]=10$
+			else if(TMP[I][0]==-3)
+				TMP[I][0]=-5$
+			else if(TMP[I][0]==-4)
+				TMP[I][0]=-6$
+
 		}
 
 		TMP=map(vtol,TMP)$