qlang 0.0.27182100 → 0.0.27182110

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2cd845cb653f28d2e83507b793e3c18d4df0c0b5
4
- data.tar.gz: 3318e7abc75c676cbd3e56713202f284e2905b81
3
+ metadata.gz: a48ba3d203a109ed171dbbd38e70c404c24b8018
4
+ data.tar.gz: f461876d32692c407a4333b31909adab2e12917c
5
5
  SHA512:
6
- metadata.gz: 1229fcf0b4fa7f8ef90eda3550d34924c0a137480361aae09cee032c865d536af56d7bc271723e3fb63db13cc22c33db7ebb39a5af4bb78b389f8ab86bb65800
7
- data.tar.gz: 3b9c3ffcd9591895f342f0828e96665538c24c3aa9920ffdb739f9a1388772ae83bc78c75890c9ec272f47e4e1029cf71944f53ca0ca8e2739eaed7bfeebc762
6
+ metadata.gz: 892ff464ca7f8614b6dbff92114998edb7c355016cfc6c9ba653a27024174fb301304d16cc9f339cc98e596d575af66890d7fa2c06df29fed03f267580d27f8d
7
+ data.tar.gz: 973791d37093853d5ed9ac0c2d19d171d5efdd2a4d46874093cad82bb1a93bce7eb047af4b94eb0ab406ca6a39bf4dfa67e018b7deb981ed9fd4242933d8a52a
data/bin/qlang CHANGED
@@ -23,7 +23,7 @@ when '-i'
23
23
  end
24
24
  when '-v'
25
25
  puts Qlang::VERSION
26
- when '-R', '-Ruby'
26
+ when '-r', '-rb', '-py'
27
27
  exec = Qlang::Exec::Compiler.new(ARGV)
28
28
  exec.output!
29
29
  end
@@ -29,6 +29,7 @@ _cached_p_roots.cache = dict()
29
29
 
30
30
 
31
31
  def fixed_quad(func,a,b,args=(),n=5):
32
+ a = array([1, 3, 4])
32
33
 
33
34
  [x,w] = _cached_p_roots(n)
34
35
  x = real(x)
@@ -90,337 +91,3 @@ def tupleset(t, i, value):
90
91
  l = list(t)
91
92
  l[i] = value
92
93
  return tuple(l)
