code: def _sqrt_symbolic_denest(a, b, r):
      """Given an expression, sqrt(a + b*sqrt(b)), return the denested
      expression or None.
  
      Explanation
      ===========
  
      If r = ra + rb*sqrt(rr), try replacing sqrt(rr) in ``a`` with
      (y**2 - ra)/rb, and if the result is a quadratic, ca*y**2 + cb*y + cc, and
      (cb + b)**2 - 4*ca*cc is 0, then sqrt(a + b*sqrt(r)) can be rewritten as
      sqrt(ca*(sqrt(r) + (cb + b)/(2*ca))**2).
  
      Examples
      ========
  
      >>> from sympy.simplify.sqrtdenest import _sqrt_symbolic_denest, sqrtdenest
      >>> from sympy import sqrt, Symbol
      >>> from sympy.abc import x
  
      >>> a, b, r = 16 - 2*sqrt(29), 2, -10*sqrt(29) + 55
      >>> _sqrt_symbolic_denest(a, b, r)
      sqrt(11 - 2*sqrt(29)) + sqrt(5)
  
      If the expression is numeric, it will be simplified:
  
      >>> w = sqrt(sqrt(sqrt(3) + 1) + 1) + 1 + sqrt(2)
      >>> sqrtdenest(sqrt((w**2).expand()))
      1 + sqrt(2) + sqrt(1 + sqrt(1 + sqrt(3)))
  
      Otherwise, it will only be simplified if assumptions allow:
  
      >>> w = w.subs(sqrt(3), sqrt(x + 3))
      >>> sqrtdenest(sqrt((w**2).expand()))
      sqrt((sqrt(sqrt(sqrt(x + 3) + 1) + 1) + 1 + sqrt(2))**2)
  
      Notice that the argument of the sqrt is a square. If x is made positive
      then the sqrt of the square is resolved:
  
      >>> _.subs(x, Symbol('x', positive=True))
      sqrt(sqrt(sqrt(x + 3) + 1) + 1) + 1 + sqrt(2)
      """
  
      a, b, r = map(sympify, (a, b, r))
      rval = _sqrt_match(r)
      if not rval:
          return None
      ra, rb, rr = rval
      if rb:
          y = Dummy("y", positive=True)
          try:
              newa = Poly(a.subs(sqrt(rr), (y**2 - ra) / rb), y)
          except PolynomialError:
              return None
          if newa.degree() == 2:
              ca, cb, cc = newa.all_coeffs()
              cb += b
              if _mexpand(cb**2 - 4 * ca * cc).equals(0):
                  z = sqrt(ca * (sqrt(r) + cb / (2 * ca)) ** 2)
                  if z.is_number:
                      z = _mexpand(
                          Mul._from_args(z.as_content_primitive())
                      )
                  return z
  
imports: from sympy.core import Add, Expr, Mul, S, sympify
  from sympy.core.function import _mexpand, count_ops, expand_mul
  from sympy.core.sorting import default_sort_key
  from sympy.core.symbol import Dummy
  from sympy.functions import root, sign, sqrt
  from sympy.polys import Poly, PolynomialError
label_desc: Use image node_id 10 for calling a global function with example usage: _sqrt_symbolic_denest(a, b, r) and returns: None, None, z