def node_slider(self, seed=None):
<EOL>prop = <NUM_LIT><EOL>assert isinstance(prop, float), "<STR_LIT>"<EOL>assert prop < <NUM_LIT:1>, "<STR_LIT>"<EOL>random.seed(seed)<EOL>ctree = self._ttree.copy()<EOL>for node in ctree.treenode.traverse():<EOL><INDENT>if node.up and node.children:<EOL><INDENT>minjit = max([i.dist for i in node.children]) * prop<EOL>maxjit = (node.up.height * prop) - node.height<EOL>newheight = random.uniform(-minjit, maxjit)<EOL>for child in node.children:<EOL><INDENT>child.dist += newheight<EOL><DEDENT>node.dist -= newheight<EOL><DEDENT><DEDENT>ctree._coords.update()<EOL>return ctree<EOL>
Returns a toytree copy with node heights modified while retaining 
the same topology but not necessarily node branching order. 
Node heights are moved up or down uniformly between their parent 
and highest child node heights in 'levelorder' from root to tips.
The total tree height is retained at 1.0, only relative edge
lengths change.