Пример #1
0
def test_dyna():
    DynaDogHive = hive.dyna_hive("Dog", build_dog, declare_dog)

    print("\n#1: MetaArg=2, Arg='Jack'")
    d = DynaDogHive(2, "Jack")
    d.bark_0()
    d.bark_1()

    print("\n#2: MetaArg=1, Arg='Jill'")
    d = DynaDogHive(1, "Jill")
    d.bark_0()

    print("\n#3: MetaArg=1, Arg='Bobby'")
    d = DynaDogHive(1, "Bobby")
    d.bark_0()
Пример #2
0
            kwarg_fields.append(field_name)

        # Create IO
        attr = hive.attribute()
        setattr(i, field_name, attr)

        in_attr = hive.pull_in(attr)
        setattr(i, "{}_in".format(field_name), in_attr)

        setattr(ex, field_name, hive.antenna(in_attr))
        hive.trigger(i.result_out, in_attr, pretrigger=True)

    ex.result = hive.output(i.result_out)

    def do_format(self):
        args = [
            getattr(self, "_{}".format(attr_name))
            for attr_name in indexed_fields
        ]
        kwargs = {
            attr_name: getattr(self, "_{}".format(attr_name))
            for attr_name in kwarg_fields
        }
        self._result = formatter.format(format_string, *args, **kwargs)

    i.func = hive.modifier(do_format)
    hive.trigger(i.result_out, i.func, pretrigger=True)


Format = hive.dyna_hive("Format", build_format, declarator=declare_format)
Пример #3
0
import hive


def declare_sorted(meta_args):
    meta_args.data_type = hive.parameter('str', 'list', {'list', 'dict', 'set', 'tuple'})


def build_sorted(i, ex, args, meta_args):
    """Sort an iterable and output list"""
    args.reverse = hive.parameter('bool', False)
    i.reverse = hive.attribute('bool', args.reverse)

    i.result = hive.attribute('list')
    i.pull_result = hive.pull_out(i.result)
    ex.result = hive.output(i.pull_result)

    i.value = hive.attribute(meta_args.data_type)
    i.pull_value = hive.pull_in(i.value)
    ex.value = hive.antenna(i.pull_value)

    def sort(self):
        self._result = sorted(self._value, reverse=self._reverse)

    i.sort = hive.modifier(sort)
    hive.trigger(i.pull_result, i.pull_value, pretrigger=True)
    hive.trigger(i.pull_value, i.sort)


Sorted = hive.dyna_hive("Sorted", build_sorted, declare_sorted)
Пример #4
0
        i.push_key = hive.push_in(i.key)
        ex.key = hive.antenna(i.push_key)

        i.on_key_changed = hive.triggerable(cls.change_listener_keys)
        hive.trigger(i.push_key, i.on_key_changed)

        i.on_pressed = hive.triggerfunc()
        ex.on_pressed = hive.hook(i.on_pressed)

        i.on_released = hive.triggerfunc()
        ex.on_released = hive.hook(i.on_released)

        i.is_pressed = hive.property(cls, "is_pressed", "bool")
        i.pull_is_pressed = hive.pull_out(i.is_pressed)
        ex.is_pressed = hive.output(i.pull_is_pressed)

    else:
        ex.on_event = hive.socket(cls.add_any_listener, identifier="event.add_handler")

        i.key_pressed = hive.property(cls, 'key_pressed', data_type='str.keycode')
        i.pull_key_pressed = hive.push_out(i.key_pressed)
        ex.key_pressed = hive.output(i.pull_key_pressed)

        i.key_released = hive.property(cls, 'key_released', data_type='str.keycode')
        i.pull_key_released = hive.push_out(i.key_released)
        ex.key_released = hive.output(i.pull_key_released)


Keyboard = hive.dyna_hive("Keyboard", build_keyboard, declarator=declare_keyboard, builder_cls=Keyboard_)
Пример #5
0
def declare_filler(meta_args):
    meta_args.i = hive.parameter("int", 2)


def build_filler(i, ex, args, meta_args):
    print("NEW FILLER", meta_args.i)
    if meta_args.i:
        i.inner = FillerHive(meta_args.i - 1, import_namespace=True)
        ex.inner = hive.hook(i.inner)

    else:
        i.inner = DogHive(import_namespace=True, name="DOGGY")
        ex.inner = hive.hook(i.inner)


