Module hoshmap.value.ival
Expand source code
# Copyright (c) 2021. Davi Pereira dos Santos
# This file is part of the hoshmap project.
# Please respect the license - more about this in the section (*) below.
#
# hoshmap is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# hoshmap is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with hoshmap. If not, see <http://www.gnu.org/licenses/>.
#
# (*) Removing authorship by any means, e.g. by distribution of derived
# works or verbatim, obfuscated, compiled or rewritten versions of any
# part of this work is illegal and it is unethical regarding the effort and
# time spent here.
#
from functools import cached_property
from typing import Any
from hosh import Hosh
class iVal:
value: Any
hosh: Hosh
results: Any
caches: Any
@property
def isevaluated(self):
from hoshmap.value.lazyival import Unevaluated
return self.results[self.id] is not Unevaluated
def evaluate(self):
val = self.value
from hoshmap import Idict, FrozenIdict
if isinstance(val, (Idict, FrozenIdict)):
val.evaluate()
@cached_property
def id(self):
return self.hosh.id
@staticmethod
def handle_id(id):
"""
>>> iVal.handle_id("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg").id
'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg'
>>> from hosh import Hosh
>>> iVal.handle_id(Hosh.fromid("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg")).id
'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg'
"""
if isinstance(id, str):
return Hosh.fromid(id)
elif isinstance(id, Hosh):
return id
else: # pragma: no cover
raise Exception(f"Wrong id type: {type(id)}")
def __mul__(self, other):
return self.hosh * (other if isinstance(other, Hosh) else other.hosh)
def __rmul__(self, other):
return (other if isinstance(other, Hosh) else other.hosh) * self.hosh
Classes
class iVal-
Expand source code
class iVal: value: Any hosh: Hosh results: Any caches: Any @property def isevaluated(self): from hoshmap.value.lazyival import Unevaluated return self.results[self.id] is not Unevaluated def evaluate(self): val = self.value from hoshmap import Idict, FrozenIdict if isinstance(val, (Idict, FrozenIdict)): val.evaluate() @cached_property def id(self): return self.hosh.id @staticmethod def handle_id(id): """ >>> iVal.handle_id("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg").id 'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg' >>> from hosh import Hosh >>> iVal.handle_id(Hosh.fromid("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg")).id 'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg' """ if isinstance(id, str): return Hosh.fromid(id) elif isinstance(id, Hosh): return id else: # pragma: no cover raise Exception(f"Wrong id type: {type(id)}") def __mul__(self, other): return self.hosh * (other if isinstance(other, Hosh) else other.hosh) def __rmul__(self, other): return (other if isinstance(other, Hosh) else other.hosh) * self.hoshSubclasses
Class variables
var caches : Anyvar hosh : hosh.hosh_.Hoshvar results : Anyvar value : Any
Static methods
def handle_id(id)-
>>> iVal.handle_id("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg").id 'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg' >>> from hosh import Hosh >>> iVal.handle_id(Hosh.fromid("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg")).id 'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg'Expand source code
@staticmethod def handle_id(id): """ >>> iVal.handle_id("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg").id 'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg' >>> from hosh import Hosh >>> iVal.handle_id(Hosh.fromid("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg")).id 'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg' """ if isinstance(id, str): return Hosh.fromid(id) elif isinstance(id, Hosh): return id else: # pragma: no cover raise Exception(f"Wrong id type: {type(id)}")
Instance variables
var id-
Expand source code
def __get__(self, instance, owner=None): if instance is None: return self if self.attrname is None: raise TypeError( "Cannot use cached_property instance without calling __set_name__ on it.") try: cache = instance.__dict__ except AttributeError: # not all objects have __dict__ (e.g. class defines slots) msg = ( f"No '__dict__' attribute on {type(instance).__name__!r} " f"instance to cache {self.attrname!r} property." ) raise TypeError(msg) from None val = cache.get(self.attrname, _NOT_FOUND) if val is _NOT_FOUND: with self.lock: # check if another thread filled cache while we awaited lock val = cache.get(self.attrname, _NOT_FOUND) if val is _NOT_FOUND: val = self.func(instance) try: cache[self.attrname] = val except TypeError: msg = ( f"The '__dict__' attribute on {type(instance).__name__!r} instance " f"does not support item assignment for caching {self.attrname!r} property." ) raise TypeError(msg) from None return val var isevaluated-
Expand source code
@property def isevaluated(self): from hoshmap.value.lazyival import Unevaluated return self.results[self.id] is not Unevaluated
Methods
def evaluate(self)-
Expand source code
def evaluate(self): val = self.value from hoshmap import Idict, FrozenIdict if isinstance(val, (Idict, FrozenIdict)): val.evaluate()