docstr: Given an (M, N) sequence of vectors, return an (M, N*(nW*2+1)) sequence.
  The new sequence is constructed by concatenating nW preceding and succeeding
  vectors onto each column in the sequence, to extract a window of features.
docstr_tok: ["Given","an","(","M",",","N",")","sequence","of","vectors",",","return","an","(","M",",","N","*","(","nW","*","2+1",")",")","sequence",".","The","new","sequence","is","constructed","by","concatenating","nW","preceding","and","succeeding","vectors","onto","each","column","in","the","sequence",",","to","extract","a","window","of","features","."]
code: def seq2col(self, seq, nW, *, lengths=None):
      """Given an (M, N) sequence of vectors, return an (M, N*(nW*2+1)) sequence.
      The new sequence is constructed by concatenating nW preceding and succeeding
      vectors onto each column in the sequence, to extract a window of features.
      """
      if seq.dtype in ("float32", "float64") and (
          lengths is None or lengths.dtype == "int32"
      ):
          return _custom_kernels.seq2col(seq, nW, lengths=lengths)
      else:
          return super().seq2col(seq, nW, lengths=lengths)
  
imports: import numpy
  from ..None import registry
  from ..compat import cupy, cupyx
  from ..types import DeviceTypes
  from ..util import is_cupy_array, is_mxnet_gpu_array, is_tensorflow_gpu_array, is_torch_cuda_array, mxnet2xp, tensorflow2xp, torch2xp
  from .None import _custom_kernels
  from .numpy_ops import NumpyOps
  from .ops import Ops
label_desc: Use image node_id 24 for calling the CupyOps obj's underlying member method code with example usage: obj.seq2col(seq, nW) and returns: _custom_kernels, super