 # ¯2↑⍬             <=> 0 0
 # 0↑⍬              <=> ⍬
 # 3 3↑1            <=> 3 3⍴1 0 0 0 0 0 0 0 0
+# 2↑3 3⍴⍳9         <=> 2 3⍴⍳6
+# ¯2↑3 3⍴⍳9        <=> 2 3⍴3+⍳6
+# 4↑3 3⍴⍳9         <=> 4 3⍴(⍳9),0 0 0
 take = (omega, alpha) ->
   if alpha.shape.length > 1
     throw RankError()

    for i in [stride.length - 2 .. 0] by -1
      stride[i] = stride[i + 1] * shape[i + 1]
    data = repeat [omega.getPrototype()], prod shape
    copyShape = []
    p = omega.offset
    q = 0
    for x, i in a
      copyShape.push Math.min omega.shape[i], Math.abs x
      if x < 0
        if x < -omega.shape[i]
          q -= (x + omega.shape[i]) * stride[i]

    throw DomainError()

  mustCopy = false
  shape = omega.shape[...]
  for x, i in a
    shape[i] = Math.abs x
    if shape[i] > omega.shape[i]
      mustCopy = true

