@@ -41,6 +41,35 @@ def _domain(self): # used in test
41
41
return str
42
42
43
43
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
+
44
73
class Choices (OptionDescriptor ):
45
74
def __init__ (self , name , choicemap , default = None ):
46
75
self .name = name
@@ -110,6 +139,12 @@ def yes_no_etc(*etc):
110
139
111
140
warn_overwrite: {True, False, 'yes', 'no'}
112
141
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.
113
148
"""
114
149
115
150
@@ -134,9 +169,11 @@ class JuliaOptions(object):
134
169
compile = Choices ("compile" , yes_no_etc ("all" , "min" ))
135
170
depwarn = Choices ("depwarn" , yes_no_etc ("error" ))
136
171
warn_overwrite = Choices ("warn_overwrite" , yes_no_etc ())
172
+ min_optlevel = Choices ("min_optlevel" , dict (zip (range (4 ), map (str , range (4 )))))
137
173
optimize = Choices ("optimize" , dict (zip (range (4 ), map (str , range (4 )))))
138
174
inline = Choices ("inline" , yes_no_etc ())
139
175
check_bounds = Choices ("check_bounds" , yes_no_etc ())
176
+ threads = IntEtc ("threads" , etc = {"auto" })
140
177
141
178
def __init__ (self , ** kwargs ):
142
179
unsupported = []
@@ -168,8 +205,12 @@ def specified(self):
168
205
def as_args (self ):
169
206
args = []
170
207
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 ))
173
214
return args
174
215
175
216
@classmethod
0 commit comments