-
-
Save mauro3/f6b665ce5ab973367cfcde894bd94f71 to your computer and use it in GitHub Desktop.
SnoopCompile.jl for ArgParse.jl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using ArgParse | |
s = ArgParseSettings() | |
@add_arg_table s begin # this takes 1.5s! | |
"--areamin", "-n" | |
help = "Minimum area (km^2)" | |
default = 0.0 | |
arg_type = Float64 | |
"--areamax", "-x" | |
help = "Maximum area (km^2)" | |
default = Inf | |
arg_type = Float64 | |
"--dist", "-d" | |
help = "Maximal search distance (default 10km)" | |
default = 10.0 | |
arg_type = Float64 | |
"--proj", "-p" | |
help = "Projection of (x,y) in Proj4 format. Default long-lat" | |
default = "+proj=longlat" | |
arg_type = String | |
"--utm", "-u" | |
help = "UTM projection zone of (x,y): 32N or 24S (north/south)" | |
default = "" | |
arg_type = String | |
"x-coord" | |
help = "X coordinate or longitude" | |
required = true | |
arg_type = Float64 | |
"y-coord" | |
help = "Y coordinate or latitude" | |
arg_type = Float64 | |
required = true | |
end | |
# # Expands to: | |
# (ArgParse.isa)(s,ArgParse.ArgParseSettings) || (ArgParse.error)("first argument to @add_arg_table must be of type ArgParseSettings") | |
# (ArgParse.add_arg_field)(s,["--areamin";"-n"]; (ArgParse.Dict)(:help => "Minimum area (km^2)",:default => 0.0,:arg_type => Float64)...) | |
# (ArgParse.add_arg_field)(s,["--areamax";"-x"]; (ArgParse.Dict)(:help => "Maximum area (km^2)",:default => Inf,:arg_type => Float64)...) | |
# (ArgParse.add_arg_field)(s,["--dist";"-d"]; (ArgParse.Dict)(:help => "Maximal search distance (default 10km)",:default => 10.0,:arg_type => Float64)...) | |
# (ArgParse.add_arg_field)(s,["--proj";"-p"]; (ArgParse.Dict)(:help => "Projection of (x,y) in Proj4 format. Default long-lat",:default => "+proj=longlat",:arg_type => String)...) | |
# (ArgParse.add_arg_field)(s,["--utm";"-u"]; (ArgParse.Dict)(:help => "UTM projection zone of (x,y): 32N or 24S (north/south)",:default => "",:arg_type => String)...) | |
# (ArgParse.add_arg_field)(s,"x-coord"; (ArgParse.Dict)(:help => "X coordinate or longitude",:required => true,:arg_type => Float64)...) | |
# (ArgParse.add_arg_field)(s,"y-coord"; (ArgParse.Dict)(:help => "Y coordinate or latitude",:arg_type => Float64,:required => true)...) | |
ARGS = String["-d","5","-u","45n","-n","1","483516","4773140"] | |
args = parse_args(ARGS, s) | |
print("done") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using SnoopCompile | |
### Log the compiles | |
# This only needs to be run once (to generate "/tmp/images_compiles.csv") | |
SnoopCompile.@snoop "/tmp/argparse_compiles.csv" begin | |
include("snoop-include.jl") | |
end ###### | |
### Parse the compiles and generate precompilation scripts | |
# This can be run repeatedly to tweak the scripts | |
# IMPORTANT: we must have the module(s) defined for the parcelation | |
# step, otherwise we will get no precompiles for the Images module | |
using ArgParse | |
data = SnoopCompile.read("/tmp/argparse_compiles.csv") | |
# Use these two lines if you want to create usrimg.jl | |
pc = SnoopCompile.format_userimg(data[end:-1:1,2]) | |
SnoopCompile.write("/tmp/userimg_argparse.jl", pc) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# to make ArgParse faster for a specific script | |
precompile(Base.rehash!, (Base.Dict{AbstractString, Void}, Int64,)) | |
precompile(Base.deepcopy_internal, (Array{String, 1}, Base.ObjectIdDict,)) | |
precompile(Base.replace, (String, Char, Char, Int64,)) | |
precompile(Base.schedule_and_wait, (Task, Void,)) | |
precompile(Base._setindex!, (Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol, Int64,)) | |
precompile(Base._setindex!, (Base.Dict{Symbol, Any}, Symbol, Symbol, Int64,)) | |
precompile(Base.Type, (Type{Base.Set{AbstractString}},)) | |
precompile(Base.vect, (Symbol,)) | |
precompile(Base.vect, (String,)) | |
precompile(Base.string, (String, String,)) | |
precompile(ArgParse.check_arg_name, (String,)) | |
precompile(Base.ht_keyindex, (Base.Dict{String, Any}, String,)) | |
precompile(ArgParse.parse1_optarg, (ArgParse.ParserState, ArgParse.ArgParseSettings, ArgParse.ArgParseField, Void, String,)) | |
precompile(Base.ht_keyindex, (Base.Dict{AbstractString, Void}, String,)) | |
precompile(Base.pop!, (Array{ArgParse.ArgParseField, 1},)) | |
precompile(Base.rehash!, (Base.Dict{String, Any}, Int64,)) | |
precompile(Base.rehash!, (Base.Dict{Symbol, Bool}, Int64,)) | |
precompile(Base.skip_deleted, (Base.Dict{AbstractString, Any}, Int64,)) | |
precompile(Base.vector_any, (Any,)) | |
precompile(ArgParse.check_name_format, (Array{String, 1},)) | |
precompile(ArgParse.check_conflicts_with_commands, (ArgParse.ArgParseSettings, ArgParse.ArgParseField, Bool,)) | |
precompile(ArgParse.check_name_format, (String,)) | |
precompile(Base.skip_deleted, (Base.Dict{Symbol, Bool}, Int64,)) | |
precompile(ArgParse.check_for_duplicates, (Array{ArgParse.ArgParseField, 1}, ArgParse.ArgParseField,)) | |
precompile(Base.produce, (Symbol,)) | |
precompile(Base.task_done_hook, (Task,)) | |
precompile(Base.Type, (Type{Base.Dict{Symbol, Any}}, Tuple{Base.Pair{Symbol, String}, Base.Pair{Symbol, String}, Base.Pair{Symbol, DataType}},)) | |
precompile(Base.Type, (Type{Base.Dict{Symbol, Any}}, Tuple{Base.Pair{Symbol, String}, Base.Pair{Symbol, Float64}, Base.Pair{Symbol, DataType}},)) | |
precompile(Base.Type, (Type{Base.Dict{Symbol, Any}}, Tuple{Base.Pair{Symbol, String}, Base.Pair{Symbol, Bool}, Base.Pair{Symbol, DataType}},)) | |
precompile(ArgParse.looks_like_an_option, (String, ArgParse.ArgParseSettings,)) | |
precompile(Base.skip_deleted, (Base.Dict{String, Any}, Int64,)) | |
precompile(Base.Type, (Type{Base.Dict{Symbol, Any}}, Tuple{Base.Pair{Symbol, String}, Base.Pair{Symbol, DataType}, Base.Pair{Symbol, Bool}},)) | |
precompile(ArgParse.is_flag, (ArgParse.ArgParseField,)) | |
precompile(ArgParse.check_nargs_and_action, (ArgParse.ArgConsumerType, Symbol,)) | |
precompile(Base._setindex!, (Base.Dict{Symbol, Any}, Float64, Symbol, Int64,)) | |
precompile(ArgParse.parse1_flag, (ArgParse.ParserState, ArgParse.ArgParseSettings, ArgParse.ArgParseField, Bool, String,)) | |
precompile(Base.UTF8proc.isalnum, (Char,)) | |
precompile(Base._setindex!, (Base.Dict{String, Any}, Void, String, Int64,)) | |
precompile(ArgParse.idstring, (ArgParse.ArgParseField,)) | |
precompile(ArgParse.Type, (Type{ArgParse.ArgParseField},)) | |
precompile(Base._setindex!, (Base.Dict{String, Any}, String, String, Int64,)) | |
precompile(ArgParse.preparse, (Base.Channel{Any}, ArgParse.ParserState, ArgParse.ArgParseSettings,)) | |
precompile(Base.splice!, (Array{Any, 1}, Int64, Array{Any, 1},)) | |
precompile(ArgParse.check_short_opt_name, (String, ArgParse.ArgParseSettings,)) | |
precompile(ArgParse.is_arg, (ArgParse.ArgParseField,)) | |
precompile(Base.getindex, (Type{String}, String, String, String, String,)) | |
precompile(Base._setindex!, (Base.Dict{String, Any}, Float64, String, Int64,)) | |
precompile(Base.vcat, (String, String,)) | |
precompile(ArgParse.parse_command_args, (ArgParse.ParserState, ArgParse.ArgParseSettings,)) | |
precompile(Base.copy!, (Array{Symbol, 1}, Int64, Array{Symbol, 1}, Int64, Int64,)) | |
precompile(ArgParse.read_args_from_files, (Array{String, 1}, Base.Set{Char},)) | |
precompile(Base.deepcopy_internal, (Array{UInt8, 1}, Base.ObjectIdDict,)) | |
precompile(ArgParse.auto_dest_name, (String, Array{AbstractString, 1}, Array{AbstractString, 1}, Bool,)) | |
precompile(Base.schedule_and_wait, (Task, Symbol,)) | |
precompile(Base.Type, (Type{Base.Dict{Symbol, Any}}, Array{Any, 1},)) | |
precompile(Base._setindex!, (Base.Dict{AbstractString, Void}, Void, String, Int64,)) | |
precompile(ArgParse.check_metavar, (String,)) | |
precompile(Base.indexed_next, (Base.Pair{Symbol, Float64}, Int64, Int64,)) | |
precompile(ArgParse.check_settings_can_use_symbols, (ArgParse.ArgParseSettings,)) | |
precompile(Base._setindex!, (Base.Dict{Symbol, Bool}, Bool, Symbol, Int64,)) | |
precompile(ArgParse.parse_arg, (ArgParse.ParserState, ArgParse.ArgParseSettings,)) | |
precompile(ArgParse.is_multi_nargs, (ArgParse.ArgConsumerType,)) | |
precompile(Base.setindex!, (Base.Dict{Symbol, Any}, Symbol, Symbol,)) | |
precompile(ArgParse.parse_args_unhandled, (Array{String, 1}, ArgParse.ArgParseSettings, Bool,)) | |
precompile(ArgParse.convert_to_symbols, (Base.Dict{String, Any},)) | |
precompile(ArgParse.found_command, (ArgParse.ParserState,)) | |
precompile(Base.push!, (Array{ArgParse.ArgParseField, 1}, ArgParse.ArgParseField,)) | |
precompile(ArgParse.Type, (Type{ArgParse.ArgParseSettings},)) | |
precompile(ArgParse.auto_metavar, (String, Bool,)) | |
precompile(ArgParse.check_long_opt_name, (String, ArgParse.ArgParseSettings,)) | |
precompile(ArgParse.is_flag_action, (Symbol,)) | |
precompile(ArgParse.default_action, (ArgParse.ArgConsumerType,)) | |
precompile(ArgParse.check_dest_name, (String,)) | |
precompile(ArgParse.has_cmd, (ArgParse.ArgParseSettings,)) | |
precompile(ArgParse.is_command_action, (Symbol,)) | |
precompile(ArgParse.Type, (Type{ArgParse.ArgParseTable},)) | |
precompile(ArgParse.Type, (Type{ArgParse.ParserState}, Array{String, 1}, ArgParse.ArgParseSettings, Bool,)) | |
precompile(ArgParse.parse_short_opt, (ArgParse.ParserState, ArgParse.ArgParseSettings,)) | |
precompile(ArgParse.is_multi_action, (Symbol,)) | |
precompile(Base.indexed_next, (Base.Pair{Symbol, DataType}, Int64, Int64,)) | |
precompile(ArgParse.get_group, (String, ArgParse.ArgParseField, ArgParse.ArgParseSettings,)) | |
precompile(ArgParse.name_to_fieldnames, (Array{String, 1}, ArgParse.ArgParseSettings,)) | |
precompile(ArgParse.parse_args, (Array{String, 1}, ArgParse.ArgParseSettings,)) | |
precompile(ArgParse.parse_item, (Type{Float64}, String,)) | |
precompile(Base.indexed_next, (Base.Pair{Symbol, Bool}, Int64, Int64,)) | |
precompile(ArgParse.check_prefix_chars, (Base.Set{Char},)) | |
precompile(Base.indexed_next, (Tuple{Symbol, Float64}, Int64, Int64,)) | |
precompile(ArgParse.check_arg_makes_sense, (ArgParse.ArgParseSettings, ArgParse.ArgParseField,)) | |
precompile(Base.convert, (Type{Union{AbstractString, Void}}, String,)) | |
precompile(Base.convert, (Type{ArgParse.ArgConsumerType}, ArgParse.ArgConsumerType,)) | |
precompile(ArgParse.test_required_args, (ArgParse.ArgParseSettings, Base.Set{AbstractString},)) | |
precompile(Base.convert, (Type{Union{AbstractString, Void}}, Void,)) | |
precompile(ArgParse.parse_long_opt, (ArgParse.ParserState, ArgParse.ArgParseSettings,)) | |
precompile(ArgParse.Type, (Type{ArgParse.ArgConsumerType}, Symbol,)) | |
precompile(ArgParse.parse_item, (Type{String}, String,)) | |
precompile(ArgParse.name_to_fieldnames, (String, ArgParse.ArgParseSettings,)) | |
precompile(Base.ht_keyindex2, (Base.Dict{String, Any}, String,)) | |
precompile(Base.ht_keyindex2, (Base.Dict{AbstractString, Void}, String,)) | |
precompile(Base.ht_keyindex2, (Base.Dict{Symbol, Bool}, Symbol,)) | |
precompile(ArgParse.check_action_is_valid, (Symbol,)) | |
precompile(ArgParse.warn_extra_opts, (Array{Symbol, 1}, Array{Symbol, 1},)) | |
precompile(Base.setindex!, (Base.Dict{String, Any}, String, String,)) | |
precompile(Base.setindex!, (Base.Dict{Symbol, Any}, Float64, Symbol,)) | |
precompile(Base.consume, (Task,)) | |
precompile(Base.setindex!, (Base.Dict{String, Any}, Void, String,)) | |
precompile(Base.setindex!, (Base.Dict{Symbol, Any}, Base.Dict{Symbol, Any}, Symbol,)) | |
precompile(Base.setindex!, (Base.Dict{String, Any}, Float64, String,)) | |
precompile(Base.setindex!, (Base.Dict{Symbol, Any}, Symbol, Symbol,)) | |
precompile(Base.setindex!, (Base.Dict{AbstractString, Void}, Void, String,)) | |
precompile(Base.append!, (Array{Symbol, 1}, Array{Symbol, 1},)) | |
precompile(Base.setindex!, (Base.Dict{Symbol, Bool}, Bool, Symbol,)) | |
precompile(Base.Type, (Type{Base.Dict{Symbol, Bool}}, Array{Tuple{Symbol, Bool}, 1},)) | |
precompile(ArgParse.get_group_name, (String, ArgParse.ArgParseField, ArgParse.ArgParseSettings,)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Does not help much. The slow part is https://gist.github.com/mauro3/f6b665ce5ab973367cfcde894bd94f71#file-snoop-include-jl-L4, but it only speeds this up from 1.5s to 1.35s. Also line 46 is not sped up.
Note snoop.jl errors here https://gist.github.com/mauro3/f6b665ce5ab973367cfcde894bd94f71#file-snoop-jl-L17. I just deleted the offending part of the "/tmp/argparse_compiles.csv" file. It could well be that that would be the part which would speed things up.