FillerHive = hive.dyna_hive("FillerHive", build_filler, declarator=declare_filler)


class House(object):

    def get_current_hive(self):
        return self


def build_house(cls, i, ex, args):
    ex.some_plugin = hive.plugin(cls.get_current_hive, identifier="get.house", data_type="float")

    # Auto connect
    i.filler = FillerHive()
    ex.filler = hive.hook(i.filler)
Пример #6
0
def declare_max(meta_args):
    meta_args.data_type = hive.parameter('str', 'float', options={'complex', 'int', 'float'})


def build_max(i, ex, args, meta_args):
    """Determine the maximum of two values"""
    i.a_value = hive.variable(meta_args.data_type)
    i.b_value = hive.variable(meta_args.data_type)
    i.value = hive.variable(meta_args.data_type)

    i.pull_a = hive.pull_in(i.a_value)
    i.pull_b = hive.pull_in(i.b_value)
    i.pull_value = hive.pull_out(i.value)

    ex.value = hive.output(i.pull_value)
    ex.a = hive.antenna(i.pull_a)
    ex.b = hive.antenna(i.pull_b)

    def do_max(self):
        self._value = max(self._a, self._b)

    i.do_max = hive.modifier(do_max)

    hive.trigger(i.pull_value, i.pull_a, pretrigger=True)
    hive.trigger(i.pull_a, i.pull_b)
    hive.trigger(i.pull_b, i.do_max)


Max = hive.dyna_hive("Max", build_max, declare_max)
Пример #7
0
def build_unpack_tuple(i, ex, args, meta_args):
    """Unpack a tuple from individual inputs"""
    i.tuple_ = hive.attribute('tuple')
    i.push_tuple = hive.push_in(i.tuple_)
    ex.tuple_ = hive.antenna(i.push_tuple)

    for index, data_type in enumerate(meta_args.types):
        attr = hive.attribute(data_type)
        setattr(i, "attr_{}".format(index), attr)

        pull_out = hive.pull_out(attr)
        setattr(i, "pull_out_{}".format(index), pull_out)

        setattr(ex, "item_{}".format(index), hive.output(pull_out))

    def do_unpack_tuple(self):
        tuple_ = self._tuple_
        data_types = meta_args.types

        assert len(tuple_) == len(data_types)

        for index, item in enumerate(tuple_):
            setattr(self, "_attr_{}".format(index), item)

    i.do_unpack_tuple = hive.modifier(do_unpack_tuple)
    hive.trigger(i.push_tuple, i.do_unpack_tuple)


UnpackTuple = hive.dyna_hive("UnpackTuple", build_unpack_tuple,
                             declare_unpack_tuple)
