<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_product_historic_rates(self, product_id, start=None, end=None, granularity=None):
 """Historic rates for a product. Rates are returned in grouped buckets based on requested `granularity`. If start, end, and granularity aren't provided, the exchange will assume some (currently unknown) default values. Historical rate data may be incomplete. No data is published for intervals where there are no ticks. **Caution**: Historical rates should not be polled frequently. If you need real-time information, use the trade and book endpoints along with the websocket feed. The maximum number of data points for a single request is 200 candles. If your selection of start/end time and granularity will result in more than 200 data points, your request will be rejected. If you wish to retrieve fine granularity data over a larger time range, you will need to make multiple requests with new start/end ranges. Args: product_id (str):
 Product start (Optional[str]):
 Start time in ISO 8601 end (Optional[str]):
 End time in ISO 8601 granularity (Optional[int]):
 Desired time slice in seconds Returns: list: Historic candle data. Example: [ [ time, low, high, open, close, volume ], [ 1415398768, 0.32, 4.2, 0.35, 4.2, 12.3 ], ] """

        params = {}
        if start is not None:
            params['start'] = start
        if end is not None:
            params['end'] = end
        if granularity is not None:
            acceptedGrans = [60, 300, 900, 3600, 21600, 86400]
            if granularity not in acceptedGrans:
                raise ValueError( 'Specified granularity is {}, must be in approved values: {}'.format(
                        granularity, acceptedGrans) )

            params['granularity'] = granularity
        return self._send_message('get',
                                  '/products/{}/candles'.format(product_id),
                                  params=params)