def createNativePointMatchesClass(classloader=None): # Class my/PointMatchesFast cw = ClassWriter(0) cw.visit(52, Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_SUPER, "my/PointMatchesFast", None, "java/lang/Object", None) fv = cw.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "pointmatches", "Ljava/util/List;", "Ljava/util/List<Lmpicbg/models/PointMatch;>;", None) fv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "(Ljava/util/List;)V", "(Ljava/util/List<Lmpicbg/models/PointMatch;>;)V", None) mv.visitCode() mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V") mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitFieldInsn(Opcodes.PUTFIELD, "my/PointMatchesFast", "pointmatches", "Ljava/util/List;") mv.visitInsn(Opcodes.RETURN) mv.visitMaxs(2, 2) mv.visitEnd() for PM_method, C_method in (("fromFeatures", "matches"), ("fromFeaturesScaleInvariant", "matchesScaleInvariant")): mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, PM_method, "(Ljava/util/List;Ljava/util/List;DD)Lmy/PointMatchesFast;", "(Ljava/util/List<Lmy/ConstellationFast;>;Ljava/util/List<Lmy/ConstellationFast;>;DD)Lmy/PointMatchesFast;", None) mv.visitCode() mv.visitTypeInsn(Opcodes.NEW, "java/util/ArrayList") mv.visitInsn(Opcodes.DUP) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V") mv.visitVarInsn(Opcodes.ASTORE, 6) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;") mv.visitVarInsn(Opcodes.ASTORE, 7) l0 = Label() mv.visitLabel(l0) mv.visitFrame(Opcodes.F_APPEND,2, ["java/util/List", "java/util/Iterator"], 0, None) mv.visitVarInsn(Opcodes.ALOAD, 7) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z") l1 = Label() mv.visitJumpInsn(Opcodes.IFEQ, l1) mv.visitVarInsn(Opcodes.ALOAD, 7) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "my/ConstellationFast") mv.visitVarInsn(Opcodes.ASTORE, 8) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;") mv.visitVarInsn(Opcodes.ASTORE, 9) l2 = Label() mv.visitLabel(l2) mv.visitFrame(Opcodes.F_APPEND,2, ["my/ConstellationFast", "java/util/Iterator"], 0, None) mv.visitVarInsn(Opcodes.ALOAD, 9) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z") l3 = Label() mv.visitJumpInsn(Opcodes.IFEQ, l3) mv.visitVarInsn(Opcodes.ALOAD, 9) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "my/ConstellationFast") mv.visitVarInsn(Opcodes.ASTORE, 10) mv.visitVarInsn(Opcodes.ALOAD, 8) mv.visitVarInsn(Opcodes.ALOAD, 10) mv.visitVarInsn(Opcodes.DLOAD, 2) mv.visitVarInsn(Opcodes.DLOAD, 4) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "my/ConstellationFast", C_method, "(Lmy/ConstellationFast;DD)Z") l4 = Label() mv.visitJumpInsn(Opcodes.IFEQ, l4) mv.visitVarInsn(Opcodes.ALOAD, 6) mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/PointMatch") mv.visitInsn(Opcodes.DUP) mv.visitVarInsn(Opcodes.ALOAD, 8) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;") mv.visitVarInsn(Opcodes.ALOAD, 10) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;") mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/PointMatch", "<init>", "(Lmpicbg/models/Point;Lmpicbg/models/Point;)V") mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z") mv.visitInsn(Opcodes.POP) mv.visitLabel(l4) mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None) mv.visitJumpInsn(Opcodes.GOTO, l2) mv.visitLabel(l3) mv.visitFrame(Opcodes.F_CHOP,2, None, 0, None) mv.visitJumpInsn(Opcodes.GOTO, l0) mv.visitLabel(l1) mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None) mv.visitTypeInsn(Opcodes.NEW, "my/PointMatchesFast") mv.visitInsn(Opcodes.DUP) mv.visitVarInsn(Opcodes.ALOAD, 6) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "my/PointMatchesFast", "<init>", "(Ljava/util/List;)V") mv.visitInsn(Opcodes.ARETURN) mv.visitMaxs(6, 11) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "fromNearbyFeatures", "(DLjava/util/List;Ljava/util/List;DD)Lmy/PointMatchesFast;", "(DLjava/util/List<Lmy/ConstellationFast;>;Ljava/util/List<Lmy/ConstellationFast;>;DD)Lmy/PointMatchesFast;", None) mv.visitCode() mv.visitTypeInsn(Opcodes.NEW, "java/util/ArrayList") mv.visitInsn(Opcodes.DUP) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V") mv.visitVarInsn(Opcodes.ASTORE, 8) mv.visitVarInsn(Opcodes.ALOAD, 3) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;") mv.visitVarInsn(Opcodes.ASTORE, 9) l0 = Label() mv.visitLabel(l0) mv.visitFrame(Opcodes.F_APPEND,2, ["java/util/List", "java/util/Iterator"], 0, None) mv.visitVarInsn(Opcodes.ALOAD, 9) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z") l1 = Label() mv.visitJumpInsn(Opcodes.IFEQ, l1) mv.visitVarInsn(Opcodes.ALOAD, 9) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "my/ConstellationFast") mv.visitVarInsn(Opcodes.ASTORE, 10) mv.visitVarInsn(Opcodes.ALOAD, 8) mv.visitVarInsn(Opcodes.ALOAD, 10) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;") mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D") mv.visitMethodInsn(Opcodes.INVOKESTATIC, "net/imglib2/RealPoint", "wrap", "([D)Lnet/imglib2/RealPoint;") mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z") mv.visitInsn(Opcodes.POP) mv.visitJumpInsn(Opcodes.GOTO, l0) mv.visitLabel(l1) mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None) mv.visitTypeInsn(Opcodes.NEW, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree") mv.visitInsn(Opcodes.DUP) mv.visitTypeInsn(Opcodes.NEW, "net/imglib2/KDTree") mv.visitInsn(Opcodes.DUP) mv.visitVarInsn(Opcodes.ALOAD, 3) mv.visitVarInsn(Opcodes.ALOAD, 8) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "net/imglib2/KDTree", "<init>", "(Ljava/util/List;Ljava/util/List;)V") mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "<init>", "(Lnet/imglib2/KDTree;)V") mv.visitVarInsn(Opcodes.ASTORE, 9) mv.visitTypeInsn(Opcodes.NEW, "java/util/ArrayList") mv.visitInsn(Opcodes.DUP) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V") mv.visitVarInsn(Opcodes.ASTORE, 10) mv.visitVarInsn(Opcodes.ALOAD, 2) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;") mv.visitVarInsn(Opcodes.ASTORE, 11) l2 = Label() mv.visitLabel(l2) mv.visitFrame(Opcodes.F_APPEND,3, ["net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "java/util/List", "java/util/Iterator"], 0, None) mv.visitVarInsn(Opcodes.ALOAD, 11) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z") l3 = Label() mv.visitJumpInsn(Opcodes.IFEQ, l3) mv.visitVarInsn(Opcodes.ALOAD, 11) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "my/ConstellationFast") mv.visitVarInsn(Opcodes.ASTORE, 12) mv.visitVarInsn(Opcodes.ALOAD, 9) mv.visitVarInsn(Opcodes.ALOAD, 12) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;") mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D") mv.visitMethodInsn(Opcodes.INVOKESTATIC, "net/imglib2/RealPoint", "wrap", "([D)Lnet/imglib2/RealPoint;") mv.visitVarInsn(Opcodes.DLOAD, 0) mv.visitInsn(Opcodes.ICONST_0) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "search", "(Lnet/imglib2/RealLocalizable;DZ)V") mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.ISTORE, 13) mv.visitVarInsn(Opcodes.ALOAD, 9) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "numNeighbors", "()I") mv.visitVarInsn(Opcodes.ISTORE, 14) l4 = Label() mv.visitLabel(l4) mv.visitFrame(Opcodes.F_APPEND,3, ["my/ConstellationFast", Opcodes.INTEGER, Opcodes.INTEGER], 0, None) mv.visitVarInsn(Opcodes.ILOAD, 13) mv.visitVarInsn(Opcodes.ILOAD, 14) l5 = Label() mv.visitJumpInsn(Opcodes.IF_ICMPGE, l5) mv.visitVarInsn(Opcodes.ALOAD, 9) mv.visitVarInsn(Opcodes.ILOAD, 13) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "getSampler", "(I)Lnet/imglib2/Sampler;") mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/Sampler", "get", "()Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "my/ConstellationFast") mv.visitVarInsn(Opcodes.ASTORE, 15) mv.visitVarInsn(Opcodes.ALOAD, 12) mv.visitVarInsn(Opcodes.ALOAD, 15) mv.visitVarInsn(Opcodes.DLOAD, 4) mv.visitVarInsn(Opcodes.DLOAD, 6) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "my/ConstellationFast", "matches", "(Lmy/ConstellationFast;DD)Z") l6 = Label() mv.visitJumpInsn(Opcodes.IFEQ, l6) mv.visitVarInsn(Opcodes.ALOAD, 10) mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/PointMatch") mv.visitInsn(Opcodes.DUP) mv.visitVarInsn(Opcodes.ALOAD, 12) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;") mv.visitVarInsn(Opcodes.ALOAD, 15) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;") mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/PointMatch", "<init>", "(Lmpicbg/models/Point;Lmpicbg/models/Point;)V") mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z") mv.visitInsn(Opcodes.POP) mv.visitLabel(l6) mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None) mv.visitIincInsn(13, 1) mv.visitJumpInsn(Opcodes.GOTO, l4) mv.visitLabel(l5) mv.visitFrame(Opcodes.F_CHOP,3, None, 0, None) mv.visitJumpInsn(Opcodes.GOTO, l2) mv.visitLabel(l3) mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None) mv.visitTypeInsn(Opcodes.NEW, "my/PointMatchesFast") mv.visitInsn(Opcodes.DUP) mv.visitVarInsn(Opcodes.ALOAD, 10) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "my/PointMatchesFast", "<init>", "(Ljava/util/List;)V") mv.visitInsn(Opcodes.ARETURN) mv.visitMaxs(6, 16) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "toRows", "()[[D", None, None) mv.visitCode() mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/PointMatchesFast", "pointmatches", "Ljava/util/List;") mv.visitInsn(Opcodes.ICONST_0) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", True) mv.visitTypeInsn(Opcodes.CHECKCAST, "mpicbg/models/PointMatch") mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP1", "()Lmpicbg/models/Point;", False) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False) mv.visitInsn(Opcodes.ARRAYLENGTH) mv.visitVarInsn(Opcodes.ISTORE, 1) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/PointMatchesFast", "pointmatches", "Ljava/util/List;") mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "size", "()I", True) mv.visitVarInsn(Opcodes.ILOAD, 1) mv.visitVarInsn(Opcodes.ILOAD, 1) mv.visitInsn(Opcodes.IADD) mv.visitMultiANewArrayInsn("[[D", 2) mv.visitVarInsn(Opcodes.ASTORE, 2) mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.ISTORE, 3) l0 = Label() mv.visitLabel(l0) mv.visitFrame(Opcodes.F_APPEND,3, [Opcodes.INTEGER, "[[D", Opcodes.INTEGER], 0, None) mv.visitVarInsn(Opcodes.ILOAD, 3) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/PointMatchesFast", "pointmatches", "Ljava/util/List;") mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "size", "()I", True) l1 = Label() mv.visitJumpInsn(Opcodes.IF_ICMPGE, l1) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/PointMatchesFast", "pointmatches", "Ljava/util/List;") mv.visitVarInsn(Opcodes.ILOAD, 3) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", True) mv.visitTypeInsn(Opcodes.CHECKCAST, "mpicbg/models/PointMatch") mv.visitVarInsn(Opcodes.ASTORE, 4) mv.visitVarInsn(Opcodes.ALOAD, 4) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP1", "()Lmpicbg/models/Point;", False) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False) mv.visitVarInsn(Opcodes.ASTORE, 5) mv.visitVarInsn(Opcodes.ALOAD, 4) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP2", "()Lmpicbg/models/Point;", False) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False) mv.visitVarInsn(Opcodes.ASTORE, 6) mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.ISTORE, 7) l2 = Label() mv.visitLabel(l2) mv.visitFrame(Opcodes.F_FULL, 8, ["my/PointMatchesFast", Opcodes.INTEGER, "[[D", Opcodes.INTEGER, "mpicbg/models/PointMatch", "[D", "[D", Opcodes.INTEGER], 0, []) mv.visitVarInsn(Opcodes.ILOAD, 7) mv.visitVarInsn(Opcodes.ILOAD, 1) l3 = Label() mv.visitJumpInsn(Opcodes.IF_ICMPGE, l3) mv.visitVarInsn(Opcodes.ALOAD, 2) mv.visitVarInsn(Opcodes.ILOAD, 3) mv.visitInsn(Opcodes.AALOAD) mv.visitVarInsn(Opcodes.ILOAD, 7) mv.visitVarInsn(Opcodes.ALOAD, 5) mv.visitVarInsn(Opcodes.ILOAD, 7) mv.visitInsn(Opcodes.DALOAD) mv.visitInsn(Opcodes.DASTORE) mv.visitIincInsn(7, 1) mv.visitJumpInsn(Opcodes.GOTO, l2) mv.visitLabel(l3) mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None) mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.ISTORE, 7) l4 = Label() mv.visitLabel(l4) mv.visitFrame(Opcodes.F_APPEND,1, [Opcodes.INTEGER], 0, None) mv.visitVarInsn(Opcodes.ILOAD, 7) mv.visitVarInsn(Opcodes.ILOAD, 1) l5 = Label() mv.visitJumpInsn(Opcodes.IF_ICMPGE, l5) mv.visitVarInsn(Opcodes.ALOAD, 2) mv.visitVarInsn(Opcodes.ILOAD, 3) mv.visitInsn(Opcodes.AALOAD) mv.visitVarInsn(Opcodes.ILOAD, 1) mv.visitVarInsn(Opcodes.ILOAD, 7) mv.visitInsn(Opcodes.IADD) mv.visitVarInsn(Opcodes.ALOAD, 6) mv.visitVarInsn(Opcodes.ILOAD, 7) mv.visitInsn(Opcodes.DALOAD) mv.visitInsn(Opcodes.DASTORE) mv.visitIincInsn(7, 1) mv.visitJumpInsn(Opcodes.GOTO, l4) mv.visitLabel(l5) mv.visitFrame(Opcodes.F_FULL, 4, ["my/PointMatchesFast", Opcodes.INTEGER, "[[D", Opcodes.INTEGER], 0, []) mv.visitIincInsn(3, 1) mv.visitJumpInsn(Opcodes.GOTO, l0) mv.visitLabel(l1) mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None) mv.visitVarInsn(Opcodes.ALOAD, 2) mv.visitInsn(Opcodes.ARETURN) mv.visitMaxs(4, 8) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "fromRows", "(Ljava/util/Iterator;)Lmy/PointMatchesFast;", "(Ljava/util/Iterator<Ljava/util/List<Ljava/lang/String;>;>;)Lmy/PointMatchesFast;", None) mv.visitCode() mv.visitTypeInsn(Opcodes.NEW, "java/util/ArrayList") mv.visitInsn(Opcodes.DUP) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V", False) mv.visitVarInsn(Opcodes.ASTORE, 1) l0 = Label() mv.visitLabel(l0) mv.visitFrame(Opcodes.F_APPEND,1, ["java/util/List"], 0, None) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z", True) l1 = Label() mv.visitJumpInsn(Opcodes.IFEQ, l1) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;", True) mv.visitTypeInsn(Opcodes.CHECKCAST, "java/util/List") mv.visitVarInsn(Opcodes.ASTORE, 2) mv.visitVarInsn(Opcodes.ALOAD, 2) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "size", "()I", True) mv.visitInsn(Opcodes.ICONST_2) mv.visitInsn(Opcodes.IDIV) mv.visitVarInsn(Opcodes.ISTORE, 3) mv.visitVarInsn(Opcodes.ILOAD, 3) mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE) mv.visitVarInsn(Opcodes.ASTORE, 4) mv.visitVarInsn(Opcodes.ILOAD, 3) mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE) mv.visitVarInsn(Opcodes.ASTORE, 5) mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.ISTORE, 6) l2 = Label() mv.visitLabel(l2) mv.visitFrame(Opcodes.F_FULL, 7, ["java/util/Iterator", "java/util/List", "java/util/List", Opcodes.INTEGER, "[D", "[D", Opcodes.INTEGER], 0, []) mv.visitVarInsn(Opcodes.ILOAD, 6) mv.visitVarInsn(Opcodes.ILOAD, 3) l3 = Label() mv.visitJumpInsn(Opcodes.IF_ICMPGE, l3) mv.visitVarInsn(Opcodes.ALOAD, 4) mv.visitVarInsn(Opcodes.ILOAD, 6) mv.visitVarInsn(Opcodes.ALOAD, 2) mv.visitVarInsn(Opcodes.ILOAD, 6) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", True) mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/String") mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Double", "parseDouble", "(Ljava/lang/String;)D", False) mv.visitInsn(Opcodes.DASTORE) mv.visitIincInsn(6, 1) mv.visitJumpInsn(Opcodes.GOTO, l2) mv.visitLabel(l3) mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None) mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.ISTORE, 6) l4 = Label() mv.visitLabel(l4) mv.visitFrame(Opcodes.F_APPEND,1, [Opcodes.INTEGER], 0, None) mv.visitVarInsn(Opcodes.ILOAD, 6) mv.visitVarInsn(Opcodes.ILOAD, 3) l5 = Label() mv.visitJumpInsn(Opcodes.IF_ICMPGE, l5) mv.visitVarInsn(Opcodes.ALOAD, 5) mv.visitVarInsn(Opcodes.ILOAD, 6) mv.visitVarInsn(Opcodes.ALOAD, 2) mv.visitVarInsn(Opcodes.ILOAD, 3) mv.visitVarInsn(Opcodes.ILOAD, 6) mv.visitInsn(Opcodes.IADD) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;", True) mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/String") mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Double", "parseDouble", "(Ljava/lang/String;)D", False) mv.visitInsn(Opcodes.DASTORE) mv.visitIincInsn(6, 1) mv.visitJumpInsn(Opcodes.GOTO, l4) mv.visitLabel(l5) mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/PointMatch") mv.visitInsn(Opcodes.DUP) mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/Point") mv.visitInsn(Opcodes.DUP) mv.visitVarInsn(Opcodes.ALOAD, 4) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/Point", "<init>", "([D)V", False) mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/Point") mv.visitInsn(Opcodes.DUP) mv.visitVarInsn(Opcodes.ALOAD, 5) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/Point", "<init>", "([D)V", False) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/PointMatch", "<init>", "(Lmpicbg/models/Point;Lmpicbg/models/Point;)V", False) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z", True) mv.visitInsn(Opcodes.POP) mv.visitJumpInsn(Opcodes.GOTO, l0) mv.visitLabel(l1) mv.visitFrame(Opcodes.F_FULL, 2, ["java/util/Iterator", "java/util/List"], 0, []) mv.visitTypeInsn(Opcodes.NEW, "my/PointMatchesFast") mv.visitInsn(Opcodes.DUP) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "my/PointMatchesFast", "<init>", "(Ljava/util/List;)V", False) mv.visitInsn(Opcodes.ARETURN) mv.visitMaxs(7, 7) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "csvHeader", "(Lmpicbg/models/PointMatch;)[Ljava/lang/String;", None, None) mv.visitCode() mv.visitInsn(Opcodes.ICONST_3) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP1", "()Lmpicbg/models/Point;", False) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False) mv.visitInsn(Opcodes.ARRAYLENGTH) l0 = Label() mv.visitJumpInsn(Opcodes.IF_ICMPNE, l0) mv.visitIntInsn(Opcodes.BIPUSH, 6) mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/String") mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_0) mv.visitLdcInsn("x1") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_1) mv.visitLdcInsn("y1") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_2) mv.visitLdcInsn("z1") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_3) mv.visitLdcInsn("x2") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_4) mv.visitLdcInsn("y2") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_5) mv.visitLdcInsn("z2") mv.visitInsn(Opcodes.AASTORE) l1 = Label() mv.visitJumpInsn(Opcodes.GOTO, l1) mv.visitLabel(l0) mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None) mv.visitInsn(Opcodes.ICONST_4) mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/String") mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_0) mv.visitLdcInsn("x1") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_1) mv.visitLdcInsn("y1") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_2) mv.visitLdcInsn("x2") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_3) mv.visitLdcInsn("y2") mv.visitInsn(Opcodes.AASTORE) mv.visitLabel(l1) mv.visitFrame(Opcodes.F_SAME1, 0, None, 1, ["[Ljava/lang/String;"]) mv.visitInsn(Opcodes.ARETURN) mv.visitMaxs(4, 1) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "asRow", "(Lmpicbg/models/PointMatch;)[D", None, None) mv.visitCode() mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP1", "()Lmpicbg/models/Point;", False) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False) mv.visitVarInsn(Opcodes.ASTORE, 1) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/PointMatch", "getP2", "()Lmpicbg/models/Point;", False) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D", False) mv.visitVarInsn(Opcodes.ASTORE, 2) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitInsn(Opcodes.ARRAYLENGTH) mv.visitVarInsn(Opcodes.ALOAD, 2) mv.visitInsn(Opcodes.ARRAYLENGTH) mv.visitInsn(Opcodes.IADD) mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE) mv.visitVarInsn(Opcodes.ASTORE, 3) mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.ISTORE, 4) l0 = Label() mv.visitLabel(l0) mv.visitFrame(Opcodes.F_FULL, 5, ["mpicbg/models/PointMatch", "[D", "[D", "[D", Opcodes.INTEGER], 0, []) mv.visitVarInsn(Opcodes.ILOAD, 4) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitInsn(Opcodes.ARRAYLENGTH) l1 = Label() mv.visitJumpInsn(Opcodes.IF_ICMPGE, l1) mv.visitVarInsn(Opcodes.ALOAD, 3) mv.visitVarInsn(Opcodes.ILOAD, 4) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitVarInsn(Opcodes.ILOAD, 4) mv.visitInsn(Opcodes.DALOAD) mv.visitInsn(Opcodes.DASTORE) mv.visitIincInsn(4, 1) mv.visitJumpInsn(Opcodes.GOTO, l0) mv.visitLabel(l1) mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None) mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.ISTORE, 4) l2 = Label() mv.visitLabel(l2) mv.visitFrame(Opcodes.F_APPEND,1, [Opcodes.INTEGER], 0, None) mv.visitVarInsn(Opcodes.ILOAD, 4) mv.visitVarInsn(Opcodes.ALOAD, 2) mv.visitInsn(Opcodes.ARRAYLENGTH) l3 = Label() mv.visitJumpInsn(Opcodes.IF_ICMPGE, l3) mv.visitVarInsn(Opcodes.ALOAD, 3) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitInsn(Opcodes.ARRAYLENGTH) mv.visitVarInsn(Opcodes.ILOAD, 4) mv.visitInsn(Opcodes.IADD) mv.visitVarInsn(Opcodes.ALOAD, 2) mv.visitVarInsn(Opcodes.ILOAD, 4) mv.visitInsn(Opcodes.DALOAD) mv.visitInsn(Opcodes.DASTORE) mv.visitIincInsn(4, 1) mv.visitJumpInsn(Opcodes.GOTO, l2) mv.visitLabel(l3) mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None) mv.visitVarInsn(Opcodes.ALOAD, 3) mv.visitInsn(Opcodes.ARETURN) mv.visitMaxs(4, 5) mv.visitEnd() cw.visitEnd() if not classloader: classloader = CustomClassLoader() return classloader.defineClass("my/PointMatchesFast", cw.toByteArray())
def createNativeConstellationClass(classloader=None): """ A Constellation class implemented natively in java using the ASM library. """ cw = ClassWriter(0) cw.visit(52, Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_SUPER, "my/ConstellationFast", None, "java/lang/Object", None) fv = cw.visitField(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL, "angle", "D", None, None) fv.visitEnd() fv = cw.visitField(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL, "len1", "D", None, None) fv.visitEnd() fv = cw.visitField(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL, "len2", "D", None, None) fv.visitEnd() fv = cw.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "position", "Lmpicbg/models/Point;", None, None) fv.visitEnd() fv = cw.visitField(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL, "len_ratio", "D", None, None) fv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "(DDD[D)V", None, None) mv.visitCode() mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V") mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitVarInsn(Opcodes.DLOAD, 1) mv.visitFieldInsn(Opcodes.PUTFIELD, "my/ConstellationFast", "angle", "D") mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitVarInsn(Opcodes.DLOAD, 3) mv.visitFieldInsn(Opcodes.PUTFIELD, "my/ConstellationFast", "len1", "D") mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitVarInsn(Opcodes.DLOAD, 5) mv.visitFieldInsn(Opcodes.PUTFIELD, "my/ConstellationFast", "len2", "D") mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitVarInsn(Opcodes.DLOAD, 3) mv.visitVarInsn(Opcodes.DLOAD, 3) mv.visitVarInsn(Opcodes.DLOAD, 5) mv.visitInsn(Opcodes.DADD) mv.visitInsn(Opcodes.DDIV) mv.visitFieldInsn(Opcodes.PUTFIELD, "my/ConstellationFast", "len_ratio", "D") mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitTypeInsn(Opcodes.NEW, "mpicbg/models/Point") mv.visitInsn(Opcodes.DUP) mv.visitVarInsn(Opcodes.ALOAD, 7) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "mpicbg/models/Point", "<init>", "([D)V") mv.visitFieldInsn(Opcodes.PUTFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;") mv.visitInsn(Opcodes.RETURN) mv.visitMaxs(7, 8) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "matches", "(Lmy/ConstellationFast;DD)Z", None, None) mv.visitCode() mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D") mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D") mv.visitInsn(Opcodes.DSUB) mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "abs", "(D)D") mv.visitVarInsn(Opcodes.DLOAD, 2) mv.visitInsn(Opcodes.DCMPG) l0 = Label() mv.visitJumpInsn(Opcodes.IFGE, l0) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len1", "D") mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len1", "D") mv.visitInsn(Opcodes.DSUB) mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "abs", "(D)D") mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len2", "D") mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len2", "D") mv.visitInsn(Opcodes.DSUB) mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "abs", "(D)D") mv.visitInsn(Opcodes.DADD) mv.visitVarInsn(Opcodes.DLOAD, 4) mv.visitInsn(Opcodes.DCMPG) mv.visitJumpInsn(Opcodes.IFGE, l0) mv.visitInsn(Opcodes.ICONST_1) l1 = Label() mv.visitJumpInsn(Opcodes.GOTO, l1) mv.visitLabel(l0) mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None) mv.visitInsn(Opcodes.ICONST_0) mv.visitLabel(l1) mv.visitFrame(Opcodes.F_SAME1, 0, None, 1, [Opcodes.INTEGER]) mv.visitInsn(Opcodes.IRETURN) mv.visitMaxs(6, 6) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "matchesScaleInvariant", "(Lmy/ConstellationFast;DD)Z", None, None) mv.visitCode() mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D") mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D") mv.visitInsn(Opcodes.DSUB) mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "abs", "(D)D") mv.visitVarInsn(Opcodes.DLOAD, 2) mv.visitInsn(Opcodes.DCMPG) l0 = Label() mv.visitJumpInsn(Opcodes.IFGE, l0) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len_ratio", "D") mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len_ratio", "D") mv.visitInsn(Opcodes.DSUB) mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "abs", "(D)D") mv.visitVarInsn(Opcodes.DLOAD, 4) mv.visitInsn(Opcodes.DCMPG) mv.visitJumpInsn(Opcodes.IFGE, l0) mv.visitInsn(Opcodes.ICONST_1) l1 = Label() mv.visitJumpInsn(Opcodes.GOTO, l1) mv.visitLabel(l0) mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None) mv.visitInsn(Opcodes.ICONST_0) mv.visitLabel(l1) mv.visitFrame(Opcodes.F_SAME1, 0, None, 1, [Opcodes.INTEGER]) mv.visitInsn(Opcodes.IRETURN) mv.visitMaxs(4, 6) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "computeAngle", "(DDDDDDDD)D", None, None) mv.visitCode() mv.visitVarInsn(Opcodes.DLOAD, 6) mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "sqrt", "(D)D") mv.visitVarInsn(Opcodes.DSTORE, 16) mv.visitVarInsn(Opcodes.DLOAD, 14) mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "sqrt", "(D)D") mv.visitVarInsn(Opcodes.DSTORE, 18) mv.visitVarInsn(Opcodes.DLOAD, 0) mv.visitVarInsn(Opcodes.DLOAD, 8) mv.visitInsn(Opcodes.DMUL) mv.visitVarInsn(Opcodes.DLOAD, 2) mv.visitVarInsn(Opcodes.DLOAD, 10) mv.visitInsn(Opcodes.DMUL) mv.visitInsn(Opcodes.DADD) mv.visitVarInsn(Opcodes.DLOAD, 4) mv.visitVarInsn(Opcodes.DLOAD, 12) mv.visitInsn(Opcodes.DMUL) mv.visitInsn(Opcodes.DADD) mv.visitVarInsn(Opcodes.DSTORE, 20) mv.visitVarInsn(Opcodes.DLOAD, 20) mv.visitVarInsn(Opcodes.DLOAD, 16) mv.visitVarInsn(Opcodes.DLOAD, 18) mv.visitInsn(Opcodes.DMUL) mv.visitInsn(Opcodes.DDIV) mv.visitVarInsn(Opcodes.DSTORE, 22) mv.visitVarInsn(Opcodes.DLOAD, 22) mv.visitInsn(Opcodes.DCONST_1) mv.visitInsn(Opcodes.DCMPL) l0 = Label() mv.visitJumpInsn(Opcodes.IFLE, l0) mv.visitInsn(Opcodes.DCONST_1) l1 = Label() mv.visitJumpInsn(Opcodes.GOTO, l1) mv.visitLabel(l0) mv.visitFrame(Opcodes.F_FULL, 12, [Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE], 0, []) mv.visitVarInsn(Opcodes.DLOAD, 22) mv.visitLdcInsn(Double("-1.0")) mv.visitInsn(Opcodes.DCMPG) l2 = Label() mv.visitJumpInsn(Opcodes.IFGE, l2) mv.visitLdcInsn(Double("-1.0")) mv.visitJumpInsn(Opcodes.GOTO, l1) mv.visitLabel(l2) mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None) mv.visitVarInsn(Opcodes.DLOAD, 22) mv.visitLabel(l1) mv.visitFrame(Opcodes.F_SAME1, 0, None, 1, [Opcodes.DOUBLE]) mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Math", "acos", "(D)D") mv.visitInsn(Opcodes.DRETURN) mv.visitMaxs(6, 24) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "fromSearch", "(Lnet/imglib2/RealLocalizable;Lnet/imglib2/RealLocalizable;DLnet/imglib2/RealLocalizable;D)Lmy/ConstellationFast;", None, None) mv.visitCode() mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitInsn(Opcodes.ICONST_0) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F") mv.visitInsn(Opcodes.F2D) mv.visitVarInsn(Opcodes.DSTORE, 7) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitInsn(Opcodes.ICONST_1) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F") mv.visitInsn(Opcodes.F2D) mv.visitVarInsn(Opcodes.DSTORE, 9) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitInsn(Opcodes.ICONST_2) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F") mv.visitInsn(Opcodes.F2D) mv.visitVarInsn(Opcodes.DSTORE, 11) mv.visitTypeInsn(Opcodes.NEW, "my/ConstellationFast") mv.visitInsn(Opcodes.DUP) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitInsn(Opcodes.ICONST_0) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F") mv.visitInsn(Opcodes.F2D) mv.visitVarInsn(Opcodes.DLOAD, 7) mv.visitInsn(Opcodes.DSUB) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitInsn(Opcodes.ICONST_1) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F") mv.visitInsn(Opcodes.F2D) mv.visitVarInsn(Opcodes.DLOAD, 9) mv.visitInsn(Opcodes.DSUB) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitInsn(Opcodes.ICONST_2) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F") mv.visitInsn(Opcodes.F2D) mv.visitVarInsn(Opcodes.DLOAD, 11) mv.visitInsn(Opcodes.DSUB) mv.visitVarInsn(Opcodes.DLOAD, 2) mv.visitVarInsn(Opcodes.ALOAD, 4) mv.visitInsn(Opcodes.ICONST_0) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F") mv.visitInsn(Opcodes.F2D) mv.visitVarInsn(Opcodes.DLOAD, 7) mv.visitInsn(Opcodes.DSUB) mv.visitVarInsn(Opcodes.ALOAD, 4) mv.visitInsn(Opcodes.ICONST_1) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F") mv.visitInsn(Opcodes.F2D) mv.visitVarInsn(Opcodes.DLOAD, 9) mv.visitInsn(Opcodes.DSUB) mv.visitVarInsn(Opcodes.ALOAD, 4) mv.visitInsn(Opcodes.ICONST_2) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "net/imglib2/RealLocalizable", "getFloatPosition", "(I)F") mv.visitInsn(Opcodes.F2D) mv.visitVarInsn(Opcodes.DLOAD, 11) mv.visitInsn(Opcodes.DSUB) mv.visitVarInsn(Opcodes.DLOAD, 5) mv.visitMethodInsn(Opcodes.INVOKESTATIC, "my/ConstellationFast", "computeAngle", "(DDDDDDDD)D") mv.visitVarInsn(Opcodes.DLOAD, 2) mv.visitVarInsn(Opcodes.DLOAD, 5) mv.visitInsn(Opcodes.ICONST_3) mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.DLOAD, 7) mv.visitInsn(Opcodes.DASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_1) mv.visitVarInsn(Opcodes.DLOAD, 9) mv.visitInsn(Opcodes.DASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_2) mv.visitVarInsn(Opcodes.DLOAD, 11) mv.visitInsn(Opcodes.DASTORE) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "my/ConstellationFast", "<init>", "(DDD[D)V") mv.visitInsn(Opcodes.ARETURN) mv.visitMaxs(18, 13) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "fromRow", "(Ljava/util/List;)Lmy/ConstellationFast;", "(Ljava/util/List<Ljava/lang/Double;>;)Lmy/ConstellationFast;", None) mv.visitCode() mv.visitTypeInsn(Opcodes.NEW, "my/ConstellationFast") mv.visitInsn(Opcodes.DUP) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitInsn(Opcodes.ICONST_0) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double") mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D") mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitInsn(Opcodes.ICONST_1) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double") mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D") mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitInsn(Opcodes.ICONST_2) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double") mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D") mv.visitInsn(Opcodes.ICONST_3) mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitInsn(Opcodes.ICONST_3) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double") mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D") mv.visitInsn(Opcodes.DASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_1) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitInsn(Opcodes.ICONST_4) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double") mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D") mv.visitInsn(Opcodes.DASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_2) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitInsn(Opcodes.ICONST_5) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Double") mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D") mv.visitInsn(Opcodes.DASTORE) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "my/ConstellationFast", "<init>", "(DDD[D)V") mv.visitInsn(Opcodes.ARETURN) mv.visitMaxs(13, 1) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "asRow", "()[D", None, None) mv.visitCode() mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "position", "Lmpicbg/models/Point;") mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "mpicbg/models/Point", "getW", "()[D") mv.visitVarInsn(Opcodes.ASTORE, 1) mv.visitIntInsn(Opcodes.BIPUSH, 6) mv.visitIntInsn(Opcodes.NEWARRAY, Opcodes.T_DOUBLE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D") mv.visitInsn(Opcodes.DASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_1) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len1", "D") mv.visitInsn(Opcodes.DASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_2) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "len2", "D") mv.visitInsn(Opcodes.DASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_3) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitInsn(Opcodes.ICONST_0) mv.visitInsn(Opcodes.DALOAD) mv.visitInsn(Opcodes.DASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_4) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitInsn(Opcodes.ICONST_1) mv.visitInsn(Opcodes.DALOAD) mv.visitInsn(Opcodes.DASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_5) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitInsn(Opcodes.ICONST_2) mv.visitInsn(Opcodes.DALOAD) mv.visitInsn(Opcodes.DASTORE) mv.visitInsn(Opcodes.ARETURN) mv.visitMaxs(5, 2) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "csvHeader", "()[Ljava/lang/String;", None, None) mv.visitCode() mv.visitIntInsn(Opcodes.BIPUSH, 6) mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/String") mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_0) mv.visitLdcInsn("angle") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_1) mv.visitLdcInsn("len1") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_2) mv.visitLdcInsn("len2") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_3) mv.visitLdcInsn("x") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_4) mv.visitLdcInsn("y") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.DUP) mv.visitInsn(Opcodes.ICONST_5) mv.visitLdcInsn("z") mv.visitInsn(Opcodes.AASTORE) mv.visitInsn(Opcodes.ARETURN) mv.visitMaxs(4, 0) mv.visitEnd() mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC, "extractFeatures", "(Ljava/util/List;Lnet/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree;DDD)Ljava/util/List;", "(Ljava/util/List<Lnet/imglib2/RealLocalizable;>;Lnet/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree<Lnet/imglib2/RealLocalizable;>;DDD)Ljava/util/List<Lmy/ConstellationFast;>;", None) mv.visitCode() mv.visitTypeInsn(Opcodes.NEW, "java/util/ArrayList") mv.visitInsn(Opcodes.DUP) mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V") mv.visitVarInsn(Opcodes.ASTORE, 8) mv.visitVarInsn(Opcodes.ALOAD, 0) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "iterator", "()Ljava/util/Iterator;") mv.visitVarInsn(Opcodes.ASTORE, 9) l0 = Label() mv.visitLabel(l0) mv.visitFrame(Opcodes.F_APPEND,2, ["java/util/List", "java/util/Iterator"], 0, None) mv.visitVarInsn(Opcodes.ALOAD, 9) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z") l1 = Label() mv.visitJumpInsn(Opcodes.IFEQ, l1) mv.visitVarInsn(Opcodes.ALOAD, 9) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;") mv.visitTypeInsn(Opcodes.CHECKCAST, "net/imglib2/RealLocalizable") mv.visitVarInsn(Opcodes.ASTORE, 10) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitVarInsn(Opcodes.ALOAD, 10) mv.visitVarInsn(Opcodes.DLOAD, 2) mv.visitInsn(Opcodes.ICONST_1) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "search", "(Lnet/imglib2/RealLocalizable;DZ)V") mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "numNeighbors", "()I") mv.visitVarInsn(Opcodes.ISTORE, 11) mv.visitVarInsn(Opcodes.ILOAD, 11) mv.visitInsn(Opcodes.ICONST_2) l2 = Label() mv.visitJumpInsn(Opcodes.IF_ICMPLE, l2) mv.visitInsn(Opcodes.ICONST_0) mv.visitVarInsn(Opcodes.ISTORE, 12) mv.visitVarInsn(Opcodes.ILOAD, 11) mv.visitInsn(Opcodes.ICONST_2) mv.visitInsn(Opcodes.ISUB) mv.visitVarInsn(Opcodes.ISTORE, 13) mv.visitVarInsn(Opcodes.ILOAD, 11) mv.visitInsn(Opcodes.ICONST_1) mv.visitInsn(Opcodes.ISUB) mv.visitVarInsn(Opcodes.ISTORE, 14) l3 = Label() mv.visitLabel(l3) mv.visitFrame(Opcodes.F_FULL, 12, ["java/util/List", "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, "java/util/List", "java/util/Iterator", "net/imglib2/RealLocalizable", Opcodes.INTEGER, Opcodes.INTEGER, Opcodes.INTEGER, Opcodes.INTEGER], 0, []) mv.visitVarInsn(Opcodes.ILOAD, 13) mv.visitJumpInsn(Opcodes.IFLE, l2) mv.visitVarInsn(Opcodes.DLOAD, 6) mv.visitVarInsn(Opcodes.ILOAD, 12) mv.visitInsn(Opcodes.I2D) mv.visitInsn(Opcodes.DCMPL) l4 = Label() mv.visitJumpInsn(Opcodes.IFNE, l4) mv.visitJumpInsn(Opcodes.GOTO, l2) mv.visitLabel(l4) mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None) mv.visitVarInsn(Opcodes.ALOAD, 10) mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitVarInsn(Opcodes.ILOAD, 13) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "getPosition", "(I)Lnet/imglib2/RealLocalizable;") mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitVarInsn(Opcodes.ILOAD, 13) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "getSquareDistance", "(I)D") mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitVarInsn(Opcodes.ILOAD, 14) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "getPosition", "(I)Lnet/imglib2/RealLocalizable;") mv.visitVarInsn(Opcodes.ALOAD, 1) mv.visitVarInsn(Opcodes.ILOAD, 14) mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", "getSquareDistance", "(I)D") mv.visitMethodInsn(Opcodes.INVOKESTATIC, "my/ConstellationFast", "fromSearch", "(Lnet/imglib2/RealLocalizable;Lnet/imglib2/RealLocalizable;DLnet/imglib2/RealLocalizable;D)Lmy/ConstellationFast;") mv.visitVarInsn(Opcodes.ASTORE, 15) mv.visitVarInsn(Opcodes.ALOAD, 15) mv.visitFieldInsn(Opcodes.GETFIELD, "my/ConstellationFast", "angle", "D") mv.visitVarInsn(Opcodes.DLOAD, 4) mv.visitInsn(Opcodes.DCMPL) l5 = Label() mv.visitJumpInsn(Opcodes.IFLT, l5) mv.visitIincInsn(12, 1) mv.visitVarInsn(Opcodes.ALOAD, 8) mv.visitVarInsn(Opcodes.ALOAD, 15) mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", "add", "(Ljava/lang/Object;)Z") mv.visitInsn(Opcodes.POP) mv.visitLabel(l5) mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None) mv.visitIincInsn(13, -1) mv.visitIincInsn(14, -1) mv.visitJumpInsn(Opcodes.GOTO, l3) mv.visitLabel(l2) mv.visitFrame(Opcodes.F_FULL, 7, ["java/util/List", "net/imglib2/neighborsearch/RadiusNeighborSearchOnKDTree", Opcodes.DOUBLE, Opcodes.DOUBLE, Opcodes.DOUBLE, "java/util/List", "java/util/Iterator"], 0, []) mv.visitJumpInsn(Opcodes.GOTO, l0) mv.visitLabel(l1) mv.visitFrame(Opcodes.F_CHOP,1, None, 0, None) mv.visitVarInsn(Opcodes.ALOAD, 8) mv.visitInsn(Opcodes.ARETURN) mv.visitMaxs(7, 16) mv.visitEnd() cw.visitEnd() if not classloader: classloader = CustomClassLoader() return classloader.defineClass("my/ConstellationFast", cw.toByteArray())