python/xdync.py
changeset 0 0efde00f9229
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/xdync.py	Fri May 27 14:24:59 2011 +0530
@@ -0,0 +1,53 @@
+#!/usr/bin/python
+
+import pylab as pl
+from rowjoin import rowjoin
+from polyfuncs import polsize
+from cindep import cindep
+from seshft import seshft
+from colsplit import colsplit
+from left_prm import left_prm
+from move import move
+from clcoef import clcoef
+
+def xdync(N, degN, D, degD, C, degC, gap=1.0e8):
+    """ """
+    C = pl.atleast_2d(C)
+    F, degF = rowjoin(D, degD, N, degN)
+    Frows, Fbcols = polsize(F, degF)
+    B, degB, A, degA, S, sel, degT1, Fbcols = left_prm(N, degN, D, degD, 3, gap)
+    Crows, Ccols = C.shape
+    Srows, Scols = pl.atleast_2d(S).shape
+    S = S[sel!=0,:]
+    T2 = pl.array([])
+
+    for i in range(Crows):
+        Saug = seshft(S, C[i,:], 0)
+        b = cindep(Saug)
+        b = move(b, pl.find(sel), Srows)
+        if T2.size != 0:
+            T2 = pl.vstack((T2, b))
+        else:
+            T2 = b.copy()
+
+    X, degX, Y, degY = colsplit(T2, degT1, Fbcols, Frows-Fbcols)
+    X, degX = clcoef(X, degX)
+    Y, degY = clcoef(Y, degY)
+
+    return Y, degY, X, degX, B, degB, A, degA
+
+
+if __name__== "__main__":
+    N = pl.array([[0,  4, 0, 1],
+               [-1, 8, 0, 3]])
+    dN = 1
+    D = pl.array([[0, 0,  1, 4, 0, 1],
+               [0, 0, -1, 0, 0, 0]])
+    dD = 2
+    C = pl.array([[1, 0, 1, 1],
+               [0, 2, 0, 1]])
+    dC = 1
+
+    print xdync(N,dN,D,dD,C,dC)
+
+