def duplicateNodes(self, dagNodesToDupe):
        preSnap = self.dag.snapshot(nodeMetaDict=self.graphicsScene.nodeMetaDict(), connectionMetaDict=self.graphicsScene.connectionMetaDict())
        
        for dagNode in dagNodesToDupe:
            dupedNode = dagNode.duplicate("_Dupe")
            newLocation = self.graphicsScene.drawNode(dagNode).pos() + QtCore.QPointF(20, 20)
            self.dag.addNode(dupedNode)
            self.graphicsScene.addExistingDagNode(dupedNode, newLocation)
        
        currentSnap = self.dag.snapshot(nodeMetaDict=self.graphicsScene.nodeMetaDict(), connectionMetaDict=self.graphicsScene.connectionMetaDict())
        self.undoStack.push(depends_undo_commands.DagAndSceneUndoCommand(preSnap, currentSnap, self.dag, self.graphicsScene))
Create identical copies of the given dag nodes, but drop their 
dataset/ETHPy150Open andrew-gardner/dependsworkflow/depends/depends_main_window.py/MainWindow.duplicateNodes