def __init__(self, *args, **kwargs): super(Model, self).__init__(*args, **kwargs) bricks = [get_brick(var) for var in self.variables + self.scan_variables if get_brick(var)] children = set(chain(*(brick.children for brick in bricks))) # Quadratic complexity: we should not have thousands of # top-level bricks. self.top_bricks = [] for brick in bricks: if brick not in children and brick not in self.top_bricks: self.top_bricks.append(brick) names = Counter([brick.name for brick in self.top_bricks]) repeated_names = [name for name, count in names.items() if count > 1] if repeated_names: raise ValueError("top bricks with the same name:" " {}".format(', '.join(repeated_names))) brick_parameter_names = { v: k for k, v in Selector( self.top_bricks).get_parameters().items()} parameter_list = [] for parameter in self.parameters: if parameter in brick_parameter_names: parameter_list.append((brick_parameter_names[parameter], parameter)) else: parameter_list.append((parameter.name, parameter)) self._parameter_dict = OrderedDict(parameter_list)
def __call__(self, obj): if isinstance(obj, SharedVariable): super(PersistentParameterID, self).__call__(obj) if hasattr(obj.tag, 'annotations'): name = '{}.{}'.format( BRICK_DELIMITER.join([brick.name for brick in get_brick(obj).get_unique_path()]), obj.name ) else: name = obj.name self.ndarray_names[id(obj.container.storage[0])] = name if id(obj) in self.ndarray_names: PersistentCudaNdarrayID.__call__(self, obj)
def __call__(self, obj): if isinstance(obj, SharedVariable): super(PersistentParameterID, self).__call__(obj) if hasattr(obj.tag, 'annotations'): name = '{}.{}'.format( BRICK_DELIMITER.join([ brick.name for brick in get_brick(obj).get_unique_path() ]), obj.name) else: name = obj.name self.ndarray_names[id(obj.container.storage[0])] = name if id(obj) in self.ndarray_names: PersistentCudaNdarrayID.__call__(self, obj)