def createConsumerInvokeSetOne():
    cw = ClassWriter(0)

    cw.visit(
        52, Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_SUPER,
        "my/InvokeSetOne",
        "<T::Lnet/imglib2/type/operators/SetOne>Ljava/lang/ObjectLjava/util/function/Consumer<TT>;",
        "java/lang/Object", ["java/util/function/Consumer"])

    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", None, None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 0)
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>",
                       "()V", False)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(1, 1)
    mv.visitEnd()

    mv = cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "accept",
                        "(Lnet/imglib2/type/operators/SetOne;)V", "(TT)V",
                        None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 1)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE,
                       "net/imglib2/type/operators/SetOne", "setOne", "()V",
                       True)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(1, 2)
    mv.visitEnd()

    mv = cw.visitMethod(
        Opcodes.ACC_PUBLIC + Opcodes.ACC_BRIDGE + Opcodes.ACC_SYNTHETIC,
        "accept", "(Ljava/lang/Object;)V", None, None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 0)
    mv.visitVarInsn(Opcodes.ALOAD, 1)
    mv.visitTypeInsn(Opcodes.CHECKCAST, "net/imglib2/type/operators/SetOne")
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "my/InvokeSetOne", "accept",
                       "(Lnet/imglib2/type/operators/SetOne;)V", False)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(2, 2)
    mv.visitEnd()

    cw.visitEnd()

    # Load class
    return CustomClassLoader().defineClass("my.InvokeSetOne", cw.toByteArray())
Пример #2
0
def defineBiConsumerTypeSet(imglib2Type, classname=None):
    """ 
      A class to use in e.g. an ImgLib2 LoopBuilder.setImages(img1, img2).forEachPixel(<instance of this BiConsumer class>)
      where both image are of the same Type, and the value of one has to be set as the value of the other, like this:
        type1.set(type2)
        
      In java, this would be written as: LoopBuilder.setImages(img1, img2).forEachPixel( (type1, type2) -> type1.set(type2) );
  """
    typeClassname = imglib2Type.getName().replace(".", "/")

    if classname is None:
        classname = "asm/loop/BiConsumer_%s_set" % imglib2Type.getSimpleName()

    classWriter = ClassWriter(0)
    classWriter.visit(
        Opcodes.V1_8, Opcodes.ACC_PUBLIC | Opcodes.ACC_SUPER, classname,
        "<T::L%s<TT;>;>Ljava/lang/Object;Ljava/util/function/BiConsumer<TT;TT;>;"
        % typeClassname, "java/lang/Object", ["java/util/function/BiConsumer"])

    # Constructor
    methodVisitor = classWriter.visitMethod(Opcodes.ACC_PUBLIC, "<init>",
                                            "()V", None, None)
    methodVisitor.visitCode()
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 0)
    methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object",
                                  "<init>", "()V", False)
    methodVisitor.visitInsn(Opcodes.RETURN)
    methodVisitor.visitMaxs(1, 1)
    methodVisitor.visitEnd()

    # BiConsumer.accept method implementation with body Type.set(Type)
    methodVisitor = classWriter.visitMethod(
        Opcodes.ACC_PUBLIC, "accept",
        "(L%s;L%s;)V" % (typeClassname, typeClassname), "(TT;TT;)V", None)
    methodVisitor.visitCode()
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 2)
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 1)
    methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, typeClassname, "set",
                                  "(L%s;)V" % typeClassname, False)
    methodVisitor.visitInsn(Opcodes.RETURN)
    methodVisitor.visitMaxs(2, 3)
    methodVisitor.visitEnd()

    # BiConsumer.accept method with Object,Object arguments: to provide a bridge between the BiConsumer.accept method and the class accept method
    methodVisitor = classWriter.visitMethod(
        Opcodes.ACC_PUBLIC | Opcodes.ACC_BRIDGE | Opcodes.ACC_SYNTHETIC,
        "accept", "(Ljava/lang/Object;Ljava/lang/Object;)V", None, None)
    methodVisitor.visitCode()
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 0)
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 1)
    methodVisitor.visitTypeInsn(Opcodes.CHECKCAST, typeClassname)
    methodVisitor.visitVarInsn(Opcodes.ALOAD, 2)
    methodVisitor.visitTypeInsn(Opcodes.CHECKCAST, typeClassname)
    methodVisitor.visitMethodInsn(
        Opcodes.INVOKEVIRTUAL, classname, "accept",
        "(L%s;L%s;)V" % (typeClassname, typeClassname), False)
    methodVisitor.visitInsn(Opcodes.RETURN)
    methodVisitor.visitMaxs(3, 3)
    methodVisitor.visitEnd()

    classWriter.visitEnd()

    loader = CustomClassLoader()
    biconsumerClass = loader.defineClass(classname, classWriter.toByteArray())
    return biconsumerClass
