<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_definitions(self, variable, location=None, simplified_graph=True):
 """ Find all definitions of the given variable. :param SimVariable variable: :param bool simplified_graph: True if you just want to search in the simplified graph instead of the normal graph. Usually the simplified graph suffices for finding definitions of register or memory variables. :return: A collection of all variable definitions to the specific variable. :rtype: list """


        if simplified_graph:
            graph = self.simplified_data_graph
        else:
            graph = self.data_graph

        defs = []

        for n in graph.nodes():  # type: ProgramVariable
            if n.variable == variable:
                if location is None:
                    defs.append(n)
                else:
                    # TODO: finish this part
                    if n.location.block_addr == location.block_addr:
                        defs.append(n)

        return defs