Skip to content

Commit 365f219

Browse files
committed
added John's nifty usedoc decorator to all the methods. Right now it just
passes through the numpy docs, will continue to add information specific to Quantities a little at a time.
1 parent 7dfcfb9 commit 365f219

File tree

5 files changed

+94
-15
lines changed

5 files changed

+94
-15
lines changed

.eric4project/quantities.e4q

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE UserProject SYSTEM "UserProject-4.0.dtd">
33
<!-- eric4 user project file for project quantities -->
4-
<!-- Saved: 2009-02-01, 18:38:20 -->
4+
<!-- Saved: 2009-02-01, 19:22:24 -->
55
<!-- Copyright (C) 2009 , -->
66
<UserProject version="4.0">
77
</UserProject>

.eric4project/quantities.e4t

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<!DOCTYPE Tasks SYSTEM "Tasks-4.2.dtd">
33
<!-- eric4 tasks file for project quantities -->
4-
<!-- Saved: 2009-02-01, 18:38:20 -->
4+
<!-- Saved: 2009-02-01, 19:22:24 -->
55
<Tasks version="4.2">
66
<Task priority="1" completed="False" bugfix="False">
77
<Summary>TODO: move to constants</Summary>
@@ -42,28 +42,28 @@
4242
<Task priority="1" completed="False" bugfix="False">
4343
<Summary>TODO: what is an appropriate value?</Summary>
4444
<Description></Description>
45-
<Created>2009-01-23, 06:40:01</Created>
45+
<Created>2009-02-01, 19:15:13</Created>
4646
<Resource>
47-
<Filename>quantities/uncertainquantity.py</Filename>
48-
<Linenumber>14</Linenumber>
47+
<Filename>quantities/quantity.py</Filename>
48+
<Linenumber>63</Linenumber>
4949
</Resource>
5050
</Task>
5151
<Task priority="1" completed="False" bugfix="False">
52-
<Summary>TODO: what is an appropriate value?</Summary>
52+
<Summary>TODO: do we want this kind of magic?</Summary>
5353
<Description></Description>
54-
<Created>2009-02-01, 18:36:09</Created>
54+
<Created>2009-02-01, 19:15:14</Created>
5555
<Resource>
5656
<Filename>quantities/quantity.py</Filename>
57-
<Linenumber>63</Linenumber>
57+
<Linenumber>417</Linenumber>
5858
</Resource>
5959
</Task>
6060
<Task priority="1" completed="False" bugfix="False">
61-
<Summary>TODO: do we want this kind of magic?</Summary>
61+
<Summary>TODO: what is an appropriate value?</Summary>
6262
<Description></Description>
63-
<Created>2009-02-01, 18:36:09</Created>
63+
<Created>2009-02-01, 19:18:23</Created>
6464
<Resource>
65-
<Filename>quantities/quantity.py</Filename>
66-
<Linenumber>396</Linenumber>
65+
<Filename>quantities/uncertainquantity.py</Filename>
66+
<Linenumber>15</Linenumber>
6767
</Resource>
6868
</Task>
6969
</Tasks>

quantities/quantity.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,16 +224,19 @@ def __add__(self, other):
224224
ret._dimensionality = dims
225225
return ret
226226

227+
@usedoc(numpy.ndarray.__iadd__)
227228
def __iadd__(self, other):
228229
if not isinstance(other, Quantity):
229230
other = Quantity(other, copy=False)
230231

231232
self._dimensionality += other.dimensionality
232233
return super(Quantity, self).__iadd__(other)
233234

235+
@usedoc(numpy.ndarray.__radd__)
234236
def __radd__(self, other):
235237
return self.__add__(other)
236238

239+
@usedoc(numpy.ndarray.__sub__)
237240
def __sub__(self, other):
238241
if not isinstance(other, Quantity):
239242
other = numpy.asarray(other).view(Quantity)
@@ -243,13 +246,15 @@ def __sub__(self, other):
243246
ret._dimensionality = dims
244247
return ret
245248

249+
@usedoc(numpy.ndarray.__isub__)
246250
def __isub__(self, other):
247251
if not isinstance(other, Quantity):
248252
other = numpy.asarray(other).view(Quantity)
249253

250254
self._dimensionality -= other.dimensionality
251255
return super(Quantity, self).__isub__(other)
252256

257+
@usedoc(numpy.ndarray.__rsub__)
253258
def __rsub__(self, other):
254259
if not isinstance(other, Quantity):
255260
other = numpy.asarray(other).view(Quantity)
@@ -259,6 +264,7 @@ def __rsub__(self, other):
259264
ret._dimensionality = dims
260265
return ret
261266

267+
@usedoc(numpy.ndarray.__mul__)
262268
def __mul__(self, other):
263269
try:
264270
dims = self.dimensionality * other.dimensionality
@@ -270,6 +276,7 @@ def __mul__(self, other):
270276
ret._dimensionality = dims
271277
return ret
272278

279+
@usedoc(numpy.ndarray.__imul__)
273280
def __imul__(self, other):
274281
if getattr(other, 'dimensionality', None):
275282
try:
@@ -284,9 +291,11 @@ def __imul__(self, other):
284291

