docs: def handle_response (response):
      """
      Handle a response from the newton API
      """
      
      response = json.loads(response.read())
      
      # Was the expression valid?
      if 'error' in response:
          raise ValueError(response['error'])
      else:
          # Some of the strings returned can be parsed to integers or floats
          try:
              return json.loads(response['result'])
          except (TypeError, json.decoder.JSONDecodeError):
              # If the result is NaN, return the actual NaN float
              if response['result'] == 'NaN':
                  return float('nan')
              else:
                  return response['result']