Пример #8
0
    """.format(argument_string)

    exec(func_body, locals(), globals())
    return func


def build_any(i, ex, args, meta_args):
    """Trigger output if any inputs evaluate to True"""
    # On pull
    func = build_any_func(meta_args.count)
    i.run_any = hive.modifier(func)

    i.result = hive.attribute(meta_args.data_type, False)
    i.pull_result = hive.pull_out(i.result)
    ex.result = hive.output(i.pull_result)

    hive.trigger(i.pull_result, i.run_any, pretrigger=True)

    for index, char in zip(range(meta_args.count), string.ascii_lowercase):
        variable = hive.attribute(meta_args.data_type, False)
        setattr(i, char, variable)

        pull_in = hive.pull_in(variable)
        setattr(i, "pull_{}".format(char), pull_in)

        antenna = hive.antenna(pull_in)
        setattr(ex, char, antenna)


Any = hive.dyna_hive("Any", build_any, declare_any)
Пример #9
0
    """Store the input value and output saved value.

    In pull mode, the trigger is used to update the internal value.
    In push mode, the trigger is used to output the internal value.

    Can be used to cache changing values
    """
    args.start_value = hive.parameter(meta_args.data_type, None)
    i.cached_value = hive.attribute(meta_args.data_type, args.start_value)

    if meta_args.mode == "push":
        i.push_value = hive.push_in(i.cached_value)
        ex.value = hive.antenna(i.push_value)

        i.push_cached_value = hive.push_out(i.cached_value)
        ex.cached_value = hive.output(i.push_cached_value)

        ex.output = hive.entry(i.push_cached_value)

    elif meta_args.mode == "pull":
        i.pull_value = hive.pull_in(i.cached_value)
        ex.value = hive.antenna(i.pull_value)

        i.pull_cached_value = hive.pull_out(i.cached_value)
        ex.cached_value = hive.output(i.pull_cached_value)

        ex.update_cache = hive.entry(i.pull_value)


Buffer = hive.dyna_hive("Buffer", build_buffer, declarator=declare_buffer)
Пример #10
0
            self._hive.entity_id()
            return dict(entity_id=self.entity_id)

        return {}


@factory.builds_external
def build_bind(cls, i, ex, args, meta_args):
    bind_mode = meta_args.bind_entity

    if bind_mode == 'bound':
        i.entity_id = hive.property(cls, "entity_id", "int.entity_id")
        i.pull_entity_id = hive.pull_in(i.entity_id)
        ex.entity_id = hive.antenna(i.pull_entity_id)


_BindEntity = hive.dyna_hive("BindEntity",
                             build_bind,
                             declarator=factory.external_declarator,
                             builder_cls=EntityCls)


def get_environment(meta_args):
    if meta_args.bind_entity != 'none':
        return _EntityEnvironment

    return None


bind_info = BindInfo("entity", _BindEntity, get_environment)
Пример #11
0
import hive


def declare_abs(meta_args):
    meta_args.data_type = hive.parameter('str',
                                         'int',
                                         options={'int', 'complex', 'float'})


def build_abs(i, ex, args, meta_args):
    """Calculate the absolute abs() of a value"""
    i.value = hive.variable(meta_args.data_type)
    i.pull_value = hive.pull_in(i.value)

    i.result = hive.variable(meta_args.data_type)
    i.pull_result = hive.pull_out(i.result)

    ex.value = hive.antenna(i.pull_value)
    ex.result = hive.output(i.pull_result)

    def do_abs(self):
        self._result = abs(self._value)

    i.do_abs = hive.modifier(do_abs)

    hive.trigger(i.pull_result, i.pull_value, pretrigger=True)
    hive.trigger(i.pull_value, i.do_abs)


Abs = hive.dyna_hive("Abs", build_abs, declarator=declare_abs)
Пример #12
0
    meta_args.mode = hive.parameter("str", "get", {'get', 'set'})
    meta_args.bound = hive.parameter("bool", True)


def build_visibility(cls, i, ex, args, meta_args):
    """Set/Get entity visibility"""

    if meta_args.bound:
        ex.get_bound_id = hive.socket(cls.set_get_entity_id, identifier="entity.get_bound")
        i.do_get_entity_id = hive.triggerable(cls.get_bound_entity)

    else:
        i.entity_id = hive.property(cls, "entity_id", "int.entity_id")
        i.do_get_entity_id = hive.pull_in(i.entity_id)
        ex.entity_id = hive.antenna(i.do_get_entity_id)

    if meta_args.mode == 'get':
        ex.get_get_visibility = hive.socket(cls.set_get_visibility, identifier="entity.visibility.get")
        i.pull_visibility = hive.pull_out(cls.get_visibility)
        ex.visibility = hive.output(i.pull_visibility)
        hive.trigger(i.pull_visibility, i.do_get_entity_id, pretrigger=True)

    else:
        ex.get_set_visibility = hive.socket(cls.set_set_visibility, identifier="entity.visibility.set")
        i.push_in_visibility = hive.push_in(cls.set_visibility)
        ex.visibility = hive.antenna(i.push_in_visibility)
        hive.trigger(i.push_in_visibility, i.do_get_entity_id, pretrigger=True)


Visibility = hive.dyna_hive("Visibility", build_visibility, declare_visibility, builder_cls=VisibilityClass)
Пример #13
0
        ex.in_ = hive.antenna(i.in_)

        hive.trigger(i.in_, )

        i.out = meta_args.out(i.value)
        ex.out = hive.output(i.out)
    else:
        i.value = hive.variable()
        i.in_ = meta_args.in_(i.value)
        ex.in_ = hive.antenna(i.in_)

        i.out = meta_args.out(i.value)
        ex.out = hive.output(i.out)


IOMethod = hive.dyna_hive("IOMethd", build_io, declarator=declare_io)


def build_struct(cls, i, ex, args):
    """Interface to Struct class"""
    i.tuple = hive.variable("tuple")
    i.pack_in = hive.push_in(i.tuple)
    ex.pack = hive.antenna(i.pack_in)

    i.bytes = hive.variable("bytes")
    i.unpack_out = hive.push_out(i.bytes)
    ex.unpack = hive.output(i.unpack_out)

    i.size_out = hive.pull_out(cls.size)
    ex.size = hive.output(i.size_out)
Пример #14
0
    self._result = all({})
    """.format(argument_string)

    exec(func_body, locals(), globals())
    return func


