1
1
import sys
2
2
3
+ def start ():
4
+
5
+ lGrid = False
6
+ gridMin = 0.0
7
+ gridMax = 1.0
8
+ gridN = 1
9
+
10
+ import argparse
11
+
12
+ parser = argparse .ArgumentParser (prog = 'generate_floats.py' , usage = ' %(prog)s <xmin> <xmax> <xstep> [options]' , description = '''
13
+ by A.Mereghetti
14
+ with relevant modifications by A. Mereghetti
15
+
16
+ Script for generating numerical series
17
+ ''' )
18
+
19
+ # positional arguments
20
+ parser .add_argument ('xstart' , metavar = 'xstart' , help = 'first value' )
21
+ parser .add_argument ('xstop' , metavar = 'xstop' , help = 'last value' )
22
+ parser .add_argument ('xdelta' , metavar = 'xdelta' , help = 'delta' )
23
+
24
+ # optional arguments
25
+ parser .add_argument ('--skipExtremes' , action = 'store_true' , help = "skip extremes;" )
26
+ parser .add_argument ('--floatBased' , action = 'store_true' , help = "algorithm based on true floats;" )
27
+ parser .add_argument ('--forceIntegers' , action = 'store_true' , help = "possible integers are printed as such;" )
28
+ parser .add_argument ('--removeTrailZeros' , action = 'store_true' , help = "remove (useless) trailing zeros;" )
29
+ parser .add_argument ('--prec' , action = 'store' , type = float , nargs = 1 , help = "precision (true float-based algorithm);" )
30
+ parser .add_argument ('--debug' , action = 'store_true' , help = "print (additional) debug messages;" )
31
+ parser .add_argument ('--invertExtremes' , action = 'store_true' , help = "invert extremes and not step;" )
32
+ parser .add_argument ('--gridMin' , action = 'store' , type = float , nargs = 1 , help = "grid mode - lower extreme of range;" )
33
+ parser .add_argument ('--gridMax' , action = 'store' , type = float , nargs = 1 , help = "grid mode - highest extreme of range;" )
34
+ parser .add_argument ('--gridN' , action = 'store' , type = int , nargs = 1 , help = "grid mode - total number of points in grid;" )
35
+
36
+ args = parser .parse_args ()
37
+
38
+ if args .prec is None :
39
+ prec = 1.0E-15
40
+ else :
41
+ prec = args .prec [0 ]
42
+
43
+ if ( args .gridN is not None ):
44
+ # requesting grid mode implies at least the number of points
45
+ lGrid = True
46
+ gridN = args .gridN [0 ]
47
+ if ( args .gridMin is not None ):
48
+ gridMin = args .gridMin [0 ]
49
+ if ( args .gridMax is not None ):
50
+ gridMax = args .gridMax [0 ]
51
+ elif not ( args .gridMin is None and args .gridMax is None and args .gridN is None ):
52
+ # incomplete grid request
53
+ print 'incomplete grid request - please type in at least number of steps'
54
+ sys .exit ()
55
+
56
+ return args .xstart , args .xstop , args .xdelta , args .skipExtremes , args .floatBased , args .forceIntegers , args .removeTrailZeros , prec , args .debug , args .invertExtremes , lGrid , gridMin , gridMax , gridN
57
+
3
58
# ==============================================================================
4
59
# floating-point based
5
60
# ==============================================================================
@@ -183,7 +238,7 @@ def genIntValues( istart, istop, idelta, ll, sym='.' ):
183
238
output += tmp [:- ll ]+ sym + tmp [- ll :]
184
239
if ( lForceIntegers and output [- ll :]== '' .ljust (ll ,'0' ) ):
185
240
output = output [:len (output )- (ll + 1 )] # skip also the sym
186
- if ( lRemoveTrailingZeros and sym in output ):
241
+ if ( lRemoveTrailZeros and sym in output ):
187
242
while ( output [- 1 ]== '0' ):
188
243
output = output [:- 1 ]
189
244
else :
@@ -200,74 +255,56 @@ def genIntValues( istart, istop, idelta, ll, sym='.' ):
200
255
# ==============================================================================
201
256
202
257
if ( __name__ == "__main__" ):
203
- # some flags
204
- lDebug = False
205
- lInvertExtremes = False
206
258
207
- # terminal-line input parameters
208
- xstart = sys .argv [1 ]
209
- xstop = sys .argv [2 ]
210
- xdelta = sys .argv [3 ]
259
+ # terminal line input paramters
260
+ xstart , xstop , xdelta , lSkipExtremes , lFloatBased , lForceIntegers , lRemoveTrailZeros , prec , lDebug , lInvertExtremes , lGrid , gridMin , gridMax , gridN = start ()
211
261
212
- # skip extremes?
213
- if ( len (sys .argv )> 4 ):
214
- lSkipExtremes = sys .argv [4 ].lower ()== "true"
215
- else :
216
- lSkipExtremes = False
217
-
218
- # float-based or int-based loop?
219
- if ( len (sys .argv )> 5 ):
220
- lIntegerBased = sys .argv [5 ].lower ()== "true"
221
- else :
222
- lIntegerBased = True
223
-
224
- # dump an integer as .0 or as int?
225
- if ( len (sys .argv )> 6 ):
226
- lForceIntegers = sys .argv [6 ].lower ()== "true"
227
- else :
228
- lForceIntegers = False
262
+ if ( lFloatBased ):
229
263
230
- if ( lIntegerBased ):
231
-
232
- # remove trailing zeros
233
- if ( len (sys .argv )> 7 ):
234
- lRemoveTrailingZeros = sys .argv [7 ].lower ()== "true"
264
+ # make them float
265
+ if ( lGrid ):
266
+ gridStep = abs (gridMax - gridMin )/ gridN
267
+ xstart = gridMin + int (xstart )* gridStep
268
+ xstop = gridMin + int (xstop )* gridStep
269
+ xdelta = int (xdelta )* gridStep
235
270
else :
236
- lRemoveTrailingZeros = True
237
-
238
- # acquire values
239
- istart , istop , idelta , ll = extremesInt ( xstart , xstop , xdelta )
271
+ xstart = float ( xstart )
272
+ xstop = float ( xstop )
273
+ xdelta = float ( xdelta )
274
+ prec = float ( prec )
240
275
if (lDebug ):
241
- print 'ints :' , istart , istop , idelta , ll
276
+ print 'floats :' ,xstart , xstop , xdelta , prec
242
277
# sanity checks
243
- istart , istop , idelta = checkInts ( istart , istop , idelta )
278
+ xstart , xstop , xdelta = checkValues ( xstart , xstop , xdelta , prec )
244
279
if (lDebug ):
245
- print 'after sanity checks:' , istart , istop , idelta , ll
280
+ print 'after sanity checks:' ,xstart , xstop , xdelta , prec
246
281
# loop
247
- values = genIntValues ( istart , istop , idelta , ll )
282
+ values = genValues ( xstart , xstop , xdelta , prec )
248
283
for value in values :
249
284
print value
250
285
if (lDebug ):
251
- print 'end loop:' , istart , istop , idelta , ll
286
+ print 'end loop:' ,xstart ,xstop ,xdelta ,prec
287
+
252
288
else :
253
- if ( len (sys .argv )> 7 ):
254
- prec = float (sys .argv [7 ])
255
- else :
256
- prec = 1.0E-15
257
- # make them float, in case
258
- xstart = float (xstart )
259
- xstop = float (xstop )
260
- xdelta = float (xdelta )
261
- prec = float (prec )
289
+
290
+ # acquire values
291
+ if ( lGrid ):
292
+ ll = 15
293
+ tmpFmt = "%." + str (ll )+ "f"
294
+ gridStep = abs (gridMax - gridMin )/ gridN
295
+ xstart = tmpFmt % (gridMin + int (xstart )* gridStep )
296
+ xstop = tmpFmt % (gridMin + int (xstop )* gridStep )
297
+ xdelta = tmpFmt % (int (xdelta )* gridStep )
298
+ istart , istop , idelta , ll = extremesInt ( xstart , xstop , xdelta )
262
299
if (lDebug ):
263
- print 'floats :' ,xstart , xstop , xdelta , prec
300
+ print 'ints :' , istart , istop , idelta , ll
264
301
# sanity checks
265
- xstart , xstop , xdelta = checkValues ( xstart , xstop , xdelta , prec )
302
+ istart , istop , idelta = checkInts ( istart , istop , idelta )
266
303
if (lDebug ):
267
- print 'after sanity checks:' ,xstart , xstop , xdelta , prec
304
+ print 'after sanity checks:' , istart , istop , idelta , ll
268
305
# loop
269
- values = genValues ( xstart , xstop , xdelta , prec )
306
+ values = genIntValues ( istart , istop , idelta , ll )
270
307
for value in values :
271
308
print value
272
309
if (lDebug ):
273
- print 'end loop:' ,xstart , xstop , xdelta , prec
310
+ print 'end loop:' , istart , istop , idelta , ll
0 commit comments