diff options
36 files changed, 43 insertions, 43 deletions
diff --git a/Doc/c-api/method.rst b/Doc/c-api/method.rst index 27f9576332..acc81e4814 100644 --- a/Doc/c-api/method.rst +++ b/Doc/c-api/method.rst @@ -27,7 +27,7 @@ to bind a :c:data:`PyCFunction` to a class object. It replaces the former call .. c:function:: PyObject* PyInstanceMethod_New(PyObject *func) Return a new instance method object, with *func* being any callable object - *func* is is the function that will be called when the instance method is + *func* is the function that will be called when the instance method is called. @@ -70,7 +70,7 @@ no longer available. .. c:function:: PyObject* PyMethod_New(PyObject *func, PyObject *self) Return a new method object, with *func* being any callable object and *self* - the instance the method should be bound. *func* is is the function that will + the instance the method should be bound. *func* is the function that will be called when the method is called. *self* must not be *NULL*. diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst index e3d41ccb89..b3def22afa 100644 --- a/Doc/distutils/apiref.rst +++ b/Doc/distutils/apiref.rst @@ -1745,7 +1745,7 @@ Subclasses of :class:`Command` must define the following methods. Set final values for all the options that this command supports. This is always called as late as possible, ie. after any option assignments from the command-line or from other commands have been done. Thus, this is the place - to to code option dependencies: if *foo* depends on *bar*, then it is safe to + to code option dependencies: if *foo* depends on *bar*, then it is safe to set *foo* from *bar* as long as *foo* still has the same value it was assigned in :meth:`initialize_options`. diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst index c201e87dcb..0bd7bb3479 100644 --- a/Doc/howto/logging-cookbook.rst +++ b/Doc/howto/logging-cookbook.rst @@ -960,7 +960,7 @@ and each time it reaches the size limit it is renamed with the suffix ``.1``. Each of the existing backup files is renamed to increment the suffix (``.1`` becomes ``.2``, etc.) and the ``.6`` file is erased. -Obviously this example sets the log length much much too small as an extreme +Obviously this example sets the log length much too small as an extreme example. You would want to set *maxBytes* to an appropriate value. .. _zeromq-handlers: diff --git a/Doc/howto/pyporting.rst b/Doc/howto/pyporting.rst index 124ef33ae4..309f3f7a3a 100644 --- a/Doc/howto/pyporting.rst +++ b/Doc/howto/pyporting.rst @@ -328,7 +328,7 @@ the bytes/string dichotomy. Because Python 2 allowed the ``str`` type to hold textual data, people have over the years been rather loose in their delineation of what ``str`` instances held text compared to bytes. In Python 3 you cannot be so care-free anymore and need to properly handle the difference. The key -handling this issue to to make sure that **every** string literal in your +handling this issue to make sure that **every** string literal in your Python 2 code is either syntactically of functionally marked as either bytes or text data. After this is done you then need to make sure your APIs are designed to either handle a specific type or made to be properly polymorphic. diff --git a/Doc/howto/webservers.rst b/Doc/howto/webservers.rst index c4ac2b2f78..74cdf4b973 100644 --- a/Doc/howto/webservers.rst +++ b/Doc/howto/webservers.rst @@ -264,7 +264,7 @@ used for the deployment of WSGI applications. * `FastCGI, SCGI, and Apache: Background and Future <http://www.vmunix.com/mark/blog/archives/2006/01/02/fastcgi-scgi-and-apache-background-and-future/>`_ - is a discussion on why the concept of FastCGI and SCGI is better that that + is a discussion on why the concept of FastCGI and SCGI is better than that of mod_python. diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst index bf1fe2c6c0..e512bf1b64 100644 --- a/Doc/library/collections.rst +++ b/Doc/library/collections.rst @@ -191,7 +191,7 @@ counts, but the output will exclude results with counts of zero or less. * The multiset methods are designed only for use cases with positive values. The inputs may be negative or zero, but only outputs with positive values are created. There are no type restrictions, but the value type needs to - support support addition, subtraction, and comparison. + support addition, subtraction, and comparison. * The :meth:`elements` method requires integer counts. It ignores zero and negative counts. diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst index 2359dd1ad0..29ffc0d057 100644 --- a/Doc/library/concurrent.futures.rst +++ b/Doc/library/concurrent.futures.rst @@ -14,7 +14,7 @@ and :source:`Lib/concurrent/futures/process.py` The :mod:`concurrent.futures` module provides a high-level interface for asynchronously executing callables. -The asynchronous execution can be be performed with threads, using +The asynchronous execution can be performed with threads, using :class:`ThreadPoolExecutor`, or separate processes, using :class:`ProcessPoolExecutor`. Both implement the same interface, which is defined by the abstract :class:`Executor` class. diff --git a/Doc/library/ctypes.rst b/Doc/library/ctypes.rst index b868a952f7..fce59135ac 100644 --- a/Doc/library/ctypes.rst +++ b/Doc/library/ctypes.rst @@ -1958,7 +1958,7 @@ Utility functions .. function:: string_at(address, size=-1) - This function returns the C string starting at memory address address as a bytes + This function returns the C string starting at memory address *address* as a bytes object. If size is specified, it is used as size, otherwise the string is assumed to be zero-terminated. diff --git a/Doc/library/email.message.rst b/Doc/library/email.message.rst index 1e6a485353..3e632581b7 100644 --- a/Doc/library/email.message.rst +++ b/Doc/library/email.message.rst @@ -291,7 +291,7 @@ Here are the methods of the :class:`Message` class: Content-Disposition: attachment; filename="bud.gif" - An example with with non-ASCII characters:: + An example with non-ASCII characters:: msg.add_header('Content-Disposition', 'attachment', filename=('iso-8859-1', '', 'Fußballer.ppt')) diff --git a/Doc/library/functions.rst b/Doc/library/functions.rst index 4ed3ec5d97..b44ed9928e 100644 --- a/Doc/library/functions.rst +++ b/Doc/library/functions.rst @@ -828,7 +828,7 @@ are always available. They are listed here in alphabetical order. .. note:: Python doesn't depend on the underlying operating system's notion of text - files; all the the processing is done by Python itself, and is therefore + files; all the processing is done by Python itself, and is therefore platform-independent. *buffering* is an optional integer used to set the buffering policy. Pass 0 diff --git a/Doc/library/http.client.rst b/Doc/library/http.client.rst index 9b1ab0fdb2..c1ce15bddc 100644 --- a/Doc/library/http.client.rst +++ b/Doc/library/http.client.rst @@ -435,7 +435,7 @@ HTTPConnection Objects Set the host and the port for HTTP Connect Tunnelling. Normally used when it is required to a HTTPS Connection through a proxy server. - The headers argument should be a mapping of extra HTTP headers to to sent + The headers argument should be a mapping of extra HTTP headers to sent with the CONNECT request. .. versionadded:: 3.2 diff --git a/Doc/library/mailbox.rst b/Doc/library/mailbox.rst index ff8cfea403..83a590ee68 100644 --- a/Doc/library/mailbox.rst +++ b/Doc/library/mailbox.rst @@ -780,7 +780,7 @@ Maildir, mbox, MH, Babyl, and MMDF. There is no requirement that :class:`Message` instances be used to represent messages retrieved using :class:`Mailbox` instances. In some situations, the time and memory required to generate :class:`Message` representations might - not not acceptable. For such situations, :class:`Mailbox` instances also + not be acceptable. For such situations, :class:`Mailbox` instances also offer string and file-like representations, and a custom message factory may be specified when a :class:`Mailbox` instance is initialized. diff --git a/Doc/library/mmap.rst b/Doc/library/mmap.rst index 6a74a14351..5f0f004e0c 100644 --- a/Doc/library/mmap.rst +++ b/Doc/library/mmap.rst @@ -259,7 +259,7 @@ To map anonymous memory, -1 should be passed as the fileno along with the length .. method:: write_byte(byte) - Write the the integer *byte* into memory at the current + Write the integer *byte* into memory at the current position of the file pointer; the file position is advanced by ``1``. If the mmap was created with :const:`ACCESS_READ`, then writing to it will raise a :exc:`TypeError` exception. diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst index 78e3e951b4..d8a554d07a 100644 --- a/Doc/library/multiprocessing.rst +++ b/Doc/library/multiprocessing.rst @@ -1494,7 +1494,7 @@ itself. This means, for example, that one shared object can contain a second: a new shared object -- see documentation for the *method_to_typeid* argument of :meth:`BaseManager.register`. - If an exception is raised by the call, then then is re-raised by + If an exception is raised by the call, then is re-raised by :meth:`_callmethod`. If some other exception is raised in the manager's process then this is converted into a :exc:`RemoteError` exception and is raised by :meth:`_callmethod`. @@ -1631,7 +1631,7 @@ with the :class:`Pool` class. The *chunksize* argument is the same as the one used by the :meth:`.map` method. For very long iterables using a large value for *chunksize* can - make make the job complete **much** faster than using the default value of + make the job complete **much** faster than using the default value of ``1``. Also if *chunksize* is ``1`` then the :meth:`!next` method of the iterator diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 32ae7244e3..786bb04290 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -243,7 +243,7 @@ Connection Objects .. method:: Connection.commit() This method commits the current transaction. If you don't call this method, - anything you did since the last call to ``commit()`` is not visible from from + anything you did since the last call to ``commit()`` is not visible from other database connections. If you wonder why you don't see the data you've written to the database, please check you didn't forget to call this method. diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index f98a5f1178..3692b5655d 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -1117,7 +1117,7 @@ functions based on regular expressions. characters and there is at least one character, false otherwise. Decimal characters are those from general category "Nd". This category includes digit characters, and all characters - that that can be used to form decimal-radix numbers, e.g. U+0660, + that can be used to form decimal-radix numbers, e.g. U+0660, ARABIC-INDIC DIGIT ZERO. diff --git a/Doc/library/string.rst b/Doc/library/string.rst index 78f2b4ded3..56a2a3401b 100644 --- a/Doc/library/string.rst +++ b/Doc/library/string.rst @@ -211,7 +211,7 @@ by a colon ``':'``. These specify a non-default format for the replacement valu See also the :ref:`formatspec` section. -The *field_name* itself begins with an *arg_name* that is either either a number or a +The *field_name* itself begins with an *arg_name* that is either a number or a keyword. If it's a number, it refers to a positional argument, and if it's a keyword, it refers to a named keyword argument. If the numerical arg_names in a format string are 0, 1, 2, ... in sequence, they can all be omitted (not just some) diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst index 5f1b9bfb06..1f1d775c70 100644 --- a/Doc/library/threading.rst +++ b/Doc/library/threading.rst @@ -864,7 +864,7 @@ As an example, here is a simple way to synchronize a client and server thread:: Pass the barrier. When all the threads party to the barrier have called this function, they are all released simultaneously. If a *timeout* is - provided, is is used in preference to any that was supplied to the class + provided, it is used in preference to any that was supplied to the class constructor. The return value is an integer in the range 0 to *parties* -- 1, different diff --git a/Doc/library/tkinter.ttk.rst b/Doc/library/tkinter.ttk.rst index 7bf39b3109..f70d1634a1 100644 --- a/Doc/library/tkinter.ttk.rst +++ b/Doc/library/tkinter.ttk.rst @@ -1240,7 +1240,7 @@ option. If you don't know the class name of a widget, use the method *layoutspec*, if specified, is expected to be a list or some other sequence type (excluding strings), where each item should be a tuple and the first item is the layout name and the second item should have the - format described described in `Layouts`_. + format described in `Layouts`_. To understand the format, see the following example (it is not intended to do anything useful):: diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index 8151a0a321..e7a6f1858c 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -478,7 +478,7 @@ value --- this is a syntactic restriction that is not expressed by the grammar. **Default parameter values are evaluated when the function definition is executed.** This means that the expression is evaluated once, when the function -is defined, and that that same "pre-computed" value is used for each call. This +is defined, and that the same "pre-computed" value is used for each call. This is especially important to understand when a default parameter is a mutable object, such as a list or a dictionary: if the function modifies the object (e.g. by appending an item to a list), the default value is in effect modified. diff --git a/Doc/reference/toplevel_components.rst b/Doc/reference/toplevel_components.rst index 21f801c5fa..f4bc71f07b 100644 --- a/Doc/reference/toplevel_components.rst +++ b/Doc/reference/toplevel_components.rst @@ -111,6 +111,6 @@ string argument to :func:`eval` must have the following form: single: input; raw single: readline() (file method) -Note: to read 'raw' input line without interpretation, you can use the the +Note: to read 'raw' input line without interpretation, you can use the :meth:`readline` method of file objects, including ``sys.stdin``. diff --git a/Doc/tutorial/floatingpoint.rst b/Doc/tutorial/floatingpoint.rst index 863fb28c75..9c3c1435c3 100644 --- a/Doc/tutorial/floatingpoint.rst +++ b/Doc/tutorial/floatingpoint.rst @@ -92,7 +92,7 @@ thing in all languages that support your hardware's floating-point arithmetic (although some languages may not *display* the difference by default, or in all output modes). -For more pleasant output, you may may wish to use string formatting to produce a limited number of significant digits:: +For more pleasant output, you may wish to use string formatting to produce a limited number of significant digits:: >>> format(math.pi, '.12g') # give 12 significant digits '3.14159265359' diff --git a/Doc/whatsnew/2.4.rst b/Doc/whatsnew/2.4.rst index c52b5fb70d..d94e66f74e 100644 --- a/Doc/whatsnew/2.4.rst +++ b/Doc/whatsnew/2.4.rst @@ -947,7 +947,7 @@ Optimizations :meth:`__len__` method. (Contributed by Raymond Hettinger.) * The methods :meth:`list.__getitem__`, :meth:`dict.__getitem__`, and - :meth:`dict.__contains__` are are now implemented as :class:`method_descriptor` + :meth:`dict.__contains__` are now implemented as :class:`method_descriptor` objects rather than :class:`wrapper_descriptor` objects. This form of access doubles their performance and makes them more suitable for use as arguments to functionals: ``map(mydict.__getitem__, keylist)``. (Contributed by Raymond diff --git a/Lib/configparser.py b/Lib/configparser.py index 12ba5ad81c..d148b886a2 100644 --- a/Lib/configparser.py +++ b/Lib/configparser.py @@ -381,7 +381,7 @@ class BasicInterpolation(Interpolation): would resolve the "%(dir)s" to the value of dir. All reference expansions are done late, on demand. If a user needs to use a bare % in - a configuration file, she can escape it by writing %%. Other other % usage + a configuration file, she can escape it by writing %%. Other % usage is considered a user error and raises `InterpolationSyntaxError'.""" _KEYCRE = re.compile(r"%\(([^)]+)\)s") diff --git a/Lib/datetime.py b/Lib/datetime.py index 1ae7cb5305..65f95d2030 100644 --- a/Lib/datetime.py +++ b/Lib/datetime.py @@ -2057,7 +2057,7 @@ z' = z + z.d = 1:MM then, and z'.d=0, and z'.d - z.d = -60 != 0 so [8] Because we know z.d said z was in daylight time (else [5] would have held and we would have stopped then), and we know z.d != z'.d (else [8] would have held -and we we have stopped then), and there are only 2 possible values dst() can +and we have stopped then), and there are only 2 possible values dst() can return in Eastern, it follows that z'.d must be 0 (which it is in the example, but the reasoning doesn't depend on the example -- it depends on there being two possible dst() outcomes, one zero and the other non-zero). Therefore diff --git a/Lib/http/cookiejar.py b/Lib/http/cookiejar.py index 9d798e8127..97383d603e 100644 --- a/Lib/http/cookiejar.py +++ b/Lib/http/cookiejar.py @@ -1020,7 +1020,7 @@ class DefaultCookiePolicy(CookiePolicy): (not erhn.startswith(".") and not ("."+erhn).endswith(domain))): _debug(" effective request-host %s (even with added " - "initial dot) does not end end with %s", + "initial dot) does not end with %s", erhn, domain) return False if (cookie.version > 0 or diff --git a/Lib/msilib/schema.py b/Lib/msilib/schema.py index 379f1ef481..a9e167918a 100644 --- a/Lib/msilib/schema.py +++ b/Lib/msilib/schema.py @@ -958,7 +958,7 @@ _Validation_records = [ ('ServiceInstall','StartType','N',0,4,None, None, None, None, 'Type of the service',), ('Shortcut','Name','N',None, None, None, None, 'Filename',None, 'The name of the shortcut to be created.',), ('Shortcut','Description','Y',None, None, None, None, 'Text',None, 'The description for the shortcut.',), -('Shortcut','Component_','N',None, None, 'Component',1,'Identifier',None, 'Foreign key into the Component table denoting the component whose selection gates the the shortcut creation/deletion.',), +('Shortcut','Component_','N',None, None, 'Component',1,'Identifier',None, 'Foreign key into the Component table denoting the component whose selection gates the shortcut creation/deletion.',), ('Shortcut','Icon_','Y',None, None, 'Icon',1,'Identifier',None, 'Foreign key into the File table denoting the external icon file for the shortcut.',), ('Shortcut','IconIndex','Y',-32767,32767,None, None, None, None, 'The icon index for the shortcut.',), ('Shortcut','Directory_','N',None, None, 'Directory',1,'Identifier',None, 'Foreign key into the Directory table denoting the directory where the shortcut file is created.',), diff --git a/Lib/multiprocessing/__init__.py b/Lib/multiprocessing/__init__.py index deb031c367..e6e16c8322 100644 --- a/Lib/multiprocessing/__init__.py +++ b/Lib/multiprocessing/__init__.py @@ -9,7 +9,7 @@ # wrapper for 'threading'. # # Try calling `multiprocessing.doc.main()` to read the html -# documentation in in a webbrowser. +# documentation in a webbrowser. # # # Copyright (c) 2006-2008, R Oudkerk diff --git a/Lib/sched.py b/Lib/sched.py index f6a699c916..a119892c3f 100644 --- a/Lib/sched.py +++ b/Lib/sched.py @@ -94,7 +94,7 @@ class scheduler: restarted. It is legal for both the delay function and the action - function to to modify the queue or to raise an exception; + function to modify the queue or to raise an exception; exceptions are not caught but the scheduler's state remains well-defined so run() may be called again. diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py index 03cd927498..83bb0a9cb2 100644 --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -878,7 +878,7 @@ class HandlerTests(unittest.TestCase): def test_http_doubleslash(self): # Checks the presence of any unnecessary double slash in url does not # break anything. Previously, a double slash directly after the host - # could could cause incorrect parsing. + # could cause incorrect parsing. h = urllib.request.AbstractHTTPHandler() o = h.parent = MockOpener() diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py index 4de190b99a..a6e7ee8e1c 100644 --- a/Lib/test/test_urlparse.py +++ b/Lib/test/test_urlparse.py @@ -9,7 +9,7 @@ RFC2396_BASE = "http://a/b/c/d;p?q" RFC3986_BASE = 'http://a/b/c/d;p?q' SIMPLE_BASE = 'http://a/b/c/d' -# A list of test cases. Each test case is a a two-tuple that contains +# A list of test cases. Each test case is a two-tuple that contains # a string with the query and a dictionary with the expected result. parse_qsl_test_cases = [ diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py index 04e762ad74..4ccc6ff9b6 100644 --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -295,7 +295,7 @@ def http_server(evt, numrequests, requestHandler=None): global ADDR, PORT, URL ADDR, PORT = serv.socket.getsockname() #connect to IP address directly. This avoids socket.create_connection() - #trying to connect to to "localhost" using all address families, which + #trying to connect to "localhost" using all address families, which #causes slowdown e.g. on vista which supports AF_INET6. The server listens #on AF_INET only. URL = "http://%s:%d"%(ADDR, PORT) @@ -354,7 +354,7 @@ def http_multi_server(evt, numrequests, requestHandler=None): global ADDR, PORT, URL ADDR, PORT = serv.socket.getsockname() #connect to IP address directly. This avoids socket.create_connection() - #trying to connect to to "localhost" using all address families, which + #trying to connect to "localhost" using all address families, which #causes slowdown e.g. on vista which supports AF_INET6. The server listens #on AF_INET only. URL = "http://%s:%d"%(ADDR, PORT) diff --git a/Lib/threading.py b/Lib/threading.py index d260983452..6653f6ef65 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -435,7 +435,7 @@ class _Event(_Verbose): # to be cyclic. Threads are not allowed into it until it has fully drained # since the previous cycle. In addition, a 'resetting' state exists which is # similar to 'draining' except that threads leave with a BrokenBarrierError, -# and a 'broken' state in which all threads get get the exception. +# and a 'broken' state in which all threads get the exception. class Barrier(_Verbose): """ Barrier. Useful for synchronizing a fixed number of threads diff --git a/Lib/tkinter/tix.py b/Lib/tkinter/tix.py index be44a09e33..4884e2260b 100644 --- a/Lib/tkinter/tix.py +++ b/Lib/tkinter/tix.py @@ -1554,8 +1554,8 @@ class Tree(TixWidget): '''This command is used to indicate whether the entry given by entryPath has children entries and whether the children are visible. mode must be one of open, close or none. If mode is set to open, a (+) - indicator is drawn next the the entry. If mode is set to close, a (-) - indicator is drawn next the the entry. If mode is set to none, no + indicator is drawn next the entry. If mode is set to close, a (-) + indicator is drawn next the entry. If mode is set to none, no indicators will be drawn for this entry. The default mode is none. The open mode indicates the entry has hidden children and this entry can be opened by the user. The close mode indicates that all the children of the @@ -1873,13 +1873,13 @@ class Grid(TixWidget, XView, YView): return self.tk.call(self, 'info', 'bbox', x, y) def move_column(self, from_, to, offset): - """Moves the the range of columns from position FROM through TO by + """Moves the range of columns from position FROM through TO by the distance indicated by OFFSET. For example, move_column(2, 4, 1) moves the columns 2,3,4 to columns 3,4,5.""" self.tk.call(self, 'move', 'column', from_, to, offset) def move_row(self, from_, to, offset): - """Moves the the range of rows from position FROM through TO by + """Moves the range of rows from position FROM through TO by the distance indicated by OFFSET. For example, move_row(2, 4, 1) moves the rows 2,3,4 to rows 3,4,5.""" self.tk.call(self, 'move', 'row', from_, to, offset) @@ -1938,7 +1938,7 @@ class Grid(TixWidget, XView, YView): pad0 pixels Specifies the paddings to the top of a row. pad1 pixels - Specifies the paddings to the the bottom of a row. + Specifies the paddings to the bottom of a row. size val Specifies the height of a row. Val may be: "auto" -- the height of the row is set the diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py index 1a6a9f46d0..928e1de781 100644 --- a/Lib/tkinter/ttk.py +++ b/Lib/tkinter/ttk.py @@ -37,7 +37,7 @@ def _load_tile(master): import os tilelib = os.environ.get('TILE_LIBRARY') if tilelib: - # append custom tile path to the the list of directories that + # append custom tile path to the list of directories that # Tcl uses when attempting to resolve packages with the package # command master.tk.eval( diff --git a/Lib/turtle.py b/Lib/turtle.py index 8fb366a7eb..420b552e9c 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -96,7 +96,7 @@ Roughly it has the following features added: docstrings to disc, so it can serve as a template for translations. Behind the scenes there are some features included with possible -extensions in in mind. These will be commented and documented elsewhere. +extensions in mind. These will be commented and documented elsewhere. """ |