On 09.05.20 12:18, Alex Hall wrote:
On Sat, May 9, 2020 at 11:57 AM Dominik Vilsmeier
mailto:dominik.vilsmeier@gmx.de> wrote: So as a practical step forward, what about providing a wrapper type which performs all operations elementwise on the operands. So for example:
if all(elementwise(chars) == string): ...
Here the `elementwise(chars) == string` part returns a generator which performs the `==` comparison element-by-element.
Now `==` has returned an object that's always truthy, which is pretty dangerous.
That can be resolved by returning a custom generator type which implements `def __bool__(self): raise TypeError('missing r.h.s. operand')`.
This doesn't perform any length checks yet, so as a bonus one could add an `all` property:
if elementwise(chars).all == string: ...
This is now basically numpy.
``` In[14]: eq = numpy.array([1, 2, 3]) == [1, 2, 4] In[15]: eq Out[15]: array([ True, True, False]) In[16]: eq.all() Out[16]: False In[17]: eq.any() Out[17]: True In[18]: bool(eq) Traceback (most recent call last): ... ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() ```
I've used number instead of strings because numpy treats strings as units instead of iterables for this kind of purpose, so you'd have to do some extra wrapping in lists to explicitly ask for character comparisons.
Actually I took some inspiration from Numpy but the advantage is of course not having to install Numpy. The thus provided functionality is only a very small subset of what Numpy provides.