==== VARIATION: $match with empty $elemMatch ====
-- INPUTS:
pipeline: [{$match: {'a': {$elemMatch: {}}}}]
metadata: 
	number of partitions: 1
	scan definitions: 
		collection: 
			options: 
			distribution and paths: 
				distribution type: Centralized
				distribution paths: 
			indexes: 
			collection exists: 1
			CE type: (empty)

-- OUTPUT:
Root [{scan_0}]
Filter []
|   EvalFilter []
|   |   Variable [scan_0]
|   PathGet [a]
|   PathArr []
Filter []
|   EvalFilter []
|   |   Variable [scan_0]
|   PathGet [a]
|   PathTraverse [1]
|   PathComposeM []
|   |   PathComposeA []
|   |   |   PathArr []
|   |   PathObj []
|   PathConstant []
|   Const [true]
Scan [collection, {scan_0}]


==== VARIATION: ensure the PathGet and PathTraverse operators interact correctly when $in is under $elemMatch ====
-- INPUTS:
pipeline: [{$match: {'a.b': {$elemMatch: {$in: [1, 2, 3]}}}}]
metadata: 
	number of partitions: 1
	scan definitions: 
		collection: 
			options: 
			distribution and paths: 
				distribution type: Centralized
				distribution paths: 
			indexes: 
			collection exists: 1
			CE type: (empty)

-- OUTPUT:
Root [{scan_0}]
Filter []
|   EvalFilter []
|   |   Variable [scan_0]
|   PathGet [a]
|   PathTraverse [1]
|   PathGet [b]
|   PathComposeM []
|   |   PathArr []
|   PathTraverse [1]
|   PathCompare [EqMember]
|   Const [[1, 2, 3]]
Scan [collection, {scan_0}]


==== VARIATION: $match with value $elemMatch: observe type bracketing in the filter. ====
-- INPUTS:
pipeline: [{$project: {a: {$literal: [1, 2, 3, 4]}}}, {$match: {a: {$elemMatch: {$gte: 2, $lte: 3}}}}]
metadata: 
	number of partitions: 1
	scan definitions: 
		collection: 
			options: 
			distribution and paths: 
				distribution type: Centralized
				distribution paths: 
			indexes: 
			collection exists: 1
			CE type: (empty)

-- OUTPUT:
Root [{combinedProjection_0}]
Filter []
|   EvalFilter []
|   |   Variable [combinedProjection_0]
|   PathGet [a]
|   PathArr []
Filter []
|   EvalFilter []
|   |   Variable [combinedProjection_0]
|   PathGet [a]
|   PathTraverse [1]
|   PathComposeM []
|   |   PathComposeM []
|   |   |   PathCompare [Lt]
|   |   |   Const [""]
|   |   PathCompare [Gte]
|   |   Const [2]
|   PathComposeM []
|   |   PathCompare [Gt]
|   |   Const [nan]
|   PathCompare [Lte]
|   Const [3]
Evaluation [{combinedProjection_0}]
|   EvalPath []
|   |   Variable [scan_0]
|   PathComposeM []
|   |   PathDefault []
|   |   Const [{}]
|   PathComposeM []
|   |   PathField [a]
|   |   PathConstant []
|   |   Variable [projGetPath_0]
|   PathKeep [_id, a]
Evaluation [{projGetPath_0} = Const [[1, 2, 3, 4]]]
Scan [collection, {scan_0}]


==== VARIATION: $match object $elemMatch ====
-- INPUTS:
pipeline: [{$match: {'a': {$elemMatch: {'b': {$eq: 5}}}}}]
metadata: 
	number of partitions: 1
	scan definitions: 
		collection: 
			options: 
			distribution and paths: 
				distribution type: Centralized
				distribution paths: 
			indexes: 
			collection exists: 1
			CE type: (empty)

-- OUTPUT:
Root [{scan_0}]
Filter []
|   EvalFilter []
|   |   Variable [scan_0]
|   PathGet [a]
|   PathArr []
Filter []
|   EvalFilter []
|   |   Variable [scan_0]
|   PathGet [a]
|   PathTraverse [1]
|   PathComposeM []
|   |   PathComposeA []
|   |   |   PathArr []
|   |   PathObj []
|   PathGet [b]
|   PathTraverse [1]
|   PathCompare [Eq]
|   Const [5]
Scan [collection, {scan_0}]


