whole_func_string: function getChildPropsOnEnter(animate, data, enteringNodes, cb) {
    // Whether or not _this_ child has entering nodes, we want the entering-
    // transition for all children to have the same duration, delay, etc.
    const onEnter = animate && animate.onEnter;
    animate = assign({}, animate, onEnter);
  
    if (enteringNodes) {
      // Old nodes have been transitioned to their new values, and the
      // domain should encompass the nodes that will now enter. So perform
      // the `onEnter.after` transformation on each node.
      animate.onEnd = cb;
      const after = animate.onEnter && animate.onEnter.after ? animate.onEnter.after : identity;
      data = data.map((datum, idx) => {
        const key = getDatumKey(datum, idx);
        return enteringNodes[key] ? assign({}, datum, after(datum, idx, data)) : datum;
      });
    }
    return { animate, data };
  }
func_code_string: function getChildPropsOnEnter(animate, data, enteringNodes, cb) {
    // Whether or not _this_ child has entering nodes, we want the entering-
    // transition for all children to have the same duration, delay, etc.
    const onEnter = animate && animate.onEnter;
    animate = assign({}, animate, onEnter);
  
    if (enteringNodes) {
      // Old nodes have been transitioned to their new values, and the
      // domain should encompass the nodes that will now enter. So perform
      // the `onEnter.after` transformation on each node.
      animate.onEnd = cb;
      const after = animate.onEnter && animate.onEnter.after ? animate.onEnter.after : identity;
      data = data.map((datum, idx) => {
        const key = getDatumKey(datum, idx);
        return enteringNodes[key] ? assign({}, datum, after(datum, idx, data)) : datum;
      });
    }
    return { animate, data };
  }
func_documentation_string: eslint-disable-next-line max-params, max-len