1- # # UTILITIES FOR ENCODING AND DECODING MODEL METADATA
2- # (for serializing/deserializing into TOML format)
3-
4- # fallback encoding:
5- function encode_dic (s)
6- prestring = string (" `" , s, " `" )
7- # hack for objects with gensyms in their string representation:
8- str = replace (prestring, ' #' => ' _' )
9- return str
10- end
11-
12- encode_dic (s:: AbstractString ) = string (s)
13- encode_dic (s:: Symbol ) = string (" :" , s)
14- encode_dic (s:: Nothing ) = " `nothing`"
15- encode_dic (v:: AbstractVector ) = encode_dic .(v)
16- function encode_dic (d:: AbstractDict )
17- ret = LittleDict {} ()
18- for (k, v) in d
19- ret[encode_dic (k)] = encode_dic (v)
20- end
21- return ret
22- end
1+ # # DECODING MODEL METADATA
2+ # (deserializing TOML dictionary)
233
244function decode_dic (s:: String )
255 if ! isempty (s)
@@ -51,34 +31,11 @@ function decode_dic(d::AbstractDict)
5131 return ret
5232end
5333
54- # the inverse of a multivalued dictionary is a multivalued
55- # dictionary:
56- function inverse (d:: LittleDict{S,Set{T}} ) where {S,T}
57- dinv = LittleDict {T,Set{S}} ()
58- for key in keys (d)
59- for val in d[key]
60- if val in keys (dinv)
61- push! (dinv[val], key)
62- else
63- dinv[val] = Set ([key,])
64- end
65- end
66- end
67- return dinv
68- end
69- function inverse (d:: Dict{S,Set{T}} ) where {S,T}
70- dinv = Dict {T,Set{S}} ()
71- for key in keys (d)
72- for val in d[key]
73- if val in keys (dinv)
74- push! (dinv[val], key)
75- else
76- dinv[val] = Set ([key,])
77- end
78- end
79- end
80- return dinv
81- end
34+
35+ # # MODEL HANDLES
36+
37+ Handle = NamedTuple{(:name , :pkg ), Tuple{String,String}}
38+ (:: Type{Handle} )(name,string) = NamedTuple {(:name, :pkg)} ((name, string))
8239
8340function Base. isless (h1:: Handle , h2:: Handle )
8441 if isless (h1. name, h2. name)
@@ -90,30 +47,39 @@ function Base.isless(h1::Handle, h2::Handle)
9047 end
9148end
9249
50+ function (:: Type{Handle} )(name:: String )
51+ if name in AMBIGUOUS_NAMES
52+ return Handle (name, missing )
53+ else
54+ return Handle (name, first (PKGS_GIVEN_NAME[name]))
55+ end
56+ end
57+
9358
94- # # FUNCTIONS TO BUILD GLOBAL METADATA CONSTANTS IN MLJMODELS
95- # # INITIALIZATION
59+ # # FUNCTIONS TO BUILD GLOBAL METADATA CONSTANTS
9660
9761# to define INFO_GIVEN_HANDLE
9862function info_given_handle (metadata_file)
9963 metadata = LittleDict (TOML. parsefile (metadata_file))
100- metadata_given_pkg = decode_dic (metadata)
64+ metadata_given_api_pkg = decode_dic (metadata)
10165
10266 # build info_given_handle dictionary:
10367 ret = Dict{Handle}{Any}()
104- packages = keys (metadata_given_pkg )
105- for pkg in packages
106- info_given_name = metadata_given_pkg[pkg ]
68+ packages = keys (metadata_given_api_pkg )
69+ for api_pkg in packages
70+ info_given_name = metadata_given_api_pkg[api_pkg ]
10771 for name in keys (info_given_name)
72+ info = info_given_name[name]
73+ pkg = info[:package_name ]
10874 handle = Handle (name, pkg)
109- ret[handle] = info_given_name[name]
75+ ret[handle] = info
11076 end
11177 end
11278 return ret
11379
11480end
11581
116- # for use in __init__ to define AMBIGUOUS_NAMES
82+ # to define AMBIGUOUS_NAMES
11783function ambiguous_names (info_given_handle)
11884 names_with_duplicates = map (keys (info_given_handle) |> collect) do handle
11985 handle. name
@@ -124,7 +90,7 @@ function ambiguous_names(info_given_handle)
12490 end
12591end
12692
127- # for use in __init__ to define PKGS_GIVEN_NAME
93+ # to define PKGS_GIVEN_NAME
12894function pkgs_given_name (info_given_handle)
12995 handles = keys (info_given_handle) |> collect
13096 ret = Dict {String,Vector{String}} ()
@@ -145,14 +111,6 @@ function model_names(info_given_handle)
145111 return unique (names_allowing_duplicates)
146112end
147113
148- function (:: Type{Handle} )(name:: String )
149- if name in AMBIGUOUS_NAMES
150- return Handle (name, missing )
151- else
152- return Handle (name, first (PKGS_GIVEN_NAME[name]))
153- end
154- end
155-
156114function model_traits_in_registry (info_given_handle)
157115 first_entry = info_given_handle[Handle (" ConstantRegressor" )]
158116 return keys (first_entry) |> collect
0 commit comments