93
-
94
-
95
- def cumtrapz(y, x=None, dx=1.0, axis=-1, initial=None):
96
- y = asarray(y)
97
- if x is None:
98
- d = dx
99
- else:
100
- x = asarray(x)
101
- if x.ndim == 1:
102
- d = diff(x)
103
- # reshape to correct shape
104
- shape = [1] * y.ndim
105
- shape[axis] = -1
106
- d = d.reshape(shape)
107
- elif len(x.shape) != len(y.shape):
108
- raise ValueError("If given, shape of x must be 1-d or the "
109
- "same as y.")
110
- else:
111
- d = diff(x, axis=axis)
112
-
113
- if d.shape[axis] != y.shape[axis] - 1:
114
- raise ValueError("If given, length of x along axis must be the "
115
- "same as y.")
116
-
117
- nd = len(y.shape)
118
- slice1 = tupleset((slice(None),)*nd, axis, slice(1, None))
119
- slice2 = tupleset((slice(None),)*nd, axis, slice(None, -1))
120
- res = add.accumulate(d * (y[slice1] + y[slice2]) / 2.0, axis)
121
-
122
- if initial is not None:
123
- if not np.isscalar(initial):
124
- raise ValueError("`initial` parameter should be a scalar.")
125
-
126
- shape = list(res.shape)
127
- shape[axis] = 1
128
- res = np.concatenate([np.ones(shape, dtype=res.dtype) * initial, res],
129
- axis=axis)
130
-
131
- return res
132
-
133
-
134
- def _basic_simps(y,start,stop,x,dx,axis):
135
- nd = len(y.shape)
136
- if start is None:
137
- start = 0
138
- step = 2
139
- all = (slice(None),)*nd
140
- slice0 = tupleset(all, axis, slice(start, stop, step))
141
- slice1 = tupleset(all, axis, slice(start+1, stop+1, step))
142
- slice2 = tupleset(all, axis, slice(start+2, stop+2, step))
143
-
144
- if x is None: # Even spaced Simpson's rule.
145
- result = add.reduce(dx/3.0 * (y[slice0]+4*y[slice1]+y[slice2]),
146
- axis)
147
- else:
148
- # Account for possibly different spacings.
149
- # Simpson's rule changes a bit.
150
- h = diff(x,axis=axis)
151
- sl0 = tupleset(all, axis, slice(start, stop, step))
152
- sl1 = tupleset(all, axis, slice(start+1, stop+1, step))
153
- h0 = h[sl0]
154
- h1 = h[sl1]
155
- hsum = h0 + h1
156
- hprod = h0 * h1
157
- h0divh1 = h0 / h1
158
- result = add.reduce(hsum/6.0*(y[slice0]*(2-1.0/h0divh1) +
159
- y[slice1]*hsum*hsum/hprod +
160
- y[slice2]*(2-h0divh1)),axis)
161
- return result
162
-
163
-
164
- def simps(y, x=None, dx=1, axis=-1, even='avg'):
165
-
166
- y = asarray(y)
167
- nd = len(y.shape)
168
- N = y.shape[axis]
169
- last_dx = dx
170
- first_dx = dx
171
- returnshape = 0
172
- if x is not None:
173
- x = asarray(x)
174
- if len(x.shape) == 1:
175
- shapex = ones(nd)
176
- shapex[axis] = x.shape[0]
177
- saveshape = x.shape
178
- returnshape = 1
179
- x = x.reshape(tuple(shapex))
180
- elif len(x.shape) != len(y.shape):
181
- raise ValueError("If given, shape of x must be 1-d or the "
182
- "same as y.")
183
- if x.shape[axis] != N:
184
- raise ValueError("If given, length of x along axis must be the "
185
- "same as y.")
186
- if N % 2 == 0:
187
- val = 0.0
188
- result = 0.0
189
- slice1 = (slice(None),)*nd
190
- slice2 = (slice(None),)*nd
191
- if even not in ['avg', 'last', 'first']:
192
- raise ValueError("Parameter 'even' must be 'avg', 'last', or 'first'.")
193
- # Compute using Simpson's rule on first intervals
194
- if even in ['avg', 'first']:
195
- slice1 = tupleset(slice1, axis, -1)
196
- slice2 = tupleset(slice2, axis, -2)
197
- if x is not None:
198
- last_dx = x[slice1] - x[slice2]
199
- val += 0.5*last_dx*(y[slice1]+y[slice2])
200
- result = _basic_simps(y,0,N-3,x,dx,axis)
201
- # Compute using Simpson's rule on last set of intervals
202
- if even in ['avg', 'last']:
203
- slice1 = tupleset(slice1, axis, 0)
204
- slice2 = tupleset(slice2, axis, 1)
205
- if x is not None:
206
- first_dx = x[tuple(slice2)] - x[tuple(slice1)]
207
- val += 0.5*first_dx*(y[slice2]+y[slice1])
208
- result += _basic_simps(y,1,N-2,x,dx,axis)
209
- if even == 'avg':
210
- val /= 2.0
211
- result /= 2.0
212
- result = result + val
213
- else:
214
- result = _basic_simps(y,0,N-2,x,dx,axis)
215
- if returnshape:
216
- x = x.reshape(saveshape)
217
- return result
218
-
219
-
220
- def romb(y, dx=1.0, axis=-1, show=False):
221
-
222
- y = asarray(y)
223
- nd = len(y.shape)
224
- Nsamps = y.shape[axis]
225
- Ninterv = Nsamps-1
226
- n = 1
227
- k = 0
228
- while n < Ninterv:
229
- n <<= 1
230
- k += 1
231
- if n != Ninterv:
232
- raise ValueError("Number of samples must be one plus a "
233
- "non-negative power of 2.")
234
-
235
- R = {}
236
- all = (slice(None),) * nd
237
- slice0 = tupleset(all, axis, 0)
238
- slicem1 = tupleset(all, axis, -1)
239
- h = Ninterv*asarray(dx)*1.0
240
- R[(0,0)] = (y[slice0] + y[slicem1])/2.0*h
241
- slice_R = all
242
- start = stop = step = Ninterv
243
- for i in range(1,k+1):
244
- start >>= 1
245
- slice_R = tupleset(slice_R, axis, slice(start,stop,step))
246
- step >>= 1
247
- R[(i,0)] = 0.5*(R[(i-1,0)] + h*add.reduce(y[slice_R],axis))
248
- for j in range(1,i+1):
249
- R[(i,j)] = R[(i,j-1)] + \
250
- (R[(i,j-1)]-R[(i-1,j-1)]) / ((1 << (2*j))-1)
251
- h = h / 2.0
252
-
253
- if show:
254
- if not isscalar(R[(0,0)]):
255
- print("*** Printing table only supported for integrals" +
256
- " of a single data set.")
257
- else:
258
- try:
259
- precis = show[0]
260
- except (TypeError, IndexError):
261
- precis = 5
262
- try:
263
- width = show[1]
264
- except (TypeError, IndexError):
265
- width = 8
266
- formstr = "%" + str(width) + '.' + str(precis)+'f'
267
-
268
- print("\n Richardson Extrapolation Table for Romberg Integration ")
269
- print("====================================================================")
270
- for i in range(0,k+1):
271
- for j in range(0,i+1):
272
- print(formstr % R[(i,j)], end=' ')
273
- print()
274
- print("====================================================================\n")
275
-
276
- return R[(k,k)]
277
-
278
-
279
- def _difftrap(function, interval, numtraps):
280
- if numtraps <= 0:
281
- raise ValueError("numtraps must be > 0 in difftrap().")
282
- elif numtraps == 1:
283
- return 0.5*(function(interval[0])+function(interval[1]))
284
- else:
285
- numtosum = numtraps/2
286
- h = float(interval[1]-interval[0])/numtosum
287
- lox = interval[0] + 0.5 * h
288
- points = lox + h * arange(0, numtosum)
289
- s = sum(function(points),0)
290
- return s
291
-
292
-
293
- def _romberg_diff(b, c, k):
294
-
295
- tmp = 4.0**k
296
- return (tmp * c - b)/(tmp - 1.0)
297
-
298
-
299
- def _printresmat(function, interval, resmat):
300
- # Print the Romberg result matrix.
301
- i = j = 0
302
- print('Romberg integration of', repr(function), end=' ')
303
- print('from', interval)
304
- print('')
305
- print('%6s %9s %9s' % ('Steps', 'StepSize', 'Results'))
306
- for i in range(len(resmat)):
307
- print('%6d %9f' % (2**i, (interval[1]-interval[0])/(2.**i)), end=' ')
308
- for j in range(i+1):
309
- print('%9f' % (resmat[i][j]), end=' ')
310
- print('')
311
- print('')
312
- print('The final result is', resmat[i][j], end=' ')
313
- print('after', 2**(len(resmat)-1)+1, 'function evaluations.')
314
-
315
-
316
- def romberg(function, a, b, args=(), tol=1.48e-8, rtol=1.48e-8, show=False,
317
- divmax=10, vec_func=False):
318
- if isinf(a) or isinf(b):
319
- raise ValueError("Romberg integration only available for finite limits.")
320
- vfunc = vectorize1(function, args, vec_func=vec_func)
321
- n = 1
322
- interval = [a,b]
323
- intrange = b-a
324
- ordsum = _difftrap(vfunc, interval, n)
325
- result = intrange * ordsum
326
- resmat = [[result]]
327
- err = np.inf
328
- for i in xrange(1, divmax+1):
329
- n = n * 2
330
- ordsum = ordsum + _difftrap(vfunc, interval, n)
331
- resmat.append([])
332
- resmat[i].append(intrange * ordsum / n)
333
- for k in range(i):
334
- resmat[i].append(_romberg_diff(resmat[i-1][k], resmat[i][k], k+1))
335
- result = resmat[i][i]
336
- lastresult = resmat[i-1][i-1]
337
-
338
- err = abs(result - lastresult)
339
- if err < tol or err < rtol*abs(result):
340
- break
341
- else:
342
- warnings.warn(
343
- "divmax (%d) exceeded. Latest difference = %e" % (divmax, err),
344
- AccuracyWarning)
345
-
346
- if show:
347
- _printresmat(vfunc, interval, resmat)
348
- return result
349
-
350
- _builtincoeffs = {
351
- 1:(1,2,[1,1],-1,12),
352
- 2:(1,3,[1,4,1],-1,90),
353
- 3:(3,8,[1,3,3,1],-3,80),
354
- 4:(2,45,[7,32,12,32,7],-8,945),
355
- 5:(5,288,[19,75,50,50,75,19],-275,12096),
356
- 6:(1,140,[41,216,27,272,27,216,41],-9,1400),
357
- 7:(7,17280,[751,3577,1323,2989,2989,1323,3577,751],-8183,518400),
358
- 8:(4,14175,[989,5888,-928,10496,-4540,10496,-928,5888,989],
359
- -2368,467775),
360
- 9:(9,89600,[2857,15741,1080,19344,5778,5778,19344,1080,
361
- 15741,2857], -4671, 394240),
362
- 10:(5,299376,[16067,106300,-48525,272400,-260550,427368,
363
- -260550,272400,-48525,106300,16067],
364
- -673175, 163459296),
365
- 11:(11,87091200,[2171465,13486539,-3237113, 25226685,-9595542,
366
- 15493566,15493566,-9595542,25226685,-3237113,
367
- 13486539,2171465], -2224234463, 237758976000),
368
- 12:(1, 5255250, [1364651,9903168,-7587864,35725120,-51491295,
369
- 87516288,-87797136,87516288,-51491295,35725120,
370
- -7587864,9903168,1364651], -3012, 875875),
371
- 13:(13, 402361344000,[8181904909, 56280729661, -31268252574,
372
- 156074417954,-151659573325,206683437987,
373
- -43111992612,-43111992612,206683437987,
374
- -151659573325,156074417954,-31268252574,
375
- 56280729661,8181904909], -2639651053,
376
- 344881152000),
377
- 14:(7, 2501928000, [90241897,710986864,-770720657,3501442784,
378
- -6625093363,12630121616,-16802270373,19534438464,
379
- -16802270373,12630121616,-6625093363,3501442784,
380
- -770720657,710986864,90241897], -3740727473,
381
- 1275983280000)
382
- }
383
-
384
-
385
- def newton_cotes(rn, equal=0):
386
- try:
387
- N = len(rn)-1
388
- if equal:
389
- rn = np.arange(N+1)
390
- elif np.all(np.diff(rn) == 1):
391
- equal = 1
392
- except:
393
- N = rn
394
- rn = np.arange(N+1)
395
- equal = 1
396
-
397
- if equal and N in _builtincoeffs:
398
- na, da, vi, nb, db = _builtincoeffs[N]
399
- return na*np.array(vi,float)/da, float(nb)/db
400
-
401
- if (rn[0] != 0) or (rn[-1] != N):
402
- raise ValueError("The sample positions must start at 0"
403
- " and end at N")
404
- yi = rn / float(N)
405
- ti = 2.0*yi - 1
406
- nvec = np.arange(0,N+1)
407
- C = ti**nvec[:,np.newaxis]
408
- Cinv = np.linalg.inv(C)
409
- # improve precision of result
410
- for i in range(2):
411
- Cinv = 2*Cinv - Cinv.dot(C).dot(Cinv)
412
- vec = 2.0 / (nvec[::2]+1)
413
- ai = np.dot(Cinv[:,::2],vec) * N/2
414
-
415
- if (N % 2 == 0) and equal:
416
- BN = N/(N+3.)
417
- power = N+2
418
- else:
419
- BN = N/(N+2.)
420
- power = N+1
421
-
422
- BN = BN - np.dot(yi**power, ai)
423
- p1 = power+1
424
- fac = power*math.log(N) - gammaln(p1)
425
- fac = math.exp(fac)
426
- return ai, BN*fac
@@ -29,6 +29,9 @@ _cached_p_roots.cache = dict()
29
29
 
