Exemple #1
0
def genmatrix(rows, cols):
    myclass = classname(rows, cols)
    fd = startfile("fixed", myclass)

    def line(s=""):
        print >> fd, s

    traits = [("Matrix_%d_N" % rows), ("Matrix_M_%d" % cols)]

    if (rows == cols):
        traits.append("Matrix_M_M")

    for trait in traits:
        line("import org.dnikulin.jula.traits.%s;" % trait)
    line()
    line("import org.dnikulin.jula.functions.Copy;")
    line()
    line("public final class %s implements %s {" % (myclass, ", ".join(traits)))
    line("    public static final int rows = %d;" % rows)
    line("    public static final int cols = %d;" % cols)
    line("    public static final int size = (rows * cols);")
    line()

    for row in range(rows):
        labels = ", ".join([mklabel(row, col) for col in range(cols)])
        line("    public double %s;" % labels)

    line()
    line("    @Override")
    line("    public int getRows() {")
    line("        return rows;")
    line("    }")

    line()
    line("    @Override")
    line("    public int getCols() {")
    line("        return cols;")
    line("    }")

    line()
    line("    @Override")
    line("    public double get(final int row, final int col) {")
    line("        assert(row >=    0);")
    line("        assert(col >=    0);")
    line("        assert(row <  rows);")
    line("        assert(col <  cols);")
    line()
    line("        switch ((row * cols) + col) {")
    for (row, col, label) in cells(rows, cols):
        off = (row * cols) + col
        line("            case %2d: return %s;" % (off, label))
    line("            default: return 0;")
    line("        }")
    line("    }")

    line()
    line("    @Override")
    line("    public void set(final int row, final int col, final double val) {")
    line("        assert(row >=    0);")
    line("        assert(col >=    0);")
    line("        assert(row <  rows);")
    line("        assert(col <  cols);")
    line()
    line("        switch ((row * cols) + col) {")
    for (row, col, label) in cells(rows, cols):
        off = (row * cols) + col
        line("            case %2d: %s = val; return;" % (off, label))
    line("            default: return;")
    line("        }")
    line("    }")

    line()
    line("    @Override")
    line("    public %s clone() {" % (myclass))
    line("        final %s that = new %s();" % (myclass, myclass))
    line("        Copy.copy(this, that);")
    line("        return that;")
    line("    }")
    line("}")

    fd.flush()
    fd.close()
Exemple #2
0
 def lab(row, col):
     return ("a." + mklabel(row, col))
Exemple #3
0
            for cols in SIZES:
                cnameA = classname(rows, idxs)
                cnameB = classname(idxs, cols)
                cnameC = classname(rows, cols)

                line("    public static void multiply(final %s a, final %s b, final %s c) {" % (cnameA, cnameB, cnameC))

                for (_, _, label) in cells(rows, idxs):
                    line("        final double a_%s = a.%s;" % (label, label))

                line()

                for (_, _, label) in cells(idxs, cols):
                    line("        final double b_%s = b.%s;" % (label, label))

                line()

                for (row, col, label) in cells(rows, cols):
                    sums = []
                    for idx in range(idxs):
                        sums.append("(a_%s * b_%s)" % (mklabel(row, idx), mklabel(idx, col)))
                    line("        c.%s = (%s);" % (label, " + ".join(sums)))
                line("    }")
                line()

    line("    private Multiply() {}")
    line("}")

    fd.flush()
    fd.close()
Exemple #4
0
if __name__ == '__main__':
    fd = startfile("functions", "Transpose")

    def line(s=""):
        print >> fd, s

    for rows in SIZES:
        for cols in SIZES:
            line("import org.dnikulin.jula.fixed.%s;" % classname(rows, cols))
    line()
    line("public final class Transpose {")

    for rows in SIZES:
        for cols in SIZES:
            iclass = classname(rows, cols)
            oclass = classname(cols, rows)

            line("    public static void transpose(final %s a, final %s b) {" % (iclass, oclass))
            for (row, col, ilabel) in cells(rows, cols):
                olabel = mklabel(col, row)
                line("        b.%s = a.%s;" % (olabel, ilabel))
            line("    }")
            line()

    line("    private Transpose() {}")
    line("}")

    fd.flush()
    fd.close()