def build_all(i, ex, args, meta_args):
    """Trigger output if all inputs evaluate to True"""
    # On pull
    func = build_all_func(meta_args.count)
    i.trigger = hive.modifier(func)

    i.result = hive.variable(meta_args.data_type, False)
    pull_out = hive.pull_out(i.result)
    ex.output = hive.output(pull_out)

    hive.trigger(pull_out, i.trigger, pretrigger=True)

    for index, char in zip(range(meta_args.count), string.ascii_lowercase):
        variable = hive.variable(meta_args.data_type, False)
        setattr(i, char, variable)

        pull_in = hive.pull_in(variable)

        antenna = hive.antenna(pull_in)
        setattr(ex, char, antenna)


All = hive.dyna_hive("All", build_all, declare_all)
Пример #15
0
    i.result = hive.variable('bool')

    i.pull_a = hive.pull_in(i.a)

    if is_single_arg:
        ex.value = hive.antenna(i.pull_a)

        def calc(self):
            self._result = op(self._a)

    else:
        ex.a = hive.antenna(i.pull_a)

        def calc(self):
            self._result = op(self._a, self._b)

        i.pull_b = hive.pull_in(i.b)
        ex.b = hive.antenna(i.pull_b)
        hive.trigger(i.pull_a, i.pull_b)

    i.run_operator = hive.modifier(calc)

    i.pull_result = hive.pull_out(i.result)
    ex.result = hive.output(i.pull_result)

    hive.trigger(i.pull_a, i.run_operator)
    hive.trigger(i.pull_result, i.pull_a, pretrigger=True)


BoolOperator = hive.dyna_hive("BoolOperator", build_operator, declare_operator)
Пример #16
0
import hive
from struct import pack, unpack_from, calcsize


def declare_struct(meta_args):
    pass


def build_struct(i, ex, args, meta_args):
    pass


Struct = hive.dyna_hive("Struct", build_struct, declarator=declare_struct)
Пример #17
0
    ex.get_index = hive.antenna(i.pull_getitem_index)

    i.pull_getitem = hive.pull_out(i.item)
    ex.getitem = hive.output(i.pull_getitem)

    def do_getitem(self):
        self._item = self._list[self._index]

    i.do_getitem = hive.modifier(do_getitem)

    hive.trigger(i.pull_getitem, i.pull_getitem_index, pretrigger=True)
    hive.trigger(i.pull_getitem_index, i.do_getitem)

    # Setitem
    i.pull_setitem_index = hive.pull_in(i.item)
    ex.set_index = hive.antenna(i.pull_setitem_index)

    i.push_setitem = hive.push_in(i.item)
    ex.setitem = hive.antenna(i.push_setitem)

    def do_setitem(self):
        self._list[self._index] = self._item

    i.do_setitem = hive.modifier(do_setitem)

    hive.trigger(i.push_setitem, i.pull_setitem_index)
    hive.trigger(i.pull_setitem_index, i.do_setitem)


List = hive.dyna_hive("List", build_list, declare_list)
Пример #18
0
        self._result = next(iterator)

    except StopIteration:
        self._iterator = None
        next_modifier(self)


def declare_next(meta_args):
    meta_args.data_type = hive.parameter("str", "int")


def build_next(i, ex, args, meta_args):
    """Iterate over generator object, output new value when pulled"""
    i.iterator = hive.attribute("iterator")
    i.iterator_in = hive.pull_in(i.iterator)
    ex.iterator = hive.antenna(i.iterator_in)

    i.pull_iterator = hive.triggerfunc()
    hive.trigger(i.pull_iterator, i.iterator_in)

    i.result = hive.attribute(meta_args.data_type)
    i.pull_value = hive.pull_out(i.result)
    ex.value = hive.output(i.pull_value)

    i.do_next = hive.modifier(next_modifier)

    hive.trigger(i.pull_value, i.do_next, pretrigger=True)