Пример #3
0
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())
Пример #4
0
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())
Пример #5
0
def makeCompositeToRealConverter(reducer_class=Math,
                                 reducer_method="max",
                                 reducer_method_signature="(DD)D",
                                 classloader=None):
    """
  Takes a RealComposite as input and converts it into a RealType,
  by reducing the list of RealType in RealComposite using a specified function.
  reducer_class: e.g. Math
  reducer_method: e.g. "max", a method that takes two doubles and returns one.
  reducer_method_signature: e.g. "(DD)D", two double arguments, returning a double.
  """
    class_name = "my/CompositeToRealConverterVia_" + reducer_class.getName(
    ).replace('.', '_') + '_' + reducer_method
    # Turn e.g. class Math into "java/lang/Math":
    reducer_class_string = reducer_class.getName().replace('.', '/')

    cw = ClassWriter(0)

    cw.visit(
        52, Opcodes.ACC_PUBLIC + Opcodes.ACC_SUPER, class_name,
        "<S::Lnet/imglib2/type/numeric/RealType<TS;>;T::Lnet/imglib2/type/numeric/RealType<TT;>;>Ljava/lang/Object;Lnet/imglib2/converter/Converter<Lnet/imglib2/view/composite/RealComposite<TS;>;TT;>;",
        "java/lang/Object", ["net/imglib2/converter/Converter"])

    mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", None, None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 0)
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>",
                       "()V", False)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(1, 1)
    mv.visitEnd()

    mv = cw.visitMethod(
        Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, "convert",
        "(Lnet/imglib2/view/composite/RealComposite;Lnet/imglib2/type/numeric/RealType;)V",
        "(Lnet/imglib2/view/composite/RealComposite<TS;>;TT;)V", None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 2)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE,
                       "net/imglib2/type/numeric/RealType", "setZero", "()V",
                       True)
    mv.visitVarInsn(Opcodes.ALOAD, 1)
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL,
                       "net/imglib2/view/composite/RealComposite", "iterator",
                       "()Ljava/util/Iterator;", False)
    mv.visitVarInsn(Opcodes.ASTORE, 4)
    l0 = Label()
    mv.visitJumpInsn(Opcodes.GOTO, l0)
    l1 = Label()
    mv.visitLabel(l1)
    mv.visitFrame(Opcodes.F_FULL, 5, [
        class_name, "net/imglib2/view/composite/RealComposite",
        "net/imglib2/type/numeric/RealType", Opcodes.TOP, "java/util/Iterator"
    ], 0, [])
    mv.visitVarInsn(Opcodes.ALOAD, 4)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator", "next",
                       "()Ljava/lang/Object;", True)
    mv.visitTypeInsn(Opcodes.CHECKCAST, "net/imglib2/type/numeric/RealType")
    mv.visitVarInsn(Opcodes.ASTORE, 3)
    mv.visitVarInsn(Opcodes.ALOAD, 2)
    mv.visitVarInsn(Opcodes.ALOAD, 3)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE,
                       "net/imglib2/type/numeric/RealType", "getRealDouble",
                       "()D", True)
    mv.visitVarInsn(Opcodes.ALOAD, 2)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE,
                       "net/imglib2/type/numeric/RealType", "getRealDouble",
                       "()D", True)
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, reducer_class_string,
                       reducer_method, reducer_method_signature, False)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE,
                       "net/imglib2/type/numeric/RealType", "setReal", "(D)V",
                       True)
    mv.visitLabel(l0)
    mv.visitFrame(Opcodes.F_SAME, 0, None, 0, None)
    mv.visitVarInsn(Opcodes.ALOAD, 4)
    mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/Iterator",
                       "hasNext", "()Z", True)
    mv.visitJumpInsn(Opcodes.IFNE, l1)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(5, 5)
    mv.visitEnd()

    mv = cw.visitMethod(
        Opcodes.ACC_PUBLIC + Opcodes.ACC_BRIDGE + Opcodes.ACC_SYNTHETIC,
        "convert", "(Ljava/lang/Object;Ljava/lang/Object;)V", None, None)
    mv.visitCode()
    mv.visitVarInsn(Opcodes.ALOAD, 0)
    mv.visitVarInsn(Opcodes.ALOAD, 1)
    mv.visitTypeInsn(Opcodes.CHECKCAST,
                     "net/imglib2/view/composite/RealComposite")
    mv.visitVarInsn(Opcodes.ALOAD, 2)
    mv.visitTypeInsn(Opcodes.CHECKCAST, "net/imglib2/type/numeric/RealType")
    mv.visitMethodInsn(
        Opcodes.INVOKEVIRTUAL, class_name, "convert",
        "(Lnet/imglib2/view/composite/RealComposite;Lnet/imglib2/type/numeric/RealType;)V",
        False)
    mv.visitInsn(Opcodes.RETURN)
    mv.visitMaxs(3, 3)
    mv.visitEnd()

    cw.visitEnd()

    if not classloader:
        classloader = CustomClassLoader()
    return classloader.defineClass(class_name, cw.toByteArray())