[issue24133] Add 'composable' decorator to functools (with @ matrix multiplication syntax)

2015-05-06 Thread levkivskyi

New submission from levkivskyi:

The matrix multiplication operator @ is going to be introduced in Python 3.5 
and I am thinking about the following idea:

The semantics of matrix multiplication is the composition of the corresponding 
linear transformations.
A linear transformation is a particular example of a more general concept - 
functions.
The latter are frequently composed with (wrap) each other. For example:

plot(real(sqrt(data)))

However, it is not very readable in case of many wrapping layers. Therefore, it 
could be useful to employ
the matrix multiplication operator @ for indication of function composition. 
This could be done by such (simplified) decorator:

class composable:

def __init__(self, func):
self.func = func

def __call__(self, arg):
return self.func(arg)

def __matmul__(self, other):
def composition(*args, **kwargs):
return self.func(other(*args, **kwargs))
return composable(composition)

I think using such decorator with functions that are going to be deeply wrapped
could improve readability.
You could compare (note that only the outermost function should be decorated):

plot(sorted(sqrt(real(data_array vs. (plot @ sorted @ sqrt @ real) 
(data_array)

I think the latter is more readable, also compare

def sunique(lst):
return sorted(list(set(lst)))

vs.

sunique = sorted @ list @ set

Apart from readability, there are following pros of the proposed decorator:

1. Similar semantics as for matrix multiplication.
2. Same symbol for composition as for decorators.
3. The symbol @ resembles mathematical notation for function composition: ∘

I think it could be a good idea to add such a decorator to the stdlib functools 
module.

--
components: Library (Lib)
messages: 242653
nosy: levkivskyi
priority: normal
severity: normal
status: open
title: Add 'composable' decorator to functools (with @ matrix multiplication 
syntax)
type: enhancement
versions: Python 3.5

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24133
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue24133] Add 'composable' decorator to functools (with @ matrix multiplication syntax)

2015-05-06 Thread R. David Murray

R. David Murray added the comment:

This should be taken to python-ideas (and probably pypi) first.  You can reopen 
if there is agreement that this should be done.  IMO it should not be done for 
3.5 in any case.

--
nosy: +r.david.murray
resolution:  - later
stage:  - resolved
status: open - closed
versions: +Python 3.6 -Python 3.5

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue24133
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com