예제 #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
파일: keyboard.py 프로젝트: agoose77/hive2
        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
파일: max_.py 프로젝트: agoose77/hive2
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
파일: struct.py 프로젝트: agoose77/hive2
        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
파일: all_.py 프로젝트: agoose77/hive2
    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
파일: list_.py 프로젝트: agoose77/hive2
    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
파일: position.py 프로젝트: agoose77/hive2
            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
파일: variable.py 프로젝트: agoose77/hive2
    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)