@public
def sqf_norm(f, *gens, **args):
 options.allowed_flags(args, ['polys'])
 try:
  (F, opt) = poly_from_expr(f, *gens, **args)
 except PolificationFailed as exc:
  raise ComputationFailed('sqf_norm', 1, exc)
 (s, g, r) = F.sqf_norm()
 if (not opt.polys):
  return (Integer(s), g.as_expr(), r.as_expr())
 else:
  return (Integer(s), g, r)

@ public def sqf_norm ( f , * gens , ** args ) : options . allowed_flags ( args , [ 'polys' ] ) try : ( F , opt ) = poly_from_expr ( f , * gens , ** args ) except PolificationFailed as exc : raise ComputationFailed ( 'sqf_norm' , 1 , exc ) ( s , g , r ) = F . sqf_norm ( ) if ( not opt . polys ) : return ( Integer ( s ) , g . as_expr ( ) , r . as_expr ( ) ) else : return ( Integer ( s ) , g , r )
compute square-free norm of f .