code: def arrays_split(mask:NPArrayMask, *arrs:NPArrayableList)->SplitArrayList:
      "Given `arrs` is [a,b,...] and `mask`index - return[(a[mask],a[~mask]),(b[mask],b[~mask]),...]."
      assert all([len(arr)==len(arrs[0]) for arr in arrs]), 'All arrays should have same length'
      mask = array(mask)
      return list(zip(*[(a[mask],a[~mask]) for a in map(np.array, arrs)])f arrays_split(mask:NPArrayMask, *arrs:NPArrayableList)->SplitArrayList:
      "Given `arrs` is [a,b,...] and `mask`index - return[(a[mask],a[~mask]),(b[mask],b[~mask]),...]."
      assert all([len(arr)==len(arrs[0]) for arr in arrs]), 'All arrays should have same length'
      mask = array(mask)
      return list(zip(*[(a[mask],a[~mask]) for a in map(np.array, arrs)]))
docs: Given `arrs` is [a,b,...] and `mask`index - return[(a[mask],a[~mask]),(b[mask],b[~mask]),...].