==== VARIATION: project rename through addFields: since '$z' is a single element, it will be considered a renamed path ====
-- INPUTS:
pipeline: [{$addFields: {a: '$z'}}]
metadata: 
	number of partitions: 1
	scan definitions: 
		collection: 
			options: 
			distribution and paths: 
				distribution type: Centralized
				distribution paths: 
			indexes: 
			collection exists: 1
			CE type: -1

-- OUTPUT:
Root [{combinedProjection_0}]
Evaluation [{combinedProjection_0}]
|   EvalPath []
|   |   Variable [scan_0]
|   PathComposeM []
|   |   PathDefault []
|   |   Const [{}]
|   PathField [a]
|   PathConstant []
|   Variable [projRenamedPath_0]
Evaluation [{projRenamedPath_0}]
|   EvalPath []
|   |   Variable [scan_0]
|   PathGet [z]
|   PathIdentity []
Scan [collection, {scan_0}]


==== VARIATION: project rename: since '$c' is a single element, it will be considered a renamed path ====
-- INPUTS:
pipeline: [{$project: {'a.b': '$c'}}]
metadata: 
	number of partitions: 1
	scan definitions: 
		collection: 
			options: 
			distribution and paths: 
				distribution type: Centralized
				distribution paths: 
			indexes: 
			collection exists: 1
			CE type: -1

-- OUTPUT:
Root [{combinedProjection_0}]
Evaluation [{combinedProjection_0}]
|   EvalPath []
|   |   Variable [scan_0]
|   PathComposeM []
|   |   PathField [a]
|   |   PathTraverse [inf]
|   |   PathComposeM []
|   |   |   PathDefault []
|   |   |   Const [{}]
|   |   PathComposeM []
|   |   |   PathField [b]
|   |   |   PathConstant []
|   |   |   Variable [projRenamedPath_0]
|   |   PathKeep [b]
|   PathKeep [_id, a]
Evaluation [{projRenamedPath_0}]
|   EvalPath []
|   |   Variable [scan_0]
|   PathGet [c]
|   PathIdentity []
Scan [collection, {scan_0}]


==== VARIATION: project rename dotted paths ====
-- INPUTS:
pipeline: [{$project: {'a.b.c': '$x.y.z'}}]
metadata: 
	number of partitions: 1
	scan definitions: 
		collection: 
			options: 
			distribution and paths: 
				distribution type: Centralized
				distribution paths: 
			indexes: 
			collection exists: 1
			CE type: -1

-- OUTPUT:
Root [{combinedProjection_0}]
Evaluation [{combinedProjection_0}]
|   EvalPath []
|   |   Variable [scan_0]
|   PathComposeM []
|   |   PathField [a]
|   |   PathTraverse [inf]
|   |   PathComposeM []
|   |   |   PathField [b]
|   |   |   PathTraverse [inf]
|   |   |   PathComposeM []
|   |   |   |   PathDefault []
|   |   |   |   Const [{}]
|   |   |   PathComposeM []
|   |   |   |   PathField [c]
|   |   |   |   PathConstant []
|   |   |   |   Variable [projGetPath_0]
|   |   |   PathKeep [c]
|   |   PathKeep [b]
|   PathKeep [_id, a]
Evaluation [{projGetPath_0}]
|   EvalPath []
|   |   Variable [scan_0]
|   PathGet [x]
|   PathTraverse [inf]
|   PathGet [y]
|   PathTraverse [inf]
|   PathGet [z]
|   PathIdentity []
Scan [collection, {scan_0}]


==== VARIATION: inclusion project with computed field ====
-- INPUTS:
pipeline: [{$project: {a: {$add: ['$c.d', 2]}, b: 1}}]
metadata: 
	number of partitions: 1
	scan definitions: 
		collection: 
			options: 
			distribution and paths: 
				distribution type: Centralized
				distribution paths: 
			indexes: 
			collection exists: 1
			CE type: -1

-- OUTPUT:
Root [{combinedProjection_0}]
Evaluation [{combinedProjection_0}]
|   EvalPath []
|   |   Variable [scan_0]
|   PathComposeM []
|   |   PathDefault []
|   |   Const [{}]
|   PathComposeM []
|   |   PathField [a]
|   |   PathConstant []
|   |   Variable [projGetPath_0]
|   PathKeep [_id, a, b]
Evaluation [{projGetPath_0}]
|   BinaryOp [Add]
|   |   Const [2]
|   EvalPath []
|   |   Variable [scan_0]
|   PathGet [c]
|   PathTraverse [inf]
|   PathGet [d]
|   PathIdentity []
Scan [collection, {scan_0}]


==== VARIATION: replaceRoot ====
-- INPUTS:
pipeline: [{$replaceRoot: {newRoot: '$a'}}]
metadata: 
	number of partitions: 1
	scan definitions: 
		collection: 
			options: 
			distribution and paths: 
				distribution type: Centralized
				distribution paths: 
			indexes: 
			collection exists: 1
			CE type: -1

-- OUTPUT:
Root [{newRoot_0}]
Evaluation [{newRoot_0}]
|   EvalPath []
|   |   Variable [scan_0]
|   PathGet [a]
|   PathIdentity []
Scan [collection, {scan_0}]


==== VARIATION: $project with computed array ====
-- INPUTS:
pipeline: [{$project: {a: ['$b', '$c']}}]
metadata: 
	number of partitions: 1
	scan definitions: 
		collection: 
			options: 
			distribution and paths: 
				distribution type: Centralized
				distribution paths: 
			indexes: 
			collection exists: 1
			CE type: -1

-- OUTPUT:
Root [{combinedProjection_0}]
Evaluation [{combinedProjection_0}]
|   EvalPath []
|   |   Variable [scan_0]
|   PathComposeM []
|   |   PathDefault []
|   |   Const [{}]
|   PathComposeM []
|   |   PathField [a]
|   |   PathConstant []
|   |   Variable [projGetPath_0]
|   PathKeep [_id, a]
Evaluation [{projGetPath_0}]
|   FunctionCall [newArray]
|   |   EvalPath []
|   |   |   Variable [scan_0]
|   |   PathGet [c]
|   |   PathIdentity []
|   EvalPath []
|   |   Variable [scan_0]
|   PathGet [b]
|   PathIdentity []
Scan [collection, {scan_0}]


