<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def list_objects(self, query=None, limit=-1, offset=-1):
 """List of all experiments in the database. Overrides the super class method to allow the returned object's property lists to be extended with the run count. Parameters query : Dictionary Filter objects by property-value pairs defined by dictionary. limit : int Limit number of items in the result set offset : int Set offset in list (order as defined by object store) Returns ------- ObjectListing """

        # Call super class method to get the object listing
        result = super(DefaultExperimentManager, self).list_objects(
            query=query,
            limit=limit,
            offset=offset
        )
        # Run aggregate count on predictions if collection was given
        if not self.coll_predictions is None:
            # Get model run counts for active experiments. Experiments without
            # runs will not be in the result
            counts = {}
            pipeline = [
                { '$match': {'active': True}},
                { '$group': { '_id': "$experiment", 'count': { '$sum': 1 } } }
            ]
            for doc in self.coll_predictions.aggregate(pipeline):
                counts[doc['_id']] = doc['count']
            # Set run count property for all experiments in the result set
            for item in result.items:
                if item.identifier in counts:
                    item.properties[PROPERTY_RUN_COUNT] = counts[item.identifier]
                else:
                    item.properties[PROPERTY_RUN_COUNT] = 0
        return result