code: def _get_atleast_topk_nsplit(cls, nsplit, topk):
      new_nsplit = []
      i = 0
      while i < len(nsplit):
          cur = nsplit[i]
          i += 1
          if cur >= topk:
              new_nsplit.append(cur)
          else:
              while i < len(nsplit):
                  cur += nsplit[i]
                  i += 1
                  if cur >= topk:
                      break
              if cur < topk and len(new_nsplit) > 0:
                  new_nsplit[-1] += cur
              elif cur >= topk:
                  new_nsplit.append(cur)
      new_nsplit = tuple(new_nsplit)
      assert sum(new_nsplit) == sum(
          nsplit
      ), f"sum of nsplit not equal, old: {nsplit}, new: {new_nsplit}"
  
      return new_nsplit
  
imports: import itertools
  import logging
  import os
  import pickle
  import tempfile
  import uuid
  import numpy
  from ....None import opcodes
  from ....None import tensor
  from ....lib.filesystem import get_fs
  from ....core import OutputType
  from ....core.context import get_context
  from ....core.operand import OperandStage
  from ....serialization.serializables import StringField, Int32Field, Int64Field, DictField, BytesField, TupleField, DataTypeField
  from ....utils import has_unknown_shape, Timer
  from ...operands import LearnOperand, LearnOperandMixin
  from ..core import proxima, get_proxima_type, validate_tensor, available_numpy_dtypes, rechunk_tensor, build_mmap_chunks
label_desc: Use image node_id 16 for calling the ProximaBuilder obj's underlying member method code with example usage: obj._get_atleast_topk_nsplit(cls, nsplit, topk) and returns: new_nsplit