<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def find_products(self, product_type):
 """Search for products of a given type. Search through the products declared by this IOTile component and return only those matching the given type. If the product is described by the path to a file, a complete normalized path will be returned. The path could be different depending on whether this IOTile component is in development or release mode. The behavior of this function when filter_products has been called is slightly different based on whether product_type is in LIST_PRODUCTS or not. If product type is in LIST_PRODUCTS, then all matching products are returned if product_type itself was passed. So to get all tilebus_definitions you would call ``filter_products('tilebus_definitions')`` By contrast, other products are filtered product-by-product. So there is no way to filter and get **all libraries**. Instead you pass the specific product names of the libraries that you want to ``filter_products`` and those specific libraries are returned. Passing the literal string ``library`` to ``filter_products`` will not return only the libraries, it will return nothing since no library is named ``library``. Args: product_type (str):
 The type of product that we wish to return. Returns: list of str: The list of all products of the given type. If no such products are found, an empty list will be returned. If filter_products() has been called and the filter does not include this product type, an empty list will be returned. """


        if self.filter_prods and product_type in self.LIST_PRODUCTS and product_type not in self.desired_prods:
            return []

        if product_type in self.LIST_PRODUCTS:
            found_products = self.products.get(product_type, [])
        else:
            found_products = [x[0] for x in self.products.items()
                              if x[1] == product_type and (not self.filter_prods or x[0] in self.desired_prods)]

        found_products = [self._ensure_product_string(x) for x in found_products]

        declaration = self.PATH_PRODUCTS.get(product_type)
        if declaration is not None:
            found_products = [self._process_product_path(x, declaration) for x in found_products]

        return found_products