285292
return super(Quantity, self).__imul__(other)
286293

294+
@usedoc(numpy.ndarray.__rmul__)
287295
def __rmul__(self, other):
288296
return self.__mul__(other)
289297

298+
@usedoc(numpy.ndarray.__truediv__)
290299
def __truediv__(self, other):
291300
try:
292301
dims = self.dimensionality / other.dimensionality
@@ -298,9 +307,11 @@ def __truediv__(self, other):
298307
ret._dimensionality = dims
299308
return ret
300309

310+
@usedoc(numpy.ndarray.__div__)
301311
def __div__(self, other):
302312
return self.__truediv__(other)
303313

314+
@usedoc(numpy.ndarray.__itruediv__)
304315
def __itruediv__(self, other):
305316
if getattr(other, 'dimensionality', None):
306317
try:
@@ -315,9 +326,11 @@ def __itruediv__(self, other):
315326

316327
return super(Quantity, self).__itruediv__(other)
317328

329+
@usedoc(numpy.ndarray.__idiv__)
318330
def __idiv__(self, other):
319331
return self.__itruediv__(other)
320332

333+
@usedoc(numpy.ndarray.__rtruediv__)
321334
def __rtruediv__(self, other):
322335
try:
323336
dims = other.dimensionality / self.dimensionality
@@ -329,9 +342,11 @@ def __rtruediv__(self, other):
329342
ret._dimensionality = dims
330343
return ret
331344

345+
@usedoc(numpy.ndarray.__rdiv__)
332346
def __rdiv__(self, other):
333347
return self.__rtruediv__(other)
334348

349+
@usedoc(numpy.ndarray.__pow__)
335350
def __pow__(self, other):
336351
if getattr(other, 'dimensionality', None):
337352
raise ValueError("exponent must be dimensionless")
@@ -347,6 +362,7 @@ def __pow__(self, other):
347362
ret._dimensionality = dims
348363
return ret
349364

365+
@usedoc(numpy.ndarray.__ipow__)
350366
def __ipow__(self, other):
351367
if getattr(other, 'dimensionality', None):
352368
try:
@@ -366,62 +382,74 @@ def __ipow__(self, other):
366382
self._dimensionality **= other.min()
367383
return super(Quantity, self).__ipow__(other)
368384

385+
@usedoc(numpy.ndarray.__rpow__)
369386
def __rpow__(self, other):
370387
if self.dimensionality.simplified:
371388
raise ValueError("exponent must be dimensionless")
372389

373390
return super(Quantity, self.simplified).__rpow__(other)
374391

392+
@usedoc(numpy.ndarray.__repr__)
375393
def __repr__(self):
376394
return '%s*%s'%(
377395
repr(self.magnitude), repr(self.dimensionality)
378396
)
379397

398+
@usedoc(numpy.ndarray.__str__)
380399
def __str__(self):
381400
return '%s %s'%(
382401
str(self.magnitude), str(self.dimensionality)
383402
)
384403

404+
@usedoc(numpy.ndarray.__getitem__)
385405
def __getitem__(self, key):
386406
if isinstance(key, int):
387407
# This might be resolved by issue # 826
388408
return Quantity(self.magnitude[key], self._dimensionality)
389409
else:
390410
return super(Quantity, self).__getitem__(key)
391411

412+
@usedoc(numpy.ndarray.__setitem__)
392413
def __setitem__(self, key, value):
393414
if not isinstance(value, Quantity):
394415
value = Quantity(value)
395416

396417
# TODO: do we want this kind of magic?
397418
self.magnitude[key] = value.rescale(self._dimensionality).magnitude
398419

420+
@usedoc(numpy.ndarray.__lt__)
399421
def __lt__(self, other):
400422
ss, os = prepare_compatible_units(self, other)
401423
return ss.magnitude < os.magnitude
402424

425+
@usedoc(numpy.ndarray.__le__)
403426
def __le__(self, other):
404427
ss, os = prepare_compatible_units(self, other)
405428
return ss.magnitude <= os.magnitude
406429

430+
@usedoc(numpy.ndarray.__eq__)
407431
def __eq__(self, other):
408432
ss, os = prepare_compatible_units(self, other)
409433
return ss.magnitude == os.magnitude
410434

435+
@usedoc(numpy.ndarray.__ne__)
411436
def __ne__(self, other):
412437
ss, os = prepare_compatible_units(self, other)
413438
return ss.magnitude != os.magnitude
414439

440+
@usedoc(numpy.ndarray.__gt__)
415441
def __gt__(self, other):
416442
ss, os = prepare_compatible_units(self, other)
417443
return ss.magnitude > os.magnitude
418444

445+
@usedoc(numpy.ndarray.__ge__)
419446
def __ge__(self, other):
420447
ss, os = prepare_compatible_units(self, other)
421448
return ss.magnitude >= os.magnitude
422449

