def structured_dot(x, y):
 if hasattr(x, 'getnnz'):
  x = as_sparse_variable(x)
  assert (x.format in ['csr', 'csc'])
 if hasattr(y, 'getnnz'):
  y = as_sparse_variable(y)
  assert (y.format in ['csr', 'csc'])
 x_is_sparse_variable = _is_sparse_variable(x)
 y_is_sparse_variable = _is_sparse_variable(y)
 if ((not x_is_sparse_variable) and (not y_is_sparse_variable)):
  raise TypeError('structured_dot requires at least one sparse argument')
 if x_is_sparse_variable:
  return _structured_dot(x, y)
 else:
  assert y_is_sparse_variable
  return _structured_dot(y.T, x.T).T

def structured_dot ( x , y ) : if hasattr ( x , 'getnnz' ) : x = as_sparse_variable ( x ) assert ( x . format in [ 'csr' , 'csc' ] ) if hasattr ( y , 'getnnz' ) : y = as_sparse_variable ( y ) assert ( y . format in [ 'csr' , 'csc' ] ) x_is_sparse_variable = _is_sparse_variable ( x ) y_is_sparse_variable = _is_sparse_variable ( y ) if ( ( not x_is_sparse_variable ) and ( not y_is_sparse_variable ) ) : raise TypeError ( 'structured_dot requires at least one sparse argument' ) if x_is_sparse_variable : return _structured_dot ( x , y ) else : assert y_is_sparse_variable return _structured_dot ( y . T , x . T ) . T
structured dot is like dot .