You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: parallel_process.go
    path of file: ./repos/meshery/server/models/pattern/planner
    
    the code of the file until where you have to start completion: package planner

import (
	"sync"

	"github.com/sirupsen/logrus"
)

// ParallelProcessGraph provides methods for parallel processing of the graph
type ParallelProcessGraph struct {
	Edges map[string][]string

	ParallelProcessGraphNodeMap map[string]*ParallelProcessGraphNode
	wg                          sync.WaitGroup
}

// Para
    
func NewParallelProcessGraph(g *Graph) *ParallelProcessGraph {
	// Create a new parallel process graph
	pg := &ParallelProcessGraph{
		Edges:                       make(map[string][]string),
		ParallelProcessGraphNodeMap: make(map[string]*ParallelProcessGraphNode),
	}

	// Copy the nodes data
	for node, data := range g.Nodes {
		pg.ParallelProcessGraphNodeMap[node] = &ParallelProcessGraphNode{
			Name:        node,
			Data:        data,
			DepUpdateCh: make(chan struct{}, 1),
			DepCancleCh: make(chan struct{}, 1),
			DepCount:    0,
		}
	}

	// Copy the edges data
	for node, adjacentNodes := range g.Edges {
		pg.Edges[node] = adjacentNodes

		for _, aNode := range adjacentNodes {
			pg.ParallelProcessGraphNodeMap[aNode].DepCount++
		}
	}

	return pg
}