Source code for afnio.cognitive.modules.split
from typing import List, Optional, Union
from afnio._variable import Variable
from afnio.autodiff.basic_ops import Split as SplitOp
from .module import Module
[docs]
class Split(Module):
"""
Splits a single input Variable into multiple output Variables.
This module utilizes the `Split` operation from `afnio.autodiff.basic_ops`.
It supports string data types, splitting the string data of the input Variable
based on a specified delimiter and an optional maximum number of splits.
Note:
This module does not have any trainable parameters.
Example:
>>> import afnio as hf
>>> from afnio import cognitive as cog
>>> class Splitter(cog.Module):
... def __init__(self):
... super().__init__()
... self.split = cog.Split()
>>> def forward(self, x):
... return self.split(x, " ", 1)
>>> input = hf.Variable(data="Afnio is great!", role="sentence")
>>> splitter = Splitter()
>>> result = splitter(input)
>>> print([r.data for r in result])
['Afnio', 'is great!']
>>> print([r.role for r in result])
['split part 0 of sentence', 'split part 1 of sentence']
Raises:
TypeError: If the input is not an instance of `Variable`.
TypeError: If the input Variable's data is not a string.
See Also:
:class:`afnio.autodiff.basic_ops.Split` for the underlying operation.
"""
sep: Optional[Union[str, Variable]]
maxsplit: Optional[Union[int, Variable]]
def __init__(self):
super().__init__()
self.register_buffer("sep", None)
self.register_buffer("maxsplit", None)
[docs]
def forward(
self,
x: Variable,
sep: Optional[Union[str, Variable]] = None,
maxsplit: Optional[Union[int, Variable]] = -1,
) -> List[Variable]:
self.sep = (
None
if sep is None
else (sep if isinstance(sep, Variable) else Variable(sep))
)
self.maxsplit = (
None
if maxsplit is None
else (maxsplit if isinstance(maxsplit, Variable) else Variable(maxsplit))
)
return SplitOp.apply(x, self.sep, self.maxsplit)