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.lenard80@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-leave@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: rakshitsingh421@gmail.com