Source code for neuralogic.core.constructs.function.function

from typing import Optional

import jpype


[docs] class Function: __slots__ = "name", "operator", "can_flatten", "namespace" def __init__(self, name: str, *, namespace: str = "", operator: Optional[str] = None, can_flatten: bool = False): self.name: str = name.lower() self.operator: Optional[str] = operator self.can_flatten = can_flatten self.namespace = namespace def __str__(self): return self.name
[docs] def wrap(self, content: str) -> str: return f"{self.name}({content})"
[docs] def pretty_str(self) -> str: return str(self).capitalize()
def __call__(self, *args): if len(args) == 0: return self raise NotImplementedError
[docs] def is_parametrized(self) -> bool: return False
[docs] def rule_head_dependant(self) -> bool: return False
[docs] def process_head(self, head) -> "Function": raise NotImplementedError
[docs] def get(self): name = "".join(s.capitalize() for s in self.name.split("_")) formatted_namespace = self.namespace.format(name=name) return jpype.JClass(f"cz.cvut.fel.ida.algebra.functions.{formatted_namespace}")()
class TransformationFunction(Function): def __init__( self, name: str, *, namespace: str = "transformation.elementwise.{name}", operator: Optional[str] = None, can_flatten: bool = False, ): super().__init__(name, namespace=namespace, operator=operator, can_flatten=can_flatten) def __call__(self, relation: Optional = None, **kwargs): from neuralogic.core.constructs import relation as rel from neuralogic.core.constructs.function.function_container import FContainer if relation is None: return self if isinstance(relation, rel.BaseRelation) and not isinstance(relation, rel.WeightedRelation): if relation.negated or relation.function is not None: return FContainer((relation,), self) return relation.attach_activation_function(self) return FContainer(relation, self) class CombinationFunction(Function): def __init__( self, name: str, *, namespace: str = "combination.{name}", operator: Optional[str] = None, can_flatten: bool = False, ): super().__init__(name, namespace=namespace, operator=operator, can_flatten=can_flatten) def __call__(self, *relations): from neuralogic.core.constructs.function.function_container import FContainer if len(relations) == 0: return self return FContainer(relations, self) class AggregationFunction(Function): def get(self): raise NotImplementedError