Next = hive.dyna_hive("Next", build_next, declarator=declare_next)
Пример #19
0
            hive.trigger(i.pull_position, i.pull_entity_id, pretrigger=True)

        hive.trigger(i.pull_position, i.do_get_position, pretrigger=True)

    else:
        if coordinate_system == 'absolute':
            ex.get_set_position = hive.socket(
                cls.set_set_position,
                identifier="entity.position.set.absolute")
            i.do_set_position = hive.triggerable(cls.do_set_position)

        else:
            ex.get_set_position = hive.socket(
                cls.set_set_position,
                identifier="entity.position.set.relative")
            i.do_set_position = hive.triggerable(cls.do_set_relative_position)
            hive.trigger(i.push_position, i.pull_other_entity_id)

        if meta_args.bound:
            hive.trigger(i.push_position, i.do_get_entity_id)

        else:
            hive.trigger(i.push_position, i.pull_entity_id)

        hive.trigger(i.push_position, i.do_set_position)


Position = hive.dyna_hive("Position",
                          build_position,
                          declare_position,
                          builder_cls=PositionClass)
Пример #20
0
def build_expression(i, ex, args, meta_args):
    """Evaluate Python expression and store result"""
    ast_node = ast.parse(meta_args.expression, mode='eval')

    # Visit AST and find variable names
    visitor = VariableRecorder()
    visitor.visit(ast_node)
    variable_names = visitor.undefined_ids

    i.result = hive.variable(meta_args.result_type)
    i.pull_result = hive.pull_out(i.result)
    ex.result = hive.output(i.pull_result)

    for name in variable_names:
        attribute = hive.variable(meta_args.result_type)
        setattr(i, name, attribute)
        pull_in = hive.pull_in(attribute)
        setattr(ex, name, hive.antenna(pull_in))

        hive.trigger(i.pull_result, pull_in, pretrigger=True)

    func = create_func(meta_args.expression, variable_names)
    i.modifier = hive.modifier(func)
    hive.trigger(i.pull_result, i.modifier, pretrigger=True)


Expression = hive.dyna_hive("Expression",
                            build_expression,
                            declarator=declare_expression)
Пример #21
0
        else:
            callback = self.on_event

        handler = EventHandler(callback, self.event, mode=mode)
        add_handler(handler)


def declare_listener(meta_args):
    meta_args.mode = hive.parameter("str",
                                    'leader',
                                    options={'leader', 'match', 'trigger'})


def build_listener(cls, i, ex, args, meta_args):
    """Tick event sensor, trigger on_tick every tick"""
    i.on_event = hive.triggerfunc()
    ex.on_event = hive.hook(i.on_event)

    ex.get_add_handler = hive.socket(cls.set_add_handler, "event.add_handler")

    if meta_args.mode == 'leader':
        i.after_leader = hive.property(cls, 'after_leader', 'tuple')
        i.pull_after_leader = hive.pull_out(i.after_leader)
        ex.after_leader = hive.output(i.pull_after_leader)


Listener = hive.dyna_hive("Listener",
                          build_listener,
                          builder_cls=_ListenerCls,
                          declarator=declare_listener)
Пример #22
0
    ex.add_get_plugins = hive.socket(cls.add_get_plugins,
                                     identifier="bind.get_plugins",
                                     policy=hive.MultipleOptional)
    ex.add_get_config = hive.socket(cls.add_get_config,
                                    identifier="bind.get_config",
                                    policy=hive.MultipleOptional)

    # Bind instantiator
    if meta_args.bind_process == 'child':
        # Add startup and stop callbacks
        ex.on_stopped = hive.plugin(cls.stop_all_processes,
                                    identifier="on_stopped")


Instantiator = hive.dyna_hive("Instantiator",
                              build_instantiator,
                              declare_instantiator,
                              builder_cls=InstantiatorClass)


def create_instantiator(*bind_infos, docstring=""):
    """Create instantiator Hive for particular BindInfo sequence

    :param bind_infos: BindInfos to embed
    """
    def build_instantiator(i, ex, args, meta_args):
        bind_environments = get_active_bind_environments(bind_infos, meta_args)

        # Update bind environment to use new bases
        environment_class = i.bind_meta_class.start_value
        i.bind_meta_class.start_value = environment_class.extend(
            "BindEnvironment", bases=tuple(bind_environments))
