Mercurial > cpython-lru_cache-weakref
annotate Demo/classes/Vec.py @ 79675:c0a2294de787 2.7
Issue #16199: Backport 2to3 typo fix from 3.2.
| author | Chris Jerdonek <chris.jerdonek@gmail.com> |
|---|---|
| date | Thu, 11 Oct 2012 16:15:46 -0700 |
| parents | 3355356f1c74 |
| children |
| rev | line source |
|---|---|
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
1 class Vec: |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
2 """ A simple vector class |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
3 |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
4 Instances of the Vec class can be constructed from numbers |
| 945 | 5 |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
6 >>> a = Vec(1, 2, 3) |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
7 >>> b = Vec(3, 2, 1) |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
8 |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
9 added |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
10 >>> a + b |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
11 Vec(4, 4, 4) |
| 945 | 12 |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
13 subtracted |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
14 >>> a - b |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
15 Vec(-2, 0, 2) |
| 945 | 16 |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
17 and multiplied by a scalar on the left |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
18 >>> 3.0 * a |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
19 Vec(3.0, 6.0, 9.0) |
| 945 | 20 |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
21 or on the right |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
22 >>> a * 3.0 |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
23 Vec(3.0, 6.0, 9.0) |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
24 """ |
|
28788
558689b6d7f0
Run these demo scripts through reindent.py to give them 4-space indents. I've verified that their output is unchanged.
Andrew M. Kuchling <amk@amk.ca>
parents:
1427
diff
changeset
|
25 def __init__(self, *v): |
|
30407
b8737a31050c
SF patch #803449: modernize demo scripts
Raymond Hettinger <python@rcn.com>
parents:
28788
diff
changeset
|
26 self.v = list(v) |
| 945 | 27 |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
28 @classmethod |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
29 def fromlist(cls, v): |
|
30407
b8737a31050c
SF patch #803449: modernize demo scripts
Raymond Hettinger <python@rcn.com>
parents:
28788
diff
changeset
|
30 if not isinstance(v, list): |
|
28788
558689b6d7f0
Run these demo scripts through reindent.py to give them 4-space indents. I've verified that their output is unchanged.
Andrew M. Kuchling <amk@amk.ca>
parents:
1427
diff
changeset
|
31 raise TypeError |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
32 inst = cls() |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
33 inst.v = v |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
34 return inst |
| 945 | 35 |
|
28788
558689b6d7f0
Run these demo scripts through reindent.py to give them 4-space indents. I've verified that their output is unchanged.
Andrew M. Kuchling <amk@amk.ca>
parents:
1427
diff
changeset
|
36 def __repr__(self): |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
37 args = ', '.join(repr(x) for x in self.v) |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
38 return 'Vec({0})'.format(args) |
| 945 | 39 |
|
28788
558689b6d7f0
Run these demo scripts through reindent.py to give them 4-space indents. I've verified that their output is unchanged.
Andrew M. Kuchling <amk@amk.ca>
parents:
1427
diff
changeset
|
40 def __len__(self): |
|
558689b6d7f0
Run these demo scripts through reindent.py to give them 4-space indents. I've verified that their output is unchanged.
Andrew M. Kuchling <amk@amk.ca>
parents:
1427
diff
changeset
|
41 return len(self.v) |
| 945 | 42 |
|
28788
558689b6d7f0
Run these demo scripts through reindent.py to give them 4-space indents. I've verified that their output is unchanged.
Andrew M. Kuchling <amk@amk.ca>
parents:
1427
diff
changeset
|
43 def __getitem__(self, i): |
|
558689b6d7f0
Run these demo scripts through reindent.py to give them 4-space indents. I've verified that their output is unchanged.
Andrew M. Kuchling <amk@amk.ca>
parents:
1427
diff
changeset
|
44 return self.v[i] |
| 945 | 45 |
|
30407
b8737a31050c
SF patch #803449: modernize demo scripts
Raymond Hettinger <python@rcn.com>
parents:
28788
diff
changeset
|
46 def __add__(self, other): |
|
28788
558689b6d7f0
Run these demo scripts through reindent.py to give them 4-space indents. I've verified that their output is unchanged.
Andrew M. Kuchling <amk@amk.ca>
parents:
1427
diff
changeset
|
47 # Element-wise addition |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
48 v = [x + y for x, y in zip(self.v, other.v)] |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
49 return Vec.fromlist(v) |
| 945 | 50 |
|
30407
b8737a31050c
SF patch #803449: modernize demo scripts
Raymond Hettinger <python@rcn.com>
parents:
28788
diff
changeset
|
51 def __sub__(self, other): |
|
28788
558689b6d7f0
Run these demo scripts through reindent.py to give them 4-space indents. I've verified that their output is unchanged.
Andrew M. Kuchling <amk@amk.ca>
parents:
1427
diff
changeset
|
52 # Element-wise subtraction |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
53 v = [x - y for x, y in zip(self.v, other.v)] |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
54 return Vec.fromlist(v) |
| 945 | 55 |
|
28788
558689b6d7f0
Run these demo scripts through reindent.py to give them 4-space indents. I've verified that their output is unchanged.
Andrew M. Kuchling <amk@amk.ca>
parents:
1427
diff
changeset
|
56 def __mul__(self, scalar): |
|
558689b6d7f0
Run these demo scripts through reindent.py to give them 4-space indents. I've verified that their output is unchanged.
Andrew M. Kuchling <amk@amk.ca>
parents:
1427
diff
changeset
|
57 # Multiply by scalar |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
58 v = [x * scalar for x in self.v] |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
59 return Vec.fromlist(v) |
| 945 | 60 |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
61 __rmul__ = __mul__ |
| 945 | 62 |
| 63 | |
| 64 def test(): | |
|
63238
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
65 import doctest |
|
3355356f1c74
Merged revisions 82594,82599 via svnmerge from
Georg Brandl <georg@python.org>
parents:
30407
diff
changeset
|
66 doctest.testmod() |
| 945 | 67 |
| 68 test() |
