Source code for kif_lib.model.fingerprint

# Copyright (C) 2023-2024 IBM Corp.
# SPDX-License-Identifier: Apache-2.0

from collections.abc import Iterable
from typing import cast, NoReturn, Optional, Union

from .kif_object import KIF_Object, TCallable
from .snak import Snak
from .snak_set import SnakSet, TSnakSet
from .value import Entity, Property, Value

TFingerprint = Union['Fingerprint', Value, Snak, TSnakSet]
TEntityFingerprint = Union['EntityFingerprint', Entity, Snak, TSnakSet]
TPropertyFingerprint = Union['PropertyFingerprint', Property, Snak, TSnakSet]


[docs] class Fingerprint(KIF_Object): """Fingerprint. Parameters: arg1: Value or snak set. """ @classmethod def _check_arg_fingerprint( cls, arg: TFingerprint, function: Optional[Union[TCallable, str]] = None, name: Optional[str] = None, position: Optional[int] = None ) -> Union['Fingerprint', NoReturn]: return cls(cls._check_arg_isinstance( arg, (cls, Value, Snak, SnakSet, Iterable), function, name, position))
[docs] def __init__(self, arg1: TFingerprint): return super().__init__(arg1)
def _preprocess_arg(self, arg, i): if i == 1: if isinstance(arg, Fingerprint): return arg.args[0] elif isinstance(arg, Value): return arg elif isinstance(arg, Snak): return SnakSet(arg) else: return self._preprocess_arg_snak_set(arg, i) else: raise self._should_not_get_here() @property def value(self) -> Optional[Value]: """Fingerprint value.""" return self.get_value()
[docs] def get_value(self, default: Optional[Value] = None) -> Optional[Value]: """Gets fingerprint value. If fingerprint has no value, returns `default`. Parameters: default: Default. Returns: Fingerprint value or `default` (fingerprint has no value). """ val = self.args[0] return val if isinstance(val, Value) else default
@property def snak_set(self) -> Optional[SnakSet]: """Fingerprint snak set.""" return self.get_snak_set()
[docs] def get_snak_set( self, default: Optional[SnakSet] = None ) -> Optional[SnakSet]: """Gets fingerprint snak set. If fingerprint has no snak set, returns `default`. Parameters: default: Default. Returns: Fingerprint snak set or `default` (fingerprint has no snak set). """ snaks = self.args[0] return snaks if isinstance(snaks, SnakSet) else default
[docs] class EntityFingerprint(Fingerprint): """Entity fingerprint. Parameters: arg1: Entity or snak set. """ @classmethod def _check_arg_entity_fingerprint( cls, arg: TEntityFingerprint, function: Optional[Union[TCallable, str]] = None, name: Optional[str] = None, position: Optional[int] = None ) -> Union['EntityFingerprint', NoReturn]: return cls(cls._check_arg_isinstance( arg, (cls, Entity, SnakSet, Iterable), function, name, position))
[docs] def __init__(self, arg1: TEntityFingerprint): return super().__init__(arg1)
def _preprocess_arg(self, arg, i): if i == 1: if isinstance(arg, EntityFingerprint): return arg.args[0] elif isinstance(arg, Value): return self._preprocess_arg_entity(arg, i) elif isinstance(arg, Snak): return SnakSet(arg) else: return self._preprocess_arg_snak_set(arg, i) else: raise self._should_not_get_here() @property def entity(self) -> Optional[Entity]: """Fingerprint entity.""" return self.get_entity()
[docs] def get_entity( self, default: Optional[Entity] = None ) -> Optional[Entity]: """Gets fingerprint entity. If fingerprint has no entity, returns `default`. Parameters: default: Default. Returns: Fingerprint entity or `default` (fingerprint has no entity). """ return cast(Optional[Entity], self.get_value(default))
[docs] class PropertyFingerprint(Fingerprint): """Property fingerprint. Parameters: arg1: Property or snak set. """ @classmethod def _check_arg_property_fingerprint( cls, arg: TPropertyFingerprint, function: Optional[Union[TCallable, str]] = None, name: Optional[str] = None, position: Optional[int] = None ) -> Union['PropertyFingerprint', NoReturn]: return cls(cls._check_arg_isinstance( arg, (cls, Property, SnakSet, Iterable), function, name, position))
[docs] def __init__(self, arg1: TPropertyFingerprint): return super().__init__(arg1)
def _preprocess_arg(self, arg, i): if i == 1: if isinstance(arg, PropertyFingerprint): return arg.args[0] elif isinstance(arg, Value): return self._preprocess_arg_property(arg, i) elif isinstance(arg, Snak): return SnakSet(arg) else: return self._preprocess_arg_snak_set(arg, i) else: raise self._should_not_get_here() @property def property(self) -> Optional[Property]: """Fingerprint property.""" return self.get_property()
[docs] def get_property( self, default: Optional[Property] = None ) -> Optional[Property]: """Gets fingerprint property. If fingerprint has no property, returns `default`. Parameters: default: Default. Returns: Fingerprint property or `default` (fingerprint has no property). """ return cast(Optional[Property], self.get_value(default))