Пример #23
0

def build_watch(cls, i, ex, args, meta_args):
    """Watch value and indicate when it is changed.

    Uses a tick callback.
    """
    args.start_value = hive.parameter(meta_args.data_type, None)
    i.value = hive.property(cls, "current_value", meta_args.data_type, args.start_value)

    if meta_args.mode == 'pull':
        i.value_in = hive.pull_in(i.value)

    else:
        i.value_in = hive.push_in(i.value)

    ex.value = hive.antenna(i.value_in)

    i.on_changed = hive.triggerfunc()
    ex.on_changed = hive.hook(i.on_changed)

    if meta_args.mode == 'pull':
        ex.get_add_handler = hive.socket(cls.set_add_handler, identifier="event.add_handler")

    else:
        i.compare_values = hive.triggerable(cls.compare_values)
        hive.trigger(i.value_in, i.compare_values)


Watch = hive.dyna_hive("Watch", build_watch, declare_watch, builder_cls=WatchClass)
Пример #24
0
    meta_args.data_type = hive.parameter("str", "int")
    meta_args.advanced = hive.parameter("bool", False)


def build_variable(i, ex, args, meta_args):
    """Simple value-holding hive"""
    args.start_value = hive.parameter(meta_args.data_type)
    ex.value = hive.variable(meta_args.data_type, args.start_value)

    i.pull_value = hive.pull_out(ex.value)
    ex.value_out = hive.output(i.pull_value)

    i.push_value = hive.push_in(ex.value)
    ex.value_in = hive.antenna(i.push_value)

    if meta_args.advanced:
        i.pre_output = hive.triggerfunc()
        ex.pre_output = hive.hook(i.pre_output)

        i.do_pre_output = hive.triggerable(i.pre_output)
        hive.trigger(i.pull_value, i.do_pre_output, pretrigger=True)

Variable = hive.dyna_hive("Variable", build_variable, declarator=declare_variable)

# Helpers
_MetaVariable = Variable.extend("MetaVariable", is_dyna_hive=False)
VariableStr = _MetaVariable(data_type='str')
VariableInt = _MetaVariable(data_type='int')
VariableFloat = _MetaVariable(data_type='float')
VariableBool = _MetaVariable(data_type='bool')
Пример #25
0
import hive


def declare_transistor(meta_args):
    meta_args.data_type = hive.parameter("str", "int")


def build_transistor(i, ex, args, meta_args):
    """Convert a pull output into a push output, using a trigger input"""
    i.value = hive.variable(meta_args.data_type)
    i.pull_value = hive.pull_in(i.value)
    ex.value = hive.antenna(i.pull_value)

    i.push_value = hive.push_out(i.value)
    ex.result = hive.output(i.push_value)

    ex.trigger = hive.entry(i.pull_value)

    hive.trigger(i.pull_value, i.push_value)


Transistor = hive.dyna_hive("Transistor", build_transistor, declare_transistor)
Пример #26
0
            hive.trigger(i.pull_velocity, i.pull_other_entity_id, pretrigger=True)

        if meta_args.bound:
            hive.trigger(i.pull_velocity, i.do_get_entity_id, pretrigger=True)

        else:
            hive.trigger(i.pull_velocity, i.pull_entity_id, pretrigger=True)

        hive.trigger(i.pull_velocity, i.do_get_velocity, pretrigger=True)

    else:
        if coordinate_system == 'absolute':
            ex.get_set_velocity = hive.socket(cls.set_set_velocity, identifier="entity.linear_velocity.set")
            i.do_set_velocity = hive.triggerable(cls.do_set_velocity)

        else:
            ex.get_set_velocity = hive.socket(cls.set_set_velocity, identifier="entity.linear_velocity.set")
            i.do_set_velocity = hive.triggerable(cls.do_set_relative_velocity)
            hive.trigger(i.push_velocity, i.pull_other_entity_id)

        if meta_args.bound:
            hive.trigger(i.push_velocity, i.do_get_entity_id)

        else:
            hive.trigger(i.push_velocity, i.pull_entity_id)

        hive.trigger(i.push_velocity, i.do_set_velocity)


