This idea looks interesting, but I think that having a pipeline method like
`Sequential in PyTorch` would be more intuitive than this approach.

On Thu, Feb 15, 2024, 8:48 PM <d.lenar...@gmail.com> wrote:

> Hello Numpy community,
>
> I'm proposing the introduction of a `pipe` method for NumPy arrays to
> enhance their usability and expressiveness.
> Similar to other data processing libraries like pandas, a `pipe` method
> would allow users to chain operations together in a more readable and
> intuitive manner.
> Consider the following examples where method chaining with `pipe` can
> improve code readability compared to traditional NumPy code:
>
> # ********************************************************************
> # Class PipeableArray just for illustration
>
> import numpy as np
>
> class PipeableArray:
>     def __init__(self, array: np.ndarray):
>         self.array = array
>
>     def pipe(self, func, *args, **kwargs):
>         """Apply function and return the result wrapped in
> PipeableArray."""
>         try:
>             result = func(self.array, *args, **kwargs)
>             return PipeableArray(result)
>         except Exception as exc:
>             print('Ups, something went wrong...')
>
>     def __repr__(self):
>         return repr(self.array)
>
> # ********************************************************************
> # Original code using traditional NumPy chaining
> arr = np.array([1, 2, 3, 4, 5])
> arr = np.square(arr)
> arr = np.log(arr)
> arr = np.cumsum(arr)
>
> # Original code using traditional NumPy nested functions
> arr = np.arange(1., 5.)
> result = np.cumsum(np.log(np.square(arr)))
>
> # ********************************************************************
> # Proposed Numpy method chaining using a new pipe method
>
> arr = PipeableArray(np.arange(1., 5.))
> result = (arr
>           .pipe(np.square)
>           .pipe(np.log)
>           .pipe(np.cumsum)
> )
> # ********************************************************************
>
> Benefits:
> - Readability: Method chaining with pipe offers a more readable and
> intuitive way to express complex data transformations, making the intended
> data processing pipeline easier to understand.
> - Customization: The pipe method allows users to chain custom functions or
> already implemented NumPy operations seamlessly.
> - Modularity: Users can define reusable functions and chain them together
> using pipe, leading to cleaner and more maintainable code.
> - Consistency: Introducing a pipe method in NumPy aligns with similar
> functionality available in other libraries like pandas, polars, etc.
> - Optimization: While NumPy may not currently optimize chained
> expressions, the introduction of pipe lays the groundwork for potential
> future optimizations with lazy evaluation.
>
> I believe this enhancement could benefit the NumPy community by providing
> a more flexible and expressive way to work with arrays.
> I'd love to see such a feature in Numpy and like to hear your thoughts on
> this proposal.
>
> Best regards,
> Oyibo
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: rakshitsingh...@gmail.com
>
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to