<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def estimate_ride( self, product_id=None, start_latitude=None, start_longitude=None, start_place_id=None, end_latitude=None, end_longitude=None, end_place_id=None, seat_count=None, ):
 """Estimate ride details given a product, start, and end location. Only pickup time estimates and surge pricing information are provided if no end location is provided. Parameters product_id (str) The unique ID of the product being requested. If none is provided, it will default to the cheapest product for the given location. start_latitude (float) The latitude component of a start location. start_longitude (float) The longitude component of a start location. start_place_id (str) The beginning or pickup place ID. Only "home" or "work" is acceptable. end_latitude (float) Optional latitude component of a end location. end_longitude (float) Optional longitude component of a end location. end_place_id (str) The final or destination place ID. Only "home" or "work" is acceptable. seat_count (str) Optional Seat count for shared products. Default is 2. Returns (Response) A Response object containing fare id, time, price, and distance estimates for a ride. """

        args = {
            'product_id': product_id,
            'start_latitude': start_latitude,
            'start_longitude': start_longitude,
            'start_place_id': start_place_id,
            'end_latitude': end_latitude,
            'end_longitude': end_longitude,
            'end_place_id': end_place_id,
            'seat_count': seat_count
        }

        return self._api_call('POST', 'v1.2/requests/estimate', args=args)