<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def newick(self):
        '''Newick string conversion starting at this ``Node`` object

        Returns:
            ``str``: Newick string conversion starting at this ``Node`` object
        '''
        node_to_str = dict()
        for node in self.traverse_postorder():
            if node.is_leaf():
                if node.label is None:
                    node_to_str[node] = ''
                else:
                    node_to_str[node] = str(node.label)
            else:
                out = ['(']
                for c in node.children:
                    out.append(node_to_str[c])
                    if c.edge_length is not None:
                        if isinstance(c.edge_length,int):
                            l_str = str(c.edge_length)
                        elif isinstance(c.edge_length,float) and c.edge_length.is_integer():
                            l_str = str(int(c.edge_length))
                        else:
                            l_str = str(c.edge_length)
                        out.append(':%s' % l_str)
                    out.append(',')
                    del node_to_str[c]
                out.pop() # trailing comma
                out.append(')')
                if node.label is not None:
                    out.append(str(node.label))
                node_to_str[node] = ''.join(out)
        return node_to_str[self]