Velocity = hive.dyna_hive("Velocity", build_velocity, declare_velocity, builder_cls=VelocityClass)
Пример #27
0
        self.name = None


def declare_dog(meta_args):
    print("Invoked Declarator")
    meta_args.puppies = hive.parameter(("int", ), 1)


def build_dog(cls, i, ex, args, meta_args):

    print(meta_args)
    print("Invoked Builder")
    args.name = hive.parameter("str")
    ex.name = hive.property(cls, "name", "str", args.name)

    for ix in range(meta_args.puppies):
        mod = hive.modifier(lambda h: print("Puppy {} barked".format(h.name)))
        setattr(i, "mod_{}".format(ix), mod)
        setattr(ex, "bark_{}".format(ix), hive.entry(mod))


DogHive = hive.dyna_hive("Dog", build_dog, declare_dog, Dog)

d = DogHive(2, "Jack")
d.bark_0()
d.bark_1()

print()

d = DogHive(1, "Jill")
d.bark_0()
Пример #28
0
                                         'float',
                                         options={'complex', 'int', 'float'})


def build_constrain(i, ex, args, meta_args):
    """Constrain a value between two bounding values"""
    args.min_value = hive.parameter(meta_args.data_type)
    args.max_value = hive.parameter(meta_args.data_type)

    i.min_value = hive.attribute(meta_args.data_type, args.min_value)
    i.max_value = hive.attribute(meta_args.data_type, args.max_value)

    i.value = hive.attribute(meta_args.data_type)
    i.result = hive.attribute(meta_args.data_type)

    i.pull_result = hive.pull_out(i.result)
    i.pull_value = hive.pull_in(i.value)

    ex.result = hive.output(i.pull_result)
    ex.value = hive.antenna(i.pull_value)

    def do_contrain(self):
        self._result = min(max(self._value, self._min_value), self._max_value)

    i.do_constrain = hive.modifier(do_contrain)
    hive.trigger(i.pull_result, i.pull_value, pretrigger=True)
    hive.trigger(i.pull_value, i.do_constrain)


Constrain = hive.dyna_hive("Constrain", build_constrain, declare_constrain)
Пример #29
0
def build_operator(i, ex, args, meta_args):
    """HIVE interface to python mathematical operators"""
    assert meta_args.operator in operators
    op = operators[meta_args.operator]

    i.a = hive.attribute(meta_args.data_type)
    i.b = hive.attribute(meta_args.data_type)

    i.pull_a = hive.pull_in(i.a)
    ex.a = hive.antenna(i.pull_a)

    i.pull_b = hive.pull_in(i.b)
    ex.b = hive.antenna(i.pull_b)
    hive.trigger(i.pull_a, i.pull_b)

    i.result = hive.attribute(meta_args.data_type)
    i.pull_result = hive.pull_out(i.result)
    ex.result = hive.output(i.pull_result)

    def calc(self):
        self._result = op(self._a, self._b)

    i.run_operator = hive.modifier(calc)

    hive.trigger(i.pull_a, i.run_operator)
    hive.trigger(i.pull_result, i.pull_a, pretrigger=True)


MathOperator = hive.dyna_hive("MathOperator", build_operator, declare_operator)
Пример #30
0
        i.ppin = hive.pull_in(i.value_in)
        i.ppout = hive.pull_out(i.value_out)

        hive.trigger(i.ppout, i.ppin, pretrigger=True)

    ex.value_in = hive.antenna(i.ppin)
    ex.value_out = hive.output(i.ppout)

    # For casting (explicit conversion)
    if meta_args.conversion == "cast":
        to_type_tuple = hive.identifier_to_tuple(meta_args.to_data_type)
        to_base_type_name = to_type_tuple[0]

        value_cls = _type_map[to_base_type_name]

        def converter(self):
            self._value_out = value_cls(self._value_in)

        i.do_conversion = hive.modifier(converter)
        hive.trigger(i.ppout, i.do_conversion, pretrigger=True)

    # For duck typing, move value through
    else:
        i.move_value = hive.modifier(move_value)
        hive.trigger(i.ppin, i.move_value)


Convert = hive.dyna_hive("Convert",
                         builder=build_convert,
                         declarator=declare_convert)