General signature for factor creation that tries each of the factor creation types using duck typing

        :param args: The positional arguments
        :param kwargs: The named arguments
        :return: The created factor

def create_factor_general(self, *args, **kwargs):
        """
        General signature for factor creation that tries each of the factor creation types using duck typing

        :param args: The positional arguments
        :param kwargs: The named arguments
        :return: The created factor
        """
        try:
            return self.create_factor(*args, **kwargs)
        except TypeError:
            pass
        try:
            return self.create_multi_output_factor(*args, **kwargs)
        except TypeError:
            pass
        try:
            return self.create_node_creation_factor(*args, **kwargs)
        except TypeError:
            pass
        raise FactorDefinitionError("Could not find a matching signature")