<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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: {rounds(tournament: $tournament number: 0) {number}}''' {'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