docs: def raw_query(self, query, variables=None, authorization=False):
          """Send a raw request to the Numerai's GraphQL API.
  
          This function allows to build your own queries and fetch results from
          Numerai's GraphQL API. Checkout
          https://medium.com/numerai/getting-started-with-numerais-new-tournament-api-77396e895e72
          for an introduction and https://api-tournament.numer.ai/ for the
          documentation.
  
          Args:
              query (str): your query
              variables (dict, optional): dict of variables
              authorization (bool, optional): does the request require
                  authorization, defaults to `False`
  
          Returns:
              dict: Result of the request
  
          Raises:
              ValueError: if something went wrong with the requests. For example,
                  this could be a wrongly formatted query or a problem at
                  Numerai's end. Have a look at the error messages, in most cases
                  the problem is obvious.
  
          Example:
              >>> query = '''query($tournament: Int!)
                             {rounds(tournament: $tournament number: 0)
                              {number}}'''
              >>> args = {'tournament': 1}
              >>> NumerAPI().raw_query(query, args)
              {'data': {'rounds': [{'number': 104}]}}
          """
          body = {'query': query,
                  'variables': variables}
          headers = {'Content-type': 'application/json',
                     'Accept': 'application/json'}
          if authorization:
              if self.token:
                  public_id, secret_key = self.token
                  headers['Authorization'] = \
                      'Token {}${}'.format(public_id, secret_key)
              else:
                  raise ValueError("API keys required for this action.")
  
          result = utils.post_with_err_handling(
              API_TOURNAMENT_URL, body, headers)
  
          if result and "errors" in result:
              err = self._handle_call_error(result['errors'])
              # fail!
              raise ValueError(err)
  
          return result