code: def children(self, unroll=False, skip_not_present=True):
          for child_inst in self.inst.children:
              if skip_not_present:
                  if not child_inst.properties.get('ispresent', True):
                      continue
              if unroll and isinstance(child_inst, comp.AddressableComponent) and child_inst.is_array:
                  range_list = [range(n) for n in child_inst.array_dimensions]
                  for idxs in itertools.product(*range_list):
                      N = Node._factory(child_inst, self.env, self)
                      N.current_idx = idxs
                      yield N
              else:
                  yield Node._factory(child_inst, self.env, self)