docstr: Removes the rows with the primary keys specified in ``pkeys``.
  
  If the :class:`~perspective.Table` does not have an index, ``remove()``
  has no effect.  Removes propagate to views derived from the table.
  
  Args:
      pkeys (:obj:`list`): a list of primary keys to indicate the rows
          that should be removed.
  
  Example:
      >>> tbl = Table({"a": [1, 2, 3]}, index="a")
      >>> tbl.remove([2, 3])
      >>> tbl.view().to_records()
      [{"a": 1}]
docstr_tok: ["Removes","the","rows","with","the","primary","keys","specified","in","``","pkeys","``",".","If","the",":","class",":","`","~perspective.Table","`","does","not","have","an","index",",","``","remove","(",")","``","has","no","effect",".","Removes","propagate","to","views","derived","from","the","table",".","Args",":","pkeys","(",":","obj",":","`","list","`",")",":","a","list","of","primary","keys","to","indicate","the","rows","that","should","be","removed",".","Example",":",">",">",">","tbl","=","Table","(","{","``","a","''",":","[","1",",","2",",","3","]","}",",","index=","''","a","''",")",">",">",">","tbl.remove","(","[","2",",","3","]",")",">",">",">","tbl.view","(",")",".to_records","(",")","[","{","``","a","''",":","1","}","]"]
code: def remove(self, pkeys, port_id=0):
      """Removes the rows with the primary keys specified in ``pkeys``.
  
      If the :class:`~perspective.Table` does not have an index, ``remove()``
      has no effect.  Removes propagate to views derived from the table.
  
      Args:
          pkeys (:obj:`list`): a list of primary keys to indicate the rows
              that should be removed.
  
      Example:
          >>> tbl = Table({"a": [1, 2, 3]}, index="a")
          >>> tbl.remove([2, 3])
          >>> tbl.view().to_records()
          [{"a": 1}]
      """
      if self._index is None:
          return
  
      pkeys = list(map(lambda idx: {self._index: idx}, pkeys))
      types = [self._table.get_schema().get_dtype(self._index)]
      _accessor = _PerspectiveAccessor(pkeys)
      _accessor._names = [self._index]
      _accessor._types = types
  
      t = update_table(
          self._table,
          _accessor,
          self._limit or 4294967295,
          self._index or "",
          t_op.OP_DELETE,
          False,
          False,
          port_id,
      )
  
      self._state_manager.set_process(t.get_pool(), t.get_id())
  
imports: from datetime import date, datetime
  from ..core.exception import PerspectiveError
  from ._accessor import _PerspectiveAccessor
  from ._callback_cache import _PerspectiveCallBackCache
  from ._date_validator import _PerspectiveDateValidator
  from ._state import _PerspectiveStateManager
  from ._utils import _dtype_to_pythontype, _dtype_to_str, _parse_expression_inputs, _str_to_pythontype
  from .libpsppy import make_table, update_table, str_to_filter_op, t_dtype, t_filter_op, t_op, validate_expressions
  from .view import View
label_desc: Use image node_id 17 for calling the Table obj's underlying member method code with example usage: obj.remove(pkeys, port_id) without return types