def compute_jac_scale(J, scale_inv_old=None):
 if issparse(J):
  scale_inv = (np.asarray(J.power(2).sum(axis=0)).ravel() ** 0.5)
 else:
  scale_inv = (np.sum((J ** 2), axis=0) ** 0.5)
 if (scale_inv_old is None):
  scale_inv[(scale_inv == 0)] = 1
 else:
  scale_inv = np.maximum(scale_inv, scale_inv_old)
 return ((1 / scale_inv), scale_inv)

def compute_jac_scale ( J , scale_inv_old = None ) : if issparse ( J ) : scale_inv = ( np . asarray ( J . power ( 2 ) . sum ( axis = 0 ) ) . ravel ( ) ** 0.5 ) else : scale_inv = ( np . sum ( ( J ** 2 ) , axis = 0 ) ** 0.5 ) if ( scale_inv_old is None ) : scale_inv [ ( scale_inv == 0 ) ] = 1 else : scale_inv = np . maximum ( scale_inv , scale_inv_old ) return ( ( 1 / scale_inv ) , scale_inv )
compute variables scale based on the jacobian matrix .