summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichele Simionato <michele.simionato@gmail.com>2015-07-24 06:37:15 +0200
committerMichele Simionato <michele.simionato@gmail.com>2015-07-24 06:37:15 +0200
commitec593bcda97927900a3989ebc76340edd977fe20 (patch)
tree9b4cd81a47baed88c2d3023d941bc25b636bae77
parent8b7b3aba63d278eb391c3c9b0ccbe065559f1b93 (diff)
downloadpython-decorator-git-ec593bcda97927900a3989ebc76340edd977fe20.tar.gz
Removed dependency from inspect.getargspec
-rw-r--r--CHANGES.txt2
-rw-r--r--documentation.pdf308
-rw-r--r--documentation.rst21
-rw-r--r--src/decorator.py37
-rw-r--r--src/tests/documentation.py19
5 files changed, 198 insertions, 189 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 5378cf3..983b266 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -5,6 +5,8 @@ HISTORY
Added a MANIFEST.in file and produced a proper wheel. Improved
the integration with setuptools so that `python setup.py test` works.
Reworked the documentation and introduced `decorator.decorated`.
+ Removed any dependence from `inspect.getargspec`, which is deprecated
+ in Python 3.5, as signaled by XXX.
Copied the `__qualname__` attribute, as requested by Frazer McLean.
Fixed `contextmanager` to work with Python 3.5.
Added a `dispatch_on` facility to implement generic functions.
diff --git a/documentation.pdf b/documentation.pdf
index 8fde909..0166f17 100644
--- a/documentation.pdf
+++ b/documentation.pdf
@@ -109,10 +109,10 @@ endobj
<< /Border [ 0 0 0 ] /Contents () /Dest [ 65 0 R /XYZ 62.69291 657.0236 0 ] /Rect [ 521.4627 344.7736 532.5827 356.7736 ] /Subtype /Link /Type /Annot >>
endobj
37 0 obj
-<< /Border [ 0 0 0 ] /Contents () /Dest [ 67 0 R /XYZ 62.69291 647.8236 0 ] /Rect [ 62.69291 326.0236 177.1629 338.0236 ] /Subtype /Link /Type /Annot >>
+<< /Border [ 0 0 0 ] /Contents () /Dest [ 67 0 R /XYZ 62.69291 659.8236 0 ] /Rect [ 62.69291 326.0236 177.1629 338.0236 ] /Subtype /Link /Type /Annot >>
endobj
38 0 obj
-<< /Border [ 0 0 0 ] /Contents () /Dest [ 67 0 R /XYZ 62.69291 647.8236 0 ] /Rect [ 521.4627 326.7736 532.5827 338.7736 ] /Subtype /Link /Type /Annot >>
+<< /Border [ 0 0 0 ] /Contents () /Dest [ 67 0 R /XYZ 62.69291 659.8236 0 ] /Rect [ 521.4627 326.7736 532.5827 338.7736 ] /Subtype /Link /Type /Annot >>
endobj
39 0 obj
<< /Border [ 0 0 0 ] /Contents () /Dest [ 67 0 R /XYZ 62.69291 180.0236 0 ] /Rect [ 62.69291 308.0236 228.2829 320.0236 ] /Subtype /Link /Type /Annot >>
@@ -262,7 +262,7 @@ endobj
<< /Outlines 81 0 R /PageLabels 122 0 R /PageMode /UseNone /Pages 101 0 R /Type /Catalog >>
endobj
80 0 obj
-<< /Author (Michele Simionato) /CreationDate (D:20150723163253-01'00') /Creator (\(unspecified\)) /Keywords () /Producer (ReportLab PDF Library - www.reportlab.com) /Subject (\(unspecified\))
+<< /Author (Michele Simionato) /CreationDate (D:20150724063304-01'00') /Creator (\(unspecified\)) /Keywords () /Producer (ReportLab PDF Library - www.reportlab.com) /Subject (\(unspecified\))
/Title (The decorator module) >>
endobj
81 0 obj
@@ -308,7 +308,7 @@ endobj
<< /Dest [ 65 0 R /XYZ 62.69291 657.0236 0 ] /Next 95 0 R /Parent 81 0 R /Prev 93 0 R /Title (The FunctionMaker class) >>
endobj
95 0 obj
-<< /Dest [ 67 0 R /XYZ 62.69291 647.8236 0 ] /Next 96 0 R /Parent 81 0 R /Prev 94 0 R /Title (Getting the source code) >>
+<< /Dest [ 67 0 R /XYZ 62.69291 659.8236 0 ] /Next 96 0 R /Parent 81 0 R /Prev 94 0 R /Title (Getting the source code) >>
endobj
96 0 obj
<< /Dest [ 67 0 R /XYZ 62.69291 180.0236 0 ] /Next 97 0 R /Parent 81 0 R /Prev 95 0 R /Title (Dealing with third party decorators) >>
@@ -395,7 +395,7 @@ q
1 0 0 1 91.03937 3 cm
q
0 0 0 rg
-BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (4.0.0 \(2015-07-23\)) Tj T* ET
+BT 1 0 0 1 0 2 Tm /F1 10 Tf 12 TL (4.0.0 \(2015-07-24\)) Tj T* ET
Q
Q
q
@@ -1270,7 +1270,7 @@ Q
endstream
endobj
105 0 obj
-<< /Length 16560 >>
+<< /Length 16559 >>
stream
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
q
@@ -1338,11 +1338,11 @@ n 12 24 6 12 re f*
.960784 .960784 .862745 rg
n 24 24 24 12 re f*
.960784 .960784 .862745 rg
-n 54 24 42 12 re f*
+n 54 24 54 12 re f*
.960784 .960784 .862745 rg
-n 102 24 36 12 re f*
+n 114 24 36 12 re f*
.960784 .960784 .862745 rg
-n 144 24 60 12 re f*
+n 156 24 60 12 re f*
.960784 .960784 .862745 rg
n 0 12 6 12 re f*
.960784 .960784 .862745 rg
@@ -1380,22 +1380,22 @@ n 150 0 36 12 re f*
.960784 .960784 .862745 rg
n 186 0 6 12 re f*
.960784 .960784 .862745 rg
-n 198 0 48 12 re f*
+n 198 0 30 12 re f*
.960784 .960784 .862745 rg
-n 246 0 6 12 re f*
+n 228 0 6 12 re f*
.960784 .960784 .862745 rg
-n 252 0 24 12 re f*
+n 234 0 24 12 re f*
.960784 .960784 .862745 rg
-n 276 0 6 12 re f*
+n 258 0 6 12 re f*
.960784 .960784 .862745 rg
-n 288 0 48 12 re f*
+n 270 0 48 12 re f*
.960784 .960784 .862745 rg
-n 336 0 6 12 re f*
+n 318 0 6 12 re f*
.960784 .960784 .862745 rg
-n 342 0 24 12 re f*
+n 324 0 24 12 re f*
.960784 .960784 .862745 rg
-n 366 0 6 12 re f*
-BT 1 0 0 1 0 26 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (from) Tj /F3 10 Tf 0 0 0 rg ( ) Tj /F5 10 Tf 0 0 1 rg (inspect) Tj /F3 10 Tf 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (import) Tj /F3 10 Tf 0 0 0 rg ( ) Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg T* .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (f1) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* 0 0 0 rg (ArgSpec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (args) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ([],) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varargs) Tj .4 .4 .4 rg (=) Tj .729412 .129412 .129412 rg ('args') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (keywords) Tj .4 .4 .4 rg (=) Tj .729412 .129412 .129412 rg ('kw') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (\)) Tj T* ET
+n 348 0 6 12 re f*
+BT 1 0 0 1 0 26 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (from) Tj /F3 10 Tf 0 0 0 rg ( ) Tj /F5 10 Tf 0 0 1 rg (decorator) Tj /F3 10 Tf 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (import) Tj /F3 10 Tf 0 0 0 rg ( ) Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg T* .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (f1) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* 0 0 0 rg (ArgSpec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (args) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ([],) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varargs) Tj .4 .4 .4 rg (=) Tj .729412 .129412 .129412 rg ('args') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varkw) Tj .4 .4 .4 rg (=) Tj .729412 .129412 .129412 rg ('kw') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (\)) Tj T* ET
Q
Q
Q
@@ -1750,7 +1750,7 @@ Q
endstream
endobj
106 0 obj
-<< /Length 18522 >>
+<< /Length 18516 >>
stream
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
q
@@ -1915,22 +1915,22 @@ n 150 0 24 12 re f*
.960784 .960784 .862745 rg
n 174 0 6 12 re f*
.960784 .960784 .862745 rg
-n 186 0 48 12 re f*
+n 186 0 30 12 re f*
.960784 .960784 .862745 rg
-n 234 0 6 12 re f*
+n 216 0 6 12 re f*
.960784 .960784 .862745 rg
-n 240 0 24 12 re f*
+n 222 0 24 12 re f*
.960784 .960784 .862745 rg
-n 264 0 6 12 re f*
+n 246 0 6 12 re f*
.960784 .960784 .862745 rg
-n 276 0 48 12 re f*
+n 258 0 48 12 re f*
.960784 .960784 .862745 rg
-n 324 0 6 12 re f*
+n 306 0 6 12 re f*
.960784 .960784 .862745 rg
-n 330 0 24 12 re f*
+n 312 0 24 12 re f*
.960784 .960784 .862745 rg
-n 354 0 6 12 re f*
-BT 1 0 0 1 0 14 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (heavy_computation) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* 0 0 0 rg (ArgSpec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (args) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ([],) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varargs) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (keywords) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (\)) Tj T* ET
+n 336 0 6 12 re f*
+BT 1 0 0 1 0 14 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (heavy_computation) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* 0 0 0 rg (ArgSpec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (args) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ([],) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varargs) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varkw) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (\)) Tj T* ET
Q
Q
Q
@@ -2311,22 +2311,22 @@ n 168 0 24 12 re f*
.960784 .960784 .862745 rg
n 192 0 6 12 re f*
.960784 .960784 .862745 rg
-n 204 0 48 12 re f*
+n 204 0 30 12 re f*
.960784 .960784 .862745 rg
-n 252 0 6 12 re f*
+n 234 0 6 12 re f*
.960784 .960784 .862745 rg
-n 258 0 24 12 re f*
+n 240 0 24 12 re f*
.960784 .960784 .862745 rg
-n 282 0 6 12 re f*
+n 264 0 6 12 re f*
.960784 .960784 .862745 rg
-n 294 0 48 12 re f*
+n 276 0 48 12 re f*
.960784 .960784 .862745 rg
-n 342 0 6 12 re f*
+n 324 0 6 12 re f*
.960784 .960784 .862745 rg
-n 348 0 24 12 re f*
+n 330 0 24 12 re f*
.960784 .960784 .862745 rg
-n 372 0 6 12 re f*
-BT 1 0 0 1 0 14 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (f1) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* 0 0 0 rg (ArgSpec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (args) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ([) Tj .729412 .129412 .129412 rg ('x') Tj 0 0 0 rg (],) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varargs) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (keywords) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (\)) Tj T* ET
+n 354 0 6 12 re f*
+BT 1 0 0 1 0 14 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (f1) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* 0 0 0 rg (ArgSpec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (args) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ([) Tj .729412 .129412 .129412 rg ('x') Tj 0 0 0 rg (],) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varargs) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varkw) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (\)) Tj T* ET
Q
Q
Q
@@ -2343,7 +2343,7 @@ Q
endstream
endobj
107 0 obj
-<< /Length 17634 >>
+<< /Length 17749 >>
stream
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
q
@@ -2357,7 +2357,7 @@ q
.662745 .662745 .662745 RG
.5 w
.960784 .960784 .862745 rg
-n -6 -6 474 120 re B*
+n -6 -6 468.6898 120 re B*
Q
q
.960784 .960784 .862745 rg
@@ -2503,28 +2503,28 @@ n 228 0 36 12 re f*
.960784 .960784 .862745 rg
n 264 0 6 12 re f*
.960784 .960784 .862745 rg
-n 276 0 48 12 re f*
+n 276 0 30 12 re f*
.960784 .960784 .862745 rg
-n 324 0 6 12 re f*
+n 306 0 6 12 re f*
.960784 .960784 .862745 rg
-n 330 0 24 12 re f*
+n 312 0 24 12 re f*
.960784 .960784 .862745 rg
-n 354 0 6 12 re f*
+n 336 0 6 12 re f*
.960784 .960784 .862745 rg
-n 366 0 48 12 re f*
+n 348 0 48 12 re f*
.960784 .960784 .862745 rg
-n 414 0 6 12 re f*
+n 396 0 6 12 re f*
.960784 .960784 .862745 rg
-n 420 0 6 12 re f*
+n 402 0 6 12 re f*
.960784 .960784 .862745 rg
-n 426 0 6 12 re f*
+n 408 0 6 12 re f*
.960784 .960784 .862745 rg
-n 432 0 6 12 re f*
+n 414 0 6 12 re f*
.960784 .960784 .862745 rg
-n 444 0 6 12 re f*
+n 426 0 6 12 re f*
.960784 .960784 .862745 rg
-n 450 0 12 12 re f*
-BT 1 0 0 1 0 98 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj .666667 .133333 1 rg (@trace) Tj 0 0 0 rg T* .4 .4 .4 rg (...) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (def) Tj /F3 10 Tf 0 0 0 rg ( ) Tj 0 0 1 rg (f) Tj 0 0 0 rg (\() Tj 0 0 0 rg (x) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (y) Tj .4 .4 .4 rg (=) Tj .4 .4 .4 rg (1) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (z) Tj .4 .4 .4 rg (=) Tj .4 .4 .4 rg (2) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (*) Tj 0 0 0 rg (args) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (**) Tj 0 0 0 rg (kw) Tj 0 0 0 rg (\):) Tj 0 0 0 rg T* .4 .4 .4 rg (...) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (pass) Tj /F3 10 Tf 0 0 0 rg T* T* .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (f) Tj 0 0 0 rg (\() Tj .4 .4 .4 rg (0) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (3) Tj 0 0 0 rg (\)) Tj 0 0 0 rg T* 0 0 0 rg (calling) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (f) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (with) Tj /F3 10 Tf 0 0 0 rg ( ) Tj 0 0 0 rg (args) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (\() Tj .4 .4 .4 rg (0) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (3) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (2) Tj 0 0 0 rg (\),) Tj 0 0 0 rg ( ) Tj 0 0 0 rg ({}) Tj 0 0 0 rg T* T* .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (f) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* 0 0 0 rg (ArgSpec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (args) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ([) Tj .729412 .129412 .129412 rg ('x') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .729412 .129412 .129412 rg ('y') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .729412 .129412 .129412 rg ('z') Tj 0 0 0 rg (],) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varargs) Tj .4 .4 .4 rg (=) Tj .729412 .129412 .129412 rg ('args') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (keywords) Tj .4 .4 .4 rg (=) Tj .729412 .129412 .129412 rg ('kw') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg (\() Tj .4 .4 .4 rg (1) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (2) Tj 0 0 0 rg (\)\)) Tj T* ET
+n 432 0 12 12 re f*
+BT 1 0 0 1 0 98 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj .666667 .133333 1 rg (@trace) Tj 0 0 0 rg T* .4 .4 .4 rg (...) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (def) Tj /F3 10 Tf 0 0 0 rg ( ) Tj 0 0 1 rg (f) Tj 0 0 0 rg (\() Tj 0 0 0 rg (x) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (y) Tj .4 .4 .4 rg (=) Tj .4 .4 .4 rg (1) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (z) Tj .4 .4 .4 rg (=) Tj .4 .4 .4 rg (2) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (*) Tj 0 0 0 rg (args) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (**) Tj 0 0 0 rg (kw) Tj 0 0 0 rg (\):) Tj 0 0 0 rg T* .4 .4 .4 rg (...) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (pass) Tj /F3 10 Tf 0 0 0 rg T* T* .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (f) Tj 0 0 0 rg (\() Tj .4 .4 .4 rg (0) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (3) Tj 0 0 0 rg (\)) Tj 0 0 0 rg T* 0 0 0 rg (calling) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (f) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (with) Tj /F3 10 Tf 0 0 0 rg ( ) Tj 0 0 0 rg (args) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (\() Tj .4 .4 .4 rg (0) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (3) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (2) Tj 0 0 0 rg (\),) Tj 0 0 0 rg ( ) Tj 0 0 0 rg ({}) Tj 0 0 0 rg T* T* .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (f) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* 0 0 0 rg (ArgSpec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (args) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ([) Tj .729412 .129412 .129412 rg ('x') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .729412 .129412 .129412 rg ('y') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .729412 .129412 .129412 rg ('z') Tj 0 0 0 rg (],) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varargs) Tj .4 .4 .4 rg (=) Tj .729412 .129412 .129412 rg ('args') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varkw) Tj .4 .4 .4 rg (=) Tj .729412 .129412 .129412 rg ('kw') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg (\() Tj .4 .4 .4 rg (1) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (2) Tj 0 0 0 rg (\)\)) Tj T* ET
Q
Q
Q
@@ -2635,7 +2635,7 @@ Q
q
1 0 0 1 62.69291 455.6236 cm
q
-BT 1 0 0 1 0 14 Tm .596647 Tw 12 TL /F1 10 Tf 0 0 0 rg (In order to introspect functions with annotations, one needs the utility ) Tj /F3 10 Tf 0 0 0 rg (inspect.getfullargspec) Tj /F1 10 Tf 0 0 0 rg (, new) Tj T* 0 Tw (in Python 3:) Tj T* ET
+BT 1 0 0 1 0 14 Tm .596647 Tw 12 TL /F1 10 Tf 0 0 0 rg (In order to introspect functions with annotations, one needs the utility ) Tj /F3 10 Tf 0 0 0 rg (inspect.getfullargspec) Tj /F1 10 Tf 0 0 0 rg (, new) Tj T* 0 Tw (in Python 3 \(and deprecated in favor of ) Tj /F3 10 Tf 0 0 0 rg (inspect.signature ) Tj /F1 10 Tf 0 0 0 rg (in Python 3.5\):) Tj T* ET
Q
Q
q
@@ -4647,7 +4647,7 @@ Q
endstream
endobj
112 0 obj
-<< /Length 18456 >>
+<< /Length 18313 >>
stream
1 0 0 1 0 0 cm BT /F1 12 Tf 14.4 TL ET
q
@@ -4657,7 +4657,7 @@ BT 1 0 0 1 0 14 Tm 6.828314 Tw 12 TL /F1 10 Tf 0 0 0 rg (Notice: you should not
Q
Q
q
-1 0 0 1 62.69291 659.8236 cm
+1 0 0 1 62.69291 671.8236 cm
q
q
1 0 0 1 0 0 cm
@@ -4667,77 +4667,67 @@ q
.662745 .662745 .662745 RG
.5 w
.960784 .960784 .862745 rg
-n -6 -6 468.6898 72 re B*
+n -6 -6 468.6898 60 re B*
Q
q
.960784 .960784 .862745 rg
-n 0 48 6 12 re f*
-.960784 .960784 .862745 rg
-n 6 48 6 12 re f*
-.960784 .960784 .862745 rg
-n 12 48 6 12 re f*
-.960784 .960784 .862745 rg
-n 24 48 12 12 re f*
-.960784 .960784 .862745 rg
-n 42 48 6 12 re f*
-.960784 .960784 .862745 rg
-n 54 48 78 12 re f*
+n 0 36 6 12 re f*
.960784 .960784 .862745 rg
-n 132 48 6 12 re f*
+n 6 36 6 12 re f*
.960784 .960784 .862745 rg
-n 138 48 36 12 re f*
+n 12 36 6 12 re f*
.960784 .960784 .862745 rg
-n 174 48 6 12 re f*
+n 24 36 12 12 re f*
.960784 .960784 .862745 rg
-n 0 36 18 12 re f*
+n 42 36 6 12 re f*
.960784 .960784 .862745 rg
-n 48 36 60 12 re f*
+n 54 36 78 12 re f*
.960784 .960784 .862745 rg
-n 108 36 6 12 re f*
+n 132 36 6 12 re f*
.960784 .960784 .862745 rg
-n 120 36 54 12 re f*
+n 138 36 36 12 re f*
.960784 .960784 .862745 rg
n 174 36 6 12 re f*
.960784 .960784 .862745 rg
-n 186 36 24 12 re f*
+n 0 24 18 12 re f*
.960784 .960784 .862745 rg
-n 210 36 6 12 re f*
+n 48 24 60 12 re f*
.960784 .960784 .862745 rg
-n 216 36 6 12 re f*
+n 108 24 6 12 re f*
.960784 .960784 .862745 rg
-n 222 36 6 12 re f*
+n 120 24 54 12 re f*
.960784 .960784 .862745 rg
-n 228 36 6 12 re f*
+n 174 24 6 12 re f*
.960784 .960784 .862745 rg
-n 234 36 12 12 re f*
+n 186 24 24 12 re f*
.960784 .960784 .862745 rg
-n 252 36 54 12 re f*
+n 210 24 6 12 re f*
.960784 .960784 .862745 rg
-n 306 36 6 12 re f*
+n 216 24 6 12 re f*
.960784 .960784 .862745 rg
-n 312 36 24 12 re f*
+n 222 24 6 12 re f*
.960784 .960784 .862745 rg
-n 336 36 6 12 re f*
+n 228 24 6 12 re f*
.960784 .960784 .862745 rg
-n 348 36 48 12 re f*
+n 234 24 12 12 re f*
.960784 .960784 .862745 rg
-n 396 36 6 12 re f*
+n 252 24 54 12 re f*
.960784 .960784 .862745 rg
-n 402 36 6 12 re f*
+n 306 24 6 12 re f*
.960784 .960784 .862745 rg
-n 408 36 24 12 re f*
+n 312 24 24 12 re f*
.960784 .960784 .862745 rg
-n 432 36 18 12 re f*
+n 336 24 6 12 re f*
.960784 .960784 .862745 rg
-n 0 24 6 12 re f*
+n 348 24 48 12 re f*
.960784 .960784 .862745 rg
-n 6 24 6 12 re f*
+n 396 24 6 12 re f*
.960784 .960784 .862745 rg
-n 12 24 6 12 re f*
+n 402 24 6 12 re f*
.960784 .960784 .862745 rg
-n 24 24 36 12 re f*
+n 408 24 24 12 re f*
.960784 .960784 .862745 rg
-n 66 24 42 12 re f*
+n 432 24 18 12 re f*
.960784 .960784 .862745 rg
n 0 12 6 12 re f*
.960784 .960784 .862745 rg
@@ -4749,17 +4739,13 @@ n 24 12 30 12 re f*
.960784 .960784 .862745 rg
n 54 12 6 12 re f*
.960784 .960784 .862745 rg
-n 60 12 42 12 re f*
-.960784 .960784 .862745 rg
-n 102 12 6 12 re f*
-.960784 .960784 .862745 rg
-n 108 12 60 12 re f*
+n 60 12 60 12 re f*
.960784 .960784 .862745 rg
-n 168 12 6 12 re f*
+n 120 12 6 12 re f*
.960784 .960784 .862745 rg
-n 174 12 12 12 re f*
+n 126 12 12 12 re f*
.960784 .960784 .862745 rg
-n 186 12 12 12 re f*
+n 138 12 12 12 re f*
.960784 .960784 .862745 rg
n 0 0 42 12 re f*
.960784 .960784 .862745 rg
@@ -4787,43 +4773,43 @@ n 198 0 24 12 re f*
.960784 .960784 .862745 rg
n 222 0 6 12 re f*
.960784 .960784 .862745 rg
-n 234 0 48 12 re f*
+n 234 0 30 12 re f*
.960784 .960784 .862745 rg
-n 282 0 6 12 re f*
+n 264 0 6 12 re f*
.960784 .960784 .862745 rg
-n 288 0 24 12 re f*
+n 270 0 24 12 re f*
.960784 .960784 .862745 rg
-n 312 0 6 12 re f*
+n 294 0 6 12 re f*
.960784 .960784 .862745 rg
-n 324 0 48 12 re f*
+n 306 0 48 12 re f*
.960784 .960784 .862745 rg
-n 372 0 6 12 re f*
+n 354 0 6 12 re f*
.960784 .960784 .862745 rg
-n 378 0 6 12 re f*
+n 360 0 6 12 re f*
.960784 .960784 .862745 rg
-n 384 0 24 12 re f*
+n 366 0 24 12 re f*
.960784 .960784 .862745 rg
-n 408 0 18 12 re f*
-BT 1 0 0 1 0 50 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (f1) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (FunctionMaker) Tj .4 .4 .4 rg (.) Tj 0 0 0 rg (create) Tj 0 0 0 rg (\() Tj 0 0 0 rg T* .4 .4 .4 rg (...) Tj 0 0 0 rg ( ) Tj .729412 .129412 .129412 rg ('f1\(a, b\)') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .729412 .129412 .129412 rg ('f\(a, b\)') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 .501961 0 rg (dict) Tj 0 0 0 rg (\() Tj 0 0 0 rg (f) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg (f) Tj 0 0 0 rg (\),) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (addsource) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (True) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg (\() Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,\)\)) Tj 0 0 0 rg T* .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (import) Tj /F3 10 Tf 0 0 0 rg ( ) Tj /F5 10 Tf 0 0 1 rg (inspect) Tj /F3 10 Tf 0 0 0 rg T* .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (inspect) Tj .4 .4 .4 rg (.) Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (f1) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* 0 0 0 rg (ArgSpec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (args) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ([) Tj .729412 .129412 .129412 rg ('a') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .729412 .129412 .129412 rg ('b') Tj 0 0 0 rg (],) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varargs) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (keywords) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg (\() Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,\)\)) Tj T* ET
+n 390 0 18 12 re f*
+BT 1 0 0 1 0 38 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (f1) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (FunctionMaker) Tj .4 .4 .4 rg (.) Tj 0 0 0 rg (create) Tj 0 0 0 rg (\() Tj 0 0 0 rg T* .4 .4 .4 rg (...) Tj 0 0 0 rg ( ) Tj .729412 .129412 .129412 rg ('f1\(a, b\)') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .729412 .129412 .129412 rg ('f\(a, b\)') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 .501961 0 rg (dict) Tj 0 0 0 rg (\() Tj 0 0 0 rg (f) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg (f) Tj 0 0 0 rg (\),) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (addsource) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (True) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg (\() Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,\)\)) Tj 0 0 0 rg T* .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (getargspec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (f1) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* 0 0 0 rg (ArgSpec) Tj 0 0 0 rg (\() Tj 0 0 0 rg (args) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg ([) Tj .729412 .129412 .129412 rg ('a') Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .729412 .129412 .129412 rg ('b') Tj 0 0 0 rg (],) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varargs) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (varkw) Tj .4 .4 .4 rg (=) Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj 0 0 0 rg (defaults) Tj .4 .4 .4 rg (=) Tj 0 0 0 rg (\() Tj 0 .501961 0 rg (None) Tj 0 0 0 rg (,\)\)) Tj T* ET
Q
Q
Q
Q
Q
q
-1 0 0 1 62.69291 626.8236 cm
+1 0 0 1 62.69291 638.8236 cm
q
BT 1 0 0 1 0 3.5 Tm 21 TL /F2 17.5 Tf 0 0 0 rg (Getting the source code) Tj T* ET
Q
Q
q
-1 0 0 1 62.69291 548.8236 cm
+1 0 0 1 62.69291 560.8236 cm
q
BT 1 0 0 1 0 62 Tm 5.045529 Tw 12 TL /F1 10 Tf 0 0 0 rg (Internally ) Tj /F3 10 Tf 0 0 0 rg (FunctionMaker.create ) Tj /F1 10 Tf 0 0 0 rg (uses ) Tj /F3 10 Tf 0 0 0 rg (exec ) Tj /F1 10 Tf 0 0 0 rg (to generate the decorated function. Therefore) Tj T* 0 Tw 2.542126 Tw /F3 10 Tf 0 0 0 rg (inspect.getsource ) Tj /F1 10 Tf 0 0 0 rg (will not work for decorated functions. That means that the usual '??' trick in) Tj T* 0 Tw 26.45775 Tw (IPython will give you the \(right on the spot\) message) Tj T* 0 Tw .261647 Tw /F3 10 Tf 0 0 0 rg (Dynamically) Tj ( ) Tj (generated) Tj ( ) Tj (function.) Tj ( ) Tj (No) Tj ( ) Tj (source) Tj ( ) Tj (code available) Tj /F1 10 Tf 0 0 0 rg (. In the past I have considered) Tj T* 0 Tw .945366 Tw (this acceptable, since ) Tj /F3 10 Tf 0 0 0 rg (inspect.getsource ) Tj /F1 10 Tf 0 0 0 rg (does not really work even with regular decorators. In that) Tj T* 0 Tw (case ) Tj /F3 10 Tf 0 0 0 rg (inspect.getsource ) Tj /F1 10 Tf 0 0 0 rg (gives you the wrapper source code which is probably not what you want:) Tj T* ET
Q
Q
q
-1 0 0 1 62.69291 479.6236 cm
+1 0 0 1 62.69291 491.6236 cm
q
q
1 0 0 1 0 0 cm
@@ -4893,7 +4879,7 @@ Q
Q
Q
q
-1 0 0 1 62.69291 434.4236 cm
+1 0 0 1 62.69291 446.4236 cm
q
q
1 0 0 1 0 0 cm
@@ -4959,10 +4945,20 @@ q
.662745 .662745 .662745 RG
.5 w
.960784 .960784 .862745 rg
-n -6 -6 468.6898 60 re B*
+n -6 -6 468.6898 72 re B*
Q
q
.960784 .960784 .862745 rg
+n 0 48 6 12 re f*
+.960784 .960784 .862745 rg
+n 6 48 6 12 re f*
+.960784 .960784 .862745 rg
+n 12 48 6 12 re f*
+.960784 .960784 .862745 rg
+n 24 48 36 12 re f*
+.960784 .960784 .862745 rg
+n 66 48 42 12 re f*
+.960784 .960784 .862745 rg
n 0 36 6 12 re f*
.960784 .960784 .862745 rg
n 6 36 6 12 re f*
@@ -5026,7 +5022,7 @@ n 0 0 6 12 re f*
n 6 0 54 12 re f*
.960784 .960784 .862745 rg
n 60 0 6 12 re f*
-BT 1 0 0 1 0 38 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (inspect) Tj .4 .4 .4 rg (.) Tj 0 0 0 rg (getsource) Tj 0 0 0 rg (\() Tj 0 0 0 rg (example) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* ( ) Tj /F5 10 Tf 0 .501961 0 rg (def) Tj /F3 10 Tf 0 0 0 rg ( ) Tj 0 0 1 rg (wrapper) Tj 0 0 0 rg (\() Tj .4 .4 .4 rg (*) Tj 0 0 0 rg (args) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (**) Tj 0 0 0 rg (kw) Tj 0 0 0 rg (\):) Tj 0 0 0 rg T* ( ) Tj /F5 10 Tf 0 .501961 0 rg (return) Tj /F3 10 Tf 0 0 0 rg ( ) Tj 0 0 0 rg (func) Tj 0 0 0 rg (\() Tj .4 .4 .4 rg (*) Tj 0 0 0 rg (args) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (**) Tj 0 0 0 rg (kw) Tj 0 0 0 rg (\)) Tj 0 0 0 rg T* .4 .4 .4 rg (<) Tj 0 0 0 rg (BLANKLINE) Tj .4 .4 .4 rg (>) Tj T* ET
+BT 1 0 0 1 0 50 Tm 12 TL /F3 10 Tf .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (import) Tj /F3 10 Tf 0 0 0 rg ( ) Tj /F5 10 Tf 0 0 1 rg (inspect) Tj /F3 10 Tf 0 0 0 rg T* .4 .4 .4 rg (>) Tj (>) Tj (>) Tj 0 0 0 rg ( ) Tj /F5 10 Tf 0 .501961 0 rg (print) Tj /F3 10 Tf 0 0 0 rg (\() Tj 0 0 0 rg (inspect) Tj .4 .4 .4 rg (.) Tj 0 0 0 rg (getsource) Tj 0 0 0 rg (\() Tj 0 0 0 rg (example) Tj 0 0 0 rg (\)\)) Tj 0 0 0 rg T* ( ) Tj /F5 10 Tf 0 .501961 0 rg (def) Tj /F3 10 Tf 0 0 0 rg ( ) Tj 0 0 1 rg (wrapper) Tj 0 0 0 rg (\() Tj .4 .4 .4 rg (*) Tj 0 0 0 rg (args) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (**) Tj 0 0 0 rg (kw) Tj 0 0 0 rg (\):) Tj 0 0 0 rg T* ( ) Tj /F5 10 Tf 0 .501961 0 rg (return) Tj /F3 10 Tf 0 0 0 rg ( ) Tj 0 0 0 rg (func) Tj 0 0 0 rg (\() Tj .4 .4 .4 rg (*) Tj 0 0 0 rg (args) Tj 0 0 0 rg (,) Tj 0 0 0 rg ( ) Tj .4 .4 .4 rg (**) Tj 0 0 0 rg (kw) Tj 0 0 0 rg (\)) Tj 0 0 0 rg T* .4 .4 .4 rg (<) Tj 0 0 0 rg (BLANKLINE) Tj .4 .4 .4 rg (>) Tj T* ET
Q
Q
Q
@@ -8389,48 +8385,48 @@ xref
0000025390 00000 n
0000032925 00000 n
0000045489 00000 n
-0000062108 00000 n
-0000080689 00000 n
-0000098382 00000 n
-0000118796 00000 n
-0000137551 00000 n
-0000152264 00000 n
-0000166652 00000 n
-0000185167 00000 n
-0000201778 00000 n
-0000214193 00000 n
-0000231245 00000 n
-0000245487 00000 n
-0000258692 00000 n
-0000271400 00000 n
-0000280816 00000 n
-0000294082 00000 n
-0000296210 00000 n
-0000296468 00000 n
-0000296506 00000 n
-0000296544 00000 n
-0000296582 00000 n
-0000296620 00000 n
-0000296658 00000 n
-0000296696 00000 n
-0000296734 00000 n
-0000296772 00000 n
-0000296810 00000 n
-0000296849 00000 n
-0000296888 00000 n
-0000296927 00000 n
-0000296966 00000 n
-0000297005 00000 n
-0000297044 00000 n
-0000297083 00000 n
-0000297122 00000 n
-0000297161 00000 n
-0000297200 00000 n
+0000062107 00000 n
+0000080682 00000 n
+0000098490 00000 n
+0000118904 00000 n
+0000137659 00000 n
+0000152372 00000 n
+0000166760 00000 n
+0000185132 00000 n
+0000201743 00000 n
+0000214158 00000 n
+0000231210 00000 n
+0000245452 00000 n
+0000258657 00000 n
+0000271365 00000 n
+0000280781 00000 n
+0000294047 00000 n
+0000296175 00000 n
+0000296433 00000 n
+0000296471 00000 n
+0000296509 00000 n
+0000296547 00000 n
+0000296585 00000 n
+0000296623 00000 n
+0000296661 00000 n
+0000296699 00000 n
+0000296737 00000 n
+0000296775 00000 n
+0000296814 00000 n
+0000296853 00000 n
+0000296892 00000 n
+0000296931 00000 n
+0000296970 00000 n
+0000297009 00000 n
+0000297048 00000 n
+0000297087 00000 n
+0000297126 00000 n
+0000297165 00000 n
trailer
<< /ID
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
- [(\2036t\347"n8W\244\303vUDv\012\322) (\2036t\347"n8W\244\303vUDv\012\322)]
+ [(\224\356\312\274\343M$\177\006\323\247~\206\006\340\240) (\224\356\312\274\343M$\177\006\323\247~\206\006\340\240)]
/Info 80 0 R /Root 79 0 R /Size 143 >>
startxref
-297239
+297204
%%EOF
diff --git a/documentation.rst b/documentation.rst
index 427487d..c33d5f0 100644
--- a/documentation.rst
+++ b/documentation.rst
@@ -4,7 +4,7 @@ The ``decorator`` module
:Author: Michele Simionato
:E-mail: michele.simionato@gmail.com
-:Version: 4.0.0 (2015-07-23)
+:Version: 4.0.0 (2015-07-24)
:Supports: Python 2.6, 2.7, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5
:Download page: http://pypi.python.org/pypi/decorator/4.0.0
:Installation: ``pip install decorator``
@@ -185,9 +185,9 @@ keyword arguments:
.. code-block:: python
- >>> from inspect import getargspec
+ >>> from decorator import getargspec
>>> print(getargspec(f1))
- ArgSpec(args=[], varargs='args', keywords='kw', defaults=None)
+ ArgSpec(args=[], varargs='args', varkw='kw', defaults=None)
This means that introspection tools such as *pydoc* will give
wrong informations about the signature of ``f1``, unless you are
@@ -275,7 +275,7 @@ The signature of ``heavy_computation`` is the one you would expect:
.. code-block:: python
>>> print(getargspec(heavy_computation))
- ArgSpec(args=[], varargs=None, keywords=None, defaults=None)
+ ArgSpec(args=[], varargs=None, varkw=None, defaults=None)
A ``trace`` decorator
------------------------------------------------------
@@ -318,7 +318,7 @@ and it that it has the correct signature:
.. code-block:: python
>>> print(getargspec(f1))
- ArgSpec(args=['x'], varargs=None, keywords=None, defaults=None)
+ ArgSpec(args=['x'], varargs=None, varkw=None, defaults=None)
The same decorator works with functions of any signature:
@@ -332,7 +332,7 @@ The same decorator works with functions of any signature:
calling f with args (0, 3, 2), {}
>>> print(getargspec(f))
- ArgSpec(args=['x', 'y', 'z'], varargs='args', keywords='kw', defaults=(1, 2))
+ ArgSpec(args=['x', 'y', 'z'], varargs='args', varkw='kw', defaults=(1, 2))
Function annotations
---------------------------------------------
@@ -351,7 +351,8 @@ annotations. Here is an example:
... pass
In order to introspect functions with annotations, one needs the
-utility ``inspect.getfullargspec``, new in Python 3:
+utility ``inspect.getfullargspec``, new in Python 3 (and deprecated
+in favor of ``inspect.signature`` in Python 3.5):
.. code-block:: python
@@ -677,9 +678,8 @@ a tuple of defaults:
>>> f1 = FunctionMaker.create(
... 'f1(a, b)', 'f(a, b)', dict(f=f), addsource=True, defaults=(None,))
- >>> import inspect
- >>> print(inspect.getargspec(f1))
- ArgSpec(args=['a', 'b'], varargs=None, keywords=None, defaults=(None,))
+ >>> print(getargspec(f1))
+ ArgSpec(args=['a', 'b'], varargs=None, varkw=None, defaults=(None,))
Getting the source code
@@ -710,6 +710,7 @@ source code which is probably not what you want:
.. code-block:: python
+ >>> import inspect
>>> print(inspect.getsource(example))
def wrapper(*args, **kw):
return func(*args, **kw)
diff --git a/src/decorator.py b/src/decorator.py
index bab05b4..2dd91ec 100644
--- a/src/decorator.py
+++ b/src/decorator.py
@@ -32,7 +32,6 @@ Decorator module, see http://pypi.python.org/pypi/decorator
for the documentation.
"""
from __future__ import print_function
-from abc import ABCMeta
__version__ = '4.0.0'
@@ -40,9 +39,16 @@ import re
import sys
import inspect
import itertools
+import collections
if sys.version >= '3':
- from inspect import getfullargspec
+ # getargspec has been deprecated in Python 3.5
+ ArgSpec = collections.namedtuple(
+ 'ArgSpec', 'args varargs varkw defaults')
+
+ def getargspec(f):
+ spec = inspect.getfullargspec(f)
+ return ArgSpec(spec.args, spec.varargs, spec.varkw, spec.defaults)
def get_init(cls):
return cls.__init__
@@ -61,9 +67,12 @@ else:
yield self.varkw
yield self.defaults
+ getargspec = inspect.getargspec
+
def get_init(cls):
return cls.__init__.__func__
+
DEF = re.compile('\s*def\s*([_\w][_\w\d]*)\s*\(')
@@ -85,7 +94,7 @@ class FunctionMaker(object):
self.doc = func.__doc__
self.module = func.__module__
if inspect.isfunction(func):
- argspec = getfullargspec(func)
+ argspec = inspect.getfullargspec(func)
self.annotations = getattr(func, '__annotations__', {})
for a in ('args', 'varargs', 'varkw', 'defaults', 'kwonlyargs',
'kwonlydefaults'):
@@ -223,7 +232,7 @@ def decorator(caller, _func=None):
callerfunc = get_init(caller)
doc = 'decorator(%s) converts functions/generators into ' \
'factories of %s objects' % (caller.__name__, caller.__name__)
- fun = getfullargspec(callerfunc).args[1] # second arg
+ fun = inspect.getfullargspec(callerfunc).args[1] # second arg
elif inspect.isfunction(caller):
if caller.__name__ == '<lambda>':
name = '_lambda_'
@@ -231,12 +240,12 @@ def decorator(caller, _func=None):
name = caller.__name__
callerfunc = caller
doc = caller.__doc__
- fun = getfullargspec(callerfunc).args[0] # first arg
+ fun = inspect.getfullargspec(callerfunc).args[0] # first arg
else: # assume caller is an object with a __call__ method
name = caller.__class__.__name__.lower()
callerfunc = caller.__call__.__func__
doc = caller.__call__.__doc__
- fun = getfullargspec(callerfunc).args[1] # second arg
+ fun = inspect.getfullargspec(callerfunc).args[1] # second arg
evaldict = callerfunc.__globals__.copy()
evaldict['_call_'] = caller
evaldict['_decorate_'] = decorate
@@ -262,7 +271,7 @@ class ContextManager(_GeneratorContextManager):
func, "with _self_: return _func_(%(shortsignature)s)",
dict(_self_=self, _func_=func), __wrapped__=func)
-init = getfullargspec(_GeneratorContextManager.__init__)
+init = inspect.getfullargspec(_GeneratorContextManager.__init__)
n_args = len(init.args)
if n_args == 2 and not init.varargs: # (self, genobj) Python 2.7
def __init__(self, g, *a, **k):
@@ -316,7 +325,7 @@ def dispatch_on(*dispatch_args):
"""Decorator turning a function into a generic function"""
# first check the dispatch arguments
- argset = set(getfullargspec(func).args)
+ argset = set(inspect.getfullargspec(func).args)
if not set(dispatch_args) <= argset:
raise NameError('Unknown dispatch arguments %s' % dispatch_str)
@@ -324,7 +333,7 @@ def dispatch_on(*dispatch_args):
def vancestors(*types):
"""
- Get a list of lists of virtual ancestors for the given types
+ Get a list of sets of virtual ancestors for the given types
"""
check(types)
ras = [[] for _ in range(len(dispatch_args))]
@@ -334,9 +343,9 @@ def dispatch_on(*dispatch_args):
append(type_, ra)
return [set(ra) for ra in ras]
- def mros(*types):
+ def vmros(*types):
"""
- Get a list of MROs, one for each type
+ Get a list of virtual MROs, one for each type
"""
check(types)
lists = []
@@ -358,7 +367,7 @@ def dispatch_on(*dispatch_args):
check(types)
def dec(f):
- n_args = len(getfullargspec(f).args)
+ n_args = len(inspect.getfullargspec(f).args)
if n_args < len(dispatch_args):
raise TypeError(
'%s has not enough arguments (got %d, expected %d)' %
@@ -376,7 +385,7 @@ def dispatch_on(*dispatch_args):
pass
else:
return f(*args, **kw)
- for types_ in itertools.product(*mros(*types)):
+ for types_ in itertools.product(*vmros(*types)):
f = typemap.get(types_)
if f is not None:
return f(*args, **kw)
@@ -387,7 +396,7 @@ def dispatch_on(*dispatch_args):
return FunctionMaker.create(
func, 'return _f_(%s, %%(shortsignature)s)' % dispatch_str,
dict(_f_=_dispatch), register=register, default=func,
- typemap=typemap, vancestors=vancestors, mros=mros,
+ typemap=typemap, vancestors=vancestors, vmros=vmros,
__wrapped__=func)
gen_func_dec.__name__ = 'dispatch_on' + dispatch_str
diff --git a/src/tests/documentation.py b/src/tests/documentation.py
index e0bc070..89dd6ec 100644
--- a/src/tests/documentation.py
+++ b/src/tests/documentation.py
@@ -166,9 +166,9 @@ keyword arguments:
.. code-block:: python
- >>> from inspect import getargspec
+ >>> from decorator import getargspec
>>> print(getargspec(f1))
- ArgSpec(args=[], varargs='args', keywords='kw', defaults=None)
+ ArgSpec(args=[], varargs='args', varkw='kw', defaults=None)
This means that introspection tools such as *pydoc* will give
wrong informations about the signature of ``f1``, unless you are
@@ -240,7 +240,7 @@ The signature of ``heavy_computation`` is the one you would expect:
.. code-block:: python
>>> print(getargspec(heavy_computation))
- ArgSpec(args=[], varargs=None, keywords=None, defaults=None)
+ ArgSpec(args=[], varargs=None, varkw=None, defaults=None)
A ``trace`` decorator
------------------------------------------------------
@@ -273,7 +273,7 @@ and it that it has the correct signature:
.. code-block:: python
>>> print(getargspec(f1))
- ArgSpec(args=['x'], varargs=None, keywords=None, defaults=None)
+ ArgSpec(args=['x'], varargs=None, varkw=None, defaults=None)
The same decorator works with functions of any signature:
@@ -287,7 +287,7 @@ The same decorator works with functions of any signature:
calling f with args (0, 3, 2), {}
>>> print(getargspec(f))
- ArgSpec(args=['x', 'y', 'z'], varargs='args', keywords='kw', defaults=(1, 2))
+ ArgSpec(args=['x', 'y', 'z'], varargs='args', varkw='kw', defaults=(1, 2))
$FUNCTION_ANNOTATIONS
@@ -546,9 +546,8 @@ a tuple of defaults:
>>> f1 = FunctionMaker.create(
... 'f1(a, b)', 'f(a, b)', dict(f=f), addsource=True, defaults=(None,))
- >>> import inspect
- >>> print(inspect.getargspec(f1))
- ArgSpec(args=['a', 'b'], varargs=None, keywords=None, defaults=(None,))
+ >>> print(getargspec(f1))
+ ArgSpec(args=['a', 'b'], varargs=None, varkw=None, defaults=(None,))
Getting the source code
@@ -569,6 +568,7 @@ $$example
.. code-block:: python
+ >>> import inspect
>>> print(inspect.getsource(example))
def wrapper(*args, **kw):
return func(*args, **kw)
@@ -1045,7 +1045,8 @@ annotations. Here is an example:
... pass
In order to introspect functions with annotations, one needs the
-utility ``inspect.getfullargspec``, new in Python 3:
+utility ``inspect.getfullargspec``, new in Python 3 (and deprecated
+in favor of ``inspect.signature`` in Python 3.5):
.. code-block:: python