parameters: (arrays)
return_statement: return arrays, list_ndim, result_ndim, final_size
docstring: Returns
      (`arrays`, list_ndim, result_ndim, final_size)
docstring_summary: Returns
      (`arrays`, list_ndim, result_ndim, final_size)
docstring_tokens: Returns ( arrays list_ndim result_ndim final_size )
function: def _block_setup(arrays):
      """
      Returns
      (`arrays`, list_ndim, result_ndim, final_size)
      """
      bottom_index, arr_ndim, final_size = _block_check_depths_match(arrays)
      list_ndim = len(bottom_index)
      if bottom_index and bottom_index[-1] is None:
          raise ValueError(
              'List at {} cannot be empty'.format(
                  _block_format_index(bottom_index)
              )
          )
      result_ndim = max(arr_ndim, list_ndim)
      return arrays, list_ndim, result_ndim, final_size
function_tokens: def _block_setup ( arrays ) : bottom_index , arr_ndim , final_size = _block_check_depths_match ( arrays ) list_ndim = len ( bottom_index ) if bottom_index and bottom_index [ - 1 ] is None : raise ValueError ( 'List at {} cannot be empty' . format ( _block_format_index ( bottom_index ) ) ) result_ndim = max ( arr_ndim , list_ndim ) return arrays , list_ndim , result_ndim , final_size