30
30
 
31
31
  def fixed_quad(func,a,b,args=(),n=5):
32
+ I love mathematics.
33
+ a = (1 3 4)
34
+ Q.E.D
32
35
 
33
36
  [x,w] = _cached_p_roots(n)
34
37
  x = real(x)
@@ -90,337 +93,3 @@ def tupleset(t, i, value):
90
93
  l = list(t)
91
94
  l[i] = value
92
95
  return tuple(l)
93
-
94
-
95
- def cumtrapz(y, x=None, dx=1.0, axis=-1, initial=None):
96
- y = asarray(y)
97
- if x is None:
98
- d = dx
99
- else:
100
- x = asarray(x)
101
- if x.ndim == 1:
102
- d = diff(x)
103
- # reshape to correct shape
104
- shape = [1] * y.ndim
105
- shape[axis] = -1
106
- d = d.reshape(shape)
107
- elif len(x.shape) != len(y.shape):
108
- raise ValueError("If given, shape of x must be 1-d or the "
109
- "same as y.")
110
- else:
111
- d = diff(x, axis=axis)
112
-
113
- if d.shape[axis] != y.shape[axis] - 1:
114
- raise ValueError("If given, length of x along axis must be the "
115
- "same as y.")
116
-
117
- nd = len(y.shape)
118
- slice1 = tupleset((slice(None),)*nd, axis, slice(1, None))
119
- slice2 = tupleset((slice(None),)*nd, axis, slice(None, -1))
120
- res = add.accumulate(d * (y[slice1] + y[slice2]) / 2.0, axis)
121
-
122
- if initial is not None:
123
- if not np.isscalar(initial):
124
- raise ValueError("`initial` parameter should be a scalar.")
125
-
126
- shape = list(res.shape)
127
- shape[axis] = 1
128
- res = np.concatenate([np.ones(shape, dtype=res.dtype) * initial, res],
129
- axis=axis)
130
-
131
- return res
132
-
133
-
134
- def _basic_simps(y,start,stop,x,dx,axis):
135
- nd = len(y.shape)
136
- if start is None:
137
- start = 0
138
- step = 2
139
- all = (slice(None),)*nd
140
- slice0 = tupleset(all, axis, slice(start, stop, step))
141
- slice1 = tupleset(all, axis, slice(start+1, stop+1, step))
142
- slice2 = tupleset(all, axis, slice(start+2, stop+2, step))
143
-
144
- if x is None: # Even spaced Simpson's rule.
145
- result = add.reduce(dx/3.0 * (y[slice0]+4*y[slice1]+y[slice2]),
146
- axis)
147
- else:
148
- # Account for possibly different spacings.
149
- # Simpson's rule changes a bit.
150
- h = diff(x,axis=axis)
151
- sl0 = tupleset(all, axis, slice(start, stop, step))
152
- sl1 = tupleset(all, axis, slice(start+1, stop+1, step))
153
- h0 = h[sl0]
154
- h1 = h[sl1]
155
- hsum = h0 + h1
156
- hprod = h0 * h1
157
- h0divh1 = h0 / h1
158
- result = add.reduce(hsum/6.0*(y[slice0]*(2-1.0/h0divh1) +
159
- y[slice1]*hsum*hsum/hprod +
160
- y[slice2]*(2-h0divh1)),axis)
161
- return result
162
-
163
-
164
- def simps(y, x=None, dx=1, axis=-1, even='avg'):
165
-
166
- y = asarray(y)
167
- nd = len(y.shape)
168
- N = y.shape[axis]
169
- last_dx = dx
170
- first_dx = dx
171
- returnshape = 0
172
- if x is not None:
173
- x = asarray(x)
174
- if len(x.shape) == 1:
175
- shapex = ones(nd)
176
- shapex[axis] = x.shape[0]
177
- saveshape = x.shape
178
- returnshape = 1
179
- x = x.reshape(tuple(shapex))
180
- elif len(x.shape) != len(y.shape):
181
- raise ValueError("If given, shape of x must be 1-d or the "
182
- "same as y.")
183
- if x.shape[axis] != N:
184
- raise ValueError("If given, length of x along axis must be the "
185
- "same as y.")
186
- if N % 2 == 0:
187
- val = 0.0
188
- result = 0.0
189
- slice1 = (slice(None),)*nd
190
- slice2 = (slice(None),)*nd
191
- if even not in ['avg', 'last', 'first']:
192
- raise ValueError("Parameter 'even' must be 'avg', 'last', or 'first'.")
193
- # Compute using Simpson's rule on first intervals
194
- if even in ['avg', 'first']:
195
- slice1 = tupleset(slice1, axis, -1)
196
- slice2 = tupleset(slice2, axis, -2)
197
- if x is not None:
198
- last_dx = x[slice1] - x[slice2]
199
- val += 0.5*last_dx*(y[slice1]+y[slice2])
200
- result = _basic_simps(y,0,N-3,x,dx,axis)
201
- # Compute using Simpson's rule on last set of intervals
202
- if even in ['avg', 'last']:
203
- slice1 = tupleset(slice1, axis, 0)
204
- slice2 = tupleset(slice2, axis, 1)
205
- if x is not None:
206
- first_dx = x[tuple(slice2)] - x[tuple(slice1)]
207
- val += 0.5*first_dx*(y[slice2]+y[slice1])
208
- result += _basic_simps(y,1,N-2,x,dx,axis)
209
- if even == 'avg':
210
- val /= 2.0
211
- result /= 2.0
212
- result = result + val
213
- else:
214
- result = _basic_simps(y,0,N-2,x,dx,axis)
215
- if returnshape:
216
- x = x.reshape(saveshape)
217
- return result
218
-
219
-
220
- def romb(y, dx=1.0, axis=-1, show=False):
221
-
222
- y = asarray(y)
223
- nd = len(y.shape)
224
- Nsamps = y.shape[axis]
225
- Ninterv = Nsamps-1
226
- n = 1
227
- k = 0
228
- while n < Ninterv:
229
- n <<= 1
230
- k += 1
231
- if n != Ninterv:
232
- raise ValueError("Number of samples must be one plus a "
233
- "non-negative power of 2.")
234
-
235
- R = {}
236
- all = (slice(None),) * nd
237
- slice0 = tupleset(all, axis, 0)
238
- slicem1 = tupleset(all, axis, -1)
239
- h = Ninterv*asarray(dx)*1.0
240
- R[(0,0)] = (y[slice0] + y[slicem1])/2.0*h
241
- slice_R = all
242
- start = stop = step = Ninterv
243
- for i in range(1,k+1):
244
- start >>= 1
245
- slice_R = tupleset(slice_R, axis, slice(start,stop,step))
246
- step >>= 1
247
- R[(i,0)] = 0.5*(R[(i-1,0)] + h*add.reduce(y[slice_R],axis))
248
- for j in range(1,i+1):
249
- R[(i,j)] = R[(i,j-1)] + \
250
- (R[(i,j-1)]-R[(i-1,j-1)]) / ((1 << (2*j))-1)
251
- h = h / 2.0
252
-
253
- if show:
254
- if not isscalar(R[(0,0)]):
255
- print("*** Printing table only supported for integrals" +
256
- " of a single data set.")
257
- else:
258
- try:
259
- precis = show[0]
260
- except (TypeError, IndexError):
261
- precis = 5
262
- try:
263
- width = show[1]
264
- except (TypeError, IndexError):
265
- width = 8
266
- formstr = "%" + str(width) + '.' + str(precis)+'f'
267
-
268
- print("\n Richardson Extrapolation Table for Romberg Integration ")
269
- print("====================================================================")
270
- for i in range(0,k+1):
271
- for j in range(0,i+1):
272
- print(formstr % R[(i,j)], end=' ')
273
- print()
274
- print("====================================================================\n")
275
-
276
- return R[(k,k)]
277
-
278
-
279
- def _difftrap(function, interval, numtraps):
280
- if numtraps <= 0:
281
- raise ValueError("numtraps must be > 0 in difftrap().")
282
- elif numtraps == 1:
283
- return 0.5*(function(interval[0])+function(interval[1]))
284
- else:
285
- numtosum = numtraps/2
286
- h = float(interval[1]-interval[0])/numtosum
287
- lox = interval[0] + 0.5 * h
288
- points = lox + h * arange(0, numtosum)
289
- s = sum(function(points),0)
290
- return s
291
-
292
-
293
- def _romberg_diff(b, c, k):
294
-
295
- tmp = 4.0**k
296
- return (tmp * c - b)/(tmp - 1.0)
297
-
298
-
299
- def _printresmat(function, interval, resmat):
300
- # Print the Romberg result matrix.
301
- i = j = 0
302
- print('Romberg integration of', repr(function), end=' ')
303
- print('from', interval)
304
- print('')
305
- print('%6s %9s %9s' % ('Steps', 'StepSize', 'Results'))
306
- for i in range(len(resmat)):
307
- print('%6d %9f' % (2**i, (interval[1]-interval[0])/(2.**i)), end=' ')
308
- for j in range(i+1):
309
- print('%9f' % (resmat[i][j]), end=' ')
310
- print('')
311
- print('')
312
- print('The final result is', resmat[i][j], end=' ')
313
- print('after', 2**(len(resmat)-1)+1, 'function evaluations.')
314
-
315
-
316
- def romberg(function, a, b, args=(), tol=1.48e-8, rtol=1.48e-8, show=False,
317
- divmax=10, vec_func=False):
318
- if isinf(a) or isinf(b):
319
- raise ValueError("Romberg integration only available for finite limits.")
320
- vfunc = vectorize1(function, args, vec_func=vec_func)
321
- n = 1
322
- interval = [a,b]
323
- intrange = b-a
324
- ordsum = _difftrap(vfunc, interval, n)
325
- result = intrange * ordsum
326
- resmat = [[result]]
327
- err = np.inf
328
- for i in xrange(1, divmax+1):
329
- n = n * 2
330
- ordsum = ordsum + _difftrap(vfunc, interval, n)
331
- resmat.append([])
332
- resmat[i].append(intrange * ordsum / n)
333
- for k in range(i):
334
- resmat[i].append(_romberg_diff(resmat[i-1][k], resmat[i][k], k+1))
335
- result = resmat[i][i]
336
- lastresult = resmat[i-1][i-1]
337
-
338
- err = abs(result - lastresult)
339
- if err < tol or err < rtol*abs(result):
340
- break
341
- else:
342
- warnings.warn(
343
- "divmax (%d) exceeded. Latest difference = %e" % (divmax, err),
344
- AccuracyWarning)
345
-
346
- if show:
347
- _printresmat(vfunc, interval, resmat)
348
- return result
349
-
350
- _builtincoeffs = {
351
- 1:(1,2,[1,1],-1,12),
352
- 2:(1,3,[1,4,1],-1,90),
353
- 3:(3,8,[1,3,3,1],-3,80),
354
- 4:(2,45,[7,32,12,32,7],-8,945),
355
- 5:(5,288,[19,75,50,50,75,19],-275,12096),
356
- 6:(1,140,[41,216,27,272,27,216,41],-9,1400),
357
- 7:(7,17280,[751,3577,1323,2989,2989,1323,3577,751],-8183,518400),
358
- 8:(4,14175,[989,5888,-928,10496,-4540,10496,-928,5888,989],
359
- -2368,467775),
360
- 9:(9,89600,[2857,15741,1080,19344,5778,5778,19344,1080,
361
- 15741,2857], -4671, 394240),
362
- 10:(5,299376,[16067,106300,-48525,272400,-260550,427368,
363
- -260550,272400,-48525,106300,16067],
364
- -673175, 163459296),
365
- 11:(11,87091200,[2171465,13486539,-3237113, 25226685,-9595542,
366
- 15493566,15493566,-9595542,25226685,-3237113,
367
- 13486539,2171465], -2224234463, 237758976000),
368
- 12:(1, 5255250, [1364651,9903168,-7587864,35725120,-51491295,
369
- 87516288,-87797136,87516288,-51491295,35725120,
370
- -7587864,9903168,1364651], -3012, 875875),
371
- 13:(13, 402361344000,[8181904909, 56280729661, -31268252574,
372
- 156074417954,-151659573325,206683437987,
373
- -43111992612,-43111992612,206683437987,
374
- -151659573325,156074417954,-31268252574,
375
- 56280729661,8181904909], -2639651053,
376
- 344881152000),
377
- 14:(7, 2501928000, [90241897,710986864,-770720657,3501442784,
378
- -6625093363,12630121616,-16802270373,19534438464,
379
- -16802270373,12630121616,-6625093363,3501442784,
380
- -770720657,710986864,90241897], -3740727473,
381
- 1275983280000)
382
- }
383
-
384
-
385
- def newton_cotes(rn, equal=0):
386
- try:
387
- N = len(rn)-1
388
- if equal:
389
- rn = np.arange(N+1)
390
- elif np.all(np.diff(rn) == 1):
391
- equal = 1
392
- except:
393
- N = rn
394
- rn = np.arange(N+1)
395
- equal = 1
396
-
397
- if equal and N in _builtincoeffs:
398
- na, da, vi, nb, db = _builtincoeffs[N]
399
- return na*np.array(vi,float)/da, float(nb)/db
400
-
401
- if (rn[0] != 0) or (rn[-1] != N):
402
- raise ValueError("The sample positions must start at 0"
403
- " and end at N")
404
- yi = rn / float(N)
405
- ti = 2.0*yi - 1
406
- nvec = np.arange(0,N+1)
407
- C = ti**nvec[:,np.newaxis]
408
- Cinv = np.linalg.inv(C)
409
- # improve precision of result
410
- for i in range(2):
411
- Cinv = 2*Cinv - Cinv.dot(C).dot(Cinv)
412
- vec = 2.0 / (nvec[::2]+1)
413
- ai = np.dot(Cinv[:,::2],vec) * N/2
414
-
415
- if (N % 2 == 0) and equal:
416
- BN = N/(N+3.)
417
- power = N+2
418
- else:
419
- BN = N/(N+2.)
420
- power = N+1
421
-
422
- BN = BN - np.dot(yi**power, ai)
423
- p1 = power+1
424
- fac = power*math.log(N) - gammaln(p1)
425
- fac = math.exp(fac)
426
- return ai, BN*fac
@@ -25,10 +25,12 @@ module Qlang
25
25
 
26
26
  def ch_compile_type(lang)
27
27
  case lang
28
- when '-Ruby'
28
+ when '-rb'
29
29
  Qlang.to_ruby
30
- when '-R'
30
+ when '-r'
31
31
  Qlang.to_r
32
+ when '-py'
33
+ Qlang.to_python
32
34
  else
33
35
  print 'Q support only Ruby and R now.'
34
36
  end
@@ -1,3 +1,3 @@
1
1
  module Qlang
2
- VERSION = "0.0.27182100"
2
+ VERSION = "0.0.27182110"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qlang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.27182100
4
+ version: 0.0.27182110
5
5
  platform: ruby
6
6
  authors:
7
7
  - gogotanaka