def METHOD_NAME(argv=sys.argv):
    # srcwin = None
    # bands = []
    srcfile = None
    dstfile = None
    size = 3
    coefs = None
    normalized = 0
    out_format = None
    create_options = []
    # Parse command line arguments.
    i = 1
    while i < len(argv):
        arg = argv[i]
        if arg == "-size":
            size = int(argv[i + 1])
            i = i + 1
        elif arg == "-n":
            normalized = 1
        elif arg == "-f":
            out_format = int(argv[i + 1])
            i = i + 1
        elif arg == "-co":
            create_options.append(argv[i + 1])
            i = i + 1
        elif arg == "-coefs":
            coefs = []
            for iCoef in range(size * size):
                try:
                    coefs.append(float(argv[iCoef + i + 1]))
                except Exception:
                    print(
                        "Didn't find enough valid kernel coefficients, need ",
                        size * size,
                    )
                    return 1
            i = i + size * size
        elif srcfile is None:
            srcfile = argv[i]
        elif dstfile is None:
            dstfile = argv[i]
        else:
            return Usage()
        i = i + 1
    if dstfile is None:
        return Usage()
    if out_format is None and dstfile[-4:].lower() == ".vrt":
        out_format = "VRT"
    else:
        out_format = "GTiff"
    # =============================================================================
    #   Open input file.
    # =============================================================================
    src_ds = gdal.Open(srcfile)
    # =============================================================================
    #   Create a virtual file in memory only which matches the configuration of
    #   the input file.
    # =============================================================================
    vrt_driver = gdal.GetDriverByName("VRT")
    vrt_ds = vrt_driver.CreateCopy("", src_ds)
    # =============================================================================
    #   Prepare coefficient list.
    # =============================================================================
    coef_list_size = size * size
    if coefs is None:
        coefs = []
        for i in range(coef_list_size):
            coefs.append(1.0 / coef_list_size)
    coefs_string = ""
    for i in range(coef_list_size):
        coefs_string = coefs_string + ("%.8g " % coefs[i])
    # =============================================================================
    #   Prepare template for XML description of the filtered source.
    # =============================================================================
    filt_template = """<KernelFilteredSource>
      <SourceFilename>%s</SourceFilename>
      <SourceBand>%%d</SourceBand>
      <Kernel normalized="%d">
        <Size>%d</Size>
        <Coefs>%s</Coefs>
      </Kernel>
    </KernelFilteredSource>""" % (
        srcfile,
        normalized,
        size,
        coefs_string,
    )
    # =============================================================================
    # Go through all the bands replacing the SimpleSource with a filtered source.
    # =============================================================================
    for iBand in range(vrt_ds.RasterCount):
        band = vrt_ds.GetRasterBand(iBand + 1)
        src_xml = filt_template % (iBand + 1)
        band.SetMetadata({"source_0": src_xml}, "vrt_sources")
    # =============================================================================
    # copy the results to a new file.
    # =============================================================================
    if out_format == "VRT":
        vrt_ds.SetDescription(dstfile)
        vrt_ds = None
        return 0
    out_driver = gdal.GetDriverByName(out_format)
    if out_driver is None:
        print("Output driver %s does not appear to exist." % out_format)
        return 0
    out_ds = out_driver.CreateCopy(
        dstfile, vrt_ds, options=create_options, callback=gdal.TermProgress
    )
    if out_ds is None:
        return 1
    else:
        out_ds = None
        return 0