def _solve_abs(f, symbol, domain):
 if (not domain.is_subset(S.Reals)):
  raise ValueError(filldedent('\n            Absolute values cannot be inverted in the\n            complex domain.'))
 (p, q, r) = (Wild('p'), Wild('q'), Wild('r'))
 pattern_match = (f.match(((p * Abs(q)) + r)) or {})
 if (not pattern_match.get(p, S.Zero).is_zero):
  (f_p, f_q, f_r) = (pattern_match[p], pattern_match[q], pattern_match[r])
  q_pos_cond = solve_univariate_inequality((f_q >= 0), symbol, relational=False)
  q_neg_cond = solve_univariate_inequality((f_q < 0), symbol, relational=False)
  sols_q_pos = solveset_real(((f_p * f_q) + f_r), symbol).intersect(q_pos_cond)
  sols_q_neg = solveset_real(((f_p * (- f_q)) + f_r), symbol).intersect(q_neg_cond)
  return Union(sols_q_pos, sols_q_neg)
 else:
  return ConditionSet(symbol, Eq(f, 0), domain)

def _solve_abs ( f , symbol , domain ) : if ( not domain . is_subset ( S . Reals ) ) : raise ValueError ( filldedent ( '\n            Absolute values cannot be inverted in the\n            complex domain.' ) ) ( p , q , r ) = ( Wild ( 'p' ) , Wild ( 'q' ) , Wild ( 'r' ) ) pattern_match = ( f . match ( ( ( p * Abs ( q ) ) + r ) ) or { } ) if ( not pattern_match . get ( p , S . Zero ) . is_zero ) : ( f_p , f_q , f_r ) = ( pattern_match [ p ] , pattern_match [ q ] , pattern_match [ r ] ) q_pos_cond = solve_univariate_inequality ( ( f_q >= 0 ) , symbol , relational = False ) q_neg_cond = solve_univariate_inequality ( ( f_q < 0 ) , symbol , relational = False ) sols_q_pos = solveset_real ( ( ( f_p * f_q ) + f_r ) , symbol ) . intersect ( q_pos_cond ) sols_q_neg = solveset_real ( ( ( f_p * ( - f_q ) ) + f_r ) , symbol ) . intersect ( q_neg_cond ) return Union ( sols_q_pos , sols_q_neg ) else : return ConditionSet ( symbol , Eq ( f , 0 ) , domain )
helper function to solve equation involving absolute value function .