423450
#I don't think this implementation is particularly efficient,
424451
#perhaps there is something better
452+
@usedoc(numpy.ndarray.tolist)
425453
def tolist(self):
426454
#first get a dummy array from the ndarray method
427455
work_list = self.magnitude.tolist()
@@ -442,13 +470,15 @@ def _tolist(self, work_list):
442470
#need to implement other Array conversion methods:
443471
# item, itemset, tofile, dump, byteswap
444472

473+
@usedoc(numpy.ndarray.sum)
445474
def sum(self, axis=None, dtype=None, out=None):
446475
return Quantity(
447476
self.magnitude.sum(axis, dtype, out),
448477
self.dimensionality,
449478
copy=False
450479
)
451480

481+
@usedoc(numpy.ndarray.fill)
452482
def fill(self, scalar):
453483
if not isinstance (scalar, Quantity):
454484
scalar = Quantity(scalar, copy=False)
@@ -458,6 +488,7 @@ def fill(self, scalar):
458488
else:
459489
raise ValueError("scalar must have the same units as self")
460490

491+
@usedoc(numpy.ndarray.put)
461492
def put(self, indicies, values, mode='raise'):
462493
"""
463494
performs the equivalent of ndarray.put() but enforces units
@@ -474,9 +505,11 @@ def put(self, indicies, values, mode='raise'):
474505
# choose does not function correctly, and it is not clear
475506
# how it would function, so for now it will not be implemented
476507

508+
@usedoc(numpy.ndarray.argsort)
477509
def argsort(self, axis=-1, kind='quick', order=None):
478510
return self.magnitude.argsort(axis, kind, order)
479511

512+
@usedoc(numpy.ndarray.searchsorted)
480513
def searchsorted(self,values, side='left'):
481514
if not isinstance (values, Quantity):
482515
values = Quantity(values, copy=False)
@@ -486,33 +519,39 @@ def searchsorted(self,values, side='left'):
486519

487520
return self.magnitude.searchsorted(values.magnitude, side)
488521

522+
@usedoc(numpy.ndarray.nonzero)
489523
def nonzero(self):
490524
return self.magnitude.nonzero()
491525

526+
@usedoc(numpy.ndarray.max)
492527
def max(self, axis=None, out=None):
493528
return Quantity(
494529
self.magnitude.max(),
495530
self.dimensionality,
496531
copy=False
497532
)
498533

534+
@usedoc(numpy.ndarray.min)
499535
def min(self, axis=None, out=None):
500536
return Quantity(
501537
self.magnitude.min(),
502538
self.dimensionality,
503539
copy=False
504540
)
505541

542+
@usedoc(numpy.ndarray.argmin)
506543
def argmin(self,axis=None, out=None):
507544
return self.magnitude.argmin()
508545

546+
@usedoc(numpy.ndarray.ptp)
509547
def ptp(self, axis=None, out=None):
510548
return Quantity(
511549
self.magnitude.ptp(),
512550
self.dimensionality,
513551
copy=False
514552
)
515553

554+
@usedoc(numpy.ndarray.clip)
516555
def clip(self, min=None, max=None, out=None):
517556
if min is None and max is None:
518557
raise ValueError("at least one of min or max must be set")
@@ -533,40 +572,46 @@ def clip(self, min=None, max=None, out=None):
533572
)
534573
return Quantity(clipped, self.dimensionality, copy=False)
535574

575+
@usedoc(numpy.ndarray.round)
536576
def round(self, decimals=0, out=None):
537577
return Quantity(
538578
self.magnitude.round(decimals, out),
539579
self.dimensionality,
540580
copy=False
541581
)
542582

583+
@usedoc(numpy.ndarray.trace)
543584
def trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None):
544585
return Quantity(
545586
self.magnitude.trace(offset, axis1, axis2, dtype, out),
546587
self.dimensionality,
547588
copy=False
548589
)
549590

591+
@usedoc(numpy.ndarray.mean)
550592
def mean(self, axis=None, dtype=None, out=None):
551593
return Quantity(
552594
self.magnitude.mean(axis, dtype, out),
553595
self.dimensionality,
554596
copy=False)
555597

598+
@usedoc(numpy.ndarray.var)
556599
def var(self, axis=None, dtype=None, out=None):
557600
return Quantity(
558601
self.magnitude.var(axis, dtype, out),
559602
self._dimensionality**2,
560603
copy=False
561604
)
562605

606+
@usedoc(numpy.ndarray.std)
563607
def std(self, axis=None, dtype=None, out=None):
564608
return Quantity(
565609
self.magnitude.std(axis, dtype, out),
566610
self._dimensionality,
567611
copy=False
568612
)
569613

614+
@usedoc(numpy.ndarray.prod)
570615
def prod(self, axis=None, dtype=None, out=None):
571616
if axis == None:
572617
power = self.size
@@ -579,6 +624,7 @@ def prod(self, axis=None, dtype=None, out=None):
579624
copy=False
580625
)
581626

627+
@usedoc(numpy.ndarray.cumprod)
582628
def cumprod(self, axis=None, dtype=None, out=None):
583629
if self._dimensionality:
584630
# different array elements would have different dimensionality

0 commit comments

Comments
 (0)