<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def process_market(self, data):
 """ This method is used for post processing of market notifications. It will return instances of either * :class:`bitshares.price.Order` or * :class:`bitshares.price.FilledOrder` or * :class:`bitshares.price.UpdateCallOrder` Also possible are limit order updates (margin calls) """

        for d in data:
            if not d:
                continue
            if isinstance(d, str):
                # Single order has been placed
                log.debug("Calling on_market with Order()")
                self.on_market(Order(d, blockchain_instance=self.blockchain))
                continue
            elif isinstance(d, dict):
                d = [d]

            # Orders have been matched
            for p in d:
                if not isinstance(p, list):
                    p = [p]
                for i in p:
                    if isinstance(i, dict):
                        if "pays" in i and "receives" in i:
                            self.on_market(
                                FilledOrder(i, blockchain_instance=self.blockchain)
                            )
                        elif "for_sale" in i and "sell_price" in i:
                            self.on_market(
                                Order(i, blockchain_instance=self.blockchain)
                            )
                        elif "collateral" in i and "call_price" in i:
                            self.on_market(
                                UpdateCallOrder(i, blockchain_instance=self.blockchain)
                            )
                        else:
                            if i:
                                log.error("Unknown market update type: %s" % i)