docs: def update_index(self):
          """
          Regenerates the permission index for this set
  
          Called everytime a rule is added / removed / modified in
          the set
          """
  
          # update index
  
          idx = {}
          for _, p in sorted(self.permissions.items(), key=lambda x: str(x[0])):
              branch = idx
              parent_p = const.PERM_DENY
              for k in p.namespace.keys:
                  if not k in branch:
                      branch[k] = {"__": parent_p}
                      branch[k].update(__implicit=True)
  
                  branch = branch[k]
                  parent_p = branch["__"]
              branch["__"] = p.value
              branch["__implicit"] = False
  
          self.index = idx
  
          # update read access map
  
          ramap = {}
  
          def update_ramap(branch_idx):
              r = {"__": False}
              for k, v in list(branch_idx.items()):
                  if k != "__" and k != "__implicit":
                      r[k] = update_ramap(v)
  
              if branch_idx["__"] is not None and (branch_idx["__"] & const.PERM_READ) != 0:
                  r["__"] = True
              return r
  
          for k, v in list(idx.items()):
              ramap[k] = update_ramap(v)
  
          self.read_access_map = ramap
  
          return self.index