andes.core.service.BackRef#
- class andes.core.service.BackRef(**kwargs)[source]#
A special type of reference collector.
BackRef is used for collecting device indices of other models referencing the parent model of the BackRef. The v``field will be a list of lists, each containing the `idx of other models referencing each device of the parent model.
BackRef can be passed as indexer for params and vars, or shape for NumReduce and NumRepeat. See examples for illustration.
See also
andes.core.service.NumReduceA more complete example using BackRef to build the COI model
Examples
A Bus device has an IdxParam of area, storing the idx of area to which the bus device belongs. In
Bus.__init__(), one hasself.area = IdxParam(model='Area')
Suppose Bus has the following data
idx
area
Vn
1
1
110
2
2
220
3
1
345
4
1
500
The Area model wants to collect the indices of Bus devices which points to the corresponding Area device. In
Area.__init__, one definesself.Bus = BackRef()
where the member attribute name Bus needs to match exactly model name that Area wants to collect idx for. Similarly, one can define
self.ACNode = BackRef()to collect devices in the ACNode group that references Area.The collection of idx happens in
andes.system.System._collect_ref_param(). It has to be noted that the specific Area entry must exist to collect model idx-dx referencing it. For example, if Area has the following dataidx 1
Then, only Bus 1, 3, and 4 will be collected into self.Bus.v, namely,
self.Bus.v == [ [1, 3, 4] ].If Area has data
idx 1 2
Then, self.Bus.v will end up with
[ [1, 3, 4], [2] ].Methods
assign_memory(n)Assign memory for
self.vand set the array to zero.get_names()Return name in a list
Attributes
class_nameReturn the class name
nReturn the count of values in
self.v.