@@ -41,6 +41,35 @@ def _domain(self): # used in test
4141 return str
4242
4343
44+ class IntEtc (OptionDescriptor ):
45+ def __init__ (self , name , * , etc = {}):
46+ self .name = name
47+ self .default = etc
48+
49+ def __set__ (self , instance , value ):
50+ if instance is None :
51+ raise AttributeError (self .name )
52+ elif value in {None , * self .default } or isinstance (value , int ):
53+ setattr (instance , self .dataname , value )
54+ else :
55+ if self .default :
56+ part = " or " + " " .join (map (str , self .default ))
57+ else :
58+ part = ""
59+ raise ValueError (
60+ f"Option { self .name } only accepts integers{ part } . Got: { value } "
61+ )
62+
63+ def _domain (self ):
64+ return {int , * self .default }
65+
66+ def cli_argument_spec (self ):
67+ return dict (
68+ super (IntEtc , self ).cli_argument_spec (),
69+ choices = list (self .default ) + ["1" , "2" , "3" , "..." ],
70+ )
71+
72+
4473class Choices (OptionDescriptor ):
4574 def __init__ (self , name , choicemap , default = None ):
4675 self .name = name
@@ -110,6 +139,12 @@ def yes_no_etc(*etc):
110139
111140warn_overwrite: {True, False, 'yes', 'no'}
112141 Enable or disable method overwrite warnings.
142+
143+ min_optlevel: {0, 1, 2, 3}
144+ Lower bound on the optimization level.
145+
146+ threads: {int, 'auto'}
147+ How many threads to use.
113148"""
114149
115150
@@ -134,9 +169,11 @@ class JuliaOptions(object):
134169 compile = Choices ("compile" , yes_no_etc ("all" , "min" ))
135170 depwarn = Choices ("depwarn" , yes_no_etc ("error" ))
136171 warn_overwrite = Choices ("warn_overwrite" , yes_no_etc ())
172+ min_optlevel = Choices ("min_optlevel" , dict (zip (range (4 ), map (str , range (4 )))))
137173 optimize = Choices ("optimize" , dict (zip (range (4 ), map (str , range (4 )))))
138174 inline = Choices ("inline" , yes_no_etc ())
139175 check_bounds = Choices ("check_bounds" , yes_no_etc ())
176+ threads = IntEtc ("threads" , etc = {"auto" })
140177
141178 def __init__ (self , ** kwargs ):
142179 unsupported = []
@@ -168,8 +205,12 @@ def specified(self):
168205 def as_args (self ):
169206 args = []
170207 for (desc , value ) in self .specified ():
171- args .append (desc .cli_argument_name ())
172- args .append (value )
208+ if value is None :
209+ ...
210+ elif len (desc .cli_argument_name ()) == 1 :
211+ args .append (desc .cli_argument_name () + str (value ))
212+ else :
213+ args .append (desc .cli_argument_name () + "=" + str (value ))
173214 return args
174215
175216 @classmethod
0 commit comments