Source code for redex.combinator._dup
"""The duplicate combinator."""
from redex.stack import stackmethod, verify_stack_size, Stack
from redex.function import Signature
from redex.combinator._base import Combinator
# pylint: disable=too-few-public-methods
[docs]class Dup(Combinator):
"""The duplicate combinator."""
@stackmethod
def __call__(self, stack: Stack) -> Stack:
verify_stack_size(self, stack, self.signature)
n_in = self.signature.n_in
head, tail = stack[:n_in], stack[n_in:]
return (*head, *head, *tail)
[docs]def dup(n_in: int = 1) -> Dup:
"""Creates a duplicate combinator.
The combinator makes a copy of inputs.
>>> from redex import combinator as cb
>>> dup = cb.dup()
>>> dup(1) == (1, 1)
True
Args:
n_in: a number of inputs.
Returns:
a combinator.
"""
return Dup(signature=Signature(n_in=n_in, n_out=n_in * 2))