docs: def _loop_topo(self, topologyType, topologicalEntity=None, topologyTypeToAvoid=None):
          '''
          this could be a faces generator for a python TopoShape class
          that way you can just do:
          for face in srf.faces:
              processFace(face)
          '''
          topoTypes = {TopAbs_VERTEX: TopoDS_Vertex,
                       TopAbs_EDGE: TopoDS_Edge,
                       TopAbs_FACE: TopoDS_Face,
                       TopAbs_WIRE: TopoDS_Wire,
                       TopAbs_SHELL: TopoDS_Shell,
                       TopAbs_SOLID: TopoDS_Solid,
                       TopAbs_COMPOUND: TopoDS_Compound,
                       TopAbs_COMPSOLID: TopoDS_CompSolid}
  
          assert topologyType in topoTypes.keys(), '%s not one of %s' % (topologyType, topoTypes.keys())
          self.topExp = TopExp_Explorer()
          # use self.myShape if nothing is specified
          if topologicalEntity is None and topologyTypeToAvoid is None:
              self.topExp.Init(self.myShape, topologyType)
          elif topologicalEntity is None and topologyTypeToAvoid is not None:
              self.topExp.Init(self.myShape, topologyType, topologyTypeToAvoid)
          elif topologyTypeToAvoid is None:
              self.topExp.Init(topologicalEntity, topologyType)
          elif topologyTypeToAvoid:
              self.topExp.Init(topologicalEntity,
                               topologyType,
                               topologyTypeToAvoid)
          seq = []
          hashes = []  # list that stores hashes to avoid redundancy
          occ_seq = TopTools_ListOfShape()
          while self.topExp.More():
              current_item = self.topExp.Current()
              current_item_hash = current_item.__hash__()
  
              if not current_item_hash in hashes:
                  hashes.append(current_item_hash)
                  occ_seq.Append(current_item)
  
              self.topExp.Next()
          # Convert occ_seq to python list
          occ_iterator = TopTools_ListIteratorOfListOfShape(occ_seq)
          while occ_iterator.More():
              topo_to_add = self.topoFactory[topologyType](occ_iterator.Value())
              seq.append(topo_to_add)
              occ_iterator.Next()
  
          if self.ignore_orientation:
              # filter out those entities that share the same TShape
              # but do *not* share the same orientation
              filter_orientation_seq = []
              for i in seq:
                  _present = False
                  for j in filter_orientation_seq:
                      if i.IsSame(j):
                          _present = True
                          break
                  if _present is False:
                      filter_orientation_seq.append(i)
              return filter_orientation_seq
          else:
              return iter(seq)